#archived-modding-development

1 messages · Page 504 of 1

jolly oriole
#

vs project reference gives this log, everything still works though

[INFO]:[API] - Couldn't resolve assembly SFCore, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null, with sender Unity Root Domain
stone elm
#

I like to put the 'empty' folder in the solution so it's not obfuscated, in a sense.

potent dirge
#

clear instructions are pretty much a must tho 🥴

stone elm
#

Yeah, I know. It's the easiest answer I've got, haha.

charred topaz
copper nacelle
#

sure

vocal spire
#

trying to build the mod installer but I get 3 errors like this

dark wigeon
#

why don't you just remove the mark of the web

vocal spire
#

Idk what that is zote

jolly oriole
#

google

vocal spire
#

vague memory of some video on that

#

so google time

#

*firefox time

#

oh that is very simple

#

hk beta moment

jolly oriole
#

lol

vocal spire
#

Finally, this should have been done ages ago

vocal spire
#

should I upload the edited installer

deep wave
#

does this one have the tls 1.2 fix

#

also please change the title text to modinstaller the confusion between mod manager and modinstaller is too great

vocal spire
native pelican
#

i learned a ton about transforms in unity by doing this (which was my only real goal) 🙂

prime urchin
#

Ayy, nice! Glad it was able to help ya out

merry lotus
#

Hey, I'm only posting this here because I saw that it was recently-ish mentioned that WeaverCore was updated-
For some reason attempting to update it on ModInstaller 1 is causing an error

copper nacelle
#

I hate life

merry lotus
#

The error doesn't happen if I don't agree to update WeaverCore
Edit: I also just manually deleted WeaverCore, and attempted to reinstall it through ModInstaller, which throws the same error.

Edit 2: I also just attempted IKG, since I saw the post above mentioned both mods. It also caused the error.

copper nacelle
#

might take a minute to update

young walrus
jaunty fulcrum
#

Oh

young walrus
#

please don't spam chats with the same question

merry lotus
#

The fix worked, btw grublove

nimble lake
#

how’s progress, eh?

steady comet
#

Is there a way to tell what causes boss scenes (e.g. Fungus2_15_boss or Cliffs_02_boss) to trigger? I'm pretty sure for those two it's "have mantis claw" and "have dream nail" but that's basically just from guessing and I'd like a way to actually find out if possible.

jolly oriole
steady comet
#

I am bad so which fsm do I want to look for?

jolly oriole
#

i actually have no idea

steady comet
#

Oh :/

jolly oriole
#

i'd say open the scene in the fsm viewer and possibly search through everything that has boss or ghost in the name

steady comet
#

The boss scene or the regular scene?

jolly oriole
#

regular

steady comet
#

OK, thanks 🙂

jolly oriole
#

could be certainly possible that the regular has the boss one as a dependency and that just gets loaded in, idk

stiff pilot
#

guys i cant see the hollow point pinned message

deep wave
steady comet
#

Question - there are some empty boxes here in the FSM viewer, I'm guessing I have to use DNSPY to find out what should go in them. Where do I have to look in the DNSPY viewer to find out?

