#archived-modding-development
1 messages ยท Page 38 of 1
lol, I didn't even start playing until like 1.1.8, so i have no idea what i missed
The joke is that 1.1.4.9 was never a version
lol
It went straight from 1.1.1.8 -> 1.2.1.0
1.1.4.9 must have been the version where they had optimized the game perfectly, and removed all the bugs that nsoob uses, but then someone found out and deleted it to save the speedrunners
though it is amusing that some of the lag reduction things they've done have made those tricks a little harder
Dam
i decided to go in hard
and i get glowing womb
h m m m m m
glowing womb is destroying everything
are you shitting me
NOICEE
Glowing Womb deals 7 damage so like, they're better than old nail
or 9
i don't actually know, but it's a lot
ye
ffs hardmode is not possible i tell you
Hard mode was designed for speedrunners
If you don't know a lot of the skips, you're going to have a bad time
well shit
Could we put a disclaimer on the UI that says that?
you probably should
Just so people who don't run the game don't get stuck
I mean.... It says "hard"
is that a randomiser of some kind?
i didn't think it would be that hard
you need to make the ui say the thing for stupid people like me
i didn't think i'd need to know every shortcut
So yeah. I'd stick to easy. Unless you want to learn the skips
The skips are what make it fun though, imo
How wacky the routing can get
I think my favorite is going through Crystal peaks with only wings and dash
shouldn't have skimmed through the readme
based on 999999999 i think you need pfloat too
You'll never need glitches
^
^
this is why I mod
lol
Ascend? Why, he already has ascended!
lol
well, shucks
seems like I can't make a list of all spells objects and just call that list whenever I want to change their damage
When u have crippling depression
you cant actually ascend u just fall over and over again
guess I'll just do the costly "set damage on hit" implementation
"Disclaimer: Hard means hard."
public class Spells
{
public List<GameObject> SpellList { get; set; }
public List<PlayMakerFSM> FSMList { get; set; }
public List<int> StateList { get; set; }
}
public Spells SpellData;
public void FillSpellList()
{
Spells spell = new Spells();
if (SpellData == null)
{
GameObject[] array = UnityEngine.Object.FindObjectsOfType<GameObject>();
for (int i = 0; i < array.Length; i++)
{
foreach (PlayMakerFSM playMakerFSM in array[i].GetComponents<PlayMakerFSM>())
{
if (playMakerFSM != null)
{
for (int j = 0; j < playMakerFSM.FsmStates.Length; j++)
{
if (playMakerFSM.FsmStates[j].Name == "Set Damage")
{
LogDebug("Spell found: " + array[i].name);
spell.SpellList.Add(array[i]);
spell.FSMList.Add(playMakerFSM);
spell.StateList.Add(j);
}
}
}
}
}
}
SpellData = spell;
Log("Spell List filled:" + SpellData);
}```
anyone got any idea why this doesn't work?
I've hooked FillSpellList() to HeroUpdateHook and to onSceneLoad
hmm
at BonfireMod.BonfireMod.FillSpellList () [0x00000] in <filename unknown>:0
at (wrapper delegate-invoke) GameManager/UnloadLevel:invoke_void__this__ ()
at Modding.ModHooks.OnHeroUpdate () [0x00000] in <filename unknown>:0
at HeroController.Update () [0x00000] in <filename unknown>:0 ```
well, one thing to warn you of, HeroController.Update happens alot
like I used to log at the finest level when the hook was called
but in 1 minute it logged 30,000 lines
maybe if the object isn't instantiated I can't look through its FSM?
that shouldn't be the case, because that's basically how I set the SharpShadow object in Blackmoth
and it works fine there
no, your NRE is probably because you haven't instantiated the objects in your Spells class
so
you did this
Spells spell = new Spells();
but that only makes a new Spells object
SpellsList, FSMList and StateList are all still null
add this to your Spells class
public Spells() {
SpellList = new List<GameObject>();
FSMList = new List<PlayMekerFSM>();
StateList = new List<int>();
}
it's called every frame
using QUIK MATHS wyza runs the game at 500fps 
on the menu it's between 800 and 1000
herocontroller shouldnt exist in the menu
well its update
and fetching those FSMs on every frame is gonna murder the performance
not if the list is already filled
it won't work anyway
the whole reason my code doesn't work is because of the game being coded like shit
yeah, I guess
I remember when we were trying to figure out how to set spells damage and you magically managed to make it work
it... Worked
:x
does it work when you cast multiple spells
also, you should move Spells spell = new Spells(); and SpellData = spell; Log("Spell List filled:" + SpellData); inside of your if (SpellData==null)
@buoyant wasp theres ObjectPool.Spawn(GameObject prefab, Transform parent, Vector3 position, Quaternion rotation) is what does pooling
you could trying putting a hook there that passes the gameObject to somewhere else
because thats what spawns the extra instances of stuff
oh to help with gradow's issue of the first 4 working but nothing after that?
or whatever that was
ye
yeah I could probably add something there. Can take a look when i get home this evening
hey guys
question
what does the glass soul mod do
cant find any info in the drive
1 health
Basically flower challenge deluxe
fireborn did a steel glass soul run sometime in the last couple of weeks
and it also makes your damage scale with total masks
so charms that give masks are not useless
If you open up the .zip file, there's a readme.txt that explains all the features in it.
@leaden hedge / @solemn rivet - so is there something i can do in the API to help you with the spell damage modifier problem or is that we don't even know why it's not working yet?
so, a quick rundown of what we know
what defines spells' damage is an FSM state "Set Damage"
so we tried changing that
and it worked... Until it didn't
it worked for the first few casts of each spell, and then stopped working
we figured it was because it was running out of prefabs and when it instantiated a new one, it got default damage
right, which is why kdt suggested a hook on the object initializer so you could update it when new prefabs got created. I can do that. so is it working for your first few casts at this point, or not even for those now?
not even those
here's how I'm trying to make it work
and this is what KDT came up with that worked for quake and scream:
public void spellDamage(GameObject go)
{
foreach (PlayMakerFSM playMakerFSM in go.GetComponents<PlayMakerFSM>())
{
if (playMakerFSM != null)
{
for (int j = 0; j < playMakerFSM.FsmStates.Length; j++)
{
if (playMakerFSM.FsmStates[j].Name == "Set Damage")
{
Debug.Log("[SDT] " + go.name);
FieldInfo[] fields = typeof(ActionData).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
for (int k = 0; k < fields.Length; k++)
{
if (fields[k].Name == "byteData")
{
List<byte> list = (List<byte>)fields[k].GetValue(playMakerFSM.FsmStates[j].ActionData);
list[0] = (byte)damageWithoutShaman;
list[14] = (byte)damageWithShaman;
fields[k].SetValue(playMakerFSM.FsmStates[j].ActionData, list);
playMakerFSM.FsmStates[j].LoadActions();
playMakerFSM.SetState("Set Damage");
}
}
}
}
}
}
}```
this runs under PlayMakerUnity2d.Start() and the GameObject is PlayMakerUnity2d.base.gameObject
this works on the non-api version, btw
so this works for quake/scream on non-api, but not for fireball on non-api? or did it work for all 3 on non-api?
quake/scream
k
fireball is more complicated because of its interactions with fluke and stuff
y is it called fireball in the code tho>?
i'll see what i can do about it this evening. it could be just a timing issue where we're trying to set it too early in the API
for the same reason dive is called quake
and wraiths is called scream
its not to do with that
its to do with fireballs being pooled
because you can have like 8 on screen at a time
because they changed the name at some point and the effort to go change the name in code was worth going back and changing it from fireball to vengeful spirit ๐
yeah, but @leaden hedge - shouldn't that mean that at least some of them should be affected?
it sounds like right now 0 of them are
on API, nothing works
Guys is it possible to revive myself in a steel soul run?
^
like, edit the file?
or, rather
it works
but if I try to change the hook, it doesn't
or if I try to cache the spells object in order to optimize the code, it doesn't work
@fair rampart - you can probably use the save file editor to do it, but that completely defeats the point of steel soul. like, if you wanted to revive, you shouldn't have started a steel soul save
yea
i wont actually do that
I never made it that far into a steel soul run to actually need get annoyed for dying
https://puu.sh/yq5g4/cc41d8e56a.gif here it is, working with 0 damage
(completely unrelated, what do you use to make your gifs?)
I can't speak for him but ShareX is bae
that's what i do now kdt, but was wondering if there was something that cut out that intermediate step
just "record this area as a gif, done"
ShareX can do it but it bugs out in certain fullscreen games
ShareX
Be prepared for big filesizes when recording at high fps tho
That gif was 85MB
it was super super smooth though
you want super smooth ๐ค
let me record at 600fps at 1/10th speed
then give 100 frames to each frame ๐ค
what's a mod that allows to equip all the charms?
You could downpatch and use the notch duping glitch too
That too
I just want to mess around with the game.
can you give a noob explanaition for using save mod?
but you didn't even say where it is
a link to downlad it?
It's in the pins
thanks 
You can also give yourself every charm, if you so desire
except the 4 new ones
just do bossrush, do perfect kills on every boss, and you'll end up at radiance with all the charms or nearly so.
๐
Except for perfect kills on gruz mother, that's impossible
lol
yo guys
I think I might be softlocked (or I suck) with randomizer
I picked up mantis claw at the place of fury
then got whats supposed to be: Vengeful spirit, soul catcher, and I unlocked salubra, sly and the map shop.
I don't have any spells nor additional movement abilities
oh wait I can go to howling cliffs I think
joni's blessing dark room hype!!
did you go through the dark room in crystal peaks to get to dream nail/shield yet?
could also do a shade pogo at salubra to get over there
you have claw
you can get to like half the game with claw ๐
you can get to dream nail and dream shield with no items at all
well I know that
yes you can para
it's much easier with dash
joni's with claw, baulder with claw
leg eater too
instead of once
oh
the whole game is open with claw
well this will be great
have you done hornet?
what do you have?
everything is like charms I don't need
what charms
well I can't remember
there are like 10 charms that let you into greenpath
I saw gathering swarm
defenders crest
and stuff
I double checked everything and none of it helps me
you can get into greenpath through howling cliffs
defenders crest
with claw
that too
and re: dark room in CP to dream nail, you should take the time to learn it
it's required in at least half the seeds
no, the dream nail location
^
as in where you'd get it in vanilla
ahh
you go through crystal peaks where you'd go to descending dark, drop down into the resting grounds
pickup whatever dreamnail is, and dream shield
is there a place where i can see the progress on the boss rush mod?
claw only shade pogo is probably the hardest
@upper tendon - not really
aw
is that in the logic though?
thanks
(hard logic, dunno if that one is in easy logic)
I should add I'm playing on Hard
@upper tendon - at least, assuming you're on the most recent version of boss rush, the one where you get 9 tiles to select from.
but Mick already knows since he was in stayplus chat when I said I'm doing it
all that said, now that you have claw, it's fairly unlikely any super hard skips are going to be in this seed. you're likely going to find at least one more movement ability without any skips with how much is open to you
cause with greenpath, you have wraiths/spore shroom/leg eater/claw/mark of pride/dashmaster/hornet/baulders
im about to fight hornet let's see what that gives me
last time I had a pretty mean easy seed
so I had to go out of my way into many places anyway
it was fun
had a seed a couple nights ago that had 0 movement abilities for an hour. course then after getting the first one got the rest in like 20 minutes, but still
had to get all the way to fluke with nothing but dive
that's the worst, wyza
mmmhmm
howling wraiths lol
congrats, you can now do some stalling skips
yep
you think that can help with salubra skip?
I think it works similar to fireball?
yeah I guessed
cuz you don't get the backwards movement
yeah
but you can do all the skips you can w/ fireball
personally, i'd go down to wraiths->bench at queens station, spore shroom, s&q, then up to leg eater
oh, right no dash
well, wraiths then leg eater and probably claw and dashmaster, since those are all easy and fast
and in a nice loop
yup
can pretty much full clear Fungal
yeah I'm off to fungal wastes now
fungal is pretty much the "best" place in the game in terms of item density per effort spent. (outside of shops)
doing CP without mantis claw was so fun
I did have double jump though so it made it easier
you get up to sly key? ๐
ugh
I did get it yea
the last race we did, fucking triple dipped into CP
yeah
did that stupid spike gauntlet like 4 times
won by half an hour though
so whatever. lol
the seed required 1 revisit for sure if memory serves
i don't remember
i think you only needed to get up to key
and that was it
there was something useful at CH
maybe it was isma's?
you needed key, to get CH to get to whatever was at CH
yeah. i really don't remember. lol
huh.... most recent race wasn't recorded on SRL
weird
@solemn rivet - Do you have a test case i can use for the spell damage thing? Like a save with X stats and it should take Y hits to kill something with the spell?
that way i can try and figure out what's up with it working in non-api vs api
@leaden hedge - did you have a chance to test the updated SaveStats class to see if it meets your needs?
nah ill test it tomorrow 
k,np
huh?
if I only have mantis claw
everything is blocked off by a gate
so I guess trying to get dream nail will be my best bet
have you done 100% of fungal?
I can't
cause I can only come in from queens station
and every pickup is blocked off by a gate
no, they aren't. there is a path below the gate that lets you go around. mantis literally gives you 100% access without any skips.
can't get a map out atm, dinner, but there's a way
but don't you need dash for it?
looked like a very long jump for me
@buoyant wasp
do you mean this?
I don't see a way to do this with just mantis
nevermind
I'm dumb
I found it
thanks wyza
lol, np
i got grub song
randomizer really teaches you about the game in ways you didn't realize
which should let me get baldur shell?
oh yes Wyza, which is why I'm doing it on hard
grubsong
wouldn't that let me heal in front of a baldur
then move away
and let the dot damage it
sporeshroom does that
AHHHHHH
grubsong just gives you more soul for getting hit
what was at leg-eater?
claw/dashmaster/mop locations yet?
nice, yeah, i'd do dashmaster->claw then if necessary you can go down and do mop
haha
not fighting them would be a waste
Cute animation meta
Wyza: when I want to test, I just set it to 0 and see how long it works
@buoyant wasp
np, thanks.
so, the thing is
if I do it the old way, it works
but it's not optimal
it's running everytime something collides
they are probably all pooled
so they are probably in ObjectPool
under pooledObjects / spawnedObjects
could be startupPools i suppose
doesn't really matter
public static GameObject Spawn(GameObject prefab, Transform parent, Vector3 position, Quaternion rotation)
it's not that i can't put a hook into the spawn function, but doing so means i either have to copy the function out and modify it, or modify the IL (if i want to keep the current API as buildable in 1 button).
it returns the thing
but you can't know if the thing it returns is new or not...i guess it doesn't matter a ton
yeah. i guess even if it's a recycle, doesn't matter, just assume the object you get back has to be modified and be done with it
I like that it recycles it by putting it at -20, -20 ๐ค
"recycle"
but I think startup pools are just what it makes when it start ups
so it'll make 3 fireballs whenever object pool is created
and I dunno if you'd be able to intercept that
well...that's something
They might also be in the player's personal pool, which I'm pretty sure includes stuff like Glowing Womblings (I'm possibly 100% wrong here)
so, i have this now
private static readonly FieldInfo[] ActionDataFields = typeof(ActionData).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
private static readonly FieldInfo ActionSpellData = ActionDataFields.Single(x => x.Name == "byteData");
ModHooks.Instance.ObjectPoolSpawnHook += SpellDamage;
public GameObject SpellDamage(GameObject go)
{
if (go.name != "Fireball(Clone)") return go;
Log(go.name);
foreach (PlayMakerFSM playMakerFSM in go.GetComponents<PlayMakerFSM>())
{
if (playMakerFSM == null) continue;
foreach (FsmState state in playMakerFSM.FsmStates)
{
if (state.Name != "Set Damage") continue;
LogDebug("Spell found: " + go.name);
List<byte> list = (List<byte>)ActionSpellData.GetValue(state.ActionData);
list[0] = 0;
list[14] = 0;
ActionSpellData.SetValue(state.ActionData, list);
state.LoadActions();
playMakerFSM.SetState("Set Damage");
}
}
return go;
}
and i'm getting logs for the "Spell found:" so i know it's hitting it
my hook is
public GameObject OnObjectPoolSpawn(GameObject go)
{
//Logger.LogFine("[API] - OnObjectPool Invoked"); // Too Spammy
if (_ObjectPoolSpawnHook == null) return go;
Delegate[] invocationList = _ObjectPoolSpawnHook.GetInvocationList();
foreach (Delegate toInvoke in invocationList)
{
go = (GameObject)toInvoke.DynamicInvoke(go);
}
return go;
}
and that's called via
public static GameObject Spawn(GameObject prefab, Transform parent, Vector3 position, Quaternion rotation)
{
GameObject obj = orig_Spawn(prefab, parent, position, rotation);
return ModHooks.Instance.OnObjectPoolSpawn(obj);
}
@knotty grove - re - that skip for rando, that'd suck, but i'm not the decision maker there, sean is
It's not actually that bad, and there's respawning crawlids in that room to farm soul
i am unprepared
@leaden hedge why is grimmchild charm drop level one
like
its useless
he is a cute little buddy to have tho :3
dr wily not in the center
false knight is dr wily robot
hey does a full psd of the map+markers exist?
thinking about using it for a D&D Campaign
would be cool if I could save different versions for my players, and actually like, turn stuff on as they found it in future sessions
You could ask RainingChain for the stuff he used for his map here https://rainingchain.com/hollowknight/map
I take you through drawing a map of a cave and temple system in Photoshop. ----- Support us via Amazon (Affiliate Link): http://amzn.to/2xTszFF Essential stu...
This guy has great tutorials for these stuff
you need to beat Grimm tho
@fair rampart - pretty sure the map PSD is in the resources section of the speedrun site
23k tests in 680ms? that's.....unlikely
you don't need to beat grimm for grimmchild anymore
also @fair rampart heres all the sprites for the map, just not aligned in anyway 
@leaden hedge or @rain cedar either of you have any ideas on the fireball FSM stuff? I just don't know enough about how they work to explain the odd behavior
shoot (go for it)
Where would I find charm damage modifiers (where applicable)?
you mean to change them?
cause...that's complicated
some charms have their stuff in C# code
some of it is in the FSMs
I'm specifically looking to "fix" Weaversong from 2 dmg per to, say, 3-4
my guess is that's a FSM, but I haven't looked at Weaversong really. @leaden hedge i think went and found the damage value, so he likely knows where it'd be to change it
weaversong really should scale with nail damage imo, but TC hates the nail
it might be on the charm effects object
but its probably on the actual spider itself
that was my guess, but at work, so don't have the code handy to look
Alright, if you would, check on it later and write back here? I'm at work also
Problem with nail scaling is that nail is OP already, and if Weaver scales shouldn't Glowing Womb and Spore Shroom and...?
That's why Thorns is a bit OP too, cuz of nail scaling
nail is extremely weak
spells are better in pretty much 100% of all situations
level 2 + shaman + twister + fluke + soul catcher = most bosses die in 3 hits
I was looking at charm rankings earlier (as I am modding some costs for balance purposes now, after playing close to 200 hrs) and everybody puts all the nail charms (specifically: Pride, Q Slash, Longnail) way up on top. I like my spells too, though!
if you want to know what charms are good, look at the speedrunners in categories that actually get charms
Right, just yesterday I took down Uumuu in one opening with 3 Fluke shots.
yup
special mentions to,
Dreamwielder, Fury of the Fallen, Soul eater, Soul catcher and nailmasters glory
HK with spell loadout gets to attack 4 times before you kill him
pretty much every charm other than those 9 are complete waste of slots
its still slower than fluke
didn't say it was better, just that it came closer ๐
only place you use nail for in speed run is colo
Anyway, would appreciate some help with the spiderlings' dmg
yeah, try and remind me in like 6 hours
get the fsm dumper, get the fsm viewer 
and spend the next few days figuring out the arcane
Despite the fact that some charms are clearly favored over others, I'd like some attempt at balancing things out a bit better
but considering i still don't understand why fireball is freaking out on me, i'm probably the wrong person to ask ๐
you can't balance the charms
"literally black magic"
No viable solution. Except for Weaver I wasn't planning on altering anything but notches by +1 or -1. I don't imagine increasing Geo % would make a significant difference for the better or worse, so dropping to 1 notch maybe? It's only really worth for slightly speeding up acquisition of Lantern. Or... for those who die a lot to their own shades.
The problem is, the more you think of it, the more you feel most charms could be reworked somewhat. And the problem with that is, as always, one thing imbalances another and the cycle never ends...
So I'm trying to keep changes as minimal and as close to vanilla as possible.
I have the unfortunate experience of having spent more time modding than playing other games before, which ultimately takes away from the fun and experience of just actually playing the damn game! And I really don't want to ruin my HK experience 
I'd recommend buffing charms you find to be fun but underpowered
So that you can have fun with a charm while not being handicapped by it
Like making carefree melody consistent or dreamshield spin faster
I thought someone was making a dreamshield weapon mod.
its in lightbringer
Orz: only real way is to do as KDT suggested
go through the FSM with the viewer, find what you want and edit it
We need a minion mod
lightbringer mod doesn't work on Mac right?
afaik, no
@trim totem -why? There are now...what, 4 charms that give you minion like things (shield, womb, weaversong, grimmchild)
Because those charms are bad
I'd like to see a dedicated grimmchild or dreamshield mod
just need a confirmation
api mods work if theres an api released for it
but lightbringer definitely doesn't?
lightbringer isn't API
maybe it works mac as well?
potentially if it works for DRM-FREE
Lightbringer isn't API, so only if 753 manually ported it
I checked myself a few days ago KDT, it works for gog
ever since TGT there's a new method in the Assembly called GOGSomethingOrOther
and I thought that maybe it meant that the assembly was now "merged"
i was gonna get the gog version of the game anyway to have a separate install, i can do a comparison to see if they are identical at this point.
mac wise, we might be able to build an API version of it, but I'd need someone who is willing to do the guinea pig testing which likely will be tedious back and forth
i mean... i'm just asking for a reddit post
someone complaining the mod isn't working on Mac
yeah, mac dlls are probably different
like 99.9% sure non-api mods won't work for them. api mods might, but ...
now that we have all of the API building in a single step, the prospect of building a mac version is much less time consuming....maybe....
honestly it really just depends on how the mac stuff is compiled
if it's just pure mono compilations, I don't think it'll be bad
I can confirm that non-api mods do not work on mac, at least on older versions
why people game on own Macs at all... i'll never understand
thats why I keep my temps at 125c
why not 126?
my ISP throttles me for far less
-_-
Yeah no MAC support unless somebody wants to buy me a macbook ;)
there was someone who tested the mac version of blackmoth for me
don't remember who it was tho
if I want to install randomizer for 1214
is it just the file in the document?
does it work for every patch?
you'll need to get the modding API for 1.2.1.4. I am pretty sure the randomizer is backwards compatible with that version
though honestly there isn't a good reason not to play rando on CP
fuck new watchers
literally the only reason
I don't really wanna get used to new watchers when I run any% NMG
Then you'd have to run rando on 1.1.1.8
Or were they changed in 1.2.2.1. I can't remember
Nope. 1.2.1.4
really?
So you're playing with watchers AI now
rip lol
I was so sure it's 1221 but fair enough
I guess since I started I'll finish this anyway
Just checked the patch notes
Was actually added on 1.2.1.3
oh lol
1.2.2.1 actually made the new watchers easier
cause it was the patch where they could be hit by spells where spinning
1.2.1.4 is really the worst of the 3
LMAO
That was 1.2.1.3 where they could be hit
I'm good at making decisions please believe me
was it?
also this seed is such a meme
Yes
i thought there was a gap
how is that troll?
No. Same patch they were allowed to be hit was when AI was changed
ah
Yeah, how is that a meme. That's really good luck
oh I didn't mean "meme" as in bad
more like, funny cause I just unlocked every place in the first 10 mins
LUL
dream nail had crystal heart
is this an "easy" seed?
ah, ok, this makes more sense
oh yeah
I should stop playing on easy seeds. Especially since I managed to complete a hard one
So... back to my original inquiry: where to mod spiderlings dmg values?
(What about enemy values? Outta curiosity)
the 2 values health and damage are
health_manager_enemy.health
and
damages_hero.damageDealt
I'm using dnSpy and have almost no clue as to how/where to search/find things, this is all I got... which is clearly not it
well it technically is I guess
I readily admit I ain't too familiar with this engine
well thats fine because being familiar with unity probably won't help you
so every entity in the game is represented by a GameObject
and GameObjects are controlled by one or more Components
this game is coded with PlayMakerFSM which is a component
so every enemy will have a PlaymakerFSM component, named health_manager_enemy
which will then have a variable named health
now to mod this, you have to find a reference to said PlayMakerFSM at runtime and edit it
I'd recommend looking at the PlayMakerUnity2DProxy class, as that component is on every GameObject which has both a collider and a playmakerfsm
Alright, thanks, will need to look further into it!
Was hoping it'd just be as easy as modding charm notches 
@leaden hedge - how did oyu figure out that slot 0 and 14 were the 2 values needed to change the spell damage values?
Extrasensory perception, ESP or Esper, also called sixth sense or second sight, includes claimed reception of information not gained through the recognized physical senses but sensed with the mind. The term was adopted by Duke University psycholo...
hilarious, but not helpful
yeah, i have the fsm
ok
look at paramName
and then paramDataPos
the paramDataType, paramName,paramDataPos and paramByteDataSize are all linked
hmm
0th element on them all describe the same piece of data
so 3rd and 12th value in paramName = "setValue"
which are the values that SetFsmInt use
and the 3rd and 12th values in paramDataPos are 0 and 14
technically I wouldn't even do it this way anymore
i'm open to alternatives, just trying to help gradow get bonfire working
I'd do
FsmState state = fsm.States[0];
(FsmSetInt) baseDamage = state.Actions[0];
baseDamage.setValue = 0;
(FsmSetInt) shamanDamage = state.Actions[2];
shamanDamage.setValue = 0;
States[0] might not be the damage state though right?
nah
you could do
foreach(FsmState state in fsm.States)
if(state.Name == "Set Damage")
yeah, that's what it does now
and I dunno if you can get the original type of a abstracted class
when its put into an array
usually something like BaseType would do that i think.
so
does Set Damage still need to be called?
and loadActions?
you'd need to re enter Set damage
loadActions you definitely don't want to do
thats what loads the data from the byte array
working with actions is probably way easier than the byte array
its way more human readable than arcane sorcery 
yeah
also I think you can add actions, by creating a new one and adding it to Actions and LoadedActions
whereas trying to add actions the old way
was just good luck lol
hmmm, so FsmSetInt doesn't a type
yeah, got it
so now i have
foreach (FsmState state in playMakerFSM.FsmStates)
{
if (state.Name != "Set Damage") continue;
LogDebug("Spell found: " + go.name);
SetFsmInt baseDamage = (SetFsmInt)state.Actions[0];
baseDamage.setValue = 0;
SetFsmInt shamanDamage = (SetFsmInt)state.Actions[2];
shamanDamage.setValue = 0;
playMakerFSM.SetState("Set Damage");
}
which definitely modifies the spell, but not the way we want it to, (it does the thing like the gif i posted where it basically doesn't spawn the fireball)
ah, it's unhappy about a cast
fire ball fsm is different iirc
ah
so for fireball it's 3 and 5 i think
"actionNames": [
"HutongGames.PlayMaker.Actions.SetScale",
"HutongGames.PlayMaker.Actions.SetMeshRenderer",
"HutongGames.PlayMaker.Actions.SetCollider",
"HutongGames.PlayMaker.Actions.SetFsmInt",
"HutongGames.PlayMaker.Actions.PlayerDataBoolTest",
"HutongGames.PlayMaker.Actions.SetFsmInt",
"HutongGames.PlayMaker.Actions.GetScale",
"HutongGames.PlayMaker.Actions.FloatMultiply",
"HutongGames.PlayMaker.Actions.FloatMultiply",
"HutongGames.PlayMaker.Actions.SetScale"
],
I would agree with that assumption
but thats fireball2
not sure about fireball1 or fluke
ah, yes, fireball1 is 2,4
well, that's closer
newly created fireballs are now being set to 0
still getting some fireballs that are wrong though
where the fireball itself never spawns
@solemn rivet - do you still have the old code that worked on the first 4, but failed after that?
you mean, KDT's code?
yeah
sure
the one you used back before the API
public void spellDamage(GameObject go)
{
foreach (PlayMakerFSM playMakerFSM in go.GetComponents<PlayMakerFSM>())
{
if (playMakerFSM != null)
{
for (int j = 0; j < playMakerFSM.FsmStates.Length; j++)
{
if (playMakerFSM.FsmStates[j].Name == "Set Damage")
{
Debug.Log("[SDT] " + go.name);
FieldInfo[] fields = typeof(ActionData).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
for (int k = 0; k < fields.Length; k++)
{
if (fields[k].Name == "byteData")
{
List<byte> list = (List<byte>)fields[k].GetValue(playMakerFSM.FsmStates[j].ActionData);
list[0] = (byte)LevellingSystem.instance.SpellDamage((int)list[0], this.statInt);
list[14] = (byte)LevellingSystem.instance.SpellDamage((int)list[14], this.statInt);
fields[k].SetValue(playMakerFSM.FsmStates[j].ActionData, list);
playMakerFSM.FsmStates[j].LoadActions();
playMakerFSM.SetState("Set Damage");
}
}
}
}
}
}
}```here it is
and that list was getting fetched via UnityEngine.Object.FindObjectsOfType<GameObject>() ?
this was called at the end of PlayMakerUnity2DProxy.Start()
and it was called with the base.gameObject as argument
so it's basically running very ofter
yeah
i have it working so that all new fireballs work 100% of the time
at least, as far as i can tell
my problem is figuring out how to get the ones that are already loaded, because i think they might get loaded before even the mods load...maybe
or, they aren't being created by the pool spawner
when are you running your code?
I'd assume they are made by the startup pool in objectpool
maybe they are pooled in between scenes?
i've got it checking twice, once at the end of scene load for all objects, then i added a hook that is called with teh GameObject at the end of the spawn
oh
so, it should be finding them
yeah
but the UnityEngine.Object.FindObjectsOfType<GameObject>() doesn't appear to do so
UnityEngine.Object.FindObjectsOfType<GameObject>()is a weirdo
Spooky
like, when I was trying to list all spells using that guy
for some reason it would only load the nail
no spell would be read by that
figures
I assume that's why it wasn't working
Have you tried iterating over all playmakerfsms
i think i have to add a method to the ObjectPool that will allow me to get all spawned/prefab objects
yeesh
didn't even know you could ๐
foreach (PlayMakerFSM playMakerFSM in go.GetComponents<PlayMakerFSM>())this?
Just put PlayMakerFSM instead of GameObject
oh
Works for any component
so UnityEngine.Object.FindObjectsOfType<PlayMakerFSM>()?
UnityEngine.Object.FindObjectsOfType
worth a shot
Also iirc DontDestroyOnLoad objects go into another root object outside the current scene
well, that didn't help
maybe... Hook that to InputHandler or something?
so it changes the damage values when cast button is pressed?
no, my problem is finding the object, the input handler wouldn't give me the object I don't hink
oh, right
if i could find it
bleh, i give up for the night, if the default fireball objects exist somewhere, i have no idea where or how to get to them. this is my current approach, which works for newer fireballs, but fails to work on the first handful. https://gist.github.com/iamwyza/b62b372555e282ff1fd9a50e880fa4d2
So I tried to install some mods (specifically api debug mod by seanpr) and my game just crashes with an error now.
Any idea what I did wrong?
Are you on Windows? Did you install the API?
I tried to install the API (Which the best I can tell is just copying the assembly-csharp.dll file into the right place?)
windows, steam.
That should work as far as installing the API goes
Well, for whatever reason my game won't load after that.
It won't load after just installing the API?
Or did you install a mod with it too
I did not install any mods with it, just the api
Try verifying your game files on Steam and doing it again
I tried full reinstalling, but ill try that.
@leaden hedge boss rush broke
i had shape of unn
and i was in hollow knight fight
nah bro
it ๐ ฑroke
now im anger
it was a steel soul run as well
huh?
define "broke"
also, it's boss rush....do it again? it's designed to be 30-40 minutes long.
that's not a mod issue, also happens in the normal game
I posted a video about this the other day
oh great
oh ok
where can i find the 1.2.2.1 bonfire mod?
also is the game still in 1.2.2.1 anymore?
in the github download i doesnt seem to be any Assembly-CSharp(steam).dll just Assembly-CSharp.dll
do i just paste that in?
ugghh bonfire always did problems to me and i never got it to work
me too
Lol
i message gradow maybe he could help me
Alright
i think i got it to work
but i will check later
the ui appears but when i hit the first door in king's pass it wont break
rip
@zenith panther still need help?

