#Mod Manager Discussion

2440 messages ยท Page 3 of 3 (latest)

junior geode
#

I wouldn't force disable. Just make the line red & display a warning symbol with e.g. a hover

autumn hamlet
#

probably

#

i can add a warning when clicked tries to resolve it itself

junior geode
#

Yeah, a popup that says "this mod is marked as incompatible with XYZ, are you sure you want to enable it?"

autumn hamlet
#

well i thought more on the lines of having a warning symbol like next to the delete symbol that just has a tooltip with proposed changes and when you click applies those

final wren
#

i would honestly just go with this approach
#1464652513704808657 message
trying to auto-resolve multiple complex dependency chains that can have random intertwined incompatibilities migth cause hair loss

autumn hamlet
#

well yeah i will go with that but the tooltip is just there to then if clicked automatically enable all depends and extend and disable all incompats it wont autoresolve beyond that even though that be easy

junior geode
autumn hamlet
#

it be a button

#

it currently just is what it always does

junior geode
#

Plenty of reasons why you'd want to run incompatible mods; most coming down to "the incompatibility is grossly overestimated/can be worked around/patched by a third mod"

autumn hamlet
#

yep

final wren
autumn hamlet
#

we definitly need to show warning too though cause users often wont even notice they installed a dependency and the disabled it and their mod stops working

final wren
#

absolutely

#

my only ask is let me get an unskippable warning and then allow me to ignore it anyway, so everything that I want to be installed, gets installed

autumn hamlet
#

this work?

#

it now forces nothing the only thing it does is install depends when installing a mod

#

the manager is managing to manage even more managed mods by the day

#

lol

final wren
#

i think that will be fine for now, but some sort of a pop-up that lists the collection of detected issues would be better to get the message across from avg user perspective imo

junior geode
# autumn hamlet this work?

I'd make it auto-enable dependencies on enable, but not disable either when you disable either, if that makes sense?

autumn hamlet
junior geode
#

Or maybe popup a "This mod has the following dependencies, all checked ones will be enabled", and then a list with checkboxes beneath.

autumn hamlet
#

i could

#

but why

#

just added complication no mods is gonna have more then like 4 dependencies for like at least some time

junior geode
#

User QoL

autumn hamlet
#

sure i will do once i added other more pressing matters

junior geode
#

If you have e.g. 100 mods installed (but not enabled), it might be a pain in the ass to go through them and track down dependencies

#

(People who mod Rimworld or Skyrim or Minecraft know)

autumn hamlet
#

well just autoresolve

#

it doesnt do it for all mods

#

only for that mod

#

ik you may not want to have some specific mod enabled just disable that after yousrself

#

:)

#

or i could make it a dropdown where you can click specific problems to resolve

#

and one resolve all

#

yep will do that

#

probably

#

some day

#

later

#

in like half an hour once im done with the rest

final wren
autumn hamlet
#

bro was not typing only that in so much time

final wren
#

no i was typing up a useless message

#

๐Ÿ˜„

junior geode
#

Could make it a setting to skip the menu & auto-accept all tbh

final wren
#

its lost in time now

#

like tears in rain

autumn hamlet
final wren
#

lemme get back to the cooker so I don't set the house on fire

#

then I will try to explain myself

#

I will make a mockup of what I meant

final wren
#

makes sense?
would only cause a warning check once per dependency chain

autumn hamlet
final wren
#

User QoL
this is one thing that may seem completely unnecessary from a power user or engineer's point of view because ofc we will check those warning labels
but avg end users don't read warning labels without being force-fed them

#

source: a big part of my job is automating software installation

autumn hamlet
#

i would keep the warning though

#

the notifcation would only stay for a short while

#

to grab the users attention

final wren
#

it's up to you, ultimately its your app, I'm just trying to give ideas that make sense based on experience VeryGood

autumn hamlet
#

i think i will implement it as a notification which can be disabled in the settings though if you believe a interupting popup should be included as well i can do that

#

as an option

final wren
#

tbh as long as we don't start seeing things like there is a mod that patches the patch of another mods patch, that was already patched by another mod, there won't be too many nightmares! ๐Ÿ˜„

