#archived-modding-development

1 messages ยท Page 30 of 1

solemn rivet
#

not related to this discussion

noble trout
#

Oh

solemn rivet
#

trying to make the item prompts work iirc

leaden hedge
#

I've been trying to get item prompts to work for a few versions hollowface

solemn rivet
#

I gotta go now

#

peace everyone

#

also, if you do release it anytime soon, can you please tag me, KDT?

noble trout
#

KDT @ me when you are going to upload the hitless item less

solemn rivet
#

now I gotta go

noble trout
#

Bye

leaden hedge
#

the text isn't currently perfect

#

but it'll do

#

also @buoyant wasp

buoyant wasp
#

sweet, i'll try it out after work

vale zenith
#

Can confirm float math is a pain in the ass in the c# too or just generally really

leaden hedge
#

the maths itself is fine, its just that binary happens to be a shitty way to store irrational numbers

vale zenith
#

As opposed to what exactly?

#

Almost all numbers aren't computable

leaden hedge
#

I just mean the actual maths itself for binary is the same as normal integers

#

so its not floats that suck, its limits on accuracy

vale zenith
#

That's a really weird way to put it

leaden hedge
#

if anything float maths is great

#

1.5 + 1.5 is the same as 3+3, just shifted to the right one

vale zenith
#

I am pretty sure that isn't correct

#

Unless you mean something weird by shifting

leaden hedge
#

well it is once you account for the mantissa

vale zenith
#

The exponent is incremented by one

#

There is no shifting

leaden hedge
#

assuming fixed point at 4, 00110000 = 3, 00011000 = 1.5

#

which is a bitshift

#

I mean you're actually moving the mantissa by one

vale zenith
#

You know when you said floats are great

#

And now you talk about fixed point

leaden hedge
#

well fixed and floating points are the same, except one has a mantissa to say where the point is

#

the math is the same

vale zenith
#

What?

#

Go ahead and bitshift some floats, see if you get the result you expect

#

Either what you mean by shifting to the right is a bad way to say divided by two, or you are talking about the actual binary representation in which case you are factually wrong

leaden hedge
#

afaik

exponent    mantissa
0010        0010
0001        0100

adding these you normalise the exponents by shifting the mantissa of the second to the right one as 0010 - 0001 = 0001 (and its smaller), then just add 0010 to 0010 which gives you 0010-0100
although its been a while since I've actually done floating point maths at a binary level

#

obviously shifting the entire thing would fuck the exponent and mantissa positions

vale zenith
#
        {
            float x = 6;
            unsafe
            {
                float* px = &x;
                UInt32* pux = (UInt32*)px;
                *pux = *pux >> 1;
            }
            Console.WriteLine(x);
            Console.ReadLine();
        }
leaden hedge
#

thats why I said
obviously shifting the entire thing would fuck the exponent and mantissa positions

vale zenith
#

so when you say bitshift to the right you mean subtract one from the exponent, got it

#

very similiar

leaden hedge
#

why are you saying it here thinkgrub

rain cedar
#

Just leave the server

leaden hedge
#

why not just click on Hollw Knight at the top left, then leave server @pulsar trout

vale zenith
#

can we also delete his messages?

leaden hedge
#

yes

vale zenith
#

thanks

buoyant wasp
#

we have some entertainment?

leaden hedge
#

just someone thinking this channel was for moderators

#

asking to get banned

grand relic
#

I was directed here by 753 after asking questions regarding his mod and current compatibility. I was hoping to ask if anyone happened to have a save file created before March 11th, when the Quick Focus/Slash nerfs took place

#

Please note I am new to this sub and I hope I haven't broken any rules by asking this here

vale zenith
#

Why do you need a save file?

rain cedar
#

He just wants a cheaper quick slash

grand relic
#

to test out Quick slash/focus combinations that would be otherwise impossible without overcharming and to run the lightbringer mod

#

so basically what sean said

rain cedar
#

I don't think quick focus was ever nerfed

grand relic
#

it used to cost 2, did it not?

rain cedar
#

Not that I know of

#

Quick slash did, though

vale zenith
#

@rain cedar yeah, I get that, but wouldn't a lot of other things do for that as well?

rain cedar
#

There's a save editor pinned here

#

Just change it yourself

grand relic
#

that seems like cheating though

rain cedar
#

And using an old save to bypass the nerf isn't?

#

Same effect

grand relic
#

fair point lol

#

how would I go about using this save editor? and more to the point, where exactly do I find it

rain cedar
#

It's in the pinned messages

#

And I've never used it

#

So you'll have to figure that out yourself

grand relic
#

i don't know what those are, and pressing the buttons overhead brings me to scary places

#

oh nvm

leaden hedge
#

it comes with instructions

#

shouldn't be overly complicated

grand relic
#

Is it the Save Manager link you posted on 9/09? the Debug mod posted by Seanpr? Not seeing a definitive "Save Editor" in the pinned messages

leaden hedge
#

the save manager has a built in editor

grand relic
#

ah ok, thanks

#

the jar file? or do I need to unpack the Zip file? I don't really do much modding

leaden hedge
#

it should just be a jar

#

then double click it

#

its not really a mod

#

its an external program

deep pilot
#

Want the jar to be in the folder with your save files

leaden hedge
#

there is a button to set the save folder

#

so you can put it anywhere

#

just click, SET SAVE FOLDER

deep pilot
#

The jar needs to be in that folder if you want to use the stuff on the left

leaden hedge
#

no

#

that works fine

deep pilot
#

Setting the save folder doesn't allow the game to detect the correct save files

#

I just tried it

leaden hedge
#

set the save folder

#

and reload the jar

deep pilot
#

Reloading the jar fixes it, but it doesn't make sense that you'd have to

#

And there isn't exactly a readme that says you have to reload the jar after changing your save directory

leaden hedge
#

it also doesn't update the left when you move saves

#

decrypting saves is pretty slow

#

so I pretty much only do it for the 4 main saves whilst the jar is loading, and when you edit something

#

I could put it into the readme I guess

deep pilot
#

I still think it's easier to tell people to put it in the save folder directory to save confusion

#

Or edit the readme to mention how it it decrypts the saves, whatever works

grand relic
#

Well, you can all call me stupid now if you'd like, but I transferred the jar files to a folder I created within the same location as the HK save files, and that seems to have accomplished nothing, so I am at a loss as for what to do. I can't find an executable within the JAR files, and nor does it seem to impact the game itself.

deep pilot
#

Just double click the jar to start it

#

Don't need any extraction

grand relic
#

I see 6 folders, labeled "com", "fonts", "gnu", "HKSM", "jiconfont" and "META-INF"

#

no mention of a jar

deep pilot
#

The thing you download is a jar?

grand relic
#

Yes, that, I exported it using an unpacker and transferred the files to the save file locations

deep pilot
#

Don't need to export it to an unpacker

#

Just paste that file into the save file location

#

Double click to open it

rain cedar
#

You can think of a jar as a java executable

grand relic
#

on a side note, I did manage to open the jar, but I would much like to have a version I can open without resorting to the github verytime

#

and thanks for your patience, this must be infuriating for you

deep pilot
#

why would you need to resort to github each time?

#

It's sitting there in that directory on your computer after you've downloaded it

grand relic
#

because I can't copy over a working executable jar file to my computer without my unpacker converting it to a host of useless folders lol

deep pilot
#

why is your unpacker doing that?

#

You should be allowed to just download the file as is

grand relic
#

I have no idea lol

deep pilot
#

I mean, isn't there an option in your browser to just save file?

#

Not open it with a program?

grand relic
#