does randomizer lower max completion to 100%?
not sure
maybe because of how they're coded?
like, the actual "spell" is still spawned
so it doesn't count as collected?
Also I figured out why my game crashed so much
My GPU bricked last night RIP
So I guess I won't be working on anything until I replace it
๐ฆ
sucky timing (at least if you live in the states)
probably less so elsewhere
@leaden hedge-what did you have before (GPU wise?)
also @leaden hedge or @rain cedar - I know how we get the dump of FSMs, but are there any logical links between the various json's. for example fireball has like 4 or 5 FSM files associated with it
It's probably good timing with Black Friday coming up
might be able to find a new GPU cheap
really all depends on what he "needs"
a GTX 1060 would be a good low-end card to pickup
should play 99% of what he's likely to play for a decent price
unless he needs 4k 60fps
That's considered low end these days?
Generally you want to look for an fsm with something like control in its name
the x60 series is generally the low end
xx60 = low, xx70 = medium, xx80=high, xx80Ti/TitanXX = enthusiast
k
i was just thinking about trying to improve kdt's fsm viewer
was hoping there was some sort of logical representation to tie them together
Xx70 is usually the most cost effective imo
@young walrus yup
I think the 1060 is somewhat comparable to the 970 and that still runs everything fine on highest
So I wouldn't call it low end
Yeah. Those are the same pretty much
the 10xx series cards are significantly less power intensive
It's only really when I stream that I ever have performance issues
There's not really a reason to go 970 over the 1060
i personally run a EVGA 1070 SC. half the time the fans don't even run because it doesn't even need to
The 10 series thermals are so good
oh yeah. I spent a long time waffling on the 1080, but i couldn't justify the like, 60% cost increase for a 20% performance bump
Yeah. I thought about the 1080 too. But that'd be super overkill since I play at 1080p
honestly nvidia just did a really good job with the 10xx series, not that the 900's were bad, but man, the 10xx was just so much better in every regard
^
yeah, i play at 1080p as well, so, it didn't make sense for me. mostly because i wanted a IPS monitor at something around 23-24" and if you want IPS at above 1080p you need a much bigger monitor and I don't really gain much out of that with the games i play
but anyway, i guess it really all comes down to how much he wants to spend. if he plays games mostly at or around HK's requirements, then 1060 is going to crush it no problem at a affordable price. (well, for me, 200$ might be alot for someone else, i try to not make assumptions about folks financials). the 1050 might work too, though then you're getting into the budget end which meh.
I had a 670 gtx before
nice
pretty much anything you get is gonna be a massive upgrade then
i'm personally an EVGA guy myself, though I've heard decent things about Gigabyte and MSI too
entirely unrelated. It turns out that alt+f4 in hollowknight still calls the game's application quit hook
is there a way to make the fsm dumper dump ALL the FSMs instead of just the ones that get loaded as you play?
I'd have to look into the playmaker dll to know
But it could be there's no way of knowing what exists until the game requests it
The fsms are just a component on a gameobject, won't get loaded until the gameobject does
where are they stored though? I see some of them in the Assembly-CSharp, but not the majority of them
unless they are masquerading as something other that PlayMakerFSM objects
You shouldn't see any in assembly-csharp, they should be on the objects / prefabs in levels / assets
wonder if there is a way to parse the asset files in bulk to get them out
Nice cards nowadays are for either 120 fps or 4k
Then again when I upgrade I'm gonna be going from a 660 so that'll be fun
Going to try out Bonfire mod tomorrow ๐
fair warning, spell damage is still....not quite right, yes, lets go with that
because you get stronger per level
does that not defeat the purpose of levelling then?
you gain strength faster than they gain health
otherwise about halfway through the game, there is 0 challenge because you 1 shot everything
also, I noticed selling artifacts to Lemm is better than consuming them to level
no incentive to use them for levelling
same with nail upgrade
still worth
pretty sure selling stuff to lemm is supposed to be disabled
i'll do more testing tomorrow
I was mostly looking into speedrunning it
so I was thinking about routing
ah, well, it's not 100% stable yet, so, YMMV
no worries - good work guys!
it's 99% @solemn rivet
hahah ๐
ayy jumping down in false knight boss rush softlocks ๐
hp bar for boss rush mode would be such a cool idea xD
install debug mod, done