(This particular item is Fungus2_14 - "Shiny Item Stand-Shiny Control" - PD Bool? but I think it's fairly common)

dark wigeon
#

compareTo is blank but that's because it's basically PD Bool Name == ""

steady comet
#

Oh so I don't actually have to worry about the blank boxes?

#

How do you get it so it shows the more detailed text like in your image?

dark wigeon
#

I guess I forgot to implement variables in the old fsm viewer, but yes those are blank because they have no value (or are empty string)

#

the more detailed list is in the avalonia fsm viewer

#

which isn't really finished, I need to do that at some point

unborn flicker
#

To clarify, if you change to the variables tab, you can see PD Bool Name is hasWallJump for this fsm. Not all blank boxes are the same.

#

Since this is a very commonly used fsm, the first action checks if the PD Bool Name is empty (for relics and other objects governed by sceneData)

steady comet
steady comet
unborn flicker
#

No, that would be absurd.

#

There are two or three shiny items that have unique fsms because TC must make spaghetti

#

The rest all use this

steady comet
#

Oh I see hivescream

dark wigeon
#

the new wip fsm viewer is here https://github.com/nesrak1/FSMViewAvalonia but there's no scene list at the moment, so you'd have to look in the old fsm viewer for the number in square brackets next to the scene name for the level### file. it shouldn't be too hard for me to add it I just haven't yet

#

but it should implement pretty much all fields including variable fields

jolly oriole
#

poggers

dark wigeon
#

and 2020.2 support

steady comet
dark wigeon
#

oh no I guess I didn't release the version with numbers

steady comet
dark wigeon
#

mine looks like this

steady comet
#

Oh they are ordered in order? I guess that's helpful enough

dark wigeon
#

yeah just give me a minute to update the new one

dark wigeon
steady comet
nimble lake
#

indeed it is modders

copper nacelle
#

what

prime urchin
#

indeed it is apparently

#

Is there a guide for packaging a mod for release? I've got a folder structure of ModName.zip / hollow_knight_Data (with readme.md, changelog.md) / Managed / Mods / ModName.dll which I copied from another mod. That should be fine, right?

#

And with the drive down, I can just provide a github release link via modlinks.xml pull req?

copper nacelle
#

don't do the folder structure shit I beg you

#

unless you're actually putting stuff outside of mods

#

but yeah just pr it

prime urchin
#

Ah, so just putting the .dll at the .zip root will work fine then?

#

Glad I made sure then, hah

copper nacelle
#

yeah I've been trying to move mods away from the full thing because there's an attribute in modlinks which dictates where to put files and it was getting completely ignored by the installer

#

so if everything moves to not using it I can put it back with actual working usage

#

and it's just nicer anyways

prime urchin
#

Yeah, I always prefer not doing the entire structure in the zip - just wasn't sure if it was explicitly programmed in the installer or not, so that's good to know.

copper nacelle
vocal spire
#

F

#

Shader.Find evil

copper nacelle
#

it is legacy now

#

why

jolly jungle
#

Didn't you say they updated the unity version it was on or something

vocal spire
#

Yes

#

2017.4.10 to 2020.2.2

jolly jungle
#

Wasn't unity 5 released like right around then

copper nacelle
#

it is a rhetorical question

jolly oriole
#

wait, Particles/Additive is legacy now?

copper nacelle
#

yes

#

what

dark wigeon
#

it's not that hard even if you did go down that route

copper nacelle
#

if you're unable to type the words Legacy Shaders/ then be my guest

jolly oriole
#

leg a sea

dark wigeon
#

is tron legacy called tron legacy because they were using legacy shaders

jolly oriole
#

yeah, just look at the bikes, with the lighting shader lagging behind

copper nacelle
#

bro playmaker is garbage

#

they update transitions to use ToFsmState instead of ToState

#

but the copy constructors don't account for it

#

x5fiftPrime ??

jolly oriole
#

yep

#

it's quite amazing

copper nacelle
#

the default particle texture is gone too

#

Terrible

jolly oriole
#

default particle still exists though

copper nacelle
#

maybe i did this wrong

#

i'll double check

jolly oriole
copper nacelle
#

yeah i commented it out because of the shader and then it was pink

#

it's still there

#

vibing

jolly oriole
#

vibing

#

though what do you need the particle for? grubthink

copper nacelle
#

trail

#

pale prince

#

i am unbreaking it

jolly oriole
#

oh pog

#

i nearly asked if 1432, then i rememberd the unity2020 stuff

lofty yacht
#

yeah that's the one I used initially, I'll try redownloading

copper nacelle
#

@tawny onyx nvm wrong person

#

@fair rampart is lunatic on the normal gdrive

#

Genocide

jolly oriole
#

in the gdrive link the /u/0 is unneccessary btw

copper nacelle
#

necessary for me

#

😤

#

try having more logins

jolly oriole
#

nah, sounds suboptimal

#

a discord alt to upload bait posts though, that is fine

#

what happened with the SHA1 on some mods btw? they got shorter?

copper nacelle
#

they call me

#

pasting the id into the sha1 slot

jolly oriole
#

lines 301 & 315

prime urchin
#

Do we know why the GDrive was trashed in the first place? Did the owner just decide to do it to try and screw people over or somethin'?

jolly oriole
copper nacelle
#

that's true

#

they're an old mod

#

idk why they decided to trash it

#

first they took perms off the other old mods

#

very questionable

prime urchin
#

weird tbh

prime urchin
#

oh, thunderstore opened up mods for other games finally?

#

neat

ornate rivet
native pelican
#

Does hollow knight spin up multiple threads? I've been working on a mod mostly ignoring that question... and haven't run into problems, but I don't know if there's actually races all over my codebase that I don't really know about.

native pelican
#

That's comforting. Sounds like Unity would yell at me quite loudly if I tried to interact with it outside of the main trhead and I think most of my code paths touch unity at some point, so it's very unlikely there's races.

#

Thank you 🙂

#

I"ll continue not worrying about it

potent dirge
limber storm
#

This probably has a very obvious answer, but I'm looking into the Eternal Ordeal. What exactly do the boxed things do? The boxes should probably extend further down, but I'm assuming it sends the "SPAWN" and "GO" commands somewhere?

prime urchin
#

I believe it sends the events to the game object the FSM is attached to? I haven't worked with FSMs too much but that's what I've guessed anyway

fair rampart
#

Guys

#

What is the number charm of fury of the fallen?

dark wigeon
dark wigeon
prime urchin
#

Ah, that makes a lot more sense.

copper nacelle
#

because the other one got yeeted

jolly jungle
#

Oh?

#

Alright

#

Oh, just saw what happened now

#

It's a shame but oh wekk

#

well

#

Anyways I came to ask about the updating of mods

#

Does the installer recognize you have an outdated version and update it?

#

Would it still recognize it if the dll had a new name but the zip stays?

ornate rivet
#

yooo the new mod drive means I haven't doxxed myself anymore

jolly jungle
copper nacelle
#

isn't it literally on your ghub

ornate rivet
#

shoot

jolly jungle
vocal spire
copper nacelle
#

changing dll name would be bad

#

it recognizes based on naming

jolly oriole
#

Idk id buzzbos Name is just buzzbo, maybe i already renamed the dll before first including it

stuck dirge
#

ok any tips on debuging this and stuff?

using System;
using System.Reflection;
using GlobalEnums;
using Modding;

namespace title_screen_mod
{
    //Start Loading Sprites From File "title_screen"
    private void loadResources()
    {
        Assembly _asm = Assembly.GetExecutingAssembly();
        using (Stream s = _asm.GetManifestResourceStream("title_screen_mod.Resources.title_screen.png"))
        {
            if (s != null)
            {
                byte[] buffer = new byte[s.Length];
                s.Read(buffer, 0, buffer.Length);
                s.Dispose();

                //Create texture from bytes
                var tex = new Texture2D(2, 2);

                tex.LoadImage(buffer, true);

                // Create sprite from texture
                title_screen = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
            }
        }
    }
    private int LogoId = -1;
    public title_screen_mod()
    {
        //loadResources();
        //Load Image "title_screen" 
        TitleLogoHelper.Initialize();
        LogoId = TitleLogoHelper.AddLogo(new title_screen());
    }
}
stone elm
#

No tips on debugging, but tip on discord formatting. If you use a multi-line code block you can designate syntax highlighting. Just put the name of the lang on the first line.

namespace stuff 
{
  abstract class stuffy 
  {
    void demo(thing stuff);
  }
}```
#

Would make it much easier to read your snippet

jolly oriole
deep wave
#

tip for your tip; cs works for csharp too because those extra 4 letters literally kill me

prime urchin
#

You have your stream in a 'using' and also call.Dispose() on it which is unnecessary

stone elm
jolly oriole
stuck dirge
#

so remove s.Dispose(); and add method, got it

prime urchin
#

I'd also recommend adhering to C# naming conventions with PascalCase and such but if it's a personal project it's really just preference - good to get in the habit though if you're going to be writing a lot of C#

stuck dirge
stone elm
#

Heh, your code does scream python dev (and probably other langs) with the naming conventions. As to your original question on debugging 'this stuff', I assume you mean loading things out of the manifest stream.

#

You can always use a different project and reference your mod assembly and attempt to load things to test. I generally use LINQPad to test things like this quickly.

stone elm
#

I love me some snake wrangling every now and then. 🙂 Your code is very PEP-8.

stuck dirge
#

python is diverse but it really cant handle games so I used unity and instantly fell in love with cs. And yes my python skills seem to have carried over.

#

also I love how Microsoft make .NET programmers feel like children, they even call LINQPad "The .NET Programmer’s Playground" 🤣

copper nacelle
#

linqpad isn't by ms tho

stuck dirge
#

I'm fricking dumb

stone elm
#

It's by .NET Jesus as far as I'm concerned. Joseph Albahari is great.

stuck dirge
#

Ok yeah that whole "children" thing makes a lot more sense now

vale mortar
#

So I am curious about the Eternal Ordeal: are there unique timers for each type of Zoteling in terms of spawning between a dead Zoteling and a new one? Like, I'm analyzing my EO footage and finding that Hopping/Flying Zotelings will typically spawn 3 to 4 seconds after a kill. Lankies (so far) can be from about 1.25 to 3.25 seconds after a kill, Zotelings the Mighty are around 2.5 seconds, etc.

But is there like a codified spawn timer or something that's related to total kills and spawn timers? I ask that because as I get to higher kill counts, the timings seem to get way more chaotic.

worn eagle
#

I looked at it a while ago and from what I remember zotelings don't actually die, when they reach 0 hp they "despawn" and then after a set time they "respawn"

pure nova
#

How do you look for the scripts relevant to FSMs in dnSpy?

pure nova
#

I have FSMView. I'm just wondering how to see the scripts relevant to controlling the variables.

potent dirge
#

Not sure, but guessing in the hutong.playermaker dll (can't remember exact name)

#

That and assembly-csharp.dll has most stuff in general, ime

vale mortar
worn eagle
#

looks like its 2 seconds for every zoteling

vale mortar
#

Hmm. When does that timer start because...

Wait. That's a global loop timer so it's just 2 seconds pass, check for Zote death? So like, say I kill a Zote just before the check...Is it possible to have a 4 second spawn? Like somehow the check misses one loop and then the Zote spawns in the second loop?

#

Any information about things like Heads, Volatiles, or Turrets? Are they special? Do they have their own cycle?

#

Huh. More analysis must be done on my end.

#

And I ask about this timer because I have...Hmm. There must be some sort of hidden indicator of when a Hopping/Flying Zoteling is coming because they are consistently showing up 3+ seconds after the previous kill/despawn.

#

So the trigger for a new Zoteling is not the despawn? It's just the 2-second timer.

vale mortar
#

This is what I'm talking about...Like, how can this be accounted for?

#

That's 3+ seconds from Kill 5 to Hopping spawn. And there's no warning like with Heavy's, Lanky's, ZoM's. Just, boop a Hopping Zoteling.

half sequoia
#

I'm looking at the code for the enemy randomizer to see if I can add an option to make the replacement enemy's HP the same as the enemy it replaces, and I'm seeing the error "The type name GameObject could not be found in the namespace UnityEngine". I added the right folder to the reference paths list so I'm not sure what the problem is.

copper nacelle
#

ref unityengine.dll, unityengine.coremodule.dll,

half sequoia
#

I'm not sure what you mean

#

(I'm using Visual Studio)

deep wave
#

right click on references in solution explorer, add references... , select the dll

half sequoia
#

ok thanks

#

I did that and the error still shows up

vocal spire
#

@half sequoia screenshot

half sequoia
young walrus
#

did you add it up top

#

"Using xxxxx"

half sequoia
#

it's up top

young walrus
#

Using Modding, Using whatever

vocal spire
#

Did you also add UnityEngine.CoreModule.dll as a reference

half sequoia
#

this is someone else's code

vocal spire
#

Not mine

half sequoia
#

no, I'm not sure why it didn't get added

vocal spire
#

Ok

#

Well add it then

half sequoia
#

I added it and the error hasn't gone away

vocal spire
#

Wait about 5s

half sequoia
#

ok it's gone now

vocal spire
half sequoia
#

all right I should be good now, thanks for the help

vocal spire
#

Np

#

Gtg, see y’all later

jolly jungle
#

And what about making a mod that includes other mods in them?

#

Suppose I make some bosses and then I make a mod that, among other things, includes said bosses

#

Can we have them removed from the installer?

vocal spire
jolly jungle
#

Ah, alright, good enough

#

And can we do the thing serecore did where it recognized the older version and replaced it?

vocal spire
#

Idk how they did it

#

So idk

jolly jungle
#

We'll have to ask them when the time comes, I suppose

#

If we ever need it

jolly oriole
#

i mean, the source code is online

vocal spire
#

Yeah

#

Just check out the mod installer repo

half sequoia
#

@wraith bear Do you have the code for the working version of the enemy randomizer? I'm trying to add options to make the HP and Geo drops for the randomized enemies the same as for the old enemies using Kerr's repo, but that version doesn't seem to be able to load the randomizer.

jolly jungle
#

Alright so about the problem I mentioned a few days and proceeded to not give any code or anything as an example

#

Didn't have time and sorry about that

#

But now

#

This is in the Start() of the script that alters hive knight

// Adds spikes to Leap
StartCoroutine(ShootDownSpikes());
_control.InsertMethod("Jump Antic", 0, () => { shootingDown = true; });
_control.InsertMethod("Land", 0, () => { shootingDown = false; });
deep wave
jolly jungle
#

And this is the Coroutine in question

IEnumerator ShootDownSpikes() {
    while (true)
    {
        yield return new WaitForSeconds(0.08f);
        if (shootingDown) SpawnHoneySpike(this.transform.position, -90);
    }
}```
#

Now I know it's bad

#

But I didn't think of that at the time

#

And now this leads to inconsistencies in the spike spawning rate

#

e.g. spawning four times faster for other people

half sequoia
#

Great, thanks.

stuck dirge
#

whenever U build with dotnet build I get 1236 Errors... idk why maybe its a problem with the code or the ddls...
Here is the code fr reference

using System;
using System.Reflection;
using GlobalEnums;
using Modding;

namespace title_screen_mod
{
    public class : TitleMod
    {
        //Start Loading Sprites From File "title_screen"
        private void loadResources()
        {
            Assembly _asm = Assembly.GetExecutingAssembly();
            using (Stream s = _asm.GetManifestResourceStream("title_screen_mod.Resources.title_screen.png"))
            {
                if (s != null)
                {
                    byte[] buffer = new byte[s.Length];
                    s.Read(buffer, 0, buffer.Length);

                    //Create texture from bytes
                    var tex = new Texture2D(2, 2);

                    tex.LoadImage(buffer, true);

                    // Create sprite from texture
                    title_screen = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
                }
            }
        }
        private int LogoId = -1;
        public title_screen_mod()
        {
            //loadResources();
            //Load Image "title_screen" 
            TitleLogoHelper.Initialize();
            LogoId = TitleLogoHelper.AddLogo(new title_screen());
            Log("'title_screen.png' Loaded Sucsesfully")
        }
        
        //<note> Maybe Use this function later</note>

        //public override void Initialize
        //{
            //Log("Initializing...")
        //}
    }   
}

#

just a simple mod for custom title screens gona add custom backrounds evetualy too

deep wave
#

have you referenced the dlls

stuck dirge
#

I didn't reference the ddls cuz I couldn't figure out how to do it in visual studio code but yeah think that's the problem. If you could link a tutorial or smthing then thad be cool

deep wave
#

if doing it in vscode, i believe you need to manually add references to the .csproj file

stuck dirge
#

oh makes sense

#

Should I change this to ".ddl" or "ddl" or smthing (in the .csproj)

<OutputType>Library</OutputType>
vocal spire
#

Library is fine

#

.dll stands for something like dynamic library

stuck dirge
#

k

jolly oriole
#

i think i should update the api docs for sfcore

stuck dirge
#

So I build the csproj?

#

becuse its referencing my project?

stone elm
stuck dirge
#

So this is my .csproj and its still giving me errors. My mod is called TitleMod and the file is TitleMod.cs and here is the code for my .csproj

stone elm
#

Okay, well, what errors? Less than before?

#

You could also use visual studio community and it'll sort out your references and what-not. It's not so bad, I promise...

copper nacelle
#

wtf is your csproj

#

this has the really old modding api post build

stuck dirge
copper nacelle
#

you don't use the api's csproj

#

the api is not a normal mod

heavy patrol
#

So @stuck dirge , have you followed the modding tutorial video?

#

It's not the best, but it gets you like 60% of the way there

stuck dirge
#

ok

jolly oriole
#

i fucking hate the fsm changes

#

this is called Talk Finish in 1432

surreal scroll
#

Hey Im new to modding. I was wondering: is there a way to change the sprites of the game without using 3rd party programms? Couldnt find any good toutorials on it so I came here.

potent dirge
#

I think you'd have to use third party programs for that, unless you manually hack it in

jolly oriole
#

just write your own mod to replace those sprites

surreal scroll
#

Thank you 🙂 I guess Ill use third party programs. Im just a little paranoid when it comes to downloading software I dont know hehe

copper nacelle
#

closest thing you can get to first-party is write your own

dark wigeon
#

what are you downloading? if it's from here then it's probably safe

copper nacelle
surreal scroll
#

dont know yet probably the ModInstaller everyone uses

potent dirge
#

Unless it's 56 he's hacked all our computers to farm bitcoin, I learnt that from someone failing to use the open source downpatcher for speedrunning sideax2uHappy

#

I'd say check the pins first if you want to mod

#

The mod installer is more for the end user

surreal scroll
#

You have any suggestions then? I have 0 idea on anything 😄 I just know a little C and C++

potent dirge
#

I've never done any skin modding but hmm

surreal scroll
#

I dont wanna just change the skin I just thought it was an ez thing to start with+

potent dirge
surreal scroll
#

Thank you ❤️

potent dirge
#

This is probably one of the most helpful things for starting up at first

stuck dirge
#

@potent dirge Is there a csproj template for VS Code? Or a documentation to get me started?

potent dirge
heady yarrow
#

related question, those api docs say to "install the Modding API from the the google drive or build it yourself" but there's no link to the source. Is it available?

potent dirge
heady yarrow
#

ok. cool. thanks. I had found that one

potent dirge
#

It should be this one, but you probably need to go back a few commits to find the one for official versions atm

#

I believe this is basically being refactored to work for the beta right now, so a completely new unity and .net version

#

Or am I wrong?

copper nacelle
#

a few is an understatement

heady yarrow
#

(ok, i feel less bad about not being able to get it working then 🙂

jolly oriole
#

should be like somewhere between 20 & 85 commits ago

copper nacelle
#

At least 45 ago

stuck dirge
#

how do I reference the Assembly-CSharp.dll in my .csproj file?

#

Is there a code snippet I could use?

vocal spire
#

Look at other mods on GitHub

#

Bruh my internet is dead

jolly oriole
#

just that the path is a relative path to your assembly csharp

quartz prairie
#

Where hollow point?

vocal spire
quartz prairie
#

Oh ok

copper nacelle
#

I am going to yeet you off the face of the earth

vocal spire
#

Please do for everyone who does this in here

copper nacelle
#

that's true

empty ridge
#

where does this event get sent to?

copper nacelle
#

GameObject

empty ridge
#

so like, the base object or the class itself?

copper nacelle
#

amazing

jolly oriole
#

EventTarget GameObject according to fsmview avalonia

copper nacelle
#

that is useless af

empty ridge
#

so all its saying is that it goes to some gameobject?

jolly oriole
#

it goes to itself, as other fsms on the knight react to it

empty ridge
#

ok

copper nacelle
#

mine is better

#

charm effects

#

qed

dark wigeon
copper nacelle
#

sick

empty ridge
#

ok cool, i've only just started messing with the fsm's and figured i probably just didn't understand something lol

dark wigeon
#

yeah blame my school for giving me mountains of homework

empty ridge
#

lame 👎 thanks for the info

dark wigeon
#

has a few other bugs which I'm going to fix ... at some point

deep wave
#

FeelsInvertedMan doing the mountains

dark wigeon
#

ok now you can actually zoom, I forgot that was an issue

flat summit
#

does anyone have the drive for the Horribly translated mod? I really wanna try it out lol

#

oop nvm i found it lol dissregard

ornate rivet
#
using (Stream s = asm.GetManifestResourceStream("FiveKnights.StreamingAssets.hubasset1"))
{
    AssetBundle ab = AssetBundle.LoadFromStream(s);
    FiveKnights.preloadedGO["hubfloor"] = ab.LoadAsset<GameObject>("white_palace_floor_set_02 (16)");
}

I have the thing above and it works the first time but when I leave the scene and come back, LoadFromStream returns null

jolly oriole
#

it should be possible to have the assetbundle loaded at all times, just not load the content unless necessary

ornate rivet
#

so you're saying do all my LoadFromStreams at the start of the game and save them
then when I need the content, do myab.LoadAsset(blahblah)?

jolly oriole
#

yes

ornate rivet
#

and does the loaded asset get destroyed when the scene is changed?

jolly oriole
#

if you don't dondestroyonload it yes

ornate rivet
#

ok good

jolly oriole
#

though that also depends in which context the loadasset is called

#

if it's called from the scene which changes, then yes

#

if it's from scene 1, then no

copper nacelle
#

why are your preloaded gameobjects stringly typed

ornate rivet
#

how should they be

#

56 you have seen my code before

ornate rivet
jolly oriole
#

anything on scene Menu_Title

#

just forgot the name

copper nacelle
#

what the fuck

#

use an enum bro

#

just asking for typos

ornate rivet
#

but that would be 5000 enums

copper nacelle
#

bro

#

how much shit are you preloading

#

it can't be more than 20

#

x5fiftM or can it

ornate rivet
copper nacelle
#

you are unwell

ornate rivet
#

but the problem is, I actually use that dictionary for nonpreloads too

copper nacelle
#

really makes you wonder what could be using memory

ornate rivet
#

so it's even more than that

copper nacelle
#

i'm still right

ornate rivet
#

that's true

#

next time I mod, aka never, I will do that

copper nacelle
ornate rivet
#

as in next time I make a new mod

leaden hedge
#

56 you should make the api only load signed mods

#

and take away salehs signing priveleges

ornate rivet
#

betrayal

copper nacelle
#

true

ornate rivet
#

wow

#

double betrayal

jolly oriole
#

sign the modinstaller first, so people don't get the popup

copper nacelle
#

:ax1uwide3:

#

the fabled triple betrayal???

ornate rivet
#

well SFG didn't mention me so no betrayal there

deep wave
#

i want to make it quadruple but i don't really have a history to betray

jolly oriole
#

saleh leaked pale court code smh

#

kicked from the team

ornate rivet
#

this is the perfect case study on why having friends is bad

copper nacelle
#

how do you expand a dependency tree asynchronously

leaden hedge
#

wtf grenade cant be sfg

#

ambiguity between my other alias and that FeelsBadMan

ornate rivet
#

glad we now know Katie's alt

leaden hedge
#

i mean you should know what it is anyway, the drive has my email address

copper nacelle
#

had

jolly oriole
#

has or had?

ornate rivet
#

the drive got deleted soulpensive

copper nacelle
#

some of the folders exist anyways

ornate rivet
#

why did it get deleted?

jolly oriole
#

56 now has gdrive monopoly

copper nacelle
#

because they weren't funny enough to dmca

#

to quote katie

ornate rivet
#

what does this mean

copper nacelle
#

kein simulator

jolly oriole
#

threw it in the trash

ornate rivet
#

kein did it?

copper nacelle
#

no

#

it is a joke

#

feelsbadman

#

dargons trashed it lol

#

which is less funny than a dmca

#

qed

ornate rivet
#

ok

copper nacelle
#

ruined

ornate rivet
#

qed indeed

leaden hedge
#

a dmca would have been funny peepoArrive

#

especially if he made a fake account to dmca as a kein imposter

copper nacelle
#

rofl

ornate rivet
#

who is dargons

leaden hedge
#

nick

copper nacelle
#

former mod

leaden hedge
#

some dargons

copper nacelle
#

yeah

ornate rivet
#

how come I didn't know them

copper nacelle
#

idk you're bad

ornate rivet
#

true true

copper nacelle
#

it was a while ago

#

why are you willingly mysoncursoring

#

omegamaggotprime

ornate rivet
#

because it's true

copper nacelle
#

uh huh

leaden hedge
ornate rivet
#

your mother said yes so yea huh

leaden hedge
#

you are mother said what

copper nacelle
#

that's so true

ornate rivet
#

it's ok so long as 56 didn't have time to screenshot it, the mistake is meaningless

#

if he still even does that

copper nacelle
#

no

#

so much effort

ornate rivet
#

ok good

leaden hedge
#

just wait until simo lets us back into the secret chat 2

copper nacelle
#

true

leaden hedge
#

and we can see edits / deletes again

ornate rivet
#

wait

#

they can do that

#

whoops

jolly oriole
#

lmoa justs dont make typis while writin

ornate rivet
#

true

jolly oriole
#

damn, autocorrect did a thing

heavy patrol
#

I feel so special getting my mod 'published' to the installer haha. This was my first time programming outside of school, and I very much appreciate all you guys documenting things very well and being helpful!

copper nacelle
#

does this look ok

woeful igloo
#

So, all the mods I've seen tend to involve modifying charms. Is it possible to add new charms(a 41st, etc,) or can they only be changed?

ornate rivet
#

yea it's possible

#

the modding api has a section on adding charms using SFGCore

woeful igloo
#

Thank you! You're wonderful. ^^

#

Will SFCore work? I've been using Mod Maker v.1 and it doesn't have SFGCore. Sorry, still really new to modding.

glass thorn
#

Does someone know how to determine ground level from the Knight's Y coordinate in debug mod?

vocal spire
#

I don’t think you can do that?

#

You can get the knight’s y cord tho

glass thorn
#

well yes, but since the Knight is a constant height, I should be able to calculate one from the other

vocal spire
#

?

#

Explain what you’re trying to do again?

glass thorn
#

I'm trying to work out what the Y coordinate of the ground in various places is, so that I can measure how high objects are above it, so that I can replace them with grub jars and have them be consistently on the floor

deep wave
#

that should be fairly easily doable

#

does rando not already have all the checks on the floor apart from moving shinies?

glass thorn
#

grub jars aren't subject to gravity, though

deep wave
#

this seems like a perfect opportunity to introduce grub physics feelspkman

#

(don't)

glass thorn
#

a lot of the checks actually don't start out on the floor

#

they start at the position of the object they replace and fall down immediately

#

you can actually see this happening in aspid arena room if you randomize geo rocks

deep wave
#

you might be able to quickly grab the position of all shinies on a scene though, and so find the resting position of every shiny after going through every room in the game zote

merry lotus
#

That was essentially what I suggested in #randomizer , but it was pointed out that there is possibly a problem because it would mean swapping an item twice, which is bad/inconsistent for some reason

#

It would mean no measuring needed though grubhappy

glass thorn
#

even if I knew how to do that, I'd have to detect when a shiny has stopped falling

#

kinda jank

copper nacelle
#

@glass thorn in debug or are you willingly to actually mod something

#

you can put in a ground field into debug if you just raycast down from the knight

glass thorn
#

I'm fine modding for it if needed

#

can you point me to an example of how to do that?

copper nacelle
#

just throw it like here

#

but Physics.Raycast(HeroController.instance.transform.position, Vector3.down)

vocal spire
#

I was gonna suggest that but I was busy with other things such as getting scammed in among us mod commissions

glass thorn
#

that looks like a good idea, will try

#

thanks

woeful igloo
#

Well, aside from the section that lists the charm numbers on the left.

#

Oh... oh gosh. I feel like such an idiot. SFCore is just for adding them to the list, correct? Of charms you can have access to? Not for building them?

copper nacelle
#

yes

#

you do the actual coding of the charm logic yourself

languid goblet
#

is the charm like, a class or something?

steady comet
# glass thorn well yes, but since the Knight is a constant height, I should be able to calcula...

A bit late but why not compare the y coord of the knight to the y coord of a grub jar in a scene you know about? e.g. in Deepnest_31, the grub bottle has y coord 36.5 and the knight has y coord 36.4, so the location you want to place the grub bottle is the knight's y-coord, plus 0.1?
(I tested this in Mines_31 and Fungus2_20 as well, the knight was 0.2 lower in Mines_31 but I thought the bottle looked a bit higher there. Maybe that was a placebo though. It was 0.1 in Fungus2_20)

ember furnace
#

Hi I've downloaded the Asset bundle thing in pins and I've dragged it into unity, I'm not too sure what's meant to happen. Can someone tell me what I need to do to start making mods

merry lotus
woeful igloo
#
        {
            Assembly _asm = Assembly.GetExecutingAssembly();
            using (Stream s = _asm.GetManifestResourceStream("jobChangeCharms.Resources.mage.png"))
            {
                if (s != null)
                {
                    byte[] buffer = new byte[s.Length];
                    s.Read(buffer, 0, buffer.Length);
                    s.Dispose();

                    //Create texture from bytes
                    var tex = new Texture2D(2, 2);

                    tex.LoadImage(buffer, true);

                    // Create sprite from texture
                    testSprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
                }
            }
        }```
So, not sure what I'm doing wrong here, but for some reason I can't get the image to load into anything. No distorted image or anything. No errors, either. I have the image(mage.png) classed as an embedded resource in the program, just not sure what else could be going wrong, as the image is still just blank. Any help would be appreciated.

The project name is HKTest1, but the class name is jobClassCharms. I've tried both methods on the 'get manifest' thing, but neither have worked.
ember furnace
#

I'm currently following 56's modding tutorial but I can't find the hollow_knight_Data folder in the Hollow Knight folder. Am I doing something wrong?

cedar hemlock
#

C:\Program Files (x86)\Steam\steamapps\common\Hollow Knight\hollow_knight_Data

#

on windows

ember furnace
#

I'm on mac

cedar hemlock
#

ah then i cant help you

ember furnace
#

Ok thanks anyway

copper nacelle
#

app/content/resources/managed/mods or something

copper nacelle
ornate rivet
#

yoooooo

#

that's amazing

jolly oriole
#

Looks nice

ornate rivet
#

is it possible to only load objects in an assetbundle that contain a certain substring?

#

I know i can use LoadAllAssets<MyType>().Where(...)
but that still loads all the assets of type MyType right?

jolly oriole
#

Yea

ornate rivet
#

so is there a way

#

or am I forced to do LoadAsset<>("String1")
LoadAsset<>("String2")
LoadAsset<>("String3")

jolly oriole
#

2nd

ornate rivet
#

hmm?

jolly oriole
#

The loadasset vomit

ornate rivet
#

alright unfortunate

jolly oriole
#

Or?

ornate rivet
#

Or?

jolly oriole
#

Afaik there could be a listallassetnames

ornate rivet
#

ohhh thanks
so do ab.GetAllAssetNames().Where(...) and do LoadAsset on that with for loop

#

that's much better

ornate rivet
#

incredibly questionable

#

getAllAssetNames makes the strings lowercase

#

why would they do this

jolly oriole
#

does it not work with the lowercase ones?

#

you also could check if an object is contained with AssetBundle.Contains over every string imaginable

ornate rivet
#

it does but I have to look through my code and make all the strings lowercase now

ornate rivet
#

So it doesnt seem to automatically destroy the loaded assets
I loaded an asset in scene A then went to scene B, and the asset was still there

jolly oriole
#

you can do UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(yourObject, theSceneYouWantTheObjectIn)

#

i think the object is loaded into the Menu_Title scene, which doesn't get unloaded

ornate rivet
#

so when you load the assetbundle, all the assets are loaded too?

jolly oriole
#

afaik no, just available if needed to get loaded

ornate rivet
#

but why are they in the main menu scene then

#

also this is an audioclip not a gameobject

jolly oriole
#

maybe loadasset just places loaded assets in the first active scene? idk

jolly oriole
ornate rivet
#

I load the scene assetbundles in the main menu so it doesnt take the player's time everytime they want to fight the boss

#

is that fine?

jolly oriole
#

me too

ornate rivet
#

ok good

ornate rivet
#

hmm? all of them

vocal spire
#

All 100?

ornate rivet
#

5

vocal spire
#

lol

jolly oriole
#

saleh added 5 dark souls bosses to hk

ornate rivet
#

I tried at one point

#

adding artorias's 3d model I mean

vocal spire
#

Ah

#

People should add 3D models to hk

ornate rivet
#

flashback to this

vocal spire
#

Huh

#

We should bring 3D models to five knittings

#

It’s a terrible idea, but that doesn’t mean we shouldn’t do it

glass thorn
ornate rivet
#

is there a way to just unload the objects of the assetbundle and not the assetbundle itself

#

from what I understand ab.Unload() unloads the assetbundle as well

ornate rivet
#

thanks

ornate rivet
#

I hate unity

vocal spire
#

F

ornate rivet
#

Since Unity recommended we do unload(true) once we dont need the assets anymore to avoid duplication when the player enters the scene again, does that mean I'm pretty much forced to reload the assetbundle during the game?

#

or could I do something like make a list of all the assets I load from the assetbundle and destroy those manually once the boss fight is over?

solemn rivet
vocal spire
#

Installer 1 vs installer 2

#

Who will win

solemn rivet
#

I mean 56 copied me

vocal spire
#

lol

solemn rivet
#

I showed this to him yesterday

#

and he went and did the same for the installer2

#

@copper nacelle yee ass

copper nacelle
#

you gotta

woeful igloo
#

Okay, I've tried multiple things, I can't seem to get it to work at all. I've saved an image as an embedded resource and can't seem to call it for my charm at all. I've tried using both the project name and the class name for it, nothing. I've even made sure it wasn't the image itself, used an image from another mod. As far as I can tell it should work, but it doesn't even glitch, just nothing happens, it remains an empty image. If anyone has any idea what could be causing it, I would heavily appreciate it.

copper nacelle
#

does it create the sprite?

vocal spire
#

Class name?

#

Can you show your code for that?

woeful igloo
#
        {
            Assembly _asm = Assembly.GetExecutingAssembly();
            using (Stream s = _asm.GetManifestResourceStream("HKTest1.Resources.mage.png"))
            {
                if (s != null)
                {
                    byte[] buffer = new byte[s.Length];
                    s.Read(buffer, 0, buffer.Length);
                    s.Dispose();

                    //Create texture from bytes
                    var tex = new Texture2D(2, 2);

                    tex.LoadImage(buffer, true);

                    // Create sprite from texture
                    testSprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
                }
            }
        }```
#

Used the code from the charm helper, as still very new and learning. I think it creates the sprite, because it's in the resources when I load it into ILSpy.

#

Project name is HKTest1, class name is jobChangeCharms

copper nacelle
#

log after tex.loadimage

vocal spire
#

Im 🐌

woeful igloo
#
    LogDebug("Something to be logged as long as debug logs are enabled");
    LogError("Something to be logged as long as error logs are enabled");
    LogFine("Something to be logged as long as dev logs are enabled");
    LogWarn("Something to be logged as long as warning logs are enabled");```
Correct?
charred topaz
#

You can also verify if the resource path is correct by calling assembly. GetManifestResourceNames and dumping the string array to the logs or something

copper nacelle
#

^

#

and yeah that's right

#

I'd just use log as far as debugging your code goes

woeful igloo
#

Huh. It didn't log anything. I'm assuming that means it never even got to that point, correct?

jolly oriole
#

then try nick's suggestrion to see which embedded resources are available under what name

copper nacelle
#

ye

woeful igloo
#
        {
            return Assembly.GetExecutingAssembly().GetManifestResourceNames();
        }```

And
```string resourceNames = GetEmbeddedResourceNames();
            Log(resourceNames);``` In the initialize, correct?
#

Sorry, really new and haven't done coding in years, so a lot of this is relearning and really sorry if I'm missing very obvious things.

jolly oriole
#

the log in a foreach

#

so

foreach (var s in resourceNames)
    Log(s);
#

and change the string in front of resourcenames to string[]

woeful igloo
#

So loadResources[]; foreach (var s in resourceNames) Log(s); ?

copper nacelle
#

Log(string.Join('\n', Assembly.GetExecutingAssembly().GetManifestResourceNames())

jolly oriole
#

56's is also a fancy way

copper nacelle
#

why

#

.ForEach is on List<T>

#

You'd have to convert

woeful igloo
#

.... Huh. Well, now I've run into a different issue. It's not accepting 'GetManifestResourceName', even when I added the three system.runtime references I had to it. :/

#

... Oh gosh i'm an idiot. XD Thank you.

#

Sorry, I had misunderstood a prior instruction and must of deleted the s when I did it. :x

#

Okay!

#

[INFO]:[jobChangeCharms] - Initializing
[INFO]:[jobChangeCharms] - HKTest1.mage.png
[INFO]:[jobChangeCharms] - Initialized

#

... Wait, does that mean all I need to do is remove the 'resources' from the code and it should work?

jolly oriole
#

yes

vocal spire
#

Yes

charred topaz
#

Looks like it

jolly oriole
#

or you move the image in a Resources subfolder in the solution

#

one of the two

woeful igloo
#

THAT DID IT! Thank you! Thank you so much!

#

Woo! So with that, I can get descriptions, names and images. ^^ Now... to code the bloody things. XD Thank you very much for all your help.

merry lotus
# copper nacelle

If you're planning on publishing an update, would it be possible to do something like put all installed mods above uninstalled ones, similar to how mods that need to update are placed? (That or tweak the check boxes on uninstalled mods, so that they don't have the square in them).

A lot of people seem to get confused about it and come to #modding-help , when I feel like a slight tweak on readability might help them out a bit.
||Possibly one day give it a custom icon too, so that instead of Mod Installer 1 / 2, we can ask if it's Zote or X :shroompog: ||

copper nacelle
#

I can remove the square tbh

#

i do want to see if I can add like groups that you can swap between

vocal spire
copper nacelle
#

omegamaggotprime

ornate rivet
#

the icon should have been elderZ

copper nacelle
#

no

woeful igloo
#

So, I'm obviously coding these wrong. Anyone know how to find the setups for the base charms?

jolly oriole
#

setups for the base charms
if i knew what this means i could answer

woeful igloo
#

Okay, so if I wanted to see how, for example, unbreakable health was coded, is there a location to find that? I've tried analyzing equipped charms, but that didn't offer much help.

jolly oriole
#

different charms are coded differently, quickslash is in the attack function of HeroController, fury of the fallen is in several FSMs and methods of HeroController

woeful igloo
#

Ahhhh, okay. Thank you.

half sequoia
#

in case anyone was curious, the option to keep the old enemy's HP in the enemy randomizer works, but not the option to keep the old enemy's Geo
also now the options menu in the enemy randomizer in-game is too big

jolly oriole
woeful igloo
#

Thank you.

copper nacelle
#

As far as the check box on uninstalled thing goes

deep wave
#

can we remove (windows) from modding api? there's been a fair bit of confusion over that

copper nacelle
#

that's my plan with 1.5

#

otherwise i break every installer

#

I am long sick of (windows)

deep wave
#

can you manually change the modfield to just remove (windows) from it

#

so the xml still has modding api (windows) but displays modding api

copper nacelle
#

i mean i could hardcode it in

#

awful

#

this is the current installer's

deep wave
#

exactly

#

nothing could be more awful

#

for reference, here i have some changes that i was going to make in hkmanager before school + tourney started zote

copper nacelle
#

cool

empty ridge
#

Soooo the windy noise on the main menu comes from an AudioSource and NOT from an atmoscue

#

spent an hour debugging literally nothing zote

solemn rivet
#

What would you rather it be like

copper nacelle
#

not hardcoded

#

qed

solemn rivet
#

What's wrong with it being hardcoded

#

U should see how I did the search function

#

You'll hate me more than ever

#

I'm thinking of adding search tags

#

That would make it less ugly

#

But would require new fields to be added to modlinks

copper nacelle
#

the if == "installed" was kinda pepega

solemn rivet
#

Yes

#

I'm specially proud of that part

#

Couldn't do a switch case cause of capitalization

copper nacelle
#

switch(search.ToUpper

solemn rivet
#

That's so ugly

#

Tags would be better anyway

#

That was just to get it working

#

But if you're already doing that and more to installer 2

#

Why should I bother

copper nacelle
#

dw nobody will ever use installer2

solemn rivet
#

Less work for me

#

They will when we use the auto update functionality of installer 1 to force upgrade to installer 2

copper nacelle
#

rofl

solemn rivet
#

I'm all about forcing people to do what they don't want to

jolly oriole
#

using a dark mode modinstaller?

solemn rivet
#

Oh shit

#

I should do that actually

ornate rivet
vocal spire
#

Oooo

jolly oriole
copper nacelle
#

why bro

#

you have saved yourself like 2 lines

jolly oriole
#

allows me to have

public class AdditionalMaps : FullSettingsMod<AmSaveSettings, AmGlobalSettings>

instead of

public class AdditionalMaps : Mod
{
    public override ModSettings SaveSettings
    {
        get => _saveSettings;
        set => _saveSettings = (AmSaveSettings) value;
    }
    public override ModSettings GlobalSettings
    {
        get => _globalSettings;
        set => _globalSettings = (AmGlobalSettings) value;
    }
    protected AmSaveSettings_saveSettings = new AmSaveSettings();
    protected Type _saveSettingsType = typeof(AmSaveSettings);
    protected AmGlobalSettings_globalSettings = new AmGlobalSettings();
    protected Type _globalSettingsType = typeof(AmGlobalSettings);
    ...

in every mod

copper nacelle
#

for what god forsaken reason do you have a type field

jolly oriole
#

technically unneccessary for the globalsettings

#

but reflection based variable name mapping to fields

copper nacelle
#

what

jolly oriole
#
private void OnSetPlayerIntHook(string target, int val)
{
    var tmpField = Settings.GetType().GetField(target);
    if (tmpField != null)
    {
        tmpField.SetValue(Settings, val);
    }
    else
    {
        PlayerData.instance.SetIntInternal(target, val);
    }
}

but with Settings.GetType() exchanged with _saveSettingsType

copper nacelle
#

Disturbing

#

Not even cached

woeful igloo
#

Are there any example mods aside from the charm one?

floral furnace
#

might wanna check out hell mod

woeful igloo
#

Looking into it now, thank you. 🙂

woeful igloo
#

Woo! It worked! 😄 It had exactly what I was looking for. ^^ My mod is coming together, piece by piece. ^^

#

Okay, this is going to sound really dumb. But is there like... a readme file thing in visual studios? I see a lot of the mods seem to have them, not sure if that's something that is uploaded separately though and the mod manager grabs it, or something else?

floral furnace
#

you can use a text editor, create a file then just save it under .md

#

thats how i did it at least

#

if you have a github you can also create and edit it from there, then just download the MD source from there

ornate rivet
#

anyone know where the unity tools folder is

#

nvm found it

jolly jungle
#

Btw what are you making?

woeful igloo
# jolly jungle Btw what are you making?

A class change-ish mod. Basically i'm making special charms that, when equipped, will amplify other mods. For example, the shaman snail charm will amplify soul charms, the mantis lord amplifies nail charms, the bee knight amplifies attacks in the air and certain charms that fit that thematic, the beetle soldier charm amplifies defensive charms. Not sure what I'll have the weaver charm amplify yet.

#

I was surprised how easy it was to make it so your damage increases while in the air. XD

woeful igloo
#

I really like the charm system, but I really wanted to do more with it. And I imagine this mod will be somewhat broken(but what mod isn't?) But I also think it'll be a lot of fun.

knotty monolith
#

You could try giving each charm an area to debuff as well.

woeful igloo
#

Oh, I am.

knotty monolith
#

But yeah, balance has gotta be ahrd.

woeful igloo
#

Mantis: No soul regen from attacks, reduces spell damage by half.
Snail: Reduces nail damage by half.

knotty monolith
#

mantis charm rewarding meticulous damage avoidance = v good

woeful igloo
#

Ayes.

#

Mantis I'm making a kind of like... 'Flurry warrior'. Go go go go! Cut, slash, attack, GO!

#

So somewhat passive healing(depending on how many hits you make), but requires you to get in there and be aggressive. Bee bee aggressive... Had to. I am sorry.

#

I'm also thinking I may try to do something with like... journal entries for them? 'You have bested this many foes, your strength only grows' and critical damage things. Not sure yet, though.

woeful igloo
#

I've only been doing it for two days, though, so like... it'll likely be a while.

jolly jungle
#

I have big ideas for a new charm system plus two more item systems but they'll be in the far future if I even have enough ideas

woeful igloo
#

If you'd like, I could show you what I have working at the moment, though it's not much.

jolly jungle
#

Sure :D

woeful igloo
#
Names.
Descs.
Player starts with them on new game.
Images(will need to make some later, but the placeholders load).

In progress:
When 2+ class charms are equipped, player is considered overloaded.

==========================

Tribes:

Snail shaman:
Gives 3 soul a second.
Reduces nail damage by half.

In progress:

==========================
Mantis lord:
Increases nail damage by 33%.
Reduces spell damage by half.
Reduces base soul gain from attacks to 0.

In progress:

==========================
Beetle warrior:
Grants 1 mask.
If equipped with fragile/unbreakable health, gives an additional 2 masks(total of 5).

In progress:

==========================
Bee knight:
Increases damage of all attacks while in the air by 33%.
Doubles soul gain from aerial attacks.
Gives 3 soul a second while wearing the hiveblood charm.

In progress:

==========================
Moth seer:
TBA

In progress:

==========================
Weaver spinner:
TBA

In progress:```
#

I decided this morning to make the documentation so I could remember WTF I was doing/trying to do. XD

#

.... And BF just suggested one i'll have to see if I can do. 'On parry, get a blue mask'.

jolly jungle
#

Increases damage of all attacks while in the air by 33%.
Doubles soul gain from aerial attacks.
Gives 3 soul a second while wearing the hiveblood charm.
Holy *

#

That's overpowered

woeful igloo
#

Oh definitely. XD I'm still testing/experimenting with everything and seeing what I can do before I dial it in.

#

Numbers are higher, at the moment, as the bigger numbers are easier to see the effect when I load up the test character to try them out.

#

Currently trying to figure out how to 'count' the charms equipped. Like, the obvious answer would be 'Make a thing that checks if X is equipped and increment variable by 1' then at the end add them all together to see how many of them are equipped. But that seems like an excessive solution when I'm suspecting there's a way to count how many statements return 'true'. XD

vocal spire
#

Just get the length of it

woeful igloo
#

Oh, right. Should have been more clear. I need to count how many of these charms in particular are equipped.

vocal spire
#

Oh

#

Well you can check if the charm list contains them as well

woeful igloo
#

Tried using int charmsEquipped = equippedCharms().Count(true);, but doesn't seem to draw from the list at the beginning of the mod, so working on that.

vocal spire
#

Are you trying to get stuff from the list in initialize?

woeful igloo
#

From ModSettings.

#
    {
        // Better charms, insert default values here
        public List<bool> gotCharms = new List<bool>() { true, true, true, true, true, true };
        public List<bool> newCharms = new List<bool>() { false, false, false, false, false, false };
        public List<bool> equippedCharms = new List<bool>() { false, false, false, false, false, false };
        public List<int> charmCosts = new List<int>() { 1, 1, 1, 1, 1, 1 };
        public List<int> charmIDs = new List<int>() { 41, 42, 43, 44, 45, 46 };
    }``` This.
vocal spire
#

I meant charms from Playerdata

woeful igloo
#

Oh, I know. I meant my original iteration. Is there a way to count the charm list and set it to only count the mods added?

vocal spire
#

Wdym

jolly oriole
#

may i say that you don't need to set the charmIDs list?

vocal spire
#

Wondering about that too

woeful igloo
#

I... don't even remember why I did that. I think i did it so I could ensure that they were always the right number if referenced?

vocal spire
#

The numbers change on game load depending on what mods using charm helper are on

woeful igloo
#

A lot of this is duck taped and cobbled together from what I managed to sorta reverse engineer from looking over other mods, so it's definitely not in the slightest pretty.

#

Removed it, though.

vocal spire
#

Use (instance)CharmHelper.charmId or something

prime urchin
#

Is there a good way to get an enemy's display name if you have the enemy game object? Currently I'm going through EnemyDeathEffects.playerDataName and using that to get the name from the Journal language sheet but I'm wondering if there's an easier way.

copper nacelle
#

Not that I know of really

vocal spire
#

Probably the journal entry stuff on the death effects

#

Search the journal entry list for something with the matching pd and get the language string from that and get the language from there

prime urchin
#

Yeah, that's what I'm currently doing, unfortunate that there isn't a better way

jolly oriole
#

hardcode it lol

vocal spire
#

You can probably also make something to quickly change the pd into a language thing

#

Ex: KillsX
To
NameX
Where X is the name of the enemy or something

#

Let me check frogcore source for something like that

#

Actually KilledX
To
NAME_X

prime urchin
#

I'm currently doing this and it works fine - might end up putting it in a file and loading it at runtime

var journalListGO = GameCameras.instance.hudCamera.transform.Find("Inventory/Journal/Enemy List");
if (journalListGO)
{
    var journalList = journalListGO.GetComponent<JournalList>();
    if (journalList)
    {
        foreach (var entry in journalList.list)
        {
            var entryStats = entry.GetComponent<JournalEntryStats>();
            _convoNameMap[entryStats.playerDataName] = Language.Language.Get(entryStats.GetNameConvo(), "Journal");
        }
    }
}
native pelican
#

Shot in the dark: anyone know of a mod that makes the geo count smaller (up in the top left bar)?

#

Working on doing that and even just finding the game objects I need to mess with is taking awhile. Would be nice if someone already figured out which objects need to change.

copper nacelle
#

there's a ref to it on hc or gm

#

HeroController.instance.geoCounter.gameObject.transform.localScale

woeful igloo
#

Hmmm. Are there any mods that add an 'up dash'? Any idea how complex something like that would be?

copper nacelle
#

blackmoth

native pelican
#

thank you!

woeful igloo
#

Thank you.

merry lotus
native pelican
#

oh that's super cool, i've gotta try out that mod

reef salmon
#

tying to write a program that pauses the game when you reach a certain health so that you don't just die to taking damage from multiple sources at once

#

but i'm kinda lost on how to exactly do that

woeful igloo
#

Thank you. ❤️

copper nacelle
#

Something like this in a take health hook?

var gm = GameManager.instance;

gm.StartCoroutine(gm.PauseGameToggle());
jolly jungle
#

Alright, suppose I have an update for Buzzbo that fixes something that was very wrong

#

How do I get it back on the drive?

woeful igloo
#

Shoot, can't find anything about a celeste.dll. :/ Found celeste the game, but not quite the same I expect. XD

languid goblet
jolly jungle
#

Yooo how'd you find that so fast

jolly oriole
#

skill

languid goblet
#

i remember reading the conversation and searched for "celeste momentum to hk"

#

afaik it adds superdashes

#

no hypers

#

but the supers are interesting since you can do midair supers with wings

woeful igloo
#

Hyper dash?

languid goblet
#

yeah

woeful igloo
#

And thanks Hoo. 🙂

languid goblet
#

technically you can do hypers but it's the same effect as a super
np

woeful igloo
#

I love that name because I sometimes say my words outloud and so 'Thanks Hoo' sounds like 'Thanks you'.

languid goblet
#

it does haha

copper nacelle
jolly jungle
#

sure 👌

woeful igloo
#

Oh! Hey, @vocal spire ? I just wanna say, the exaltation mod has been incredibly helpful in figuring out how things work. I'm assuming you're redfrog6002.

native pelican
#

The geo count and its children (from HeroController.geoCounter) seem to have their position fixed to the camera, but I don't think they're using a canvas because there's no CanvasRenderer (instead it has a TextMesh and MeshRenderer). I've been able to render a text mesh that follows the knight around no problem, but no matter what I do I can't seem to add something next to the geo count and get it to display. Nothing shows up at all in fact. I've been smashing at this for an hour at least, anyone have any tips that come to mind?

copper nacelle
#

next to?

native pelican
#

What I really expected to work is making an object with a textmesh and meshrenderer set up, and setting that object's transform parent to geoCounter (which is what the geo text does).

#

Yes, I want to place text next to the geo count

copper nacelle
#

there's death counter which goes next to

native pelican
#

that's a good tip, i suspect they just use a canvas (which I'll do if I really can't get this working, but I'm still hopeful), but i wanna check it out. do you know where the source is? Just googled hollow knight death counter mod github and similar but didn't find anything

copper nacelle
#

you can dnspy it

#

sid said the code was ugly or something I think

#

could ask him anyways

#

Ah wait no

#

That was the other one

#

It also puts it inside the inv fwiw

native pelican
#

😮

#

they did not use canvas, thank you very much for this

#

very intreseting, going to play with this for the next hour at least I'm sure

woeful igloo
#

Is there any command/call someone can make that will automatically calculate the charms equipped/their costs and set the notches as such?

jolly oriole
#

PlayerData.CalculateNotchesUsed

woeful igloo
#

Thank you.

#

Boom! that fixed it! Thanks!

vocal spire
woeful igloo
#

Well, it has been a massive help in this process. 🙂

red prism
#

hey there -- i'm rather new to modding but am experienced with using C# and Unity. i was wondering if anyone was able to help out by showing me how to modify a boss?

red prism
#

i have some of it figured out - using Unity Ripper and creating a new scene

ornate rivet
#

hmm you wouldn't want to use Utiny Ripper if you're modifying a boss.

#

best way to learn to modify bosses is by looking at the source code for other mods that do

red prism
#

can you provide an example?

ornate rivet
red prism
#

what if you wanted to add hazards to the boss arena?

ornate rivet
#

To add hazards, you preload the hazard then just instantiate it in the boss's scene

red prism
#

oh that doesn't sound too difficult

ornate rivet
#

There's a mod that lets you add hazards and custom platforms if that's all you want to do

red prism
#

i was thinking of modifying attacks and adding hazards

ornate rivet
#

Ah ok then.

red prism
#

and maybe changing boss sprites if possible

#

not to add new ones, just replace existing ones

ornate rivet
#

yea that's definitely doable

#

pale champion does all those things (adds attacks, edits attacks, changes skin, and adds hazards) but it's not very well coded so idk if I should link it

red prism
#

are the sprites changed through code or by just replacing the spritesheet?

ornate rivet
#

through code

#

well the spritesheet is replaced with code

red prism
#

thanks for your help, i'll check everything out

#

so i don't need to use unity to change anything?

ornate rivet
#

well if you want to add new stuff to the boss, creating your content in unity and exporting it with assetbundling would be helpful

#

but besides that, nope

red prism
#

@ornate rivet how do i run the fsm viewer?

ornate rivet
#

run the exe?

red prism
#

oh wait i downloaded the source code

#

that's why there wasn't an exe file

#

my mistake

ornate rivet
#

all good

dark wigeon
#

I mean you kind of can get readable with something like 3dmigoto, it just doesn't remove unity generated inline functions

#

same with utiny I guess although I think it's even more unreadable

#

and of course you can just load the compiled shader directly into the editor

#

3dmigoto will directly "decompile" from the dxbc and insert the correct names for the inputs

#

but yeah it mostly looks like that

#

I thought utiny already made it usable in unity

#

well if it doesn't, hkworldedit is proof you can load a compiled shader in the editor ok

limber storm
#

So I was looking at the Cyclone Slash and Hit L / Hit R FSMs. And I have no idea what these are, so if anybody can shed some light on them, that would be much appreciated:

vocal spire
limber storm
#

Yeah but the damage of...?

vocal spire
vocal spire
#

Evidence 1: left/right
evidence 2: it’s a spell since charm 19 boosts spells

limber storm
#

Time to wonder about the damage values then...

vocal spire
#

Wdym

jolly oriole
#

is that hk beta?

#

or 1432

limber storm
#

Uh... I think 1432

#

I don't have the Beta at all

jolly oriole
#

which of these are you looking at?

limber storm
#

Yeah there's a lot... the first one

#

But none of those actually?

vocal spire
jolly oriole
#

wait nvm, those are damages things, not setdamage things

#

set damage is only present on 4 pog

vocal spire
#

Nice

limber storm
#

Oh so these are just spells and completely unrelated to Cyclone Slash... fun

jolly oriole
#

1 of these should be cyclone

limber storm
#

I think Cyclone is Hit L-nailart_damage

jolly oriole
#

nope nvm

#

likely

limber storm
#

Okay so just some other random, similarly named things that get their damage increased by Shaman Stone... I wonder how to figure out what they are

jolly oriole
#

Q Slam, Scr Heads, Q Slam 2, Scr Heads 2
so Desolate dive, howling wraiths, descending dark & abyss shriek

limber storm
#

How did you find those?

jolly oriole
#

nesrak's Assetsview

woeful igloo
#

Anyone know if there are any mods that add a 'counter' to the UI? For example, an extra resource thing/etc?

jolly oriole
woeful igloo
#

Thank you SF, you are wonderful. ❤️

deep wave
#

just in case it's what you're looking for too, bingoui has an in-pause-menu ui too that may be worth looking at (or it may not idk tamershrug )

woeful igloo
#

Oh, just trying to make something that will display a counter of where your combo is for one of the charms.

woeful igloo
#

Also, does anyone know if there's a hook that activates whenever you cast a spell or when parrying? I tried going through all the hooks and I don't see any for those two.

jolly oriole
#

you'd have to make your own

woeful igloo
#

Thank you. 🙂

copper nacelle
#

if you're already reffing modcommon I made a spell hook thing in that

woeful igloo
#

I am!

copper nacelle
#

it's like ModCommon.ModCommon.Spell or something

#

*OnSpell

jolly oriole
#

OnSpellHook to be exact

woeful igloo
#

Hmm. It's giving a no overload issue. What kind of response is it expecting?

#

I... may be misunderstanding what it's doing.

#

.... Wait, I think i just figured it out, doh. XD

empty ridge
#

hey so i was looking to modify the options of a RandomAudioClipTable but realized that the Option struct is defined privately. do i have to reimplement the class?

copper nacelle
#

no

#

you get it as an object and then access fields using reflection

empty ridge
#

how? i know you can use getattr to set the field but don't you need to reference the type, in this case Option?

#

oh wait, nvm

#

i think i see what you're saying

copper nacelle
#

just normal reflection don't use the helper because you can't specify in the generic constraint

empty ridge
#

yuuup, gotcha

woeful igloo
#

Or... not. Huh.

#

So, if I'm reading it correctly... For the spell hook, I need to add the
ModCommon.ModCommon.OnSpellHook
And whichever function it calls needs to output a spell, correct?

woeful igloo
#

Ahhhhh, got it working, there we go. 🙂

woeful igloo
#

Anyone know any mods that apply things after/during a parry?

copper nacelle
#

hook HeroController::NailParry

woeful igloo
#

.... Wait... is... is THAT how it works?!

#

Oh gosh. XD I'd tried On.HeroController.NailParry and it wouldn't work at all, I thought I'd just misunderstood what it was for. :x

woeful igloo
#

Huh, didn't work either. I'll figure it out. Thank you, though.

#

Oh, wait, I think I see my issue. Is there any documentation on calling hooks from hero controller?

copper nacelle
#

no

#
On.HeroController.NailParry += (orig, self) => {
  // whatever you want
  orig(self);
};
woeful igloo
#

Ohhhhh.

woeful igloo
#

Okay, I think I made some good progress today on the mod. ❤️ Quite a bit since last time. I still have a while to go, but all in all pretty good I think. ^^ Thank you very much 56, Someone and SFGrenade. You've helped me a ton. ^^

jolly oriole
#

np

solemn rivet
#

I have a prototype mod from years ago that hooks nail parry is you still need it

#

I was gonna make another combat overhaul mod focused on parrying and perfect dodging, kinda like the focus mechanic in code vein

woeful igloo
#

Nah, the thing I got worked. 🙂 Wonderfully. ^^

native pelican
deep wave
#

is there a special case in modinstaller2 that specifically looks for the modlink called "Modding API (Windows)"

#

because if not then there seems like there would be nothing stopping submitting a pr to remove "Windows" from modinstaller1's special case while updating modlinks

copper nacelle
#

there isn't

deep wave
#

so theoretically we can immediately be rid of the cursed "Modding API (Windows)" w/ a pr and new build of modinstaller1

copper nacelle
#

if it doesn't do anything regarding the api before completing the update then yeah

deep wave
#

cool, adding that to the list of things to do right between "schoolwork" and "all skills" feelspkman

copper nacelle
#

the trick is waiting till 1.5 so I can once again violently break backwards compat

jolly oriole
#

1.5 breaks backwards compat

copper nacelle
#

:triumph:

deep wave
#

if i was making any significant progress on hkmanager i'd suggest that, as it has implicit support for multiple versions and multiple lists of mods for each version, but unfortunately i've come under a lot atm and am being forced to semi-abandon it grubsad

solemn rivet
#

why don't you like the Windows

#

so toxic

copper nacelle
#

because it's not even for windows bro

solemn rivet
#

whotf cares

deep wave
#

me because people get confused in modding-help

solemn rivet
#

what

#

wait

deep wave
#

modinstaller2 works on mac

#

modinstaller2 requires you install Modding API (Windows) to work

solemn rivet
#

does it show up on the list

copper nacelle
#

or linux

solemn rivet
#

oh

#

now that makes sense

deep wave
#

its on the list

copper nacelle
#

wait

#

oml

#

it wont' dependency it

#

because it doesn't fucking exist

#

suicide

solemn rivet
#

I thought it was just the internal name, not the name that actually shows up on the list

copper nacelle
solemn rivet
#

I mean

copper nacelle
solemn rivet
#

every mod depends on it

deep wave
#

amazing