Apparently not, I get a warning popup everytime it attempts to transcribe it and I have to manually open it

#

might be my antivirus

#

if so, I apologize to my unpacker for flase assumption of guilt

deep pilot
#

Isn't there usually an option in said warning popup to allow you go save it anyways?

grand relic
#

idk man, I just came here to get an older save file before the Quick Slash/Focus nerfs that would allow me to try out some new charm combos and run older mods

rain cedar
#

An older save isn't going to let you run old mods

grand relic
#

I've browsed everything from the subreddit, to old Steam forum threads asking how to revert to previous patches, and have finally come to the conclusion that the only way to run the mods is with an older save file

deep pilot
#

@rain cedar what Vere wants to do is reduce the notch cost of those two charms

grand relic
#

since Steam forces updates to games unless you go throught the directory, download the depot, go onto offline mode and play the game

rain cedar
grand relic
#

yeah, i've been using the steam console

rain cedar
#

Steam definitely doesn't force updates after patching down

deep pilot
#

Also, older save file =/= able to run mods as far as I know

grand relic
#

it does if you attempt to launch the game

deep pilot
#

You still have to change the base game to an older version for those mods

rain cedar
#

It doesn't

grand relic
#

well, then idk man

#

not gonna lie though, those commands are super helpful, I spent like an hour trying to access the specific manifests for each depot, finding the app/depot id and inputting them, and never once found that page

#

and all i had to do was copy/paste the first code on that page into the console, fml

#

I tried backing up the installation and renaming the new files I obtained from the directory, but after I did so I found that steam had renamed them back, updating the files in the process when i tried to launch the game

buoyant wasp
#

once you download the depot, you can actually just keep it in a separate folder

#

it doesn't have to go back where HK was installed

#

they both will use the same save game area, but otherwise can be used independently

grand relic
#

...oh

leaden hedge
#

you need to put a text file called appid.txt with '367520' in it iirc

grand relic
#

So I can just run the executable that comes from the depot then? that's it? and steam won't force an update? do I need to adjust my settings to only download updates between x and y time, or to run offline in conjunction with "only update when launched" or something?

buoyant wasp
#

i was able to just double click the exe and go

grand relic
#

didn't work too well when i tried it last time

buoyant wasp
#

i can test again when i get home

#

if you are still having issues

grand relic
#

right, but then i wait 7 minutes for steam to download the update, at which point the game starts and it's version 1.2.1.4

#

doesn't let me actually launch previous versions of the game

leaden hedge
#
GameObject go;
PlayMakerFSM fsm;

void Start(){
    go = GameObject.Find("Charm Effects"); //cache this
    fsm = FSMUtility.LocateFSM(go, "Spawn Orbit Shield");
    //This should be after the level has loaded
    Invoke("duplicate", 1);    //duplicate after 1 second
    Invoke("duplicate", 2); //duplicate another after 2 seconds
}

void duplicate(){
    fsm.SetState("Init");
}

@buoyant obsidian im not sure how this will actually respond though

buoyant obsidian
#

it's beautiful

#

So where would I place this?

hazy sentinel
#

no //meme

#

ruined

leaden hedge
#

well you'd called the start function as a delegate of levelLoaded

#

so you'd really have something like

public class shieldDuper(){
    GameObject go;
    PlayMakerFSM fsm;
    public shieldDuper(){
        UnityEngine.SceneManagement.SceneManager.sceneLoaded += onSceneLoad;
        go = GameObject.Find("Charm Effects"); //cache this
        fsm = FSMUtility.LocateFSM(go, "Spawn Orbit Shield");
    };

    public void onSceneLoad(){
        Invoke("duplicate", 1);    //duplicate after 1 second
        Invoke("duplicate", 2); //duplicate another after 2 seconds
    }

    void duplicate(){
        fsm.SetState("Init");
    }    
}
#

then you'd just call new shieldDuper() somewhere and it'd make 3 shields on load

#

I assume

#

not actually tested it hollowface

buoyant wasp
#

is fury still broken in the latest BR?

lusty lantern
#

Why do I feel like someone is making a mod where you fight using only the dream shield?

buoyant obsidian
#

;)

leaden hedge
#

yes it is still broken hollowface

buoyant wasp
#

can we make it not broken and also work at full health even if you get hit and then heal? ๐Ÿ˜›

#

vs broken in both regards

#

i know, i'm needy

leaden hedge
#

i'll fix it hollowface but not for the second case

lusty lantern
#

Hmmm.. wonder if there's a way to get dreamshield modded so it faces with say a mouse, and does damage on a 'nail swing'...

#

No that would basically be like some sort of ranged parry design...

buoyant obsidian
#

I can't get it to work :(

leaden hedge
#

rip

#

if I'm bored later I'll try and figure it out hollowface

hazy sentinel
#

infinite dreamshield mod pls

#

then it'll actually be good

buoyant obsidian
#

I'm trying for the Memeshield

#

but FSMs :(

leaden hedge
#

well just, try duping one

#

the FSM code should be right

buoyant obsidian
#

doesn't do a thing

ornate rivet
rain cedar
#

Finite state machine

leaden hedge
#

hmm

#

I wonder if it has code to stop it making dupes

hazy sentinel
leaden hedge
#

GameObjectIsNull ooh

#

yeah it won't spawn 2

#

hmm

buoyant obsidian
#

It won't let me create a shield without the charm equipped

solemn rivet
#

good news, verulean

#

next bonfire patch will prevent duping

hazy sentinel
#

good news, verulean

buoyant obsidian
#

good nudes, verulean

rain cedar
#

Glad to see I'm not the only one here with crap internet

buoyant obsidian
#

I sometimes can't load videos :)

solemn rivet
#

ffs

hazy sentinel
#

don't you mean fsm

solemn rivet
#

can't you instantiate two shields?

#

btw, I managed to solve the issue with blackmoth where the dash kept reverting to 1 damage

#

but it still sometimes does no damage

#

but that's a vanilla bug, so not my problem

hazy sentinel
#

duping is a vanilla bug so it's not your problem ๐Ÿ˜ 

solemn rivet
#

you can still dupe

#

I just won't give you any more levels

#

so don't waste your time

leaden hedge
#

oh yeah @rain cedar , is there any chance of a tookDamage(int damage), that gets called when health actually gets decreased

#

instead of before damage gets calculated

#

@buoyant obsidian

            FSMUtility.LocateFSM(GameObject.Find("Charm Effects"), "Spawn Orbit Shield").FsmStates[3].Actions[0].OnEnter();
            FSMUtility.LocateFSM(GameObject.Find("Charm Effects"), "Spawn Orbit Shield").FsmStates[3].Actions[2].OnEnter();
#

that spawns a dreamshield

rain cedar
#

Yeah I suppose that's a good hook to have

leaden hedge
#

@buoyant obsidian you only need to do the first line once, the second line actually spawns the shield

buoyant obsidian
#

Thanks

leaden hedge
#

as for desync'ing or spawning multiple, thats on you hollowface

buoyant obsidian
leaden hedge
#

well that was fast

buoyant wasp
#

do they despawn when hit?

leaden hedge
#

also I should probably go down from 0.5.76 to 0.6.0

buoyant obsidian
#

Nope :)

buoyant wasp
#

lol

#

.76, great iterations, did you manually update the number every build? or did you break down and batch in the build incrementer?

leaden hedge
#

I update it every build

buoyant wasp
#

yuck

leaden hedge
#

you telling me I can get it automatically increment

#

that would have saved minutes

buoyant wasp
#

lol, i think there is a way, yes. at work i use gitversion which just sets the version info based on the commit hash, but i'm pretty sure you can auto-increment stuff on build

