#archived-modding-development

1 messages ยท Page 132 of 1

compact sedge
#

sorry it goes as far as you dash normally

#

I can record it real quick

young walrus
#

Huh

compact sedge
#

normal behavior, it literally uses the change in your knight's "tranform" while dashing which is the actual distance that the knight is physically moving

young walrus
#

Does it do weird things when you dash onto an elevator?

compact sedge
#

no

young walrus
#

Hmmmmm

#

Can you zoom out and see exactly where it ends?

#

If it actually does end?

compact sedge
#

sure let me install debugmod really quick

#

my theory is that it's caused by some really weird and bad collision code

#

not from elevators in particular

young walrus
#

Well the elevators are awful

compact sedge
#

although maybe

young walrus
#

All around

compact sedge
#

actually better than zooming out

#

ima log to see how far it's actually going

young walrus
#

Did you have shade cloak in the second one?

#

Imma look again

#

Weird

compact sedge
#

uh technically no but yes

#

let's just say yes

young walrus
#

Had a theory that it's teleporting your hurt box way far away then back to simulate the I frames

compact sedge
#

no it doesn't actually do that believe it or not

#

ok need to walk back to CoT give me a sec

young walrus
#

But then it'd do that on ground too

#

Which it's not

#

So

#

Weird. If we could stop the movement oob for elevators.....

#

That could skip WKs

rain cedar
#

Chances are it has something to do with the code that bumps you upward when you dash into ledges

compact sedge
#

yeah that's what I was thinking

#

let me check

#

ok for comparison the knight moves about 7 units when dashing. it's supposed to be 6.5ish I think but as KDT accurately pointed out dash length will always be slightly above it because really shitty time code

#
[INFO]:[Redwing] currentPos is (-0.3, 1.7) and init position is (-0.3, 1.7)
[INFO]:[Redwing] void knight moved 0 units total
[INFO]:[Redwing] currentPos is (0.3, 1.7) and init position is (-0.3, 1.7)
[INFO]:[Redwing] void knight moved 0.5600014 units total
[a few more 0.5ish unit timesteps cutout...]
[INFO]:[Redwing] currentPos is (1.9, 1.7) and init position is (1.4, 1.7)
[INFO]:[Redwing] void knight moved 2.240005 units total
[INFO]:[Redwing] currentPos is (1.9, 1.7) and init position is (1.9, 1.7)
[INFO]:[Redwing] void knight moved 2.240005 units total
[INFO]:[Redwing] currentPos is (2.5, 1.7) and init position is (1.9, 1.7)
[INFO]:[Redwing] void knight moved 2.800017 units total
[INFO]:[Redwing] currentPos is (38.0, 20.4) and init position is (2.5, 1.7)
[INFO]:[Redwing] void knight moved 42.9509 units total
[INFO]:[Redwing] currentPos is (38.0, 20.4) and init position is (38.0, 20.4)
[INFO]:[Redwing] void knight moved 42.9509 units total
[INFO]:[Redwing] currentPos is (38.6, 20.4) and init position is (38.0, 20.4)
[INFO]:[Redwing] void knight moved 43.51091 units total
#

so uh for one my method runs faster than the game does its physics calculation

#

so sometimes the knight won't move at all in between timesteps

#

but

#

here's what's interesting. The knight transform got moved very far to the right and very high in the air

#

this being off the dirtmouth elevator dashing to the right

#

and more interesting

#

it kept its trasnform

#

until the end of the dash

#

and guess what, it still has that crazy transform

#

so how is the knight still in bounds

rain cedar
#

Maybe some shenanigans with local pos

#

Does the knight have a parent object?

compact sedge
#

nope

#

now here's where the shenanigans gets even more crazy

#

stepping on an elevator, and only doing that, resets the position to something normal

#

but when you dash over an elevator, you avoid stepping on it and keep your weird transform

#

or do you actually I'm not quite sure

#

omg no I figured it out I was actually wrong it's nothing to do with ledges and everything to do with what seanpr said

#

and

#

also

#

that's how elevator storage works

#

when you step on an elevator, you become a child to that elevator

#

and you lose it on stepping off

#

so your position goes crazy as a result

leaden hedge
#

good code

compact sedge
#

and that's why

#

you can hit an elevator and ride up

#

while off the elevator with elevator storage

#

ok

#

does transform.position always give me absolute position?

#

with respect to the scene

#

?

rain cedar
#

I don't think so

compact sedge
#

well at least I found a speedrunning trick the hard way

leaden hedge
#

transform.position should be worldPos

compact sedge
#

ok

leaden hedge
#

localPosition is relative to parent

#

afaik

compact sedge
#

I was using localPosition and I thought it didn't matter because the knight had no parents

young walrus
#

This is where a tas tool would be sick to see if we can use that crazy position and go there

compact sedge
#

but

#

im a meme

#

and apparently elevator parents

#

this game still confuses me

#

ok it works thanks that's one of my most major bugs gone

compact sedge
#

I should make all the jellyfish in fog canyon say "monomod" when dreamnailed

#

hey I bet y'all have never heard that one before

rain cedar
#

haha monomon

compact sedge
#

fuck steam crashed

#

whenever steam crashes I have to quit my game because the game will freeze on trying to save

compact sedge
#

ok so uh I need a really hacky solution to the very major problem of THK not having a hitbox like at all

#

should I just slap on a BoxCollider2D to him and call it a day?

rain cedar
#

There's gotta be something there already for hit/damage detection

compact sedge
#

yes but not a BoxCollider2D which is what I'm using for literally every other enemy

#

well all but 4 which also for some reason lack hitboxes

#

but they don't matter enough and I really wanna ship this thing

rain cedar
#

Are they using a polygon collider for him?

compact sedge
#

no regular unity collider at all or it would work with my thing

#

I'm just using normal unity collision

rain cedar
#

Weird

compact sedge
#

here's what's on him:

\--Component: MeshRenderer
              \--Component: MeshFilter
              \--Component: tk2dSprite
              \--Component: Rigidbody2D
              \--Component: tk2dSpriteAnimator
              \--Component: PlayMakerFixedUpdate
              \--Component: SpriteFlash
              \--Component: PlayMakerFSM
              \--Component: PlayMakerFSM
              \--Component: InfectedEnemyEffects
              \--Component: EnemyDeathEffects
              \--Component: HealthManager
              \--Component: ExtraDamageable
              \--Component: DamageHero
#

literally the same as the fool eater in this case

#

well not literally the same

#

but the same behavior

#

I'ma look into if ExtraDamageable is a thing I can use

#

but if not I'm so willing to make a redwing_hacky_workarounds class

#

that literally adds a collider to thk

rain cedar
#

Maybe his collider is added some time after load by an FSM

#

There's just no way that fight would work with no colliders

compact sedge
#

