#archived-modding-development
1 messages · Page 83 of 1
ax2u hates himself he could try it


no
I wanna play boss rush but im too lazy to push my game back an update cause im too lazy ;w;
ree
you can still kinda play
just get debug
and noclip yourself out of the ground
^
@buoyant obsidian meme https://www.youtube.com/watch?v=hpMFNmJGshE&feature=youtu.be
...what is this?
api
reeeeeeee
legit just copy pasted all the code
when summer rolls around if I have time I'll remake it
and changed a bunch of stuff to reflection
make shitmodst 2 instead
the only things not working in there are muzznik & lost kin w/ 753 geo
tbh all I cared about that vid was
and sprites ofc
baklava, baklava booptis
wowzers
when i tried to get muzznik to work going into the scene made it so i couldn't move
¯_(ツ)_/¯
thanks
you'll have to teach me the API magic at some point
oh, you're using that
On.HeroController.Attack += Attack;
monomon haha
that's cheating
tbh I don't think you could do this w/out the hook stuff
also hooks can just be loaded as a normal assembly
so you just throw Testing.dll and the hooks dll into Mods and it works
that's very neat
oh yeah that also has menu drop force enabled because fuck lifeblood menu drop
@rain cedar I dont mind either way, the stuff youve already done is amazing, but are you planning on working on the ultrawide fix more? or are you interested in other things at this time
if you were to add replaced sprites, it would just be missing muzznik and kin i think
does the API have a nice way to handle asset replacements?
i think you can modify some fsm action
I'll improve it more later, but probably the next thing I'll do for modding this is remake my randomizer for lifeblood update
but not sure
oh you did the randomizer
i remember sean saying to change audio
you could change AudioPlayOneShot or something
Yeah, that and AudioPlayOneShotSingle handle audio mostly
hmm
the testing.zip file has the mod w/ the source and stuff
if anyone wants to look at it
@copper nacelle @solemn rivet if you wanna see an example of how i switched the boop sound into the FSMs: https://github.com/Kerr1291/BoopSoundMod/blob/master/BoopSoundMod/BoopSoundMod.cs#L212
ty
boop mod changes all of the nail slash sounds, the nail art sounds, and the dream nail sound
i made a bunch of helpers in mod common for dealing with FSM actions. i'm still adding onto and improving those helpers too every time I do more fsm rewrite stuff
this is my favorite recent thing (needs a bit more testing and bug fixing still):
basically you call "GetDataFromAction" and have the return type be a struct with fields with names of the values you want to pull out of the action, example output:
public struct SpawnRandomObjectsV2Data
{
public GameObject gameObject;
public GameObject spawnPoint;
public Vector3? position;
public int? spawnMin;
public int? spawnMax;
public float? speedMin;
public float? speedMax;
public float? angleMin;
public float? angleMax;
public float? originVariationX;
public float? originVariationY;
}
then it uses reflection to check for the names of all those variables in an FSM Action and fills in the struct for you
because the FSMActions tend to have those weird reference types like this
FSMInt
so it could be null
in which case then it'll can set the value to null if needed
neat
but yeah, using that struct I just pulled out the FSMAction code and made it use the struct
so doing a process like that you can basically port an FSM to code fairly easily
so it's basically what we were talking about that other day?
about making a script that somewhat creates the gamestatemachine from the fsm?
this GetData method is just something that lets you get more than one value from an action
which makes porting to code a bit more direct
oh, gotcha
since you could like, make one struct for the particular action, and then one method to do w/e that action originally did
oh, btw kerr
what's the default return value for OnReceiveDeathEventHandler?
private bool Instance_OnRecieveDeathEventHook(EnemyDeathEffects enemyDeathEffects, bool eventAlreadyRecieved, ref float? attackDirection, ref bool resetDeathEvent, ref bool spellBurn, ref bool isWatery)```
eventAlreadyReceived?
i before e except after c
I hate that rule btw
yup
oh, that's a typo
it should be void
i think
private event OnRecieveDeathEventHandler _OnRecieveDeathEventHook;
/// <summary>
/// Called when an enemy recieves a death event. It looks like this event may be called multiple times on an enemy, so check "eventAlreadyRecieved" to see if the event has been fired more than once.
/// </summary>
/// <remarks>EnemyDeathEffects.RecieveDeathEvent</remarks>
internal void OnRecieveDeathEvent( EnemyDeathEffects enemyDeathEffects, bool eventAlreadyRecieved, ref float? attackDirection, ref bool resetDeathEvent, ref bool spellBurn, ref bool isWatery )
{
Logger.LogFine( "[API] - OnRecieveDeathEvent Invoked" );
if( _OnRecieveDeathEventHook == null ) return;
Delegate[] invocationList = _OnRecieveDeathEventHook.GetInvocationList();
foreach( Delegate toInvoke in invocationList )
{
try
{
toInvoke.DynamicInvoke( enemyDeathEffects, eventAlreadyRecieved, attackDirection, resetDeathEvent, spellBurn, isWatery );
}
catch( Exception ex )
{
Logger.LogError( "[API] - " + ex );
}
}
}
yeah
should be void
same with OnRecord
whoops
^
it's in the main mod api now
if i have time tomorrow i could make a pull request
or someone with permissions on the modding api could just fix it rq
can you modify existing rooms in the game at this point?
is it difficult?
Somewhat, but not too terrible
The big problem is we don't really have a visual editor
Just have to place objects in code
Yeah
The best way to do that would probably be to make the editor as a mod of the game so the rendering doesn't have to be remade
Just hide the player and pause everything always
in theory
would extending a room cause any issue?
with regards to rooms next to it
No, the rooms are all unique scenes
nice
i could extend/modify the few small rooms in the game so they look nice in 21:9
That seems like more effort than it's worth
Well, if you want to put in the effort
They should
It is a very simple change to fix the camera
They've just gone out of their way to force it into 16:9 always
Probably because of things like the inventory screen looking janky
would your fix break if someone used 1440p ultrawide?
Is that still 21:9?
Then no it's fine
As long as it is 21:9
Otherwise the camera locking won't work properly because I hard coded values instead of calculating off of screen size
Which really I should do, it shouldn't be that bad
hmm, oh yeah, the params spelling. when I make hooks I usually try to copy TC's params exactly
I opened the pull request to change those 'bool' return types to 'void'
The return values from those two handlers aren't used for anything in the meantime anyway
modding api is monomod
hooks are basically stuff that calls a method whenever said hook is triggered right?
It's like modifying an existing method to call an another method https://en.m.wikipedia.org/wiki/Hooking @floral furnace
In computer programming, the term hooking covers a range of techniques used to alter or augment the behavior of an operating system, of applications, or of other software components by intercepting function calls or messages or events passed betw...
@copper nacelle is there like an example code or repo to get started on modding?
ahh ty, ill look into it
some hooks don't replace anything
e.g scenechanged or whatever it was called
@empty meadow HollowKnight.Modding.Api on GitHub iirc
but a lot of the API hooks are used to override stuff
ye, was just planning on hooking heroupdatehook to my regenStamina method so id regain it per second
isn't that per frame
but i can still use the same hook right
yes
aight
Learn how unity coroutines work and look into using those
For what you want (stamina regeneration) you shouldn't need any hooks really
wouldnt i need it for hooking dash and slash so i cna call my methods of reducing my stamina tho?
Possibly. I was speaking to regeneration
unless you mean regeneration in itself, then yeall ill look into coroutines
Both dash and slash are mod hooks that you could indeed use to set a variable and/or kick off a coroutine
However, nail arts and dream nail have zero in-game code to hook into
So you have a problem right there. Also, super dash has no code.
Basically, any action outside something standard is controlled by a PlaymakerFSM.
Never thought of those, but i wasnt planning on adding superdash and dreamnail cuz theyre not really invovled in combat that much, as for nail arts, while its unfortunate i cant tweak those, i am just startin C# still, so those limitations are bound to happen (until what, that i start getting more familiar with the language) so i think limiting it to dash and slash is ok at least for now
Plus im doing this thing more of a learning experience to C# and programming (AND modding other C# games like Rimworld or something)in general tbh
The best thing then would be to just find an api mod, download it, get it to build and run, then change one small thing at a time.
yeah that would make sense
Also, by looking at several mods you'll be able to piecemeal together most of what you want
For example, boop mod modifies the sounds of all the nail attacks and plays a custom (boop) sound on attacking
So just by looking at that mod you have half the setup for what you want to do with stamina on attack.
Then look at blackmoth which heavily modifies dashing
ye been reading HPBar and Bonfire, while i can understand the stuff in general, some other concepts are still a bit alien for me
and yeah i took your example mod as reference to the "do this on attack" logic
I don't know if this is the right place to ask this; not really a modding question.
I bought Hollow Knight on GOG, and they have yet to release the Lifeblood update for Linux... So I ported the Mac release to Linux. It actually works perfectly; the only thing is that achievements are broken. Some register automatically when loading a save, but others which were previously tied to the old save have to be triggered again by going to a location (the Hope achievement is the only one I lost which I was able to get back, and it was by visiting Stag Nest). I was testing the port with the unity dev console, and it gives some errors about online subsystems being packaged. I recalled seeing this topic on the forums:
https://www.gog.com/forum/hollow_knight/drm_free
Does anyone here know if Hollow Knight uses Steam api to validate achievements or something? I'm trying to see if there's any way to fix this issue before I post a script on the forums to port the game from the mac installer.
Download the best games on Windows & Mac. A vast selection of titles, DRM-free, with free goodies, customer love, and one fair price for all regions.
vot, GoG doesn't have a release for linux?
that's an indication of hold the bloody phone since that's not supposed to be the case
think TC needs to still send em the build for linux then
since it's already out on steam iirc
prolly an oversight
I'm pretty sure TC has done everything they're supposed to, GOG officially said "the Linux update will come at a later date" on their lifeblood post
TC's lifeblood announcement said builds were going up
I think it's a matter of GOG being too lazy to repackage it
well they're gonna have to actually do it or people will just shift over to steam for it
Download the best games on Windows & Mac. A vast selection of titles, DRM-free, with free goodies, customer love, and one fair price for all regions.
yeah might just be best to, like, wait for a few days i suppose for the actual build to get released
.-.
PlayerData.instance.nailDamage is the current nail damage right?
cuz for some reason damage overall is still the same
ie husk still takes hit, even if i coded it a way that everytime i swing my instance.nailDamage gets multiplied by 2
Debug is showing it as Naildmg 5 (Flat 2005345, x1.0) or something like that
gotta broadcast the event if you're just changing it
@floral furnace PlayMakerFSM.BroadCastEvent("UPDATE NAIL DAMAGE");
do this after changing it
as well as the revert damage when get hit command?
cuz i got 2 methods, scaleDamageOnHit and resetDamageWhenTakingDamage along the lines
is revert just changing it back
initialization() has int originalDamage = Player.instance.nailDamage,
which if i get hit, i set call the method
Player.instance.nailDamage = originalDamage
so yes, it just reverts it to the original damage
oh wait what is PlayerMakerFSM referencing?
ok ok, again sorry if i ask too much i hope im not being annoying lmao
TTacco - there's a new method, OnHitInstanceHook or smth that gets called whenever something tries to hit something else
With that, it's easier to set damages to anything
Just do hit.damageDealt = value;
what are the parameters? the one doing the attackin and the one receiving it?
might check it out in dnspy later
There are two params. Fsm is the fsm of the object that's hitting, and hit is the hitinstance created by that object
If you add that hook and let VS autocomplete hit. you'll see all the different values you can set to an attack
Look at blackmoth SetDamages and bonfire
Should give you an idea of how those work
Better than changing pd.nailDamage imo
And you have way more control over it
alright ill check those out
"Fsm hitter" is the origin of the attack, and the "HitInstance hit" is the type of "attack" if im understanding this correctly? which could either be slash, fireball etc etc? (also kinda an idiot since you just explained that)
and object HitInstance has several different attributes? such as multiplier etc etc
yeah ill toy with these thanks again
Not exactly
Every object that hits something has an fsm named "damages_eneny", "damages_hero" or smth like that
When those fsms do get called, the game creates a hitinstance which is basically a list of properties telling the game how the hit should be dealt (using the HealthManager component)
So this hook gives you both of these
If you swing, the fsmHitter would be "damagesEnemy" and would be attached to the nailSlash object, while the hit would be a list of all the relevant values the game needs to calculate how much damage the enemy will receive
If you do hitter.gameObject and hit.source, they should be equal
And that's the game object that's hitting
AHHH ok ok now i actually got it
so nailSlash is gonna be of course the slash object, and there would be other objects for stuff like the fireball right?
Oh yeah
In blackmoth I deal with sharpshadow and superdash
Btw, you can find the sources for those mods on my github
So you don't have to decompile them
Dnspy can be somewhat weird when decompiling
wdym
If you're checking their code, might be better to look at github rather than opening the dll in dnspy
yeah ill do that, again huge thanks, hopefully im not being a bother here, cuz i really want to get in modding but im kinda amateurish when it comes to it and understanding some functions and objects
(and the fact that hk doesnt really have any documentation that ive heard off, so knowing each objects etc etc can be confusing)
Don't worry, I get you. Before I made the first blackmoth version, I had quite literally 0 coding experience
@copper nacelle I saw you use MonoMod.HookGen. There's a "critical" bugfix... which doesn't affect Unity because the bug only affects the .NET Framework. It'd be best to update anyway, though.
The bug / fix in question: https://github.com/0x0ade/MonoMod/commit/efdf73084437b9983554c02f39b9b6c02ede8198
Oh @solemn rivet I think they might be moving to replace the damages_x fsms like healthmanager. One of the last few updates added a component for damaging enemies and did a bit of bug fixings to it. So I wouldn't be surprised to see it go in the g&g update
that's absolutely amazing
small fix to the mod. Waits for bars to completely drain before destroying them
I'll have to update it when the pull request gets accepted tho, cause it uses the EnemyDeathReceivedHook
yeah, I'm just returning anything atm
but when it gets patched to void, I'll have to remove the return line
Gotcha
Good drive through system
Uh-huh.
Hi, guys.. can someone help me out a bit with Seanpr modding API thing?
I'm trying to build an example, I refferenced Modding namespace, but can't seem to find GlobalEnums anywhere..
are you using VS?
^
GlobalEnums is part of the TC code, it's not in modding
Yeah, vs ofc.
Hm.
you have a reference to assembly-csharp?
the API one
Yeah.
if so, like sean said, that should be it
yea
Hmm... Strange.
tell us more about your issue?
I'm trying to grasp more.
After I added the assembly-csharp - namescape modding got hooked, but the globalenum didnt
Uhh.. what is TC exactly?
Ah..
What's your code and the exact error?
That the globalenum namespace is not defined.
Well, not found.
pic
Hoold on, I'm gonna try more stuff first. It for some reason still says assembly csharp is not refferenced v:

I'm dum xP
I refferenced wrong .dll
Well, no, VS automatically refferenced the assembly csharp from Assembly-csharp/obj/debug
Not sure why, maybe I shouldn't have opened everything in one instance.
Anyway, thanks.
Uh, one more question though.
Is there any sort of documentation for class types and what hooks are available? In some form?
Assembly-CSharp.xml
Ah. I see. Thanks xP
56 about that "port" of lightbringer you made
do you have a mwe to how those "hook on-demand" thingies work?
mwe?
man what ever
minimal working example
close enough
public class TestMod : Mod
{
public override void Initialize()
{
On.HeroController.CanOpenInventory += Yes;
}
private bool Yes(On.HeroController.orig_CanOpenInventory orig, HeroController self)
{
return true;
}
}
orig is a delegate for the original function
so you can call it after doing any changes or before doing any changes
and self is just the object you hook on
so you could have a GameManager self and stuff too
can just use HeroController.instance instead of self in this case tho
do you literally do nothing but reference those dlls for that to work?
should i try and submit a pr for it to be part of the api
that almost sounds like magic tbf
no need to make hooks when there are hooks for everything

I think you could even hook healthmanager
lol
(and for some reason it's defaulted to repeat it 3 times /frame)
idk
don't ask me, it was like that when I found it

so orig is the original method?
yeah
you just pass the params given to you
usually
but you can just pass params as normal
so for like
the OnEnemyHit one
oh, nice
so you can just do orig(targetGameObject, damageInstance, recursionDepth);
so it gives you the parameters
yeah
that's very very good
yeah
well
only issue I can see happening with that is that we get no invoke list
so, if two mods override the same method... Would they clash?
as it is in the api, they are added to a list and run in order
but since this overrides the method by default...
we could still do that, I think
or maybe the dll does it for us?
if you get issues, I'll tag them
intensity intensifies
wouldn't it be better to have each one log a different thing?
then you can be sure nothing is happening in a frame-by-frame basis
need to remake it because of the thing 0x0ade was saying tho
some bug with .NET that doesn't affect unity but still should remake
thanks
yw
ech
they both say init for 1
might just be because same solution
ok made a new solution, testing now
I added a hook to AddGeo to EnemyHPBars and Blackmoth that simply logs the mod name
got over here kthx
and the same thing on blackmoth, right?
I called orig() in both of mine
maybe that's it?
testing again w/out orig rn
yeah it was calling orig which made it work
now all I get is
makes sense tho
when you call orig, the hook is triggered again
which calls the next one
it doesn't make perfect sense
because, by that logic, the same method would be called indefinitely
so
maybe orig also blocks the same method from calling itself
@bronze temple help us?
idk why it doesn't call indefinitely with two
unless it makes some kind of list
in which case it only working for 1 is kinda wtf
yeah...
but having to call the original method at the end kinda ruins the whole override purpose...
yeah
wow MonoHookOrderTest is my favorite hk mod
holy shit
?
this.inventoryFSM = this.gameCams.gameObject.transform.Find("HudCamera").gameObject.transform.Find("Inventory").gameObject.GetComponent<PlayMakerFSM>();
this in GameManager.SetupGameRefs
eww
found a noclip glitch with blackmoth
you can noclip into that area
bby where you get the blackmoth cloak
not that big but may i ask why does this happen
Idk if I actually published this version, but current version of blackmoth lets you noclip any and everywhere
That's what Shadow Cloak does
Open your inventory and read its description
hm
Also send screenshot plz
ah so it does
would be nice if there was some way to disable it
This is an experimental feature btw
Might be moved to a charm, or removed entirely
Why disable it?
i keep getting stuck in walls and i dont see it being of any value
I like going oob tbh
So dash out?
It's very fun to sneak up on enemies
yoiu have to dash out of the same wall though?
alright its growing on me but even then id still personally prefer it to be added to a charm
I mean, if people don't like it, I can remove it... But I think it's quite nice, not only mechanically but thematically as well
In vanilla, shadow cloak lets you dash through what you couldn't before
The same happens here
i can see the reasoning for that
but id still like it added to a charm
still up to you tho
also can i ask
Blackmoth ascend
why does the omnidirectional dash down not use the one from uh
the dashmaster charmn i think it is
For consistency
There's no up/diagonal dash animation
So it'd be weird if only downdash had an animation
That was actually an issue in older versions
Before the 8 dir dash, you had only updash
But it had no animation, while downdash still had the vanilla animation
ah alright
Until we can easily add animations into the game and I get someone to draw me some directional dashes, no deal
Btw, how did you like Dashmaster?
really liked it
That's good to hear
I had a really tough time deciding what to do with dashmaster
Quickdash is real good yeah
Hint - grab grubberfly
i think speedmaster (sprintmaster + dashmaster) maybe should affect length of dashes?
also fuck id have to get all the grubs 
Not gonna spoil it
But people seem to enjoy it a lot
Specially now that we have 8 dir dashes
About speedmaster, that's a nice idea
I might add that in future versions
get grubberfly big dungo
ive been enjoying blackmoth as a mod so far
loved how the things affect the nail, liked the shade cloak pickup being slightly different (still not 100% on board with the going oob being not a charm)
oops just glitched the game
went OOB under the elevator from CoT-Crossroads
lead to a black screen
woo. i did it
hornet 1 rewrite is done and it all works
there's one small bug with her needle's sprite being flipped the wrong way sometimes, but everything works from the intro cutscene, the battle, all the way to the outro/her escape and the cutscene

i also started on hard mode hornet
she now throws her needle at you
actually, she uses your velocity to lead the throw
and it's fucking deadly
it's also faster
and hits for 2 damage
man this is fun, i hope i have more time to work on it soon
it's so easy to mod too
Cave Story ♡
he's referring to my avatar
o
but yeah, so far i've basically removed the cooldown on her jumping back evade dodge
increased her hp (800-1200 randomly to keep you on your toes)
made her backward dodge and other moves faster
going to have all the moves be about 2x faster
made her throw aim at you and randomly aim a bit ahead of you
going to add some more reactive moves to her too
Imo random hp is bad
like, i want her to jump when you attack with the spell
Imagine if she hooked your shade soul and redirected it
so, right now, her design is to not choose the throwing attack if it will hit a wall
i'm going to modify that so that she'll still do it, but the attack will grapple her to the wall
the hornet outro actually caused me to already write that grapple pull code in the Yank() function
so yeah, gonna be really fun

with 1.3.1.7 they fixed a glitch of Cloth not leaving Dirtmouth
I want a mod for that glitch in order to preserve Cloth f o r e v e r
Cloth leaves?
wow, don't even want the good ending to her quest
want her to die without a purpose in the wastes
It wasn't on purpose
I fought the Traitor lord before managing to finish her quest
And now I want her to stay in Dirtmouth
can someone add a line of code allowing Flukemarm to spawn not 2, but 5 little flying... things at a time
@rain cedar unsure if you want to be tagged for things like this, but thought id mention the overlay used when you get a new upgrade fills the entire screen
Alright
yes?
uhh can you like, post source code stuff to see where im doing wrong here?
//boolean doesnt do anything for now, but I will be using this so the increase
//will ONLY happen during slash damage
bool attackIsSlash = hit.Source.name.Contains("lash");
//Increase buildup damage by 2 everytime you successfully hit something
buildUp += 2;
//Apply buildup damage to the attack
hit.DamageDealt = buildUp;
PlayMakerFSM.BroadcastEvent("UPDATE NAIL DAMAGE - INCREASE");
return hit;
}
sorry for the horrible formatting
so far ive manage to get the entire "everytime you hit something your damage increases, but when you your player damaged, the attack reverts back and the player receives extra damage on how much damage you stacked up" part of the mod
only weird part is, even after having a small buildup, ie like about 4 attacks, the damage ramps up really high
i think ive killed a husk guard in one hit (also could be a miscalculation at my part)
also anyway to do those in game debug logs i keep seeing you guys have? like theres a console that announces stuff like "ENEMY HIT" or something
Like hit indicator?
well not exclusively but yeah, i need it also for stuff like "X method has been activated" log that i can put inbetween my method so that i know the game passed through it
so basically, like putting random "System.out.println("Did my code pass through here")" debugging in Java lol
@solemn rivet @copper nacelle sorry for the late reply, timezones are a thing 😅
You also need to ship MonoMod.RuntimeDetour.dll and MonoMod.Utils.dll, as the HookGen-erated .dll uses those
You don't need to ship anything else from MonoMod though, as it's separate from the core patcher
Regarding multiple hooks on the same method:
If both ModA and ModB hook DoSomething,
- the hook order is important
- the last hook, in this case ModB, is the "detour target" (detouring is the process going on behind the scene, hence MonoMod.RuntimeDetour)
- when ModB calls orig, it actually calls the previous hook, thus ModA
- when ModA calls orig, it doesn't have a previous hook and calls the original method*
- when ModA -=s their hook, ModB's "orig" now calls the original method*
*: the orig delegate is actually a "trampoline" (proper term), which gets updated behind the scenes
TTacco, the hitinstance is called something between 3 and 8 times per frame, that's why it's ramping up so quickly
Also, the reason it's also working for enemies is because your code is increasing damage for literally everything. You should filter it to only increase damage done by slash
@bronze temple so there's no way to override or change a method using this?
@floral furnace ^
ahh yeah i knew the "anything you do is ramping your damage" up part, hence i prepared a boolean to check if its slash, what i didnt know is the frame check
didnt know it actually called it 3-8 times
also the "get hit for more damage" part is intentional, i have another method of "whenigetdamaged" that i increase the damage i take for every 40+ damage i stack up, to basically make it a "Kill fast, Die fast" type of mod
For the debug console, you can edit your modding api settings (it's in your saves folder) and turn it on
So then you can just add Log("whatever");
alright thanks
@solemn rivet what do you mean with "override or change a method"?
you pretty much "override" the method that way (just not in the "virtual method override" sense)
and how exactly do you want to "change" the method?
Well, my thinking is that since you still have to call the orig at the end to make the hook work across multiple mods, then you're virtually not overriding the method at all, you're simply "doing stuff before the method" - or at best "changing the method's parameters before calling it "
you don't need to call the orig at the end to make it work across multiple mods
you decide whenever, if at all, you want to call the orig method
from a hook standpoint, you shouldn't care about mod compatibility 😅
if a mod wants to forcibly return whatever it wants, not giving a crap about the "original" value, be it the actual original value or just the previous one,
it doesn't need to call the orig method
on the other hand,
if you depend on the result of the original method, or the result of the previous mod, you need to call orig
and that doesn't need to happen at the end of the method
again, you can hide it in an if-branch, 10 layers down
and run it 10 times in a for loop
Yeah the "end" was more of a "in the end, you still have to call the orig"
But I think I getcha
Still, what about the test that 56 and I ran? We both setup 2 different mods to hook onto the same method, but he called orig in his mods and I didn't. The result was that one of my mods worked, and the other didn't, while both of his worked together
That's to be expected, and it's a sad side effect. I'm wondering on how to improve it, though
after all, you're still responsible to call orig - and by avoiding it, your mod forcibly overrides everything else
Just to give a quick example from Celeste / Everest, because I have that open right now 😅
Btw, thanks for your time 0x0ade
No problem, I love to help :)
This hook changes the player's hair color
you see that I call orig very early on and return it later
actually,
let me simplify this
On.Celeste.PlayerHair.GetHairColor += (orig, self, index) => {
if (!(self is Ghost))
return orig(self, index);
return CustomGhostColor;
};
in this case, compatibility with other mods is still given
Yeah
So in cases where we want to completely override a method, it might not be the best idea to use this
But, still, this is very very powerful!
I like it very much
yeah, in cases where two mods want to completely override a method, there's going to be a conflict 😅
do you have an idea on how we could solve this the best? I'm open for ideas
In the api, the hook subscriptions are pooled, and invoked one at a time, regardless of what they do
But you can't feasibly do that for every possible method in the assembly
now that I think of it, even that won't "work" with overrides
@fiery sequoia changed shadowdash behaviour. See how you like it
is the 1.2 bonfire version compatible with the latest update, or should wait for it to be updated?
alright thanks
69 - I didn't fix the vanilla bug (yet)
I just changed what having the shadow cloak does
What did you change?
I don't want to spoil it
if you want, install the mod and check the shade cloak description
@solemn rivet What does the charm notch mod do ?
hm
ill check it out once im home
accidentally cleared my blackmoth save though, hopefully the backup will work
@solemn rivet Shit! I accidentally updated my game
Now the mods aren't working
Sigh
which version are you using? Which API did you install?
public beta?
Yup.
Could you pin that?
it's pinned tho
I downloaded the ModInstaller from the pin tho
I'll recode the installer to get the links directly from the xml
but for now I have to update it manually
Ah.
I feel like a test dummy.
Ah. It's working now.
Thanks.
The dashing in blockmoth feels somewhat more fluid..
@solemn rivet Is this what you meant when you said you changed the behaviour?
no
.... no?
@solemn rivet You can't dash through certain enemies?
then TC screwed something up
I tried dashing through that big guy on the very far right
because that was an issue with the first few lifeblood patches, but was fixed later on
yeah, TC made some enemies unable to be dashed through, for some reason
and then fixed with a later patch
but it seems they reverted back to it
;v;
I think the stable release was working fine
aaaaaaaaa
try 1.3.1.5
How do I degrade game versions?
there's actually no reason to keep on playing the public beta now that lifeblood is actually released
Btw... some enemies just "stand" there when I attack them with my nail.
just opt out of beta
Like... they'd run in place and not move.
blackmoth doesn't even touch enemy behaviour
prolly a beta issue
why are you even on beta
because updates are good...
yeah, clearly
Lol
Okay.
So if I opt out of beta my game will return to standard Lifeblood?
1.3.15?
Gotcha.
seriously tho
?
there's 0 reason to play on beta rn
Well... I thought the updates were performance wise...
if they were, we'd see a bigger change
like from TGT to lifeblood
went from 1.2.2.1 to 1.3.1.1
otherwise it's just small tweaks and unstable changes, probably
Ok.
I opt out of beta
Hope that fixes things.
Do I have to reinstall API and etc?
Or is that just it?...
yeah, reinstall
also, I think it works on 1.3.1.5
people haven't complained about that issue since... 1.3.1.2 or 1.3.1.3
It'd be nice if we could get public-beta changelogs
I have no idea what they change in public beta..
So I just had it opted.
so if it wasn't working on 1.3.1.5 I'm pretty sure someone would have complained by now
Ah.
like, I'm pretty sure Mooselim is playing on 1.3.1.5
Steam also doesn't tell you the version of the game you're running
and they haven't said anything about un-dashable enemies
patch notes
Didn't even know that existed @young walrus
it's linked to HK announcements here
the demon of 

I got hit while dashing and this happened. Ghost began to fly. 😃
I think it's because I haven't erased this save file, but I still can't dash through this guy.
Moose, did you also have that issue?
It's a shame that vanilla bug ruins this mod..
lol
^
there's git gud and pure masochism
then
especially at watcher knights
pure masochism
to quote Shakespeare on that- "n00b"
(Shakespeare may or may not have said that)
he did
been there seen that
but, yeah
like I said, I'm quite busy irl now
but as soon as I'm done with my current obligations, I'm gonna devote my time to doing what Kerr did to hornet
rewrite sharp shadow's fsm into code
don't forget to send TC your hard work if you can btw

Mys you ever got a bug in BM where you'd get hit and ghost just goes flying and you lost all control of him?
close enuff
also, 69, what do you mean by ghost?
main character
no, haven't had that yet
well... not until some very specific cases
also i now want to see the amazing spinning crystal dash gif again because that's what this conversation reminds me of
that was probably the best thing i have ever seen and that includes heavy broken
https://puu.sh/zw6IY/2b5a7002f1.gif found it!
Jfc
that's gradow messing around with dashmaster, wanting to use cdash midair
You killed NKG right?
wut
1 nail damage, annoying flying enemies that evade when you're too close to them and sharp shadow not working at random is seriously giving me suicidal tendencies.
welcome to the blackmoth experience
Well...
how do i install a mod?
with or without the API?
either way there should be instructions on the pinned messages thing
@exotic venture you did the OP Heavy Blow thing, right?

and laughed my ass off at it
I saw the video on a channel called Mystery
that's me
but was too busy laughing to pay attention to any info on who coded it
didn't know the walls could be knocked back
O R W A S I T
in the heavy blow lore that was only like 25% of its true power
it had to be nerfed down to be visible
I want a shitmod that makes all charms stupid OP
Quickslash will have almost no cooldown
if it were anything else the moment i parried someone they would ascend
or get smashed into the howling cliffs
Longnail will reach From one side of the Colosseum to the other
can such a thing be made? Is there the code for the charms somewhere, I can't seem to get the code dumper to work
dunno ask kerr tbh
also if you increase range you also go up
so basically it's a bigger slash
@pearl sentinel is the code for each charm present somewhere? I can't get the dumper to work
Eh? Charms don't really have code in one specific place. At least half don't even have code
(Also, does the game have code for ANYTHING? No enemy AI, no charm code...)
Look at the game and figure it out, I haven't ever looked into those so I can't really help you there
How does it even funstion
Playmaker
do you have a dump at least? I can't get mine to work
Nope
Folding: take a look at the Attack and DoAttack (or smth similar) methods under HeroController for quickslash
for longnail, I think it's under the NailSlash class?
Thanks @solemn rivet


you tagged gradow :v
But the everyine thing also tagged someone...
@cobalt spade
wot
no you can't
you can mention all modders though
don't do that
but you could
I thought you could
@ Member, or something
Or @ Online
Maybe you need privileges tho
@solemn rivet what exactly was changed with the uh
shadow cloak ?
it does more damage and no OOB that’s right?
if that’s it I’m loving it
just want to make sure there’s nothing I’m missing
sharp shadow now is OOB?
HM
it might be a little overpowered
1.5x maybe would be better?
similar to uh
unbreakable strength
Sharp shadow always was 2x
And it's only 1 notch so people always kept it on
That's why I figured it would hurt to make the 2x damage static
its 2 notches
yo that's woke
lol
just got hit and started flying
couldnt control or input commands
i got hit and it reset
lol
The punch was so strong that it sent you flying.
Hmm. So I realized today that my last release of enemy randomizer has my invincible testing hack turned on in it... whoops... but no one has said anything. So either everyone is doing no hit runs or no one is playing the mod

kek
what is Charming mod btw
also, yay, my installer now gets the dl links directly from the xml
so I don't need to update it manually
It's the heavy blow mod
I have a game design doc I wrote up a while ago with plans to enhance al the charms. So that's what that mod is going to be
For now it's just the spot o threw the heavy blow mod
All of them sounds pretty ambitious
Yeah, it was enough that I filled a few pages one night, but we'll see what I actually end up having time to do.
do you think people would play a boss buff mod
There's already two of those and people play them
Lol
I did get a bit of time to code her grapple throw today. Almost got it working
nice
So come on, what's one charm you're curious about how I'd change it
Hold on, lemee find what I wrote... it's 4 pages uh
can I edit the XML? EnemyHPBar isn't in it
Ok here: small enemies do not cause you to recoil when hit (think buzzers and wings molds) so you can effectively jump through them. In addition, crystal dash does more damage and knocks back enemies like heavy blow mod does.
Gradow: of course
ok!
that's neat
What about a charm that's already really good, like shaman stone?
what about glowing womb
weaversong
My favorite thing about weaversong is they buffed it so much they felt the need to nerf it
Shaman stone: I want to add an additional effect to all spells
Soul eater: change the effects of spells (being brief bc mobile typing sucks)
But that's what you said for shaman stone
No shaman is add
Like, leave what's there and add onto it
Eater would change like fluke does
Cool
Glowing womb would "convert soul into enemies you have slain to make their souls serve you"
Aka soul zombie minions
Basically just have orange tinted versions of them then use some basic ai like weaverlings
The one I'm probably gonna try next is my longnail mod
I wanna make it allow reflecting projectiles
why longnail tho
It just fit with how all the other charms were being designed
Mark of pride would be for parrying attacks
with riposte?




