#archived-modding-development
1 messages · Page 59 of 1
I can do some wonky workaround like that
have it directly subtract from enemies' HP
but, meh
so, on an unrelated note
I found out what "I" was doing to change files on the drive that aren't mine
for some reason, when I right click->"get shared link" on any file, it auto-changes that file's share status to "anyone at UC Santa Cruz with the link can view"... Which is weird, cause I have no connection to UCSC, don't use VPN/proxy and, just to be safe, I live in Brazil
so, yeah
I sent google a message
still waiting for a reply tho
lmao
it doesn't depend on the browser btw
and also, it doesn't happen if instead of right-click, I use the little "chain" button on the page to get the share link
wtf
i leave for like literally 3 hours and miss all the excitement
lmao
i should make an "im feeling lucky" button that just downloads random mods
then we can tell people to just click the button until they're happy
nice
i wanna make a mod that tracks where you go (like visually) with waypoints that you can load and follow on subsequent playthroughs
that'd be neat
yeah, pretty easy too
maybe if i have time tomorrow morning
i could do things today... but i'm so close to void elves....
o
(potential?) final release! Now it can download and manage modding API and API mods!
cool and good
can someone make a pizza please (it will make me very happy
)

pizza will make me very happy too


Tbh a team of modders need to collaborate and make a playable quirrel mod
Tbh a team of fast food workers need to collaborate and make me a taco
Fucking two of them right one after the other
kek that's like above average
@rain cedar it looks like you are a "HUNGRY KNIGHT"
Wow and an @ for no reason
We're on a roll here
Alright you've gone from being annoying to outright spam
I'm gonna delete those pictures, don't post more
sowwy :((
ok, this is a more than kinda fun
SUPER HOLLOW KNIGHT 64 WHEN
threading the needle with timescale and enemy rando: https://puu.sh/zrUh8/b0afaf560c.jpg
Wow you have a working enemy rando already and you're hiding it
I need to know more about this
it softlocks in a few places that i'm ironing out (the enemy rando)
i'm hoping to release it soon
we still need to finalize the bingo goals. lol
bingo goals, what
there's like 150+ goals there
so we'll just make 1 medium list
Ok
so like... exclude all the red goals, and then use orange/yellow primarily in the list. and combine some green ones for the list
boom
Yeah, could be fun
Some of the uncolored ones in the middle should be green too
Like tram pass and crossroads grubs
Very easy
even if we just have a rough version together for v1.0, that'll allow us to do some races/runs with it for balancing
lantern is also very easy
Eh
easy-ish goals are fine
It's easy but time consuming
we have 25 of these
arcane egg is also pretty easy
Arcane egg requires abyss
^
Or a lot of essence
And something like buying lantern, requires you to spend a bunch of money, which could also be used for other goals
so if you have let's say 4 geo related goals on the board, you have to make choices on what to do
and what you think the opponent is going to do
one other mod concept i was wondering about, visual path tracker: https://puu.sh/zrWBg/d7c4575dce.jpg
(very roughly thrown together)
was thinking something like this could be useful for speed running
saving off route data and using it for practicing, or just for tracking where you've been
thoughts? useful? useless?
@exotic venture my take on fixing that annoying vanilla bug
see if this works
I mean, I tried it and at least it works... Dunno if it still breaks tho
fighting bosses with a tracker would be hell due to it cluttering the screen
you could make it like 10% opacity
Well, ideally it would be on a toggle, and mostly setup so you could follow the path of a previously recorded run
Also, sharing recorded runs could be a thing
would there be a way to use that tracking to "save" a room timer
so we can easily compare optimal strats for rooms?
Yep
because I could see that being SUPER useful
Everything I've mentioned could probably be done in a day, including adding metadata to points
Like, if you got hit, or swung, what time at the point, etc
exactly
that would be huge
really really helpful for run optimizations
and for explaining/learning new tricks
Cool. Then I'll put it in my to do list
like... the timing for fireball skips
or explosion pogo
if you had all this tracking stuff, it's MUCH easier
cuz you could import a tracking overlay from someone else
Yeah, would be neat to see the data an advanced player like you generates
would that be possible? to overlay imported data onto your own game?
so it's static in a room?
Yep
that would be amazing
That's the main feature I was hoping for
Huge huge huge tool for new runners
"advanced player" 
^
You could also have it "inspect" and show stats for the nearest points, and do things like estimate how fast you were going by averaging your position
and how far off from optimal you were
Yeah, it would be easier to figure that stuff out for sure
so then we can get an idea of how large some frame windows are
Sigh, I need to stop having ideas for a bit so I can finish enemy rando 
hmm.... if i can track data on 1.2.2.1 and get a good overlay/window for clipping to shade soul....
Mickely, what all data would you like to have overlaid on a scene?
all the things
movement, input presses, everything
but like....
able to hide some stuff if you want
and able to save certain "instances"
so.... say i'm trying this clip over and over
I want to save successful input sequences
and ignore ones that don't work
Gotcha
so almost like a "recording" function
Yeah, if I have some time tonight I'll see what I can throw together as a prototype. I originally wanted this so I could have a way to follow my previous run and try to optimize it, but you have a lot more ideas for it
it could be used for both
bosses will look like hilarious spaghetti
Yeah, I have some ideas there
so it deletes the path before and after like 3 seconds
Yeah, something like that
it'd be interesting though, to see if patterns emerge that we weren't previously aware of
in blackmoth mod, the shadow attack is supposed to be same dmg as nail?
at the start
im asking about damage
cause it seems both nail and shadow to 1 dmg each
did restart game
11 shadow attacks to kill one of starting bugs
that sounds like a bug to me
downloaded that one through kerrs mod manager
which version though? the API one? or the non-API one?
i think there was a non-api at least and it was ported
im gonna try the manual file insertion see what ill get
i think its working?
yup, attack damage now works fine
it may be a problem with whatever file kerrs launcher is grabbing and wiring into the game
or coincidence that it worked this time ヽ(´ー`)┌
Yeah, I need to update the modlinks. I'll do that tonight. If possible I'd like to move that file with the master list of mods to the drive or elsewhere so any mod author may update it
is there a mod that makes Salubra's blessing.. not there? like you still get the soul ect but its not so loud and annoying?
probably best to put it in the general drive probably
@Oh nope.
you either enjoy the love that salubra gives you, or don't get it 😃
a mod that replaces salubra with quirrel
a mod that replaces everyone with quirrel
As soon as modlinks.xml goes up somewhere I'll change the loader to download it on startup
welp
(Once I'm home)
xD

ah, but what we really need is for both salubra and zote to both give their blessing to you, everywhere
rip lightbringer?
infinite soul in exchange for having to listen to zote chatter and salubra bless you everywhere all the time
kerr, I manually made my own modlinks for the modloader
it doesn't include 753's mods
plus you need to read a precept every time you enter a new room
@ancient nebula could you please tag me if blackmoth stops working? Specifically, if dash stops doing damage
latest version I uploaded was supposed to fix that (which is a vanilla bug, so not my fault)
alright, rn everythings working fine
you'll have to start the virgin waffle sacrifices
but really you'll need to get the gameobject that it's associated with, then get it's FSMs and then set the fields that you want to modify.
i know there is an example of that in the nightmare god grimm and bonfire mods
Okay, well the file I'm viewing is called 'Untagged,Health,Hive Health Regen,5Kl8jA.json'. I assume that 'Health' is the gameobject?
honestly, not sure what arcane methods are used to get the right thing by name. i usually ask @leaden hedge to point me in the right direction when I hate myself and look at FSMs
I doubt Health is it
because that's too vague
I saw somewhere somebody explained the what the order of each thing means, but I can't rememver where it's listed.
sounds like hiveblood
You would be correct
Or are you telling me that hiveblood is the name of the gameobject?
oh i have no idea what it's actually called in the game code
probably not hiveblood
Thank you very much!
like wyza said, there's some easy FSM manipulation done in bonfire and blackmoth, and probably some more obscure arts in boss rush
you can probably just search for that gameobject whenever a room loads
although it wouldn't surprise me if each mask is its own object and you'd have to edit the fsm on each one of them 🤔
that sounds like the quality of code the game would have
if the gameobject.name really is Health, that sounds actually plausible
why isnt this game coded more like celeste FeelsBadMan
that games been out a month and we've already got custom levels and mechanics
celeste > hk
heretics, heretics everywhere
Okay, so let's say I figure out the name and whatnot. How do I actually edit it? dnSpy?
playMakerFSM = FSMUtility.LocateFSM(go, "health_manager");
FSMUtility.SetInt(playMakerFSM, "HP", (int)((double)FSMUtility.GetInt(playMakerFSM, "HP") * (1.25 + (double)(num / 3)) * (2.5 / (1.0 + Math.Exp(-0.05 * (double)Settings.CurrentLv)))));```
this is one instance of FSM edition in bonfire
now if you want to add more actions to it or states
thats a little more complicated
Welp, I have no idea what any of that mess is.
go is an object
playMakerFSM = FSMUtility.LocateFSM(go, "health_manager"); this looks for the "health_manager" FSM in the gameobject go
I meant more so that I don't know how to set up my modding 'environment'. I assume this can all be done in visual studio, but I have no idea how to get it to build a dll or set the dependencies for example.
oh
But that is also helpful infromation, so thank you.
you could do it in dnspy but it'd be awkward
modding api has a few example mods
that you can just load into visual studio
in blackmoth, does upgrading nail increase shadow attack?
no it actually nullifies it completely
thank
hey ive got a glitch i think
idk if this is the right place for it
but um
everytime i try and use mods like i start up and the game
and i cant click on any of the menu options
like start game or anything
which mod?
and the mods were the debug mod and the modding api
manual installation?
im using the crossroads installer
API doesn't work with GOG last i knew
ah ok
Sean looks like he'll tell us
The api isn't currently compatible with GOG, but I could compile one for it if you post the full contents of your managed folder here as a zip
Fucking mobile, took 3 edits to get that right
i'll add a note to the installer download about that
strangley enough i did actually get it working once
@buoyant wasp would it be possible to get this file put on the drive somewhere where modders could edit it?
also, good news on the horrible graphics for the loader. game artist friend at work is gonna make me some UI art. says he has an idea to theme the mod menu after the charm notch screen so i'm excited to see what he comes up with
yay
if you used the loader, the backup files are in the Backup folder in the hollow knight directory
yep
(if you need em for some reason)
should i replace the current one with that version?
Yeah
hmm
no same issue
this is a really odd problem
it was working like
perfectly a few days ago
Is there a modlog.txt file in your save folder?
Post it here
Alright ModHooks is failing to initialize
But it's also not throwing an error
Odd problem
hmm
I'll just put a try/catch around the entire constructor so we get an error
Run this to where it breaks, then post the new log
Sorry, don't have the GOG version or I'd be doing testing like this myself
aight will do
It might "work" because the exception isn't unhandled anymore but it'll be extremely buggy
Yeah, but the ModHooks class isn't fully initialized, which is a big issue
oh, weird
why would it do that...
go into your saves folder
if there is a file that is called Modhooks.GlobalSettings.json or some such, delete it
or ModdingApi.GlobalSettings.json i can't remember it's name offhand
theres a moddingapi one, a debugmod one and a bak of the moddingapi one
ill delete them now
Debug one should be fine to keep
yeah, somehow that got created, but with nothing in it
aight deleted
Guess we should add exception handling in LoadGlobalSettings for this case
I'll do that now
someone else earlier also got a Modhooks.GlobalSettings.json that was empty
and it also broke it
it was a while ago
@rapid berry This should be a working version, even with a broken settings file
Just added support for alternate GOG mod links to the downloader, i'll upload the new version as soon as you're done with that and have a drive link for it
Alright, just pushing to github first
yeah game seems to be working

Yeah you should be good
assuming you have versions in the upper left hand corner, yes
Oh, the linux api isn't on the drive yet either
@copper nacelle or @buoyant wasp Could you build/upload that? I'm not running linux
Could you upload the xml too in case anyone wants to do modding work on linux?
should be the same
@ancient nebula what oof said was wrong - dash damage does scale with nail upgrades
Alright, I'll just steal the xml I have for the gog one then
wait, I thought that ever since CP02 drm-free version and steam .dll were the same
np!
they are close, but not quite
thats one hell of a sexy hand reaction
at least, so it seems
iirc there was a new class that was supposed to handle versions
They're always gonna be slightly different if only just because of Steam achievements
just a sec
Unless that code is in gog, but unused
I'll just check it in dnspy real quick
I thought this was supposed to handle both versions
private void Start()
{
this.gm = GameManager.instance;
if (this.gm.gameConfig.steamEnabled)
{
this.steamEnabled = true;
this.steamIntegrator = this.gm.steamIntegrator;
}
if (this.gm.gameConfig.galaxyEnabled)
{
this.gogEnabled = true;
this.gogIntegrator = this.gm.gogIntegrator;
}
}```
the config might be hard coded and not determined at startup
So the actual code is the same, they just have to change one thing
gotcha
Lol yeah this is their GameConfig "script"
They're totally just setting these all in editor
Actually they've got error checking on this, achievements wouldn't be the problem
Oh shit hahaha
Unity strikes again, they're trying to use null coalescence
No wonder this breaks
lmao
lul
One of the key features I look for in game engines is breaking basic features of the coding language
Nobody does it better than Unity
i still can't believe they broke null coelescence so messed up
It's understandable
I mean they wanted to store values in null variables
Makes perfect sense to me

you know, as opposed to....treating nulls or pointers to nulls the way you should have
dont check for nulls ever and hope for the best?
Really this is Microsoft's fault for not letting every operator be overridden
The thing is almost every way to check for null works
Because they've overridden the operators
Just stuff like ?? and null == object won't work
didn't they override ==?
They did, but with how c# works putting null first will not use the overridden one
I think
object == null should work fine
wtf
why would you check if null == something... that seems... backwards
but it makes it so this ?? that won't work
It is backwards from conventions, but it should be fine
Only it isn't
I guess I can make a small script to test how overriding works in this scenario
override the override 
override the override so that it flips them when null is first
Alright I was wrong about how c# works
I am pretty sure that with two non-null objects it will choose the overload from the one that's put first
But I guess that doesn't apply to null
As a side note this is awful and I felt dirty writing it https://pastebin.com/kRGjGeKt
lmao
side-note
on that answer
one comment was
I knew there had to be an easy answer!
But what if I also want to override the Equals function?
then you feel depressed
notequals
That's the closest I can find
close enough
nice
vertical equals
⏸ but not
Fuck you I spelled it right
you did indeed spell "it" correctly
fixed soul not recharging when hitting an enemy. Should also permanently fix broken damage for dash
nice
Shouldn't break tho
Damage cap is vanilla nail damage cap
21
Actually, 42 with sharp shadow... 63 with fstrength
w/ fury?
Fury is 1.5x?
thought it was 1.75x
lmao
also, can someone test if I haven't broken anything with the latest version of the mod installer?
fury is 1.75
I can't hit the Collector in Boss Rush anymore. Fought him twice, and both times, he just stopped taking damage at some point
did you have summons
the dreamshield and baby grimm
it's a known vanilla bug
do you know the cause?
dunno what the cause is
but the fix shouldnt be too hard
just replace the transition to the 15 hit death state with the actually for real dead state
makes sense
oh, I didn't know that was in vanilla, thanks for the info
just avoid doing indirect damage to it
Yeah I ran into it when trying out the weaver charm on him. Pretty annoying
kerr, how's the tracking mod?
kerr, how's life?
Lol. Wife was sick this morning, but they're coming along. Fixed up some bugs in rando and got started on the tracking. Got caught up trying to find a way to record all the controller inputs since there's no way to get the list of bound controller buttons, but hollow knight uses a 3rd party controller plug in that I need to investigate atill, so there's still hope.
For the tracker, I got a lot of other data in so far, like 10 different kinds of timestamps and frame recordings and the position.
For enemy rando I had a few enemies missing from the loading step, like menderbug, so I figured that out and now he'll be randomly showing up I think
I'll try to get the tracker on a repo soon and then sure
oh man. every enemy is menderbug
Once some options are added you could do that. Could also make every enemy nosk.
lol
Actually, gradow, dp you have things setup to look at fsms already?
Do*
So, when you engage the crystal guardian, something triggers the player's camera to move away to a fixed point I'm wondering if it would be possible to tell the family to leave that state or whatever
If I can't figure that out he'll have to be disabled for randoming
Fsm, not family. Thx phone
i don't know what needed correcting
i tell my family to leave the state every time I see CG too
That should be a zote precept.
Omg. You know how some randomizers replace certain text, I should look into replacing all text with random zote precepts
Or maybe just shop text
pretty sure thats just a thing on the camera class
it has a focus target
I guess you could go find it in CG fsms
If that's all then fixing it would be easy
@pearl sentinel - that XML is up on the drive now. Any of the mod owners should be able to edit it as needed.
@buoyant wasp
Anyone with editing priveleges may add more people iirc
simply pm myself or an online modder with privileges and let us know what email you want added
@pearl sentinel ^

Oh, just talked to game artist friend, he was wondering if anyone had physically extracted any hollow knight sprites, in particular the UI elements. Even just the packed sprite sheets would be fine he says, so he could use them on the mod loafer UI
Er, loader
yeah, multiple times
searching from:KDT has:file will probably get you what you want
lots of spritesheets have been posted
depending on what you need, i have a bunch of the charms, items, abilities, etc extracted separately already too
Awesome, I'll browse around. Thanks!
you can also extract them yourself using UABE
pretty sure I've dumped ui before
you could probably check from kdt to wyza has file
I'm trying to change how much geo enemies drop. So far this is what I have, but it's not working. Can anybody point out what's wrong/missing?
look at the bonfire mod, it changes those values
I was the one who game him that code
for some reason, the SceneChangedHook is not getting called
se that Log("Updated geo"); there? It's not appearing at all in the log
is the hook getting added?
yeah, if the log is set to debug level, it'll show all places where every mod is adding the hook
which is the default, so it should show up there
Oh son of a bitch. So I checked the log after quitting to menu. It wasn't there. It doesn't add it to the file until the game is closed.
It's there now...
you using notepad?
Yes.
that explains it
yeah, notepad doesn't update in real time
so it should be working then
the log file does though
you can also just turn on the on screen console
which sends all the logs to the screen too
do it like this: set it to print the dropped geo before and after the command
you have to enable it in the global settings file for the api
in your saves folder
I don't have the exact name in front of me
if (playMakerFSM != null)
{
Log($@"Geo before edit:{playMakerFSM.FsmVariables.GetFsmInt("Geo Small").Value}");
playMakerFSM.FsmVariables.GetFsmInt("Geo Small").Value *= 2;
Log($@"Geo after edit:{playMakerFSM.FsmVariables.GetFsmInt("Geo Small").Value}");
playMakerFSM.FsmVariables.GetFsmInt("Geo Small Extra").Value *= 2;
playMakerFSM.FsmVariables.GetFsmInt("Geo Medium").Value *= 2;
playMakerFSM.FsmVariables.GetFsmInt("Geo Med Extra").Value *= 2;
playMakerFSM.FsmVariables.GetFsmInt("Geo Large").Value *= 2;
playMakerFSM.FsmVariables.GetFsmInt("Geo Large Extra").Value *= 2;
}```
see if these values are the same
and use notepad++
it updates in real-time
yeah you can use that or NP++ or VS Code or w/e. the onscreen console works pretty well though 😃 (once you enable it in the settings file you can toggle it on/off with F10)
wyza: counldn't find that option in the api settings
hmm
"StringValues": {
"keys": [],
"values": []
},
"IntValues": {
"keys": [
"LoggingLevel"
],
"values": [
2
]
},
"BoolValues": {
"keys": [],
"values": []
},
"FloatValues": {
"keys": [],
"values": []
},
"ModEnabledSettings": {
"keys": [
"Blackmoth"
],
"values": [
1
]
}
}```
weird
you can add
ShowDebugLogInGame to bool values
so
"BoolValues": {
"keys": ["ShowDebugLogInGame"],
"values": ["true"]
},
should work i think
if it doesn't i can look when i get home
Mod log works!
[INFO]:[HK_TestMod] - Geo before edit:3
[INFO]:[HK_TestMod] - Geo after edit:6
[INFO]:[HK_TestMod] - Geo before edit:3
[INFO]:[HK_TestMod] - Geo after edit:6
[INFO]:[HK_TestMod] - Geo before edit:2
[INFO]:[HK_TestMod] - Geo after edit:4
[INFO]:[HK_TestMod] - Geo before edit:2
[INFO]:[HK_TestMod] - Geo after edit:4
hmm
wonder if it's true/false without the quotes
will try some variations
brb
gr8 it works
quotes on both, just as you said
eh, but f10 does nothing
debug mod installed? i think it can map to the same key and overwrite it.
nope, only blackmoth
public void Update()
{
if (Input.GetKeyDown(KeyCode.F10))
{
StartCoroutine(_enabled
? CanvasUtil.FadeOutCanvasGroup(OverlayCanvas.GetComponent<CanvasGroup>())
: CanvasUtil.FadeInCanvasGroup(OverlayCanvas.GetComponent<CanvasGroup>()));
_enabled = !_enabled;
}
}
weird
also, which version of the API is this supposed to work on?
I'm using -34, the one on the drive
pretty sure -34 has it
but I know there are more recent versions in here
I'll open it in dnspy just in case
yeah, it's 34
i know it works :/ cause @copper nacelle used it
at least, i'm pretty sure he's the one who asked for it in the first place
yeah, it's there alright
just checked
weird...
wait, when I opened the game it changed the value to 0
manually changed it to 1 and it works
that's... Strange, cause I had set it to "true" before running
well, it could be that any value other than 1 is false and "true" isn't parsed into true
it's unity's garbage serializer
which is why we have this hack of a method to store stuff
only if you want to ship your own
cause it's .net 3.5 which doesn't have a json serializer built in
so you'd have to include one. plus we had to deal with it regardless because the save files use the built in one
so if i have to deal with stupid storage for that, might as well just be consistent in the pain
no thank you
but yeah. Unity is like "Hey we have this super fast serializer/deserizer. It's 10x faster than the competition." It's fast, it's true, but then it goes on to say "but it basically doesn't support any complex data structures or even simple ones like dictionaries".
given the size of the data that is being serialized, taking 3ms vs 10-30ms to save is not worth it
but oh well, that's unity for you
you think I have .05 seconds to wait for my game to save 😡
at most I have 0.005 seconds 😡
look at mr spare time over here
probably one of those guys with like a super quantum ssd that reads and writes at 1000000 tb/s and boots up at femtosecond speeds
i think so
Updated mod loader (pin also updated):
Now supports downloading with separate links for GOG specific mods.
modlinks.xml mod database source has been moved to the #archived-modding-development drive so updates to the mod download paths (for new versions or new mods) will not require a new release of Crossroads.
The default steam directory will now be automatically searched for your Hollow Knight install (in addition to alternate steam library folders that were already searched) to make the setup process easier.
https://github.com/Kerr1291/Crossroads/releases/download/v00.31/Crossroads_v.31.zip
you added the url stuff?
nice
if you want to give it a spin
A H H H
WTF ARE YOU DOING
happened when two at once
your first issue is
actual mods at the end
that's Terraria not hollow knight
please fix
lmfao
?
do you have any idea what those are?
I'll try setting my install path the same as yours, see what happens
no clue
it literally checks only the Mods and Disabled folder to fill that list
I just googled it. Those .dlls belong under system32
Gradow is a hacker confirmed
lmao
¯_(ツ)_/¯
private void PopulateCheckBox(CheckedListBox modlist, CheckedListBox installList, string Folder, string FileType)
{
DirectoryInfo dinfo = new DirectoryInfo(path: Folder);
FileInfo[] Files = dinfo.GetFiles(searchPattern: FileType);
foreach (FileInfo file in Files)
{
if (!installedMods.Contains(item: file.Name))
{
modlist.Items.Add(item: Path.GetFileNameWithoutExtension(file.Name));
installedMods.Add(item: file.Name);
installList.Items.Add("Installed");
}
else
File.Delete(path: Folder + $@"/{file.Name}");
}
}```
has your pc exploded yet?
not yet
then, maybe
kek
wait does the installer check for a mods dir
it does
and it doesn't create one- ohhhh
shit
it's probably finding every dll under c or d
@copper nacelle see if this fixes it
no mods folder error
but
and if I try it again
and then if I try a diff mod afterwards
@solemn rivet which leads to the great error
I see...
it's trying to install stuff, but for some reason, it's unable
mine works fine btw
¯_(ツ)_/¯
just installed HPBar
at which point does that happen, 56?
after the install confirmation screen?
this one
eh, revealed my language
reee
ok
can you delete those useless dlls and run this?
this should give you progressive message boxes
so we can figure out where it breaks
got it
so it breaks during installation
can you delete that temp folder and try again, please?
was just checking not installed on a bunch of mods
most gave already exists
happens after "installing"
did you delete the temp folder?
after deleting stuff everything gives the being used
thingy
wait
wtf
@solemn rivet ¯_(ツ)_/¯
sigh
I'm... sorry for all that
it's breaking something and I have no idea what
because even after mirroring your configs, it doesn't happen to me
slightly different error when trying to install now
also it's fine
@solemn rivet wait it works
it gives all those dlls and "fails"
but after reopening the window
the mod is installed
it is
it's breaking on cleanup
also, love that error
you literally have no clue what is wrong
so useful
lol
successful installation tho
and the directorys in temp are also gone
so after installing it says the being used thing
I reload the window
and the mod is installed
wait wtf
it also has this in temp now
yeah
for some reason it's note deleting both temp and the zips
this is more verbose
Inb4 errors
deleting when installer is open still breaks
no dlls found or something
copying D:\temps....\hellmod.dll
and rando which was already there
and then the good ol cannot access because it is being used
and I reloaded window
and mods are installed
no weird files
¯_(ツ)_/¯
so it's breaking right before deleting the folder
I assume there's leftover stuff inside temp?
did it copy any txts or something?
README.txt for debug i think
debug always fails with readme already in temp
readme for rando apparently
is in Mods
there's a readme folder there
with a shit load of readmes
and by shit load I mean 3 folders
with each having 1
hm...
so that's where it's breaking - when copying random files laying around
and that stops the delete from going off
the one in Local?
it's trying to copy a bunch of old ones
like I tried to install idk bossrush?
and it also copied blackmoth
and charm notch
rip system32 error tho
also
I think for some reason yours might be case-sensitive on paths
because it said it could not find Mods, when you literally just showed me the folder
Why are you taking the time to drag literally every popup window towards the center?
D:\temp\README.txt already exists
for some of them
before anything else
after hitting yes
because I was not sure it was centered right
for others:
Extracting
the directory is not empty wtf new error
temp never stopped existing
nvidia has a folder in it
temp has hollow_knight_Data and NVIDIA Corporation in it
it's my fault for assuming the folder didn't exist
it's all good

lol
lmao
deleted the older one to prevent spam - this one has fewer boxes
oh, yeah
the only thing I did was create the mod folder if it didn't exist
lmao
wait a second
forgot to try the good ol
delete the mods folder while the installer is open
why would you do that
xDDD
it only creates it on load
don't, please don't
my poor heart can't take it
ded

phew
I mean, I can make it create the folder at install if it doesn't exist
but why
lol
it technically shouldn't happen
unless you purposefully delete it after loading the installer
me_irl
Never assume the end user won't do stupid shit
done
inb4 deletes hollow_knight_Data during installation
it checks and creates on demand the folder on EACH install request
inb4 uninstalls game during installation
uninstalls installer during installation
thankfully there's no installation for the installer

and... Pushed
thanks for the patience 56!
i o u
lmfao
I'm serious, I had never used winforms before doing this installer
and had never used c# (or done any kind of programming) before blackmoth and bonfire
so if I had to bet which one works better...
I'd say his
i dunno man
so you're trying to take the list of goals, and output 26 goals randomly selected from the list?
and the same goal shouldn't be selected twice right?
that can't both be picked
that too
i have no clue what i'm doing, dude
....obviously
yeah, i know, you're not a programmer by trade, or hobby. 😉
my experience with this language has been a grand total of.... 30 minutes
aka.... just now
there's also a bunch of them in there that shouldn't be included together, like Dung Defender and Defender's Crest
for obvious reasons
yeah, well, i'm gonna fiddle with the first requirement to get you started 😉
lol.
indeed
change
output[i]= {"name": goals.splice(goalIndex,1)[0] };
I updated the fiddle i posted above with that
i'm just serializing the object, so the quotes have to be there with that kind of output
there are other options, just not with the design you were heading in
it probably had the quotes because it was assuming that name was always going to be a string and not an single element array 😃
so now.... the best way to add logic to this so that if a certain goal shows up, others can't?
i could add a shit ton of IF statements i guess, but that sounds awful
maybe make like mappings, like, Goal = <list of exclusive goals>
then when you go to add a new goal, for each goal you already have, see if its list contains the new one?
you could probably have a hash table
^
your data structure right now is very simple, you'll probably need to do a couple of things. First expand that simple array to an array of objects that contain a Keyword for the goal, the name of the goal, and a array of other goals' keywords that are disallowed
like
var goals = {
"DungDefender" : {
"name": "Defeat Dung Defender",
"excludes": [ "IgnoreDungDefender" ]
},
"IgnoreDungDefender" : {
"name": "Ignore Dung Defender",
"excludes" : [ "DefeatDungDefender", "GetIsmas" ]
}
}
Welp, hope nobody wants to see a bingo board for 2 years. lol
when you add a goal in your loop, you add the excludes to an array. then on every loop check to see if the random one you got is in that array, if it is, ask for another random one until you get one that isn't in the array
or add it to a hash, that's probably better
faster so you don't loop
hash tables will be faster
you'd remove it from the array when you check it too so it can't come up twice 
ah, yeah splice it out either way
though for something this small, i doubt it's gonna take long even if you didn't do either of those better ways. 125 items is gonna take milliseconds to loop through a thousand times
but yes, the hash table and removing from the array regardless is faster
doesn't matter anyway
and is better
because arrays are hash tables in javascript
i know it is that way on the surface, is that how the engine renders them though?
afaik yes
weird, wouldn't have thought that. But i suppose it's like alot of things with modern languages. I do XYZ and it works. It's only until it doesn't work that you go and dig into how the engine actually compiles it that you realize why "XYZ" was such a bad way to do it.
oh i think i get it
so... if i give dung defender and defender's crest the same tuple/bucket value, then if one of those values was already pulled, it'll reiterate and pull from another bucket
duh, i should apply my work experience here
i mean, there's a few ways to do this
if you don't want to have something that iterates until it finds a valid solution
at work, we're not allowed to "throw away" rng calls
i actually implemented something like this for my last game
shouldn't be to complicated to do something like
var goals = [
"DungDefender": {"Name":"Defeat Dung Defender", "excludes":{"GetIsmas", "GetDefendersCrest"},
"GetIsmas": {"Name":"Get Ismas Tear", "excludes":{"DungDefender", "GetDefendersCrest"},
"GetDefendersCrest": {"Name":"Get Defenders Crest", "excludes":{"DungDefender", "GetIsmas"}
]
randomkey = randomKey(goal)
foreach key in goals[randomkey].exludes{
delete goals[key]
}
delete goals[randomkey]
basically, the master list was arranged as a weighted table