...maybe but here's the facts. if THK has a standard collider at all it should work with my stuff

#

and by standard I mean UNITY collider

#

not like a special weird playmaker or custom coded collider

rain cedar
#

I doubt they made their own custom collider

compact sedge
#

what if playmaker did

rain cedar
#

Also doubt it but maybe

compact sedge
#

oh crap I know why this is happening and I have no idea how to fix this

#

the colliders are on the children of THK

#

I bet the fool eater is the same way

#

so here's the issue the children have the correct layer and all that

#

but no healthmanager

#

so I just need to check if healthmanager is null or something and then get component in their parents

#

except

#

I need the component in the parent twice removed

#

for thk

#

Also now this modcommon function has become more than useless, but actually counterproductive otherCollider.gameObject.IsGameEnemy()

rain cedar
#

Should be pretty easy to make a recursive parent component finder

#
T GetComponentInParent<T>(GameObject obj, int maxRecursion = 5, int currentRecursion = 0) : where T : Component
{
    if (currentRecursion > maxRecursion) return null;
    T component = obj.GetComponent<T>();
    if (component != null) return component;
    if (obj.transform.parent == null) return null;
    return GetComponentInParent<T>(obj.transform.parent, maxRecursion, currentRecursion + 1);
}```
I just wrote this in notepad++ so idk if it works
compact sedge
#
private static HealthManager getHealthManagerRecursive(GameObject target)
        {
            HealthManager targetHP = null;
            while (target != null && targetHP == null)
            {
                targetHP = target.GetComponent<HealthManager>();
                target = target.transform.parent.gameObject;
            }
            return targetHP;
        }
``` this is the crappy thing I wrote lul
rain cedar
#

Oh right transform.parent is another transform

#

Mine won't work without at least that being changed

compact sedge
#

idk if mine would work either tbh

rain cedar
#

Not sure if it's possible to have recursive parenting

#

Or why you'd even want that

#

But yours will break if that's a thing

compact sedge
#

I don't think that's in the game
Boss Control\Hollow Knight Boss\Colliders\Head

#

I hope not

#

I could add an iterator