leaden hedge
hushed eagle
#

i installed the debug mod so i could check the health on bosses, and the enemy panel doesn't seem to be registering bosses, or at least not failed champion

#

any help?

leaden hedge
#

double tap f9

rain cedar
#

Or pause and press scan

solemn rivet
#

how do I set mod version for the api?

rain cedar
#
{
    return "Whatever";
}```
buoyant wasp
#

i did it this way in the randomizer overlay

hushed eagle
#

huh. the scan button isn't doing thing but double tapping f9 picks it up even while paused. weird but good enough i guess

rain cedar
#

Maybe the scan button is broken

#

Should have the same effect

#

Oops

hushed eagle
#

enabling auto scan didnt help either

leaden hedge
#
        public static String version = "version";
        public static String current;

        public string GetCurrentVersion()
        {
            try
            {
                System.Net.WebClient web = new System.Net.WebClient();
                web.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";      
                return web.DownloadString("https://www.yoursite.com/version.txt");  
            } catch (Exception e){
                return version;
            }
        }

        public override string GetVersion()
        {
            if (current == null)
                current = GetCurrentVersion();
            if ( current == version )
                return version;
            return version + " | UPDATE REQUIRED";
        }

if you want to be able to check for updates from an external source @solemn rivet

buoyant wasp
#

only if the external service is http

leaden hedge
#

hmm

hushed eagle
#

is there a way to edit the hotkeys?

buoyant wasp
#

we talked about that remember? ๐Ÿ˜‰

leaden hedge
buoyant wasp
#

if you have the unity mono stuff installed

#

yes

#

cause it includes the CA certs

leaden hedge
#

oh

buoyant wasp
#

if you don't, the CA repo is empty

leaden hedge
#

yeah, you have to point it at a http site hollowface

buoyant wasp
#

public static string Version = FileVersionInfo.GetVersionInfo(Assembly.GetAssembly(typeof(PlayerDataDump)).Location).FileVersion;

#

you could then set the assembly version with something like this

#

then you don't have to worry about versioning (if you already use a source control system)

leaden hedge
#

fk source control, just push everything to master

#

and hope it works

buoyant wasp
#

well, you still can, i'm just saying that will take the commit and make your version value based on that and tags, so you could still do tag 0.6.0 and it'd just append -asf3423 to it

#

even if you do it manually, i'm still a fan of using the assembly version so that you can right click the dll and get the version without booting the game

buoyant obsidian
#

FSMUtility.LocateFSM(GameObject.Find("Charm Effects"), "Spawn Orbit Shield").FsmStates[3].Actions[0].OnEnter();
FSMUtility.LocateFSM(GameObject.Find("Charm Effects"), "Spawn Orbit Shield").FsmStates[3].Actions[2].OnEnter();

#

Any way to know what the actions are aside from guessing and checking?

leaden hedge
#

yes

#

do LogFSM(fsm);

#

and check ModLog

#

assuming you are using api

buoyant obsidian
#

No api :(

#

It's 1.2.1.4 now right?

leaden hedge
#

it is

#

you could change it

#

to do Debug.Log() instead of ModHooks.ModLog()

#

and it'd put it into the outputlog.txt

buoyant obsidian
#

Now am I adding this class to the .dll or...?

leaden hedge
#

then do FsmUtils.FsmUtil.LogFSM(fsm);

buoyant wasp
#

kdt, is bossrush waiting to calculate what the drops are until the drops happen?

leaden hedge
#

nope its all done at the start again

buoyant wasp
#

hmm

#

when you kill the first boss there is noticable lag

leaden hedge
#

its making the labels and shinies

#

lots of instantiation

buoyant wasp
#

hmm, but that only happens the first time? cause future bosses die and spawn shinies fast

leaden hedge
#

it does it 7 times on the first boss, but only 3 times on others

buoyant wasp
#

hmm, guess its not a huge thing, just wondering if you could hide it in the load screen so it doesn't seem like it takes longer

leaden hedge
#

I need to wait for FK to drop city crest

#

to be able to steal everything from

buoyant obsidian
#

Uh where would I get a blank modding api .dll

#

like what's the bare minimum required stuffs

leaden hedge
buoyant obsidian
#

Thanks

leaden hedge
#

should only have a single hook

#

I was even too lazy to rename the names from PlayerDataDump hollowface

buoyant obsidian
#

I'm lost as fuck here, I don't know what any of this is or what to do with it :)

leaden hedge
#

do you have visual studio?

buoyant obsidian
#

yep

leaden hedge
#

double click ExampleMod.sln

swift cairn
#

how do I install the boss rush mod?

leaden hedge
#

install the api

#

then drag BossRush.dll into /Mods/

swift cairn
#

where can I download the api?

leaden hedge
#

pinned gdrive

buoyant obsidian
#

shit Visual Studio Code is different from Visual Studio isn't it

swift cairn
#

thanks

leaden hedge
#

itshould be able to open it

#

try opening the .csproj

#

in source

buoyant obsidian
#
# Visual Studio Express 2013 for Windows Desktop
VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExampleMod", "Source\ExampleMod.csproj", "{E3E4D0B7-656C-6C50-7567-696E2E57696E}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {E3E4D0B7-656C-6C50-7567-696E2E57696E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {E3E4D0B7-656C-6C50-7567-696E2E57696E}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {E3E4D0B7-656C-6C50-7567-696E2E57696E}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {E3E4D0B7-656C-6C50-7567-696E2E57696E}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
EndGlobal
#

That it?

#
using System.Collections.Generic;
using System.Linq;
using Modding;
using GlobalEnums;

namespace ExampleMod
{
    public class ExampleMod : Mod
    {

        private static string version = "0.0.1";

        public override string GetVersion()
        {
            return version;
        }

        public override void Initialize()
        {
            ModHooks.ModLog("Initializing PlayerDataDump");

            ModHooks.Instance.AfterAttackHook += onAttack;

            ModHooks.ModLog("Initialized PlayerDataDump");
        }

        //This will get called on attack
        public void onAttack(AttackDirection dir)
        {
            ModHooks.ModLog("Attacked!");
        }
    }
}
leaden hedge
#

yes thats the code

buoyant wasp
#

Visual Studio Code is not visual studio

leaden hedge
#

I'm not sure if vs code supports csharp out of the box

buoyant wasp
#

and i don't think it knows or understands sln's

#

visual studio community edition 2017 is free tho

#

so

swift cairn
#

wait so do I just make a \Mods\ folder?

leaden hedge
#

no

#

did you install the api

swift cairn
#

api as in the mod itself or did I miss something

leaden hedge
#

go to
Hollow Knight\hollow_knight_Data\Managed\Mods

swift cairn
#

there's no \Mods

leaden hedge
#

then you didn't install the api

#

go to the gdrive

#

and download the modding api

#

install that

swift cairn
#

the first pinned message?

leaden hedge
#

yes

swift cairn
#

oh ok I get it now

buoyant wasp
#

well, that was neat

#

killed hornet

#

no drops

leaden hedge
#

just once or?

buoyant wasp
#

just once so far

#

1 of 3 attempts

rustic fossil
#

Are there mod descriptions somewhere?

young walrus
#

Kill her harder

buoyant wasp
#

thought you were in ireland

young walrus
#

Finland

buoyant wasp
#

knew it was a land of some sort

young walrus
#

It's 5 am. Can't sleep.

buoyant wasp
#

eww

leaden hedge
#

both of those places are fake

young walrus
#

Slept from 4 pm to midnight

#

Traveling halfway around the world messes with you

buoyant wasp
#

are you resetting all the variables on new game? cause somehow i carried grimmchild over from the previous run

leaden hedge
#

shhhh

buoyant wasp
#

@rustic fossil - each mod has a readme usually

solemn rivet
#

I beat hornet and got drops, so

buoyant wasp
#

Dunno if the main readme has a single unified list

#

first 2 times i killed hornet, got drops, 3rd time didn't

solemn rivet
#

Also, beat Mantis Lords and Gruz Mother without getting hit but only got one pickup

leaden hedge
#

did you dive

solemn rivet
#

Nope

#

Didn't have dive

buoyant wasp
#

or have some sort of otherwise invulnerable frames?

solemn rivet
#

Um... Does shield count?

buoyant wasp
#

holy crap

#

@leaden hedge

solemn rivet
#

Even so, I think I picked it up after that

buoyant wasp
#

i think you left in some debug code

#

cause I just 1 shot false knight

leaden hedge
#

oh yeah lol

#
PlayerData.instance.nailDamage = 65;
solemn rivet
#

XD

#

Rip in rekt

leaden hedge
solemn rivet
#

I had nail 3,long nail, dashslash and vengeful

leaden hedge
#

well I asked for another hook, for after the damage function

#

that actually returns delta health

solemn rivet
#

Oh

leaden hedge
#

so that should be more accurate at determining if you actually took damage

solemn rivet
#

Maybe I did have shield and just don't remember it then

#

Yeah, that must be it

leaden hedge
#

like baldur shell breaks it

#

dive breaks it

#

carefree breaks it

solemn rivet
#

Nah, it was the dreamshield, not grimmshield

leaden hedge
#

I've not tested dreamshield

solemn rivet
#

Anyway, I'm out

leaden hedge
#

alright later

solemn rivet
#

Loving the mod so far btw

leaden hedge
#

also I like VS' automatic versioning system, yeah just put the days and seconds since, january 1, 2000 in there

buoyant wasp
#

huh, didn't even know that existed, sweet ๐Ÿ˜ƒ

leaden hedge
#

yeah thats why boss rush now says, 0.6.6520.5630

buoyant wasp
#

so, this new hook, just needs to fire after at the end of the takedamage routine?

leaden hedge
#

I think theres playerData.takeHealth

buoyant wasp
#

yeah

leaden hedge
#

which might be more accurate

buoyant wasp
#

there's already a hook for that

#

OnTakeHealth

#
    public void TakeHealth(int amount)
    {
        amount = ModHooks.Instance.OnTakeHealth(amount);
        if (this.healthBlue > 0)
        {
            this.damagedBlue = true;
            this.healthBlue -= amount;
            if (this.healthBlue < 0)
            {
                this.health += this.healthBlue;
                return;
            }
        }
        else
        {
            this.damagedBlue = false;
            if (this.health - amount <= 0)
            {
                this.health = 0;
                return;
            }
            this.health -= amount;
        }
    }
leaden hedge
#

hmm, now is there any reason, I wouldn't use this

#

well its probably better than the current hook zzz

#

not sure if I want to count hazards as damage or not

buoyant wasp
#

your existing code does doesn't it?

#

oh, i guess right now you can check the hazzard type

leaden hedge
#

I can't think of any reason this would give a fake positive

#

unless something does takeHealth randomly

buoyant wasp
timber gale
#

How do I install the boss rush?

#

And is it compatible w/debug mod

buoyant wasp
#

installed the same way as debug

#

and yes, it is compatible

timber gale
#

Cool, thanks!

leaden hedge
#

tfw you get 2 nail upgrades, f str, and fury before WK

#

killing them in 5 hits FeelsGoodMan

swift cairn
#

how do I do the boss rush itself

buoyant wasp
#

install the modding api, then drop the bossrush dll in the mods folder

#

@leaden hedge - Glubber elegy + fury is normally buffed at 1hp, thoughts on making it work the same with that unhit fury state?

leaden hedge
#

grubberfly works completely differently to fury

#

it actually checks if hp == 1, in HeroController.attack

buoyant wasp
#

ah

#

well...that's new

#

died to CG2, ended up in kings pass

leaden hedge
#

oh

#

yeah

#

thats probably er

#

cg2 doesn't actually have a variable associated with it

buoyant wasp
#

lol

swift cairn
#

no but how do I start it when I installed

buoyant wasp
#

you just start a new save

#

it's all or nothing

swift cairn
#

oh ok

#

do you get upgrades in between bosses or something

#

or are there none

buoyant wasp
#

each boss drops 3 items

#

if you took no damage, you can take 2 of them

#

if you took any damage, you can take 1

buoyant obsidian
#

umm was that a damageless nightmare god grimm fight I just watched

lusty lantern
#

Maybe

#

Are you really surprised?

amber plank
#

where? i must see this

buoyant obsidian
#

After Steel Glass Soul speedrun nothing surprises me

amber plank
#

nothing is impossible

dapper folio
#

make it harder

lusty lantern
#

Somewhere, someone is working on old nail only no charms lowest upgrades steel glass soul NGG hitless.

amber plank
#

but still is cool to see

dapper folio
#

stick to your readme

amber plank
#

maybe leave the normal one avaible but stillmake a harder one for people to beat

dapper folio
#

NGG+

#

NGG+2

#

NGG+3

#

etc

buoyant obsidian
#

oh nvm he took some damage fighting NGG

dapper folio
#

still beat it

dapper folio
#

we must inform kdt

buoyant obsidian
#

Radiant God Radiance

amber plank
#

KDT if you see this i recommend leaving the normal NGG on the drive but still make the harder one

#

lol

#

i can see tha

buoyant obsidian
#

Nah don't make a harder one, make harder Radiance

lusty lantern
#

Heh...

#

So just constant swords, laser, and energy balls?

buoyant obsidian
#

it's important to have it difficult yet attainable

amber plank
#

lets have radiance attacks go faster and the beams that go across the screen never stop coming lol

#

the ones you need shade cloak for

lusty lantern
#

Heh... Imagine making the beams go vertical instead of horizontal.

amber plank
#

DO BOTH

leaden hedge
#

it'd be the same

#

but you need dashmaster

lusty lantern
#

No.

#

Have it originate from Radiance in a circle!

buoyant obsidian
#

constant lance rain and beam waves

lusty lantern
#

So you have to dodge around them.

buoyant obsidian
#

not so much that dashmaster is needed

young walrus
#

That fight is also segmented

amber plank
#

one thing i dont like about fights like ngg and radiance at times is just luck just hope that lucks on your side at times

#

though sitll amazing

young walrus
#

Trinomi hasn't beaten it yet in one go

amber plank
#

segmented?

#

ah

#

but he did beat ti at some point

#

correct?

lusty lantern
#

As noted, they said it was rng based for the final phase.

amber plank
#

i havent checkewd the video yet but ive tried the fight before

leaden hedge
#

its only the last phase that is segmented

amber plank
#

and yea a bit to RNG

lusty lantern
#

Which makes sense, given that the grimm who was busy doing spikes the entire fight stops.

#

And starts saying oh hi there hope you can handle two.

young walrus
#

He's gotten to the final phase a bunch, but after awhile, used the debug MOD to get.there faster

amber plank
#

Skill over Luck i say

buoyant obsidian
#

psst what's segmented mean?

young walrus
#

Cheated

lusty lantern
#

You notice how they paused?

buoyant obsidian
#

gasp

young walrus
amber plank
#

i thought it ment it was in multiple parts put into one part

buoyant obsidian
#

I didn't watch the full thing, it's 5 minutes hollowlenny

amber plank
#

i was wrong lol

leaden hedge
#

I might make them sync like, mantis lords

lusty lantern
#

They probably just restarted from that pause point if they lost.

young walrus
#

He's beaten all phases, just not all at the same time

lusty lantern
#

I mean, the mantis lords have unsync'd

amber plank
#

ah

buoyant obsidian
#

load mantis lords into radiance

amber plank
#

so nobody as beaten it yet

young walrus
#

Not legit, no.

amber plank
#

well its to rng so i aint trying

lusty lantern
#

And question. If two grimms do the jump fire thing at the same time, can they cover the entire screen in fire?

young walrus
#

That's kinda why segmented is needed

lusty lantern
#

Like the big balls of fire raining from above.

leaden hedge
#

probably not considering they'd aim at you

amber plank
#

honestly im impressed to see trinomis fight working out that well

young walrus
#

Not saying I disagree with what Trinomi did by any means

amber plank
#

even if its segmented

leaden hedge
#

and you should stand in the corners so they can only attack in one direction

young walrus
#

You can use dive for the iframes

lusty lantern
#

You can. But that might be difficult to keep doing.

young walrus
#

It is

lusty lantern
#

More so if RNg means they do the _/๐Ÿ’ฅ

young walrus
#

Cuz it's NGG

#

Dat ain't an easy fight

lusty lantern
#

Random Number God Grimm?

amber plank
#

from trinomi playstyle during the fight id say a charm build of spell damage and something like soul catcher/soul eater

#

something like that

#

just a guess

leaden hedge
#

a lot of charms are pretty much required

#

long nail / mop, and dash master

#

you want spell twister and soul catcher / soul eater too

amber plank
#

anything rng or luck based for a fight is kinda unfair to me not complaining or insulting the fight just dont like them as much

#

still 2 grimms wtf

#

that insanity

young walrus
#

RNG dependent fights are totally unfair

#

But hey, it's a mod

amber plank
#

indeed skill over luck

#

oh goood

#

god

#

pufferfish in ngg

#

so odd question how does one or how would one modify a sprite or change them?

swift cairn
#

is it possible to do a boss rush not on a new save?

amber plank
#

no

timber gale
#

With the boss rush, how are the available charms chosen? Are they in sets or entirely random?

swift cairn
#

random I think

tribal nexus
#

Oh is boss rush a thing again?

#

That's good :)

#

I'll give it a try when I get the chance

amber plank
#

aits random but you have to restart the game and make a new save for new set of random stuff

tribal nexus
#

Okey

noble trout
leaden hedge
#

happens if you leave the arena

rustic fossil
#

Has someone made an infinite charm mod?

#

Overcharming to the max?

rain cedar
#

Yeah, it's called patching down to 1.0.0.6

rustic fossil
#

Hmm?

rain cedar
#

That was a "feature" of the initial release

rustic fossil
#

Oh, interesting

#

I'd be curious to see it with the new ones, too, though

#

But if it was in the code I bet it would be easy to add again

rain cedar
#

You can just change all the charm costs to 0 in your save

leaden hedge
#

boss rush sets all the charm costs to 0

rustic fossil
#

Oh, there's a boss rush?

leaden hedge
#

so you can just load it up, s+q and reload it without boss rush enabled

rustic fossil
#

Or is it a mod?

leaden hedge
#

its a mod

rustic fossil
#

I may just make a dedicated one

rain cedar
#

Something like this is only like 5 lines of code

#
{
    public override void Initialize()
    {
        ModHooks.Instance.NewPlayerDataHook += MakeCharmsFree;
        ModHooks.ModLog("Free charm mod initialized");
    }

    public void MakeCharmsFree(PlayerData pd)
    {
        for (int i = 1; i <= 40; i++)
        {
            pd.SetIntInternal("charmCost_" + i, 0);
        }
    }
}```
rustic fossil
#

