#archived-modding-development

1 messages ยท Page 139 of 1

compact sedge
#

let it run for a few frames

#

so pipe those game objects to a coroutine

#

that waits a short time before deletin

flat forum
#

(but I hate coroutines, they don't work when I make them)

#

Ok, I'll try

compact sedge
#

they don't work because you aren't using a monobehavior

#

and idk why

#

let me make something for you

flat forum
#

yeah?

compact sedge
#

wait

#

a sec

flat forum
#

Ok

compact sedge
#

Every mod should use this template

#

or something similar

#

and then just make EVERYTHING ELSE part of a monobehavior

#

and monobehaviors can have coroutines

#

and just add that monobehavior in that addcomponent function

rain cedar
#

Does that even compile?

#

No comma between Mod and ITogglableMod and you don't implement anything from ITogglableMod either

#

Wait you do have Unload

#

Idk how I didn't see that

compact sedge
#

shit ur right let me fix

rain cedar
#

There's a space before using System as long as you're fixing shit

#

But that's not an error just bad formatting

compact sedge
#

version 2

#

fixes all the dungo stuff

flat forum
#

Ok

#

I'll be back sooner or later

#

I will release the first version once I stop those centipedes from moving

#

and the next version will focus on removing all NPCs except Elderbug

rain cedar
#

Also that ModCommon check isn't safe

#

It breaks if any of the "loaded" assemblies failed to load

compact sedge
#

oh that's why 56 got that error

#

what's the fix?

compact sedge
#

shouldn't it be assembly.GetTypes().Any(type => type.Namespace == "ModCommon")

#

or better

rain cedar
#

Probably equivalent

compact sedge
#
                    if (assembly.GetTypes().All(type => type.Namespace != "ModCommon")) continue;
                    noModCommon = false;
                    break;
#

just follow the very simple to follow instructions in the text below

rain cedar
#

Load order 30 seems like a really odd number

flat forum
#

Ok

compact sedge
#

it comes from... one of my mods

#

well actually I probably shouldn't be using it

#

because the GetInt and Language hooks are broken insofar as loadorder is concerned iirc

#

that is

#

the mods with the LOWER load order take priority over what ints and strings are set

#

whereas with every other hook the mods with the highest load order take priority

#

unless I read the modding api code wrong

#

I should make a testcase to see if it's true

#

actually I REALLY should make a testcase because this is gonna be a mild problem for redwing if it is in fact a real bug and not just something that seems like a bug looking at the code.

#

but I'm lazy so I'll do it next week

solemn rivet
#

'ey @young walrus, is the room mapping project still going?

#

I have some free time this coming week

young walrus
#

nobody has worked on it since i have that one day

compact sedge
young walrus
#

but the google doc is available still

solemn rivet
#

I'll try doing greenpath at least then

young walrus
#

you'll have to request access to it

solemn rivet
#

I think I already have access to it

young walrus
#

do you?

solemn rivet
#

asked you like 1 year ago

young walrus
#

i don't remember

#

i've given access to like 2 people

#

sean had a list of all the actual transition names too

#

might be helpful to link those

solemn rivet
#

doesn't debug tell you those?

young walrus
#

like list them instead of how i did

#

i don't think so

solemn rivet
young walrus
#

you could also use the format I did if you want to i guess

solemn rivet
#

will you still have the hard/easy format?

#

or go with a more flexible format like sean did with rando2

young walrus
#

either i guess

#

the hard mode traversal options cover any speedrun tech

#

so that could be parsed out later into specific skip types

solemn rivet
#

I assume the movement is all nmg

young walrus
#

yeah

solemn rivet
#

ok

#

I'll try mapping greenpath and see how that goes

young walrus
#

kk

#

i'd have debug on to make it easier

#

and to list room names, etc

#

test out skips and shit like that

solemn rivet
#

yup

#

that's my plan

young walrus
#

kk

solemn rivet
#

I'm not great with spike tunnel skips tho... So if I ever map an area that has those, I won't map those rooms

#

also

#

should we include mag skips?

#

I really don't want to get to Isma's with only dash+claw+wings

#

shivers

young walrus
#

no

#

include only RTA viable things

#

if you have questions on shit like that, can just ask i guess

#

there's some skips i think i want to remove, even though i could do them, they were tough

#

like fireball skip / shriek skip up to salubra

solemn rivet
#

yeah

#

there's also one mag skip which isn't that bad. That is getting to Unn without Isma's

#

it's way easier than that acid skip on the archives

flat forum
#

Sean

#

TEO wants you to update debug mod and it's health checking system

#

Because there may have been changes to the healths of some enemies and TEO wants to check

copper nacelle
#

i already did

#

:echREE:

flat forum
#

Send it in the wiki if you're there

copper nacelle
#

gib invite

#

nvm in

flat forum
#

You... haf it in the giant spam message

#

I got it from there

copper nacelle
#

what channel

flat forum
#

Suggestions

compact sedge
#

why isn't update on drive

#

consider this: modlinks debugmod downloads the one that is built for 1.2, but every mod installer downloads the 1.3 API

#

I hope someone else sees the issue there

compact sedge
#

aaa anyone know why I can't load fsm vectors

#

I have the following code:

        private IEnumerator _WaitForSetVelo2DToBeLoaded(SetVelocity2DData inputData)
        {
            // after this much time it will assume the set velocity 2d actually in fact has a magnitude of 0
            // at which point it WILL NOT add it to the list. because: simply put, you can't speed up or slow down
            // a zero vector by any amount.
            float maxWaitTime = 5f;
            while (inputData.cachedVelo2D.vector.Value.magnitude <= epsilon && maxWaitTime > 0.0f)
            {
                maxWaitTime -= Time.deltaTime;
                yield return null;
            }

            if (maxWaitTime <= 0.0f)
            {
                Modding.Logger.LogError("[ModCommon] Unable to add setvelocity2d to CustomEnemySpeed because the velocity is a " +
                                        "zero vector which cannot have its speed modified.");
                yield break;
            }
            
            inputData.SetDefaultMagnitude(inputData.cachedVelo2D.vector.Value);
            speedModifyVelocity2D.Add(inputData);
            if (active && speedModActive)
            {
                _UpdateSingleSetVelocity2D(inputData);
            }
        }

and even though the fsm dump indicates that the vector I am using isn't a zero vector it still says it is.

#

inputData.cachedVelo2D is a SetVelocity2D and is never null, or I'd get a null ref.

#

omg I found out why

#

EWWWWWWWWWWWW

#
 \----PFSM ---- SetVelocity2d (vector?.Value) = (0.0, 0.0)
 \----PFSM ---- SetVelocity2d (x) = 12
 \----PFSM ---- SetVelocity2d (y) = 0
#

wtf playmaker

#

aaaaaa

#

am I crazy or is this bad

#

why would it have both a settable and gettable vector and x and y as separate floats that are seemingly unrelated

#

ok explain this science

#

I set the boss to be faster

#

and the gameobject dump shows he should be faster

#

but he's the same speed

#

no but really wtf soul mage

#

im dying and idk what to do

#

OMG

#

eww

#

the second the soul guy spawns in it deletes the old game object and makes a new one

compact sedge
#

hes... just not in the scene dump

#

wtf

#

help

#

here's my code:

            GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType<GameObject>() ;
            foreach(GameObject go in allObjects)
                go.PrintSceneHierarchyTree("dump/scenedump" + dreamPrintNumber + "_" + go.name + ".txt");
#

there's NO soul guy

#

when his second phase spawns I can find that gameobject

#

that one's called "Corpse Dream Mage Lord 1(Clone)"

but this dump isn't giving me the other one

#

so uh what am I doing wrong

bitter quarry
#

is this in the English language

compact sedge
#

no

hollow pier
#

aa please stop spamming

compact sedge
#

ok

#

but only if TC

#

makes soul tyrant code not shit

#

I just wasn't expecting my least favorite dream boss to also be the worst programmed

bitter quarry
#

i wish i spoke this alien tongue

compact sedge
#

anyway it's not that I'm spamming more that my shit's broken and all the real modders are offline so idk how to fix it

#

literally getting a null ref for code that rider tells me is impossible to be null

rain cedar
#

Wow thanks I'm not a real modder

compact sedge
#

you were offline

rain cedar
#

Never

compact sedge
#

ok so the proper speeds get set

#

but then they're set back by something

#

and im too stupid to figure out what

#

I should just make like the benji brothers and play GnG

floral furnace
#

just open properties, beta then type in "gngwhennever" to download and play the beta of GnG ez

compact sedge
#

serious ideas for fixing this would be appreciated

#

maybe

#

you cannot cache waits for one

#

?

halcyon lantern
#

tfw i was on lightbringer, started grimm dlc after i got dreamnail, got the 6 flames then killed grimm 1st form, sat on a bench, then the game breaks and makes it so i cant get off the bench

#

ez

#

doesnt matter what bench or what i do, rip me, and rip 3 hours

pale karma
#

Yea is there a way I could mod the switch version to protect Myla? No? Ok.

compact sedge
#

sorry I had to do it

pale karma
#

No bully

#

Guys I really need a mod for this

copper nacelle
#

just don't get cdash

#

iirc

#

there was some Reddit post on it

young walrus
#

so make a mod for it

copper nacelle
leaden hedge
#

switch modding bad

#

nsp bad

#

release physical when

#

xci good

compact sedge
#

anyway, happy news y'all. I gave up working on soul jerk until 56 helps me and instead decided to get false knight working and I'm already almost done with him, he works perfect and just needs balance.

solemn rivet
#

*failed champion

compact sedge
#

goddamn it I did it again

#

argh

#

I must have 0 sanity left at this point

#

anyway if you would allow me to I'd like to update CustomEnemySpeed. I made it a lot more versatile

#

and I added regions

copper nacelle
#

submit pr when

compact sedge
#

20 seconds was literally writing the commit message

rain cedar
#

Your next project should be making a shop component

#

Because it's a pain in the ass

compact sedge
#

my next project is lost kin because I'm gonna put off soul master as long as I can lol

copper nacelle
#

fuck I was too slow

compact sedge
#

thanks for the tip on his behavior btw that's gonna save me infinite time

compact sedge
#

jesus christ y'all merged that fast

forest meadow
#

is it possible to mod on switch or nah?

leaden hedge
#

no

young walrus
#

you could mod your switch

#

like put a hat on it

#

or put it on wheels

copper nacelle
#

put Linux on it

#

and then run Hollow Knight from there

hollow pier
#

give it special privileges

#

allow it to purge ban etc

copper nacelle
#

make its name orange

young walrus
#

an automatic ice dispenser that keeps it cool

compact sedge
#

put a pi in your switch

#

you won't be able to run HK but maybe it could run celeste or something.

leaden hedge
#

celeste is on switch ๐Ÿค”

compact sedge
#

modded celeste tho

leaden hedge
#

you can load customs

#

which is 90% of mods anyway

compact sedge
#

HK custom maps when

#

also whenever a game is easy to mod. 90% of the mods never touch code.

#

or in the case of Skyrim, 99%

leaden hedge
#

you can't do code mods on switch apparently

#

memory is nonexecutable

compact sedge
#

same with skyrim and consoles

#

and probably for good reason

leaden hedge
#

well theres no reason on xboxone

#

you can run unsigned code on an xbone ๐Ÿค”

compact sedge
#

really? hmm

#

how open a platform is the xbone

leaden hedge
#

you can turn any retail xbone into a devkit

compact sedge
#

like if it can run any old binary then surely it's like, at least jailbroken IOS levels of open.

#

but anyway lol imagine if a skyrim mod required you to do this as the end user

leaden hedge
#

well theres no reason to prevent arbitrary code execution

compact sedge
#

yes there is

leaden hedge
#

when you can run anything on your xbone

compact sedge
#

consider this: activating dev mode is hard

#

downloading a random arbitrary dll mod

#

is easy

#

if you want the process of running unsigned code to be hard

#

then you shouldn't allow these kinds of mods

leaden hedge
#

what are you gonna do

#

hack my tendies

compact sedge
#

Technically possible but difficult for the average user is kinda Microsoft's thing

#

they build their OS and everything else around technically possible but difficult for the average user

#

the more difficult while still not being impossible the better

leaden hedge
#

unless xbox has some userland privelege escalation I doubt anyone can write anything malicious

#

and I doubt theres an exploit for that because you'd probably have sigpatching from devmode if there was

compact sedge
#

no but my point is this: MS can get away with shitty default settings on their products because people will defend them on PC forums as "oh microsoft loves choice, you can disable or change X on windows or xbone" so long as it's technically possible. Nevermind that it requires downloading a program and running through 30 clicks or running something in cmd or adding 1200 lines to your hosts file.

leaden hedge
#

i mean its literally just searching for dev mode in the store

#

and putting a key in a webpage

compact sedge
#

lol you think the average person can read guides

#

I wish lol

leaden hedge
#

like 4 steps if you include making a dev account and opening the store

compact sedge
#

people here who actively seek out HK mods and thus consider themselves technically above average can't even read readmes

#

so what hope do the other 90% of computer users have

#

I mean technically everyone considers themselves above average

#

but still

rain cedar
#

Well half of them are right

compact sedge
#

I'd argue 100% of people are above average at something

copper nacelle
#

above average at being bad

compact sedge
#

it's just, being above average at fighting slightly spedup NKG hasn't gotten me any jobs yet.

#

still looking tho

compact sedge
#

is there an AddGeo thing but for dreams?

leaden hedge
#

you mean for essence?

compact sedge
#

yes

leaden hedge
#

probably

#

as it shows up on the ui

compact sedge
leaden hedge
#

i dunno what it is though

#

I guess you could check the healthmanager class

#

as die should run whatever it is to add essence

compact sedge
#

not seeing it in healthmanager

leaden hedge
#

it was in the fsm

#

so it should have been ported zzz

compact sedge
#

I can change the geo

#

it spawns

#

but

#

not too much else

leaden hedge
#
        if (UnityEngine.Random.Range(0, max) == 0)
        {
            this.dreamEssenceCorpseGetPrefab.Spawn(base.transform.position + this.effectOrigin);
            playerData.dreamOrbs++;
            playerData.dreamOrbsSpent--;
            EventRegister.SendEvent("DREAM ORB COLLECT");
        }
#

its in EnemyDeathEffects.EmitEssence()

compact sedge
#

SendEvent("DREAM ORB COLLECT");

#

thanks

#

dunno if I need to modify but I'll just see if that works

leaden hedge
#

sending that event should just make the number + icon show up

compact sedge
#

what is dreamOrbsSpent for

leaden hedge
#

its to make enemies drop essence when you've spent some on dreamgating

#

more often that is

#
        if (!playerData.hasDreamNail)
        {
            return;
        }
        bool equippedCharm_ = playerData.equippedCharm_30;
        bool flag = playerData.dreamOrbsSpent > 0;
        int max;
        if (equippedCharm_ && flag)
        {
            max = 40;
        }
        else if (equippedCharm_ && !flag)
        {
            max = 200;
        }
        else if (playerData.dreamOrbsSpent <= 0)
        {
            max = 300;
        }
        else
        {
            max = 60;
        }
compact sedge
#

what's max for

#

also I feel like it's gonna be below 0 most of the time unless ur that one guy who uses dream gate 25 times a day.

leaden hedge
#

not sure why this isn't like max = (int)((equippedCharm ? 40 : 200) * (playerData.dreamOrbsSpent <= 0 ? 1.5 : 1))

#

max is the chance for random to trigger

#

1/max

compact sedge
#

woah wiki is VERY wrong on this then

leaden hedge
#

so its 1 in 300 enemies by default

#

understandable

compact sedge
#

I thought it was 1/200

#

poor veru

leaden hedge
#

also I just realized

#

why is that not just !flag ๐Ÿค”

copper nacelle
#

cause tc

leaden hedge
#

69 septuagintillion iq

halcyon lantern
#

blackmoth is buggy af

#

dashed into an enemy and took damage at the end and got put into a float

#

until i took damage again

compact sedge
#

tbh I couldn't even tell you if that's a blackmoth bug or a vanilla bug

halcyon lantern
#

tru

#

yeah pretty sure its a blackmoth glitch

#

if pressed dash right as i took damage and im put into float

compact sedge
#

I can try to fix it but uh no promises

halcyon lantern
#

nah its alright

#

i have to see if thats actually what causes it

#

its happened 2 times but still not sure what actually causes the float

#

i think its if u try to dash right as u take damage or right after the damage happens

compact sedge
#

if it's you taking damage on the frame you start dashing here's my theory

#

your cstate is set as invulnerable, but your player has already recieved the "TAKE DAMAGE" thingy

#

so you get a weird kind of storage where it can't do the TAKE DAMAGE animation because you're set as invulnerable

#

idk

#

maybe not but that's possibly what's happening

#

maybe it should wait a frame before making your character invulnerable. maybe it should happen earlier in the frame, might just need to do testing to find out.

halcyon lantern
#

yeah im trying to figure out if its before or after

fair rampart
#

but its an easy fix ingame
just open and close your inventory

halcyon lantern
#

it is indeed an easy fix

#

but it gets annoying when it happens 3 times in 1 fight

rain cedar
#

Open inventory midair

#

Lifeblood btw

copper nacelle
#

install QoL

fair rampart
#

maybe you spam the dash button too much?
longdash helps to reduce hits taken

#

@compact sedge a question, why did you add the go through walls charms while dashing?

compact sedge
#

it's gradow's mod

copper nacelle
#

gradow made blackmoth

#

tfw too slow

fair rampart
#

is he in here?

copper nacelle
#

yeah

compact sedge
#

he's pretty busy these days but yeah

fair rampart
#

@compact sedge sorry got confused since you made redwing

compact sedge
#

it's ok. I stole some code from blackmoth for it

#

and these days I'm interested in helping fix any blackmoth bugs both because redwing is designed for it and because I just really love that mod.

halcyon lantern
#

wait im supposed to use redwing with blackmoth

compact sedge
#

either or

fair rampart
#

it works really good with it

copper nacelle
#

redwing is better with blackmoth installed imo

compact sedge
#

originally it was just gonna be an addon but the blackmoth replacement in redwing is pretty alright. But I mean cmon if you wanna be a super overpowered knight why not go the full mile and install both.

rain cedar
#

Debug mod makes you more op tbh

halcyon lantern
#

when i installed lightbringer i thought the game would be ez af

#

i found that harder than this

compact sedge
#

ur not wrong sean

#

just keep spamming + until 9k nail damage

copper nacelle
#

more like

#

turn on invin

#

and infi soul

compact sedge
#

and click the kill enemy button

fair rampart
#

but blackmoth + lightbringer is broken af

compact sedge
#

now imagine those two but also with redwing

fair rampart
compact sedge
#

and I mean at that point you basically have to try to die

#

so that's why right now I'm making a mod that makes 3 bosses almost infinitely harder.

copper nacelle
#

soul tyrant meme

compact sedge
#

so that there's at least SOMETHING you can do that will challenge you

#

right now it's only one boss

#

but I could release an alpha I guess for memes

copper nacelle
#

is that one boss done tho

compact sedge
#

I still need to balance how much the speeds change

#

but otherwise mostly

copper nacelle
#

sharing is caring

#

also i'll take a look at soul tyrant soon

compact sedge
#

ok let me just check that essence gain works and I'll send binary

#

and update on git*

copper nacelle
#

send modcommon while you're at it too imo

#

cause you updated that

fair rampart
#

did you guys see the gods and glory showcase at e3

copper nacelle
#

yeah

#

kdt's boss rush but worse hollowdab

compact sedge
#

tbh if this mod I'm currently making is recieved well I have some fun plans for a mod to make GnG even more arcadey as well.

copper nacelle
#

thanks pycharm

#

making it colour instead worked

compact sedge
#

ok def still need to fix some shit before I send sry 56

copper nacelle
#

ok

compact sedge
#

for one, saving is not working the way it should and idk why

copper nacelle
#

you've got the modding api bug fix in right?

compact sedge
#

no but I fixed THAT bug manually in infinite grimm and this with some hacky code

copper nacelle
#

i mean do you have the hack in

compact sedge
#

no

copper nacelle
#

isn't that like

#

bad

compact sedge
#

ok

#

so idk which bug we're talking about but the one I'm thinking of is where it will copy your save data between saves

#

if you exit out

copper nacelle
#

yeah

#

totally stole that btw

compact sedge
#

ok

#

why is my level staying 0 and not saving to a save file

copper nacelle
#

you've sat on a bench?

compact sedge
#

I exited to menu after fighting and killing a dream boss

#

which prompted the saving data message

copper nacelle
#

rip

compact sedge
#
            global_vars.falseDreamFails = Settings.falseDreamFails;
            global_vars.falseDreamLevel = Settings.falseDreamLevel;
            global_vars.kinDreamFails = Settings.kinDreamFails;
            global_vars.kinDreamLevel = Settings.kinDreamLevel;
            global_vars.soulDreamFails = Settings.soulDreamFails;
            global_vars.soulDreamLevel = Settings.soulDreamLevel;

this code run in ModHooks.Instance.AfterSavegameLoadHook should load it from the save file right?

copper nacelle
#

yeah but why tho

compact sedge
#

ugh maybe I do need a bench

#

meme

#

idk

copper nacelle
#

make an instance imo

#

and just do ModName.Instance.Settings.blah;

#

and/or in your monobehaviour do ModSettings x = Modname.Instance.Settings;

#

for less verbosity

compact sedge
#

not the worst idea

#

would certainly make my code LOOK less shit

copper nacelle
compact sedge
#

I thought arraylists were older

copper nacelle
#

?

compact sedge
#

in java I mean

#

not something they just added to 10

copper nacelle
#

List is the generic which is newer than ArrayList yeah

#

the new thing is var

compact sedge
#

oh

#

so instead of c# copying java it's going the other way

#

nice

#

ok failed champ health management is disgusting

copper nacelle
#

yeah he has 2 hp bars

compact sedge
#

it has a healthmanager that has 360 health for its first phase, and once that runs out it then transitions to using an FSMint to manage all future health

#

that FSMInt, also has 360 health

copper nacelle
#

excuse me what the fuck

leaden hedge
#

good code

#

also the first head has more hp

copper nacelle
#

^

#

first head is pain

compact sedge
#

not the heads themselves

#

but the armor

#

all 3 have 360 hp

#

but the first one is run using a HM and the other 2 are run with this fsm

 \----PFSM StateName: Check
 \----PFSM ---- Transitions for state: Transition on STUN to state Stun
 \----PFSM ---- Actions for state: Actions on Check ::: GetHPEveryFrame
 \----PFSM ---- Actions for state: Actions on Check ::: IntCompare
 \----PFSM ---- IntCompare (Name) = 
 \----PFSM ---- IntCompare (integer1) = 360
 \----PFSM ---- IntCompare (integer2) = 0
 \----PFSM ---- IntCompare (greaterThan) = 
 \----PFSM ---- IntCompare (lessThan) = STUN
 \----PFSM ---- IntCompare (equal) = STUN
 \----PFSM ---- IntCompare (everyFrame) = True
leaden hedge
#

its probably good code

compact sedge
#

the fsm is fine code, the healthmanager is fine code, putting them together this way

#

tbh I have a feeling this boss is one of the first ones TC made

#

because

#

no waits

#

all waits are done with animations

#

that are empty animations

#
 \----PFSM ---- Tk2dPlayAnimation (Name) = 
 \----PFSM ---- Tk2dPlayAnimation (animLibName) = 
 \----PFSM ---- Tk2dPlayAnimation (clipName) = Blank
#

on the other hand easier to mod

#

but my god poor TC

fair rampart
#

can anyone tell me how to set binds to unbound in debug mod?

rain cedar
#

You'll have to clear them in the settings file manually if you want to

keen surge
#

Hi! I'd like a mod that makes 56 less ultra homo

#

Oops this isn't modding help

fair rampart
#

@rain cedar where is it located?

rain cedar
#

Save folder

fair rampart
#

whats the file name?

compact sedge
#

debugmod.GlobalConfig.json

#

or something like that

fair rampart
#

got it. it's debugmod.globalsettings.json
thanks a lot

compact sedge
#

I can't get my settings to save

#

ok how does Settings work

#

time to read the example mod

#

ok idk what I

#

am doing wrong

leaden hedge
#

it doesnt work

compact sedge
#

it worked in infinitegrimm

#

what happened

#

in the api

#

between then (41) and now

leaden hedge
#

is infgrimm global or persave?

compact sedge
#

it does persave score tracking

leaden hedge
#

afaik global is read only for somereason

compact sedge
#

but my settings are uninitialized every time I load the game

#

but in infinitegrimm in that version they worked fine

#

wait is it because I changed my settings to add new vars that I didn't have before

#

and those new vars don't get saved

#

ugh I wish I still had the python save extractor

leaden hedge
#

hksm can save to plaintext

compact sedge
#

really

#

how

leaden hedge
#

yes save (switch)

#

instead of save

#

was added like a few days after switch hk was released

compact sedge
#

uh ok

#

well

#

good because the python one had intentional shittyness in it I had to remove

#

and I'm too lazy to do that again right now

#

and I just need it extracted

leaden hedge
#

pretty sure the python one was just a copy of my code ๐Ÿค”

compact sedge
#

but in the future I might redo the unshittifying

#

NO STFU

#

I mean

#

ofc its a copy of your code

#

but

#

all it does is extract and unextract

#

and guess what

leaden hedge
#

the random exe one by raining chains is somewhere

compact sedge
#

YOU COPIED TC CODE TO DO THAT

#

so

leaden hedge
#

no I didn't

#

the only thing I copied from tc code is the extraction key

compact sedge
#

and other than that everything else is just using your programming language's crypto tools

#

so

leaden hedge
#

nope

#

because java doesn't let you use crypto functions over a certain keylength

#

because terrorists could use it

#

yep you heard me right

compact sedge
#

not in python

#

not in not-shit languages tbh

leaden hedge
compact sedge
#

so if they copied your code they did more work than they had to

#

from Cryptodome.Cipher import AES

#

yeah probs not copying your code

#

but that's a shitty library

leaden hedge
#

also c# has wrong names on their crypto libraries

#

and completely wrong functions afaik

#

oh it uses RijndaelManaged now

#

which actually does use the correct values

#

also I know for a fact the python script is based of my code

#

because in his reddit post he links to my repo ๐Ÿค”

compact sedge
#

ยฏ_(ใƒ„)_/ยฏ

#

tbh probably stole ur key

leaden hedge
compact sedge
#

no

#

not uploading my saves to random website

leaden hedge
#

they gonna steal your savedata

compact sedge
#

tbh I wish I had the unshitty version of the python script still

#

it took me like 15 mins to make but I forgot exactly what I did

leaden hedge
#

well its not just a AES cipher

#

because its BASE64 too

#

and you need c string headers

#

but either way I'll have you know I actually had to get AES to work via gnu.crypto which had basically no documentation and took literally forever to do ๐Ÿ˜ 

copper nacelle
#

didn't it have like

#

5 random sleep statements

leaden hedge
#

well he likes it to feel like its doing stuff

#

tbh you could just repurpose my java script to unpack saves real quick

#

all you need to do is
SaveLoader.saveSwitchSave(fileDir, SaveLoader.loadSave(fileDir));

#

and it'll decrypt saves for you

copper nacelle
#

neat

#

wtf the python one is 10mb

compact sedge
#

lol

#

bundled libraries and bundled exes

#

meme

leaden hedge
#

it comes packaged with python

#

its only 4kb

compact sedge
copper nacelle
#

isn't it just 2 lines

leaden hedge
#

also

    private static byte[] getLength(byte[] input){
        String rawLengthBinary =  Integer.toBinaryString(input.length);
        String reverse = new StringBuffer(rawLengthBinary).reverse().toString();
        System.out.println(reverse.length());
        String[] data = new String[(int) Math.ceil( ((double)reverse.length()) / 7.0f)];
        System.out.println(data.length);
        for( int i = 0; i < data.length-1; i++){
            data[i] = reverse.subSequence(i*7, ((i+1)*7)).toString()+"1";
        }
        data[data.length-1] = reverse.subSequence((data.length-1)*7, reverse.length()).toString();
        byte[] output = new byte[data.length];
        for( int i = 0; i < data.length; i++){
            System.out.println(data[i]);
            output[i] = (byte) Long.parseLong( new StringBuffer(data[i]).reverse().toString(), 2);
        }
        return output;
def getLength(input):
    # lenBin = format(332184, 'b')
    lenBin = format(len(input), 'b')
    lenBinReverse = lenBin[::-1]
    dataLen = math.ceil(len(lenBinReverse) / 7.0)
    data = list(range(dataLen))
    for i in range(dataLen - 1):
        data[i] = lenBinReverse[i*7:(i+1)*7] + "1"
    data[-1] = lenBinReverse[(len(data)-1)*7:len(lenBinReverse)]
    output = list(range(dataLen))
    for i in range(len(output)):
        output[i] = int(data[i][::-1], 2) # doubleCast()
    return bytes(output)
#

I aint saying anything but :^)

copper nacelle
#

wow that's straight copied

compact sedge
#

ok I got it worked

copper nacelle
#

also he's using camel case in python

#

w h y

compact sedge
leaden hedge
#

I aint saying he used more than my keys but :^)