#
        private static HealthManager getHealthManagerRecursive(GameObject target)
        {
            HealthManager targetHP = null;
            int i = 30;
            while (target != null && targetHP == null && i > 0)
            {
                targetHP = target.GetComponent<HealthManager>();
                target = target.transform.parent.gameObject;
                i--;
            }
            return targetHP;
        }```
#

ok

#

that should't break then

#

I hope

#

I'll log i to see how long it takes I guess

rain cedar
#

Should be fine, it's only going a couple parents up

compact sedge
#

yes

#

it works

#

i is 27 which tells me it went up 2 steps

#

cuz im a bad coder

#

tbh

#

I'm so glad the me from 18 hours ago decided to rewrite and simplify my damage enemies function

#

thanks for the help

#

ima wait until tomorrow to release it but now there's only one known redwing bug and it's so small it might as well not exist

rain cedar
#

Cool

compact sedge
#

well I shouldn't lie: there's actually 2. both graphical, both only apply to a very small section of the game. but one of them I intend on fixing in CP1 and one of them is so tiny I bet nobody will even find it

rain cedar
#

What does CP1 mean other than content pack 1 (Hidden Dreams)?

#

Because that makes no sense

compact sedge
#

it means redwing content pack 1

rain cedar
#

Wow fancy

compact sedge
#

Codename: radiation conjurer for obvious reasons

#

it will bring in bug fixes, possibly effects on spells, and lore

rain cedar
#

Can't wait for the in depth lore explanation videos

compact sedge
#

between then and now I also wanna do one patch, which will make hardmode harder and fix any bugs people find in the meantime

#

my only deadline is pre GnG. if I release after GnG then my "early 2018" joke will be more sad than funny

copper nacelle
#

gng please release tomorrow thanks

floral furnace
#

If TC's estimate is true then dont worry Angle you still have like 5 months left to work on it

copper nacelle
#

more like

compact sedge
#

heh

copper nacelle
#

delayed again

compact sedge
#

wait

#

if I release it on june 30th

#

it's like the latest possible "early 2018"

copper nacelle
#

wrong

floral furnace
#

mid 2018

copper nacelle
#

before noon July 1st

compact sedge
#

well not by their standards

trim totem
#

tc confirmed it is december 20

#

it is in the lore

compact sedge
#

look I'm 8 hours behind

#

so if I release tomorrow it will be July 1st in australia

floral furnace
#

The flow of time in Australia is convoluted

trim totem
#

december 20th is early 2018 in australia

rain cedar
tidal marsh
#

There's a modding community for this game!?

#

Aw hell ye boi

steep sail
compact sedge
#

hey can someone who runs the modding api change the version to 44?

#

there's some stuff that got changed in the hooks

#

DashPressedHook got changed to a bool

#

I need to wait for the modding api version number change to release redwing because otherwise it will break with people running modding api 43, the old 43 that is.

copper nacelle
#

check for the hook with reflection

#

wait

compact sedge
#

no that's dumb

#

and ur a meme

copper nacelle
#

MethodInfo.ReturnType

#

ur a meme

#

no assets

compact sedge
#

no it's really memey to use reflection to ensure they have the right modding api

#

oh lol the modding api zip needs to be rebuilt anyway

compact sedge
#

or at least that it launches and all the vanilla stuff still mostly works

flat forum
#

56

#

new LostLord when?

copper nacelle
#

idk i'm in new york

flat forum
#

new york?

#

what

#

are you doing in new york?

#

don't you dare not enjoy your time

#

and if I catch you feeling down it'll be your demise

compact sedge
#

doesn't 56 live in new york?

hollow pier
#

i thought 56 was an ai placed in a remote location

compact sedge
#

it might be

compact sedge
#

ok ima play through the game on steel soul and if nobody finds any problems with that modding api by the time I'm done I'm gonna assume it works perfectly

leaden hedge
#

unless you confirm it works on debianOS you can't share that potentially faulty api

compact sedge
#

that's the one OS I can confirm it works on :P

leaden hedge
#

tbh someone should make a mod that unit tests the api

#

just forces every hook with a bunch of inputs and checks the output

compact sedge
#

but the purpose of updating the modding api is to change/improve the modding hooks

#

it would fail on the DashVectorPressed test and the DashPressedHook one too

#

I'm more interested that this assembly works on windows

#

since I can't test it on windows

#

I wanna update the modlinks to use this binary but I don't want to if it has any problems at all on other OSes

#
  1. because this binary is new and up to date
  2. because splitting the modding api into mac, linux, and windows versions probably isn't needed anymroe
#

oh and 3) because I need this new API for redwing

rain cedar
compact sedge
#

no not all MS systems

#

just the xbox 360

#

the xbox 1 is like, 359 worse

rain cedar
#

This is an enum from XNA

#

So that wasn't a thing

compact sedge
#

but like... what game even uses xna

#

even celeste uses the foss clone of it

rain cedar
#

Salt & Sanctuary

compact sedge
#

ree they're not using monogame

#

sorry

rain cedar
#

I don't really know the differences tbh

#

It could very well be MonoGame

#

All I know is that MonoGame is newer

compact sedge
#

maybe so. monogame is a clone of xna 4 and it's open source

#

and it's actively developed

#

xna is a dead engine that is closed source

rain cedar
#

I meant functional differences

compact sedge
#

for example I think Owlboy is using xna because they started development really really long ago

#

oh none

#

it's a clone

#

but

#

I guess it runs better

#

and it is designed to work on more OSes

#

like the PS4 for example

rain cedar
#

It's probably monogame then since it's on PS4 and vita

compact sedge
#

probably. I'm surprised they wouldn't update that line description though

fair rampart
#

so like what are the odds of, if not now then ever, of being able to alter the knights appearance even if it's via a charm? (read: can we play as the tiny version of the hollow knight at some point?)

rain cedar
#

That's possible

hazy sentinel
#

ScaleMod hollowomg

fair rampart
#

im modding retarded so i need a lot of hand holding. i have the mod installer and use lightbringer and sometimes turn on the health bars but aside from that i have no idea what im doing or what most of the mods do.

#

what IS scale mod.

rain cedar
#

It changes your scale

fair rampart
#

kinda like the shell charm making you 25% smaller in lightbringer?

rain cedar
#

Sounds similar

fair rampart
#

coolcool

#

i also am not sure if i had instigated some confusion with my original statement--- the protagonist-sized hollow knight from the scene when you're obtaining the void heart is what i was referencing.

rain cedar
#

But you play the same dude in that sequence

#

So...

#

Done

#

I made the mod

fair rampart
hazy sentinel
#

if you're saying you want to resprite player character to young THK that's way too much work

#

don't have enough sprites to replace all animations and you'd probably have to replace them manually

fair rampart
#

that was why i asked if it was possible or if it would be in the future. modding of certain games become easier overtime and was not sure how it worked for this one.

hazy sentinel
#

you'd probably need to hand draw thousands of sprites to do that

solemn rivet
#

well

#

^

#

that

fair rampart
#

ah then that's a bit much. thanks for the answer.

solemn rivet
#

that is actually the hardest part tbh

fair rampart
#

im not doubting someone will be willing to do resprites in the future but from the sounds of it even if one was to do so it would be absolutely frustrating to wade through it all.

#

either way thanks again. i always tend to get good help when i come here. love the community for this game.

compact sedge
#

well if you're respriting one enemy you could use a tool like asprite or something to make animation easier

#

but this isn't something that will ever get easier over time I don't think. the bulk of the work is in the art itself

fair rampart
#

that makes sense. thats also why i asked or suggested altering the visuals via a charm as some can have an effect overlay like the glass soul making you flicker and the defenders crest giving you the cloud.

compact sedge
#

kdt may or may not at some point been working on splitting the knight into various chunks that you could recolor separately

#

outside of that you can change the color of the knight as a whole

#

and the code for that is pretty easy

#

and color includes opacity

#

so you can make the knight flicker

#

or if you're clever you could have the knight be semi-transparent and draw something directly behind it

fair rampart
#

id like to dabble but like most modding its almost always going to involve some sort of coding and i just absolutely dont know anything about that quite yet. which is why im more or less stuck with asking questions for the time being.

rain cedar
#

If you pull your weight in some other way (art), people might be willing to do the code part instead of you

fair rampart
#

ooh. that makes sense. team effort. i like that idea.

compact sedge
#

Hey y'all. Happy to announce that Redwing is officially out and on the Google Drive, as well as in the mod installer.

hazy sentinel
compact sedge
#

It's the exact opposite of the kind of mod I'd have made if I made it only by asking speedrunners for suggestions, but nevertheless I'm still very happy with the results.

#

veru it's because I can't embed images in the google drive readme

#

the zip has a real readme

#

Now the question is... how many days did I beat the launch of GnG by

rain cedar
#

6

compact sedge
#

hey sean can you do me a favor and update in the source code (the binaries are already good) the modding api to say version 44 instead of 43?

rain cedar
#

Alright

leaden hedge
#

wow unity 420 iq outsmarted me

#

the unscaledDeltaTime apparently isn't used to calculate the deltaTime

exotic venture
#

wait how's nosk

#

or those mawleks

leaden hedge
#

don't think I have any mawleks alive

#

I don't have nosk alive

exotic venture
#

mawleks in ancient basin respawn i thought

#

like, on the road towards lost kin

steep sail
#

debug mod?

don't think I have any mawleks alive
I don't have nosk alive
````KDT - 01-07-2018 17:15 | #modding`
exotic venture
compact sedge
#

idk what mod this is for kdt but wow

copper nacelle
#

tas

compact sedge
#

oh right lol

leaden hedge
#
Load Cheat Engine and Hollow Knight [Current Patch]
Open Process... Select Hollow Knight
Middle Left there is "Memory View" click it to open a new window
Press Ctrl+G
Go to "hollow_knight.exe+3DEAA9"
There should be an instruction that says "movss [esi+68],xmm0"
Right click the instruction > Find out what Address this instruction accesses
Double Click on the only item in the list in the new window that opened
Select Stop on this window and close it
Right click the instruction > Replace with code that does nothing
Then just set the value to whatever in the address list
#

here you go

#

"mod"

#

hollow_knight.exe+3DE97C is for unscaledDeltaTime

compact sedge
#

lol ok

#

well time confuses me

leaden hedge
#

this is way better anyway

supple sigil
#

hmmmm

compact sedge
#

nice to see u workn on nightmare god grimm again

#

so this is just from it running the unscaledDeltaTime functions way more times than it should? or is it from unscaledDeltaTime always reporting a value of 0, infinity, or some other number?

leaden hedge
#

its the deltaTime reporting a time of 2

#

usually at 120fps it reports 0.00065

compact sedge
#

is that other number the actual time that passed

leaden hedge
#

yeah

compact sedge
#

so what controls the animation speeds then?

leaden hedge
#

deltaTime

compact sedge
#

no but cuz like those balls and stuff were moving normal speed

leaden hedge
#

oh the actual speed

#

fixedDeltaTime

compact sedge
#

and I'm not quite sure if that means that at low fps grimm is objectively harder

#

oh

leaden hedge
#

its basically saying if the game lagged so it only ran one frame every 2 seconds

#

this is what it'd look like

#

if speed up to 60fps

compact sedge
#

not really, because if the game ran one fram every 2 seconds it would run 100 fixed time updates in between both frames, right?

leaden hedge
#

depends

#

fixedupdate gets called when the mainloop has free time

#

