#archived-modding-development

1 messages · Page 498 of 1

potent dirge
#

Update: I managed to build and somehow it assigned the correct length to the reading of resources, I don't remember changing anything but a print(literally everything from the stream) and I am wholly confused ax2uWide3

potent dirge
#

.. Omfg I'm in bed, just realised: I changed the "name" of a thing. The name being just a string so the compiler didn't actually check that. Yltsi

merry tendon
#

Hello guys. You have probably heard this question MAAANY times but I would like to know how I can create my own mods. I also want to know if it uses C# since I heard this game is made with Unity. I have lots of experience with Unity and I'd love to be able to code my own mods. Thank you

floral furnace
merry tendon
#

Thank you bro

jaunty tartan
#

Im probably blind but I checked the pinned messages for the hollow point mod and i couldn't find it, could someone send it here?

ornate rivet
#

modinstaller -> hollow point

grizzled lava
#

Idea for item randomizer

#

Make walking an item

#

You can only jump until you find it

proven cipher
#

No

grizzled lava
#

(Cursed mode exclusive)

grizzled lava
gilded lotus
#

Idea for Elijah
don't shitpost in modding-development FrogChamp

grizzled lava
#

It’s an idea

#

I’m trying to submit it

gilded lotus
#

as you can see at the top of the screen this channel is for the development of mods

grizzled lava
#

Exactly

#

I went to the source

gilded lotus
#

ok so you're just shitposting

ornate rivet
grizzled lava
#

Oh you’re a mod

#

Explains the attitude

#

Ok bye

jolly oriole
#

lol imagine trying to roast the orange men

vocal spire
#

lol

#

Orange man invincible

fair rampart
#

Orange man good

nocturne meteor
#

Alright, I'm kind'a slow.

I'm using FSMViewers, and I'm trying to find out what sounds are available (let's say, for example, sly's voice). There's a few mods that make references to the PlayMaker location [https://github.com/Kerr1291/BoopSoundMod/blob/master/BoopSoundMod/BoopSoundMod.cs#L212, eg.] but I'm not sure how to find a list of these (or even where one would be) in FSMViewer. Can anyone point me in a direction?

