#archived-modding-development

1 messages ยท Page 21 of 1

vale zenith
#

But I think they might not care if we host the dll

#

My main issue is maintainability

#

And binary patches don't really help there either

broken fable
#

oh. this is a surprise to me. they don't mind people publishing the .dll?

#

@vale zenith what do you mean maintainability?

solemn rivet
#

they don't seem to mind so far

leaden hedge
#

scroll down to mods

#

they publicly promoted mods distributed in this method

vale zenith
#

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

buoyant wasp
#

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

vale zenith
#

Yeah that requires us to host the decompiled binary on a git somewhere

#

Not sure they are down with that

buoyant wasp
#

ah, didn't know you had to decompile it first, thought you were just doing some sort of inline patching :/

vale zenith
#

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

buoyant wasp
#

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

broken fable
#

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.

vale zenith
#

They have an interest in keeping mods functioning since it increases the longlivety of the game

buoyant wasp
#

yes, but the time it takes to turn around a patch for a game is long

vale zenith
#

And since they can build from source the effort to maintain it is way lower for them

buoyant wasp
#

even if it takes 20 minutes to write the patch

vale zenith
#

Wyza, funny thing I just finished the release candidate for the next patch of a game

leaden hedge
#

the effort to maintain should be 0 considering it should never change

buoyant wasp
#

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

leaden hedge
#

for source that is

broken fable
#

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.

vale zenith
#

Wyza, yeah that's for consoles not for PC

#

they can conditionally compile the modding API since it's C#

buoyant wasp
#

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?

vale zenith
#

what are you even talking about?

buoyant wasp
#

well

vale zenith
#

Oh, you are a web dev

#

right?

buoyant wasp
#

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

vale zenith
#

yes, I am aware of how DI works

buoyant wasp
#

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)

broken fable
#

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.

vale zenith
#

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

broken fable
#

@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?

vale zenith
#

No idea

#

Worst case we have to add a hook

leaden hedge
#

you can do that

#

mantis claw logic isn't even in the game

#

its in playmakerfsm

vale zenith
#

oh it's in the FSMs

leaden hedge
#

I think the logic for jumping off the wall is in code

#

but I think thats it

vale zenith
#

We should definitely add helper functions for modifying those, although I think you are already doing that, right?

buoyant wasp
#

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);
    }
leaden hedge
#

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

vale zenith
#

Are you sure you aren't a java coder?

buoyant wasp
#

lol

leaden hedge
#

Factory hollowface

broken fable
#

is FSM a unity thing?

leaden hedge
#

FSM = finite state machine

vale zenith
#

FSM is a theoretical concept

#

playmakerFSM is a unity plugin

leaden hedge
#

playmakerFSM is a utility tool to visually make them

#

without knowing any code

vale zenith
#

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

broken fable
#

visual code editors maggot

vale zenith
#

It's worlds away from how game code is usually structured

leaden hedge
#

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

vale zenith
#

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

buoyant wasp
#

you're correct. most of my work is DB and application oriented rather than game loop oriented

vale zenith
#

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

buoyant wasp
#

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

vale zenith
#

It's usually games that are data/content driven

leaden hedge
#

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

vale zenith
#

That's why originally modding started with map editors

leaden hedge
#

then they can mod anything

vale zenith
#

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

buoyant wasp
#

๐Ÿ˜ƒ - 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

broken fable
#

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?

vale zenith
#

that they upstream it

leaden hedge
#

or they completely recode the game in good way hollowface

broken fable
#

@leaden hedge hollowomg ๐Ÿ‘

#

how often does the Modding API get updated right now?

leaden hedge
#

whenever someone needs something that isn't in there

broken fable
#

is that like once a week, or almost never, or what?

#

i don't think Google Drive lets me see history of the file

leaden hedge
#

depends, I think its been updated 3 or 4 times this week

#

but last week nothing

broken fable
#

doesn't that seem too frequent to trust an upstream version? the official game updates much much slower than that.

vale zenith
#

We will reach saturation at some point

leaden hedge
#

when they need to fix stuff, they get it out pretty quick

vale zenith
#

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

broken fable
#

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.

vale zenith
#

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?

broken fable
#

ok, sounds great. who's going to talk to them?

leaden hedge
#

you could ask graig

#

not to do the actual talking, but to request it

young walrus
#

would be nice to implement mods to everyone on steam using the workshop

#

bet you randomizer would explode

#

all of them would

leaden hedge
#

I think thats too much effort on their end

broken fable
#

@young walrus it's not quite as simple as that. keeping a modding api stable is a serious undertaking.

leaden hedge
#

also that completely excludes drm free people from mods

vale zenith
#

