#archived-modding-development

1 messages · Page 59 of 1

copper nacelle
#

except don't because fsms are bad

solemn rivet
#

I can do some wonky workaround like that

#

have it directly subtract from enemies' HP

#

but, meh

#

so, on an unrelated note

#

I found out what "I" was doing to change files on the drive that aren't mine

#

for some reason, when I right click->"get shared link" on any file, it auto-changes that file's share status to "anyone at UC Santa Cruz with the link can view"... Which is weird, cause I have no connection to UCSC, don't use VPN/proxy and, just to be safe, I live in Brazil

#

so, yeah

#

I sent google a message

#

still waiting for a reply tho

copper nacelle
#

lmao

solemn rivet
#

it doesn't depend on the browser btw

#

and also, it doesn't happen if instead of right-click, I use the little "chain" button on the page to get the share link

copper nacelle
#

wtf

pearl sentinel
#

i leave for like literally 3 hours and miss all the excitement

copper nacelle
#

lmao

pearl sentinel
#

i should make an "im feeling lucky" button that just downloads random mods

copper nacelle
#

lmao

#

that'd be neat

pearl sentinel
#

then we can tell people to just click the button until they're happy

copper nacelle
#

nice

pearl sentinel
#

i wanna make a mod that tracks where you go (like visually) with waypoints that you can load and follow on subsequent playthroughs

copper nacelle
#

that'd be neat

pearl sentinel
#

yeah, pretty easy too

#

maybe if i have time tomorrow morning

#

i could do things today... but i'm so close to void elves....

copper nacelle
#

void elves

#

what

pearl sentinel
#

(WoW)

#

new race thing

copper nacelle
#

o

solemn rivet
#

(potential?) final release! Now it can download and manage modding API and API mods!

agile gulch
#

cool and good

rain cedar
pearl sentinel
solar heart
#

pizza will make me very happy too

pearl sentinel
solemn rivet
solar heart
#

what

#

why did my post got deleted?

scarlet sierra
#

Tbh a team of modders need to collaborate and make a playable quirrel mod

rain cedar
#

Tbh a team of fast food workers need to collaborate and make me a taco

#

Fucking two of them right one after the other

solemn rivet
#

kek that's like above average

solar heart
#

@rain cedar it looks like you are a "HUNGRY KNIGHT"

rain cedar
#

Wow and an @ for no reason

#

We're on a roll here

#

Alright you've gone from being annoying to outright spam

#

I'm gonna delete those pictures, don't post more

solar heart
#