Yep, that's about what I thought

#

Nice, thank you!

amber plank
#

question how would one modify change an sprite for an enemy?

rain cedar
#

You would need to change the resource file containing it

#

Unity studio can pull assets from the game, but I'm not sure if it can repack it with changes

#

Worth trying

leaden hedge
#

it can

#

not sure if you can edit atlas offsets though

rain cedar
#

Probably not

#

But it should be fine as long as the new sprites are the same resolution

amber plank
#

well i wana try modifying an sprite for something im thinking about working on

noble trout
#

oh sorry i didnt know

#

when is the randomizer going to update?

swift cairn
#

when is lightbringer gonna update hollowsad

amber plank
#

not sure

#

is there an new update to boss rush?

swift cairn
#

idk

#

but grimm is there

leaden hedge
#

are you on 0.6.xxxx.yyyy

#

I dont remember the actual numbers

swift cairn
#

yeah

noble trout
#

was the google drive file for the boss rush updated?

swift cairn
#

idk

noble trout
#

to the current version on github i mean

leaden hedge
#

no

noble trout
#

that is the current version i assume

#

cool cool

amber plank
#

does the nail damage increace when you chose it? nail in the inv doesnt change

noble trout
#

i think i t does

buoyant wasp
#

randomizer update is probably a bit out. it's totally playable right now though. the stuff being added/changed will be, in general, minor