hm?

#

wat?

#

The main issue would be sandboxing

young walrus
#

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

leaden hedge
#

honestly, in a non-offensive way, I think thats beyond them

#

neither of them are programmers

vale zenith
#

I thought Leth was part of Team Cherry

leaden hedge
#

I dunno is leth a programmer?

#

I just know will and ari are basically just artists

vale zenith
#

I kind of consider Leth a coder, although I think he had a mostly advisory role here

young walrus
#

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

vale zenith
#

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

young walrus
#

fair point

broken fable
#

is there some precedent for steam workshop items that include executable code? seems like a security issue.

leaden hedge
#

it is

vale zenith
#

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

broken fable
#

ok. so the next step is someone talks to Team Cherry.

vale zenith
#

have fun @broken fable

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.

vale zenith
#

๐Ÿคฆ

#

If that's your conclusion I just wasted half an hour of my life, thanks

#

actually more, wow

leaden hedge
#

without anyone talking to kim jong un im going to my nuclear bunker

vale zenith
#

I already tried to start a conversation with them and got a sarcastic response back

broken fable
#

doesn't that mean they won't help us?

solemn rivet
#

Can't we use Graig as a sort of mediator?

#

Yes, use

vale zenith
#

@broken fable you definitely shouldn't be the one talking to them, I agree

#

@solemn rivet I don't know him

solemn rivet
#

oh

vale zenith
#

The only one I kind of know is Leth

leaden hedge
#

I'll ask simo to ask graig to ask them hollowface

vale zenith
#

I talked to him a bit way back when he was looking for people after the last wanderlust

broken fable
#

specifically we want to ask them about upstreaming the modding api and about legally publishing modded game files. is that it?

vale zenith
#

please don't be the one asking them

leaden hedge
#

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

vale zenith
#

I think that's the most likely outcome too

#

unless they were planning to add mod support anyway

broken fable
#

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?

vale zenith
#

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

buoyant obsidian
#

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

vale zenith
#

Basically we just want to know if we can host the assembly-csharp dll publicly

buoyant obsidian
#

I'll find out, give me some time

vale zenith
#

no rush

broken fable
#

ok. i will take no action on this then. ๐Ÿ˜ƒ instead i'd like to try making a mod later tonight.

vale zenith
#

knock yourself out

buoyant obsidian
#

@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?

vale zenith
#

Putting it up on a webspace somewhere so we can also host documentation etc

#

especially one that is indexed and publicly available

broken fable
#

Google Drive is kinda secret. GitHub is public.

vale zenith
#

GitHub has licensing issues

#

we can't host it on github

broken fable
#

some modded .dlls are already on github. are you saying we need to take those down?

leaden hedge
#

they're not technically supposed to be there no

#

I think its only gradows that are there

vale zenith
#

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

broken fable
#

would moddb be a better place to host mods?

solemn rivet
#

okay, I'll take it down

vale zenith
#

thanks

solemn rivet
#

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

vale zenith
#

no worries

#

@solemn rivet just in general, do you know about the gdc vault?

buoyant obsidian
#

It's understandable, modding can take a lot of time especially for a hobby

solemn rivet
#

can't say I do

vale zenith
#

A lot of the talks from the game developers conference(s) are publicly accessible for free

solemn rivet
#

@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

vale zenith
#

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

solemn rivet
#

I had no idea

#

I will do that in between study sessions!

vale zenith
#

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

buoyant obsidian
#

How to implement crafting

solemn rivet
#

"how do I make a minecraft clone that will earn me millions in a few hours?"

vale zenith
#

#Unity

buoyant obsidian
#

How do I make PUBG

vale zenith
#

#BeEpicGames

buoyant obsidian
#

with crafting

leaden hedge
#

probably better than PU

buoyant obsidian
#

loot crate how 2 code

vale zenith
#

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

leaden hedge
#

incremental game

solemn rivet
#

and you can buy perks

leaden hedge
#

for lootboxes hollowface

vale zenith
#

yeah that's what that genre is

#

You can only buy perks that you have found in lootboxes

#

How to rich

#

that's how

solemn rivet
#

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

vale zenith
#

#featureCreep

leaden hedge
#

more is better

#

even if everything is shallow hollowface

#

botw is goty btw

solemn rivet
#

wut

leaden hedge
#

instead of developing each mechanic well, botw basically just threw like 600 different mechanics into 600 different one room shrines

solemn rivet
#

not really 600 different mechanics tho

#

more like 6 different mechanics, give it a spit shine a hundred times

vale zenith
#

I agree to some extend, but at the same time I think botw isn't anywhere close to the worst offenders of that

solemn rivet
#

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