compact sedge
#

ยฏ_(ใƒ„)_/ยฏ

#

the other one used a weird ass crypto library too

#

even though you can just use normal python Crypto

#

also no shebang at the top

#

also the decode didn't even work

#

anyway lots of problems I think I fixed some of them

#

change it to your hollow knight save path it's currently set to mine but the default python thing had it set to the Desktop

#

but unfortunately I can't recommend this. Because it doesn't feel like it's doing anything because it's too fast

#

it should really have a busy loop somewhere in the middle

copper nacelle
#

yeah make it slower

leaden hedge
#

use a more inefficient algorithm

#

infact encode and decode to every crypto fuction your library supports

compact sedge
#

anyway literally all this is for is to splice off the end of the savefile

#

but it's really effing hard

#

to get valid json

#

because this one goddamn line

leaden hedge
#

thats like half of my code

compact sedge
#

also if I put it in a beautifier idk if it will still work

leaden hedge
#

is making the json be read

compact sedge
#

make ur save editor edit modded data

#

and it'd be useful to me right now

leaden hedge
#

i mean it decrypts them

#

I could technically put in a tab for modded data but it'd be zzz

compact sedge
#

oh ok I did the cutting correctly

#

but there was a bug in my unshitty python

#

so its still shitty I guess

copper nacelle
#