autumn hamlet
#

will release update asap

#

oh nvm just remembered a thing

mild verge
#

guessing this isnt supposed to happen lol

pliant pine
mild verge
#

hahahaha

autumn hamlet
#

@final wren

final wren
autumn hamlet
#

no

#

one of them is laserfix

final wren
#

ah

#

its duplicate displayname

autumn hamlet
#

yep

#

btw

final wren
#

i just got up will fix in a bit

autumn hamlet
#

we probably want to require the id for an mod to be like com.something.that just so we have a bit more unique id per mod

#

you get it

autumn hamlet
#

mod manager discussions 2082???

pliant pine
#

huh

autumn hamlet
#

literally 2084

final wren
#

delete and lock thread
wipe the project, there are no mods for this game

#

we should have stopped at 1984

autumn hamlet
#

@final wren you said you can add a list of urls with names to the extension in the manifest? what structure would you use so i can already add support for the next update

final wren
#

I don't want to add like url names

#

because

#

infinite names

autumn hamlet
#

sure

final wren
#

pls add twitter
pls add mastodon
plas add xyz

#

no

autumn hamlet
#

so only urls

#

["url"]

final wren
#

ye

autumn hamlet
#

call the property when you add it just urls

final wren
#

or if you want

#

i could make it named properties

autumn hamlet
#

well what makes more sense

final wren
#

and then you can parse them as a hashtable

#

or smth

#

just make sure your data structure is flexible

autumn hamlet
#

lets do a hashtable/dict/map

final wren
#

json isn't type aware, but for the client that sounds reasonable

autumn hamlet
#

obviously

final wren
#

json bourne
has no type identity

autumn hamlet
#

"name": "url",

#

right

#

?

final wren
#

yes

autumn hamlet
#

cool

mild verge
#

hey just another question i can only see around 10 mods in the manager is that normal atm?

final wren
#

we need to populate some metadata initially

#

and then it will keep those entries up to date by itself

mild verge
#

got it

final wren
# mild verge got it

I'm probably gonna get the common back-end to "1.0" tonight or tomorrow, then I will update the documentation and open a dedicated thread, where I will share info on how mods can be added

autumn hamlet
#

NOMMM

final wren
#

or NOMNOM but i can't make it work rn ๐Ÿซ 

#

Nuclear
Option
Mod
Library

#

noml

autumn hamlet
#

Nuclear Option Mod Manager Neatly Organized Manifest

#

NOMMNOM

#

btw i thought about the manifest again should we for both artifacts nd extensions make the id and version a key in a dict no real reason works fine as it is just think that makes more sense imo

final wren
#

Nuclear Option Managed & Neatly Organized Manifest
NOMNOM

autumn hamlet
#

sure

#

sounds good

#

better even

final wren
#

we made NOMNOM work DogeLaugh

final wren
autumn hamlet
#

well i can also just read it as a object and the transform it into a map on my end

final wren
#

when I do content validation I convert the mod lists to hashtables where id is they key, it makes it easier to look things up as I iterate + serves as a duplicate id check

autumn hamlet
#

so you could?

final wren
#

I don't want to note it as keyvalue pair in the json schema itself

#

because for the first pass of schema validation, im pretty sure I can't validate for that

#

unless i just put them in as an array of comma separated strings

#

i guess

#

same with URL actually

#

because can't validate the presence of arbitrary property names

#

and infoURL should be required, at least one url that leads somewhere

autumn hamlet
#

can you not make the url list require certain keys

#

like info and source and so on

final wren
#

content validation is fully customized though so there I have flexibility but I aim to keep things simplistic, so if anything needs to be extended in the future it causes less headache

mild verge
final wren
#