leaden hedge
#

skyrims dungeons are awful too

#

usually a few rooms that loop around

#

made out of cookie cutter prefabs

solemn rivet
#

yup

vale zenith
#

I don't think the botw dungeons are bad

solemn rivet
#

and lovely argonian maids

leaden hedge
#

they're not bad

#

it'd probably be better to have 1/10 the dungeons

vale zenith
#

they are different from what I expected for sure

leaden hedge
#

and have them be 10 times longer with a single theme to each one

vale zenith
#

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

solemn rivet
#

I hear you, firzen

vale zenith
#

The dungeons were made to be short enough to finish one on a bus ride or while taking a bath or whatever

solemn rivet
#

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

vale zenith
#

@solemn rivet I'm on board with that, it definitely wasn't what I was expecting

solemn rivet
#

many people went into it thinking they would get the same dungeon experience from most zelda games

#

and that's why they were dissatisfied

vale zenith
#

All of that is legitimate

serene glacier
#

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.

vale zenith
#

but I don't think that means they are bad design

solemn rivet
#

no, I agree with you

#

I might get backlash for this, but it somehow reminds me of the discussion about DkS2 merits

leaden hedge
#

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

vale zenith
#

I have a way bigger problem with other stuff in the game

#

the weapon durability thing is terrible

solemn rivet
#

durability

serene glacier
#

The weapon durability and lack of enemy variety were my biggest issues.

leaden hedge
#

well theres only 4 bosses and they are copies of each other

buoyant obsidian
#

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

serene glacier
#

Yeah. It took away any excitement from getting new weapons since you knew they were going tobreak.

solemn rivet
#

exactly

#

basically no real weapon progression

#

and the Master Sword 'breaks'

vale zenith
#

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

leaden hedge
#

they can't really have an open world game with 100's of shrines and require you to get items

vale zenith
#

Why?

leaden hedge
#

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

vale zenith
#

nah, that's a strawman

solemn rivet
#

they can, but that doesn't mean they would sell as many copies

buoyant obsidian
#

You know how each region has a tower that you climb to map?

solemn rivet
#

also, there's an easy fix for that - a functional mapping system that allows for markers, manual notes etc.

leaden hedge
#

like a normal zelda game you start with nothing, and then each dungeon gives you an item

buoyant obsidian
#

make that raise all the shrines from the ground when you activate it

#

and then those can give permanent upgrades like hookshot

leaden hedge
#

and each dungeon only requires the items before it

solemn rivet
#

but many zelda games are non-linear when it comes to dungeon/item progression

vale zenith
#

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

leaden hedge
#

wind waker only has a few dungeons to explore

vale zenith
#

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

serene glacier
#

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.

leaden hedge
#

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

vale zenith
#

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

solemn rivet
#

the alternative would be to make a game which would not appeal to such a broad audience as botw does

vale zenith
#

upgrade your health or stamina or whatever

#

I just really dislike that after I leave the tutorial I can straight waltz up to ganon

buoyant obsidian
#

Not focusing on progression actually attracted a lot of my non-gamer friends to get it

leaden hedge
#

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

vale zenith
#

you can teleport backtracking isn't much of an issue

solemn rivet
#

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

vale zenith
#

Also made by a really great studio

solemn rivet
#

yup

#

753: Not focusing on progression actually attracted a lot of my non-gamer friends to get it

leaden hedge
#

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

solemn rivet
#

I think that's what they were aiming for with botw

leaden hedge
#

so then you'd have to go back and refind them

solemn rivet
#

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

buoyant obsidian
#

Yeah I think so

solemn rivet
#

I like that a lot in exploration games

vale zenith
#

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

buoyant obsidian
#

yep, we'll have to leave that to HK for Switch

solemn rivet
buoyant wasp
#

question for modders. is there any kind of mechanism you use to notify users of your mod that an update is out?

solemn rivet
buoyant wasp
#

๐Ÿ˜›

solemn rivet
#

not kidding tho

#

xD

buoyant wasp
#

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

solemn rivet
#

it is

#

some new developments lately (pun intended)

leaden hedge
#

technically for the modding api, you could load a webpage

#

then change the getVersion

buoyant wasp
#

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

solemn rivet
#

that sounds like a nice idea

buoyant wasp
#

@rain cedar or @leaden hedge - Do you have a veresion of this with a 100% transparent background?

#

basically, looking for that flourish

leaden hedge
#

@somber spear

#

he did the art for debug mod

buoyant wasp
#

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

leaden hedge
#

and then compare that

buoyant wasp
#

yeah, we could do that too

leaden hedge
#

then I can just change the version string to be 16/10/17.c OUTDATED