which it probably doesn't if its lagging to one frame every 2 seconds

#

afaik fixedupdate only gets ran at the beginning of update

compact sedge
#

So it's impossible to make a TAS that's both consistent and perfectly matches real world behavior then

leaden hedge
#

and will do X updates to match how many it should have done

compact sedge
#

but it's ok, because TASes are like 80% theater anyway

leaden hedge
#

so at low fps it skips them and does them all at once, and at high fps its no different

#
It's worth noting that if the game is running at a slow frame rate, there will be numerous physics updates between each visible frame render. Conversely, if the game is running at a very high frame rate, there may be no physics steps at all between some of the frame renders, because the time elapsed since the last rendered frame has not yet exceeded the time period of a single physics step.
#

I think it may be possible to fix that though tbh

#

by having a var say how many fixed updates it should do on this frame

compact sedge
#

yeah that might not match 100% real world behavior but it would make the TAS at least look realistic

leaden hedge
#

or actually

#

I can probably nop the function that sets the total time elapsed

#

and increment it by the custom deltaTime

compact sedge
#

that's good and not the worst idea but don't do that

leaden hedge
#

it wouldn't visually match if it lagged

compact sedge
#

because floats get inaccurate to the point where it matters after like 20 minutes or so

leaden hedge
#

but it should emulate the same mechanics

compact sedge
#

you probably want to track the total amount of time that passes but do so in a way that your floats aren't exceeding like 50 seconds or so. or use doubles.

leaden hedge
#

doubles and floats are aids in asm

compact sedge
#

you're writing this in ASM?!?!!

leaden hedge
#

yes

compact sedge
#

...why?

leaden hedge
#

I need to replace internal unity features

#

theres no way to override Unities Time.deltaTime afaik

#

or the fixedDeltaTime

compact sedge
#

what if you removed those functions from the unity DLL and then rewrote them or something?

leaden hedge
#

I believe the engine does physics and collision based on its internal variables

#

so Id have to completely rewrite that

compact sedge
#

what's the backend for unity?

#

c++?

#

or some other compiled language?

leaden hedge
#

c++ > mono > code

#

its like an onion

#

but I know more about asm than I do about hacking c++ exes

#

to load arbitrary code

compact sedge
#

what can't you use LD_PRELOAD?

#

LD_PRELOAD="mybinary" ./hollow_knight

