#archived-modding-development
1 messages ยท Page 21 of 1
My main issue is maintainability
And binary patches don't really help there either
oh. this is a surprise to me. they don't mind people publishing the .dll?
@vale zenith what do you mean maintainability?
they don't seem to mind so far
scroll down to mods
they publicly promoted mods distributed in this method
Frenzied cider, the usual meaning of it
Finding where changes have been made is a pain in the ass
And putting a binary into source control isn't really helpful either
When a new version comes out we have to recreate all hooks
That's not as bad as remaking all mods
But it's still a pain
I don't know that you'd want to store the binary's just the source code to do the patching
in terms of git
probably just do branches for versions of the game
imo
Yeah that requires us to host the decompiled binary on a git somewhere
Not sure they are down with that
ah, didn't know you had to decompile it first, thought you were just doing some sort of inline patching :/
Also according to Sean we can't actually compile from the decompile source
Wyza we are editing the dll directly
If there's a way to generate patch files from source for that I am 100% on board
that I can't answer. I've never even attempted what you guys are doing to achieve this stuff, everything I do in my day job i have the source or am using DI to make my changes
i don't think getting Team Cherry's help upstreaming the Modding API into the official game is a very good solution. it would mean we'd be locked to a version of Modding API that might have bugs or missing features until Team Cherry releases a new official version of the game. seems more limiting than the current situation.
They have an interest in keeping mods functioning since it increases the longlivety of the game
yes, but the time it takes to turn around a patch for a game is long
And since they can build from source the effort to maintain it is way lower for them
even if it takes 20 minutes to write the patch
Wyza, funny thing I just finished the release candidate for the next patch of a game
the effort to maintain should be 0 considering it should never change
it then goes to QA, then it has to be pushed to the various distribution channels, where some sort of testing might also have to happen, then blah/blah/blah
for source that is
this is the closest thing i found to dnSpy supporting text-based patches: https://github.com/0xd4d/dnSpy/issues/424 . Note that at the end of the discussion, the dnSpy maintainers recommend UI automation to reply the dnSpy edits >_< . What a mess.
Wyza, yeah that's for consoles not for PC
they can conditionally compile the modding API since it's C#
true, alternatively if they are using some sort of DI engine, perhaps just put the interfaces in that the modding API needs to hook into? then if the dll exists, they'll get loaded in?
what are you even talking about?
well
my day job is c#
if they were using dependency injection, it could be setup in such a way that you could register implementations of an interface that would let you make the changes without having to edit the assembly dll
yes, I am aware of how DI works
so what i'm saying is perhaps they could expose that for the stuff you need for your modding framework, then if there are bugs/fixes/changes, you can still make them, but then you don't have to worry about patching/hacking the csharp-assembly
just throwing out questions/ideas. like i said, i don't do alot with changing already compiled dlls after the fact
(i could be 100% wrong and the way you have to change the assembly means that it's impractical to do it any other way but to put the full modding api implementation into it)
not all mods can be achieved through a clean modding interface. if i wanted to modify the logic in the middle of a large function, there's no modding interface that lets me accomplish that. i need to be able to edit the function. this would probably mean adding a hook to the modding api.
I'm just trying to figure out what scope you think the DI would have to have
because we obviously have to maintain the core functionality of the game
So we can't really use large interfaces without having to duplicate code from the game
and if you scope them down to where they basically only add functionality they are essentially events that you can fire to an interface which is what the current modding API does to begin with
@vale zenith for reference in this discussion, can i make a mod through the modding api that makes mantis claw stick to the wall without sliding down even when you're not charging a super dash?
oh it's in the FSMs
We should definitely add helper functions for modifying those, although I think you are already doing that, right?
Ah. k, was just thinking it'd make it easy to do something like
List<ISceneLoad> sceneLoaders = Factory.GetAllInstances<ISceneLoad>();
foreach (ISceneLoad loader in sceneLoaders.OrderBy(x => x.Priority) {
loader.modifyScene(scene);
}
well I've been working on a viewer to understand it
then I'll probably make an editor from that
and have that generate code for you
Are you sure you aren't a java coder?
lol
Factory 
is FSM a unity thing?
FSM = finite state machine
I mean I'm sure you're doing decent work @buoyant wasp but the stuff you are working on seems to be database or web oriented where you have some central processing that has to hook a ton of different external interfaces
visual code editors 
It's worlds away from how game code is usually structured
the main problem with just adding FSM utilitys to the API
is they are useless unless people know how to read the FSM code anyway
yeah, the FSM stuff is really neat for designers to be able to tweak things
so I get the utility of it, but it's a pain in the ass to deal with after the fact
you're correct. most of my work is DB and application oriented rather than game loop oriented
I've done database work in the past, so I know the patterns
but they don't really apply to games since you pretty much have full control over everything
The main places where it makes sense is for networking and content streaming which we don't really deal with for modding
i guess I wonder how other games handle a common modding architecture then that doesn't rely on modders having to patch the game's core dll directly
It's usually games that are data/content driven
generally by designing their games to load content from files
that are documented
if you make the game with the same tools the users have
That's why originally modding started with map editors
then they can mod anything
wow we are in agreement KDT
How did that happen?
Tell you what Wyza, I am in the process of implementing what's almost full modding support for a game. Once that's released I can give you some details on it
๐ - it'll be a neat read. Dunno how much modding i'll actually do myself, but it'll be nice to know what can be done.
and at least then i can provide feedback that doesn't make me look like a complete moron
so back to the topic of sharing the Modding API. I think what i've got written up is the worst case scenario, where Team Cherry decides to enforce copyright claims. what's the best-case scenario?
that they upstream it
or they completely recode the game in good way 
whenever someone needs something that isn't in there
is that like once a week, or almost never, or what?
i don't think Google Drive lets me see history of the file
doesn't that seem too frequent to trust an upstream version? the official game updates much much slower than that.
We will reach saturation at some point
when they need to fix stuff, they get it out pretty quick
also, I don't see why if that were the case we couldn't just add stuff and ask them to upstream that later as well
the point of the upstreaming is that we get to keep the current state when the game updates
keeping the modding api intact through upstream updates is a big win. i'm not arguing there. i'm still trying to solve a different problem though, which is how do players get the modding api onto their machine. i'd like to make that possible without creating users needing to make a discord account or any other kind of account. upstreaming doesn't really solve that problem unless mod developers only depend on the upstream version.
In that scenario Team Cherry obviously doesn't have an issue with the DLL being hosted
that's why we should talk to them first
The problem of getting the DLL to gamers is also most easily solved by that
and they could fucking enable the steam workshop
how much easier could access to mods get?
ok, sounds great. who's going to talk to them?
would be nice to implement mods to everyone on steam using the workshop
bet you randomizer would explode
all of them would
I think thats too much effort on their end
@young walrus it's not quite as simple as that. keeping a modding api stable is a serious undertaking.
also that completely excludes drm free people from mods
shrugs the game's $10. I already have 2 copies of the game. one for modding, one for not. i know that stuff's complex, but to implement it that simply for the entire playerbase would be a huge move for TC, imo
honestly, in a non-offensive way, I think thats beyond them
neither of them are programmers
I thought Leth was part of Team Cherry
I kind of consider Leth a coder, although I think he had a mostly advisory role here
if i was on TC, i'd even just farm out the work to have mods easily installed via the workshop. but that's just me. to me, that investment would be worth it
I wouldn't mind writing the code that sandboxes the loaded DLLs
@young walrus there are not unsubstantial liability issues
We don't allow code modifications in the modding API at my job for that very reason
fair point
is there some precedent for steam workshop items that include executable code? seems like a security issue.
it is
that has happened
I think whitehats usually got there first so I can't think of one that went really badly
but I know of at least 2 cases where someone got code execution on the host system
ok. so the next step is someone talks to Team Cherry.
have fun @broken fable
ok, then without anyone talking to Team Cherry, we should assume the worst case legal situation, and i'll proceed with my two-way sync plan to publish xdelta diffs of the modding api to github.
๐คฆ
If that's your conclusion I just wasted half an hour of my life, thanks
actually more, wow
without anyone talking to kim jong un im going to my nuclear bunker
I already tried to start a conversation with them and got a sarcastic response back
doesn't that mean they won't help us?
@broken fable you definitely shouldn't be the one talking to them, I agree
@solemn rivet I don't know him
oh
The only one I kind of know is Leth
I'll ask simo to ask graig to ask them 
I talked to him a bit way back when he was looking for people after the last wanderlust
specifically we want to ask them about upstreaming the modding api and about legally publishing modded game files. is that it?
please don't be the one asking them
I genuinely don't think we are going to get them to do anything with the modding api
simply asking for an official statement on hosting assembly-csharp.dlls for mods is about all we need answered
I think that's the most likely outcome too
unless they were planning to add mod support anyway
ok. then let's say they give the green light on publishing assembly-cshard.dlls. then what's the plan for publishing the modding api in that case?
binaries on github?
we already added some attributes to generate docs for the hooks and make patching easier
we can grab those with reflection and dump some docs
as well as intellisense doing quite a good job at helping you navigate the Modding namespace
If you explain the issue to me in detail I'll see what I can do about contacting TC and making sure they give a response
Basically we just want to know if we can host the assembly-csharp dll publicly
I'll find out, give me some time
no rush
ok. i will take no action on this then. ๐ instead i'd like to try making a mod later tonight.
knock yourself out
@vale zenith by host the assembly publicly you mean what we're doing already, uploading the modded assembly-csharp.dll files to Google Drive and such?
Putting it up on a webspace somewhere so we can also host documentation etc
especially one that is indexed and publicly available
Google Drive is kinda secret. GitHub is public.
some modded .dlls are already on github. are you saying we need to take those down?
they're not technically supposed to be there no
I think its only gradows that are there
Yes, those need to be taken down
if they aren't we basically leave no choice to Team Cherry but to make us take them down
would moddb be a better place to host mods?
okay, I'll take it down
thanks
done and done
also, I'm really sorry the bonfire mod is taking so long... I don't really have the time I wish I had to invest into making it a nice experience
It's understandable, modding can take a lot of time especially for a hobby
can't say I do
A lot of the talks from the game developers conference(s) are publicly accessible for free
@buoyant obsidian not only that, but it like, increases exponentially for me because I have no experience, so I waste a lot of time doing what most people already know by now
so if you feel too beat to work you can just watch some of them to give you an idea of basic principles and what steps you can take to make your mod feel more rewarding
There's a lot of great ressources out there, most of them are hard to find because so many idiots are flooding the internet with questions about how to make their mmo fps that is basically wow but with guns that shoot chainsaws
or whatever other shitty idea they come up with
How to implement crafting
"how do I make a minecraft clone that will earn me millions in a few hours?"
#Unity
How do I make PUBG
#BeEpicGames
with crafting
probably better than PU
loot crate how 2 code
I think over the weekend I might actually make a minigame about opening lootcrates that give you more lootcrates
That would make for a fine autoclicker
or cowclicker rather
incremental game
and you can buy perks
for lootboxes 
yeah that's what that genre is
You can only buy perks that you have found in lootboxes
How to rich
that's how
and it has an emulated streaming service so you can talk to your viewers and make small talk while you get monis from opening virtual lootboxes
#featureCreep
wut
instead of developing each mechanic well, botw basically just threw like 600 different mechanics into 600 different one room shrines
not really 600 different mechanics tho
more like 6 different mechanics, give it a spit shine a hundred times
I agree to some extend, but at the same time I think botw isn't anywhere close to the worst offenders of that
I hear people compare it to Skyrim's dungeons a lot, saying how inferior they are in comparison to Skyrim's
but the thing is, Skyrim's dungeons were boring as hell for me
skyrims dungeons are awful too
usually a few rooms that loop around
made out of cookie cutter prefabs
yup
I don't think the botw dungeons are bad
and lovely argonian maids
they are different from what I expected for sure
and have them be 10 times longer with a single theme to each one
I get where you are coming from, but that just comes down to preference
they clearly had a different goal in mind especially since it's a switch title
I hear you, firzen
The dungeons were made to be short enough to finish one on a bus ride or while taking a bath or whatever
I think what bothered most people though was the fact that it IS a LoZ game
so it has a name to live up to
@solemn rivet I'm on board with that, it definitely wasn't what I was expecting
many people went into it thinking they would get the same dungeon experience from most zelda games
and that's why they were dissatisfied
All of that is legitimate
I honestly missed the old Zelda-style dungeons from the past games myself. I liked the different atmospheres they all had. I wish the shrines in BOTW had been able to have different interiors to match their regions or themes personally. That being said, I still enjoyed the new take.
but I don't think that means they are bad design
no, I agree with you
I might get backlash for this, but it somehow reminds me of the discussion about DkS2 merits
I mean imo there was a 2 part issue, dungeons are very short and easy to no real feeling of accomplishment from each one, and because you get all your power ups at the start of the game (due to it being open world and them not wanting you to back track for hours) theres little to no reason to go in them
I did about 20 shrines, then just beat the game
I have a way bigger problem with other stuff in the game
the weapon durability thing is terrible
durability
The weapon durability and lack of enemy variety were my biggest issues.
well theres only 4 bosses and they are copies of each other
I found the game a ton of fun to play at a friend's place but when I got it myself I kinda got killed by the lack of progression
Yeah. It took away any excitement from getting new weapons since you knew they were going tobreak.
They broke the one thing that makes all previous zelda games stand out titles
that progression is entirely item based
you can go anywhere (that you can get to)
and you acquire the ability to go to new places by finding new stuff
they can't really have an open world game with 100's of shrines and require you to get items
Why?
theres just too high of a chance of you finding a shrine getting half way through
and going shit I need the hookshot
guess I'll come back later
nah, that's a strawman
they can, but that doesn't mean they would sell as many copies
You know how each region has a tower that you climb to map?
also, there's an easy fix for that - a functional mapping system that allows for markers, manual notes etc.
like a normal zelda game you start with nothing, and then each dungeon gives you an item
make that raise all the shrines from the ground when you activate it
and then those can give permanent upgrades like hookshot
and each dungeon only requires the items before it
but many zelda games are non-linear when it comes to dungeon/item progression
They restrict access early to areas where you may lack the tools
Zelda is a masterclass in making the world immersive by having simple rules that aren't broken
wanna get over a gap, use the grappling hook or the hookshot if there's something to grab onto
or glide over with the deku leaf
I mean wind waker was somewhat open world and did just fine
wind waker only has a few dungeons to explore
aside from the fetch bullshit for the tri force I think you could argue it's one of if not the best zelda
KDT, the world is also significantly smaller than that of botw
Wind Waker's my favourite tbh. I do wish they could have added in the cut dungeons in the HD version and maybe done a bit more to make the triforce hunt quest less tedious but I still enjoyed the game immensely.
I just don't think botw could have had progression like older zeldas
without either removing most dungeons
or making it really obvious which ones give items
or just giving you the items for free
There can just be a split between shrines and dungeons
or shrines are completely independent of progression
they can make you more powerful as they do in the game anyway
the alternative would be to make a game which would not appeal to such a broad audience as botw does
upgrade your health or stamina or whatever
I just really dislike that after I leave the tutorial I can straight waltz up to ganon
Not focusing on progression actually attracted a lot of my non-gamer friends to get it
thats probably a good tradeoff for them, to avoid the frustration of having large portions of the game uncompletable the first time you get there
I don't think they wanted people to backtrack
you can teleport backtracking isn't much of an issue
I know this is a shitty comparison, but both Metroid Prime and Echoes had a pretty big map with gated progression, and they both were hailed as being the best/one of the best metroid experiences to that day
Also made by a really great studio
yup
753: Not focusing on progression actually attracted a lot of my non-gamer friends to get it
the problem is, is once you've gone to a few shrines and been unable to do it, you'd probably just ignore them until you got items
I think that's what they were aiming for with botw
so then you'd have to go back and refind them
yeah, and for that to be even remotely interesting, it would require a very good mapping system
I believe the NDS Zeldas had editable maps, if I'm not mistaken?
I'm almost positive Phantom Hourglass had
Yeah I think so
I like that a lot in exploration games
yeah, I get what they were going for and it makes sense
it just doesn't appeal to me as much as actually having a progression system
yep, we'll have to leave that to HK for Switch
that's why I love this so much
question for modders. is there any kind of mechanism you use to notify users of your mod that an update is out?
discord #archived-modding-development subchannel
๐
I know
but
Just in the last 72 hours, there's been like 1800 messages in this channel
i know that's probably higher than normal
or maybe its not
technically for the modding api, you could load a webpage
then change the getVersion
just wondering if something that works like .gr speedrunner could be used to put someone in a "notification" role for a given mod. then they could do .gr notify_randomizer and then when seanpr releases a new randomizer, he could do @notify_randomizer and folks who care will be pinged, but everyone else doesn't matter
that sounds like a nice idea
@rain cedar or @leaden hedge - Do you have a veresion of this with a 100% transparent background?
basically, looking for that flourish
cool
want to give an option on the tracker to put those around stuff to make the UI overlay feel more natural. ๐ . can still use it plain, but, seemed like a nice idea
yeah, we could do that too
then I can just change the version string to be 16/10/17.c OUTDATED
You called?
do you have that image, but without the bg
Yeah, I'll get it in a sec
cheers
Is this the enemy panel bg?
pretty sure it is
Do you only want the white fleur parts?
yup
Well, he was faster than me opening up my project
lol
wyza can you put a txt file at https://iamwyza.github.io/HollowKnightRandomizerTracker/version.txt
and make it say 16/10/17.d
yeah, mind if it's in a bit?
whenever
cool
I'd say we probably don't want any files like that from the game hosted publicly, although you're welcome to keep discussing the contents of the file internally with people who own the game.
That's William's take on hosting Assembly-CSharp.dll "publicly"
@vale zenith
New Edit Mode.
Can drag containers around, resize them, control the scaling of the icons within, rearrange the icons, change the growth direction, choose if you want to show icons for items you haven't gotten yet, move icons from one container to another (including a special container called disabled where all icons you don't want can be held). An optional Flourish can be added to the bottom ones.
New preview mode lets you see what it would look like in game. without having to go apply it to OBS first. (using a static screenshot)
And no icons hidden example:
not released yet though, still testing
sharing configurations is easy too, it stores it as a compressed string in the URL, so if someone likes your setup, its as simple as copy/pasting the URL
Will it be possible to just remove all the UI elements? @buoyant wasp
Nevermind, thought this was a mod, not an OBS overlay
๐
Was hoping for a replacement for Kein's NoUI mod
Debug mod already has disabling hud as an option
I could just move that to another dll if you want something more lightweight
Didn't know that. Haven't played HK in a while and Debug Mod never seemed like a mod I'd want to use
If we're crossing things out for being a part of other mods then debug mod has hp bars as well
yeah? alright then
Do you just happen to have a save anywhere function lying around in there too?
Kinda but not really
You can manually set your hazard respawn within a room and warp back to it any time
And for between rooms you can store multiple dream gate positions
There we go
since your Debug can do the same job as most Kein's mods, I'll stop providing them. Only mod left is his Boss Rush.
I take it PlayerDataTracker doesn't have to worry about mod compatability?
It uses the api
alright then
your mods, Blackmoth, and PDT use the api.
didn't ports get made of 753's mods?
@rain cedar - is there a function kdt can use to get the mod versions of all mods using the API? He was thinking earlier there wasn't one. I know each mod now has an override to announce it's own version, but wasn't sure if he had a way to send me the list in his playerdata thing
Let me check
Also glass soul has a port but not lightbringer
Alright it looks like there is a way to get the loaded mods
But it's kinda messy
You could do:
GameObject.FindObjectOfType<ModVersionDraw>().drawString;
to get the string in the top left of the menu
I'll add a better way to do that
@leaden hedge @solemn rivet
Github links to the bonfire mod and blackmoth mod no longer work
are the modding api, debug, and/or randomizer on github?
That's because of 753s response 2 hours ago
Randomizer and debug code are on github
are there public links? I'm trying to update the drive readme with mod links for the newer mods
It's just the source code, no download
ah, ok
But I guess you could have it there anyway
@buoyant wasp I put up a new modding api with a better way to get loaded mods
It's just ModHooks.Instance.loadedMods
It's a List<string>
Although I suppose that's not a great way to do it because it's not read only
Eh
No reason for people to be messing with the list
thanks.
is it possible for the rando mod to do "open mode" style stuff where instead of making folks skip through all the intro cutscenes and fall, you simple spawn at the bottom of the initial pit?
Might be possible by hooking LoadOpeningCinematic to instead run LoadFirstScene
Doesn't really seem like something relevant to a randomizer mod, though
it's just a common practice in rando mods
to eliminate all the opening stuff and go straight to the meat of the game
seems like it would belong in debug more than rando
If the opening stuff was more than like 10 seconds I would care more
yeah, don't go out of your way for it. just didn't know if it was a simple "yeah there's this flag that i flip to say, 'has seen intro'" that would take 10s to put in ๐
Alright, well, I've updated the readme and compatabilities text files. Also renamed the PDT mod to fit the format of the other mods.
If anyone notices anything inaccurate or off, let me know.
If you've updated your mod and aren't sure if I've updated the drive folder, let me know.
If you've made a mod, it's not in the drive folder, and you'd like it in the drive folder, let me know.
@rain cedar - Any chance the debug mod could trigger SetPlayerBoolHook/SetPlayerIntHook when you give yourself a charm/spell/skill? trying to test changes to the randomizer UI is kind of slow because the notification that you picked something up only is triggered when those events are triggered
so i have to go find something to pick it up to see if my changes worked
That wouldn't really work
If I try to set something indirectly with randomizer on it's just gonna set a random other ability
k
It's not that bad to get items with noclip and 2x timescale, anyway
Under items
ah, little geo icon, got it
interesting bug with debug, if you grant yourself noclip, then quit, delete the save, create a new save, debug will still show that you have noclip under cheats, but you really don't until you click it twice (once to "turn it off", though not really, and again to turn it on)
Oh, that makes sense
I'm only updating the button colors when you click them
I should reset them all to white on quit
yeah, figured it was something like that
dunno if that applies to the other things like skills/spells items
It shouldn't
I'm updating those every frame
Too hard to capture every change to items/skills otherwise
word to the wise, don't turn on noclip and then clip through the door leading out of the room below where you get vengful spirit. you end up loading into the next room (where connifer is), but don't have noclip yet and up getting shoved back into the previous room (because the door is there), except the door is on the other side, so it shoves you back. forever. no escape, only alt+f4 ๐
tried that
it hazard respawned me....somewhere, hero position was 0,0, tried forcing the camera to find me, all i had was black
and no menu either even with forced pause
not a big deal, i mean, debug mod == "do things the game really, really did not intend"
Might try to fix it anyway
@leaden hedge - Few things when you have a chance
-Can you add a send when brokenCharm_23, brokenCharm_24, and brokenCharm_25 change? (the 3 fragile items)
-Sean added ModHooks.Instance.loadedMods (List<string>) that gets the loaded mod's and their versions. Can you update the version broadcast to send those in JSON format?
- I've added you as a collaborator on the github. The PlayerDataDump source (as of what you posted here earlier), is in there too. Currently it's just on the dev branch since I'm doing all the work on the new UI updates there.
Alright I think that happens when you hazard respawn during a load
And for force pause not working it's because the game isn't reporting pause as disabled during loads so it's just requesting pause the same as if you press escape
Guess I could just make it always force the pause menu
which since the exit scene, enter scene, and load all happen within a second, it's fairly easy to accidentally do that ๐
should be updated
also @dapper folio I noticed you changed my format to conform,
however this format sucks
you already know the author and mod name from the folder, putting the version / api requirements at the front makes it work in the tiled mode
hmm, good point, lemme fix that
[version][tag] Mod Name (by Mod Author)
good? suggestions?
I think thats fine
What's [tag]?
[API] etc
Ah
or [DRM-FREE]
updated
okay, I have some free time now
I'll try to continue porting the bonfire mod to the modding API
if I run into any dead-ends... I'l kindly give up and ask someone to write the hooks for me
because I really don't have the time to learn right now, and I really don't want this mod to get stuck in limbo by my fault
hi everyone! i asked someone for hollow knight modding help and they directed me here! im not very familiar with modding, however i have worked on some small projects in unity and i was wondering if i could get some tips on how to get started on modding hollow knight?
theres 2 ways of modding the game
either via direct dll editting or the modding api
which are basically the same tbh
you still have to write the code for what you want to do
the modding api, is more accessible and maintainable
so for the modding api, you're going to need visual studio to compile your mod, and a copy of the api which is in the gdrive
if you want to edit the .dll files directly, you can use dnspy
this is how we used to do things, and how some of the mods are still done, but this is less future-proof than the modding api
You can find links to some of these things in the channel pins
as well as links to mods that people here have made
@granite lagoon this is pretty much an empty mod for the modding api, it just has a single hook
@buoyant obsidian would it be ok if instead of hosting the .dll on github I only hosted the .cs for each class?
once you get that to compile you can ask some question about how to do more specific things
I'm not sure personally, I've only been using moddb
I handle all my versioning stuff locally
you can host .cs files of your own code
lost the current patch of blackmoth mutiple times
thank you!
@leaden hedge what if it's the .cs from the game, but slightly edited?
sorry im not a lawyer 
heh it's fine
since I'm only using it for version control for now, if TC complains I'll simply remove it
is there a particular thing you wanted to mod? @granite lagoon
right now im thinking something like adding npcs if possible
you'd be the first
everything is possible 
well...
what starting project would you recommend then
(sidenote these emojis are amazing)
I'd recommend replacing a charm with one of your own design
I'd recommend adding a pane to the inventory, I've been struggling with that the last week 
instead of slashing, now you go dashing
To replace a charm you'd have to look through the code and find out where the effects of each charm is handled (which for some charms isn't even possible) then remove that effect and put in your own.
its possible for every charm
you want it to do something else?
since it's not treated in-code
in blackmoth I had some ideas
but not anymore
I basically only made it invert the effects of overcharm out of spite
"who said I can't touch you?"
we've come quite a way with fsms 
that is true
hopefully I can find the actiondata code in dnspy, and have my viewer work perfectly
then i'll put it up and work on the editor
then I think this game will be much more open to mods
but for now if you want to change the effect of a charm, I can probably figure it out manually 
sorry 4 the dumb question but can someone explain to me how dnspy works?
and you focus on editing the assembly-csharp.dll
then you can look through assembly-csharp.dll as if it was a normal csharp project
ty!
D:\Steam\steamapps\common\Hollow Knight\hollow_knight_Data\Managed
or C:\
what if he's DRM free 
then RIP
C:\Program Files (x86)\GOG Galaxy\Games\Hollow Knight\hollow_knight_Data\Managed
then rip
ive bought it twice lol
nice
so, in order to edit, say, charms, you want to look for their effects, which should be mostly in the HeroController class
there you can also find attack, jump and dash handling, if you want to try and mess with those
go to playerData, look for equippedCharm_x, right click anaylze and look what its read by 
if its not read by anything you're out of luck
basically that
^
you're out of luck for now 
oh, and charm # does not necessarily correspond to their order in the inventory tab, for some reason
also
Here's a shitty copy of my old notes
if you want to edit textures/sprites/sound effects etc. you'll need UABE and Unity Studio
oh?
then you've gotta replace every asset file you update
yeah
It's a huge pain yeah
but how else would you go about doing that?
if you're editing every asset file just a small amout, you'd basically have to upload everything
unless you add your own textures externally
depends I'd probably just say load your own textures / sounds, then replace the target once they've been loaded
but it probably depends on your case
its something the api wants, but firzen can't figure it out 
because texture loading isn't actually handled in unity's dll
not that theres any real reason to replace textures atm, considering you can't edit unitys sprite / animation system afaik
bummer
that said, mods without adding your own textures has already yielded quite a few good ones
๐
i wanna give HK new digs
do it
have him wear a fun little christmas hat
ushbeti will get wr before that 
wow
Replacing art assets takes years
i was implying it was easy 