somber spear
#

You called?

leaden hedge
#

do you have that image, but without the bg

somber spear
#

Yeah, I'll get it in a sec

leaden hedge
#

cheers

somber spear
#

Is this the enemy panel bg?

leaden hedge
#

pretty sure it is

buoyant wasp
#

EnemiesBg.png

#

is what it is in the debug mod

somber spear
#

Do you only want the white fleur parts?

buoyant wasp
#

yup

hazy sentinel
somber spear
#

Well, he was faster than me opening up my project

buoyant wasp
#

lol

leaden hedge
#

and make it say 16/10/17.d

buoyant wasp
#

yeah, mind if it's in a bit?

leaden hedge
#

whenever

buoyant wasp
#

cool

buoyant obsidian
#

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

buoyant wasp
#

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)

#

not released yet though, still testing

solemn rivet
#

that's amazing!

#

I'm liking this overlay more and more!

buoyant wasp
#

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

dapper folio
#

Will it be possible to just remove all the UI elements? @buoyant wasp
Nevermind, thought this was a mod, not an OBS overlay

buoyant wasp
#

๐Ÿ˜ƒ

dapper folio
#

Was hoping for a replacement for Kein's NoUI mod

rain cedar
#

Debug mod already has disabling hud as an option

#

I could just move that to another dll if you want something more lightweight

dapper folio
#

Didn't know that. Haven't played HK in a while and Debug Mod never seemed like a mod I'd want to use

rain cedar
#

If we're crossing things out for being a part of other mods then debug mod has hp bars as well

dapper folio
#

yeah? alright then

#

Do you just happen to have a save anywhere function lying around in there too?

rain cedar
#

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

dapper folio
#

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?

rain cedar
#

It uses the api

dapper folio
#

alright then

#

your mods, Blackmoth, and PDT use the api.
didn't ports get made of 753's mods?

buoyant wasp
#

@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

rain cedar
#

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

dapper folio
#

@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?

solemn rivet
#

That's because of 753s response 2 hours ago

rain cedar
#

Randomizer and debug code are on github

dapper folio
#

are there public links? I'm trying to update the drive readme with mod links for the newer mods

rain cedar
#

It's just the source code, no download

dapper folio
#

ah, ok

rain cedar
#

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

buoyant wasp
#

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?

rain cedar
#

Might be possible by hooking LoadOpeningCinematic to instead run LoadFirstScene

#

Doesn't really seem like something relevant to a randomizer mod, though

buoyant wasp
#

it's just a common practice in rando mods

#

to eliminate all the opening stuff and go straight to the meat of the game

dapper folio
#

seems like it would belong in debug more than rando

rain cedar
#

If the opening stuff was more than like 10 seconds I would care more

buoyant wasp
#

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 ๐Ÿ˜ƒ

dapper folio
#

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.

buoyant wasp
#

@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

rain cedar
#

That wouldn't really work

#

If I try to set something indirectly with randomizer on it's just gonna set a random other ability

buoyant wasp
#

k

rain cedar
#

It's not that bad to get items with noclip and 2x timescale, anyway

buoyant wasp
#

lol, i had no idea that debug could do this, hah

#

is there a geo granting button?

rain cedar
#

Under items

buoyant wasp
#

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)

rain cedar
#

Oh, that makes sense

#

I'm only updating the button colors when you click them

#

I should reset them all to white on quit

buoyant wasp
#

yeah, figured it was something like that

#

dunno if that applies to the other things like skills/spells items

rain cedar
#

It shouldn't

#

I'm updating those every frame

#

Too hard to capture every change to items/skills otherwise

buoyant wasp
#

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 ๐Ÿ˜‰

rain cedar
#

You can also escape with hazard respawn

#

F6

buoyant wasp
#

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"

rain cedar
#

Might try to fix it anyway

buoyant wasp
#

and this is what happens if you hit hazard respawn

buoyant wasp
#

@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.
rain cedar
#

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

buoyant wasp
#

which since the exit scene, enter scene, and load all happen within a second, it's fairly easy to accidentally do that ๐Ÿ˜ƒ

leaden hedge
#

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

dapper folio
#

hmm, good point, lemme fix that

#

[version][tag] Mod Name (by Mod Author)
good? suggestions?

leaden hedge
#

I think thats fine

buoyant obsidian
#

What's [tag]?

leaden hedge
#

[API] etc

buoyant obsidian
#

Ah

leaden hedge
#

or [DRM-FREE]

dapper folio
#

updated

solemn rivet
#

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

granite lagoon
#

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?

leaden hedge
#

theres 2 ways of modding the game

#

either via direct dll editting or the modding api

solemn rivet
#