#

also, hate my life when mantis claw was in hiveblood

heavy geyser
#

"I'll fight flukemarm when i find quick slash"

#

Plot twist, she had it all along. My last charm

buoyant wasp
#

i'm assuming you didn't have dive?

#

oh, no, you had to have had dive

#

so.....1 shot him

#

literally easiest boss in the game with dive

heavy geyser
#

Thanks i never played the game before ๐Ÿค”

buoyant wasp
#

no idea if you're being serious or no....

amber plank
#

have yet to time the dive on fluke to 1 shot it

buoyant wasp
#

it's not a timing

amber plank
#

you know whast i ment

buoyant wasp
#

you can do it at any point in the fight

amber plank
#

cant seem to get it right

#

always just flys off them

buoyant wasp
#

it's all left/right alightment

#

gotta be dead center

amber plank
#

i know

#

but it slips off

#

so many times

buoyant wasp
#

i failed quite a few times myself when i learned it

#

several hours of failing in fact

heavy geyser
#

Speed runners are weird

#

Don't worry about it

amber plank
#

well fluke will be easy if i can get past watcher knighs

#

knights

#

their nto that hard but i always have trouble with them

amber plank
#

just got the fluke 1 shot finnaly

#

lol

#

now i see how it works

#

does the boss rush run save?

#

if i quit to menu and return

late sphinx
#

i think so

amber plank
#

it didnt

amber plank
#

and its like this every time on hornets fight

#

ive redone the boss rush 3 times and each it bugged ehre on this fightr

heavy geyser
#

I've softlocked on radiance twice. Its ok

#

On boss rush

amber plank
#

ive also found an bug where the collector cant be hit in his ending stage

noble trout
#

this is a vanilla bug

amber plank
#

ive never seen it

#

till boss rush

#

and with boss rush it seemed to happen everytime glad i tend to have grimmchild at that point

#

downloaded the bossrush again and the soul tyrant boss is bugged again

buoyant wasp
#

i think the drive version is out of date

#

get the last one posted by KDT last night

#

but yeah collector is definitely a vanilla bug

#

especially if you use something like flukenest

#

the current version is 0.6.5something

amber plank
#

0.6.6 somethingh

#

which i have

#

these are bugs on the most revent b uilf

#

sorry cant spell right onsd mobile ahte it

timber gale
#

Is it that you kill him to quickly or is it with the use of spells? I'd like to try to avoid the bug

buoyant wasp
#

@leaden hedge - not that it matters a ton, but any idea why mawlek has this obsession with the right side? (in boss rush)

#