#
LD_PRELOAD
              A list of additional, user-specified, ELF shared objects to be loaded before all others.  The items  of
              the  list  can be separated by spaces or colons.  This can be used to selectively override functions in
              other shared objects.  The objects are searched for using the rules given under DESCRIPTION.```
#

This can be used to selectively override functions in other shared objects.

leaden hedge
#

what am I going to override

compact sedge
#

deltaTime?

#

the internal one

leaden hedge
#

who knows where or how thats implemented in c++

compact sedge
#

it doesn't matter, if you find the function in ASM you can override that

#

by using the asm name

leaden hedge
#

I have no idea where to start on LD_PRELOAD

#

apparently I need to know the class name and function prototype

#

I don't think it'll even be a function it'll probably be a field

compact sedge
#

well for one I think it's only for hooking external function calls IIRC

#

so what you can do is hook on its external call to glibc or whatever where it gets the system time or something. and access whatever memory it has as that point or run the original function.

leaden hedge
#

its

#

winmm.GetTime

#

this

#

well on windows anyway

compact sedge
#

actually let me try to write a testcase because I'm on the OS where this kind of stuff is actually a lot easier

#

so uh what do you use to dump the assembly

leaden hedge
#

I'm not

#

I'm just editing the memory as it runs

compact sedge
#

ok well let me install ltrace and see what I can do

leaden hedge
#

also doing it this way will probably still require some asm somewhere

#

as I doubt this will fix the fixedDeltaTime anim/movement stuff

#

actually it might

#

I guess I'd have to see

compact sedge
#

alright I'm just gonna make a very simple override and use gdb or something to view what memory I can access

#

directly in code

#

truth be told I've never tried this but I heard about it and I wanna see how feasable it is

leaden hedge
#

I know it updates the right amount if you replace the system time

#

as thats how CE speedhack works

#

and it updates the right amount

#

but it might still have sync issues

compact sedge
#

ugh I wish I didn't have to run steam to do this

#

right now wishing I had a gog binary

leaden hedge
#

if it starts on like half way through a fixed update cycle

#

so the frames that would have a fixedupdate or 2 instead of none or 1

#

being able to directly say THIS FRAME WILL HAVE 3 FIXED UPDATES

#

will be probably the only way to get it to sync

compact sedge
#

on linux it's calling gettimeofday from <sys/time.h>

leaden hedge
#

but tbh once this is done all I have to do is figure out loading being random and prng I hope anyway

#

besides you know playing inputs back from a file

compact sedge
#

aaaaaaaaaa

#

ok

#

the steam drm is getting in my way

#

fuck

#

but I don't wanna buy the game again on gog

#

ughhhh

#

well it works but I'm a big meme and I called my function recursively

#

which caused a segfault

copper nacelle
#

i did that for the language hook

#

crashed the game

compact sedge
#

aha it worked now to figure out why it's returning weird values

copper nacelle
#

would recommend

compact sedge
#

#include <dlfcn.h>
#include <stdio.h>
#include <sys/time.h>
#include <iostream>

typedef int (*orig_gettimeofday)(struct timeval *tv, struct timezone *tz);

int gettimeofday(struct timeval *tv, struct timezone *tz) {

    orig_gettimeofday origFunction = (orig_gettimeofday) dlsym(RTLD_NEXT, "gettimeofday");

    int memeTime = (int)orig_gettimeofday(tv, tz);
    std::cout << "the int returned by gtod is " << memeTime << " and tv_usec is " << tv->tv_usec;

    return memeTime;
}

here's my current code which doesn't actually work

#

well it works

#

but it's returning weird shit

#
ArgumentOutOfRangeException: Value 5940458702234077184 is outside the valid range [0,3155378975999999999].
Parameter name: ticks
  at System.DateTime..ctor (Int64 ticks) [0x00000] in <filename unknown>:0
  at System.DateTime.get_Now () [0x00000] in <filename unknown>:0
  at UnityEngine.GUI..cctor () [0x00000] in <filename unknown>:0
Rethrow as TypeInitializationException: An exception was thrown by the type initializer for UnityEngine.GUI
  at OnScreenDebugInfo+<Start>c__Iterator0.MoveNext () [0x00000] in <filename unknown>:0
  at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00000] in <filena$

in player.log

leaden hedge
#

good code

compact sedge
#

also cout doesn't print to the terminal for some reason

#

ok so uh unity discards cout

#

and cerr

#

what should I do to log stuff

leaden hedge
#

write to a file maybe

copper nacelle
#

^

compact sedge
#

YESSSSSSS

#

it works

leaden hedge
#

ok now figure out what calls fixed update

compact sedge
#

it doesn't matter

#

i'm hooking even lower level than that

leaden hedge
#

it does matter

compact sedge
#

I'm literally able to tell the game to use any timescale I want

#

now

leaden hedge
#

imagine you start your code after 1100 ms and fixed update is every 1000ms

#

compared to starting it at 1900ms

#

in one case you'd get a fixed update after 100m

#

and the other after 900

#

meaning you wouldn't get the amount of fixed updates per frame

compact sedge
#

no what I mean is this is the low level way that it gets the time

leaden hedge
#

like you'd get the same amount of updates overall

compact sedge
#

for both of these

leaden hedge
#

but it won't sync

#

imagine the first frame you expect to fixed updates on a frame that took 25ms

#

that can only happen if fixed update was 5 frames away from proccing

#

unless we make sure no updates besides what are necessary run

#

and even then it'd only work running from a fresh game load

compact sedge
#

I'm not sure what you mean but what I can say is this. I can use this to make code that forces the game to run at a fixed framerate

#

basically make it into celeste kinda

#

idk

leaden hedge
#

so fixedupdate runs once per x milliseconds that pass

#

if your frametime isnt a perfect multiple of this

#

its effectively how fixedupdates you'll get per frame

#

this would sync from a powered on state

#

but fixed update only runs at the start of update

#

so the code looks something like this

Update(){
    while(FixedTime < currentTime){
        FixedTime += fixedDeltaTime;
        FixedUpdate();
    }
    //stuff
}
compact sedge
#

except here's the catch. I can tell the game how many milliseconds pass.

leaden hedge
#

well it doesn't matter

compact sedge
#

and this would apply to both fixed update and regular update

leaden hedge
#

because you don't want to run this from start

#

you'll be rerunning scripts repeatedly

#

post launch

#

making FixedTime random

#

at the start of your TAS

#

except for a full game TAS

#

so it'd make say doing the THK fight to test one move

#

you'd have to do the entire TAS from the start

compact sedge
#

wew setting it to 100us makes the game really slow

#

setting it too high causes the game to not load

leaden hedge
#

.33 seconds is the highest it wants to go

#

afaik

compact sedge
#

the "problem" is as you said it can't distinguish between the various kinds of updates

#

so if unity internally is expecting 1ms to pass between calls for one thing and 10ms to pass between them for another it will get messed up

leaden hedge
#

I didn't have a problem with it not loading

compact sedge
#

I got it runnning as fast as possible

leaden hedge
#

looks real smooth

compact sedge
#

I hate how unsmooth my screen recording program is

#

sry

leaden hedge
#

I think the easiest way tbh

compact sedge
#

its running great in game

copper nacelle
#

unsmooth

exotic venture
#

amazing-56

leaden hedge
#

is make sure time elapsed is always a factor of fixedTimeStep

#

so 1/50, 1/100 or 1/150 of a second etc

#

can you replace functions in the Random class

#

oh LoL

#

I just killed NGG2

copper nacelle
#

nice

leaden hedge
#

just mashed nail and heal

#

good fight

#

v hard

#

much skill

compact sedge
#

yeah ur right this isn't that useful

#

memes

#

very large spread in difference in times between calls:

0.000166 since last call.
3.7e-05 since last call.
6.4e-05 since last call.
3.1e-05 since last call.
3.2e-05 since last call.
1.6e-05 since last call.
1.6e-05 since last call.
0.000233 since last call.
2.6e-05 since last call.
1.6e-05 since last call.
1.4e-05 since last call.
8.2e-05 since last call.
2.4e-05 since last call.
1.6e-05 since last call.
1.4e-05 since last call.
8.5e-05 since last call.
2.1e-05 since last call.
1.6e-05 since last call.
1.4e-05 since last call.
3.6e-05 since last call.
0.000103 since last call.
2.7e-05 since last call.
1.4e-05 since last call.
1.4e-05 since last call.
3.5e-05 since last call.
0.00085 since last call.
3.5e-05 since last call.
2.3e-05 since last call.
2.1e-05 since last call.
0.000109 since last call.
#

maybe it's possible to only run if the function that calls this function has a certain name or something

leaden hedge
#

im just going to make it so deltaTime is equal to fixedDeltaTime

compact sedge
#

ok probably the smarter move

leaden hedge
#

and then fps cap at 50

#

so it plays back at a close to realistic rate

#

now all I need is to write a mod

#

that checks game state / sets inputs from a file

#

and make rng deterministic

#

I don't think unity uses Random internally

#

so just replacing all instances of it in the assembly with a custom function

#

should work

compact sedge
#

huh maybe I can override internal functions

#

it uses rand

#

from stdlib

leaden hedge
#

can you access any variables outside that

#

preferably how many milliseconds its been running

#

well your program will have that right

#

so if you seed the rand with that

#

it should always return the same data

orchid fractal
#

is there like a doc that explains what all the mods do?

young walrus
#

The Readme that comes with each

compact sedge
#

I could

#

yes

#

or I could

#
const int totallyRandomNumber = 0;

int rand() {


    return 4;
}```
leaden hedge
#

I dunno if that will work good

copper nacelle
#

wouldn't that make stuff like

leaden hedge
#

nice xkcd refernce though

#

and yes

copper nacelle
#

do the same attack 400 times in a row

leaden hedge
#

enemies would constantly repeat attacks

#

unless they have triggers + random

#

which is why I said to use the current time running

#

preferably the time spent in the room

#

so you can just start a section outside a room and it'd sync in a full game tas

compact sedge
#

ok so overriding rand works but it only runs it once to seed its actual random number generator

#

which is internal

leaden hedge
#

unhelpful

#

as its likely the order things ask for random for is random

#

or atleast undeterministic

compact sedge
#

wait maybe

#

hold on a sec

leaden hedge
#

I don't trust unity to load stuff in order

copper nacelle
#

why not just set the seed to 4

leaden hedge
#

see above

copper nacelle
#

ah

leaden hedge
#

it needs to be seeded per request and the seed needs to be frame based

#

so everything that requests random will get the same value every run through

#

but if the seed is just set once, and then A asks for rand then B once, but next time B asks before A

#

wow desync'd nice

compact sedge
#

actually setting the seed to a static number using this isn't the worst idea imo

orchid fractal
#

the boop mod doesn't have a readme, what does it do?

leaden hedge
#

replaces sounds with boop

young walrus
#

Makes noise

copper nacelle
#

B O O P

orchid fractal
leaden hedge
#

hmm

#

can monomod not override fields

copper nacelle
#

@compact sedge is hardmode a global setting var

leaden hedge
#

yes

compact sedge
#

yes

copper nacelle
#

cool

clever imp
#

Is there a place with like, descriptions for what mods are

#

All I can find is that list of them in pins