(I did read the radiance api article; it uses a number of state names like "Distance Fly" or "Fire Dribble" or whatever, but I'm not where where these are coming from.)

ornate rivet
#

you click on the state and it lists the actions

#

In the link you send, the action was AudioPlayerOneShotSingle which plays a sound once

#

In the picture I sent, the state selected is "In Range" and the actions it has are "ShowPromptMarker", "Trigger2dEvent", etc

#

"Distance Fly" and "Fire Dribble" are state names

nocturne meteor
#

Ahh, okay, that makes sense! For audio, is there an indication of what audio is used where in this?

ornate rivet
#

not quite sure what you mean but I believe the FSM Viewer doesn't show the audio clip names unfortunately

vocal spire
#

I believe clips is a property of it(?) AudioClip array

ornate rivet
#

it might in the latest version

nocturne meteor
#

Sorry, sorry: for example, like, if I wanted to find what "Sly_Talking" was called, or whatever, or even the sound of the nail, I'm not sure where to find those audio file names.

#

I don't think it lists them in FSM, unless I've been really unlucky with all the things I clicked around on, you're right.

ornate rivet
#
foreach (var i in FindObjectsOfType<AudioClip>().Where(x => x.name == "Sly_Talking")
{
 // do stuff with your audio clip
}
#

that could work

#

if the scene you are in has the audioclip you want loaded

nocturne meteor
#

Okay, is there a way to list of the AudioClips? I don't actually know what things would be called, Sly_Talking was just an example that prob doesn't exist, haha.

ornate rivet
#

or you could do trial and error and figure out what audioclip the fsm is playing by printing its name into the log

#

I usually just figure out the names by logging

vocal spire
#

Or you could use utiny ripper and find the references to them

ornate rivet
#

Asset Studio would be faster than utiny ripper I think

nocturne meteor
#

Oh, interesting. I have not used the unity ripper yet. It might be easier for me to figure out how to log them first since I know exactly what I want and exactly where in the game to find it, haha.

#

Okay, I'm gonna try out assetstudio since there's a bunch of hits for that in the discord. Thanks y'all!

dark wigeon
#

ah sorry the new fsm viewer shows the audio clip names and stuff

#

it's currently in a private repo at the moment

dark wigeon
nocturne meteor
#

Oh, that's neat! Is there a build for it, or is it still in dev?

#

No rush, I was able to mess around with a few other things and figure out what I needed, but I'm sure this'll be useful in the future. :']

jolly oriole
nova ivy
#

Anybody got the hollow point download file?

copper nacelle
#

oml

#

Does this look like modding help to you

nova ivy
#

yes

copper nacelle
#

I'm sorry to hear that

vocal spire
#

Bruh

pallid nacelle
#

Just curious, but is there any kind of guide to making your own custom skins (like which sprites are what/which are important)?

deep wave
#

if you look in the pins there is a link to how to dump sprites and repack them

#

you end up with a folder of folders, each containing a bunch of sprites relating to an animation, named accordingly

elder flax
#

Is there a way to mod dialogue or even create an NPC? I've checked the api but the only reference to it was that it would bloat the document. Is there a way to do this?

copper nacelle
#

LanguageGetHook

dark wigeon
#

also linux builds for everyone yay

jolly jungle
#

Changing lore tablets, how easy will it be?

#

I'm assuming relatively easy

#

But I'd like to know how one would go about doing it

jolly oriole
#

as easy as to listen to their language string, then returning your own message

jolly jungle
#

Listen?

#

Like, wait for it to appear?

jolly oriole
jolly jungle
#

Ah, thanks

#

So it'll be just like translating

jolly oriole
#

yea

vocal spire
jolly jungle
#

Wait you used Zote as a basis for that?

elder flax
#

Thats cool

elder flax
vocal spire
jolly jungle
#

Aight, thanks

#

Should I take normal Physics too?

#

Wait where do I find them

#

Is this what I need?

ornate rivet
#

yea

jolly jungle
#

Thanks

#

Anyways I think I'll take a short break from this, do a few minor mod stuff instead in the meantime

#

Just some fun text here and there

jolly jungle
vocal spire
#

keep it from Aim L/R I guess

jolly jungle
#

Just save it?

vocal spire
#

?

jolly jungle
#

Just like, save it in some var

vocal spire
#

yeah

jolly jungle
#

Cool, thanks

#

Makes sense

jolly jungle
#

Well

#

I got super close today to finishing my first altered attack

#

(I don't call speeding up attacks altering them)

vocal spire
#

how do I add health managers to a boss scene controller?

#

just adding the one I want one in bosses variable and increasing the bossesLeft variable doesn't seem to make it require both defeated

pure nova
#

Does Hollow Knight have a minimum jump height?

#

I tried checking via dnSpy but I'm bad at reading.

leaden hedge
#
    private void JumpReleased()
    {
        if (this.rb2d.velocity.y > 0f && this.jumped_steps >= this.JUMP_STEPS_MIN && !this.inAcid && !this.cState.shroomBouncing)
        {
            if (this.jumpReleaseQueueingEnabled)
            {
                if (this.jumpReleaseQueuing && this.jumpReleaseQueueSteps <= 0)
                {
                    this.rb2d.velocity = new Vector2(this.rb2d.velocity.x, 0f);
                    this.CancelJump();
                }
            }
            else
            {
                this.rb2d.velocity = new Vector2(this.rb2d.velocity.x, 0f);
                this.CancelJump();
            }
        }
        this.jumpQueuing = false;
        this.doubleJumpQueuing = false;
        if (this.cState.swimming)
        {
            this.cState.swimming = false;
        }
    }
#

this.jumped_steps >= this.JUMP_STEPS_MIN

pure nova
#

Thanks.

copper nacelle
#

@jolly oriole why are you yeeting uhkp

leaden hedge
#

i dont even know what a uhkp is
but what the FUCK
i cant believe you'd do this

jolly oriole
copper nacelle
#

I mean it's not super well used but there are bugs that it fixes

jolly oriole
copper nacelle
#

this ain't it

#

the radiance bug definitely still happens

#

and the sharp shadow thing is like really old

jolly jungle
jolly oriole
#

the commit message

hazy aspen
#

Hi, guys!
I have a question. Are you aware of any mod that totally disables Depth of Field (background blur effect) in Hollow Knight? I mean specifically a simple fix that doesn't require an NVidia graphics card to work (like this one does: https://helixmod.blogspot.com/2017/06/hollow-knight.html) and was designed mainly with disabling DoF in mind.
And if such mod doesn't exist, I'm curious how difficult it would be to create?
I'm curious how much of a performance impact this effect has for integrated Intel HD Graphics 4600, and if disabling it totally could massively improve performance for low-end users.
Thanks!

jolly oriole
#

afaik no such mod exists, but it should be as simple as deleting the blur from a scene when the scene is loaded and for the depth of field, i saw the camera has a setting for something like that, so maybe it's done with setting that to 0

shell fern
#

can someone help me with jump

#

its infinite

#

And isgrounded dosnt work /w tilemap

leaden hedge
#

dont program it to be infinite

shell fern
#

k

jolly jungle
#

anyone knows why spikes I spawn when he teleports from the left always go in a vertically flipped direction from where they're aimed at?

#

I'd like to note this is only when he teleports from the left

#

From the right works fine

#

@ me when you answer

copper nacelle
#

have you considered showing your code

jolly jungle
#

forgive the mess, all the comments are different things I did to try and isolate it

vocal spire
jolly jungle
#

Wait but why does it work when the Hive Knight comes in from the right?

vocal spire
#

think about how rotation works

jolly jungle
#

Also, I base the rotation on the parent, and add my own script to it to move it

#

Wait I'm an idiot

#

Holdup

vocal spire
#

lol

jolly jungle
#

It is moving in the correct direction

vocal spire
#

yeah

jolly jungle
#

it's just not looking in the right direction

vocal spire
#

think about how rotation works again

#

it appears you are rotating it to face in the right direction

jolly jungle
#

But what does Buzzbo's direction do to it?

vocal spire
jolly jungle
#

Yep

#

Anyways, I'll try the scaling you mentioned

#

I'll make it happen only from the left

#

yeah?

vocal spire
#

k

#

I don't have all the code but here is my guess

#

brb gonna edit it in paint 3d

jolly jungle
#

Cool, thanks

#

I'll brb too

deep wave
vocal spire
#

yeah

leaden hedge
#

what does your movement code do

jolly jungle
#

(1, -1, 1) should work, right?

jolly jungle
#

thats it

#

I basically just copied off what you sent here a couple days ago

vocal spire
#

this looks like a mess

leaden hedge
#
void Update(){
  move in a single direction
}

?

vocal spire
#

lol

jolly jungle
vocal spire
# vocal spire

from the code I put, it appears you are rotating it. I have rotated the image facing right, and from all rotations.

#

so when it's facing left do a like reverse of how you got the original position or something

jolly jungle
vocal spire
#

anyway time to finish the uuwuu update

#

?

jolly jungle
#

just to compare

#

oh no I forgot to zoom

#

anyways

leaden hedge
#

what

jolly jungle
#

It's going in the right direction

leaden hedge
#

obviously you're flipping it horizontally

vocal spire
#

ohhhh don't change the rotation I guess

#

just change where you spawn it

jolly jungle
leaden hedge
#

no

jolly jungle
leaden hedge
#

obviously the rotation is based off the direction the hive knight is facing

jolly jungle
#

I spawn it centered on Hive Knight

vocal spire
#

but how do you position it to the lines showed

leaden hedge
#

transform.SetParent is probably flipping it

#

if the parent is flipped horizontally

jolly jungle
#

So do I just need to 180 the y rotation?

#

in the flipped case?

jolly jungle
vocal spire
#

in the lines you showed before

jolly jungle
#

Yeah?

leaden hedge
#

unparent it

leaden hedge
#

ignore that line completely

jolly jungle
leaden hedge
#

and just set localposition to the hiveknights position

jolly jungle
#

ooh, that's a brilliant idea
and a very simple one
that would not have occurred to me for at least another week

#

thanks

#

let's find out

#

Eyy, it works now

#

Thanks @leaden hedge

vocal spire
#

yay

jolly jungle
#

you too, red

#

:D

#

Now to set all the spikes in their correct rotation and I'm pretty much done with this attack

vocal spire
#

cool

#

gtg

jolly jungle
#

ciao

#

IT WORKS

#

PERFECTLY

steel badger
#

So I made The Knight wearing a Bandana

steel badger
#

Here it is

#

What do you guys think?

vocal spire
steel badger
#

Right

#

Sorry

potent dirge
#

Does anyone have any tips for handling submenu inputs and timeout if too long passes?
f.ex input in 0-9 range, if q: exit, if say 8 seconds: exit, and keeping status for whether it was 0-9 was chosen or one of the other exits?

#

So far I've looked at coroutines for attempting it, and found some stuff on async waits as an alternative for coros when return values are wanted

jolly jungle
#

Can anyone help me figure out if Hive Knight's leap is always a constant amount of time?

potent dirge
#

I don't have fsm viewer atm, but shouldn't that be visible in the fsm? @jolly jungle

vocal spire
jolly jungle
#

Aight, thanks

proven cipher
#

<@&283547423706447872>

remote zealot
#

ty

proven cipher
#

No, thank you

vocal spire
#

What was it

proven cipher
#

Just spam

nocturne meteor
#

Haha, what the hell is this. Also, to make my message on-topic: what mods are allowed to be on the installer? Is it a PR-into-it kind of thing?

copper nacelle
#

just pr modlinks really

shrewd minnow
#

Okay I have UABE but I don't know how to actually extract in-game sound files. Can someone quikcly help me through this? Also, do I have to open every single in-game file for these tracks, or just a select few?

shrewd minnow
#

Does anyone know this? I figured that you guys would know the most about this.

dark wigeon
#

I mean you just have to sort of look through the shared assets files and find an AudioClip you can export with the audio export plugin

#

But assetstudio might be easier since you can open the entire folder at once, filter asset types to just audioclips, and preview without exporting

shrewd minnow
#

I'll try that and report back on what I find. Thank you.

worn eagle
#

and yes, I know there's a memory leak somewhere

leaden hedge
#

oh if someone else is rewriting it

#

you can implement something useful so i dont have to

worn eagle
#

what's up

leaden hedge
#

the jsons are different between patches

#

it'd be very nice to be able to load a 1432 spritesheet with a 1432 json

#

but save it according to a 1221 or whatever json

worn eagle
#

is that why there's a difference between v1.2 and v1.3 of GODump or is this something else?

leaden hedge
#

this is something else i think

#

the json is the thing that just defines where the sprites are on the atlas

worn eagle
#

interesting

leaden hedge
#

it also complains like 500 times, because 1221 has different duplicate sprites

#

but yeah then it'd let people doing speedruns on 1221, like races and stuff

#

use current patch customknights

worn eagle
#

I'll see what I can do, haven't touched packing yet so idk if C++ will play nicely with me on that front

mystic umbra
#

How does the modding for Hollow Knight work? Are you injecting assembly into the DLLs or are you disassembling the exe and writing in C# or are you doing something else?

copper nacelle
#

patch in some classes and methods which replace and add to the assembly

#

for the api itself

#

the api itself then just loads the mod assemblies which can change methods using the hooks given by the api or using the hooks given by monomod's runtime detour

mystic umbra
#

So the code I provide to monomod is the assemblies of some C# code then?

#

I found the radiance.host link in the pins. Thanks for the info @copper nacelle!

jolly jungle
#

Aight

#

Slightly stupid question

#

How do I figure out what direction hive knight is facing when I don't have something as generous as the fsm telling me it's left/right?

worn eagle
#

gameObject.transform.localScale.x

#

forgot which way was which

jolly jungle
#

you sure?

#

Does it really just flip the x scale?

jolly oriole
#

yes

jolly jungle
#

Cool, thanks 👌

#

that means I can rid myself of an annoying variable

#

or at least generalise it

#

thanks @worn eagle

#

you too, grenade

worn eagle
#

np

vocal spire
#

I have been asked to ask if there is a way to stop the scene manager from changing the colors of a scene

jolly oriole
#

not having one would be one way to not change color correction

vocal spire
#

great idea

jolly oriole
#

another one would be to have the color correction curves as linear from 0,0 to 1,1

vocal spire
#

ok

jolly oriole
#

ig it's for sanctuary

#

in that case the linear curves are the way to have the scene look as close as possible to the view in unity

vocal spire
#

ok

jolly oriole
#

there aren't many mods that utilize custom scenes

ornate rivet
#

this is betrayal redfrog

jolly oriole
#

the only other playmaker dude is getting kicked out of pale court grubthink

hexed violet
#

oh

#

may i ask why??

ornate rivet
#

I didn't say what the punishment for betrayal was, smd

worn eagle
#

The punishment for betrayal is syd? 😳

ornate rivet
#

yes

lapis stratus
#

Is there a mod I can look at for an example of how to modify the quick/world maps? I know how to edit pins but would like to be able to make room-related changes to it

jolly oriole
#

not currently

#

wait nvm

#

just pushed new code again

lapis stratus
#

Oh sweet, thanks much! That looks to be exactly what I am attempting to do, which is adding White Palace and also other interior areas.

vocal spire
potent dirge
#

I might've messed up a thing or two; is vanilla max mp 99 or 100? ax2uHmm

copper nacelle
#

99 afaik

potent dirge
#

yea, thats what i thought. Also found an older PlayerData where its 99. Weird that nothing stopped maxMP in the playerinstance from going 1 up 🥴

#

might be because i died and killed the shade (that dead piece of code I asked about earlier) ax2uHappy

worn eagle
#

got the sprite packing working, with the program peaking at ~100 MB while the WPF version peaks at 300

#

pack time for Knight.png is also cut from 32 seconds to 15 feelspkman

#

in release mode it's 4 seconds omegamarmu

potent dirge
#

Anyone have any specific tips for performance testing mods? ax2uHmm

deep wave
#

if you run it and you have 3fps you probably messed up somewhere

potent dirge
#

What if I had 3fps before that as well

deep wave
#

you messed up elsewhere

potent dirge
#

But I'm assuming no actual tools or anything to help, then paxitiPeek

deep wave
#

set breakpoints on each update and count the ms to reach each breakpoint in debug feelspkman

#

you might be able to grab the unity profiler but not sure how/if that works outside of unity studio

leaden hedge
#

you'll only really be able to do your own profiling

#

personally i'd just test it outside of the scope of hollow knight

#

if something runs at 0.1ms outside of hollow knight it should be fine inside and any lag isn't your fault FeelsOkayMan

ember bone
#

hi is there a general guide anywhere for how to get started making a mod? I looked in the pinned messages and didn't really understand them so if it was listed there, sorry

deep wave
ember bone
#

thank you

worn eagle
#

why did wilbo rename NA Charge Effect to NA Charge

#

these frame numbers are fucked

jolly jungle
#

Damnit, I missed all the fun

#

Anyways

#

Anyone knows how this reaches the Globs?
I created another glob (copied one of them) and placed it as a sibling to the others, but it seems like this FIRE event doesn't reach it

jolly jungle
#

How do I make Hive Knight's DNail dialogue be a specific thing only when stunned?

#

Also, how do I generally recognize when Hive Knight is struck?

jolly jungle
jolly jungle
#

Yep, I did it

vocal spire
tawny onyx
#

is EnemyRandomizer still developing? I search the source code in github, but can just find a three years old version(0.2.x). but in the ModInstaller, the latest verion is 0.3.2.

jolly jungle
#

All three of the originals are children of Globs

leaden hedge
#

have you looked at the parents fsm

#

its might have a list of children cached

#

because looking everytime is slow af

jolly jungle
leaden hedge
#

it looks for 3 random ones

jolly jungle
#

Hm

#

So I just need to add a fourth state there?

leaden hedge
#

i would just make my own action

lapis stratus
jolly jungle
#

I'm not sure how this works

#

Oh wait

#

I'm dumb

leaden hedge
#

just make a playmaker action called "SendEventToAllChildren"
copy the code that SendEventByName does, but do it for a list of all children instead of one gameobject

tawny onyx
#

i am planning to steal some code

#

lmao

lapis stratus
#

It's TheGreatGallus

tawny onyx
#

thanks

leaden hedge
#

although i'd personally just remove all the SendEventsByName, and a new FsmAction that just ignores all fsm stuff

#

and just finds all glob-control fsms and move them into the tween up state

lapis stratus
#

No problem. If you have questions about what's going on with any of it, feel free to message me. Can't guarantee I'll know what the code in question does (I've mainly just fixed compatibility and some of the quirks), but I might be able to help out

tawny onyx
#

the annoying things is that tons of enemies can't simply spawn in other area(especially bosses), so I am investigating how your guys fix them

ornate rivet
#

sometimes you need to set the state of the fsm for it to startup

tawny onyx
#

TC just match the certain coordinate for their bosses

ornate rivet
#

yea that too

#

that's not the case for enemies though which is what I thought you were referring to

lapis stratus
#

Bosses are very fussy. I have suspicions based on the way that they currently act in ER that there's a few hardcoded position values in their AI which interferes with putting them in other spots. It's something I need to dive into at some point to fix ER stuff, but haven't gotten around to

tawny onyx
#

for example, the pure vessel, the value "Plume Y" is just fit for that room

lapis stratus
#

If you do plan to put bosses in other rooms, be mindful of their roar. If you don't make adjustments to it in situations where they activate on player transition, it can push the player immediately out of the door and prevent access to said room

copper nacelle
#

or oob

lapis stratus
#

That too

tawny onyx
#

do you mean the roar will push player ouside of the doors?

lapis stratus
#

ER has a workaround in it that just skips the roar state. I originally wanted to just disable the push/stun effect so that the player could still see the roar visual effect, but it was easier to just disable it at the time and look into that later

#

Yeah. The roar has a stun and slight pushback, so if the roar occurs as the player enters a room, they'll stun inside the transition and be pushed back through it or out of bounds

tawny onyx
#

what does ER mean?

lapis stratus
#

Enemy Randomizer

#

Just something to keep in mind if you encounter that sort of behavior with whatever you are trying to do ^_^

tawny onyx
#

disable bossse roar is no that easy than disable knight accepting roar logic

#

lol

lapis stratus
#

shrugs Was the only workaround I knew how to do at the time. Might be able to come up with something better now, but it works

tawny onyx
jolly jungle
#

pffft

#

is it really that simple?

lapis stratus
#

Heh, yeah. I mean, it works XD

jolly jungle
#

Nice

#

you mean where the Knight kneels and is pushed a bit back if too close?

lapis stratus
#

Just tells it to go to Roar End when it wants to Roar at the start

#

Yeah, that effect

tawny onyx
#

a easier way

vocal spire
#

Wouldn’t destroying it cause stuff to have null references?

lapis stratus
#

I'll jot it down for later updates (whenever I get around to it again). Does this have any impact on stuns from mid-battle roars?

vocal spire
#

It probably does

tawny onyx
vocal spire
#

K

tawny onyx
#

also, you can remove this action. it is the reason why player will be push

lapis stratus
#

Cool. Thanks for the info. I might be able to come up with a better fix for the issue in the future with that

worn eagle
#

well, as "up to date" as it gets

young walrus
#

don't think so

#

the 1221 version with save states is in that channel

worn eagle
#

maybe I downpatched incorrectly

potent dirge
#

Can you post the relevant error? I'm on phone so viewing .text is 🥴

worn eagle
#

the entire modlog's pretty short so I'll post the whole thing

[INFO]:[ModManager] - Initializing
[INFO]:[ModManager] - Initialized
[ERROR]:Failed to fetch url with error: 
System.Net.WebException: Error getting response stream (Write: The authentication or decryption has failed.): SendFailure ---> System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: The authentication or decryption has failed.
  at Mono.Security.Protocol.Tls.RecordProtocol.ProcessAlert (AlertLevel alertLevel, AlertDescription alertDesc) [0x00000] in <filename unknown>:0 
  at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
  at System.Net.HttpWebRequest.GetResponse () [0x00000] in <filename unknown>:0 
  at System.Net.WebClient.GetWebResponse (System.Net.WebRequest request) [0x00000] in <filename unknown>:0 
  at System.Net.WebClient.DownloadDataCore (System.Uri address, System.Object userToken) [0x00000] in <filename unknown>:0 
[ERROR]:[API] - Couldn't check for new version.System.IndexOutOfRangeException: Array index is out of range.
  at Modding.ModHooks..ctor () [0x00000] in <filename unknown>:0 
[INFO]:GameLoading
[INFO]:[API] - Trying to load mods
[INFO]:Saving Global Settings
[INFO]:Saving Global Settings```
potent dirge
#

Oh wait yea ignore that one. Its bc TLS 1.1/1.2 is dead, and that's what the api uses

#

It just means it can't check if mods are outdated or not

#

(or it TLS 1.0/1.1, numbers are hard. Either way deprecated and no longer usable)

jolly oriole
#

1.0 is dead

worn eagle
#

then there's a different reason why customknight 1.2.0 isn't working...

#

unless it's just broken on this patch

potent dirge
#

I kinda think it's mostly just no mods on 1221

#

Everyone migrated to CP

worn eagle
#

I just wanna see how my spritepacker works pepogrub

potent dirge
#

Imagine if anything 1221 was ever simple pepogrub

fair rampart
#

I just beat the game with my audio program alone 😄 Not sure if this is the right place to put it, but it seems to have a mix of programming and toying around with HK, so I'll put it here. If this is the wrong place I'll remove it https://www.youtube.com/watch?v=HwN5ttEm7nc

In this video I will explain how I played hollow knight using nothing but sounds. No keyboards, mice or controllers required.

For this I used the following python program that I developed: https://github.com/chaosparrot/parrot.py

This video was edited using VSDC Free Video Editor. I apologize for the bad recording audio at times, this was m...

▶ Play video
pallid nacelle
#

watched the first bit, pretty cool.

pallid nacelle
#

the final boss: going brrrrrr long enough to absorb the infection from thk.

vocal spire
#

Brrrrrrrrrrrrrrrrrrr

pallid nacelle
#

Radiance: you can't contain me
Knight: haha brrr go brrrr

worn eagle
#

do coroutines behave differently in 1221 vs 1432? they're exiting without warning for me

potent dirge
#

I've no clue how they work in 1432, but how are you instantiating them?

worn eagle
#

GameManager.instance.StartCoroutine in the mod class and StartCoroutine in a monobehaviour

floral summit
#

What are you talking about?

potent dirge
#

I honestly ended up just using the gamemanager.instance.etcetc everywhere bc I gave up trying to have the monobehaviour keep it alive

#

No clue how inefficient that might be, but at least it let's my coroutine live

glass thorn
#

What's the easiest way of introducing a delay before an action in a FSM?

vocal spire
#

there's probably a better way than this, but putting a state in between the target state and the state(s) before it with a Wait action works

glass thorn
#

It doesn't work if the Wait is in the state before it?

vocal spire
#

it does

#

it just depends on how the transitions on that state work

glass thorn
#

weird. I tried that (using 2 states that already exist) and it doesn't seem to work

vocal spire
#

how do the transitions on those states work

ornate rivet
#

best option is to disable the fsm, wait, then reenable the fsm and set the state

glass thorn
#
    transition FINISHED -> End
[...]
    action HutongGames.PlayMaker.Actions.Wait
        HutongGames.PlayMaker.FsmFloat time =  = 1
        FsmEvent finishEvent = FINISHED global: False
        System.Boolean realTime = False
        System.Single startTime = 0
        System.Single timer = 0
#

State: End

vocal spire
#

so what are you doing?

#

are you increasing the time for the wait action

jolly oriole
#

oh fsms, i'm not good with those

glass thorn
#

I wasn't increasing the time for the wait at all, just putting the action I want to delay on state "End"

#

Is the wait not measured in seconds?

worn eagle
vocal spire
#

idk

#

could some sprites be bigger or smaller between versions?

shrewd minnow
#

Okay so I got around to dpwnloading AssetStudio, but I don't know how to open AssetStudio. The README doesn't tell me either.

#

Okay so I got around to downloading AssetStudio, but I can't figure out how to actually open it. The Readme doesn't help me with this.

copper nacelle
#

what

#

did you download the release bro

shrewd minnow
#

I downloaded it from github

copper nacelle
#

no

shrewd minnow
#

Oh

#

Oops

#

My b

copper nacelle
#

go to the releases tab

#

which is on the github page on the right side

shrewd minnow
#

So if I want to obtain the sound files, I select Extract, right?

copper nacelle
#

you click open and select the assets and then get the sounds you want and then extract or w/e

shrewd minnow
#

Open?

#

Okay so I can now play specific audio files if I find them manually. Is there a place where all music files are stored?

#

I can filter by Audioclip but that's it.

copper nacelle
#

no

shrewd minnow
#

I have to search each individual level file?

copper nacelle
#

you can select more than one at once

#

(all of them)

shrewd minnow
#

I loaded all of the files into one tree

#

That's not the issue though

#

Oh wait the Filter Type makes this easier

copper nacelle
#

you just use the list and then go by audio clip

#

beyond that there's nothing else though really

dark wigeon
#

Pretty sure there is even an open folder option

copper nacelle
#

ye

shrewd minnow
#

Okay I may have gotten it

#

I exported every audio file

#

Now I just have to sort

shrewd minnow
#

I think that this resolves my issue.

#

I'm busy atm but I hope the files have loopstart and loopend tags

steel badger
high saddle
#

send me all of those NOW :gunL

languid goblet
#

...that's from 2019 lmao

#

they're not even in the server anymore

vocal spire
#

oh yeah pixel knight

high saddle
#

oh

copper nacelle
#

questionable

#

you can decrease the size of your window and then alt-enter to get a similar effect fwiw

high saddle
copper nacelle
#

or at least you used to be able to

#

bro

#

october of 2019

high saddle
#

yeah

copper nacelle
#

15 months ago

#

it is 2021

high saddle
#

in january

#

oh wait

#

that

#

went over my head

copper nacelle
#

:monkahmm:

high saddle
#

damn

#

😭

safe hamlet
#

me when i forget an entire year

copper nacelle
tawny onyx
#

lmao

nocturne meteor
#

Q: Is AssemblyInfo.cs the appropriate place to version your mod?

nocturne meteor
#

Ah, okay, it looks like there's a "GetVersion" override, this looks to be what I need to use.

leaden hedge
#

you can just make your GetVersion return your assembly info

nocturne meteor
#

Oh, dang, okay, I'll look that up. :''']

leaden hedge
#

public override string GetVersion() => Assembly.GetExecutingAssembly().GetName().Version.ToString();

nocturne meteor
leaden hedge
#

you can also make your assembly version auto increment

nocturne meteor
#

Yeah, I just saw that! It's v exciting. I had to put off determinism, but I didn't know what that did anyway, so ---

potent dirge
#

gl on that

leaden hedge
proven cipher
#

@leaden hedge if you wouldn't mind a second attempt...

jolly oriole
#

it certainly is

charred yew
#

Stop

jolly jungle
#

How does the color change in Absolute Inferno King Grimm work?

jolly oriole
#

looks like it does that using some _HueShift floats on materials

jolly jungle
#

I'll check it out, I guess

#

thanks

ancient aurora
#

I wonder if i can make a mod too make pure vessle even harder

jolly oriole
young saddle
ancient aurora
#

Oh no

jolly jungle
#

Aight, I want to give a boss some HP shenanigans. What's the best way to track changes and such, to figure out best how to balance? The HP Bar mod?

vocal spire
jolly jungle
#

Come again?

uncut onyx
#

I'm looking into moss knight behavior. Found "Moss Knight B-Moss Knight Control" using FSM viewer. "Initialise" state finds a child called "Evade Range" which should be an object of type AlertRange, which keeps track of whether the hero is inside a list of colliders. How can I find what those colliders are?

#

something has to create this evade range and add it as a child of the moss knight (which I think is just a Walker), but I haven't been able to find it in IL or FSM

leaden hedge
#

no

#

its just in the scene

uncut onyx
#

how do I look at the scene?

dark wigeon
#

and alertrange just gets all colliders on the gameobject

sage holly
#

@dark wigeon can you send me yor lastest ssdeav build?

dark wigeon
#

version on github not working?

sage holly
#

I just forget how to search it in github sorry

dark wigeon
sage holly
#

thanks

uncut onyx
nocturne meteor
#

Another C# question. I'm trying to have my mod thing spit out things into a debug log. I'm trying to use Tracer and tried to a) define it in the constructor (?? i'm still new at this, i think that's the constructor) and use it below, but it does not seem to make any files or write anything out.

If anyone has a second: https://github.com/jsal13/HKRDreamCatcher/blob/logging_debug/Mod/websocket.cs#L23-L24

(Usage example on 429. And yes, I need to put that long-ass dictionary into another file.)

worn eagle
copper nacelle
#

might want to try just specifying the path in the constructor for TextWriterTraceListener

nocturne meteor
#

I'll try it out, thanks! :']

ornate rivet
#

how come when I fade out the white blanker, only the center of the screen fades out

jolly oriole
#

using this?

GameObject.Find("Blanker White").LocateMyFSM("Blanker Control").SendEvent("FADE OUT");
#

brb eating

ornate rivet
#

yea

jolly oriole
#

Hm, maybe try delaying that by a frame

ornate rivet
#

I do

jolly oriole
#

Hm

jolly oriole
#

try having

GameObject.Find("Blanker White").LocateMyFSM("Blanker Control").SendEvent("FADE OUT");
EventRegister.SendEvent("GG TRANSITION IN");
BossSceneController.Instance.GetType().GetProperty("HasTransitionedIn").SetValue(BossSceneController.Instance, true, null);

at a point you're sure everything has loaded in

ornate rivet
#

yea this is what I do

jolly oriole
#

and it still doesn't work?

ornate rivet
#

nope

jolly oriole
#

that's odd

#

mind sending me modlog and outputlog?

#

what may be contributing (unsure if it's the only thing):

PlayMakerUnity2DProxy requires the 'PlayMaker Unity 2D' Prefab in the Scene.
Use the menu 'PlayMaker/Addons/Unity 2D/Components/Add PlayMakerUnity2D to Scene' to correct the situation
ornate rivet
#

that has been there for a while so I dont think so?

jolly oriole
#

idk what that's needed for, i just have it in my scenes to be safe

#

otherwise i'm not sure what the source of the problem is

nocturne meteor
#

Purely a C# question: if I have external CSVs in my project (eg, a long list of rooms mapping to their areas), what's the best way to use this resource (what Build Action / Copying should I be using?) and will this output an all-in-one DLL file that will be usable as a mod?

safe hamlet
#

you can put the file as an embedded resource

jolly oriole
#

in which case it will be an all in one

ornate rivet
#

lol the problem was the opposite, I was delaying too much

jolly oriole
#

i think for me it also worked if i delayed it like half a second palehmm

ornate rivet
#

maybe it's because I dont copy from one scene to another like you do

jolly oriole
#

oh you mean the playmaker thing?

ornate rivet
jolly oriole
#

so ig adding the playmaker prefab fixed the blanker problem?

ornate rivet
#

I didn't do that

#

I just removed a yield return null

#

first time removing a yield return null fixed a problem lol

shrewd minnow
#

Okay so I cannot find any in-game equivelant for the OST track "Pale Court". The track is basically a remix of White Palace but with more focus on the violin triplet melody.

proven cipher
#

The path of pain theme?

#

Or a different one?

shrewd minnow
#

I never did path of pain in game. Lemme see if it's that one.

#

I'll need a sec

#

It seems that Path of Pain plays the sorrow tracks that are also used when || the not final boss starts stabbing himself.||

#

I already found those five, which is not what I'm looking for.

#

I hardly did much of the postgame godmaster content so I don't think I would have found it ingame

shrewd minnow
#

I don't know if it even shows up in-game

vocal spire
#

Tmk it doesn’t

shrewd minnow
#

It could be an OST exclusive track

vocal spire
#

Unused

shrewd minnow
#

Oh okay

#

Thank you

vocal spire
proven cipher
#

Yeah, it's literally the first result when I googled it. :/

vocal spire
#

lol

gilded lotus
worn eagle
#

Getting qt set up for Android was a pita

opal moss
#

Make moss charger but 2x bigger and faster, and deals 2 masks

vocal spire
#

No

#

While extremely easy, no

opal moss
vocal spire
#

Because I’m in schoolzote

opal moss
vocal spire
#

I know

opal moss
#

I was talking to the mod makers

vocal spire
#

I am one though

#

Kind of why I’m here

opal moss
vocal spire
#

No

#

You were talking to everyone, and I haven’t seen many people other than myself take up random requests so

opal moss
#

I guess that’s fair

#

I can’t even play it since I’m not on pc

vocal spire
#

F

ornate rivet
#

considering the fact that an artist came here with actual animation for new mosscharger attacks but got ignored, I highly doubt just making a boss bigger and faster will be accepted by any modder

copper nacelle
leaden hedge
#

i agree

#

x5fiftAleph

nocturne meteor
#

Alright, if anyone loves critiquing code to make the coder a better coder, here we go. I'm not good at C#, I like trying to do best practices, and these things are at odds: if some peeps want to even just scan some of this code and give general comments / notes about what could be better, I'd appreciate it!

Websocket: https://github.com/jsal13/HKRDreamCatcher/blob/main/Mod/websocket.cs
Parser/Main: https://github.com/jsal13/HKRDreamCatcher/blob/main/Mod/item_loc_data_dump.cs

Main Folder: https://github.com/jsal13/HKRDreamCatcher/tree/main/Mod

copper nacelle
stone elm
#

Your C# looks like JS is my immediate impression. That's not bad, just not fitting overall.

copper nacelle
#

yeah the formatting looks like js with 2 spaces

stone elm
copper nacelle
#

the usage of var is kinda erratic

#

like if you're going to use var, this would be one of the cases where it's nice to not repeat the type twice

leaden hedge
#

i prefer value ? "true" : "false"
god i love ternaries

copper nacelle
#

or target-typed new

leaden hedge
#
    private bool ShouldNotProcessEvent(string eventMessage)
    {
      if (this.ignoreEvent.Contains(eventMessage)) { return true; }
      if (!(eventMessage.StartsWith("killed") || eventMessage.StartsWith("kills") || eventMessage.StartsWith("newData") || eventMessage.StartsWith("opened"))) { return true; }
      return false;
    }

you could also just replace this with return what you have in the if

copper nacelle
leaden hedge
#
    private bool ShouldNotProcessEvent(string eventMessage)
    {
      return this.ignoreEvent.Contains(eventMessage) || (!(eventMessage.StartsWith("killed") || eventMessage.StartsWith("kills") || eventMessage.StartsWith("newData") || eventMessage.StartsWith("opened")))
    }
copper nacelle
#

unity's scene changed hook is more appropriate, you really don't need to detour the game's beginscenetransition for this

leaden hedge
#

should do the same

safe hamlet
#

also is it just me or are the indents kinda off

copper nacelle
#

it's two-space

#

you can do using StreamWriter outputFile = ... and it'll close when it falls out of scope, which is the same as what you have here, also the if not having braces but the using having it is weird

safe hamlet
#

also is there a reason you have the srRoomMapper/eventsToIgnore static

copper nacelle
#

yeah i'd open/close those in the constructor, the lifetime on them feels weird as static fields that you close on first invocation of the constructor anyways

nocturne meteor
#

Okay, this is all amazing. I'm sorry I'm not responding fast, I'm at work, but I will read all of these when I get home.

Yeah, my daily drivers are Python + JS, so unsurprising that my stuff looks like JS.

Okay, so far, all of these are totally legit. I just found out about the scene change hook, so my next version will be using that --- one of the downfalls of not reading the APIs you're using! Also, wow, you all hate 2-space! It was default, I guess, in my VS, since I def didn't change anything. I'll change it tho.

#

I wish that discord was good at responding to all of them individually, but tl;dr, I'll be putting all of that in. All seems reasonable. I think the static part of srRoomMapper/eventsToIgnore was a remnant of a previous bit of code.

#

lol: this is the default i had, i have no idea why. changin' it due to popular demand.

#

Also, if y'all have better ideas about how to share code for critique, let me know. I don't know how to really do it besides doing a PR and having collabs which isn't really useful here.

#

Q: When should I be using var over explicitly using the type?

copper nacelle
#

that's a matter of style, I like to do it when the type is evident enough

#

like var x = new T(); or var y = JsonConvert.Deserialize<T> or var z = (T) expr

#

but some people use it everywhere and other people use it nowhere

#

with c# 9 you can use target typed new as an alternative too

#

which looks like List<string> li = new()

nocturne meteor
#

Hm, so it's one of those things I should prob either use everywhere or nowhere.

#

At least so that it's not so weirdly distributed for me, a beginner.

unborn flicker
#

There's essentially no reason to ever avoid using short types, especially value types.

#

I usually only use it for nested generics, like Dictionary<string, Dictionary<string, string>>, again where the construction makes it obvious and the type is distracting.

nocturne meteor
#

Okay, that seems reasonable. What about in cases like for (var idx = 0; ...)? Should I be using int?

unborn flicker
#

I think that's generally helpful for anyone scanning over the code, but it's mostly preference.

nocturne meteor
#

It's easy enough to do. I'll prefer typing to not using var then, except in cases where there's long or nested types and the type is obvious from the right-hand side.

nocturne meteor
#

Alright, awesome, I've put all that stuff in, I'll test, and push. Thanks all, this was really helpful for me! willoh

potent dirge
#

(just chiming in to say I find explicit typing much easier to quickly read for me at least)

silk monolith
#

I'm trying to use the sprite script for Kitra to create a custom knight. I'm having problems though with pasting a .png on the Custom Knight Layer. Instead it creates a new paint layer. I'm also wondering do you need to create a new layer for each frame or is there a way to change the single layers animation based on its current frame reference? Is there a good reference video or guide for this? I was using https://www.youtube.com/watch?v=Rb8_Qvtdco0 as a guide but even at .25 speed its to fast to follow along and his docks are very different from mine.

An example of a workflow for creating Hollow Knight custom knight skins using Krita and SpritePacker by Magegihk.

Download Krita: https://krita.org/en/download/krita-desktop/
Download Spritepacker: https://github.com/magegihk/HollowKnight.SpritePacker/releases

Music: In a Sentimental Mood, Duke Ellington & John Coltrane

▶ Play video
knotty monolith
#

To create a new version of a layer on a certain frame, right click the square in the animation area for the layer/frame and select "create new/duplicate key frame". Dunno how to do this in bulk, or how to make paste not go to new layer

worn eagle
#

Pasting always creates a new layer in krita

nocturne meteor
#

Does anyone have the github / name of a mod that you know makes modifications to audio (eg, replacing audio)? I'd like to see a template of how to do that so I know I'm on the right track.

jolly oriole
#

Royal Dreamer / Godly Nightmares by Sid does add audio afaik

worn eagle
#

this isn't moddingdev but the experts on this topic only browse here so

#

recommend me a good arch DE

potent dirge
#

Otherwise, what specs?

worn eagle
#

2nd gen ryzen 7, gtx 1070, 16gb ram

potent dirge
#

Oo, then unless somethings new has come along probably something like KDE, or KDE plasma or something

worn eagle
#

using plasma rn lol

potent dirge
#

Well then you're good to go ax2uHappy

#

Wtf I just googled it and apparently KDE is more lightweight than XFCE now, which was really the only other alternative I thought about ax2uS

copper nacelle
#

bspwm

mystic umbra
#

So, I was going through the game code and making some very basic mods and I happened upon some code that slightly confused me because it made my code not work. Why does Team Cherry have their NailSlash.OnTriggerStay2D just call NailSlash.OnTriggerEnter2D? I was trying to make some code that did stuff when the player hit stuff and the function kept getting hit on the same object every frame the nail slash was in the object and I was quite confused until I realized they were doing this. Is there a better way to determine if I just hit an enemy or other object for the first time other than Mod.Instance.SlashHitHook/NailSlash.OnTriggerEnter2D?

vocal spire
# mystic umbra So, I was going through the game code and making some very basic mods and I happ...

There’s probably a much better way than this, but if you are putting stuff into a on hook for OnTriggerEnter2D then I would assume the best thing to do to only detect the first one is set some bool to false in a on hook for OnTriggerStay2D and make it true the next frame so it differentiates between the 2 with that bool. Another way could be recreating the OnTriggerEnter2D code in OnTriggerStay2D.

jolly oriole
#

somewhat pseudo code

OnTriggerEnter2D(collider) {
    if collider is not from Knight or internal_bool
        return
    internal_bool = true
}
OnTriggerExit2D(collider) {
    if collider is not from Knight
        return
    internal_bool = false
}
vocal spire
#

Completely forgot about trigger exit

mystic umbra
# vocal spire There’s probably a much better way than this, but if you are putting stuff into ...

That's not quite what I was trying to do. I'm trying to only deal damage to each target hit once per attack instead of once per frame. The current code in the OnTriggerEnter2D makes it deal damage every frame. However, I do notice that the code in OnTriggerEnter2D only seems to do knockbacks and pogos and stuff and not damage so I'm assuming the actual code that deals damage to enemies once per attack is somewhere else. To get around this issue I'm just going to move the current code in OnTriggerEnter2D into its own function and have both OnTriggerEnter2D and OnTriggerStay2D call that function instead of OnTriggerStay2D calling OnTriggerEnter2D.

neon gale
#

I'm looking to replace audio files as a mod... how easy would this be to do for someone who's never modded anything 😬

#

like hit sounds etc

mystic umbra
#

You might want to check that

neon gale
#

thankye

mystic umbra
#

No problem

#

Yeah, I was looking through the pins for something else and happened to notice that info in the pin

jolly oriole
vocal spire
#

Yeah

#

Replacing a audio clip at runtime with a mod is better

jolly oriole
#

to give an example: Royal Dreamer / Godly Nightmares by Sid does add audio afaik

nocturne meteor
jolly oriole
#

yes, but afaik the source code isn't online

copper nacelle
#

behold

#

@safe hamlet e

safe hamlet
#

i mean it's not difficult, it's just annoying to find the states that controls the audio and shit because you know tc is very consistent

#

also the code for markoth mod is shit, i wouldn't want anyone seeing that and using it

vocal spire
#

🤔

#

I saw the code in dnspy when editing it to try it in a pantheon. Can’t tell if it’s better or worse

nocturne meteor
#

okay, i thought i was crazy because i was having trouble figuring out the audio states. whew. :']

mystic folio
#

Hey, guys! I'm completely new to this Hollow Knight modding thing. In fact, I'm not a mod developer, I'm a translator and I want to translate Hollow Knight into my native language. For some games, translating can be as simple as going into the installation folder, finding the localization files and going to town. When I did the official translation for Black Mesa, the developers even sent me the string files and then took care of putting the string in-game once I translated them (that was nice).
For Hollow Knight, things are not quite so simple - the game files are packed in Unity's .assets files. I was wondering if you guys could help me and point me in a general direction of what I'd need to do to unpack localization files from Hollow Knight and then put them back in after I'm done with them. Links to any tools or documentation would be much appreciated!

leaden hedge
#

UABE can extract them from resources.asset

#

they are like EN_<something>.txt

#

you can make a mod that does a dictionary lookup so you don't need to replace files

#

UABE can also repack, but you'd have to overwrite a language

mystic folio
leaden hedge
#

so theres a hook called LanguageGet

#

that has a key to lookup

#

and you can just return a different string for each key

#

the mod should be pretty simple assuming your language uses latin characters, just because of fonts

public class Translate : Mod
{
  public Dictionary<string, Dictionary<string,string>> transData

  public Translate()
  { 
    transData = new Dictionary<string, Dictionary<string,string>>();
    //load transData from a file or hardcode it here
    transData["sheetTitle"] = new Dictonary<string, string>();
    transData["sheetTitle"]["aKeyToBeReplaced"] = "translated line";
    //etc
    ModHooks.Instance.LanguageGetHook += Instance_LanguageGetHook;
  }

  private string Instance_LanguageGetHook(string key, string sheetTitle)
  {
    return transData[sheetTitle][key];
  }
}
#

sheetTitles are things like ui/npc dialogue/boss name etc

#

keys are the actual id of the string to be replaced

mystic folio
#

My language does use latin characters so font hopefully won't be an issue (unless Hollow Knight's font turns out to have issues with accented characters like é, í, č, ř, etc.)

leaden hedge
#

if they are included in other langauges in game, it should be ok

#
            foreach (string text in Language.settings.sheetTitles)
            {
                Language.currentEntrySheets[text] = new Dictionary<string, string>();
                string languageFileContents = Language.GetLanguageFileContents(text);
                if (languageFileContents != string.Empty)
                {
                    using (XmlReader xmlReader = XmlReader.Create(new StringReader(languageFileContents)))
                    {
                        while (xmlReader.ReadToFollowing("entry"))
                        {
                            xmlReader.MoveToFirstAttribute();
                            string value = xmlReader.Value;
                            xmlReader.MoveToElement();
                            string text2 = xmlReader.ReadElementContentAsString().Trim();
                            text2 = text2.UnescapeXML();
                            Language.currentEntrySheets[text][value] = text2;
                        }
                    }
                }
            }

is the function the game uses to load the xml files for localization data, so if you keep the format the same, you can use that to load them in

#

just sheetTitles are hardcoded

mystic folio
#

I just realized the "Poor Translation" mod includes all the original text assets as well 🤦‍♂️

#

They're nicely formatted, too

#

Now I need UABE only to find the asset ID (I think)

leaden hedge
#

you won't need the asset ID

#

if you look at EN_UI
the sheetTitle should be UI and the keys are stuff like CHARM_DESC_39, INV_DESC_HEARTPIECE_NONE etc

#

EN_sheetTitle and <entry name="key">

mystic folio
leaden hedge
#

how good is your c#

mystic folio
jolly oriole
#

trying to make something similar to customknight just for languages

leaden hedge
#

i mean it should just be add a folder somewhere called Translate/Language

#

then another folder like EN / JP etc

#

then have each language file in there

jolly oriole
#

thinking of just having a folder, in which are jsons with whatever name the language should be called

leaden hedge
#

dont really need a json

#

just have a file in the folder, like UI.txt

#

but call it something like mod.txt

#

wtf

#

the TRANSLATED_EN_x are in a different format

jolly oriole
#

are just 4015 strings

leaden hedge
#

i mean thats the exact same, except you've merged multiple files into one massive file

jolly oriole
#

and i can load this easier

leaden hedge
#

i mean the difficulty of iterating over a folder directory so translators can give people one file to translate, is probably easier than getting translators to understand how to avoid merge conflicts in one big file and to care about using git

#

i'd personally split it more, just because of the target demographic

mystic folio
#

I tried the "brute" method of just overriding the English text assets with UABE to try how it looks. Mostly good, unfortunately some letters are missing. Can't blame the devs for not creating all UTF-8 characters

leaden hedge
#

you'll have to download unity, the font they used, and textmeshpro

#

and generate text sprites

#

or any font you want, but it'd look different

#

because the way textmeshpro works is you only give it the characters you want, so you dont have 8000 characters in your spritesheet

jolly oriole
patent zealot
#

nice BG

jolly oriole
#

at least you didn't have to see the Fortnite logo

hexed violet
#

the fortnite logo wqs great

jolly oriole
worn eagle
#

does Hornet have weird position setting

#

oh she has a ConstrainPosition component, ffs

worn eagle
#

anybody know why Hornet's needle might not spawn as a child gameobject? it's not there when I print out her hierarchy tree and it causes her to break when she throws

#

ig for context, I'm just instantiating her

worn eagle
#

Boss Holder/Hornet Boss 1/Needle just doesn't exist it seems

glacial harbor
#

Guys can someone make me a custom knight pls

#

Pls

marble hollow
glacial harbor
#

Wait 😱

#

Wut

marble hollow
#

its not easy to make skins

glacial harbor
#

Ok sorry

marble hollow
#

its fine

glacial harbor
#

*casualy gets back to playing hollow knight *

tawny onyx
leaden hedge
#

you need to setup a TMP_FontAsset and load it in ChangeFontByLanguage.SetFont

#

its serialiazable so it should be saveable to a json and out from a json

tawny onyx
#

i add a hook for SetFont method, but it seems not be called

tawny onyx
#

oop, my bad

#

it doesn't call if i dont load my saves

leaden hedge
#

looking at it, you need either the same version of tmpro and unity to make an asset bundle
or you're going to have to manually turn it into a json, and then make a fontasset from that json because they've changed the font asset class
you'll also need to load the texture2d atlas

#

i tried it on a random font i had, and got this, which looks like enough to rebuild a fontasset in code (not including materials+textures)

tawny onyx
#

thanks, i'll try

jolly oriole
#

how to make Monomod say which line it failed, it just tells me that something is NULL

copper nacelle
#

show

jolly oriole
#

trying to make SupportedLanguages and TestingLanguages obsolete, so replacing all of those with LanguageCode, and some method apparently didn't like that

copper nacelle
#

update it

jolly oriole
#

shit's shit, i'll just expand the original enums

jolly oriole
#

ok, this is breaking, just trying to load mods a bit earlier (not the preloads tho)

#

like i'm just trying to hook On.Language.Language.cctor (which may be a static constructor, but who cares)

prime urchin
#

So, quick question; why does the Mod class overwrite the SaveSettings property with a new instance when the scene is changed to the main menu? It took me a bit to track down exactly why a pre-filled list in my settings class was turning out to be empty :P

copper nacelle
#

before it just stayed at the old value and then you'd load one save and quit out and load another and it would result in the values staying anyways if the save didn't have something overwriting it

#

like if you loaded a save and then went to another you'd just keep your settings and so you'd end up just hooking the scene change for the main menu to reset the settings so that doesn't happen

#

which isn't something you want in every mod

#

if it's prefilled then you just set it on field init or in the constructor and it should work fine

prime urchin
#

Ah, that makes sense. Yeah, the problem is I was initializing global settings or save settings based on a value and the settings class itself doesn't know whether its a save or global settings - I ended up just making the default constructor assume that it was for save settings.

jolly jungle
#

Wait I think I forgot to turn off the ping

#

Damnit

#

sorry grenade

jolly oriole
#

you know the rules

#

and so do i

jolly jungle
#

Say goodbye crabgun

jolly oriole
jolly jungle
#

Wait what are we seeing here

jolly oriole
ornate rivet
#

at first I thought it might be the z, but I brought it forward and it looked the same

leaden hedge
#

sprite opacity?

#

if the colour on the material is like 1,1,1,0.1

#

it'd look like that

ornate rivet
#

ah I set the color of the spriterenderer to 1,1,1,1 but didn't think of the material

#

will try that

leaden hedge
#

might also be the area palette

#

which i think controls _tint on the materials

ornate rivet
#

rip setting the tint to 1,1,1,1 didn't change anything

leaden hedge
#

try changing On.SceneManager.SetLighting

ornate rivet
#

yea that fixes it but it messes up the scene

leaden hedge
#

ok so its scene lighting Kappa

jolly oriole
#

try another shader or sprite sorting layer id thing

leaden hedge
#

are you making it from scratch?

#

change shader to default sprite one

#

you want a shader that ignores
RenderSettings.ambientLight and RenderSettings.ambientIntensity

ornate rivet
#

cool thank you

leaden hedge
#

probably unlit/transparent

#

works fine

#

apparently its just sprite/diffuse that does it sprites/default or unlit/transparent should work fine

ornate rivet
#

they were using Sprites/Lit

leaden hedge
#

thats

#

old

#

thats sprite/diffuse now Kappa

ornate rivet
#

ah zote

#

I wonder what silksong code will be like

worn eagle
#

If they keep using 2d toolkit they shouldn't be using anything past 2018.4

leaden hedge
#

theres no reason to use tk2d

#

so i hope they dont

ornate rivet
#

lol why is this box so big

dark wigeon
#

because they decided to

ornate rivet
#

hot

jolly oriole
#

W a i t

ornate rivet
#

imagine making an fsm with the states shaped into a "fuck you"

#

tc should do it

deep wave
#

that's just thk fsm 🙂

ornate rivet
#

true

jolly jungle
mystic umbra
#

Is it a known issue that if I make a custom charm using the charm helper, equip it, save and reload the game that the charm notch calculator won't take my custom charm into account when displaying how many notches I've used?

#

Also, what are the sizes of charms supposed to be art wise?

mystic umbra
vocal spire
#

Yeah

jolly jungle
#

Suppose I want to reskin a generic enemy

#

But every instance of it

#

How would one go about and do that?

jolly oriole
oak idol
#

suppose i wanna play silk song

#

how would i

marble hollow
#

its.. not out..

copper nacelle
#

go to australia and rob a build

#

I have no idea how this is supposed to be at all related to mods let alone to their development

deep wave
#

56 making the classic mistake of assuming a build exists feelspkman

copper nacelle
#

🥴

weak lodge
#

make yourself a personal copy of it

jolly jungle
#

And we can assume they all have the same name cuz that's how it works and thank god for that

#

I'll look into it, I guess, and come back later with more questions

jolly oriole
#

i think all aspids have names like Super Spitter (1), with the last part ( (1), including the space) not there for the first in the scene

jolly jungle
#

Hm, cuz copies and stuff?

#

Wait

#

How does enemy placement work in Hollow Knight

#

Does it spawn them in upon entry or do they exist in the scene when it's loaded?

#

If you get my question

jolly oriole
#

the enemies are already in the scene, though i have no idea when specifically the hook is called

jolly jungle
#

Hm

#

The reskinning itself should be replacing their texture with a recolored/skinned version of the ripped spritesheet right?

modest glacier
#

hey i'm new and i have a question:

#

is there a unity project available?

#

for hk?

#

or just the game files?

modest glacier
#

Hello?

jolly jungle
#

What exactly do you mean?

jolly oriole
modest glacier
#

what tools?

jolly jungle
#

A lot of tools are scattered over the documentation pages

modest glacier
#

ok thanks.

modest glacier
#

Is there a tool that does !!everything!! to a unity project?

jolly oriole
#

utiny ripper can create a unity out of HKs game files

modest glacier
#

ok thanks again.

ornate rivet
vocal spire
#

Updated?

ornate rivet
#

na, just an example of utiny ripper in use which is what Davidb might want to look at

vocal spire
#

Ah

tawny onyx
proven cipher
#

That's sort of rad

ornate rivet
#

ooo are you updating the shade mod?

tawny onyx
#

yes lmao

#

now it's playable i think

astral bone
#

I really like that, if I ever can I will download

charred topaz
#

That looks awesome 👍

nocturne meteor
#

Haha, I'm so dumb, I thought the keyboard in the corner was the mod. I was like "wow this is neat."

knotty monolith
#

Touch screen hollow knight when

young walrus
#

sure

#

you write them in C#

#

or with unity I guess if you really want to do it that way

#

it's installed when you run the installer

#

and is also...

#

?mods

young walrus
#

on the drive

nocturne meteor
#

For mods that work with randomizer: I'm trying to get a good way to see if a user has started a new game (as opposed to loading a save). I've had a few "eh" solutions to this, but I'm finally looking at the SceneManager.activeSceneChanged hook.

Do y'all think that it would be enough to look for a transition Menu_Title to Tutorial_01. I can't think of a case where this would be able to come up except for a new game.

copper nacelle
#

no

#

make a new save

#

die to tiktik

#

quit out

#

open save

#

there's a NewGameHook for non-rando saves, and you can do On.GameManager.StartNewGame for both rando and non-rando saves

nocturne meteor
#

Ah, that's fair. I guess it would get messed up on my tracker if they got the fury item then died which, I think, brings them back to tutorial_01.

#

I didn't know that there was a On.GameManager.StartNewGame hook, so lemme try that out, that's exactly what I need.

nocturne meteor
#

Alright, I tried the following:

public void HandleStartNewGame(On.GameManager.orig_StartNewGame orig, GameManager self, bool permadeathMode, bool bossRushMode)
        {
            orig(self, permadeathMode, bossRushMode);
            Send(MakeEvent("game_level_event", "game_level_event", "new_game"));
        }

But it kept freezing the game at the screen right after the rando new game screen (where you pick stuff) and never got to the Tutorial_01 screen. If I swap the order, it'll give me an error since I'm trying to read the spoiler log which isn't created yet (or is being created, I guess).

I can't think of a way to make this nicer (putting a "sleep" command didn't help much), so if anyone has any ideas, lemme know. I think it might be okay to use the scene transition thing since the edge case for that is so niche that I don't think it'll come up for rando players much --- and if it does, it will only affect the tracker if they check Fury and then die, and only then if it has an "important" item ---

steady comet
#

the edge case for that is so niche
If they quit to menu and then return to the game while their bench is KP, then that will also count

nocturne meteor
#

That also goes to Tutorial_01?

steady comet
#

Tutorial_01 is King's Pass, so if their bench is there I assume that that's where it sends you tamershrug

nocturne meteor
#

Oh, like, if they never pick up another bench or something?

steady comet
#

yeah - but also you can benchwarp to King's Pass

#

(Even though there isn't an actual bench there)

nocturne meteor
#

Ohh. I understand.

#

Ugh, okay, I COULD combine this with one other event which is like "firstTimeSeeingCutscene" or something, but yeah, point taken. It's a hack, to be sure. Lemme see what errors I'm getting when I get a frozen screen for the HandleStartNewGame, since that's the ideal hook for me to use.

#

openingCreditsPlayed is what I was thinking of in the previous thing; it seems to only play on the New Game start. Still, a gross hack.

leaden hedge
#

make a coroutine and wait in that

#

yield return null;
waits a frame

#

put it in a while until the game is in the state you want

#

a sleep doesn't allow other parts of the game to advance, it just pauses the entire game

nocturne meteor
#

Ah, okay, that makes sense since that's exactly what happened. Okay, I'm gonna haft'a read up on coroutines. But the gist would be: make a coroutine that waits for some event from a hook and then does the stuff I want?

leaden hedge
#

not a hook, or you could just hook that event

#

but you can check a variable every frame

nocturne meteor
#

Got'cha. Okay, I'll mess around with this and see where I can get! Thank you!

leaden hedge
#

you need a monobehaviour and gameobject to run them on

worn eagle
#

so I'm trying to make PV not hud out on death using Vasi, is there any way to do this with reflection?

#

their corpse is tied to a corpsePrefab field in EnemyDeathEffects, but I can't seem to get it working with the following code:

#
GameObject corpsePrefab = Mirror.GetField<EnemyDeathEffects, GameObject>(
                GetComponent<EnemyDeathEffectsUninfected>(), 
                "corpsePrefab");
corpsePrefab.LocateMyFSM("corpse").GetState("Music").RemoveAction<SendEventByName>();
Mirror.SetField<EnemyDeathEffects, GameObject>(
                GetComponent<EnemyDeathEffectsUninfected>(), 
                "corpsePrefab", 
                corpsePrefab);
#

this would also help me make WD not teleport the player to the waterways after dying

mystic umbra
#

Does anyone here know how big in pixels new charm images are supposed to be?

worn eagle
#

nvm I should've been looking at corpse instead

copper nacelle
#

fwiw the set is redundant

worn eagle
modest glacier
#

@mystic umbra At the wiki its 50*50 but I dont know if thats also like that in the game.

mystic umbra
#

Now I just need to get a good idea for the charm art since my previous ideas turned out to either be too busy or looked terrible

modest glacier
#

What charm are you making?

mystic umbra
#

Let me give you the fancy in lore description of it

#

Title: Weaver Whetstone
Description: A whetstone used by a merciful Weaver whose opponents often left with their lives, but never with their geo. \n\nThe bearer's nail will deal less damage, but they will gain geo with every slash.

#

All the code is done, I just need to make the art for it

#

It was my first mod so I made it as simple as possible. I've already got an idea for my second charm which will be a bit more in depth

modest glacier
#

Maybe something with Geo and six eyes?

mystic umbra
#

That's what I was thinking as well. My initial idea was to make a whetstone in the shape of the geo symbol and put the Weaversong eyes onto it. Doing this though didn't really work. The proportions of the geo symbol don't work too well with the positioning of the eyes. Simplifying it made it look too much like Weaversong too

modest glacier
#

You could use the geo that is 5 geo worth

mystic umbra
#

Maybe I could do the whetstone idea and have two copies of each geo symbol ascending from the bottom to about halfway up the whetstone. Then in the center have nail

hexed violet
#

im actually kinda interested in doing the art..

mystic umbra
#

Maybe something like this except not terrible looking. There is a lot of deadspace at the top though. I was also thinking of giving the geo and nail an etched look so it seemed like they were etched into the whetstone

#

The Weaver symbolism is kind of subtle here. There are six geo symbols mirrored down the center

#

I also had an idea at one point to do a money eyes kind of thing where the geo symbol was masked in the shape of weaver eyes, but that just looked super weird and didn't read well

#

The only other Weaver symbolism really used is the thread and silk spools, but silksong uses that a lot so I don't know if I want to retread that

midnight narwhal
modest glacier
#

what is the default speed?

midnight narwhal
#

4

modest glacier
#

idk

midnight narwhal
#

ok i guess it works on every crawlid except the first one in kings pass

#

for some reason

proud gate
jolly jungle
#

Aww

proud gate
#

ok

candid cobalt
#

what language of programming do u use for the mods?

floral furnace
#

C#

jolly oriole
candid cobalt
#

nice

#

should I learn how to code with C#?

#

I am learning Python rn, so I dont think it'll be useful

worn eagle
#

any programming experience will help

tawny onyx
#

knowing some Unity knowledge would be fine

potent dirge
#

As long as you understand how to read one language of that style (like python for example) you can pick up c# or any other similar language from other code and just testing and trying yourself

midnight narwhal
#

is it possible to modify game object atributes of something using the gameObject variable that is in a lot of the PlayMakerFSM's

jolly oriole
#

yes

#

as it's just a normal gameobject but capsulated