just because there's so many frames
it doesnt take years if you've got nothing to do all day...
speaking of doing nothing all day, im gonna head to bed now, thanks again for all your help and see yall later!
yo @random wagon are you around?`
hi fellas, i never use discord and i wont change that, just wanted to say PLZ UPLOAD THE MODS TO MODDB.COM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
the google drive link never changes 
just bookmark it
It's updated whenever a mod is shared or updated
worth pinning TC's statement regarding the assembly dll?
I'll leave it to Modder's discretion
blink
blink
oh, just trying to come up with a witty response to paco up there.
blink
blink
I mean, having it hosted on a site like moddb would provide more visibility, but the question is if TC is okay with it given how modding works.
My understanding is that they aren't
oh, it was more, random person comes in, complains that they won't use what everyone else is using, puts in all caps with incorrect spelling of the word "please" and somehow expects to get a sincere attempt at success
IE, politeness gets you further than screaming. (last I checked)
@ pacoeldeltrapo POLITENESS GETS YOU FURTHER THAN SCREAMING (LAST I CHECKED)
fuck politeness
lol
ยฏ_(ใ)_/ยฏ
Perhaps I'm just an old grump screaming "hey you kids, get off my lawn"
re TC/Legal @dapper folio - based on what we had yesterday from them, that seems to be the consensus. we can't really do moddb because of it.
at least, for stuff that has the dlls from the game that are being modified
stuff that is completely 100% via the mod-api that doesn't contain the original assets i think it was decided that was ok
someone is free to slap me if i'm speaking out of turn
Nah man you got it all wrong
we upload to moddb specifically because it's frowned upon, we're renegades!
you posted there before there was even an opinion
you were a renegade ahead of their time
you've been grandfathered into it
Sometimes you've gotta set sail without a ship
you were posting mods before the game was even written right?
After I made the Assembly-CSharp.dll for the Glass Soul mod, Team Cherry decided to make Hollow Knight so that people could play the mod.
So they waited several years until Unity was released, honed their skills, and made it.
well then, on behalf of all of us, thank you, 753
Whatever happened to
Replacing assets took up too much time, especially when new versions of the game removed all those assets
The nail in the coffin was when they changed the spritesheets for like half of it by a few pixels, destroying everything I'd made so far
rip
@leaden hedge - the newest dll, does it need an updated version of the mod api or anything? can't seem to load save files now
vanilla save files?
both vanilla and rando
i can create a new game
but not load existing
nothing in the mod log
well
nothing of use
check the unity log file
k
its in hollow_knight_Data
will do here in a bit
Error loading save file for slot 3: System.FormatException: Input string was not in a correct format.
at System.String.ParseFormatSpecifier (System.String str, System.Int32& ptr, System.Int32& n, System.Int32& width, System.Boolean& left_align, System.String& format) [0x00000] in <filename unknown>:0
at System.String.FormatHelper (System.Text.StringBuilder result, IFormatProvider provider, System.String format, System.Object[] args) [0x00000] in <filename unknown>:0
at System.String.Format (IFormatProvider provider, System.String format, System.Object[] args) [0x00000] in <filename unknown>:0
at System.String.Format (System.String format, System.Object[] args) [0x00000] in <filename unknown>:0
at PlayerDataDump.SocketServer.sendMessage (System.String var, System.String value) [0x00000] in <filename unknown>:0
at PlayerDataDump.SocketServer.loadSave (Int32 slot) [0x00000] in <filename unknown>:0
at (wrapper delegate-invoke) Modding.SavegameLoadHandler:invoke_void__this___int (int)
at (wrapper delegate-invoke) Modding.SavegameLoadHandler:invoke_void__this___int (int)
at (wrapper delegate-invoke) Modding.SavegameLoadHandler:invoke_void__this___int (int)
at Modding.ModHooks.OnSavegameLoad (Int32 id) [0x00000] in <filename unknown>:0
at GameManager.LoadGame (Int32 saveSlot) [0x00000] in <filename unknown>:0
er
pretty sure its complaining about this
public void sendMessage(string var, string value)
{
Send(String.Format("{ {0} : {1}, {2} : {3} }", "\"var\"", '"' + var + '"', "\"value\"", '"' + value + '"'));
}
public void loadSave(int slot)
{
sendMessage("SaveLoaded", "true");
}
I don't see an issue though, unless I can't use { at all in string.Format
k
would it be wise to wrap this stuff in a try/catch to make sure that we don't accidently break a game mid run? or is it relatively safe?
its safe, its just I didn't realise String.Format looked specifically for {} and not just {x}
so { text {0} } completely confuses it
๐
where do you want me to put the src for this btw
there's a dev branch on github that has a folder for it
you have perms or should
games load now ๐
will test the broken charms here later
alright now the update required thing actually works
apparently you need to have real headers for github to accept requests 
nope
doesn't work
will get log
10/17/2017 6:59:13 PM|Error|WebSocket.messages:0|System.MissingFieldException: Field 'Modding.ModHooks.loadedMods' not found.
at PlayerDataDump.SocketServer.OnMessage (WebSocketSharp.MessageEventArgs e) [0x00000] in <filename unknown>:0
at WebSocketSharp.Server.WebSocketBehavior.onMessage (System.Object sender, WebSocketSharp.MessageEventArgs e) [0x00000] in <filename unknown>:0
at WebSocketSharp.Ext.Emit[MessageEventArgs] (System.EventHandler`1 eventHandler, System.Object sender, WebSocketSharp.MessageEventArgs e) [0x00000] in <filename unknown>:0
at WebSocketSharp.WebSocket.messages (WebSocketSharp.MessageEventArgs e) [0x00000] in <filename unknown>:0
your api is old
k
it should return
["DebugMod","PlayerDataDump","RandomizerMod"]
something like that
dunno if I need to wrap it in {}
@rain cedar - can you add the version of the mod api to the list of mod versions displayed?
@leaden hedge - "mods", works now, returns the list of mods. though, wondering if it'd be better to do something like
{
"DebugMod" : "1.2.23",
"PlayerDataDump" :"16/10/17.c",
"RandomizerMod": "1.0.1 (XML Version:1 .0.0)"
}
doesn't return their string or I would
ah
k
in the short term, can we make "version" return valid json?
instead of just the version, wrap it in the brackets
okay, I give up for now
will focus on making bonfire work better for now
because it's been stuck for some time now
give up?
don't give up, skeleton
oh yeah, someone listend to my pleas!