(the reason content and schema validation are 2 separate things, if the schema is obviously bad, the job will terminate early and won't waste more action runner time)

autumn hamlet
#

can you explain me complete NOMNOM pipeline as it is planned rn

final wren
#

didn't denote YES/NO on the conditions properly

autumn hamlet
#

so uh to add a modto the manifest you would pr a specificmod.json meta or something right?

final wren
#

yes

autumn hamlet
#

will that file ever change will the automatic updating proces smodify that fiel directly or is no mod specific state stored and only the master manifest

final wren
#

there is an action that triggers when a PR is submitted to staging branch

#

and it checks if any .json files changed in that directory inside the repo

#

then it will run the checks on them

final wren
#

the meta manifests are used to always regenerate the master manifest

#

the automatic update also updates the meta manifests

autumn hamlet
#

imo the modspecific jsons shouldnt store any state ebyond the definition not even like the first artifact and should never be automatically update we may add cache inbetween but not in that original file

final wren
#

like those voicepacks rn

autumn hamlet
#

well we dont

final wren
#

I just don't have auto-update enabled

#

if the release isn't compliant

#

simple

autumn hamlet
#

else raw has a limit too

final wren
#

if someone wants downloadcount and autoupdate, they have no other choice ๐Ÿ™‚

junior geode
#

I'd be highly surprised if username.modname would ever cause collisions.

autumn hamlet
autumn hamlet
#

@junior geode i believe you said to remind you to test NOMM if you havent yet

final wren
#

yeah from my perspective ID just needs to be a unique string that stays forever the same, to avoid collision checks

#

and protect integritiy of package relationships

tawny oracle
autumn hamlet
#

are they limited in what chars you can use if not limit to like a-zA-Z0-9._-

final wren
#

can be any utf8 character

autumn hamlet
#

well they cant though on my end as i save the mod ina folder with the id as name i could change it but its very easy to do and you cnat use certain chars in folder names

final wren
#

i can be more restrictive

autumn hamlet
#

yay

final wren
#

but atm I just save the master manifest json as utf8 without bom so if anything is not utf8 will just covert into funny squares

autumn hamlet
final wren
#

that would happen is someone edits the text with their editor set to a broader encoding standard

autumn hamlet
#

whos codeeditor not set to utf8 though

#

๐Ÿ˜ญ

final wren
#

I often work with data that comes in from different sources and different encoding, so I may be personally traumatized

autumn hamlet
#

understandable

final wren
#

oh also let me tell you about the time when I accidentally saved the hosts file on all of our 26k work computers as unicode with bad automation XD

warped hamlet
#

waht could this be..

autumn hamlet
final wren
#

this thread is about a common back-end that mod manager apps can use to serve mods

warped hamlet
autumn hamlet
warped hamlet
#

the thread

autumn hamlet
#

#1467341462227124305

#

you need to check that out

warped hamlet
#

cool

#

would download

autumn hamlet
#

would?

warped hamlet
#

yea..?

autumn hamlet
#

why would if can?

warped hamlet
#

idk

thorny hatch
#

Hello, what is blueprinter, where can I find it and can I use it to edit stuff?

final wren
#

@autumn hamlet if you want arbitrary key-value pairs for urls I'm gonna just make it like this
because the built-in json parser will deserialize into custom object, and turning objects with arbitrary property names into hashtables is something I'm not willing to suffer right now

#

and this way I can still validate URLs on my side

autumn hamlet
#

just make them objects

#

easier to handle

final wren
#

idk about you

#

but I have no desire to do that

autumn hamlet
#

no i mean why not { "name": "", "url": ""} list of those

#

am i not getting something

final wren
#

i guess I can do that

#

it just feels like more dead text that takes up space

autumn hamlet
#

well we arent optimizing for space yet anyways

final wren
#

good with that?

#

I'm gonna freeze additional schema changes for now, I have to finish the automation

#

the url change is in dev and will go live

#

whenever you are ready

autumn hamlet
autumn hamlet
#

discord not working on my pc rn absolute cinema

final wren
#

auto update is working in dev branch now

final wren
#

@autumn hamlet lmk when you are ready for new manifest change re infourl

autumn hamlet
#

i will im currently trying to fix my discord though

final wren
#

launch tbm

#

nuke from orbit

#

then reload

autumn hamlet
#

well no

#

already did thaz

#

its somehow the entire network im just using data on my phone rn

final wren
#

is discord not cooperating with your internet or smth

autumn hamlet
#

idk

#

it happend in the past too and stayed for some hours always without any fix

#

and its slow often too

#

not even the discord website works

final wren
#

discord always slow for me when I'm in Norway

#

I think Jens Stoltenberg is listening on my chats

#

I'm not crazy

autumn hamlet
#

๐Ÿ’€

#

it has to be some routing issue with the isp

#

whatever

#

i dont need discord anyways

final wren
autumn hamlet
#

well

#

idk

#

i dont think so

final wren
#

nobody ever thinks its dns

#

but it almost always is

#

i had a funny one at work once where our primary dns and the secondary dns had a conflict, which resulted in very specific ajax calls not going out
and as a result, the holiday booking system didn't work so nobody could book holidays DogeLaugh

autumn hamlet
#

who needs holidays anyways

final wren
#

takes 30 seconds to run the auto update with current number of files
projected runner time for 30 days is 6% of github premium runner time allowance

#

thats not so bad

autumn hamlet
#

how many things do we have rn

final wren
#

if the numbers get bigger I can always just set up a local runner and some parts of the flow can be parallelized

#

local runners are always faster

autumn hamlet
#

obviously

final wren
#

this entire thing

#

runs every hour now

#

to automatically discover new releases and update dependencies

#

(only on dev branch for now)

autumn hamlet
#

tbh if we run into problems with the runner time

#

we can just not run it every hour

#

duh

final wren
#

I don't think we will, at least for a very long time

#

the schema and content validation can be paralellized as well so it can scale better than current version

autumn hamlet
#

obviously

final wren
#

there isn't much compute intensive in this to be honest just some hashtable lookups and simple condition checks so I don't think it will be significantly impacted by a growing number of meta files

autumn hamlet
#

how is the api request count looking

final wren
#

haven't done it yet but that also wont' be a concern for ages

#

allowance is 5000 per hour

autumn hamlet
#

well yes

final wren
#

we are probably doing like 30 per hour

#

or less

autumn hamlet
#

with how many mods

final wren
#

can you imagine that I understand

autumn hamlet
#

how many requests do you do per mod and per release

#

like 1?

final wren
#

if you have something that can extend hours per day to 90

#

send it over, I'll pay for shipping

final wren
#

because 1 request will return 1 page of up to 100 releases

#

so it doesn't have to paginate yet

autumn hamlet
#

that will be fine for a long time for most mods

final wren
#

because the action runner is using GITHUB_TOKEN

#

if I spin it out to my server I can bump it to 5000 per hour

autumn hamlet
#

ok finally discord working again on my pc

lofty cliff
#

So how is this working out generally? Anything to be aware of, other than early days?

nova spear
#

Had an inexplicable error when trying to install bepinex from the manager but when I restarted it said it worked.

#

Found my nonstandard install location no prob :D

#

Only real """issue""" is that smartscreen tries to stalin it

rich walrus
final wren
#

only way to stop smartscreen from blocking an app by default is to get it signed with a code signing cert that is trusted by MS. that is Expensive.

final wren
nova spear
final wren
#

they want to slowly turn windows into iOS and not let you run unsigned software

#

every now and then they make it slightly more annoying to run unsigned code

lofty cliff
final wren
#

"for security reasons"

final wren
#

mods still use bepinex

#

that won't change

#

difference is

#

you won't have to install anything manually to get mods working sunglase

lofty cliff
#

alright, i'll take a look then

#

can't wait for this to be more automated for new folks

final wren
#

we will need to set some basic guidelines for modders that they need to follow to make stuff compatible with the manager, that's all

lofty cliff
#

i just hope it has better naming than USB

rich walrus
lofty cliff
final wren
mild verge
autumn hamlet
#

well its also significantly faster to enable disable download mods even when you know how to use github

lofty cliff
autumn hamlet
#

epic

final wren
#

eg both NOTT and NOBlackbox had over 1000 downloads already, without any mod manager support in the past.

lofty cliff
#

so if i want to make a bepinEx mod, what's a good place to start?

final wren
final wren
#

and if you want your mods in the manager library, basics of using github to make releases is a good idea to get familiar with sunglase

#

@lofty cliff also just to make sure we are on the same page, try not to make mods that people might perceive as multiplayer cheats VeryGood

autumn hamlet
#

@final wren you said you wanted to "release" NOMNOM push the dev branch to main and make a thread in the mod forum today right?

final wren
#

I gotta get some workshit done

#

but I can push dev to main any time if NOMM supports the new manifest schema

autumn hamlet
final wren
#

coolio

lofty cliff
autumn hamlet
lofty cliff
#

do you consider context specific sounds from a complex rwr cheats?

autumn hamlet
#

technically

lofty cliff
#

i guess i can just stop there then. back to user

glass token
#

I would say that it probably just depends on what the host says

final wren
#

somehow caused a f********&^&^%^%&% merge conflict but its resolved now

#

๐Ÿ˜ญ

#

auto updates are live

autumn hamlet
#

val urls: List<UrlReference> = emptyList(),

find the problem @final wren

#

little hint

#

i think we forgot to talk about what we wanted to name that property lol

#

how hard would it be for you to rename infoUrl to urls on your end or should i make an update

final wren
#

we didn't talk about changing the property name, so I did not change it?

autumn hamlet
#

ig not

#

๐Ÿ’€

final wren
#

what is the expected property name

autumn hamlet
#

for me its "urls" rn

final wren
#

if you do stuff like this pls talk about it first

#

thanks VeryGood

autumn hamlet
#

yep

#

i thought i did

#

my fault

#

so uh can you change it ?

#

pleaseeeeeee

final wren
#

I only have to change the property in every single script

autumn hamlet
#

):