copper nacelle
clever imp
#

Any reason to use HPBar and Enemy HPBar at the same time

leaden hedge
#

no

#

enemy hpbar is effectively hpbar2

#

hpbar is legacy atm

clever imp
#

Oh I see

#

Thanks guys

#

Probably in some kind of faq but if I'm modding will I still get steam achievements

young walrus
#

Yes

clever imp
#

Okay thank you everyone

#

โค happygrub

fair rampart
#

ive been using both hp bars oops lol

leaden hedge
#

old one won't do anything post lifeblood

#

it uses an old class

#

that doesn't exist anymore

fair rampart
#

oh cool then it wasnt doing anything anyway

orchid fractal
#

is the randomizer mod supposed to skip vengeful spirit?

copper nacelle
#

what

hollow pier
#

its just a pickup then you walk into the mound

orchid fractal
#

ic

#

thought I got screwed out of progressing to greenpath

hollow pier
#

there are a lot of ways to enter gpath

compact sedge
#

can you get to queen's gardens from deepnest with just wall jump and dash?

#

because if so you could climb to greenpath from there I think

young walrus
#

Go through howling cliffs

compact sedge
#

pfft that's the easy way

young walrus
#

And yeah. There's like 10 things you can use to get into greenpath.

compact sedge
#

what does howling cliffs require

#

to get to greenpath from there I mean

#

I know you need wall jumping but anything else?

young walrus
#

Claw

#

That's it

compact sedge
#

dang

misty cedar
#

With the Hollow Knight Randomizer, is there any way to manually customise which items are obtained where? Say if I want to change the progression path, I'd like to manually replace Vengeful Spirit with the Monarch Wings at the Ancestral Mound?

young walrus
#

No

#

Would have to find the specific seed that does that

#

Or just write your own mod xml

compact sedge
#

hollow knight custom mod when

misty cedar
#

I don't know if this is for generating a custom seed or for explaining what a seed I am using will do.

copper nacelle
#

shows you items you can get with what you have

young walrus
#

Tells you what item locations are reachable with your current equipment

misty cedar
#

Oh ok

young walrus
#

It doesn't interact with randomizer in any way

#

Just helps the player with game knowledge

misty cedar
#

Is anyone working on a custom randomizer tool that creates a .xml where you can choose where and what items you find? Something akin to the Universal Pokemon Randomizer?

young walrus
#

No

misty cedar
#

shit

#

:/

copper nacelle
#

you do it

compact sedge
#

no u

#

/s

copper nacelle
#

๐Ÿ”ƒ

young walrus
#

U no

misty cedar
#

I'm a beginner of C# and that's it, I don't believe I have the sufficient knowledge required to do that. But I would love to if I could. ๐Ÿ˜ƒ

copper nacelle
#

best way to learn is doing imo

compact sedge
#

best way is copying other people's code

#

like how @copper nacelle copies my name

misty cedar
#

All true

young walrus
#

Thought you were given green name for a minute

misty cedar
#

Stack Overflow is my bible.

young walrus
#

Then realized it was just 56 memeing

copper nacelle
#

how's redwing hardmode btw

compact sedge
#

I beat it so it's not that hard

#

lol

rain cedar
#

Do you mean like a plando or just custom logic?

young walrus
#

Plando I think

compact sedge
#

the only boss that killed me on redwing hardmode was the crystal guardian stage 2

#

who I fought with a +1 nail upgrade

#

and 5 hp

hazy sentinel
#

what does hardmode do

compact sedge
#

it makes it so you can only do damage with redwing attacks

#

all others do 1 dmg

copper nacelle
#

1 damage for everything but fire attacks

compact sedge
#

also

#

you get a pity greatslash

#

it's a weaker version of normal one

copper nacelle
#

does that launch out fireballs

compact sedge
#

but it makes it so you can actually kill balders

#

the pity one launches 1 fireball

#

the normal one launches 4

copper nacelle
#

nice

compact sedge
#

I didn't want to have the blackmoth problem of unkillable enemies before you unlock spells

rain cedar
#

How can there be a balder when everything in the game is already bald?

young walrus
compact sedge
#

it like a baldur but for people who are angles instead of angels

hazy sentinel
#

should i stream hardmode meme

copper nacelle
#

Ree

#

I was gonna do that

rain cedar
#

Stream low% nsoob

hazy sentinel
#

also why are there like 90 settings

compact sedge
#

because I made absolutely everything configurable

copper nacelle
#

cause it's aa

misty cedar
#

@compact sedge Could you give me a quick summary of what is changed in Redwing? I have it downloaded but I haven't tried it out yet.

copper nacelle
#

f i r e b a l l s

#

and l a s e r s

misty cedar
#

Yoshi?

compact sedge
#

yum

copper nacelle
#

why does mobile correct r to e

hazy sentinel
young walrus
#

Redwing hasn't changed for you if you've. Never tried it. zote

compact sedge
#

doesn't do anything yet tho

copper nacelle
misty cedar
#

I don't get it. dunq

compact sedge
#

lore isn't coming until CP1 or at least my first patch.
also I have a setting to override blackmoth cloak color and that doesn't make sense because blackmoth doesn't change your cloak color yet

young walrus
#

Do you like fire? Do you like balls? If so, you'll like redwing

compact sedge
hazy sentinel
#

is there a hardmode bool or do you just set each thing manually

compact sedge
copper nacelle
#

i mean what

compact sedge
#

no there's a bool

#

it's very explicit

hazy sentinel
#

whomst

compact sedge
#

handicapAllNonFireAttacks

copper nacelle
hazy sentinel
#

wow very clear

#

just look out for the handicap

misty cedar
#

So a bunch of fiery meatball attacks, good.

compact sedge
#

yeah I guess. It doesn't affect save files you could could download it and try it out on an existing one if you really wanted to. but it's designed for new games

misty cedar
#

Cool, well thanks for chat, got to go, see you.

copper nacelle
compact sedge
#

tbh it's not that hard tho... not yet. there will definitely be more options to make it harder in the future.

hazy sentinel
compact sedge
#

RIP

#

oh forgot about that

copper nacelle
#

@compact sedge

            EventInfo hi = ModHooks.Instance.GetType().GetEvent("HitInstanceHook", BindingFlags.Instance | BindingFlags.Public);
            isHitInstance = !Equals(hi, null);
            if (isHitInstance)
            {
                Log("HitInstanceHook found!");
                Delegate handler = Delegate.CreateDelegate(hi.EventHandlerType, this, "SetDamages");
                hi.AddEventHandler(ModHooks.Instance, handler);
            }
            else
            {
                Log("HitInstanceHook not found! Using older methods.");
                ModHooks.Instance.HeroUpdateHook += OldSetDamages;
                ModHooks.Instance.OnGetEventSenderHook += DashSoul;
            }