it's as if his sense of spacial position is shifted

leaden hedge
#

dunno

solemn rivet
#

also, how are you setting nail upgrades in boss rush?

#

blackmoth doesn't seem to like it

#

dash damage doesn't increase when I pick up sharpened nail

buoyant obsidian
#

is it possible that you're spawned directly into the Mawlek arena instead of the left area where you walk in?

leaden hedge
#

pd.nailDamage = xx

solemn rivet
#

oh

#

yeah...

leaden hedge
#

you are spawned into the arena

#

are you check upgrades or nail damage?

#

I can up upgrades# on pickup

solemn rivet
#
                if (PlayerData.equippedCharm_16)
                {
                    this.dashDamage *= 2;
                }
                if (PlayerData.equippedCharm_25)
                {
                    this.dashDamage = (int)((double)this.dashDamage * 1.5);
                }
                FSMUtility.LocateFSM(this.sharpShadow, "damages_enemy").FsmVariables.GetFsmInt("damageDealt").Value = this.dashDamage;```
buoyant obsidian
#

it's possible that spawning into the arena means the Mawlek gets set to the right of normally where he's set but I have no idea :)

solemn rivet
#

yeah, that would help KDT!

#

nah, he's just afraid of you, you beast

amber plank
#

kdt for some odd reason even with the new build for boss rush the soul tyrant fight seems to be puting me in the ground so i can barely move is this an often bug?

leaden hedge
#

shouldn't be, I moved the spawn point in the new version anyway

rustic fossil
#

Is palette/color editing possible so far?

buoyant wasp
#

that looks like someone colored the shell with crayon ๐Ÿ˜›

solemn rivet
#

why would you do that tho

leaden hedge
solemn rivet
#

wait

#

does debug mod use the fsm dump mod?

#

because the hack_fsm folder keeps re-appearing in my saves folder

leaden hedge
#

no thats a playmaker.dll mod

solemn rivet
#

weird

#

I had this earlier when GOG kept backing up the whole saves folder

#

but I just checked the backed up version and it doesn't contain hack_ or save_fsm

leaden hedge
lusty lantern
#

glhf

leaden hedge
#

the fight is pretty easy even without his sprite tbh

trim totem
#

Fight is easy one handed with eyes closed tbh cus I'm a pro gamer

solemn rivet
#

ffs

#

I did something to blackmoth and it's now broken forever

#
        FSMUtility.LocateFSM(this.sharpShadow, "damages_enemy").FsmVariables.GetFsmInt("damageDealt").Value = this.dashDamage;
                if (oldDashDamage != dashDamage)
                {
                    ModHooks.ModLog(string.Concat(new object[]
                    {
                "Sharp Shadow Damage set to ",
                this.dashDamage
                    }));
                    oldDashDamage = dashDamage;
                }```
#

anyone see any glaring nre?

rain cedar
#

What's the problem you're getting?

solemn rivet
#

null reference

#

in that method

rain cedar
#

Where in it?

buoyant wasp
#

no line numbers?

solemn rivet
#

while setting dash

rain cedar
#

So in here?

{
    FSMUtility.LocateFSM(this.sharpShadow, "damages_enemy").FsmVariables.GetFsmInt("damageDealt").Value = this.dashDamage;
    if (oldDashDamage != dashDamage)
    {
        ModHooks.ModLog(string.Concat(new object[]
        {
    "Sharp Shadow Damage set to ",
    this.dashDamage
        }));
        oldDashDamage = dashDamage;
    }
}```
solemn rivet
#

I figure it's not getting the sharpShadow object

#

I assume so, yeah

rain cedar
#

Split up that first line

#

Figure out where it's getting null

buoyant wasp
#

oh, that reminds me, i need to change the Modding API to not try and load .pdb files from the Mods folder, wanna see if i can make it so that PDB files are loaded properly

solemn rivet
#
  at Blackmoth.BlackmothMod.DamageUpdate () [0x00000] in <filename unknown>:0  while setting Dash Damage
Sharp Shadow Damage set to 5
System.NullReferenceException: Object reference not set to an instance of an object
  at Blackmoth.BlackmothMod.DamageUpdate () [0x00000] in <filename unknown>:0  while setting Dash Damage```
#

so it doesn't work - then it works - then it doesn't anymore, ever

#

FSMUtility.LocateFSM(this.sharpShadow, "damages_enemy").FsmVariables.GetFsmInt("damageDealt").Value = this.dashDamage;this is the piece of code that's giving the exception

#

it's not getting the sharpShadow object, even though it was before, with this exact same code...

rain cedar
#

Maybe the object doesn't exist at the time you're calling that

buoyant obsidian
#

restart PC

solemn rivet
#

it's running on Update()

#

I'll restart my pc

#

sigh

#
public void GetSharpShadow(GameObject gameObject)
        {
            if (sharpShadow == null && gameObject.tag == "Sharp Shadow")
            {
                sharpShadow = gameObject;
                ModHooks.ModLog("Set Sharp Shadow object: " + sharpShadow.name);
            }
        }```
#

I'm sure this is the cause because this is not getting written in the log

#

nope, still doesn't work

buoyant obsidian
#

RIP

solemn rivet
#

oh, some progress

#

got it

buoyant wasp
#

what was the issue (inquiring minds)

solemn rivet
#

the issue was obvious

#

sharp shadow wasn't instantiated

#

so the game returned a NRE whenever I tried setting its damage

buoyant wasp
#

but why did it work, then not?

solemn rivet
#

prolly I was dashing as soon as I got control

#

this is how it is now:

#
        {
            if (sharpShadow == null || sharpShadow.tag != "Sharp Shadow")
            foreach (GameObject gameObject in Resources.FindObjectsOfTypeAll<GameObject>())
            {
                if (gameObject != null && gameObject.tag == "Sharp Shadow")
                {
                        this.sharpShadow = gameObject;
                }
            }
        }```
#

and it only returns System.NullReferenceException: Object reference not set to an instance of an object at Blackmoth.BlackmothMod.DamageUpdate () [0x00000] in <filename unknown>:0 while setting Dash Damage Sharp Shadow Damage set to 5now

#

and stops after that

#

so it works

buoyant wasp
#

interesting, how often does that get called? how expensive is a foreach of all game objects?

solemn rivet
#

it's expensive, but the first condition ensures it only runs once

buoyant wasp
#

ah, right, sharpshadow is set

#

so, it won't be null

solemn rivet
#

yup

rain cedar
#

You could make it a bit cheaper by adding a break after setting it

buoyant wasp
#

it's too bad resources isn't a dictionary

solemn rivet
#

I also check if it's the correct object (in case something goes awfully wrong for some reason)

#

oh, yeah

#

thanks sean!

#

thanks to KDT for making the BossRush compatible with it

solemn rivet
#

now I'll try to port bonfire over to the api

buoyant wasp
#

๐Ÿ‘

solemn rivet
#

is there a hook for GameManager.Start()?

rain cedar
#

No, but running your own component with a start function might work

#

Not sure what purpose you want the hook for

solemn rivet
#

oh, nvm, I don't need it

#

and how would I add new classes? Just declare them with : Mod at the end?

leaden hedge
#

no

#

just do

public class newClassName : MonoBehaivour
{
    public void Start(){
    //stuff
    }
}

then on game load just do

GameManager.instance.gameObject.addComponent<newClassName>();
solemn rivet
#

okay

buoyant wasp
#

the only class you have to have the does :Mod is the main one

#

though i imagine bonfire needs to save data right?

#

if so, do Mod<T> where T is IModSettings

#

i'll post some sample code to do that here in a bit

#

about to eat dinner

