#archived-modding-development
1 messages · Page 474 of 1
Alright yeah just checked it isn't the wrong order
omg
Okay I figured it out
So it seems that for some reason the example had the nail damage = to temp, even before setting it any value. So it was setting it to 0
i can't seem to be able to compile multiplayer client
basically I would need to never miss an enemy for the behaviour to work as intended, but by setting it earlier it might work since it was set
critical hit still does not work
The mod does mention
"PlayerData.instance.nailDamage = (int)Math.Round(_tempNailDamage * GlobalSettings.CritMultiplier)"
GlobalSettings
but my CritMultiplayer is instead in its own GlobalModSettings which extends IModSettings
would that be an issue or is this the correct implementation of a mod setting?
Yeah that should be fine
The structure of that example mod is just bad is all
The "AfterAttack" is still before the nail actually hits
ah I see, would you have a nice dummy mod to use as reference to get to learn the proper structure to use?
It's just after all the logic
Here's the simplest mod I have in my code folder
public class InvincibilityMod : Mod, ITogglableMod
{
public override void Initialize()
{
ModHooks.Instance.HeroUpdateHook += MakeInvincible;
}
private void MakeInvincible()
{
if (PlayerData.instance != null)
{
PlayerData.instance.isInvincible = true;
}
}
public void Unload()
{
ModHooks.Instance.HeroUpdateHook -= MakeInvincible;
if (PlayerData.instance != null)
{
PlayerData.instance.isInvincible = false;
}
}
}
Probably too simple
so the damage would never be critical since I am setting the damage value back to its tempValue before the damage actually occurred, right?
Yeah
What would be the proper way to implement this example mod then?
Probably best to remove the AfterAttack hook and recalculate proper nail damage every time in the other hook
Ah makes sense
Then in the before save hook you can restore nail damage
So increased damage doesn't end up staying after uninstalling
just realized that the newest customknight creates a shield.png in your streaming assets folder 
sounds good for sanity, I feel like I implemented it completely wrong, but here's what I did
{
PlayerData.instance.nailDamage = _tempNailDamage;
PlayMakerFSM.BroadcastEvent("UPDATE NAIL DAMAGE");
LogDebug("Attacking");
if (_hitCounter >= GlobalSettings.CritCounter){
Settings.TotalCrits++; // For fun, lets track the total number of crits we have done so far this game.
LogDebug("Critical hit!");
LogDebug("Set _tempNailDamage to " + _tempNailDamage);
PlayerData.instance.nailDamage = (int)Math.Round(_tempNailDamage * GlobalSettings.CritMultiplier); //Increase Nail Damage by the crit multiplier then round to the nearest int.
PlayMakerFSM.BroadcastEvent("UPDATE NAIL DAMAGE");
_hitCounter = 0;// reset our hit counter
return;
}
_hitCounter++; //Increase the hit counter
}```
Now my main fear is that if the damage value changes (i.e.: player increases his nail damage at the blacksmith) my tempNailDamage will no longer be relevant
just realize my second-to-last line doesn't do anything
it worked :D
Yeah instead of _tempNailDamage you should use
5 + PlayerData.instance.nailUpgrades * 4```
could modify the nailslash component
More effort
true
Now it just does a sort of weird backward effect when you look at the numbers through debug where it sets my damage value to the double of its base value after critical hit has occurred and is then set back to its default on the next attack
is there a hook to check when damage has been dealt?
Oh and also this also counts any attack towards the crit so hitting nothing also increases my hit counter so I should probably use the SlashHitHook instead
but that also counts decoration elements
so I'd need to check what was hit?
You could try that way yeah
now to figure out how to return what was hit to only increment my value when an enemy is hit. I guess I'd need to know more about how the game was structured now
It's generally ok to assume anything with a HealthManager component is an enemy
And stuff without it isn't
There's exceptions but not a ton
There's also an enemies layer but I have no idea how useful checking that is
Does anyone have or know a way to get the Hive knight spritesheet?
#art-discussion pins
ok
seanprcore
How would I make sure that I'm hitting something that has a HealthManager component?
gameObjectOfTheShitIHit.GetComponent<HealthManager>() != null
Oh that's probably what's contained in HitInst
ah no it's a HitInstance, but there's probably a way to get there from that
HitInstance is the stuff it sends to the HealthManager's Hit() method to do damage
youre gonna need to get the component of the actual enemy you hit
that makes sense when I read it but then I look at the code and I have no clue where to look for that
can i ask what youre trying to do again
I was trying to make the default example3 script work
just realized I was trying to do that in the wrong function
okay its slowly starting to make sense :D Thanks for all the help
am I the only one who spies on this channel without knowing anything about coding
I used to
Start coding, be one of us, one of us, one of us 🙂
I started learning python but the stuff you all are doing here seems so far away...
Once youre decent with a language, learning others is way way faster
I tried watching a c++ 9 hour long tutorial but just got bored
Now we come to my problem, I did not learn a single coding language before I started coding anything
Watching without applying isnt gonna get you far imo
I was following along but it was just eehhh
Fair enough yeah
alright so it takes like 10 seconds to send all the sprite data for the main sprite sheet
and changing the texture for the local player changes your own texture as well
at least now I know how to steal skins
yay
Could someone help me decide which of these I should use for my hive knight mod?
First
ok
It keeps the hive knight but in a new suit of armour theme
that makes it easier because I already made the spritesheet for that
Hive Sans
I hope no one makes that
me too
But if they do I want to hear about it
same
you should probably make it more in line with other joni/lifeblood items
Tbh it almost feels like a question you'd ask #art-discussion about.
@fair rampart what if you compress it ? 12mb seems like a lot for a texture
every method I've tried to implement skins has resulted in either neither player's skin changing, or both players' skins changing at once
you need to make a new material
and apply it to the other players sprites
materials share textures
when I tried that it didn't change the other player's sprite
var mat = new Material(Shader.Find("Sprites/Default-ColorFlash"));
mat.mainTexture = knightTex;
Players[client].gameObject.GetComponent<tk2dSpriteAnimator>().GetClipByName("Idle").frames[0].spriteCollection.spriteDefinitions[0].material = mat;```
@vocal spire last one best imo
I don even know how do you change sprites @vocal spire
I might use all of them and allow them to be swapped in the global saves
@jolly oriole Are you sure? The knight's go hierarchy indicates that it only has a tk2dSprite and tk2dSpriteAnimator
I can only seem to change both players' textures or neither
setting mainTexture on the spriteDefinition's material obviously changes both textures but setting the material itself doesn't appear to do anything
Hello everyone, I would like to know if the AfterAttackHook occurs before or after the damage has been done to the enemy (so far it seems like my code's logic is working but the damage is never applied)
I think it also occurs after the SlashHitHook but I may be wrong...
ah... I think that's what's happening
So in order it's definitely something like
- SlashHitHook
- AfterAttackHook
- Actual Damage dealt
- HitInstance
does that make sense?
huh so that's odd now instead of changing the nail damage it looks like I am changing the "flat" next to it, but not the actual damage output somehow
oh I just realized
for some reason whenever I do end up increasing my damage, the HitInstance does not occur
oh no, it's not that it does not occur, it's just that the damage is reset before it could be applied at all?
Haven't looked into dnspy yet, I'll have to give that a go
Started from using the ExampleMod3 from the github stuff to get started, realized I wanted the critical effect to only be counted when the player hits an enemy (so this way you can't hit nothing 3 times and deal critical damage on the next attack)
The whole idea is to have the critical hit occur every 4 hits so I used the SlashHitHook and checked its "otherCollider" param to check if what I'm hitting contains a "HealthManager"
so far so good, this part of the code only runs when I hit an enemy
But then what occurs is that by reading my bit of code and checking my log file, on the first 3 hits, the damage dealt is the base damage, on the 4th hit I change the damage to be the double from that (so 5 -> 10) on the next SlashHit I stored a variable that detects that the last hit was critical which returns the damage to its base value (did this to make sure I wouldn't accidentally set the damage before the damage could be dealt)
but the hitInstance returns that I dealt 5 damage instead of 10
so my take is that changing the damage value in SlashHit might be too late to change the damage value?
or I may be doing something wrong
Okay with a little break I think I figured out that SlashHit is not the hook I want to use to change the damage
But it does give me what I need to increment the amount of hits
So I'd need to pair it with another hook to set up the damage and only update it after/before the damage has a chance to be applied
hmm
what's up with that?
see if you can spot the cursed
no
O
alright
I made a mod for hive knight, but whenever I quit to the main menu, the hollow knight logo appears in the middle of the screen and I can't do anything
can I have some help?
null reference exception
perhaps on a call using game manager
check the output log
or get qol and check modlog
ok
Looks good
oh yeah, i had envisioned clockwise
damn that's evil, i love it
https://puu.sh/FKY6o/bf6773871b.png you could put a double jump thing here
so casuals can go get the double jump but speed runners will just pogo the inside route
that looks like enough room honestly
saw hitboxes are a bit wack
just based off of looks anyway, cause i can do this
ill test it if you want



can't you use like mega

you could do that too
Jesus I just got ptsd looking at those saw blades...I can't wait!
Oh I mistook the Hornet web for a blade, my bad
It looks painful already
ii just want a harder pop tbh
idk what you mean btw, would have to see it
i used to spedran in the past.
oh those dont really have a name
this is how long it takes to send fragments of a 14 MB texture over a network 
Did both sides have the same skin
no, only on the player who joined
the recorded side doesn't even have customknight installed
you could make it an up and down motion saw if you want it to be easier
Ah ok
I should cache the byte array of the texture in like StreamingAssets so it doesn't take that long to load every time a player is spawned
Gl
Hive Knight mod is here!
I think I will update it with one last feature tomorrow because I am tired
Anyway the battle starts with hive knight having much more health, and as you progress, he summons some minions

You didn't lie about the "more health" part haha
yeah 5k hp is a doozy
It was 5k? I knew it felt like a lot but didn't know it was that high.
I will it tomorrow with a couple other changes
All good, sleep well then!
makes for some pretty fun moments tho
Weird, mine didn't have the spikes/bees until the very end.
I didn't get any spike balls or bees either
im on ascended
Oh I see
The minions are definitely a good touch to make it more chaotic.
I suggested lower health, have the spikes/bee vomit up from the get-go, make him a bit faster, and shorten/remove the stagger. Maybe make one of those bee minions immortal (or a high enough health to effectively be immortal) to make it more interesting. But the concept itself is good.
it could be cool to incorporate lifeblood into the fight
like you kill minions to get lifeblood
that you need to tank forced hits
That's a neat idea.
gimmicks are good when i invent them
oh heck
@unborn flicker Does the Rando 3 mod do something that affects NewGameHook? I can't seem to get a method set up with it to fire off when I have Rando active
Maybe the randomized start location
I gotta do that radiant, looks un
Yeah, it starts in godmaster mode instead of normal mode
I wonder if since there's an EnemyHitEffectsInfected that there's gonna be an EnemyHitEffectsCursed in SS
or they get lazy and leave that stuff again
I hope more than 256 players aren't gonna be on the server at once cause I changed the player ids from an int to a byte to maximize fragment size
up from 4064 B to 4093 B of texture data
It happens sometime when you disconnect then reconnect quickly
@fair rampart the server can cheat and shard the player IDs by scene, and you don't want more than 256 players by scene anyway
@nimble lake a bug on my server where disconnects are not handled correctly
i see
Gotcha. So, is there a straightforward way to make sure an event I want to tie to NewGameHook fires whether Rando 3 is also active or not then? If not, I'm sure I can come up with something, just want to check before I really start messing with things
NewGameHook probably isn't a good idea unless you want to modify the start of the game, imo. It's probably best to use a combination of ModSettings (for save-specific data), a scene change hook (to reset variables when the main menu is loaded), and player data hooks (if you actually want to change save data)
It all depends though
Okay, so, better to have a scene change hook that checks when we are coming from the main menu, then just read/save mod settings to the user to tell if it's been run before or not (to determine if it's a new game or not)?
What would be the most efficient way to increment a value every time an enemy is hit. I tried using the SlashHitHook and using its otherCollider param to make sure I was hitting an object that contained a HealthManager component, but now I'm realizing that by hitting a single enemy I am actually returned that it detected its collision to have a health manager multiple times per hits (one hit on a tiktik gave me like 6 returns through the if statement to check if it contained a health manager)
Any better way to do this?
A check for leaving the menu is a bit harder than a check for arriving at the menu, I believe
I more meant that you can have a method for resetting local/static variables when ever someone quits out
if (otherCollider.GetComponent<HealthManager>() != null) {
//This is an enemy!
_hitCounter++;
Log("You've hit an enemy");```
But for something like whether elderbug has given maps, you'd want that to be a save setting, so the dialogue isn't triggered again if the game is closed and reopened
You could also just check directly against PlayerData for that, to see if maps were already obtained
wait do godhome saves not call an instance of newgamehook?
cause i should add that anyways
anyways if it's for elderbug maps homothety is right - savesettings are the way to go for that
I should be able to work something out with that. This isn't just for the maps, but also for other things I'm working on which require me to do certain actions on a New Game, but I think it should be fine
I can check if it's any new Godseeker or just with Rando. Moment
ok i'll probably pr that at some point
Yeah, just ran a test and Godseeker does not call my NewGameHook regardless of if Rando is installed or not
OnNewGame is raised from LoadFirstScene and OnWillActivateFirstLevel
GameManager::LoadFirstScene is called from CinematicPlayer::FinishVideo
so after the cutscenes
Yeah godmaster is convenient for rando because it just loads a premade save
so you can completely rewrite the save to be whatever you want
instead of having to load into the cutscenes
56 do you have the grimm lantern lying about
wdym
Would it be possible for me to set up a server for the multiplayer mod just on my local network?
Awesome, that settings suggestion fixed the issue I was having in another mod as well. I will have to keep that in mind for the future
Alright lol
Would there be a reason why
if (otherCollider.GetComponent<HealthManager>() != null) {```
would not go through when hitting an enemy?
wouldn't the healthmanager component be on the gameObject ?
I think I figured it out, it's because I'm trying to find a way for it to only increment my value once if it finds an opponent and I had a bool that was set to prevent the code to get into that loop if it had already went into it, but I ordered things oddly, if I get it right, it is possible that it would return multiple instances of a HealthManager in a single slash, right?
So trying to look into the whole custom area business. Anyone has a class I should be looking at in dnSpy to see how gates are handled and scene loaded?
You can't have multiple of the same component unless it's on a child Kaeros
In which case you'd need GetComponent(s)InChildren
weird, it's as if the slashHit was called multiple times and it would go into the code under the condition checking if the otherCollider had a HealthManager multiple times despite hitting a single enemy
could log the gameObject name
Might be hitting multiple colliders if they have more than one
I think I might be confusing things... I've been reshaping that piece of code and moving it through sections, I'll try to figure out what's my actual issue at the moment before bothering again
Might also be every frame
omg I think it finally works
Nice it works now, oddly enough I feel like the only thing I changed in my last change was to remove logs, but that doesn't make much sense
Hmm, even when I exceed the data buffer size of 4096 B by a little bit I can still send the whole packet
Wonder if I can abuse that
Okay, looks like I have a fix for the RandoMapMod not giving maps out on new games then. I have an update I need to submit for EnemyRandomizer as well that has fixed the loading issue for a few test cases
Is it preferred to submit the modlinks pull request for each mod update separately or can I do them together?
Either is completely fine
How does one change the mod name that appears on the title screen and the version next to it?
Oh! That's probably it, I kept trying to rename my file and change the name in the assemblyinfo.cs file
Nice okay so the name is the class name of the mod class, thanks!
now to figure out how to manage my own version and stuff with that section of the whole thing
ohh nice :D
That's a good workaround
Thanks anyone! I started to look at it earlier. I think I got the general gist of it. Will have to try and implement it now! ^^'
i recommend assembly version and then a hash at the end for when you forget
that's what i do at least
public override string GetVersion()
{
Assembly asm = Assembly.GetExecutingAssembly();
string ver = asm.GetName().Version.ToString();
using SHA1 sha1 = SHA1.Create();
using FileStream stream = File.OpenRead(asm.Location);
byte[] hashBytes = sha1.ComputeHash(stream);
string hash = BitConverter.ToString(hashBytes).Replace("-", "").ToLowerInvariant();
return $"{ver}-{hash.Substring(0, 6)}";
}
oh wow that's neat
whoa my version got pretty crazy
yeah that's what the using statement is for
using var x = y is short for using (var x = y) { ... }
and using just calls dispose at the end of the block
that's a long version ngl
the version was 1.0.* I think if I set it to 1.0.0.0 it should look alright
or is that not how this works
4 decimals is what shows up yeah
I mean assembly version goes up to major.minor.something.something
on the version class
afaik
oh okay now I have 1.0.0.0-2e1c8e instead of just 1.0.0.0 but I think that is right
ah so that's wha the * does
imagine putting remotely useful version info
basically used the example project to try and make my first attempt at modding it
figured it was the best way to start with some form of structure
change the version to FAILED TO LOAD! Check Modlog.txt for ultimate confusion
wannacry 
I cant believe modinstaller has ransomware in it
no wonder windows tried to warn me
managed to get skin loading times down after I discovered TcpClient already does fragmentation itself
still takes a while
and still I'm unable to change only one player's texture
wrong because i'll figure it out for them 😤
omggrub
figure out the 5 knights charms while you're at it
figured it out
So the material isn't actually really used
if it's not equal to materialInst then it gets set to it
so you have to change that
that however is on the sprite definition which is in a tk2dSpriteCollection which is shared between the two gos
so you'd maybe think - why not change the renderer
and this sort of works
you can set the renderer material
and it will set
but for any gameobject with a tk2dSpriteAnimator it will call SetSprite on the tk2dSprite which will cause a build which overwrites the material on the renderer
so you should basically make a new collection
also
collection is a monobehaviour
and is therefore attached to a gameobject
which is a separate prefab which tc named the same thing
that just has the collection data on it
e.g.
I found a way to change the color of the slash, but I would like for it to change any slash used and not just the one I could verify through the SlashHit hook, I am struggling a bit to get a reference to those instances of slashes, I've tried to fetch other slash types (So far I've found Slash, DownSlash and UpSlash and an elusive AltSlash which I'm not entirely sure why/how it works as it seems to just be a regular slash that happens sometimes). I've decided to make an array of all those slashes and affect them all in sequence but now I am getting an error where I can't make reference to them as they are not available from the Instantiate function.
So in short:
- is there a surefire way to change the color of all slashes instead of searching for every slash types available and changing each one manually one at a time
- Is there a way I could reference the Slashes once at the start just to keep reference of its base values
- What's AltSlash?
if you slash twice in a row it's different from the first slash
all the prefabs for the slashes are on the herocontroller
ooooh okay so I should be able to access all of that from the herocontroller in the instantiate function instead of whatever I was doing
wow... okay that's opening many doors
and also what's alternateslash?
the other slash when you slash quickly multiple times in a row
so Sid found the solution
you have to get the MeshRenderer on the game object, assign its material property block to a new MaterialPropertyBlock
then modify its "_MainTex" property and set the MeshRenderer's mat property block
Is it an okay practice to set all variables the mod requires to set in a SceneLoad Hook? I figured it doesn't happen often enough to be too taxing, but I'd rather use some form of method that happens once when the game is loaded instead
time to change the meshrenderers of every gameobject that gets instantiated 
okay that's cool
for instance I want to store the slash's color in a variable but I don't need to be doing that more than once if I can help it
don't worry about performance
but but but but but (okay)
unless you're spawning 700 objects a frame
yeah nothing like that yet, it's just that I'd like to have the equivalent of a Start function that just calls itself once to set my stuff when you load your game
NewGameHook/SaveLoadHook
Oh SaveLoad occurs once the knight has been spawned and its herocontroller is accessible? I thought for sure the process would happen before the gameplay would start
I'll go try that :D Thanks!
uhh
maybe
I don't remember to be honest
But if it isn't accessible then you should start a coroutine which waits for it to be accessible then
void Initialize()
{
ModHooks.instance.NewGameHook += NewGame;
ModHooks.instance.AfterSavegameLoadHook += SaveGameLoad;
}
void NewGame() => SaveGameLoad();
void SaveGameLoad(int id = -1) => GameManager.instance.StartCoroutine(OnSaveLoad());
IEnumerator OnSaveLoad()
{
yield return new WaitWhile(() => HeroController.instance == null);
// do things
}
@jade willow kinda like this
I might've gotten the hook names a bit off and stuff because I'm on my phone
Oh that's a nice lambda use for that thanks :D
np
just realized I can't get the textures for the separate sprint and unn sprite sheets using this method 
I'm new to creating mods and I'm trying to make a mod which makes crystals from crystal hunters damage enemies too. Does anyone know where I can find information on game objects?
FSM viewer in the pins is what you want
Aight thanks
I'm trying to get the in game console to appear, but every time I edit the ModdingApi.GlobalSettings.json and launch the game, there's no console and the file resets itself
Having a hard time with the custom scene stuff. Looked at the CustomAreaTest project and currently trying to add a gate not far to the left of the Player when you start in King's Pass. By looking through the code I saw that the CustomAreaTest.CS had the following line:
private void AddComponent()
{
GameManager.instance.gameObject.AddComponent<SceneLoader>();
}```
I added it to my "main" script so to speak, but when I start a new game I see the UI but the screen is otherwise all black. (sorry for wall of text)
I think it might be related to the camera but I'm not sure
It is
Yup, got the scene name in the really useful google docs!
I'll try that code, thanks.
Little Hornet.
pog someone's actually updating the new sprites
it takes literal minutes to change the other player's skin now wtf
it's cooler to have it this way tho
Poppy said shed make her own if the multiplayer mod was working
And plus you cant flex your skins
finally I can rob people's skins by playing multiplayer with them
Oh fuck we need drm asap 
can't wait to change my skin to a dick and force people to look at it 
when you shriek it can 💦
it'll be a truly optimal skin
I wish there were a bunch of alternate skins that were just different vessel heads, like the one in Greenpath, you could have an army of different vessels taking Hallownest by storm XD
I will make Lost Kin one day.
I tried to make it so the file name of my mod would not be ExampleMod3 and instead be something I want it to be instead, but now I've only managed to make it so that it does not build anything anymore :/
you just change the name in the settings
the settings? assembly settings?
right click your csproj in vs, it'll be directly below your solution
click properties
oh
you mean the thing in game
not the dll
thats just the name of thing that extends mod
I mean I'd like to change both the file name and the one that shows up on the title screen
public class CriticalNail : Mod<SaveSettings, GlobalSettings>
type name?
CriticalNail
Oh wait yeah that works!
got confused because I kept trying to get the file name to come out as something else, but since I can just rename the dll it should be fine
dll is from project name
project name in the solution?
yeah afaik
hmm but when I build it it doesn't work
like the dll doesn't show up in the zip file
when I hit build it creates a zip file with my dll in it usually
but now that I'm trying to change its name it doesn't generate it anymore
probably some error in the set-up
omg
ModdingApi gives you access to like... everything
but yeah I can still make it work but I'd like for the generated dll name to not be ExampleMod3
the in-game name is fine so that should be alright
changed it but now it doesn't generate the dll when I build it, do I need to change something else?
what does it say
1> The system cannot find the file specified.
when I rename it to ExampleMod3 it does it without an issue
have you checked to make sure its actually not building
It builds all of the folder structure, just not the dll
weird that mod solution must have something added somewhere
I supposed it's all messed up cause I chose to start from the examplemod which might have an outdated structure or set-up
beeg problem
it's a feature not a bug
Cool skin
might have to change set the materialpropertyblock everytime the player's animation is in the sprint or unn atlas

gladly
case true when switchvariable.StartsWith("Slug ")
case string animPart when animation.StartsWith("Slug"):
```?
it says can't convert bool to string when I try your method
Yeah idk how you'd actually do a 100% match for string
Not something you should do tbh
No don't do that either
case var _ when animation.StartsWith("Slug")
Kinda cursed
if(animation.StartsWith("Slug")) ?????
but what about the rest of the switch
what is he switching?
a string of the animation name on the player
so like switch(name) where name is a string?
that sounds uglier
it does
it's just a list of strings of the knight's animations
not all of them though, the rest are handled by default
ooo yea i get it now
yea i don't know of a good way except just using the discard and when
why
the hollow box
if only i could be so grossly incandescent
r e c t a n g l e
the game also crashes occasionally
maybe 14 MB is too much for my puny network to handle
scene changes 
katie how much for the skin
I apologize I will keep the jojo skin a secret from now on
your attacks turn into star platinum 
jngo make 


skin with me
ok
and make that the default skin online
i am now jingle
😐
is admin less yellow or am i hallucinating
i think mod is less orange and TC is less red
highly suspicous
yea
i wonder who could have bothered simo like 3 times for it
desaturated roles smh
tfw the server get desaturated
as long as modding staff is still neon
Its all 3 admin tc and mods
what about those who use light theme
we don't take into account those subhumans
looks better for light theme i think
thats because the entire screen is not the radiance title card
turn it on you literally go blind
greens still bullying oranges
it looks even better for light theme
full white is hard for the eyes on black, and making it less bright doesn't make it worse on white, considering full white is invisible on white 
Is there a way to put an outline on a textmeshpro through script?
a while back I tried adding a black outline to the white usernames above each player and was unsuccessful
yeah should be able to
ok
i think i know the issue
the outline just doesn't work at low sizes
and if you turn the thickness up it just does this 
what issue do you currently get jngo
the outline doesn't appear
GameObject nameObj = Instantiate(new GameObject("Username"), position + Vector3.up * 1.25f,
Quaternion.identity);
nameObj.transform.SetParent(player.transform);
nameObj.transform.SetScaleX(0.25f);
nameObj.transform.SetScaleY(0.25f);
TextMeshPro nameText = nameObj.AddComponent<TextMeshPro>();
nameText.text = username;
nameText.alignment = TextAlignmentOptions.Center;
nameText.fontSize = 24;
nameText.outlineColor = Color.black;
nameText.outlineWidth = 0.1f;
nameObj.AddComponent<KeepWorldScalePositive>();
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
_OutlineWidth ("Outline Thickness", Range(0, 1)) = 0
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0
_ScaleX ("Scale X", float) = 1.0
_ScaleY ("Scale Y", float) = 1.0
_Sharpness ("Sharpness", Range(-1,1)) = 0
are the material properties that mess around with it
you probably want TextMeshPro/Distance Field
or TextMeshPro/Distance Field Overlay
i had to set scale X and Y to like 4
to make it show up at not 25% of the screen sizes
so like
TextMeshPro nameText = nameObj.AddComponent<TextMeshPro>();
nameText.text = username;
nameText.alignment = TextAlignmentOptions.Center;
var nameMaterial = new Material(Shader.Find("TextMeshPro/Distance Field"));
nameMaterial.SetColor("_OutlineColor", Color.black);
nameMaterial.SetFloat("_OutlineWidth", 1.0f);
nameMaterial.SetFloat("_OutlineSoftness", 0.0f);
nameMaterial.SetFloat("_ScaleX", 4.0f);
nameMaterial.SetFloat("_ScaleY", 4.0f);
nameMaterial.SetFloat("_Sharpness", 1.0f);
nameText.material = nameMaterial;
```?
try overlay
same result
Hello, everyone, I would like to ask something. Let's say I want to draw a new model for a boss: where do I find the boss textures? I can't see a particular folder for them in the game's directory.
TexMeshPro/Mobile/Distance Field?
TestMeshPro yeah
same result 
@safe hamlet Thank you. I hope it's not so hard to add new models to the game...
Ok.
theres multiple tm pro shaders
yea i realized
pepe
_FaceColor ("Face Color", Color) = (1,1,1,1)
_FaceDilate ("Face Dilate", Range(-1,1)) = 0
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
_OutlineWidth ("Outline Thickness", Range(0,1)) = 0
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0
_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0
_WeightNormal ("Weight Normal", float) = 0
_WeightBold ("Weight Bold", float) = .5
_ShaderFlags ("Flags", float) = 0
_ScaleRatioA ("Scale RatioA", float) = 1
_ScaleRatioB ("Scale RatioB", float) = 1
_ScaleRatioC ("Scale RatioC", float) = 1
jngo blocked katie this is so sad
no its saying that in main lol
_MainTex ("Font Atlas", 2D) = "white" {}
_TextureWidth ("Texture Width", float) = 512
_TextureHeight ("Texture Height", float) = 512
_GradientScale ("Gradient Scale", float) = 5
_ScaleX ("Scale X", float) = 1
_ScaleY ("Scale Y", float) = 1
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875
_Sharpness ("Sharpness", Range(-1,1)) = 0
_VertexOffsetX ("Vertex OffsetX", float) = 0
_VertexOffsetY ("Vertex OffsetY", float) = 0
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
_MaskSoftnessX ("Mask SoftnessX", float) = 0
_MaskSoftnessY ("Mask SoftnessY", float) = 0
_StencilComp ("Stencil Comparison", Float) = 8
_Stencil ("Stencil ID", Float) = 0
_StencilOp ("Stencil Operation", Float) = 0
_StencilWriteMask ("Stencil Write Mask", Float) = 255
_StencilReadMask ("Stencil Read Mask", Float) = 255
_ColorMask ("Color Mask", Float) = 15
o lol
are all the properties
I did not block Katie
yeah clyde randomly blocks messages in a server with a you're blocked message
its pepega
isn't dilate for the text itself, not the outline?
oh I only saw facedilate

still nothing?
nope
@copper nacelle did you say something about On before?
yes
ok what
tk has some weird properties and stuff
for like .collection.inst
so it acts strange when you try and make your own from a script
i imagine it'd be pretty easy from a bundle tbh
but then it's not a clone of the old one
which makes it e
ok so is there a nice way to hook PlayerData.Rest
On.
ok so i need PlayerData_Reset to call ss.NewGame, and i can't just hook it to that because on is pepega and won't let me run stuff that doesn't match function definition and ss is only in that scope
Would this be the right way to access and invoke a protected method in TMPro:
nameText.GetAttr<TextMeshPro, Action<float>>("SetOutlineThickness").Invoke(1.0f);
protected override void SetOutlineThickness(float thickness)
{
// code
}
do i just reflect modhooks to get _NewGameHook
oh maybe im pepega and something simple works
what's ss
SocketServer
can you like get the type of it?
<SocketServer>
maybe you can just use reflection and invoke it
using GetMethod
inside the PlayerData_Reset
i think i may just be pepega
and i can make a static reference to my ss and use that
i mean if it doesn't need to be an instance, then yea
o wait what i said is kinda stupid because you need an instance anyways
so yea use static
@fair rampart pretty sure that only works on fields
you would do something like typeof(TextMeshPro).GetMethod("SetOutlineThickness").Invoke(nameText, 1.0f)
monomod has a fast reflection delegate helper
what
unrelated to monomod i tried this and i didn't work 
and now im basically out of ideas
oh
oh i might be pepega
let me put it after
although its async
and i highly doubt its sending and recieving that message faster than playerdata gets reset
ok it gets called
it just didn't reset for some reason
what are you working on
fixing rando tracker
ic
Here we go again
0 MB physical memory [0 MB free].
0 MB paging file [0 MB free].
0 MB user address space [147 MB free].
Write to location 00000000 caused an access violation.```
he really do be violating access tho
How can you even do that in c#
yea if you go to multiplayer and use a skin that other people don't have access to, they will have access to it, so you gotta be careful with that
it's simple if you don't want people to have your rare pepes don't show your rare pepes to people
We know that's really hard to encrypt skins
bruh just use some crypto magic on the skins like the netflix does
Visual Studio (or any C# IDE), then others like an FSM viewer or DNSpy
rider and avalonia ilspy instead of dnSpy
doesnt rider need an edu account to be free
yea
Is there some property about bytes that idk about that makes this loop output an additional zero at the end?
for (byte client = 0; client <= byte.MaxValue; client++)
{
Log("Client: " + client);
}
The output is like
Client: 1
Client: 2
...
Client: 254
Client: 255
Client: 0
nvm I just found a stackoverflow post
<=
troule are you ready to write several hundreds more lines of C code to handle skins for your server
sure
What happened to that multiplayer mod
Is it still a thing
wait , is there a multiplayer mod to hollow knight?
checked out some lossy png compression tools, it makes knight.png go down to 3.5mb by reducing the color palette, but eeh
like unless you have a really shitty internet it won't be much of a difference, and you'll only upload it once anyway
well I also added a way to detect if a player changes skins too
@fair rampart still a thing but very slow progress
what happened to the video

80% memory in use
pog
i cannot believe jngo is chrome
time to GC.Collect everywhere

any GlobalEnums
DEFAULT = int32(0)
IGNORE_RAYCAST = int32(2)
WATER = int32(4)
UI = int32(5)
TERRAIN = int32(8)
PLAYER = int32(9)
TRANSITION_GATES = int32(10)
ENEMIES = int32(11)
PROJECTILES = int32(12)
HERO_DETECTOR = int32(13)
TERRAIN_DETECTOR = int32(14)
ENEMY_DETECTOR = int32(15)
ITEM = int32(16)
HERO_ATTACK = int32(17)
PARTICLE = int32(18)
INTERACTIVE_OBJECT = int32(19)
HERO_BOX = int32(20)
GRASS = int32(21)
ENEMY_ATTACK = int32(22)
DAMAGE_ALL = int32(23)
BOUNCER = int32(24)
SOFT_TERRAIN = int32(25)
CORPSE = int32(26)
UGUI = int32(27)
MAP_PIN = int32(30)
under GlobalEnums

The easiest solution is to just use HTTP
This is what valve did with source

(yes it sounds dumb but then you don't have to worry about a lot of stuff)
revisited my old implementation of using my own fragments and skins load faster with it ? ? ?
gg
gg
have no idea why tho, it's technically larger packets to send
because the OS is already fragmenting the packets ?
anyone know how tf the translation mod was made in the first place? did the creator make some sort of script to push the game's strings into google translate and not mess up the syntax?
the gdrive with the mods?
i'll probably have to manually make a script like that for another game
cuz i'm trying to make a translation mod too
the py is like pretty simple
it just takes a very simple dict and gives it back but ruined
didnt even know you can do shit like that with python
porting that to another string system is gonna be pure cbt tho
cuz the game im modding uses one json for all strings
yeah there's some broken stuff
i think the tags are still like half in there
for like italics
ok i do think i found an actual bug with your bindings mod that isn't a visual bug
i can't seem to get lifeblood from killing lifeseedlings
ruined
i went into a pantheon with the mod on (and turned on all bindings in the pantheons itself as well) and when i got to the bench with the lifeblood, i got nothing
lifeblood is actually useful in the pantheons 56 smh
First try with Sprite Packer.
Sorry for spam I had a problem with the video.
lol sleepy knight
plop
I got HKEdit2 and I downloaded the right unity version, but I don't really know where to go from there to do anything at all, I can't really get started, I think it's supposed to be a plugin kinda deal for unity where I'll be able to load up the game's scenes and modify/make my own, but I'm not sure how any of this will work or how I'll package it with my mod. Is there a guide on how to set things up and get started?
I usually open things from a scene on unity I guess there has to be a way to just hook it up somehow
in unity, you do "open project" then you select the world edit folder
omg of course
I kept trying to look for an executable or something
thanks!
man I really get tripped up on every step along the way
I'm guessing trying to open the levels contained in my steam's hollow knight hollow_knight_Data is not what I'm supposed to be doing as I keep getting errors doing so. I see a mention of a path for ExportedScenes in my HKEdit folder but I do not have that folder in there, am I supposed to do something else first before loading a level or am I once again just thinking about all of this the wrong way?
Thanks!
Alright I've went through that video tutorial and made one change by adding an image to the game (in scene level6 to change the place where the game starts) I bundled the new assets and now have a file that I think contains my changed level
I decided to name it level6 and put it in my hollow_knight_data folder (after making a copy of it to make sure I wouldn't change something permanently where I couldn't go back)
the map is just dark, I can hear the nail but nothing occurs
anyone want to help me test the latest build of multiplayer with skins partially implemented
it'll likely crash one of our computers after a while
cause I'm bad at memory management
the whole pc or the game
game
Ah
this time we'll have to use hamachi since it's ahead of troule's server development-wise
Gonna need a refresh on how to use it lol
The perfect time to steal skins
join
PVP still off?
I can turn it on if you want
I dont mind since we are just testing the skins
ok I'll leave it off then
can I join?
sure
How do I?
do you have hamachi?
no
download it
ok

I desided to pop in to here and read that there's a multiplayer mod in the works. I'm highly interested now .
This isn't a virus, right?
why would it be
Why would a mod have you download a virus?
sorry, the last time I downloaded something I clicked on the wrong link
unless you mean hamachi, then its also a no
who's y
y
you
is it supposed to throw 80 key errors
I gotta say that's worse than 80 key errors
I'll have to see what's going on
great skins
looks ready to ship
I want to try them sometime, when will they be released?
just say its a feature and call it a day
what skins
it's the same as the video mushroom sent though
yours
@fair rampart I'd be down to hop in as well, just downloaded the mod and hamachi but have no idea how to use hamachi
me too
jngo ur skin loaded
nice
not nice
it seems like it sent properly
idk if it's on the right spot though
oh i figured it out
@fair rampart the sprint texture got loaded as the knight texture
Put on sprintmaster
How do I use hamachi?
first make an account
I almost crashed lmao
ok
the skin works after being sent again
are you in dirtmouth as y?
yes
You both christmas knight?
no i don't even have custom knight on
I'm stuck in an infinite loading screen
after trying to enter Sly's shop 
y'all mind if I restart
alright, server's back up
Whos hoke, btw your skin loaded instantly this time
Ah cool
no sekiro knight i sleep
everyone turned into grimm knight for me
Ask hoke if he has custom knight on
I’m trying to join but hk decided to be slow
nice
i accidentally hit my dupe elderbug and crash the game button
are you guys testing on the dedicated server?
Poor life decisions
I'm guessing your log is begin destroyed
Does hoke if he has custom knight, thats probably why
local server cysipy
56 said he didnt have custom knight and it put ur skin on him
I think I am in
am i able to help test or do you already got enough people
But I didn’t have a save in dirtmouth
it showed the default skin for hoke for a minute
Did you change ur skin?
no
Now you and hoke are infected vessel skins
all my networks are full, so we're good cysipy
alright I finally crashed
Is everyone in dirtmouth?
I am, i dont see anyone
probably because jngo crashed
I crashed
O
Rip
quite rip
@vocal spire I see you!
Is anyone else in dirtmouth?
I am but I can't see you either
I can’t see anyone now
It might be my internet because after I got a new modem it just got worse
I’ll try re connecting
try restarting instead, I'm restarting my game so the server will be offline for a little bit
Ok
It would be nice if radiance would stop screaming at me when I launch hollow knight, it is nice to know it will be killing me until I go insane, but I don’t need to know that when I am just playing multiplayer
I see people
I'm gonna close the server now and work on this more
Use sekiro knight next time so yusuf can steal it and give it to me
yes (not better than pokemon though)
it’s like Pokémon but the game is good
first of all how dare you
someone who is less pepega than me upload this to the drive
which drive
what do you mean which drive
the drive 
o
let's see if i have the link
do i leave the other playerdatatracker thing intact?
wait wheres the xml file 
sidao lmao
ok sha-1 c5c12a7183f9952cadadd288a00a862964bb8e7c and link is https://drive.google.com/uc?export=download&id=1OQYtdcozAsqoeD_C3a4C9MZZ0IOfOT55
@copper nacelle ty ifly
ruined you all tested multiplayer without me 
didn't get a chance to rob the textures
I'll be sure to use the rare and legendary Graig Knight skin next time
holographic graig skin 
I'll be sure to use the rare and legendary Graig Knight skin next time
@fair rampart what does that mean?
Blursed
I think they fit well
i wanna create a custom knight but im unsure what programs i should use
Anything that can open an image and alter it, like Photoshop or in my case Microsoft PowerPoint
i think firealpaca should work
I think TWP people use some kind of software that lets you do it more easily
GODump and SpritePacker are also useful for retrieving and editing individual sprites and seeing how they look in animations

trans pin
trans pin
Uhm, hey there, are there any useful resources that can get a beginner into HK-modding? (while I'm pretty familiar with python, c/c++, java, modding is something I really wanted to do but never started)
https://github.com/seanpr96/HollowKnight.Modding good place to start
HK is in unity which uses C#
check out the example mods
Aight, thanks
np
thanks 
np
@polar surge make us a mace bug fight
you broke it
yes
the problem is that I haven't changed my code since yesterday
but it wont work today
but whyyy I haven't done anything
Is it the WP bench
no, if it was that then the game would actually load
fiveknights
Good job you killed the coroutine too
Coroutine couldn't be started because the the game object 'OptionsMenuScreen(Clone)' is inactive! u know something about this?
oh I figured it out