compact sedge
#

mono straight up crashed when I used monomod hooks with blackmoth

rain cedar
#

Why is it red?

copper nacelle
#

diff

rain cedar
#

Ok but how do you even get color formatting into discord?

copper nacelle
#

```diff

  • red
  • green
    ```
rain cedar
#

Cool

bronze temple
#

@compact sedge are you sure that you're using the newest version of MonoMod?

copper nacelle
#

probably not tbh

compact sedge
#

uhh well all I know is it compiled successfully and broke in runtime

#

and also

#

I used the precompiled binary and it broke too

bronze temple
#

precompiled binary from where?

compact sedge
#

the google drive

#

for mod common

#

plus old blackmoth

#

that had the hook

bronze temple
copper nacelle
#

that but outdated

#

lemme check how many commits behind i am

compact sedge
#

^

bronze temple
#

yeah uh

copper nacelle
#

oh no

bronze temple
copper nacelle
#

13 commits behind

compact sedge
#

all I know is just having the hook in blackmoth caused it to fail for some reason. possibly because of that

copper nacelle
#

i'll go update it

bronze temple
#

also

#

that one was prone to cause SIGSEGVs all over the place

#

but only on Mono, not the .NET Framework

compact sedge
#

it was a sigabrt

bronze temple
#

ah

compact sedge
#

let me see if I have the coredump

leaden hedge
#

wow 0x0ade instantly here when someone mentions monomod breaking

compact sedge
#

probably not useful because unity bundles its own mono

#

which is old

copper nacelle
#

0x0ade can sense monomod mentions

#

true facts

compact sedge
#

no I don't have the coredump anymore it got deleted beause it's kinda old

bronze temple
#

well, if you somehow remember if you had a stack trace related to that

#

and if it in any way mentioned getting the param info,

#

it's that

copper nacelle
#

unrelated question: can i use reference monomod utils and then merge monomod utils w/ the dll and use them

bronze temple
#

otherwise, if it's just seemingly random memory corruption,

#

it's the lack of 64-bit jumps when they were required

#

because I've been told that code will never be separated more than 2 GB from each other hollowomg

#

thanks Linux

leaden hedge
#

linux not believing in ACE

compact sedge
#

all I know is I got a black screen after the mods loaded and then the game crashed and there were like no useful debug symbols in either mono or unity.

leaden hedge
#

I want to execute textures as code

#

thanks

compact sedge
#

and because I'm dumb I don't have any of my system libraries built with debugging either

bronze temple
#

let's just hope that the recent commits will fix your issues :)

#

@copper nacelle you should be? Depends on where and how you're refering to either of them

copper nacelle
#

was gonna use the fast delegate maker thingy

bronze temple
#

if you refer to MonoMod.Utils.dll from one of the assemblies which will be merged, you should be fine

#

if you want to refer to MonoMod.Utils.dll from outside, f.e. a runtime loaded mod, you'll need to refer to the merged assembly instead

#

unless you want to "relink" mods before loading them, redirecting their references from MM.Utils.dll to the merged .dll

#

which is a thing, because I need to relink Celeste mods from FNA to XNA before loading them on the fly, depending on what version of Celeste is installed

copper nacelle
#

doing the first one so it should all be good

bronze temple
#

Tip: if you just need the merged .dll to build your mods against them but don't want to redistribute any of the original code,

#

mono-cil-strip is your friend :)

leaden hedge
#

theres no code anyone would want to steal anyway

#
switch (cardinalDirection)
    {
    case 0:
    {
        int num = this.invincibleFromDirection;
        switch (num)
        {
        case 5:
        case 8:
        case 10:
            break;
        default:
            if (num != 1)
            {
                return false;
            }
            break;
        }
        return true;
    }
    case 1:
        switch (this.invincibleFromDirection)
        {
        case 2:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
            return true;
        }
        return false;
    case 2:
    {
        int num2 = this.invincibleFromDirection;
        switch (num2)
        {
        case 3:
        case 6:
            break;
        default:
            switch (num2)
            {
            case 9:
            case 11:
                return true;
            }
            return false;
        }
        return true;
    }
    case 3:
        switch (this.invincibleFromDirection)
        {
        case 4:
        case 7:
        case 8:
        case 9:
        case 10:
        case 11:
            return true;
        }
        return false;
    default:
        return false;
    }
#

figure that one out

bronze temple
#

Are there any const ints remotely related to that?

leaden hedge
#

don't ask me why they didn't do return cardinalDirection & invulnDirections and made the data line up nicely

#

and no

#

there isn't

#

they are pretty much random

bronze temple
#

btw

leaden hedge
bronze temple
#

no I'm not 0xd4d, even though we both maintain C#-modding-related projects cruorzThink

#

0xd4d is much cooler than me

leaden hedge
#

stop pretending to be him

#

by having a similar name

bronze temple
#

but I picked my name before I even heard of him D:

leaden hedge
#

no proof

#

unverified

#

banned

#

why is mono so gay

#

practically gives me mono

bronze temple
#

no, the question is,

leaden hedge
#

why can't it just be "do thing I want"

bronze temple
#

why is Unity's mono so gay :^)

#

and the question extends to Unity itself as well - I've been told that their asset formats use both little and big endian in the same file

leaden hedge
#

I wouldn't worry about anything unity does

#

you'll leave with more questions than you entered with

#

like Color.black

#

you'd think that'd be black

#

but you're wrong

#

all 4 values are 0

#

so its actually transparent

#

420iq

bronze temple
#

oh god I haven't heard of that one before

#

and am dying of laughter in my chair right now

#

thanks

#

let's just hope everything will become better with ECS and their upc~ who am I kidding, everything's going to be worse than ever once the first ECS games get released

leaden hedge
#

truly next level

bronze temple
#

I mean, they're right, if you ignore blending :^)

compact sedge
#

just have a black background behind the color

#

and then it's accurate

leaden hedge
compact sedge
#

do all the other colors have an alpha of 1?

leaden hedge
#

yes

compact sedge
#

wow

copper nacelle
#

420iq

compact sedge
#

nice game engine design

copper nacelle
#

unity is my favorite game

compact sedge
#

the game is trying to figure out how it works

bronze temple
#

do they even perform dogfooding other than those cinematic tech demos?

compact sedge
#

dogfooding

leaden hedge
#

unity doesn't make games

compact sedge
#

lol

#

yeah right

leaden hedge
#

besides a few imo subpar examples

compact sedge
#

tbh at least unreal makes games

leaden hedge
#

unity does about as much as valve

#

infact I think valve does more

compact sedge
#

valve makes dota 2

#

and artifact

#

those are like real games

copper nacelle
#

cs go

compact sedge
#

I said real games

#

not life eating simulators

copper nacelle
bronze temple
#