#

im sorry

#

i make update

final wren
#

dw I'll change it

#

makes more sense for semantics anyway

#

will be live in a bit

autumn hamlet
#

well ig i can change the default url but as url is a setting its stored in the config though i could make an exception ig that updates the url to this if its the old one in the next update

final wren
#

but I do have to go and do something now to earn a paycheck so that will come later

ya lets leave this for a future update and then we can coordinate

#

"urls" change is live

autumn hamlet
#

will maybe also change the name of the nuclearoptionmodmanager repo to NOMM

final wren
lofty cliff
#

so idk what it is, but is there some assembly required with some mods?

final wren
#

wdym assembly

#

like assembly references?

lofty cliff
#

sorry sorry

final wren
#

yeah to be able to develop mods you gotta add some dlls to your project references

#

from the game and bepinex etc

#

there is a bepinex project template you can add to visual studio but I personally hate it

lofty cliff
#

i should have been way more specific
sorry

final wren
#

no worries mate

junior geode
#

Don't apologise for asking questions! ๐Ÿ˜„

nova spear
#

@final wren you should push the ffb mod to the manager :3

final wren
#

I will when its done

warped hamlet
#

how does this work

#

how to install

mild verge
#

I really need to add my mods to it

warped hamlet
#

ok

mighty aspen
final wren
#

this thread was used for discussion during development of NOMM & NOMNOM ๐Ÿ™‚

tranquil mulch
#

So uhh

#

Nomm is not looking in the correct files for my nuclear option is

#

It's trying to find it in a different folder somewhere else.

autumn hamlet
#

you can manually select it

tranquil mulch
autumn hamlet
#

oh that

#

yeah

#

no idea

#

sorry

#

i will be looking into that but probably not going to be fixed soon

#

just try the other formats

tranquil mulch
#

I'll try wineprefix as well if it solves it

#

I suspect it might

marble edge
#

i just don't even use a mod manager
i have two folders, the BepInEx plugins folder with the mods i'm currently using and a separate one that has those mods and everything not in use

#

if i want to use a different mod, i copy that mod over from the second folder, and if i want to stop using a mod, i just remove it from the plugins folder

tranquil mulch
#

is there like a tutorial on how to get the flatpak to work

abstract palm
#

Is this broken on Fedora? I installed the rpm, but it just fails on launch with ```Error opening "NOMM.cfg" file: No such file or directory

modest orchid
#

too