solemn rivet
#

oaky

#

yeah, one of the classes is just to save stuff

solemn rivet
#

@leaden hedge : That's not working for me

leaden hedge
#

that doesn't really help me in anyway

solemn rivet
#
        {
            ModHooks.ModLog("Bonfire Mod initializing!");

            GameManager.instance.gameObject.AddComponent<LevellingSystem>();
            ModHooks.Instance.CharmUpdateHook += BenchApply;
            ModHooks.Instance.AttackHook += AtkSpdAfterAttack;

            ModHooks.ModLog("Bonfire Mod initialized!");
        }```
leaden hedge
#

whats not working about it

solemn rivet
#

levellingSystem has a onGui, but nothing is showing

leaden hedge
#

not in the initialize

solemn rivet
#

oh

leaden hedge
#

do like public static LevellingSystem;

rain cedar
#

You could do it in initialize and add your own gameobject to attach it to

leaden hedge
#

then onload do LevellingSystem = GameManager.instance.gameObject.AddComponent<LevellingSystem>();

#

yeah you could add it to a new gameobject

rain cedar
#

If you're doing it the way I said be sure to add:
GameObject.DontDestroyOnLoad(newthing);

solemn rivet
#

I'm sorry, I don't get what you mean by "onload". I thought that meant "on Initialize", but I guess I was wrong...

leaden hedge
#
UnityEngine.SceneManagement.SceneManager.sceneLoaded += onSceneLoad;
#

wil get called everytime a scene gets loaded

solemn rivet
#

oh

rain cedar
#

Wouldn't that result in a ton of duplicates?

#

I can't imagine GameManager is reinitialized every load

leaden hedge
#
            if (gm == null)
            {
                gm = GameManager.instance;
                gm.gameObject.AddComponent<BossRushUpdate>();
            }
#

its not

#

I guess you could just put it, on loading a save

#

because you're going to have to reset it then anyway

buoyant wasp
#

ok, so saves. You can approach this in one of 2 ways. I think the first way I'm going to present is cleaner and easier to follow, but the 2nd way works just as well

#

way 1:

#
public class RandomizerMod : Mod<RandomizerSettings>
{

    public override void Initialize() {
    ModHooks.Instance.BeforeSavegameSaveHook += Randomizer.SaveGame;
        ModSettings = (RandomizerSettings)Settings;
    }
}
#
[Serializable]
    public class RandomizerSettings : IModSettings
    {
        public int Seed {
            get => IntValues.ContainsKey(nameof(Seed)) ? IntValues[nameof(Seed)] : 0;
            set
            {
                if (IntValues.ContainsKey(nameof(Seed)))
                    IntValues[nameof(Seed)] = value;
                else
                    IntValues.Add(nameof(Seed), value);
            }
        }

        public string Difficulty
        {
            get => StringValues.ContainsKey(nameof(Difficulty)) ? StringValues[nameof(Difficulty)] : null;
            set
            {
                ModHooks.ModLog(nameof(Difficulty) + " = " + value);
                if (StringValues.ContainsKey(nameof(Difficulty)))
                    StringValues[nameof(Difficulty)] = value;
                else
                    StringValues.Add(nameof(Difficulty), value);
            }
        }
    }
#
    public static class Randomizer
    {
        public static RandomizerMod Mod;
        
        public static void SaveGame(SaveGameData data)
        {
            Mod.ModSettings.Seed = seed;
            Mod.ModSettings.Difficulty = hardMode ? "hard" : "easy";
        }
}
#

so, basically at it's base, the Settings class is of IModSettings, which gives you access to 4 dictionaries, (<string,int>,<string,string>,<string,bool>,<string,float>)

#

you can choose to interact with those dictionaries directly in your code

#

but honestly I find that making that interaction occur in the settings class as properties is easier. Properties like the above won't get saved, so they have to be stored and filled by the backing dictionary

#

So if you stick all that access logic in your MySettings class, then you can easily access them in your mod elsewhere

#

There are 2 events you can hook into, BeforeSavegameSaveHook and AfterSavegameLoadHook.

#

BeforeSavegameSaveHook is called after SaveGameData is instantiated and populated by the normal GameManager code, but before it's serialized to disk. This is where the base Mod<T> class will go through and save all of the mod settings into the SaveGameData. My advice is to hook into this event only if you want to do something to the Settings object before it's saved. Often you may not need to if you're maintaining it's state always.

fair rampart
#

Oy does anyone know where I can find that hardcore grimm boss mod

buoyant wasp
#

check the pins

#

it's called nightmare god grimm

#

AfterSavegameLoadHook is called right after the file has been deserialized and a SaveGameData object has been hydrated, but before PlayerData and SceneData has been assigned to their Instance versions. This is where the base Mod<T> class will automatically fill those dictionaries for each mod. Usually you don't need to hook into that event, but you can if for some reason you needed to alter something before the game had access to it.

#

so you don't need to worry about the saving or loading in most cases, just make your class that contains the properties for your settings and use that to maintain the dictionaries. The API should handle the rest most of the time.

#

also, i use the "nameof(field)" convention not because it's substantially better from a performance standpoint,but because if you rename a property, then the nameof() will get renamed too.

#

and now, afk again for 15-20

solemn rivet
#

so, getting this error: MissingMethodException: Method not found: 'System.Reflection.FieldInfo.op_Inequality'. at BonfireMod.LevellingSystem.OnGUI () [0x00000] in <filename unknown>:0

#

I googled it and it seems it's a .NET version issue?

slate owl
#

About the Randomizer, you could swap the Hunter Journal too.

rain cedar
#

If it's a version issue, try compiling against a different version of .NET

solemn rivet
#

I'm trying to do that, but I'm not that familiar with VS

rain cedar
#

I probably can't be too helpful there

#

I still use VS 2013

solemn rivet
#

it's okay

#

I'll figure something out

leaden hedge
solemn rivet
#

found it

#

oh

#

is 2013 better for some reason?

leaden hedge
#

no

#

it works and thus theres no reason to update

solemn rivet
#

well, the interface is, at least

#

that's something, right?

#

also, I made it add LevellingSystem as a component to GameManager.instance on both savegameload and newgame

buoyant wasp
#

i use VS2017 because it's the full version of VS with nothing missing, unlike the previous community releases, but honestly it's not that different. That said, I don't think 2013 can compile CS 7.0

solemn rivet
#
ModHooks.Instance.SavegameLoadHook += setupGameRefs;```
buoyant wasp
#

and CS 7 has some really, really nice stuff in it

dapper folio
#

Are those Blackmoth and Boss Rush updates I see?

solemn rivet
#

I'll add it to the gdrive later, SD

dapper folio
#

I got it

solemn rivet
#

that's the API version btw

#

also, thanks!

dapper folio
#

Is it 1.2.1.4 specific? or does it work with any API version?

solemn rivet
#

should work with any API

#

lemme double check real quick

buoyant wasp
#

does it do saves yet?

solemn rivet
#

yeah, it should work

buoyant wasp
#

cause the save functionality was 1.2.0.1+

dapper folio
#

because if that's true for the two API versions already in the folder, we can just get rid of them and have a single API zip

solemn rivet
#

blackmoth doesn't use saves

buoyant wasp
#

cool

solemn rivet
#

btw, Wyza, thanks for the explanation earlier

buoyant wasp
#

the API itself is heavily version specific

dapper folio
#

the API is, but not the mod dlls iirc

buoyant wasp
#

depends on the mod

solemn rivet
#

tbh, I didn't quite get it, but I'll try working with what you gave me later tomorrow

dapper folio
#

or are you talking about mod version and not game version

