#archived-modding-development
1 messages · Page 531 of 1
go sleep
rest!
_ _
Woke up at 3 pm yesterday
I’m only going back because I know it will be built done and quick after I switch to usings
does this work fine?
I uh, googled what usings are and I got intellisense as a result
nvm
OH I REMEMBER NOW
GOD HOW DID I FORGET THIS
@cedar hemlock yeah there's UnityEngine at the top
does it work now or not?
Show all your references
if I use both UnityEngine and CoreModule I get "exists in both 'X' and 'Y'" type errors
and when I did both usings it gave me an error saying it was unnecessary to use said directive
I've been programming on and off since 2017 so I dont know why im struggling with this
maybe its because im inexperienced with Unity, but I'd say this is pretty simple
so yeah im stumped on this one
current usings:
ye reference UnityEngine.CoreModule.dll
and now its just 138 monobehavior errors
we're getting closer
I think I just need to reference PlayMaker
...no?
you already have it referenced
alright I saw
the MonoBehavior errors needs UnityEngine to be referenced but I already tried toying with that
is there any other way to get rid of these errors?
try removing unityengine from refs and reffing it again
Right click on the redlines in code and see what the lightbulb says to do
Also doing this in 1.5?
I’m not even sure what version I’m trying to build at this point
I’m aiming for 1.4
Because that’s the popular version atm
then you have the wrong api version
because 1.4 api doesnt have mm_hook .dlls
what .net framework is your project
I’ll check when I wake up
if I can make a suggestion, putting adds in a boss fight is difficult to make fun
what's an add? is it like a term for spawning more enemies ?
yuh
gotcha
We can talk about it when I wake up
aww I missed stuff happening
Isn’t that the way we live? How desperately we try to keep up with everything in the world. Can you ever truly say that you know everything that is happening in this world?
Does anybody know what exactly was changed to make wall cling storage not work the same after 1221, and if it would be possible to patch it back in through QoL mod. (Or, of course, just a different mod.)
Nope. I wasn’t around during 1221. I only joined during 1.4.3.2
Hey all! I tried installing the Enemy HP Bar mod but they happen to take like half the screen when I play, since I play in 4K and it's apparently built for 1080p. I found the source of the mod (here https://github.com/ricardosouzag/Enemy-HP-Bars), I don't have any experience at all in C# but I'm a webdev, and I figured it wouldn't be complicated to change the resolution. I want to try editing stuff but I have no idea how to compile it to a DLL file, is there an easy way to do it? Thank you :)
go to the globalsettings file in your save files path and change the sizes there
you mean" ModdingApi.GlobalSettings"?
I only see "EnemyHPBar": true in it, should I add something?
Oh, right! Nice, works perfectly now, thanks a lot :)
What is the status of MI 2.5 and 1.5 and 3?
When is MI 20 coming?
when is mi 69.420 coming
how could one make fake achievements?
by that I just mean displaying like a custom achievement with a custom icon
oh sick didn't know that was a feature
well, that'll make it a lot easier
1.5 best mod version
well so should I try developing for 1.5 or 1.4.3.2
1.5
I hate 1.5 with a burning passion but you should probably do it in 1.5
also, is it possible to display an achievement multiple times?
Just remove achievement before giving it again?
oh
Or make it have a different achievement key
I'm looking real dumb rn aren't I
Like different key, same name/sprite
1.5 is better Saleh is just a coward
yea
\*
to both what jingle and 56 said
I saw that
saw what?
nothing
good
pale court leaks in hk main smhmyheads
Now no one will see the エロアニメ image I posted on main
sid can be based sometimes
often
true
For if any of you ever struggle with accessibility levels:
Why does it even need it? I mean: we have reflections so in theory every value is public
imagine being limited to 5 keywords
reflections are slow though
I said theoretically
What do you mean?
because reflection to get around accessibility for random shit is a hack that becomes necessary when dealing with a game
you don't want to just reflect every field in any random library
Isn't pale court gonna be out soon
I know. I said theoretically. I know it’s not practical
that's breaking the abstraction and leaves api compatible updates causing breaks due to depending on internals
I know. I’m just wondering what the use of accessibility is. Just make everything public and if changing a variable that has the potential to break things, make an expert keyword or something
The way i understand it is something like : say you make a mod , with 2 methods magic and magicAPI you expect people to use magicAPI , but i use magic , down the line you update your mod and because u expect people to only use magicAPI you change how magic works but keep magicAPI the same. but now your update breaks my mod 😦
this wouldn't happen if you would keep magic private and magicAPI public , unless i really wanted to mess with things and used reflection to get at magic
That is why I suggested an expert keyword
not having print hierarchy tree is murdering me
modcommon I love you
why did you forsake me
Steal it from modcommon
I couldn't compile it :(
Oof
I have one I could send
Isn’t for latest patch, will fail to load, but calling stuff in it still works
ooo
is unityexplorer not good enough for you 😤
No
You shouldn't be using internals regardless of your level of expertise
Because that breaks abstraction
The only case to is when you have to or you're doing something like serialization
send dummy
internal is so you can have things within the assembly but still keep it away from public users
I’ll do it when I have my computer
a random user shouldn't be able to mutate list backing stores or lengths because it could very easily lead to breaking many things
especially if your implementation uses something like unsafe because it knows due to internal state that what its doing is safe
suddenly you've ruined internal state and read oob
unsafe read oob so maybe a segfault maybe junk
The other use case for reflection is just traversing fields and checking stuff dynamically
Access protection shouldn't be ignored for no reason
Look at something like BitConverter.ReadInt32
if you could modify private variables you could fuck with the array length and get uninitialized data in seemingly safe code
Hmmm…… you are right
While it may seem pointless on the outside it allows library refactoring to take place independently meaning you can get speed benefits and internal improvements while ensuring that the consumers are unaffected
that sounds like what i did with sfcore's achievmenthelper
In cases like hollow knight some people elect to use attributes which ignore access checks along with a stripped public-ed version of the assembly so they don't have to deal with modifiers as bypassing them is necessary
other times you get heavy use of reflection
or unsafe
or all of the above
But in the general case modifiers are important for libraries and stability
modding just makes it feel otherwise because you kinda have to bypass them a lot of the time
Good point.
how can I check what NET framework my visual studio has?
See the csproj file
alright
its NET Framework 3.5
so if I wanted to build this mod for 1.4.3.2, I would have to use 4 or something along those lines?
No 3.5 is correct
Just make sure your referencing the correct API and unity modules
because I get build errors depending on what references I have
right now I have 18 errors for GameObject
From which folder are you referncing these stuff from?
Unity core module in API?
yeah im sort of new to this, although I understand what im supposed to do, I dont understand how to do it
I've been programming on and off since 2017
but never went too deep with Visual Studio
Do you have a 1.4 install?
You need to reference stuff from that install
alright
#archived-modding-help pins has a guide on how to get 1.4
I already have 1.4 as my default version on Steam
so uh, I need to move my references to the folder I just downloaded for 1.4, correct?
and leave the Unity dlls where they were in Unity? (I copied them over)
Wait
Open modinstaller, download modding api from that into your 1.4 install
And then only reference dlls (including unity dlls) from the hollow_knight_Data/managed folder in your 1.4 install
this looks like 1.5 mapi
have you installed mods in your 1.4.3.2 steam install?
yes
just copy the managed folder from there
ok
and use the dlls from that copy as refs
getting close to the finish line for my first test build
add playmaker
A path is probably wrong
Do you have HK open?
Or that
Where do you want it to go?
in the mods folder of my api references
Then just change the path in the .csproj file
hooray im learning
anyone know why I can't choose .net framwork 3.5 as a build option
I installed the sdk through the visual studio installer
I chose class library with .net framework
Well imma go do something else cya
...cool
then it should be there
but what do you have as options?
interesting, because for me it looks like this
I installed the 3.5 development tools through the visual studio installer and everything, so I'm really confused as to why it's not showing up
hm, idk
Could you screenshot the project type you’re choosing?
this one
It looks correct (I think)
@light zodiac i really hope it isnt a bother pinging you but i really need that source code if you have a chance to send it.
now the project told me to download 3.5 from here: https://dotnet.microsoft.com/download/visual-studio-sdks?utm_source=getdotnetsdk&utm_medium=referral
...which doesn't have the 3.5 sdk
I'm really loving this
hmm
so apparently you need .net 3.5 installed, not just the sdk
in retrospect this was very stupid
now time to try and code a mod I am probably never gonna finish 
so im sitting here wondering what the Aim function does
because I cant click on it on the FSMViewer without it crashing
my plan for one of Final Radiance's attacks is to have her eye beams attack go slightly faster, but then aim again and shoot five super accurate lasers from the opposite direction of the knight
Ug I’m too dizzy to mod right now
The day I fully understand fsms is the day I get to work on Final Radiance
My issue with programming isn’t understanding the building blocks, it’s how to use them
Sorry if I’ve been talking too much
how do i make a mod generate a ReadMe that i write?
why generate?
well display one
in game?
when someone clicks "ReadMe" in the ModInstaller.
you just leave a md/txt file next to the dll
im having a hard time understanding. admittedly i dont know how to mod, im just relaying this information to my modder friend who is finalizing a mod i had made. do you mean i do that while compiling?
yeah
I think?
wait
because when i look in my mod locations, for example, DebugMod has a readme, but no txt file in the location
he said next to the dll
maybe when you submit it to the modinstaller you submit a .txt file as well?
im actually curious how modinstaller uploads are done
oh okay. yeah me too.
glad it wasnt a stupid question. i feel like ive been asking a lot of those recently.
same here
im also new to modding, but right now I just want to get a hang of FSMs and modifying attack patterns
i have to admit i dont know how to mod whatsoever. i just commissioned the mod im having done and i just needed a few more touches on it.
is it a common theme that people who ask questions here feel dumb
I have a faint idea how to mod
because that's me
every time I ask a question here
but the reason programming may not be my favorite thing to do is because I dont know how to put the building blocks together
maybe its because modding this game is SUPER daunting if youre just getting into it
two computer science classes and neither one told the class to experiment and use logic
just following simple assignments
i looked at some stuff in dnSpy and was just like "what the hell"
@lucid needle is it daunting? I'm starting off by making a clone of Ultimatum Radiance
I dont want to make any other types of mods other than boss mods so I mean
well to someone that barely knows how to code HTML yeah its daunting to me lol
I know some HTML
keyword being some, I probably forgot some of it by now
just be thankful this isnt Minecraft Forge
Re Readme.txt:
Mod Installer puts the readmes in a different folder
So when you submit a mod, you should be submitting a folder that has the .dll and the readme, and then Mod Installer specifically puts readmes in one folder, and mods in the Mods folder
That being said, to those working on the new Mod Installer(s):
can you maybe put readmes into /Mods/Readmes instead of the root folder? That might make more sense overall
For those curious, this is where ReadMes currently get placed by ModInstaller:
ohhhhh! thank you so much!
there is a zip you upload
within the zip is the dll and the readme and whatever else
in the near future the plan is one folder per mod under the Mods folder
So readmes and stuff are close to the mods
if a mod i had commissioned is finished, can i submit it for the ModInstaller? i feel its a pretty good mod. it raises how much health all enemies in the game have depending on what × you set and raises how much mask damage they do to you depending on what number you set.
i call it the "AAA New Game Plus" modpack. (mostly because thats what the title ended up being)
ive even been writing a ReadMe for it.
Yes
awesome!!! ill post it here when ive finished testing it as much as i can!
@lucid needle you know I had an idea for a Hard Mode of Hollow Knight where every enemy and boss is buffed to be difficult at the point you fight it
yeah certain enemies and bosses scale with your Nail Damage, and the mod boosts that too.
unless you mean they scale health to your health
or similar
what's the depot number for 1432 if I want to create a separate install for it?
It's easier to get the beta then copy the folder tbh
The numbers are on src though I believe
I'm just trying to be able to use fsmviewer+assetstudio w/o having to switch patches a bunch of times