does the current version of the debug mod have the feature to locate fsm names?
nope
Wouldn't be too hard to do
Isn't finding all the fsms as easy as GameObject.FindObjectsOfType<PlayMakerFSM>()?
but something like, show the name of whatever you're hovering over/clicking
I think he means the RayCast one I wanted to do
Oh, right
So do a raycast at the mouse position and check if any hit objects have PlayMakerFSM component?
yeah
That still shouldn't be too hard
nah shouldnt be
I'll try that soon
if you're going to mess with that, make sure to add a button to dump the json 
assuming you can
@young walrus
@buoyant obsidian lances from nailmaster's passion keep spawning while paused
Yeah, that makes sense since he's still using frameCount for that
I should probably switch that to the new time calculation too, right?
everything thats based on time should
actually on a similar note, how does timeScale interact with deltaTime do you know @rain cedar
do you have to multiply your values by timescale to be "correct"
Nah, deltaTime should take it into account
Is deltaTime measured in seconds?
yes
to toggle something?
(bool)
ye that works fine
Lightbringer will finish uploading in about 5 minutes
This one contains a patch for Nailmaster's Passion as well as further mana regen balancing.
What's the change to mana regen?
It's slightly slower than before but now Eye of the Storm gives 100% bonus mana regen
for an overall increase
Oh that's sick
So like if I had spore shroom and eye of the storm I would get 4 mana every time instead of 1?
really need to finish my 2nd playthrough and start a Lightbringer one
Now's definitely the best time
I have a feeling Grimm Troupe is gonna fuck up my mods so hard
I'll start tomorrow
@buoyant obsidian You sure you uploaded the right files? I'm not seeing the changes you mentioned on moddb or the drive folder
you're right, I forgot a file
The file will be up on moddb in 5 minutes, thanks for the heads-up.
@buoyant obsidian wait eye of the storm gives mana regen now?
holy shit!
i'm going to match that with spore shroom in my current routing
Yesterday I routed in spore shroom overcharmed with eye of the storm for HK and it worked really well
Should be one cast every 3.7 seconds using that build in this update
yeah that's not bad at all
Better than the 4.6 in the last version
I actually tested this version in boss fights, if you start at full mana you probably won't run out during the fight unless you're spamming randomly
and Time Fracture is abusable for mana regen too
Isn't that 2k geo?
Hmm... I see how that could get in the way of speedrunning...
I'll adjust it down to around 1.2k when I get some free time, I only had it that high to begin with because it was prone to glitches in its early days.
nah, these changes are fairly balanced for speedruns imo
i'm really the only one running it atm but i'm loving it ๐
lightbringer was the very first mod I played
I can't forget how awesome it was to beat False Knight so hard with Glass charm that he got stun-locked
hello again, im proud to present a minor victory! getting dnspy to work that is. for some reason i was having a bit of trouble yesterday but now everything's good
New update to Lightbringer, Time Fracture now costs only 753 geo
It'll probably change your life if you can keep up
Try to route in having exactly 753 geo at some point so you can flash pretty colors too
Yeah you gotta go the 753% route
Lel
I know i brought this up yesterday or monday, but then there was a bunch of discussion about the legality of dlls that derailed the conversation so i never saw any real feedback on it. Did any of the mod-maker's consider my idea about having the ability to "subscribe" to a roll (ala .gr mod_notify_lightbringer) for a mod to get announcements when a mod you use is updated? (so 753 could say @mod_notify_lightbringer to tell folks who are interested in a specific mod that it changed)
I honestly can't think of any real criticism but I dislike the idea
@buoyant obsidian did you update the drive folder?
Nope, my internet speed is slow and I'm busy
alright, i'll update it. it'll take a bit to show on the drive since I just started the sync app (has to check everything)
(plus people who download it through Drive don't get counted to the moddb download stats)
updated, just need to wait for the sync app to upload it
also, if it bothers you, all I need is a please and I'll remove the mods
Nah feel free to keep them up, I'm just saying I'm not really incentivized to go out of my way and update it
also interested to know
It'll appear more often in searches and I'm doing a school project on it using downloads / views to measure success
I put a note in the drive pin pointing out that getting your mods from moddb is preferred over the drive.
:)