sowwy :((

pearl sentinel
#

just tried an idea i had, time only moves while you're pressing a key

#

kinda fun

rain cedar
#

SUPER

#

HOLLOW

pearl sentinel
#

ok, this is a more than kinda fun

exotic venture
#

SUPER HOLLOW KNIGHT 64 WHEN

pearl sentinel
exotic venture
#

Tell me more.

rain cedar
#

Wow you have a working enemy rando already and you're hiding it

exotic venture
#

I need to know more about this

pearl sentinel
#

it softlocks in a few places that i'm ironing out (the enemy rando)

#

i'm hoping to release it soon

young walrus
#

we still need to finalize the bingo goals. lol

exotic venture
#

bingo goals, what

rain cedar
#

"Finalize"

#

There needs to be like double what there is now

young walrus
#

there's like 150+ goals there

rain cedar
#

There's only 18 green ones

#

Good luck getting short cards

young walrus
#

so we'll just make 1 medium list

rain cedar
#

Ok

young walrus
#

so like... exclude all the red goals, and then use orange/yellow primarily in the list. and combine some green ones for the list

#

boom

rain cedar
#

Yeah, could be fun

#

Some of the uncolored ones in the middle should be green too

#

Like tram pass and crossroads grubs

#

Very easy

young walrus
#

even if we just have a rough version together for v1.0, that'll allow us to do some races/runs with it for balancing

exotic venture
#

lantern is also very easy

rain cedar
#

Eh

young walrus
#

easy-ish goals are fine

rain cedar
#

It's easy but time consuming

young walrus
#

we have 25 of these

exotic venture
#

arcane egg is also pretty easy

rain cedar
#

Arcane egg requires abyss

young walrus
#

^

rain cedar
#

Or a lot of essence

young walrus
#

And something like buying lantern, requires you to spend a bunch of money, which could also be used for other goals

#

so if you have let's say 4 geo related goals on the board, you have to make choices on what to do

#

and what you think the opponent is going to do

pearl sentinel
#

(very roughly thrown together)

#

was thinking something like this could be useful for speed running

#

saving off route data and using it for practicing, or just for tracking where you've been

#

thoughts? useful? useless?

solemn rivet
#

see if this works

#

I mean, I tried it and at least it works... Dunno if it still breaks tho

scarlet sierra
#

fighting bosses with a tracker would be hell due to it cluttering the screen

fresh furnace
#

you could make it like 10% opacity

pearl sentinel
#

Well, ideally it would be on a toggle, and mostly setup so you could follow the path of a previously recorded run

#

Also, sharing recorded runs could be a thing

young walrus
#

would there be a way to use that tracking to "save" a room timer

#

so we can easily compare optimal strats for rooms?

pearl sentinel
#

Yep

young walrus
#

because I could see that being SUPER useful

pearl sentinel
#

Everything I've mentioned could probably be done in a day, including adding metadata to points

#

Like, if you got hit, or swung, what time at the point, etc

young walrus
#

exactly

#

that would be huge

#

really really helpful for run optimizations

#

and for explaining/learning new tricks

pearl sentinel
#

Cool. Then I'll put it in my to do list

young walrus
#

like... the timing for fireball skips

#

or explosion pogo

#

if you had all this tracking stuff, it's MUCH easier

#

cuz you could import a tracking overlay from someone else

pearl sentinel
#

Yeah, would be neat to see the data an advanced player like you generates

young walrus
#

would that be possible? to overlay imported data onto your own game?

#

so it's static in a room?

pearl sentinel
#

Yep

young walrus
#

that would be amazing

pearl sentinel
#

That's the main feature I was hoping for

young walrus
#

Huge huge huge tool for new runners

buoyant wasp
#

"advanced player" hollowlenny

young walrus
#

^

pearl sentinel
#

You could also have it "inspect" and show stats for the nearest points, and do things like estimate how fast you were going by averaging your position

young walrus
#

and how far off from optimal you were

pearl sentinel
#

Yeah, it would be easier to figure that stuff out for sure

young walrus
#

so then we can get an idea of how large some frame windows are

pearl sentinel
#

Sigh, I need to stop having ideas for a bit so I can finish enemy rando sadgrub

exotic venture
#

i wanna play enemy randomizer for sure

#

seems like a good balance

young walrus
#

hmm.... if i can track data on 1.2.2.1 and get a good overlay/window for clipping to shade soul....

pearl sentinel
#

Mickely, what all data would you like to have overlaid on a scene?

buoyant wasp
#

all the things

young walrus
#

movement, input presses, everything

#

but like....

#

able to hide some stuff if you want

#

and able to save certain "instances"

#

so.... say i'm trying this clip over and over

#

I want to save successful input sequences

#

and ignore ones that don't work

pearl sentinel
#

Gotcha

young walrus
#

so almost like a "recording" function

pearl sentinel
#

Yeah, if I have some time tonight I'll see what I can throw together as a prototype. I originally wanted this so I could have a way to follow my previous run and try to optimize it, but you have a lot more ideas for it

young walrus
#

it could be used for both

buoyant wasp
#

bosses will look like hilarious spaghetti

young walrus
#

lol

#

some kind of time tracking there would be nice

pearl sentinel
#

Yeah, I have some ideas there

young walrus
#

so it deletes the path before and after like 3 seconds

pearl sentinel
#

Yeah, something like that

buoyant wasp
#

it'd be interesting though, to see if patterns emerge that we weren't previously aware of

young walrus
#

maybe

#

it would be a huge visual tool

#

if only it were allowed during actual runs

ancient nebula
#

in blackmoth mod, the shadow attack is supposed to be same dmg as nail?

#

at the start

young walrus
#

the shadow attack is your main method of attacking

#

that's what the mod does

ancient nebula
#

im asking about damage

#

cause it seems both nail and shadow to 1 dmg each

#

did restart game

#

11 shadow attacks to kill one of starting bugs

young walrus
#

that sounds like a bug to me

ancient nebula
#

downloaded that one through kerrs mod manager

young walrus
#

which version though? the API one? or the non-API one?

#

i think there was a non-api at least and it was ported

ancient nebula
#

blackmoth 1.2.0

#

its marked as api mod in kerrs mod organider thing

young walrus
#

yeah, looks like he deleted the older one from the drive

#

@solemn rivet

ancient nebula
#

im gonna try the manual file insertion see what ill get

#

i think its working?

#

yup, attack damage now works fine
it may be a problem with whatever file kerrs launcher is grabbing and wiring into the game
or coincidence that it worked this time ヽ(´ー`)┌

pearl sentinel
#

Yeah, I need to update the modlinks. I'll do that tonight. If possible I'd like to move that file with the master list of mods to the drive or elsewhere so any mod author may update it

stiff belfry
#

is there a mod that makes Salubra's blessing.. not there? like you still get the soul ect but its not so loud and annoying?

buoyant wasp
#

probably best to put it in the general drive probably

#

@Oh nope.

#

you either enjoy the love that salubra gives you, or don't get it 😃

ancient nebula
#

a mod that replaces salubra with quirrel

#

a mod that replaces everyone with quirrel

pearl sentinel
#

As soon as modlinks.xml goes up somewhere I'll change the loader to download it on startup

stiff belfry
#

welp

pearl sentinel
#

(Once I'm home)

young walrus
#

to delete the blessing, just delete your game

#

simple

ancient nebula
#

xD

thorn comet
buoyant wasp
#

ah, but what we really need is for both salubra and zote to both give their blessing to you, everywhere

hazy sentinel
#

infinite soul

#

sounds good

trim grove
#

rip lightbringer?

buoyant wasp
#

infinite soul in exchange for having to listen to zote chatter and salubra bless you everywhere all the time

solemn rivet
#

kerr, I manually made my own modlinks for the modloader

#

it doesn't include 753's mods

ember shard
#

plus you need to read a precept every time you enter a new room

young walrus
#

^^

#

THIS

#

lol

solemn rivet
#

@ancient nebula could you please tag me if blackmoth stops working? Specifically, if dash stops doing damage

#

latest version I uploaded was supposed to fix that (which is a vanilla bug, so not my fault)

ancient nebula
#

alright, rn everythings working fine

solemn rivet
#

thanks! happygrub

#

also, thanks KDT for that GetEventSenderHook. That shit's a lifesaver

rustic stag
#

Say I find what I'm looking for in FSM Viewer, where do I go from there?

buoyant wasp
#

you'll have to start the virgin waffle sacrifices

#

but really you'll need to get the gameobject that it's associated with, then get it's FSMs and then set the fields that you want to modify.

#

i know there is an example of that in the nightmare god grimm and bonfire mods

rustic stag
#

Okay, well the file I'm viewing is called 'Untagged,Health,Hive Health Regen,5Kl8jA.json'. I assume that 'Health' is the gameobject?

buoyant wasp
#

honestly, not sure what arcane methods are used to get the right thing by name. i usually ask @leaden hedge to point me in the right direction when I hate myself and look at FSMs

#

I doubt Health is it

#

because that's too vague

rustic stag
#

I saw somewhere somebody explained the what the order of each thing means, but I can't rememver where it's listed.

young walrus
#

sounds like hiveblood

rustic stag
#

You would be correct

#

Or are you telling me that hiveblood is the name of the gameobject?

young walrus
#

oh i have no idea what it's actually called in the game code

#

probably not hiveblood

rustic stag
#

Okay haha

#

Was hoping it'd be simple

young walrus
#

doubt it

#

the way other things are named

#

example: nail arts

leaden hedge
#

its tag, gameobject, fsmname, checksum

#

@rustic stag

rustic stag
#

Thank you very much!

solemn rivet
#

like wyza said, there's some easy FSM manipulation done in bonfire and blackmoth, and probably some more obscure arts in boss rush

leaden hedge
#

you can probably just search for that gameobject whenever a room loads

#

although it wouldn't surprise me if each mask is its own object and you'd have to edit the fsm on each one of them 🤔

#

that sounds like the quality of code the game would have

solemn rivet
leaden hedge
#

why isnt this game coded more like celeste FeelsBadMan

#

that games been out a month and we've already got custom levels and mechanics

hollow pier
#

celeste > hk

solemn rivet
#

heretics, heretics everywhere

rustic stag
#

Okay, so let's say I figure out the name and whatnot. How do I actually edit it? dnSpy?

solemn rivet
#

well, you can edit in dnspy

#

or you can use API

leaden hedge
#

check ngg source code

#

pretty much all this does is edit an fsm

solemn rivet
#
playMakerFSM = FSMUtility.LocateFSM(go, "health_manager");
FSMUtility.SetInt(playMakerFSM, "HP", (int)((double)FSMUtility.GetInt(playMakerFSM, "HP") * (1.25 + (double)(num / 3)) * (2.5 / (1.0 + Math.Exp(-0.05 * (double)Settings.CurrentLv)))));```
#

this is one instance of FSM edition in bonfire

leaden hedge
#

now if you want to add more actions to it or states

#

thats a little more complicated

rustic stag
#

Welp, I have no idea what any of that mess is.

solemn rivet
#

go is an object

#

playMakerFSM = FSMUtility.LocateFSM(go, "health_manager"); this looks for the "health_manager" FSM in the gameobject go

rustic stag
#

I meant more so that I don't know how to set up my modding 'environment'. I assume this can all be done in visual studio, but I have no idea how to get it to build a dll or set the dependencies for example.

solemn rivet
#

oh

rustic stag
#

But that is also helpful infromation, so thank you.

leaden hedge
#

you could do it in dnspy but it'd be awkward

#

modding api has a few example mods

#

that you can just load into visual studio

ancient nebula
#

in blackmoth, does upgrading nail increase shadow attack?

hollow pier
#

no it actually nullifies it completely

ancient nebula
#

thank

rapid berry
#

hey ive got a glitch i think

#

idk if this is the right place for it

#

but um

#

everytime i try and use mods like i start up and the game

#

and i cant click on any of the menu options

#

like start game or anything

pearl sentinel
#

which version of the game?

#

steam/gog?

#

and which mod were you trying

rapid berry
#

the GOG version

#

1.2.2.1

pearl sentinel
#

which mod?

rapid berry
#

and the mods were the debug mod and the modding api

pearl sentinel
#

manual installation?

rapid berry
#

im using the crossroads installer

pearl sentinel
#

oh, that might be a gog bug i have then

#

i hadn't had anyone with gog test it yet

young walrus
#

API doesn't work with GOG last i knew

rapid berry
#

ah ok

young walrus
#

Sean looks like he'll tell us

rain cedar
#

The api isn't currently compatible with GOG, but I could compile one for it if you post the full contents of your managed folder here as a zip

#

Fucking mobile, took 3 edits to get that right

pearl sentinel
#

i'll add a note to the installer download about that

rapid berry
#

strangley enough i did actually get it working once

pearl sentinel
#

@buoyant wasp would it be possible to get this file put on the drive somewhere where modders could edit it?

#

also, good news on the horrible graphics for the loader. game artist friend at work is gonna make me some UI art. says he has an idea to theme the mod menu after the charm notch screen so i'm excited to see what he comes up with

stiff belfry
#

yay

rapid berry
#

this folder yeah?

rain cedar
#

Yeah

#

That's before attempting to mod it already, right?

pearl sentinel
#

if you used the loader, the backup files are in the Backup folder in the hollow knight directory

rapid berry
#

yep

pearl sentinel
#

(if you need em for some reason)

rain cedar
#

Does this work? @rapid berry

rapid berry
#

should i replace the current one with that version?

rain cedar
#

Yeah

rapid berry
#

hmm

#

no same issue

#

this is a really odd problem

#

it was working like

#

perfectly a few days ago

rain cedar
#

Is there a modlog.txt file in your save folder?

rapid berry
#

lemme check

#

yeah

rain cedar
#

Post it here

rapid berry
#

aight

rain cedar
#

Alright ModHooks is failing to initialize

#

But it's also not throwing an error

#

Odd problem

rapid berry
#

hmm

rain cedar
#

I'll just put a try/catch around the entire constructor so we get an error

#

Run this to where it breaks, then post the new log

#

Sorry, don't have the GOG version or I'd be doing testing like this myself

rapid berry
#

aight will do

rain cedar
#

It might "work" because the exception isn't unhandled anymore but it'll be extremely buggy

rapid berry
#

well youre right about it working

#

and the mod section of the menu showed up aswell

rain cedar
#

Yeah, but the ModHooks class isn't fully initialized, which is a big issue

rapid berry
#

new modlog thing

buoyant wasp
#

oh, weird

#

why would it do that...

#

go into your saves folder

#

if there is a file that is called Modhooks.GlobalSettings.json or some such, delete it

#

or ModdingApi.GlobalSettings.json i can't remember it's name offhand

rapid berry
#

theres a moddingapi one, a debugmod one and a bak of the moddingapi one

#

ill delete them now

rain cedar
#

Debug one should be fine to keep

buoyant wasp
#

yeah, somehow that got created, but with nothing in it

rapid berry
#

aight deleted

rain cedar
#

Guess we should add exception handling in LoadGlobalSettings for this case

#

I'll do that now

copper nacelle
#

someone else earlier also got a Modhooks.GlobalSettings.json that was empty

#

and it also broke it

#

it was a while ago

rain cedar
pearl sentinel
#

Just added support for alternate GOG mod links to the downloader, i'll upload the new version as soon as you're done with that and have a drive link for it

rain cedar
#

Alright, just pushing to github first

rapid berry
#

yeah game seems to be working

pearl sentinel
rapid berry
#

so is that the modding api installed?

#

like is that all setup now

rain cedar
#

Yeah you should be good

buoyant wasp
#

assuming you have versions in the upper left hand corner, yes

rapid berry
#

big thanks

#

very helpful and much appreciated

rain cedar
#

Oh, the linux api isn't on the drive yet either

#

@copper nacelle or @buoyant wasp Could you build/upload that? I'm not running linux

copper nacelle
rain cedar
#

Could you upload the xml too in case anyone wants to do modding work on linux?

buoyant wasp
#

should be the same

solemn rivet
#

@ancient nebula what oof said was wrong - dash damage does scale with nail upgrades

rain cedar
#

Alright, I'll just steal the xml I have for the gog one then

ancient nebula
#

-runs to nailmaster-

#

👌 thank

solemn rivet
#

wait, I thought that ever since CP02 drm-free version and steam .dll were the same

#

np!

buoyant wasp
#

they are close, but not quite

ancient nebula
#

thats one hell of a sexy hand reaction

buoyant wasp
#

at least, so it seems

solemn rivet
#

iirc there was a new class that was supposed to handle versions

rain cedar
#

They're always gonna be slightly different if only just because of Steam achievements

solemn rivet
#

just a sec

rain cedar
#

Unless that code is in gog, but unused

solemn rivet
#

I'll just check it in dnspy real quick

#
private void Start()
    {
        this.gm = GameManager.instance;
        if (this.gm.gameConfig.steamEnabled)
        {
            this.steamEnabled = true;
            this.steamIntegrator = this.gm.steamIntegrator;
        }
        if (this.gm.gameConfig.galaxyEnabled)
        {
            this.gogEnabled = true;
            this.gogIntegrator = this.gm.gogIntegrator;
        }
    }```
rain cedar
#

the config might be hard coded and not determined at startup

#

So the actual code is the same, they just have to change one thing

solemn rivet
#

gotcha

rain cedar
#

They're totally just setting these all in editor

#

Actually they've got error checking on this, achievements wouldn't be the problem

#

Oh shit hahaha

#

Unity strikes again, they're trying to use null coalescence

#

No wonder this breaks

copper nacelle
#

lmao

buoyant wasp
#

lul

pearl sentinel
#

pfft

#

amazing

rain cedar
#

One of the key features I look for in game engines is breaking basic features of the coding language

#

Nobody does it better than Unity

buoyant wasp
#

i still can't believe they broke null coelescence so messed up

rain cedar
#

It's understandable

#

I mean they wanted to store values in null variables

#

Makes perfect sense to me

trim grove
buoyant wasp
#

you know, as opposed to....treating nulls or pointers to nulls the way you should have

trim grove
#

dont check for nulls ever and hope for the best?

rain cedar
#

Really this is Microsoft's fault for not letting every operator be overridden

#

The thing is almost every way to check for null works

#

Because they've overridden the operators

#

Just stuff like ?? and null == object won't work

copper nacelle
#

didn't they override ==?

rain cedar
#

They did, but with how c# works putting null first will not use the overridden one

#

I think

#

object == null should work fine

copper nacelle
#

wtf

trim grove
#

why would you check if null == something... that seems... backwards

buoyant wasp
#

but it makes it so this ?? that won't work

rain cedar
#

It is backwards from conventions, but it should be fine

#

Only it isn't

#

I guess I can make a small script to test how overriding works in this scenario

trim grove
#

override the override thinkgrub

copper nacelle
#

override the override so that it flips them when null is first

rain cedar
#

Alright I was wrong about how c# works

#

I am pretty sure that with two non-null objects it will choose the overload from the one that's put first

#

But I guess that doesn't apply to null

copper nacelle
#

overload null

rain cedar
copper nacelle
#

lmao

#

side-note

#

on that answer

#

one comment was

#

I knew there had to be an easy answer!

rain cedar
#

But what if I also want to override the Equals function?

copper nacelle
#

then you feel depressed

hollow pier
#

notequals

copper nacelle
#

why is there no = react

#

life ruined

rain cedar
#

That's the closest I can find

hollow pier
#

close enough

copper nacelle
#

nice

rain cedar
#

#

Maybe better idk

solemn rivet
#

vertical equals

hollow pier
#

⏸ but not

rain cedar
#

⏸ ⤵

#

Perfect

hollow pier
#

⏸ ⤴

#

no

rain cedar
#

But it's symmetrical

#

That's the same thing

hazy sentinel
#

not in unicode's eyes

#

also "symettrical"

hollow pier
#

⏸ ⤴ 🔁 ⤵ 🔄 ⤴

#

bada bing

rain cedar
#

Fuck you I spelled it right

hazy sentinel
hollow pier
#

you did indeed spell "it" correctly

solemn rivet
#

fixed soul not recharging when hitting an enemy. Should also permanently fix broken damage for dash

copper nacelle
#

nice

solemn rivet
#

I literally did 'subtract this much from enemy hp'

#

Inb4 underflow

copper nacelle
#

nice

#

lmao

solemn rivet
#

Shouldn't break tho

#

Damage cap is vanilla nail damage cap

#

21

#

Actually, 42 with sharp shadow... 63 with fstrength

copper nacelle
#

w/ fury?

solemn rivet
#

Fury is 1.5x?

copper nacelle
#

thought it was 1.75x

solemn rivet
#

I always forget

#

So...

#

Still less than 126

#

No underflow

#

Phew

copper nacelle
#

lmao

solemn rivet
#

also, can someone test if I haven't broken anything with the latest version of the mod installer?

leaden hedge
#

fury is 1.75

ember shard
#

I can't hit the Collector in Boss Rush anymore. Fought him twice, and both times, he just stopped taking damage at some point

leaden hedge
#

did you have summons

ember shard
#

the dreamshield and baby grimm

solemn rivet
#

it's a known vanilla bug

leaden hedge
#

its apparently fixed in cp3 patch

#

so im not gonna fix it on my end

solemn rivet
#

do you know the cause?

leaden hedge
#

dunno what the cause is

#

but the fix shouldnt be too hard

#

just replace the transition to the 15 hit death state with the actually for real dead state

solemn rivet
#

makes sense

ember shard
#

oh, I didn't know that was in vanilla, thanks for the info

solemn rivet
#

just avoid doing indirect damage to it

pearl sentinel
#

Yeah I ran into it when trying out the weaver charm on him. Pretty annoying

solemn rivet
#

kerr, how's the enemy rando?

young walrus
#

kerr, how's the tracking mod?

solemn rivet
#

kerr, how's life?

pearl sentinel
#

Lol. Wife was sick this morning, but they're coming along. Fixed up some bugs in rando and got started on the tracking. Got caught up trying to find a way to record all the controller inputs since there's no way to get the list of bound controller buttons, but hollow knight uses a 3rd party controller plug in that I need to investigate atill, so there's still hope.

#

For the tracker, I got a lot of other data in so far, like 10 different kinds of timestamps and frame recordings and the position.

solemn rivet
#

nice

#

can I help in some/any way?

pearl sentinel
#

For enemy rando I had a few enemies missing from the loading step, like menderbug, so I figured that out and now he'll be randomly showing up I think

#

I'll try to get the tracker on a repo soon and then sure

young walrus
#

oh man. every enemy is menderbug

pearl sentinel
#

Once some options are added you could do that. Could also make every enemy nosk.

young walrus
#

lol

pearl sentinel
#

Actually, gradow, dp you have things setup to look at fsms already?

#

Do*

#

So, when you engage the crystal guardian, something triggers the player's camera to move away to a fixed point I'm wondering if it would be possible to tell the family to leave that state or whatever

#

If I can't figure that out he'll have to be disabled for randoming

#

Fsm, not family. Thx phone

young walrus
#

i don't know what needed correcting

#

i tell my family to leave the state every time I see CG too

pearl sentinel
#

That should be a zote precept.

#

Omg. You know how some randomizers replace certain text, I should look into replacing all text with random zote precepts

#

Or maybe just shop text

leaden hedge
#

pretty sure thats just a thing on the camera class

#

it has a focus target

#

I guess you could go find it in CG fsms

pearl sentinel
#

If that's all then fixing it would be easy

buoyant wasp
#

@pearl sentinel - that XML is up on the drive now. Any of the mod owners should be able to edit it as needed.

pearl sentinel
#

Cool, may I edit it as well?

#

Thanks a bunch :)

pearl sentinel
#

@buoyant wasp

buoyant wasp
#

get @dapper folio to add you

#

if he hasn't already

dapper folio
#

Anyone with editing priveleges may add more people iirc

#

simply pm myself or an online modder with privileges and let us know what email you want added

buoyant wasp
#

@pearl sentinel ^

pearl sentinel
#

Just did that

#

Got access now. Thanks guys!

dapper folio
pearl sentinel
#

Oh, just talked to game artist friend, he was wondering if anyone had physically extracted any hollow knight sprites, in particular the UI elements. Even just the packed sprite sheets would be fine he says, so he could use them on the mod loafer UI

#

Er, loader

buoyant wasp
#

yeah, multiple times

#

searching from:KDT has:file will probably get you what you want

#

lots of spritesheets have been posted

#

depending on what you need, i have a bunch of the charms, items, abilities, etc extracted separately already too

pearl sentinel
#

Awesome, I'll browse around. Thanks!

solemn rivet
#

you can also extract them yourself using UABE

leaden hedge
#

pretty sure I've dumped ui before

#

you could probably check from kdt to wyza has file

rustic stag
#

I'm trying to change how much geo enemies drop. So far this is what I have, but it's not working. Can anybody point out what's wrong/missing?

buoyant wasp
#

look at the bonfire mod, it changes those values

solemn rivet
#

I was the one who game him that code

#

for some reason, the SceneChangedHook is not getting called

#

se that Log("Updated geo"); there? It's not appearing at all in the log

buoyant wasp
#

is the hook getting added?

solemn rivet
#

dunno, didn't look at the log

#

is it @rustic stag ?

buoyant wasp
#

yeah, if the log is set to debug level, it'll show all places where every mod is adding the hook

#

which is the default, so it should show up there

rustic stag
#

Oh son of a bitch. So I checked the log after quitting to menu. It wasn't there. It doesn't add it to the file until the game is closed.

#

It's there now...

solemn rivet
#

you using notepad?

rustic stag
#

Yes.

solemn rivet
#

that explains it

buoyant wasp
#

yeah, notepad doesn't update in real time

solemn rivet
#

so it should be working then

buoyant wasp
#

the log file does though

#

you can also just turn on the on screen console

#

which sends all the logs to the screen too

rustic stag
#

What is the key for that?

#

tilde?

solemn rivet
#

do it like this: set it to print the dropped geo before and after the command

buoyant wasp
#

you have to enable it in the global settings file for the api

#

in your saves folder

#

I don't have the exact name in front of me

solemn rivet
#
if (playMakerFSM != null)
                {
                    Log($@"Geo before edit:{playMakerFSM.FsmVariables.GetFsmInt("Geo Small").Value}");
                    playMakerFSM.FsmVariables.GetFsmInt("Geo Small").Value *= 2;
                    Log($@"Geo after edit:{playMakerFSM.FsmVariables.GetFsmInt("Geo Small").Value}");
                    playMakerFSM.FsmVariables.GetFsmInt("Geo Small Extra").Value *= 2;
                    playMakerFSM.FsmVariables.GetFsmInt("Geo Medium").Value *= 2;
                    playMakerFSM.FsmVariables.GetFsmInt("Geo Med Extra").Value *= 2;
                    playMakerFSM.FsmVariables.GetFsmInt("Geo Large").Value *= 2;
                    playMakerFSM.FsmVariables.GetFsmInt("Geo Large Extra").Value *= 2;
                }```
#

see if these values are the same

#

and use notepad++

#

it updates in real-time

rustic stag
#

Would Sublime Text work as well?

#

It updates real-time

solemn rivet
#

dunno, never used it

#

sure

#

anything that updates rt

buoyant wasp
#

yeah you can use that or NP++ or VS Code or w/e. the onscreen console works pretty well though 😃 (once you enable it in the settings file you can toggle it on/off with F10)

solemn rivet
#

wyza: counldn't find that option in the api settings

buoyant wasp
#

hmm

solemn rivet
#
    "StringValues": {
        "keys": [],
        "values": []
    },
    "IntValues": {
        "keys": [
            "LoggingLevel"
        ],
        "values": [
            2
        ]
    },
    "BoolValues": {
        "keys": [],
        "values": []
    },
    "FloatValues": {
        "keys": [],
        "values": []
    },
    "ModEnabledSettings": {
        "keys": [
            "Blackmoth"
        ],
        "values": [
            1
        ]
    }
}```
buoyant wasp
#

weird

#

you can add

#

ShowDebugLogInGame to bool values

#

so

#
"BoolValues": {
        "keys": ["ShowDebugLogInGame"],
        "values": ["true"]
    },
#

should work i think

#

if it doesn't i can look when i get home

rustic stag
#

Mod log works!
[INFO]:[HK_TestMod] - Geo before edit:3
[INFO]:[HK_TestMod] - Geo after edit:6
[INFO]:[HK_TestMod] - Geo before edit:3
[INFO]:[HK_TestMod] - Geo after edit:6
[INFO]:[HK_TestMod] - Geo before edit:2
[INFO]:[HK_TestMod] - Geo after edit:4
[INFO]:[HK_TestMod] - Geo before edit:2
[INFO]:[HK_TestMod] - Geo after edit:4

solemn rivet
#

so it is working

#

nothing to do

buoyant wasp
#

hmm

solemn rivet
#

wait

#

nvm

buoyant wasp
#

wonder if it's true/false without the quotes

solemn rivet
#

I had it set to true instead of "true"

#

still breaks tho

buoyant wasp
#

eh, it's probably serializing it to something else

#

maybe 0 or 1 or something

solemn rivet
#

will try some variations

#

brb

#

gr8 it works

#

quotes on both, just as you said

#

eh, but f10 does nothing

buoyant wasp
#

debug mod installed? i think it can map to the same key and overwrite it.

solemn rivet
#

nope, only blackmoth

buoyant wasp
#
public void Update()
        {
            if (Input.GetKeyDown(KeyCode.F10))
            {
                StartCoroutine(_enabled
                    ? CanvasUtil.FadeOutCanvasGroup(OverlayCanvas.GetComponent<CanvasGroup>())
                    : CanvasUtil.FadeInCanvasGroup(OverlayCanvas.GetComponent<CanvasGroup>()));
                _enabled = !_enabled;
            }
        }
#

weird

solemn rivet
#

also, which version of the API is this supposed to work on?

#

I'm using -34, the one on the drive

buoyant wasp
#

pretty sure -34 has it

solemn rivet
#

but I know there are more recent versions in here

#

I'll open it in dnspy just in case

buoyant wasp
#

yeah, it's 34

#

i know it works :/ cause @copper nacelle used it

#

at least, i'm pretty sure he's the one who asked for it in the first place

solemn rivet
#

yeah, it's there alright

#

just checked

#

weird...

#

wait, when I opened the game it changed the value to 0

#

manually changed it to 1 and it works

#

that's... Strange, cause I had set it to "true" before running

buoyant wasp
#

well, it could be that any value other than 1 is false and "true" isn't parsed into true

#

it's unity's garbage serializer

#

which is why we have this hack of a method to store stuff

solemn rivet
#

isn't there anyway to bypass unity's serializer?

buoyant wasp
#

only if you want to ship your own

#

cause it's .net 3.5 which doesn't have a json serializer built in

#

so you'd have to include one. plus we had to deal with it regardless because the save files use the built in one

#

so if i have to deal with stupid storage for that, might as well just be consistent in the pain

solemn rivet
#

no thank you

buoyant wasp
#

but yeah. Unity is like "Hey we have this super fast serializer/deserizer. It's 10x faster than the competition." It's fast, it's true, but then it goes on to say "but it basically doesn't support any complex data structures or even simple ones like dictionaries".

#

given the size of the data that is being serialized, taking 3ms vs 10-30ms to save is not worth it

#

but oh well, that's unity for you

leaden hedge
#

you think I have .05 seconds to wait for my game to save 😡

#

at most I have 0.005 seconds 😡

trim grove
#

look at mr spare time over here

exotic venture
#

probably one of those guys with like a super quantum ssd that reads and writes at 1000000 tb/s and boots up at femtosecond speeds

copper nacelle
#

wait what did I do/ask for or whatever

#

the on screen mod log thing?

buoyant wasp
#

i think so

pearl sentinel
#

Updated mod loader (pin also updated):

Now supports downloading with separate links for GOG specific mods.
modlinks.xml mod database source has been moved to the #archived-modding-development drive so updates to the mod download paths (for new versions or new mods) will not require a new release of Crossroads.
The default steam directory will now be automatically searched for your Hollow Knight install (in addition to alternate steam library folders that were already searched) to make the setup process easier.

https://github.com/Kerr1291/Crossroads/releases/download/v00.31/Crossroads_v.31.zip

solemn rivet
#

nice!

#

my installer is pretty much where I want it to be

copper nacelle
#

you added the url stuff?

solemn rivet
#

yup

#

it downloads and installs API mods and the API itself

copper nacelle
#

nice

solemn rivet
copper nacelle
solemn rivet
#

kek

#

use right checkboxes to install

#

and left ones to enable/disable

copper nacelle
solemn rivet
#

ffs

#

worked fine for me

#

with debug as well

copper nacelle
solemn rivet
#

WTF ARE YOU DOING

copper nacelle
solemn rivet
#

I don't even

#

sigh

buoyant obsidian
#

your first issue is

copper nacelle
buoyant obsidian
#

that's Terraria not hollow knight

solemn rivet
#

I have NO idea how that happened

#

I mean

vagrant leaf
#

please fix

solemn rivet
#

literally

#

NO IDEA

copper nacelle
#

lmfao

solemn rivet
#

holy fuck

#

that's amazing

copper nacelle
#

?

solemn rivet
#

you always break it so fast

#

I have no idea how

copper nacelle
#

¯_(ツ)_/¯

#

master of bugs

solemn rivet
#

bnugs is right

#

I assume those weird files are not inside your Mods folder, right?

copper nacelle
#

wtf

#

they are now

#

they weren't before

vagrant leaf
solemn rivet
#

do you have any idea what those are?

#

I'll try setting my install path the same as yours, see what happens

copper nacelle
#

no clue

solemn rivet
#

it literally checks only the Mods and Disabled folder to fill that list

#

I just googled it. Those .dlls belong under system32

#

Gradow is a hacker confirmed

copper nacelle
#

lmao

solemn rivet
#

please delete your system32 folders

#

HOW

copper nacelle
#

¯_(ツ)_/¯

solemn rivet
#

I'll make a version that shows a message box for each dll added

#

with the dll path

copper nacelle
#

lmao

#

should I delete the weird dlls

solemn rivet
#
private void PopulateCheckBox(CheckedListBox modlist, CheckedListBox installList, string Folder, string FileType)
        {
            DirectoryInfo dinfo = new DirectoryInfo(path: Folder);
            FileInfo[] Files = dinfo.GetFiles(searchPattern: FileType);
            foreach (FileInfo file in Files)
            {
                if (!installedMods.Contains(item: file.Name))
                {
                    modlist.Items.Add(item: Path.GetFileNameWithoutExtension(file.Name));
                    installedMods.Add(item: file.Name);
                    installList.Items.Add("Installed");
                }
                else
                    File.Delete(path: Folder + $@"/{file.Name}");
            }
        }```
#

has your pc exploded yet?

copper nacelle
#

not yet

solemn rivet
#

then, maybe

copper nacelle
#

I renamed the folder to uhhh

#

just in case

solemn rivet
#

kek

copper nacelle
#

wait does the installer check for a mods dir

solemn rivet
#

it does

copper nacelle
#

buggo

solemn rivet
#

and it doesn't create one- ohhhh

#

shit

#

it's probably finding every dll under c or d

copper nacelle
#

no mods folder error

#

but

#

and if I try it again

#

and then if I try a diff mod afterwards

solemn rivet
#

I see...

#

it's trying to install stuff, but for some reason, it's unable

#

mine works fine btw

copper nacelle
#

¯_(ツ)_/¯

solemn rivet
#

just installed HPBar

#

at which point does that happen, 56?

#

after the install confirmation screen?

#

eh, revealed my language

#

reee

copper nacelle
#

uh

#

after clicking yes

solemn rivet
#

ok

#

this should give you progressive message boxes

#

so we can figure out where it breaks

copper nacelle
#

alright

#

downloading

#

installing

#

error

solemn rivet
#

got it

copper nacelle
solemn rivet
#

so it breaks during installation

#

can you delete that temp folder and try again, please?

copper nacelle
#

also new error

solemn rivet
#

that's the first error

#

when does this happen?

copper nacelle
#

was just checking not installed on a bunch of mods

#

most gave already exists

#

happens after "installing"

solemn rivet
#

did you delete the temp folder?

copper nacelle
#

after deleting stuff everything gives the being used

#

thingy

#

wait

#

wtf

solemn rivet
#

sigh

copper nacelle
#

reopened the window and

#

babam

solemn rivet
#

I'm... sorry for all that

#

it's breaking something and I have no idea what

#

because even after mirroring your configs, it doesn't happen to me

copper nacelle
#

also it's fine

#

@solemn rivet wait it works

#

it gives all those dlls and "fails"

#

but after reopening the window

#

the mod is installed

solemn rivet
#

it is

#

it's breaking on cleanup

#

also, love that error

#

you literally have no clue what is wrong

#

so useful

copper nacelle
#

lol

#

and the directorys in temp are also gone

#

so after installing it says the being used thing

#

I reload the window

#

and the mod is installed

#

wait wtf

solemn rivet
#

yeah

#

for some reason it's note deleting both temp and the zips

rain cedar
#

Inb4 errors

copper nacelle
#

no dlls found or something

#

copying D:\temps....\hellmod.dll

#

and rando which was already there

#

and then the good ol cannot access because it is being used

#

and I reloaded window

#

and mods are installed

#

no weird files

#

¯_(ツ)_/¯

solemn rivet
#

so it's breaking right before deleting the folder

#

I assume there's leftover stuff inside temp?

#

did it copy any txts or something?

copper nacelle
#

README.txt for debug i think

#

debug always fails with readme already in temp

#

readme for rando apparently

#

is in Mods

solemn rivet
#

eh

#

not in Hollow Knight?

copper nacelle
#

there's a readme folder there

#

with a shit load of readmes

#

and by shit load I mean 3 folders

#

with each having 1

solemn rivet
#

no, that's kerr's

#

mine's like this:

#

worse, but meh

copper nacelle
#

none of those

#

rip

solemn rivet
#

hm...

#

so that's where it's breaking - when copying random files laying around

#

and that stops the delete from going off

copper nacelle
#

I can't get the error with the 500 dlls ree

#

did you fix it?

solemn rivet
#

well, I did nothing to fix it tbh

#

can you delete settings and try again?

copper nacelle
#

the one in Local?

solemn rivet
#

ye

#

just to be safe

#

maybe it's something with the paths...

copper nacelle
#

it's trying to copy a bunch of old ones

#

like I tried to install idk bossrush?

#

and it also copied blackmoth

#

and charm notch

#

rip system32 error tho

solemn rivet
#

also

#

I think for some reason yours might be case-sensitive on paths

#

because it said it could not find Mods, when you literally just showed me the folder

copper nacelle
#

weird

#

it's ntfs too

#

and it doesn't care about case in explorer too

solemn rivet
#

how it's supposed to be

rain cedar
#

Why are you taking the time to drag literally every popup window towards the center?

copper nacelle
#

D:\temp\README.txt already exists

#

for some of them

#

before anything else

#

after hitting yes

solemn rivet
#

because I was not sure it was centered right

copper nacelle
#

for others:
Extracting
the directory is not empty wtf new error

solemn rivet
#

does the temp folder exist now?

#

if so, is it empty?

copper nacelle
#

temp never stopped existing

#

nvidia has a folder in it

#

temp has hollow_knight_Data and NVIDIA Corporation in it

solemn rivet
#

...

#

brb

copper nacelle
#

NVIDIA Corporation has a few bin files, no dlls

solemn rivet
#

it's my fault for assuming the folder didn't exist

copper nacelle
#

n

#

i

#

c

#

e

#

it worked

solemn rivet
#

sorry for the time lost

#

I'm stupid and inexperienced

copper nacelle
solemn rivet
copper nacelle
#

lol

solemn rivet
#

now, to remove the useless messageboxes

#

xD

copper nacelle
#

lol

#

inb4 message boxes were preventing the 50 dll error

solemn rivet
#

kek

#

nah, I think I fixed it earlier

#

don't remember how tho

#

oh well

copper nacelle
#

lmao

solemn rivet
#

oh, yeah

#

the only thing I did was create the mod folder if it didn't exist

copper nacelle
#

works 👍

#

wait wtf

#

but my mods folder existed

solemn rivet
#

don't... Just... Don't...

copper nacelle
#

lmao

#

wait a second

#

forgot to try the good ol

#

delete the mods folder while the installer is open

solemn rivet
#

why would you do that

#

xDDD

#

it only creates it on load

#

don't, please don't

#

my poor heart can't take it

#

ded

copper nacelle
#

lmao

#

doesn't even let you install mods w/out the folder

#

it knows

solemn rivet
#

phew

#

I mean, I can make it create the folder at install if it doesn't exist

#

but why

copper nacelle
#

lol

solemn rivet
#

it technically shouldn't happen

#

unless you purposefully delete it after loading the installer

copper nacelle
#

me_irl

rain cedar
#

Never assume the end user won't do stupid shit

solemn rivet
#

done

copper nacelle
#

inb4 deletes hollow_knight_Data during installation

solemn rivet
#

it checks and creates on demand the folder on EACH install request

#

inb4 uninstalls game during installation

hazy sentinel
#

uninstalls installer during installation

solemn rivet
#

thankfully there's no installation for the installer

#

and... Pushed

#

thanks for the patience 56!

#

i o u

copper nacelle
#

yw

#

the real question now is

#

can I break kerr's installer

solemn rivet
#

dunno

#

but his is way more resilient than mine

#

he actually knows what he's doing

copper nacelle
#

lmfao

solemn rivet
#

I'm serious, I had never used winforms before doing this installer

#

and had never used c# (or done any kind of programming) before blackmoth and bonfire

#

so if I had to bet which one works better...

#

I'd say his

young walrus
#

okay, what'd i do wrong. lol

buoyant wasp
#

lol

#

wth

young walrus
#

i dunno man

buoyant wasp
#

so you're trying to take the list of goals, and output 26 goals randomly selected from the list?

young walrus
#

25

#

just to start

#

then there's requirements with certain goals

buoyant wasp
#

and the same goal shouldn't be selected twice right?

young walrus
#

that can't both be picked

#

that too

#

i have no clue what i'm doing, dude

#

....obviously

buoyant wasp
#

yeah, i know, you're not a programmer by trade, or hobby. 😉

young walrus
#

my experience with this language has been a grand total of.... 30 minutes

#

aka.... just now

#

there's also a bunch of them in there that shouldn't be included together, like Dung Defender and Defender's Crest

#

for obvious reasons

buoyant wasp
#

yeah, well, i'm gonna fiddle with the first requirement to get you started 😉

young walrus
#

lol.

buoyant wasp
#

here

#

can't guarantee there aren't any logic errors in there, but it runs

young walrus
#

For not knowing what I'm doing, at least I got kinda close

buoyant wasp
#

indeed

young walrus
#

it's outputting it with the brackets and '

#

which we don't want

buoyant wasp
#

change

#
    output[i]= {"name": goals.splice(goalIndex,1)[0] };
#

I updated the fiddle i posted above with that

#

i'm just serializing the object, so the quotes have to be there with that kind of output

#

there are other options, just not with the design you were heading in

young walrus
buoyant wasp
#

it probably had the quotes because it was assuming that name was always going to be a string and not an single element array 😃

young walrus
#

so now.... the best way to add logic to this so that if a certain goal shows up, others can't?

#

i could add a shit ton of IF statements i guess, but that sounds awful

pearl sentinel
#

maybe make like mappings, like, Goal = <list of exclusive goals>
then when you go to add a new goal, for each goal you already have, see if its list contains the new one?

leaden hedge
#

you could probably have a hash table

buoyant wasp
#

^

#

your data structure right now is very simple, you'll probably need to do a couple of things. First expand that simple array to an array of objects that contain a Keyword for the goal, the name of the goal, and a array of other goals' keywords that are disallowed

#

like

#
var goals = {
    "DungDefender" : {
        "name": "Defeat Dung Defender",
        "excludes": [ "IgnoreDungDefender" ]
    },
    "IgnoreDungDefender" : {
        "name": "Ignore Dung Defender",
        "excludes" : [ "DefeatDungDefender", "GetIsmas" ]
    }
}
young walrus
#

Welp, hope nobody wants to see a bingo board for 2 years. lol

buoyant wasp
#

when you add a goal in your loop, you add the excludes to an array. then on every loop check to see if the random one you got is in that array, if it is, ask for another random one until you get one that isn't in the array

#

or add it to a hash, that's probably better

#

faster so you don't loop

leaden hedge
#

hash tables will be faster

#

you'd remove it from the array when you check it too so it can't come up twice hollowface

buoyant wasp
#

ah, yeah splice it out either way

#

though for something this small, i doubt it's gonna take long even if you didn't do either of those better ways. 125 items is gonna take milliseconds to loop through a thousand times

#

but yes, the hash table and removing from the array regardless is faster

leaden hedge
#

doesn't matter anyway

buoyant wasp
#

and is better

leaden hedge
#

because arrays are hash tables in javascript

buoyant wasp
#

i know it is that way on the surface, is that how the engine renders them though?

leaden hedge
#

afaik yes

buoyant wasp
#

weird, wouldn't have thought that. But i suppose it's like alot of things with modern languages. I do XYZ and it works. It's only until it doesn't work that you go and dig into how the engine actually compiles it that you realize why "XYZ" was such a bad way to do it.

young walrus
#

oh i think i get it

#

so... if i give dung defender and defender's crest the same tuple/bucket value, then if one of those values was already pulled, it'll reiterate and pull from another bucket

pearl sentinel
#

duh, i should apply my work experience here

#

i mean, there's a few ways to do this

#

if you don't want to have something that iterates until it finds a valid solution

#

at work, we're not allowed to "throw away" rng calls

#

i actually implemented something like this for my last game

leaden hedge
#

shouldn't be to complicated to do something like

    var goals = [ 
        "DungDefender": {"Name":"Defeat Dung Defender", "excludes":{"GetIsmas", "GetDefendersCrest"},
        "GetIsmas": {"Name":"Get Ismas Tear", "excludes":{"DungDefender", "GetDefendersCrest"},
        "GetDefendersCrest": {"Name":"Get Defenders Crest", "excludes":{"DungDefender", "GetIsmas"}
    ]

    randomkey = randomKey(goal)

    foreach key in goals[randomkey].exludes{
        delete goals[key]
    }

    delete goals[randomkey]
pearl sentinel
#

basically, the master list was arranged as a weighted table

leaden hedge
#

would probably work fine

#

I don't remember the function to remove a key in javascript

pearl sentinel
#

and we just set the weights of invalid values to 0

#

before each run