:ech:

#

why not just use kdt's tho

leaden hedge
#

java slow

#

java bad

copper nacelle
#

aa irl

leaden hedge
#

UpperCamelCase BADDER intenseface

copper nacelle
#

big delet

compact sedge
#

no its because I can't easilly reencode and decode stuff

#

after editing it

#

for one it saves it as user1.dat.switch

#

so that's one more renaming thing I have to do

leaden hedge
#

like I said

#

just make a new program

copper nacelle
#

and call kdt's code

compact sedge
#

I did

#

I made a new program

#

stealing ur code

#

stealing some other guy's code stealing your code

leaden hedge
#

and do
SaveLoader.saveSwitchSave(fileDir, SaveLoader.loadSave(fileDir));

#

that decrypts saves

compact sedge
#

or ur money back

copper nacelle
#

i want my money back this is in camel case

compact sedge
#

btw

#

I really fucking hope

#

that this works

#

because fuck moddingapi Settings data

leaden hedge
#

and SaveLoader.saveSave(fileDir, SaveLoader.loadSave(fileDir)); should encrypt

compact sedge
#

I can't add new settings without forcing people to make a new save

leaden hedge
#

aslong as my code isn't bad

compact sedge
#

or I could use existing code that does the same thing

leaden hedge
#

which this code does exist ๐Ÿค”