I'm trying to dump fsms to find out the names of the spells (in order to finally implement the Int stat) but now matter what I do I can't dump "Hero Spells" or any of the spells... Any ideas?
I find it weird that Hit_L/R/U works
Anyway for me to toggle which mods I want active when I have multiple installed?
is it supposed to be wraith?
ty
U should be wraiths, L/R should be the dive explosion
dive is a 3 part spell
nope wraiths just resets its hitbox afaik
you might be able to change the Set Damage FSMs
but not sure if they take a bench to recalculate
that's my idea
oh
is there an event for "sat at bench"?
never thought about that
might be very useful
I'll try dumping events and see what I get
no save manager in the debug mod?
wow
also if you're looking for set damage
I don't think fireball has one
due to multiple charm interactions
I think your best bet is changing the damages_enemy_function state directly
also I think set damage gets called everytime the spell gets inits
@buoyant obsidian replaced assembly with the new version for Lightbringer and nothing happened. Also, is there any reason the resource files were included rather than the "hollow_knight_data" folder just like the previous versions?
(nothing happened as in the game just reverted back to standard 1.1.1.8)
From moddb right?
I must've made some mistake hmm
oh this is really weird
all the charms are the the normal sprites
but their actions are lightbringer lol
I think it has to do with the resource files being out of place?
Follow the installation instructions in the readme.txt
I did
i've installed this mod a few times
oh the textures
weird, never had to that in previous versions
the one from drive is different, I need to change that
ah I see
so they're both how it's handled on drive
I'll set it up the easy way in an hour
I used the files provided by moddb, but I set things up in the drive zip for drag and drop
nah it worked I was just being a derp
yeah drag and drop is easier, I'll change it to that in an hour
sigh
implementing Int right now
not feeling confident tho
I hate messing with FSM
do you not have my snippet still?
snippet? Wut?
public partial class __ModTest__ : MonoBehaviour
{
// Token: 0x060032C5 RID: 12997
public void spellDamage(GameObject go)
{
if (go.name == "Fireball2 Spiral(Clone)" || go.name == "Hit L" || go.name == "Hit R" || go.name == "Hit U" || go.name == "Q Fall Damage")
{
FSMUtility.LocateFSM(go, "damages_enemy").FsmVariables.GetFsmInt("damageDealt").Value = 0;
}
}
}
oh, yeah
using that
now I'm testing to find out how to make it work for fireball1
you can just list everything that has a "damages_enemy"
I just listed every go that is handled by PlayMakerUnity2DProxy
fireball1 is called Fireball(clone)
now there are some fsm I don't know about
Fireball Top(Clone)
Fireball Wisp(Clone)
does it have a damages_enemy fsm
if not it doesn't do damage
everything that has hitbox for whatever reason will go through the proxy
but only stuff with damages_enemy and damages_hero deal damage
that's good to know
I'll try and remember that for later when implementing a visual indicator of damage dealt to enemies
like if you add damages_hero to your fireball, you'll get hit by it
thats all it takes
I think it'd be pretty cool to make the fireball super slow moving
what is weird is
it should have dumped dive2 and scream2
but there's nothing in the list
only grass, geo and fireball
weird
odd, they come up when I look for everything with playmakerunity2dproxy
will try again
I'll move around as little as possible to minimize the amount of useless fsm names I have to read through to find them
wut
FSM name: Hit R
FSM name: Hit L
this makes NO sense
or does it?
what
this is supposed to be dive2
yeah
butbutbut
it doesn't use different names like fireball
oh
then, there's something ELSE wrong
because I didn't change the snippet to make them deal 0 damage
and it still killed things
oh
apparently only part of those spells is doing 0 damage
and Fireball(Clone) didn't work
will try making it so that only objects with damages_enemy fsm are printed
you can try and edit set damage FSM
that's my next step
actually, let me ask
why did you choose to edit GetFsmInt("damageDealt").Value instead of using SetFsmInt("damageDealt").Value?
it'd probably be, SetFsmInt("damageDealt", value);
yeah
makes sense
well, apparently Top and Wisp also deal damage
and for some reason it listed these as well:
(Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)
FSM name: AltSlash
(Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)
FSM name: DownSlash
(Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)
FSM name: Slash
(Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)
FSM name: WallSlash
(Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)```
and I didn't even slash
your nail always exists
PlayMakerFSM fsm = FSMUtility.LocateFSM(go, "Set Damage");
for (int i = 0; i < fsm.FsmStates.Length; i++)
{
if (fsm.FsmStates[i].Name == "Set Damage")
{
FieldInfo[] fieldInfo = typeof(HutongGames.PlayMaker.ActionData).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
for (int j = 0; j < fieldInfo.Length; j++)
{
if (fieldInfo[j].Name == "byteData") {
List<byte> value = new List<byte>();
int basedamage = 20;
value[0] = basedamage;
int shamandamage = 30;
value[14] = shamandamage;
fieldInfo[j].SetValue(fsm.FsmStates[i].ActionData, value);
fsm.FsmStates[i].LoadActions();
}
}
}
}
I think byteData is a list of bytes
might not be
well, that is interesting
if you want over 255 damage, you'll have to do value[0] = basedamage/255, value[1] = basedamage%255
etc
I'm still not sure how to read that
what are the components of value?
it's clear that value[0] is the base damage of the spell
so this is a little complicated, this is some reflection
and [14] is the damage with shaman charm
thats all the fieldInfo stuff
the Set Damage state, has a member called actionData
actionData has a list of actions
Set Damage has 3 actions
SetFSMInt, CheckPlayerDataBool, SetFsmInt
so
SetFSMInt has 5 parameters, and CheckPlayerDataBool has 4
and the 4th (arrays start at 0, so this is the 3rd index) value for SetFsmInt, is the value to be set
so
we have to read paramDataPos[3] and paramDataPos[5+4+3]
which are 0 and 14
then byteData[0] and byteData[14] is where those 2 values are stored
we change that and reload the state
ez right 
I think every spell should work the same
but nail damage probably uses a switch
is... Is that in the code?
thats in the fsm json dumps
just scroll down to actionData
you'll see actionNames, stringParams, byteData, paramDataPos, paramByteDataSize
I think I got it
but I was actually asking about this
for (int i = 0; i < fsm.FsmStates.Length; i++)
{
if (fsm.FsmStates[i].Name == "Set Damage")
{
FieldInfo[] fieldInfo = typeof(HutongGames.PlayMaker.ActionData).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
for (int j = 0; j < fieldInfo.Length; j++)
{
if (fieldInfo[j].Name == "byteData") {
List<byte> value = new List<byte>();
int basedamage = 20;
value[0] = basedamage;
int shamandamage = 30;
value[14] = shamandamage;
fieldInfo[j].SetValue(fsm.FsmStates[i].ActionData, value);
fsm.FsmStates[i].LoadActions();
}
}
}
}```
yeah what about it
did you write this or...?
๐