currently the base mod works, but we are also getting it to play better with EnemyHPBar mod. basically: can i also update the mod after its uploaded?
it currently works with EnemyHPBar, but the HP bars only show up when you bring the bosses to vanilla health
Hold up is this
🍝 ????
Yes
thank you!!! this is exciting!
does the AreaTitle component even do anything
Ig its for area titles, but i cant check rn
don't worry, you're not alone 
Which Viewer are you using? The new one (Avalonia) isn't meant to crash so much
Avalonia isn’t in the pins
Lemme find it for you
It also looks slightly more aesthetically pleasing
This is what I was given two months ago
I’m on mobile right now so if you dm it to me I’ll download it tomorrow
I’m still trying to fully figure out fsms for my radiance mod
Because I want to be more than just some ultimatum radiance clone
Like symmetrical phase 4 platforms and maybe some other mechanics
I learned some Visual Studio stuff so that’s cool
I personally prefer modding things that don't get much attention
I’m doing radiance first because it’s simple with the code from ultimatum radiance to go off of
But it's always fun to see a new radiance 
Ah, good choice
But nearly every radiance mod feels the same
Always best when you have something to base
like sheo? 
Except for AnyRadiance 2 but that’s just a bullshit hard boss
ikr? it's all just "faster and more overlapping"
Yeah but the spritesheet isn't done yet
wait you're working on a sheo mod?
How about markoth platforms 
Also lunatic radiance but I’m not at that level yet to make a literal hollow Knight bullet hell
Wait someone else already is?
Damnit
I was thinking Markoth attuned platforms would work
that somebody else may be me
Eyy, nice 
idk, what was your idea?
I just don’t know how to carry out enemy spawns if I ever make it to that point
wdym runick?
Hm, maybe
Gotta find the right infected enemies that don’t just fly offscreen or fall in the void to start
Before balancing, though, comes making sure you can even spawn them in
do you have any idea how you want it?
Well
The only idea I had so far was 2 primal Aspids while radiance shoots a laser every 5 seconds
I'd suggest a timed spawn rather than a attack-based spawn
Yeah that MIGHT be easier
But I’m still struggling with fsms so I’ll have to focus on learning that first
make a timer separate from her attacks and such
I know how they work but getting custom eye beams to work is another thing
ooh, I feel you
Before the colo stuff, I was in the middle of working on a Crystal Guardian mod
Ooh
Should I focus on the light orbs attack first?
Depends what your idea is
Because my idea is to have them spawn at the eyes like a Gatling gun
ah, nice
So a bit more basic than lasers
yeah, that should be simple
So far I sort of got them to spawn faster
you'll only need to change their spawn position, and speed
Fun fact: I leaked Fyremoth yesterday
fun fact: we got rickrolled on a massive scale yesterday
it was fun
cruel is the better word
nah, was real fun commiting mass piracy by letting people download the original rickroll video
uh, idk what you mean with
preloaded buzzer
but generally i think no
Buzzer is vengefly?
ye
I did it so I could make self damage work