compact sedge
#

too lazy to run java

#

python is just ./

leaden hedge
#

ur mum is too lazy to run java

compact sedge
#

java is java -jar file

leaden hedge
#

I mean you could just make it drag file onto jar

copper nacelle
#
#!/bin/bash
java -jar urmumgay.jar
leaden hedge
#

run code

copper nacelle
#

real shitpost

leaden hedge
#

python is hella gay

#

i've got like 16 seperate installs

compact sedge
#

the real shitpost would be me doing this after having it working 15 minutes ago

#

lol

#

kdt that's because ur on a shit os

#

that's ur own fault

leaden hedge
#

i've got like 2.7, 3.2, 3.5, 3.6, anaconda on each of those

#

some numpy redist

copper nacelle
#

get rid of everything that's not 3.6 and 2.7

leaden hedge
#

then like 2.7 code doesn't even work on 3.x

#

so you write 2.7 code in your sublime text

#

go to double click and find out your path is 3.x

#

and it doesn't work intenseface

copper nacelle
#

3.x broke stuff on purpose cause 2.x was bad

#

stop writing in 2.x

leaden hedge
#

no

copper nacelle
#

yes

leaden hedge
#

2.x good

copper nacelle
#

delet

leaden hedge
#

i can do

#

print urMum

#