GooBall is a Mac video game by Over The Edge Entertainment, now Unity Technologies, and published by Ambrosia Software. In the game, the player assumes the role of an alien stranded on Earth. "Goober", as the alien becomes known to the CIA, is stuck inside a life support devi...

#

The game that got it all started

compact sedge
#

wow

bronze temple
#

Half-Life 2 showcasing Source is nothing compared to this intenseface

leaden hedge
#

half-life 2 is just a rip off of quake 3 arena

#

unity is an original character I mean engine

#

source is just goldsrc which is just id Tech 3

bronze temple
#

Unity is a bad Game Maker clone, even relying on you to bring your own code editor because it lacks its own

leaden hedge
#

it has monodevelop

#

I mean it crashed 80% of the time it tries to load any file

#

but its there

bronze temple
#

strictly speaking, it's not even their own, but true

copper nacelle
copper nacelle
#

was gonna mod furi

#

checked and it was unity and c# and stuff which is nice

compact sedge
#

I knew this was gonna happen

copper nacelle
#

it's a boss rush game too

#

so it's probably all the boss ai

rain cedar
#

What if it's everything?

copper nacelle
#

tbh

#

it looks like it is everything

#

there's like

#

nothing

#

in the assembly

#

i thought hk was all fsm but this looks like it's even more fsm

compact sedge
#

how is there nothing in there but it's 3MB

copper nacelle
rain cedar
#

Probably all the playmaker actions

copper nacelle
#

gonna try the fsm dumper thingy

#

and see how many million fsms come out

solemn rivet
#

rip 56

#

he died doing what he loved

copper nacelle
#

til fsm mod can edit fsms

compact sedge
#

somehow this is more insane than me trying to disassemble unity.

copper nacelle
#

idk how i missed that you can just put stuff in hack_fsm and have it be edited

solemn rivet
#

wut

compact sedge
#

๐Ÿคฆ ofc u can

#

it's useless for distributing mods tho

solemn rivet
#

oh

copper nacelle
#

reading readmes is a myth

compact sedge
#

apparently so

solemn rivet
#

you mean you can edit the fsms and put them there for the game to load

#

gotcha

copper nacelle
#

To modify FSMs, just copy the relevant file, keeping the same file name, into another folder in the application data directory called 'hack_fsm'. PlayMaker will look for the existence of that file and load it replacing the normal data.

#

idk how i missed it

compact sedge
#

so does that mean we almost have a working enemy serializer then

#

cuz if so then maybe enemyrando will actuall run on normal computers

rain cedar
#

No not really

compact sedge
#

well what can't we serialize

#

we can dump fsms, and health managers and sprites and audio

#

what's missing

rain cedar
#

Idk ask kerr how far he got

copper nacelle
#

about to die

copper nacelle
#

wow it doesn't have as many fsms as i thought

#

found a bunch more assembly stuff too

#

this thing has like

#

no fsms

#

this is great

#

they're all just TriggerEvents

#

nothing of actual value

rain cedar
#

Where's state 1, though?

copper nacelle
#

the void

#

they've got a bunch of non PlaymakerFSMs

solemn rivet
#

heck

compact sedge
#

lol

rain cedar
#

Wow does it actually have the content for it?

copper nacelle
#

yeah i think so

compact sedge
#

what if you just replace it with return DLCState.INSTALLED

rain cedar
#

Free DLC I guess

solemn rivet
#

not free

#

you need to know how to code

copper nacelle
compact sedge
#

Sourcecode is worthless to like 95% of all computer users, and only especially valuable to <1%

copper nacelle
#

found an enemy that isn't fsm

#

this is beautiful

compact sedge
#

speaking of source code. I need y'alls suggestions I need a break from working on redwing so which of these should I do first?

(try to) Port the gradow mod installer to non-windows platforms ok_grimm
Fix the numerous problems with grimmchild upgrades grimm
Start working on a monobehavior for easily speeding up/slowing enemies and infinite enemies grimmwink

copper nacelle
#

wow this game has built in ez events

compact sedge
copper nacelle
#

lmao

compact sedge
#

seems fun to mod

#

have fun

copper nacelle
#

extreme pain

#

literally an action in a state machine

compact sedge
#

fix the formatting and it's totally doable

copper nacelle
#

yeah

#

even has time values to modify super easily

#

but still

#

pain

#

all code no assets except art when

solemn rivet
#

all code no assets art only%

ripe blaze
#

Anyone made a fun and op mod yetM

compact sedge
#

IDK if they're fun or not but redwing makes you pretty strong

#

as does blackmoth

#

and heck even lightbringer if you think about it

young walrus
#

debug mod is pretty broken

flat forum
#

because older version?

young walrus
#

because you can't be killed

compact sedge
#

ugh you'd think they'd balance it. I heard you can just increase your nail damage infinitely

flat forum
#

Ah, yeah

#

that as well

compact sedge
#

who would think that's a good idea

#

/s

#

alright starting work on the mod installer port thingy

#

as with crossroads. no promises. But I have a feeling that up-to-date mono is a little better than unity mono for these kinds of programs

solemn rivet
#

wait

#

lemme push this little change I just made

#

:x

#

done

#

something broke when it didn't find the default paths

#

for some reason form.Show(); was opening and closing the form in the same frame

#

so I changed it to Application.Run(form());

compact sedge
#

aaa now I have to update my remote repo

solemn rivet
#

wait

#

ffs winforms

compact sedge
#

ok are you pushing more changes or should I update my repo now

solemn rivet
#

trying form.ShowDialog();

#

brb

#

k, works

compact sedge
#

ok should I stick with the master branch or the test one

solemn rivet
#

pull me baby

#

I should really squash these last few commits

#

but I like how they're like art

compact sedge
#

good lord either do it now or do it after I'm done with my PR

solemn rivet
#

they tell a story

compact sedge
#

or don't do it

#

much easier

solemn rivet
#

I won't do it

compact sedge
#

it beats 56's commits

solemn rivet
#

I have no chance of competing against 56

#

I'll just change the download link and go to sleep

#

1:50am bois

compact sedge
solemn rivet
#

yeah

#

your only escape is selecting

#

zote prevents you from leaving the arena

compact sedge
#

meme

#

:)

#

unfortunately your hacky renderer doesn't render properly at all but on the plus side

#

it does launch

#

it does crash trying to install mods but easy fix

#

although I'm not looking forward to fixing that right side menu UI

solemn rivet
#

very nice

#

and, yeah, the renderer is somewhat hacky

#

but shhh no one else needs to know

#

:x

compact sedge
#

it's a mild problem because the right scrollbar doesn't scroll the mods on the left

#

and shouldn't even exist

#

first thing tho is trying to get your program to scale so it shows the close button

compact sedge
#

ok I have 0 clue why the Maximize box in the top right is appearing which is pushing the close button off the screen

trim totem
compact sedge
#

alright fixed it