solemn rivet
#

SD: some mods are also version specific

buoyant wasp
#

eg: if the mod does something with a TGT charm or grimm, then the mod couldn't work on older versions unless it was specifically coded to be backwards compatable

solemn rivet
#

for instance, boss rush

dapper folio
#

true

solemn rivet
#

blackmoth should work on any API version, because it requires basically no hooks

dapper folio
#

I'll just replace the 1.2.1.4 API zip

#

easier that way

solemn rivet
#
            ModHooks.Instance.HeroUpdateHook += GetSharpShadow;
            ModHooks.Instance.DashVectorHook += CalculateDashVelocity;
            ModHooks.Instance.DashPressedHook += CheckForDash;```
dapper folio
#

is Boss Rush backwards compatible?

#

because if not, it should have a 1.2.1.4 tag

buoyant wasp
#

uhm.....it should work....i think

dapper folio
#

is Blackmoth?

solemn rivet
#

I don't know how KDT pools items

buoyant wasp
#

as long as its TGT+

solemn rivet
#

Blackmoth is

buoyant wasp
#

Boss Rush probably won't work 1.1.1.8

solemn rivet
#

dunno

buoyant wasp
#

@leaden hedge

solemn rivet
#

Blackmoth should work 1.1.1.8 onwards

dapper folio
#

same as API then

leaden hedge
#

boss rush requires latest version

dapper folio
#

alright

solemn rivet
#

okay

#

tomorrow I'll start adding the functionalities for Bonfire Mod

buoyant wasp
#

just let me know if you run into any issues with the save stuff. I'll be happy to help in any way i can ๐Ÿ˜ƒ

solemn rivet
#

yeah, I was about to say that

slate owl
#

Can you really get mark of pride charm with only Monarch wings?

solemn rivet
#

thank you Wyza!

buoyant wasp
#

@slate owl easily

leaden hedge
#

yes

buoyant wasp
#

you have to kill the lords, then S&Q

#

and then run back and go up

solemn rivet
#

yeah

buoyant wasp
#

it's slow as dirt, but totally doable

slate owl
#

How to reach the lords?

#

From deepnest?

buoyant wasp
#

nope

#

fungal

solemn rivet
#

Crossroads->Fungal

#

iirc

buoyant wasp
#

same way you get to them with dash

#

you'll need 2 pogos in the claw area but it's not bad

solemn rivet
#

you can lure the flying mantis

buoyant wasp
#

yup

solemn rivet
#

and use it to get enough height

slate owl
#

Youre telling this jump is possible with monarch wing only?

buoyant wasp
#

pogo->pogo->double jump, but yeah, definitely have had 3 seeds in the last week where it was done

solemn rivet
#

I was about to ask if you can't pogo on those spikes

slate owl
#

Oh, you can pogo on the spikes... Im dumb

buoyant wasp
#

hah, nah

solemn rivet
#

better not to pogo than to pogo where you can't

slate owl
#

Oh its easy-peesy.

solemn rivet
#

me trying to pogo on Greenpath's thorny vines

buoyant wasp
#

yeah, i was a little confused, makes sense now that you were trying to do it sans pogo

slate owl
#

Can you enter the mantis lords fight room from deepnest?

buoyant wasp
#

nope

#

not until you've killed them

#

that door is shut i believe

#

at least like 75% sure

hazy sentinel
#

the way is shut

buoyant wasp
#

but you'd have a hard time getting over to that spot in deepnest without any of the abilities that would trivialize getting into mantis imo

#

thanks @hazy sentinel

#

thought as much, but its a place i went to exactly once during my first run of being lost in deepnest

hazy sentinel
#

i was making a bad lotr reference but ok

wispy mist
#

Mellon

ornate rivet
#

@hazy sentinel , It was amazing

slate owl
#

I have monarch wings. I can use the path that leads to the mask shard in deepnest.

#

The UI glitches when I do the Options -> Keyboard with the Randomizer mod.

buoyant wasp
#

how so?

slate owl
#

The Option UI doesnt want to go off.

buoyant wasp
#

interesting

rain cedar
#

Like it stays open but the game starts running again?

slate owl
#

Does it glitch for you too?

rain cedar
#

Or it just doesn't close?

slate owl
rain cedar
#

Interesting

hazy sentinel
#

looks fine to me hollowface

rain cedar
#

Try to do that in a vanilla game

slate owl
#

I also have the debug mod on.

rain cedar
#

Oh, ok

#

Nevermind

#

That's because of debug mod

#

I'm toggling pause when you hit esc because otherwise there's a high chance esc will do nothing because one of the debug buttons will have focus

#

I'd rather have that bug than not be able to close menu half the time

#

Lesser of two evils and all that

amber plank
#

found another boss rush bug dying in the second crystal guardian fight will send you to kings pass for no good reason

slate owl
#

Cant kill watcher knights with lantern without mantis claw ๐Ÿ˜ฆ

rain cedar
#

Last I checked you can't kill anything with lantern

slate owl
#

Dropping the chandelure.

leaden hedge
#

no it will send you to kings pass for a good reason

#

and thats team cherries fault

slate owl
#

Nooo

#

Finally managed to beat watcher knights.

#

Requires mantis claw to go up...

hazy sentinel
#

float hollowface

slate owl
#

Thats cheating

#

In randomizer.

buoyant wasp
#

mantis claw is required for all 3 dreamers

#

so other than opening the paths to them, it's pretty pointless to do much else in those areas until you've got it

slate owl
#

I did collect it.

leaden hedge
#

yes

#

that exists based on quake level

rain cedar
#

It wouldn't be hard to fix, I'm just lazy

slate owl
#

I do have desolative dive.

rain cedar
#

I think that goes away if you have both items that get swapped with dive?

#

I don't really know

slate owl
#

Just picked up the spell again and got Hiveblood charm again.

rain cedar
#

It might just be there unconditionally

buoyant wasp
#

it doesn't matter, you dont' get anything if you re-get it

rain cedar
#

Yeah, it's a very low priority bug

leaden hedge
#

super hiveblood ๐Ÿ‘€

buoyant wasp
#

you can't get out of the room without picking it up unless you have claw at the very least and if you have claw, why are you there (most likely)

rain cedar
#

I don't think you can get out without grabbing it at all

#

There's an invisible ceiling

buoyant wasp
#

ah

slate owl
#

You must take it.

buoyant wasp
#

so yeah, it's odd to see

slate owl
#

And leaving that place requires pogo-ing ghosts.

buoyant wasp
#

yup

slate owl
#

And save-quitting at least once.

buoyant wasp
#

nope

#

only if you screw up

#

it's totally doable without s&q

slate owl
rain cedar
#

To not quit you have to either leave the floaty dudes alive to get out of the pit or break the floor without going down

buoyant wasp
#

yup

#

you can fake dive or leash the floaty dudes

#

it might be faster to s&q if you aren't used to fake dives though, just saying it isn't required

slate owl
#

And what do I do here?

buoyant wasp
#

pogo

#

off the spire thingy

slate owl
#

On?

buoyant wasp
#

the little object on the middle platform is breakable/pogoable

rain cedar
#

The lantern thingy also works

#

Two options to pogo out of there

slate owl
#

Finally outside that hell!

#

All of that for hiveblood charm.

leaden hedge
#

now get out of abyss

rain cedar
#

What was at spell twister?

slate owl
#

Spell twister was desolate dive

#

I guess it wasnt all for nothing

buoyant wasp
#

dive is really, really, really good

#

that opens up so much

slate owl
#

Really?

rain cedar
#

It only opens up like 3 things

#

Flukenest, quick slash, and soul eater