and it work

copper nacelle
#

urMum not defined

leaden hedge
#

print(urMum) not cool

copper nacelle
#

tbh

compact sedge
#

kdt ur problems with python are problems with you

copper nacelle
#

swap to haskell

#

no more parens

#

just chain everything

leaden hedge
#

im going to do my next hk project in pascal

copper nacelle
#

$ and .

compact sedge
#

motherfucker it still doesn't work

#

seannnnnnnnnnnnnnnn

#

fix ur saving

copper nacelle
#

money back pls

#

ty

compact sedge
#

not the saving thing

#

the goddamn

#

saving thing in moddingapi

leaden hedge
#

thats wyza

compact sedge
#

wyzaaaaaaaaaaaaaaaaaaaaaaaaaaa

#

you really are killing my joy over here

leaden hedge
#

just steal code that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen that was stolen and fix modding api

#

tbqh

compact sedge
#

I'm passing out

#

so ping me if anything other than saves, or 2/3rds of the dream bosses are broken

copper nacelle
#

it's just fc right

compact sedge
#

yes

copper nacelle
#

cool

compact sedge
#

it works until you quit the game

copper nacelle
#

i like how i still have all the mods installed

compact sedge
#

and then it doesn't properly save the level ur on

copper nacelle
compact sedge
#