constructing a damage box on the fly isn't that difficult, y'know?
// this can be put whereever you want to let the player die
var go = new GameObject("death", typeof(BoxCollider2D), typeof(DamageHero))
go.Layer = 8;
var bc2d = go.GetComponent<BoxCollider2D>();
bc2d.size = new Vector2(4, 4);
bc2d.isTrigger = true; // might be named differently
var dh = go.GetComponent<DamageHero>();
dh.damageType = 1;
dh.damageDealt = (PlayerData.instance.GetInt("health")+PlayerData.instance.GetInt("healthBlue")+PlayerData.instance.GetInt("joniHealth")) * 2;
go.transform.position = HeroController.instance.transform.position;
Nice
what linq expr could I use to get an array of all the waits/randomwaits in an fsm?
FsmStateAction[] waits = _fsm.FsmStates.Select(state => state.Actions).SelectMany(actions => actions).Where(action => action is Wait || action is RandomWait).ToArray();
looks about right
Does the player, you know, have a damage function?
Just create an empty one
just do what i did and don't even interact with that yourself, as that can only go wrong
does "Lord" sound like a step up from "Master"
I wanna refrain from using "God" that's used in a billion other mods
King?
Paintking Sheo 😐
Sounds like a knock-off tbh
Paint Tarkus Sheo
Production Manager Sheo
i want to speak to your manager
Paint Lord sounds the best imo
oh shoot
Paint Ninja Sheo
is it possible to export a unity shader to a file at runtime?
I dont think so
at least I doubt there's a non-hacky way to do it
trying to get Default/Sprites-ColorFlash and modify it to replace the brush tip and slash colors
though idek if you can load a shader at runtime like that
utinyripper saves the day
gamer
I thought Utiny couldn't rip shaders properly
Oh no, not shaders again
would I have to hack around with assetbundles to get a shader to load at runtime, if at all?
once you load the assetbundle itself it should be fine i think
ok so utiny doesn't work after all
maybe assetripper will
Wouldn’t that still give you the compiled versions of them?
alright for today im going to study FSMs
My condolences
hi 56
hi 56
hi 56
hi 56
hi 56
hi 56
hi
hmm
FindFsmFloat and the such seems to be errored out. Has there been any changes to that command since it has been put up on the APIDocs?
should in theory only be assigning the shader to the tk2dsprites material
.Fsm.FindFsmFloat
so uh
the prefix Fsm should be replaced with any Fsm im trying to pull it from, correct?
like _attackCommands.FindFsmFloat?
because thats what I did
I also put a using for Playmaker
what im trying to do specifically is set the position of the orbs to 0, but im not sure if that will make it spawn in the center of Radiance or if it will spawn at the map coordinate 0,0
there're like 80 material and materialInst fields on tk2dSprite, tk2dSpriteDefinition, etc
most of the definitions share a material
if you loop through all of them on the animator it should be plenty
Is this a change from 1.4? I would have done pfsm.FsmVariables.FindFsmFloat there
tk2dSprite.GetCurrentSpriteDef().material
you can do either I'm fairly sure
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
fixed4 _Color;
fixed4 _FlashColor;
v2f vert(appdata_t IN)
{
v2f OUT;
OUT.vertex = UnityObjectToClipPos(IN.vertex);
OUT.texcoord = IN.texcoord;
OUT.color = IN.color * _Color;
#ifdef PIXELSNAP_ON
OUT.vertex = UnityPixelSnap(OUT.vertex);
#endif
return OUT;
}
sampler2D _MainTex;
sampler2D _AlphaTex;
float _AlphaSplitEnabled;
float _FlashAmount;
float4 _ColorKey;
float4 _ReplacementColor;
fixed4 SampleSpriteTexture(float2 uv)
{
fixed4 color = tex2D(_MainTex, uv);
#if UNITY_TEXTURE_ALPHASPLIT_ALLOWED
if (_AlphaSplitEnabled)
color.a = tex2D(_AlphaTex, uv).r;
#endif //UNITY_TEXTURE_ALPHASPLIT_ALLOWED
return color;
}
fixed4 frag(v2f IN) : SV_Target
{
fixed4 c = SampleSpriteTexture(IN.texcoord) * IN.color;
/*if (c.r == _ColorKey.r &&
c.g == _ColorKey.g &&
c.b == _ColorKey.b)
{*/
c = _ReplacementColor;
//}
c.rgb = lerp(c.rgb, _FlashColor.rgb, _FlashAmount);
c.rgb *= c.a;
return c;
}
just trying to get the whole sprite to be a certain color for now
very good
he's become khan
get qol and save yourself 10 seconds on every test
ok