which are basically the same tbh

leaden hedge
#

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

solemn rivet
#

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

buoyant obsidian
#

You can find links to some of these things in the channel pins

#

as well as links to mods that people here have made

leaden hedge
solemn rivet
#

@buoyant obsidian would it be ok if instead of hosting the .dll on github I only hosted the .cs for each class?

leaden hedge
#

once you get that to compile you can ask some question about how to do more specific things

buoyant obsidian
#

I'm not sure personally, I've only been using moddb

#

I handle all my versioning stuff locally

solemn rivet
#

I hate locally handling version control

#

by that I mean that I suck at it

leaden hedge
#

you can host .cs files of your own code

solemn rivet
#

lost the current patch of blackmoth mutiple times

granite lagoon
#

thank you!

solemn rivet
#

@leaden hedge what if it's the .cs from the game, but slightly edited?

leaden hedge
#

sorry im not a lawyer hollowface

solemn rivet
#

heh it's fine

#

since I'm only using it for version control for now, if TC complains I'll simply remove it

leaden hedge
#

is there a particular thing you wanted to mod? @granite lagoon

granite lagoon
#

right now im thinking something like adding npcs if possible

leaden hedge
#

you'd be the first

solemn rivet
#

that's quite hard right now

#

I don't even know if it is possible at all

leaden hedge
#

everything is possible hollowface

solemn rivet
#

well...

granite lagoon
#

what starting project would you recommend then thinkgrub (sidenote these emojis are amazing)

buoyant obsidian
#

I'd recommend replacing a charm with one of your own design

solemn rivet
#

^

#

or do what I have done - change the way to experience the game just slightly

leaden hedge
#

I'd recommend adding a pane to the inventory, I've been struggling with that the last week hollowface

solemn rivet
#

instead of slashing, now you go dashing

buoyant obsidian
#

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.

leaden hedge
#

its possible for every charm

solemn rivet
#

is it?

#

I couldn't figure out how to override fotf's usual effect

leaden hedge
#

you want it to do something else?

solemn rivet
#

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?"

leaden hedge
#

we've come quite a way with fsms hollowface

solemn rivet
#

that is true

leaden hedge
#

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 hollowface

granite lagoon
#

sorry 4 the dumb question but can someone explain to me how dnspy works?

leaden hedge
#

you drag all the dlls the game needs into it

#

so pretty much everything in managed

solemn rivet
#

and you focus on editing the assembly-csharp.dll

leaden hedge
#

then you can look through assembly-csharp.dll as if it was a normal csharp project

solemn rivet
granite lagoon
#

ty!

buoyant obsidian
#

D:\Steam\steamapps\common\Hollow Knight\hollow_knight_Data\Managed

solemn rivet
#

or C:\

leaden hedge
#

what if he's DRM free hollowface

buoyant obsidian
#

then RIP

solemn rivet
#

C:\Program Files (x86)\GOG Galaxy\Games\Hollow Knight\hollow_knight_Data\Managed

leaden hedge
#

what if he pirated it

solemn rivet
#

then rip

granite lagoon
#

ive bought it twice lol

solemn rivet
#

same here

#

thrice actually

granite lagoon
#

nice

solemn rivet
#

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

leaden hedge
#

go to playerData, look for equippedCharm_x, right click anaylze and look what its read by hollowface

#

if its not read by anything you're out of luck

buoyant obsidian
#

basically that

solemn rivet
#

^

leaden hedge
#

you're out of luck for now hollowface

solemn rivet
#

oh, and charm # does not necessarily correspond to their order in the inventory tab, for some reason

leaden hedge
#

its the order they were added

#

you can check that to see what number = charm

solemn rivet
#

also

buoyant obsidian
solemn rivet
#

if you want to edit textures/sprites/sound effects etc. you'll need UABE and Unity Studio

leaden hedge
#

not necessarily

#

infact I wouldn't even recommend it

solemn rivet
#

oh?

leaden hedge
#

then you've gotta replace every asset file you update

solemn rivet
#

yeah

buoyant obsidian
#

It's a huge pain yeah

solemn rivet
#

but how else would you go about doing that?

leaden hedge
#

if you're editing every asset file just a small amout, you'd basically have to upload everything

solemn rivet
#

unless you add your own textures externally

leaden hedge
#

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 hollowface

#

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

granite lagoon
#

bummer

buoyant wasp
#

that said, mods without adding your own textures has already yielded quite a few good ones

#

๐Ÿ˜ƒ

young walrus
#

i wanna give HK new digs

leaden hedge
#

do it

young walrus
#

have him wear a fun little christmas hat

leaden hedge
#

ushbeti will get wr before that hollowface