no shitmothst

#

delet this

copper nacelle
#

put it in the installer

compact sedge
#

lol I'd get banned from the drive

copper nacelle
#

x to doubt

copper nacelle
#

i

#

'll try that

compact sedge
#

it's on my git too cuz memes

copper nacelle
#

nice

rain cedar
#

You fix it

compact sedge
#

why did it sorta work in infinite grimm

#

and not work at all here

#

explain urself

copper nacelle
#

cause you did it wrong here

rain cedar
#

Idk not my code not my problem

copper nacelle
compact sedge
#

tfw u do it the same way

copper nacelle
#

use an instance var when

compact sedge
#

I had an instance var

#

it didn't work

#

so I swapped to copying my infinite grimm code line for line

copper nacelle
#

uhh

#

he died

compact sedge
#

who

#

grimm

copper nacelle
#

fc

compact sedge
#

no duh

#

fight him again

copper nacelle
#

but i was using your 107 save

#

:ech:

compact sedge
#

or I can just say it

#

he has levels

#

he gets harder every level

#

if you beat him he goes up a level

copper nacelle
#

neat

compact sedge
#

if you die 3 times to a level you go down one

#

you get essence based on how many levels you have when you win

copper nacelle
#

do his staggers get slower

compact sedge
#

he doesn't have staggers. that's just his hp bar

#

the other ones will tho

copper nacelle
#

does that get slower tho

compact sedge
#

yes

#

his hp bar goes up

copper nacelle
#

shit

#

ruining my spell build

compact sedge
#

also with that guy and that guy only

#

his jumps get shorter instead of taller

#

the higher the level

#

and the jumping physics on that guy is really weird

#

his gravity is ~0.4 when he goes up and 3.0 when he falls

#

which always made him feel very unnatural to me

#

but that's how TC programmed him

copper nacelle
#

i've gotten no essence

#

only 2 kills tho

compact sedge
#

uh

#

ur supposed to be at +30 right now

#

did u update your modcommon

copper nacelle
#

yeah

compact sedge
#

so if you put down a dreamgate ur at the same as before

copper nacelle
#

it doesn't show the ui?

#

:echREE:

compact sedge
#

it's supposed to

#

press i

#

if it doesn't

copper nacelle
#

more like

#

ctrl

#

still have 2821

#

gonna kill him again

compact sedge
#

maybe I broke something with this code but it works on my pc:

            FsmState meme = falseGuy.LocateMyFSM("FalseyControl").GetState("Dream Return");
            List<FsmStateAction> actions = meme.Actions.ToList();
            actions.Add(new CallMethod()
                {
                    behaviour = GameManager.instance.gameObject.GetComponent<dream_manager>(),
                    methodName = "falseKill",
                    parameters = new FsmVar[0],
                    everyFrame = false
                });
            meme.Actions = actions.ToArray();
#

send player.log

#

wait

#

no

#

if the difficulty goes up

#

then you should be getting essence

#

omg did I not send you the version with the shorter wait