imagine if someone made a magenta square boss mod
check the player log tbh
and if you look up the default shaders you can find some impls to test if those work
Ug, i'm not sure why this isnt working 
_attackCommands.GetAction<SetFloatValue>("Orb Pos", 1).floatValue = 0f;
_attackCommands.GetAction<SetFloatValue>("Orb Pos", 3).floatValue = 0f;
_attackCommands.GetAction<SetFloatValue>("Orb Pos", 4).floatValue = 0f;
_attackCommands.FsmVariables.GetFsmFloat("Orb Max X").Value = 0f;
_attackCommands.FsmVariables.GetFsmFloat("Orb Max Y").Value = 0f;```
Im also not sure why its going slower now
using the result of Shader.Find("Sprites/Default-ColorFlash") works fine
you probably set the velocity
video won't load for me
yeah I set velocity on accident
maybe I got the wrong index
wait a second... velocity is not only position, but also direction and speed
but they still didnt all spawn at the same spot. weird
you set the max to 0 idk what the min is and both might get set before that state
and then you changed setfloatvalue not randomfloat
I sent the code that does that up here
oh
yeah maybe thats the problem
well im doing something right, they're spawning on the floor now
didnt know whether to ask this in Modding-Help or here but my buddy and i just finished polishing up a mod ive been having work done on, its a nearly perfect mod if i do say so myself, but every time i open ModInstaller, it tells me its outdated. well, it cant be outdated, there is nothing to update to. any fix for this?
actually i think we figured it out: i had an older version in my Disabled Folder

now have that work correctly ingame
having it work in game shouldn't be bad

yeah, Standalone Windows
how do i submit a mod to display on the ModInstaller? i think this mod is finished, and its an absolute banger of a mod.
make a pull request for https://github.com/ricardosouzag/ModInstaller with your mod added in modlinks.xml
awesome! thank you!
all this just to make some colored paint that probably won't even look good
but if you figure it out, it will be progress for all mods
done. do i link it here? or just wait?
what do you want to do to the paint again
I can give it a shot
I have a working shader thing for something else
I want to chroma key the brush tip and paint slash colors into different colors so there're more than just 4
so have like a field on the material shader to change the active color or for each individual object?
they share a sheet I'm pretty sure
I guess you could do it based on the original and some modification of the color from there
yeah, the active color in the whole sheet
here's the shader that worked in the engine
for now I'm just trying to replace all white pixels with black
'preciate it
im sitting here wondering how to do Final Rad's eye beams
because I know what I WANT to do, but I dont know how I would pull it off
I might need to insert some events too and I barely know how to do that
got the latest unityexplorer working for 1.5
epic
11gb later
unityoooooooooooo
unityexplorer is voring all my game inputs
Looks better than the solution I came up with. I tried porting yasirkula's Runtime Inspector
true
voring
wtf
the noun is different than the present participle
it only does the former
hello water
yeah we'll get to that eventually, lets not make that word a topic ever thanks
why does my config.ini keep resetting on game start
to suffer
Does it parse?
If it does then just make the file immutable
Can't lose
UnityExplorer 4.2.0 initializing...
Cached AppDomain assemblies in 1.411387 seconds
Initialized Legacy Input support
Unable to patch Cursor.set_lockState: Invalid generic arguments
Parameter name: typeArguments
Unable to patch Cursor.set_visible: Invalid generic arguments
Parameter name: typeArguments
Unable to patch EventSystem.set_current: Invalid generic arguments
Parameter name: typeArguments
Unable to patch EventSystem.SetSelectedGameObject: Invalid generic arguments
Parameter name: typeArguments
Finished core setup, waiting for UI setup...
Creating UI...
Loading modern bundle for Unity 2020.2.2f1
🤌
live footage of config.ini getting nuked whilst starting hk
what, the shader?
no the sheo
pog
idk how battle scene children includes the knight
but alright then
Was your problem shader code or mod code?
or should i just give both
mod code, it looked alright in unity, just not in game
did you modify the shader file at all?
i did not use your shader ngl
i took one i had and deleted 90% of it
very boring shader
only the bottom subshader is used
can just kinda yeet everything else
and the bottom subshader is just dot the delta from a constant vec and check if it's under a threshold, if so change the fragment output
what's _Pain
i was trying to scale the level of randomness in the color
i believe
though that part doesn't matter
41-185 are commented out
the glitch one is like robbed
that is why it is mit
shortened if you just want the color exchange part
guess I have to incorporate sprite flashing now
Hi is there a way I can make a mod where I change a bunch of sprites
are my drivers fucked or what
can someone w 1.5 api check if this works
this is a project with literally just the class that 56 gave plus an ab containing the jingle shader
I can give it a try
I can check in like an hour
One unrelated bug I found is that if a single mod fails to load, the mod list in the corner doesn't seem to show up. I got this when I added Jingle's mod but forgot Vasi
Got the same issue
maybe I shouldn't be building bundles on 2020.3.15f? or using assetbundle-browser at all?
Maybe, but then I would think it would throw an exception at this point if it was the asset bundle:
Shader[] shaders = ab.LoadAllAssets<Shader>();
if (shaders == null || shaders.Length == 0)
throw new InvalidOperationException("Unable to load shader!");
I'm also seeing this in the Player.Log file:
D3D shader create error for vertex shader [0x80070057]
It shows up when the Sheo Scene is loaded and it's printed twice
56's bundle fixed it 👍
did you use assetbundle-browser or did you write a script?
former
it was the unity version
the days of using a newer version of unity to make bundles is over 😔
Assetbundle browser 
The fsm viewer in the pins doesn't seem to work. It keeps crashing. Anyone got another program?
thanks
To be fair, I can't seem to open some FSMs in FSMViewAvalonia either. It just crashes when I try to open .../Crossroads_10_boss.unity and then the False Knight New-FalseyControl FSM.
is there a mod that multiplies the amount of Geo you gain?
no. Also, wrong channel. Go to #modding-discussion
sorry. i figured to ask here because my next question was going to be asking for one.
should be easy enough
awesome. i could even swing you a tip for it if you wanted.
nah, i've put more effort in a mod than multiplying some ints
watch me regret that sentence
cool. i figured it was as easy as just multiplication. but like you said, watch us regret saying that lol
my rate is $40/hr and I estimate such a mod will take a full work week
and that is if you work 24/7
Damn, that's cheap af
i take payment and then start to work ofc
how do I manually recreate some of the effects of a dreamnail hitting an enemy?
I don't know how to find them with DnSpy
There's a component called EnemyDreamnailReaction
I would guess that has what you're looking for, based on the name
_dreamImpactPrefab = _dreamNailableEnemy.GetComponent<EnemyDreamnailReaction>().GetAttr<EnemyDreamnailReaction, GameObject>("dreamImpactPrefab");
I know, I deleted it on an enemy and I want to only partially recreate the effects of it
oh wait I think that uses modcommon 
shouldn't be hard to adapt it to ReflectionHelper tho
Oh god, reflections
I still have no idea what they are or how they work
Anyhow I'll need to continue this later
is the proper way to set shader parameters with Material.Set{x}() or by assigning a MaterialPropertyBlock to a Renderer?
I was using Color when I should've been using Color32
yooo
oh no the paint particles are still the same color
prob either hardcoded or not part of the normal sheet
somewhere in the fsm i mean
i hate qml
is cpp not available
nothing about hk, just ranting in general
though i could force it onto people with mi3
would be nice, because it looks fucking awful
could the object pool be causing these audio glitches
private void AudioPlayOneShotSingle(AudioClip clip)
{
GameObject actor = ObjectPoolExtensions.Spawn(_audioPlayerActor, transform.position);
var audioSource = actor.GetComponent<AudioSource>();
audioSource.clip = clip;
audioSource.Play();
}
there are no such things as mistakes
Wait, are you making a colorblind-friendly Sheo‽
ig, since it'll cover the entire rainbow everyone'll be able to see a color
private void AudioPlayOneShotSingle(AudioClip clip)
{
StartCoroutine(Play());
IEnumerator Play()
{
GameObject actor = ObjectPoolExtensions.Spawn(_audioPlayerActor, transform.position);
var audioSource = actor.GetComponent<AudioSource>();
audioSource.clip = clip;
audioSource.pitch = 1;
audioSource.Play();
yield return new WaitWhile(() => audioSource.isPlaying);
audioSource.clip = null;
actor.Recycle();
}
}
hacky af but works
welcome to programming
does fsmviewer crash for anyone on these two specific states in nailmaster_sheo?
there's only one action on each but it's weird
omg keep them lol
temple of the kevins sheos
can I use hooks in classes that aren't the main class? (the one that extends from Mod)
yeah
what's the difference between the takehealth and takedamage hooks?
there's no entry for TakeDamageHook
that's AfterTakeDamageHook
unless the "after" doesn't mean anything
80% sure it's reffering to takedamage hook
hmm ok
TakeDamageHook and AfterTakeDamageHook are different
The difference appears to be the timing (unsurprising IG), https://github.com/hk-modding/api/blob/master/Assembly-CSharp/Patches/HeroController.cs#L532
I'm just using takehealth for now
also, does anyone know what I'm doing wrong here? debug log says the coroutine is throwing a null reference exception
ngl I'm kinda just bs-ing my way through this
I have no idea what this is supposed to do
set health to 1 after taking damage, restores health back to what it would be after 5 seconds
is there a way to have your string be processed by language get hook ?
Yes
like if howwow knyght mod is installed , i want to put my own strings in the hook so that my strings are owoified
Idk how though
Don’t mind me. Just gonna send some code
Just add something to the hook that returns the string you want
Forgot github didn’t load on mobile for me. Nevermind.
you just need proper priority
if the text transformation is after your own strings then they'll be changed
I need to get the like monomod hook priority thing
It's so good
Or just call string transformation using reflections
right so when i call orig , if i am the top dog then all other mods get my values , and if i dont call orig other mods just dont get the hook?
(ones after my mod i mean)
even custom strings that might not exist in the original game?
what's your mod name btw
like i make my own tmpro for them for example
i work on many mods, i mean no particular one here.
just trying to understand how the priority thing works. because i have been recommending to people to always call orig so it wont break.
the one that might apply here would be smolknight i think if i get around to making the new area i planned
are you monomod hooking the language or what
I mean just going through normal language and language get should get transformed
i think owo-mod 1.4.3.2 even uses a high/low priority, which ever makes it go last
how though if i just make my own tmpro and put it on a go and put my text in it as a string i dont see how it would be owofied
i can see dialog boxes being owofied
owo mod 1.4 doesn't actually use the languagegethook, it does the detour thing on the function
don't set the text yourself, let it be set with SetTmproText or something
wtf
it's a monobehaviour
If this wtf is "what do you mean" then I don't really know how to explain it https://github.com/henpemaz/HowwowKnyight/blob/master/HowwowKnyight.cs#L54
aaa what is this
and that uses languageGet internally ? 😮
if i understood correctly this just makes a new hook from languageGet ? does that somehow make it the last thing that runs ?
i am confuse
yes
also if i dont call orig do other mods just not get the hook?
if they registered the hook after my mod ?
this looks strongly like decomp for some reason
does this attack look interesting
wanna avoid repeating mistakes like traitor SHOD by listening to feedback
yeah
for 1432 you need unity 2017 to make asset bundle and 1.5 u need 2020 ? or are the bundles cross version compatible ?
looks great
they're not cross compatible
you can use 2017 ones in 2020 though
but can i save the unity project reopen it in another version and re build using the bundle tool menu thing ?
huh really? why did I have to rebuild pale court then?
yea you can reopen the same project in a different version
shaders/scripts/whatever
probably that yea
i am going to be following your video saleh, anything i should note to do differently? (since you marked it as kinda outdated)
and do minor / patch versions matter or can i take any 2020 unity and any 2017 unity
get the specific one hk uses
2020.2.2f for 1.5
2017.4.10 / 2020.2.2
I found that I could bundle for 1.4 with unity 2018 but best to be safe
I dont think anything else changes besides that in my video
The api might be a bit different from my code in hk 1.5
and considering i am on mac do i need windows build support for asset bundling ?
only when dealing with shaders
i probably wont be doing it but will download it to be safe
but then you'd need a bundle for each platform
this is what i am installing rn
aaa probably wont deal with shaders intentionally any time soon
also like is the blender plane thing necessary or can i just draw a png and import it as long as i draw my collider on it big enough that the knight can fit the gaps ?
as long as you have something that looks like collision it should work
i assumed that the blender thing was to help with unity units
me/saleh/others are using blender because that's likely what TC also did
as the vanilla scenes also have their terrain in mesh chunks
okay i'll just do that too then
another question, how do i skin the blocks so they look different? they're not a GO so adding a sprite doesnt make sense
the blocks?
how could I handle two possible coroutine paths based on a condition?
yield return new WaitUntil(() => {
if (Mathf.Abs(_hero.transform.position.x - transform.position.x) <= _dStabRange)
{
StartCoroutine(DStabAntic());
//yield break;
}
return IsGrounded();
});
StartCoroutine(Land());
do I have to use like a bool
The thing that is the terrian that we divided into squares in blender
that is done in vanilla with meshrenderes, or the mesh, i actually don't know what you mean with skin, so they look different
you have a mesh that is up to 32x32 units, shows maybe a path or something
have a go, with meshfilter and meshrenderer, so the mesh is visible (with black color to be vanilla)
then either edgecollider2ds or polygoncollider2ds, depending on what you want, polygon is imo better, but TC uses edgecollider
so in saleh's video the mesh thing looks like a grey shape in game, but in game the things are clearly not black and like floor or whatever right ?
so i meant how do i take a png of how i want the floor to look like and make it look like that in game
so i get that you'd need a collider of some sort to make the knight be able to walk and climb on it
but i also want it to not be grey and look like prettier
that's because in the video the mesh has default material, with a custom material (or just put SFCore's PatchSceneMap monobehaviour on the same or a parent go) it will show up accordingly in game
what's the idea behind your paths rn
like wait until the hero is in range or you're grounded and then move to the next coroutine after that?
i'll take a look at PatchSceneMap once, but can u use a material to make the edges of cliffs be different from the middle and such?
if you mean like how tot does it, it's just sprites layered above the mesh thing
// or something i presume
_anim.Play("Idle");
bool InRange() => Mathf.Abs(_hero.transform.position.x - transform.position.x) <= _dStabRange;
while (!InRange() && !Grounded())
yield return null;
if (InRange()) {
yield return DStabAntic();
} else {
yield return Land();
}
you mean to add this to the whole thing ? https://github.com/SFGrenade/SFCore/blob/master/MonoBehaviours/SceneMapPatcher.cs#L5
it just seems to add a material and set texture to whatever is set there for all of the children, so if i want a different texture for one tile i would need to somehow access it and set the value
oh yeah I can just recheck the range condition after one of the conditions has been satisfied
i have no idea what you want to end up with, but sounds about right?
like separate GOs with sprites in front of everything ?
yes
vanilla also does that
okay then can the terrain also not be that same go?
something like
yield return (InRange(), Grounded()) switch {
(true, _) => DStabAntic(),
(_, true) => Land(),
_ => null
};
though you'd need to break out after
so maybe not that
the layer thing is only important for collisions/triggers
how can i upload mods to the public?
okay and can i set the sprite GOs in unity and asset bundle them so i dont have to manually place it all in code ?
yes
okay so workflow is :
0. download unity , blender, add asset bundle browser , watch saleh video , ask sf lots of questions
- make mesh - add collider
- add gos with sprites and make it pretty (optional for stage 1)
- add gates / enemy locations / item pickups (as objects with some name and then do magic to replace them them in mod code)
- bundle
- be good with mod code
- it should work in game
i'd say gates would be step 2, if you mean battles gates leave them where they are but add transitions in and out of the scene, for easy access
no i mean entry gate for scene transition
pls share
have go with meshfilter & renderer, right click meshfilter component -> create collision
ez
is it ok to bind a monobehaviour to herocontroller?
this makes what ? collider the shape of the png ?
or the mesh
collider the shape of the mesh
gotcha easy tracing
Yes, though I think people usually do it with gamemanager
In unity
.
instructions
anyone knows how do check how much time the player dash has?
not the cooldown, i meant how much is left until the dash can be used how do i find the value
gotcha thanks i am just being triply sure i did not misunderstand
hmmm, considering tracing oro and mato's sprites into extra sheo sprites and making paintsage sheo
Maybe herocontroller.instance.dashcooldowntimer - DASH_COOLDOWN
this sometimes doesn't return true on a non kinematic rb that's clearly hitting the floor
private const float _raycastExtent = 0.25f;
private bool IsGrounded() => Physics2D.Raycast(transform.position, Vector2.down, _col.bounds.extents.y + _raycastExtent);
copying CheckCollisionSide code seems to work
Is there a hook for when a spell is cast?
nope
ok
On hook?
fine too
On.HutongGames.PlayMaker.Actions.SpawnObjectFromGlobalPool.OnEnter
This is what dandy used for smol knight to make Vs smaller
ok
This doesn’t work for shriek/wraith
<@&283547423706447872>
ty
nooo my free nitro
Does a mod not get loaded when its recognized as a library?
why would it not get loaded
idk, it got recognized as a library and init wasn't called, likely that i did something wrong
I removed the library code from 1.5
and in 1.4 a library means theres no class that inherits from Mod
well it said [INFO]:[API] - HowwowKnyight - LIBRARY in 1.5 so i'm just confused lol
what color palette should I make modded sheo's attacks? roygbiv? pride flags?
oh wait gay pride includes roygbv
do one with different shades of blue
maybe I should let players customize them in settings 
You assume people will change settings 
for that they'd have to find them first
use mod menu smh
wait, can modmenu be ported to 1.4 ?
i think someone was working on it
come tf on TC
what is ModSettings in 1.5?
Well no but I was working on my own hk inventory style menu api for both 1.4 and 1.5
Unless you mean another someone
unless you mean someone as in someone 
does DamageHero still hurt the player if it's disabled?
ah i misunderstood then ,you'd said once that you were making menu
ah yes i misunderstood this
and this lol
got something to load
nice
btw sf have you tried custom scenes with hkmp ? does it work ?
haha is it synced ? like the rotation ?
yes
wait how does that get synced ?
well, to be exact, it starts at the same time
yeah so if someone joins like 5 mins late they would be off cycle
but still pretty cool i think
unless all leave and reenter the room
it only moves in the positive x/y range
my terrian was at 0,0,0 and if i walk off the left edge the knight is offscreen , but if i walk off the right edge i can wall climb the thing from outside
ah this makes sense so my terrain should ideally be not at 0,0,0 if i want to be able to show outside from all directions
implementing damaging paint splats is turning out to be much more of a chore than I thought
so I have a bunch of paint splat objects that I want to fade out over time, but only a few fade out, the others stay opaque
https://pastebin.com/zZSXrdsm
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
specifically, I want cyan splats to be damaging, as a test
is there a way to update the hud? rn I'm just using HeroController.instance.AddHealth(0) but that doesn't seem to update lifeblood masks
there's an fam event
fsm?
yeah
fam
what's up fsm
true
true
!true
I uh
dunno where to find this
is it just each of the individual health fsms?
actually why is there an individual fsm for each health piece anyway?
PlayMakerFSM.BroadcastEvent("UPDATE BLUE HEALTH");
how many attacks are you gonna add?
idk
which is bad because even I brainstormed move ideas for my worse bosses
open to suggestions
paint
Jingle make it like mspaint default colors
and one attack can be flood fill bucket shot towards the knight like a bullet
if it hits the knight not only loses a mask but also changes color with the shader magic u did last time
Is there any way to view the game scenes in Unity? It would make modding a lot easier
get a job with team cherry. 
Hkworldedit2
I tried that and it always gives an error when I try to open a scene
What version of hollow knight? Also what’s the error?
Also if you want to use utiny ripper to rip every scene from the game, you can do that on ver 1.4.3.2 and before
Version 1.4.3.2 and the error differs. I've gotten OverflowException, NullReferenceException, OutOfMemoryException, and the one where it couldn't read past the end of the stream
Huh
Maybe that ver of hkedit is for 1.5?
just tried this and it seems to just treat it like you sat on a bench and gives you all of the lifeblood back from core/heart
why is health so annoying to work with 
finally
can you give them an empty fsm called damages_player to show their hitboxes?
wait nvm
should show with a normal damagehero monobehaviour as well
I dnspy'ed 1432's ShowHitboxes mod and tweaked it to work w 1.5
why not use debugmods one
does it work for any layer go?
yes
and polycolliders?
yes
I'll see
example with circlec & polygoncolliders https://cdn.discordapp.com/attachments/665684163357179955/863550721541931038/unknown.png
though maybe it only likes 1 path per polygoncollider
ah I have to enable it in settings
i have it on 'O', cycles through none, basic colliders and basic colliders + all triggers
looks interesting
memed from here https://answers.unity.com/questions/1248341/can-you-get-polygon-collider-2d-shape-from-a-sprit.html
Unity is the ultimate game development platform. Use Unity to build high-quality 3D and 2D games, deploy them across mobile, desktop, VR/AR, consoles or the Web, and connect with loyal and enthusiastic players and customers.
as long as it works
I should probably add an opacity threshold where the damager disables before the splat fades out completely
so what are we seeing here
is it like when infection blobs linger on the ground?
Does anyone know what scene the map object is in
yeah
menu_title
Ok thx
cool
Will all attacks have it or only cyan?
Also, is cyan altered red, or in addition to red
not sure yet, and idk wym by altered/addition
Well its clearly based off the red attack
question is, is the red attack gonna stay too, or is this gonna replace it?
Ohh
So building from scratch?
damn
can you show a bit of your code?
I wanna understand how to manage fsm states correctly
you mean recreating an fsm in code or modifying a pfsm?
both
For the second one, I know how to edit states, I just don't know how to make new ones or rewire them well
so whatever you can show will help
the only thing I do with playmaker is destroy the ones on sheo
GetComponents<PlayMakerFSM>().ToList().ForEach(fsm => Destroy(fsm));
though I do get audioclips and stored gameobjects on nailmaster_sheo beforehand using fsm util stuff
Wait really?
Show show show
I probably won't last more than two attacks trying to build an ai like that, but still gotta see
it's basically a bunch of ienums that call each other to create a flow of logic
I store functions for attacks in a dict and invoke them as they're randomly chosen
private Dictionary<Action, int> _maxRepeats = new();
private Dictionary<Action, int> _trackingInts = new();
private Action ChooseNextMove()
{
Action selectedMove = _maxRepeats.Keys.ToArray()[Random.Range(0, _maxRepeats.Keys.Count)];
if (_trackingInts[selectedMove] >= _maxRepeats[selectedMove])
selectedMove = ChooseNextMove();
foreach (Action move in _trackingInts.Keys.ToList())
{
if (move == selectedMove)
_trackingInts[move]++;
else
_trackingInts[move] = 0;
}
return selectedMove;
}
between each move is an idle ienum where the next attack is chosen
private IEnumerator Idle()
{
_anim.Play("Idle");
_rb.velocity = Vector2.zero;
if ((_hero.transform.position - transform.position).magnitude <= _evadeDist &&
transform.position.x >= ArenaLeftX &&
transform.position.x <= ArenaRightX)
{
Evade();
yield break;
}
float idleTime = Random.Range(0.25f, 0.35f);
yield return new WaitForSeconds(idleTime);
ChooseNextMove().Invoke();
}
and every attack finishes with restarting the idle routine
Hm
Nice
Much shorter than fsms, obviously, but I think it would be a bit harder for me to keep track at first
Can I read over what you wrote?
dm me your github user and I'll share the private repo w you
Oh I meant the code here but sure
you can read over it, sure
Nice job, can’t wait to try it
you could always go the TC route 