young walrus
#

lol

#

so never

leaden hedge
#

wow

buoyant obsidian
#

Replacing art assets takes years

leaden hedge
#

i was implying it was easy hollowface

young walrus
buoyant obsidian
#

just because there's so many frames

granite lagoon
#

it doesnt take years if you've got nothing to do all day...hollowsad

#

speaking of doing nothing all day, im gonna head to bed now, thanks again for all your help and see yall later!

vale zenith
#

yo @random wagon are you around?`

fair rampart
#

hi fellas, i never use discord and i wont change that, just wanted to say PLZ UPLOAD THE MODS TO MODDB.COM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

leaden hedge
#

the google drive link never changes hollowface

leaden hedge
#

just bookmark it

dapper folio
#

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

buoyant wasp
#

blink

dapper folio
#

blink

buoyant wasp
#

oh, just trying to come up with a witty response to paco up there.

dapper folio
#

blink

marble scarab
#

blink

buoyant wasp
#

hmm, can we get a reversehollowdab? ๐Ÿ˜‰

#

so that we can do aerobics?

dapper folio
#

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

buoyant wasp
#

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)

hazy sentinel
#

@ pacoeldeltrapo POLITENESS GETS YOU FURTHER THAN SCREAMING (LAST I CHECKED)

leaden hedge
#

fuck politeness

buoyant wasp
#

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

buoyant obsidian
#

Nah man you got it all wrong

#

we upload to moddb specifically because it's frowned upon, we're renegades!

dapper folio
#

you posted there before there was even an opinion

#

you were a renegade ahead of their time

#

you've been grandfathered into it

buoyant obsidian
#

Sometimes you've gotta set sail without a ship

buoyant wasp
#

you were posting mods before the game was even written right?

buoyant obsidian
#

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.

dapper folio
#

well then, on behalf of all of us, thank you, 753

dapper folio
buoyant obsidian
#

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

dapper folio
#

rip

buoyant wasp
#

@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

leaden hedge
#

vanilla save files?

buoyant wasp
#

both vanilla and rando

#

i can create a new game

#

but not load existing

#

nothing in the mod log

#

well

#

nothing of use

leaden hedge
#

check the unity log file

buoyant wasp
#

k

leaden hedge
#

its in hollow_knight_Data

buoyant wasp
#

will do here in a bit

leaden hedge
#

called output.txt

#

pretty sure its an issue with the api

buoyant wasp
#

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 
 

leaden hedge
#

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

buoyant wasp
#

debug mod doesn't have a version

#

could it be that?

leaden hedge
#

nah

#

yeah its that lol

#

mb

#

try that

buoyant wasp
#

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?

leaden hedge
#

its safe, its just I didn't realise String.Format looked specifically for {} and not just {x}

#

so { text {0} } completely confuses it

buoyant wasp
#

๐Ÿ˜ƒ

leaden hedge
#

where do you want me to put the src for this btw

buoyant wasp
#

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

leaden hedge
#

alright now the update required thing actually works

#

apparently you need to have real headers for github to accept requests hollowface

buoyant wasp
#

haha

#

broken seems to work now too

leaden hedge
#

did you test "mods"

#

does that json array actually work

buoyant wasp
#

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 
leaden hedge
#

your api is old

buoyant wasp
#

k

leaden hedge
#

it should return

["DebugMod","PlayerDataDump","RandomizerMod"]
#

something like that

#

dunno if I need to wrap it in {}

buoyant wasp
#

@rain cedar - can you add the version of the mod api to the list of mod versions displayed?

buoyant wasp
#

@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)"
}
leaden hedge
#

doesn't return their string or I would

buoyant wasp
#

ah

#

k

#

in the short term, can we make "version" return valid json?

#

instead of just the version, wrap it in the brackets

solemn rivet
#

okay, I give up for now

#

will focus on making bonfire work better for now

#

because it's been stuck for some time now

buoyant wasp
#

give up?

solemn rivet
#

give up trying to port it

#

to the modding api

dapper folio
#

don't give up, skeleton

buoyant wasp
#

oh yeah, someone listend to my pleas! hollowdabreverse hollowdab

young walrus
#

Blind high five

solemn rivet
#

does the current version of the debug mod have the feature to locate fsm names?

leaden hedge
#

nope

rain cedar
#

Wouldn't be too hard to do

#

Isn't finding all the fsms as easy as GameObject.FindObjectsOfType<PlayMakerFSM>()?

solemn rivet
#

but something like, show the name of whatever you're hovering over/clicking

leaden hedge
#

I think he means the RayCast one I wanted to do

rain cedar
#

Oh, right

#

So do a raycast at the mouse position and check if any hit objects have PlayMakerFSM component?

leaden hedge
#

yeah

rain cedar
#

That still shouldn't be too hard

leaden hedge
#

nah shouldnt be

rain cedar
#

I'll try that soon

leaden hedge
#

if you're going to mess with that, make sure to add a button to dump the json hollowface

#

assuming you can

rain cedar
hazy sentinel
#

@buoyant obsidian lances from nailmaster's passion keep spawning while paused

rain cedar
#

Yeah, that makes sense since he's still using frameCount for that

buoyant obsidian
#

I should probably switch that to the new time calculation too, right?

leaden hedge
#

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"

rain cedar
#

Nah, deltaTime should take it into account

buoyant obsidian
#

Is deltaTime measured in seconds?

leaden hedge
#

yes

buoyant obsidian
#

passionDirection = ! passionDirection;

#

that's correct in C# right?

leaden hedge
#

to toggle something?

buoyant obsidian
#

(bool)

leaden hedge
#

ye that works fine

buoyant obsidian
#

Lightbringer will finish uploading in about 5 minutes

#

This one contains a patch for Nailmaster's Passion as well as further mana regen balancing.

rain cedar
#

What's the change to mana regen?

buoyant obsidian
#

It's slightly slower than before but now Eye of the Storm gives 100% bonus mana regen

#

for an overall increase

rain cedar
#

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?

buoyant obsidian
#

Nah you'd have 3

#

100% of base

rain cedar
#

Alright so it's additive like the other charms

#

Cool

dapper folio
#

really need to finish my 2nd playthrough and start a Lightbringer one

buoyant obsidian
#

Now's definitely the best time

#

I have a feeling Grimm Troupe is gonna fuck up my mods so hard

dapper folio
#

I'll start tomorrow

rain cedar
#

@buoyant obsidian You sure you uploaded the right files? I'm not seeing the changes you mentioned on moddb or the drive folder

buoyant obsidian
#

you're right, I forgot a file

rain cedar
#

Only the most important one

#

Oops

buoyant obsidian
#

The file will be up on moddb in 5 minutes, thanks for the heads-up.

daring snow
#

@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

rain cedar
#

Should be one cast every 3.7 seconds using that build in this update

daring snow
#

yeah that's not bad at all

rain cedar
#

Better than the 4.6 in the last version

buoyant obsidian
#

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

rain cedar
#

Isn't that 2k geo?

buoyant obsidian
#

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.

daring snow
#

nah, these changes are fairly balanced for speedruns imo

#

i'm really the only one running it atm but i'm loving it ๐Ÿ˜„

solemn rivet
#

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

granite lagoon
#

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

buoyant obsidian
#

New update to Lightbringer, Time Fracture now costs only 753 geo

daring snow
#

That's amazing squilLUL

#

I'll do some alternate routing for time fracture at some point

buoyant obsidian
#

It'll probably change your life if you can keep up

rain cedar
#

Try to route in having exactly 753 geo at some point so you can flash pretty colors too

buoyant obsidian
#

Yeah you gotta go the 753% route

daring snow
#

Lel

buoyant wasp
#

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)

buoyant obsidian
#

I honestly can't think of any real criticism but I dislike the idea

dapper folio
#

@buoyant obsidian did you update the drive folder?

buoyant obsidian
#

Nope, my internet speed is slow and I'm busy

dapper folio
#

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)

buoyant obsidian
#

(plus people who download it through Drive don't get counted to the moddb download stats)

dapper folio
#

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

buoyant obsidian
#

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

leaden hedge
#

why do you even care about moddb downloads

#

do you get a prize or smth

dapper folio
#

also interested to know

buoyant obsidian
#

It'll appear more often in searches and I'm doing a school project on it using downloads / views to measure success

dapper folio
#

I put a note in the drive pin pointing out that getting your mods from moddb is preferred over the drive.

buoyant obsidian
#

:)

dapper folio
solemn rivet
#

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?

rain cedar
leaden hedge
#

this isn't what he wants

#

thats for casting spells

#

he wants Fireball Spiral(2)

rain cedar
#

I don't know how useful those are because I haven't actually looked in them

solemn rivet
#

I find it weird that Hit_L/R/U works

high moat
#

Anyway for me to toggle which mods I want active when I have multiple installed?

solemn rivet
#

is it supposed to be wraith?

leaden hedge
#

nope

#

drag them into a folder

#

then run

#

I call mine like Mods/disable/

high moat
#

ty

leaden hedge
#

U should be wraiths, L/R should be the dive explosion

solemn rivet
#

oh

#

I thought L/R were the left/right components of wraith

#

and Q_Fall was dive

leaden hedge
#

dive is a 3 part spell

solemn rivet
#

gotcha

#

I thought that dive was a 1 part spell while wraith was a 3 part spell

leaden hedge
#

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

solemn rivet
#

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

leaden hedge
high moat
#

no save manager in the debug mod?

leaden hedge
#

not in the new one

solemn rivet
#

wow

leaden hedge
#

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

solemn rivet
#

ok

#

thanks!

daring snow
#

@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)

buoyant obsidian
#

From moddb right?

daring snow
#

yeah the link you posted

#

Just tried it again, still nothing

buoyant obsidian
#

I must've made some mistake hmm

daring snow
#

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?

buoyant obsidian
#

Follow the installation instructions in the readme.txt

daring snow
#

I did

#

i've installed this mod a few times

#

oh the textures

#

weird, never had to that in previous versions

buoyant obsidian
#

the one from drive is different, I need to change that

daring snow
#

ah I see

buoyant obsidian
#

so they're both how it's handled on drive

daring snow
#

sorry, for the trouble - this should work

#

yeah that worked

buoyant obsidian
#

I'll set it up the easy way in an hour

dapper folio
#

I used the files provided by moddb, but I set things up in the drive zip for drag and drop

daring snow
#

nah it worked I was just being a derp

buoyant obsidian
#

yeah drag and drop is easier, I'll change it to that in an hour

solemn rivet
#

sigh

#

implementing Int right now

#

not feeling confident tho

#

I hate messing with FSM

leaden hedge
#

do you not have my snippet still?

solemn rivet
#

snippet? Wut?

leaden hedge
#
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;
        }
    }
}
solemn rivet
#

oh, yeah

#

using that

#

now I'm testing to find out how to make it work for fireball1

leaden hedge
#

you can just list everything that has a "damages_enemy"

solemn rivet
#

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)

leaden hedge
#

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

solemn rivet
#

that's good to know

#

I'll try and remember that for later when implementing a visual indicator of damage dealt to enemies

leaden hedge
#

like if you add damages_hero to your fireball, you'll get hit by it

#

thats all it takes

solemn rivet
#

sounds amazing

#

challenge run

leaden hedge
#

I think it'd be pretty cool to make the fireball super slow moving

solemn rivet
#

what is weird is

leaden hedge
#

but make it an "enemy" with one hp

#

so you could hit it, to make it explode

solemn rivet
#

it should have dumped dive2 and scream2

#

but there's nothing in the list

#

only grass, geo and fireball

#

weird

leaden hedge
#

do you cast them

#

?

solemn rivet
#

yup

#

multiple times even

leaden hedge
#

odd, they come up when I look for everything with playmakerunity2dproxy

solemn rivet
#

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?

leaden hedge
#

what

solemn rivet
#

this is supposed to be dive2

leaden hedge
#

yeah

solemn rivet
#

butbutbut

leaden hedge
#

it doesn't use different names like fireball

solemn rivet
#

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

leaden hedge
#

hmm

#

maybe they hit multiple times

#

at the damage gets set again

solemn rivet
#

and Fireball(Clone) didn't work

#

will try making it so that only objects with damages_enemy fsm are printed

leaden hedge
#

you can try and edit set damage FSM

solemn rivet
#

that's my next step

#

actually, let me ask

#

why did you choose to edit GetFsmInt("damageDealt").Value instead of using SetFsmInt("damageDealt").Value?

leaden hedge
#

it'd probably be, SetFsmInt("damageDealt", value);

solemn rivet
#

yeah

leaden hedge
#

easier to check what I have works

#

if I can get it

#

then I can print it out

solemn rivet
#

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

leaden hedge
#

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

solemn rivet
#

well, that is interesting

leaden hedge
#

yeah it is

#

that should work hollowface

solemn rivet
#

yeah

#

but that is... Wow

leaden hedge
#

if you want over 255 damage, you'll have to do value[0] = basedamage/255, value[1] = basedamage%255

#

etc

solemn rivet
#

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

leaden hedge
#

so this is a little complicated, this is some reflection

solemn rivet
#

and [14] is the damage with shaman charm

leaden hedge
#

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 hollowface

#

I think every spell should work the same

#

but nail damage probably uses a switch

solemn rivet
#

is... Is that in the code?

leaden hedge
#

thats in the fsm json dumps

#

just scroll down to actionData

#

you'll see actionNames, stringParams, byteData, paramDataPos, paramByteDataSize

solemn rivet
#

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();
                            }
                        }
                    }
                }```
leaden hedge
#

yeah what about it

solemn rivet
#

did you write this or...?

leaden hedge
#

yes

#

would you like me to comment it?