copper nacelle
#

idk but level 4 seemed harder

#

also still have 2821

compact sedge
#

uh just wait 5 seconds before nailing him again and you might get essence

#

or maybe

copper nacelle
#

2l8

compact sedge
#

it can't add it because you do have the one with the shorter wait

#

and that is causing it to try to add the essence in a loading screen

#

or something

copper nacelle
#

well level 5 was fun

compact sedge
copper nacelle
#

i mean it'll take 2 seconds to get them back

#

tbh

compact sedge
#

ok

copper nacelle
#

gonna try a spell build this time

#

with quickslash

#

cause staggering him every 10 seconds is nice

#

still no essence

#

@compact sedge is this u


NullReferenceException: Object reference not set to an instance of an object
  at dreams.false_dream..ctor (UnityEngine.GameObject falseGuy, Int32 level) [0x00000] in <filename unknown>:0 
  at dreams.dream_manager+<loadFalseDream>d__15.MoveNext () [0x00000] in <filename unknown>:0 
  at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00000] in <filename unknown>:0 
compact sedge
#

oml

#

im a meme

#

ok

#

let me open up rider reql quick

#

why tf doesn't it tell you WHERE the goddamn NRE happened

#

like line number

copper nacelle
#

cause dll

#

idk

leaden hedge
#

should work if pdb is moved with it

compact sedge
#

so to be clear

#

u got levels

copper nacelle
#

wait what

compact sedge
#

hold up

copper nacelle
#

pdb gives me line numbers

#

excuse me

#

where were you like

#

3 months ago with this info

compact sedge
#

I knew pdb had line numbers

#

I didn't know u could just move it in the same folder

#

as the dll

leaden hedge
#

should do, dunno if hk modding api works with it

#

but it works fine for everest

compact sedge
#

gonna go with no for 100 dollars

#

but we'll see

leaden hedge
#

pretty sure I complained about it before

#

can't remember if feature got added or not intenseface

compact sedge
#

ok gonna test this r quick

#

and if I don't get except u get new binary

#

and I get sleep

copper nacelle
#

same

#

cause my alarm to wake up just went off

compact sedge
#

bye

copper nacelle
#

gn

rain cedar
#

Mixing const and static readonly wtf

#

Pick one

copper nacelle
#
NullReferenceException: Object reference not set to an instance of an object
  at dreams.false_dream..ctor (UnityEngine.GameObject falseGuy, Int32 level) [0x00000] in <filename unknown>:0 
  at dreams.dream_manager+<loadFalseDream>d__15.MoveNext () [0x00000] in <filename unknown>:0 
  at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00000] in <filename unknown>:0 
rain cedar
#

Too bad

#

He's already gone

copper nacelle
#

yeah ik

rain cedar
#

static readonly is better than const tbh

#

Less prone to issues at least

#

Not "better" in that it runs faster, should run marginally worse

leaden hedge
#

just do find and replace before you build

#

and then ctrl+z right after intenseface

rain cedar
#

Find and replace the const references?

#

The compiler already does that

leaden hedge
#

does it

rain cedar
#

Yes

#

That's the difference between const and static readonly

#

Const gets replaced by whatever its value is

leaden hedge
#

surely that'd break whatever.SOME_CONST

rain cedar
#

Static readonly is still a reference

copper nacelle
#

which is why it's bad if you're going to change it

#

cause if you have an assembly built with an old version using that constant

#

and then that library changes it

#

the assembly will still have that old constant

#

even w/ the new version

bronze temple
#

@compact sedge @copper nacelle @leaden hedge making line numbers show up in old versions of Mono requires you to use pdb2mdb, and run mono with the --debug flag... Which is impossible in Unity. Unless you're fine with one of the following:

  • hunting down addresses of unexported functions with x64dbg on Windows, or gdb on macOS and Linux and then performing black magic with a patched UnityEngine.dll
  • patching Unity's copy of mono
#

Guess which method I had to use in Gungeon

compact sedge
#

that's what I assumed

#

or not that specifically because I'm not a coder

#

but I assumed it wouldn't be easy to do

#

Actually I use const whenever possible because it's faster. BUT I use (or should be using) static readonly for vars I want read from other mods. because if I didn't then every time I changed the value it would break those mods. @rain cedar

#

because iirc if you read a const var without reflection from another mod, and then change that var on the first mod without rebuilding the second mod, the second mod will still read the old var value

#

and that

#

is the opposite of the behavior I want

flat forum
#

"I'm not a coder"

#

...

#

. . .

#

. . .

#

. . .

compact sedge
#

or maybe not, maybe it's useful for mods to know which version of modcommon they were built against but I can't see how.

ocean hornet
#

Hey guys! Really I have a really silly question, but... How do I install ModCommon, so I can play Lightbringer?

compact sedge
#

YES

#

uh

#

you download it from the drive

#

like where you downloaded lightbringer and modding api. You downloaded those things from the drive right?

ocean hornet
#

Yes

compact sedge
#

modcommon is like lightbringer in that it just goes in the mods folder

ocean hornet
#

But how do I install it? Same as the other mods, like Randomizer?

#

Oh

#

Thanks

#

I can't seem to find ModCommon on the drive though

compact sedge
#

well the mods are organized by creator name

#

so that makes it hard to find

ocean hornet
compact sedge
#

ok so now you know who made it so just look for their name on the drive

ocean hornet
#

Oh thanks!

#

I'm dumb, just found it

#

Now, let me see if it will work this time...

#

It seems to be working just fine! Thank you @compact sedge

compact sedge
#

go to #archived-modding-help in the future. I would have asked you then to go there but I was just happy enough that you actually TRIED to install modcommon.

#

and if you're thinking there's no way someone could just ignore the giant text box when you open the game... you'd be amazed.

ocean hornet
#

Hahaha, yeah

#

Next time I will be sure to go there

copper nacelle
#

wow message actually worked

#

yeet

compact sedge
#

hey is there a non-reflection way to get the version of the game?

copper nacelle
#

i mean there's a const in Constants called GAME_VERSION but you'd have to use reflection to get it cause it's a const

compact sedge
#

ok

copper nacelle
#

you could try PlayerData.Instance.version

#

should work

compact sedge
#

thaks

copper nacelle
#

yw

compact sedge
#

I don't need it in this instance I think but it's def gonna be useful to have if there's other fsms that are also different between beta and regular, esp with regards to waits and animations

#

ok I guess I'll try to fix the saving thing in modding api today but I have 0 knows about how tf unity serialization works

rain cedar
#

Wtf reflection to get const

#

It works like a static member

#

You can just get it

#

I guess that only works assuming you recompile for the new version

compact sedge
#

if you get consts from a program that is dynamically linked (say a mod) and rebuild the original without rebuiling the program, it will read the wrong number

rain cedar
#

Which is a safe assumption for API but not for mods

compact sedge
#

and that's what I was talking about earlier

#

with why I use static readonly instead of const for my version number

#

basically all consts are copied into the assembly at compiletime

copper nacelle
compact sedge
#
            if (data.modData.ContainsKey(name))
            {
                data.modData[name] = Settings;
                return;
            }

this code never runs

#

ok

#

something clearly changed in the modding api or in LB beta 1.3.3.7 because there;s just straight up no more save serialization

copper nacelle
#

stop using beta ez

compact sedge
#

ok well riddle me this batman

#

do your levels save in dreamfighter

#

since ur on not beta

#

like if you quit to the menu does it start you back at level one?

copper nacelle
#

lemme check

#

yeah i'm at level 1

compact sedge
#

ok

#

it seems like loading is fine but it's not serializing at all

copper nacelle
#

still using light theme

compact sedge
#

oh

#

what

#

so the first one isn't a valid int but the second is?

        public int kinDreamFails;
        public int settingsVersion { get => GetInt(); set => SetInt(value); }
#

I guess it's a fault in my code then

copper nacelle
#

:ech:

#

also the fails thing doesn't work at all

compact sedge
#
[INFO]:[SuperDreamFighterDX] - Adding Settings to Save file
[INFO]:[SuperDreamFighterDX] - Adding settings to SuperDreamFighterDX
[INFO]:[SuperDreamFighterDX] - Add success. here's all the intvalues it found
[INFO]:[SuperDreamFighterDX] - Found key settingsVersion with value 1
copper nacelle
#

i died 8 times to a version and never leveled down

compact sedge
#

yeah I know I fixed it in this version I'm working on

copper nacelle
#

cool

compact sedge
#

I have a feeling that saves will work in this version but let me test first

#

and if they do

#

then I'll send it and start making lost kin

#

same way blackmoth guy did

#

by dashing right as I got hit

#

jk it's unrelated to dashing

#

it's probably a redwing bug

#

by getting hit too often

#

but yeah I didn't realize this but

        public int var;

is NOT valid for save data
but

        public int var { get => GetInt(); set => SetInt(value); }

is valid

#

is this common knowledge and I'm just a dungo

copper nacelle
#

why would the first one be valid tho

#

i mean it'll exist but it won't save anything

compact sedge
#

yes

#

ur right

#

but I didn't know that it made a difference

#

just because I'm wondering. How would you say

public int var { get => GetInt(); set => SetInt(value); }

without =>

copper nacelle
#

curly brackets around getint and setint

compact sedge
#

ok

#

lol

#

thought it would be weirder than that

copper nacelle
#
public int var 
{ 
get 
{ 
return GetInt(); 
}
 set 
{ 
SetInt(value); 
}
}
#

indentation on mobile is no

compact sedge
#

w/e I get the point

#

I really shouldn't be testing this mod with redwing

#

I feel like what I consider a fair and balanced speed is gonna be way too fast if you have to actually wait for your shadow dash

copper nacelle
#

the 3 shockwave combo is

#

dฤ“lรซt

compact sedge
#

just down dash

copper nacelle
compact sedge
#

tbf this is supposed to go to level 255 which is supposed to be unbeatable for humans

#

just like pacman

copper nacelle
#

someone beat Pacman tho

compact sedge
#

and before you say it just because people have gotten to level 255 in pacman doesn't mean it was designed to be possible

tranquil glen
#

Why doesn't Angle have a modder role yet imo

copper nacelle
#

idk

tranquil glen
#

Literally here talking and helping all the time

young walrus
#

He doesn't like green

compact sedge
#

that's so wrong

tranquil glen
#

Unrelated do you guys know what's up with the out of bounds geometry and why there's a bunch of sloped floors out there despite there being literally zero in bounds sloped floors?

compact sedge
#

green's like my favorite color, alongside red and purple and every other color

young walrus
#

Because they threw shit together and didn't care about oob space?

compact sedge
#

well because sloped shit behaves so weirdly in HK

#

like the game is clearly not built for it

#

so they didn't put any inbounds

tranquil glen
#

I understand why there's oob geometry, but why would it be sloped

compact sedge
#

and OOB they don't care

#

what mickely said

tranquil glen
#

Yeah ok

copper nacelle
#

cause it's easier than not probably

compact sedge
#

and there's several inbound slopes too, well idk if they count

#

but like the roof of the FC boss fight

copper nacelle
#

ceilings

#

ree

tranquil glen
#

Also I guess I lied there's like that one roof somewhere that's sloped I think

compact sedge
#

there's def more than one iirc

tranquil glen
#

Yeah there are a couple places I think

copper nacelle
#

I tried reversing the gravity on lost kin but the ceiling was sloped so he was shit

compact sedge
#

darn that would have been interesting

tranquil glen
#

I remember someone bringing up how you could slide really fast across them if you tried superdashing on them

compact sedge
#

I'd believe it

#

most of the slopes I'm familiar with you just fall infinitely on

#

so your vert velocity skyrockets until it hits maximum but you keep hitting the collider and getting pushed back up

tranquil glen
#

Oh really? What's max speed? And could we do some SM64 style gain insane speed to clip through stuff or do collisions work properly in this game

#

Well

#

"properly"

compact sedge
#

there's a speed cap because the game has jerk

#

I guess you could try it with menu drop lol

#

and

#

collisions probably don't work properly

#

like I'm 95% sure

tranquil glen
#

So if I held menu open while on a slope it's possible I'd eventually fall through?

#

That's actually helpful in one spot if so

compact sedge
#

try it

tranquil glen
#

I will when im home

compact sedge
#

anyway they're checked 50 times a second and all walls are infinitely thin

#

so

#

the main hitbox you have to overcome is the knight itself

#

who is about 1.3 units tall or so

tranquil glen
#

How steep does a slope have to be for it to count as falling?

#

Or can it be literally any slope