#archived-modding-development

1 messages · Page 513 of 1

jolly oriole
#

i didn't even make it full quality

#

it's still compressed to like 16% or something

vocal spire
#

👀

floral blade
#

is there a way to explore a prefab ? or one of those objects that are assigned as public properties on another scripts ?

floral blade
#

can anyone think of a reason why it would render like this ?

#

when the original sprite is this ?

cedar hemlock
#

reverse the colour of the sprite

floral blade
#

but it doesn't seem like invert, white parts would become black then right ? instead of red ?

cedar hemlock
#

hmm yeah right

floral blade
#

what's going on here ?

cedar hemlock
#

red still red

floral blade
#

is it only rendering the red channel ?

#

so everything red is red , white is red , every other pure color is black ?

cedar hemlock
#

wierd tho

prime urchin
#

might be a single channel texture

#

would fit with the only red deal

floral blade
#

right ,but when customKnight loads a sprite it just makes a new texture

texture.tex = new Texture2D(2, 2);
texture.tex.LoadImage(texBytes, true);

would this still apply ?

prime urchin
#

Hmm - yeah, not sure, I have admittedly little experience working with the graphical side of things

jolly oriole
#

may be difference of texture replacing vs sprite replacing

prime urchin
#

I guess it could also be some sort of shader?

floral blade
#

i tried setting the shader to Sprites/Default

floral blade
jolly oriole
#

then idk

floral blade
#

so updating the shared material did this , the other particles that spawn when the shade hits the player got the correct texture 😐

#

in fact i think i might have replaced most if not all black orbs

#

but the ones i wanted to replace are still red 😐

floral blade
#

setting shader to "Standard" got me this.

seems like alpha channel is gone now and the image seems dull like its at reduced brightness? sorry if this is a super noob question 😅 but what shader are we normally supposed to use when trying to render a png with transparency?

cedar hemlock
#

textures got dark for me2 when using vs

vocal spire
#

new Material(Shader.Find(“Sprites/Default”))?

floral blade
#

^ doing this seemed to have broken it , i'll try it again and report back

cedar hemlock
#

amazing

jolly oriole
#

the shade's particles apparently uses the Sprites/Default shader

floral blade
#

var psr = x.GetComponent<ParticleSystemRenderer>();
var xM = new Material(Shader.Find("Sprites/Default"));//psr.material;
xM.mainTexture = CustomKnight.Textures["Orb"].tex;
psr.material = xM;

this makes it still go back to the red only thingy 😦

floral blade
jolly oriole
#
x.GetComponent<ParticleSystemRenderer>().material.mainTexture = CustomKnight.Textures["Orb"].tex;

does this work?

floral blade
#

i'm so sorry , i just found the issue and feel like an absolute idiot

cedar hemlock
#

what was the issue

floral blade
#

in my quest to figure out how to set the particle's color assuming they were colored not textured i had set particleSystem.main.startColor = Color.red , when that didn't work it got burried under a lot of commented code
but was still getting applied 😦

copper nacelle
#

it happens

floral blade
#

i'm so sorry for wasting everyone's time , and thanks for helping me anyways!

fair rampart
#

dudeeee its not depleting my soul when I heal in lightbringer

#

Zaliant, I dont even know

#

I attract bugs

#

and not in the good way

gilded lotus
fair rampart
#

oh

#

I thought I was in modding help

stone elm
#

I don't think I fully understand the tips you gave, 56, about FSM stuff for 1.5. Take a look at: https://github.com/CallumMoseley/HollowKnight.RandomizerMod/blob/master/RandomizerMod3.0/Actions/ChangeShinyIntoItem.cs
I haven't made any significant changes to this file. The FSM is still working improperly. All the states already exist and all transition differences are just those pointing to different states in the same FSM. Is there something obvious to you that I'm missing? This uses SereCore's PlayMakerExtensions; maybe I misunderstood but is there anything there in particular that needed changing? I feel a little dumb for asking about the same issue repeatedly but hopefully I can progress past it soon. tisoweary

timber breach
#

Hey i want to get into modding bosses. Were should i get started?

dusty obsidian
#

howdy howdy. trying to make a skin. i have spritepacker working fine. how im currently doing it is opening all the pngs in a folder for a certain animation(?) (eg. opening all pngs in Knight -> Idle) and adding what i want in clip studio paint

ive noticed there are a lot of overlap (specifically the head) for a lot of sprites, but they cant be check->replace in spritepacker because the cloak’s different/theyre offset by a few pixels. is there a good way to locate these so you can make sure your skin is consistent where it should be? entirely understandable if there isnt and i should keep checking/rotating old sprites and copying the relevant bits ive made onto new sprites or deal with the fact that some of the heads which were identical in the original wont be in my skin. just want to make sure im not taking an unnecessarily tedious route to spriting!

floral blade
#

I'm all for generating sprites , but someone would need to manually tag these spots in terms of their coordinates and that sounds like a lot of effort.
Depending on the level of tagging, It could allow to generate skins in a similar way to vessel maker.

dusty obsidian
#

sounds like there isnt anything that would identify similarities/generate all sprites sharing the similarity. dang :^( ty 4 the response! :^)

floral blade
#

Yeah atleast not easily I think

dusty obsidian
#

really makes me appreciate the work spriters do! they deserve more recognition (^: the main file is ginormous, and theres no easy way/shortcut to reskinning

copper nacelle
#

It uses ToFsmState instead of ToState now

jolly oriole
#

btw, another change, probably worse to find out: some fsm events got renamed

steady comet
jolly oriole
#

find out, i know that TALK_FINISH was changed to CONVO_FINISH

steady comet
#

Isn't it CONVO_FINISH in 1432?

jolly oriole
#

afaik it was one of those and was changed to the other

#

found it

primal latch
#
        public static bool OnEnemyEnable(GameObject enemy, bool isAlreadyDead)
        {
            string normalName;
            if (enemy.name.Contains("(Clone)"))
            {
                normalName = enemy.name.Remove(enemy.name.Length - 7, 7);
            }
            else if (enemy.name.Contains("("))
            {
                normalName = enemy.name.Remove(enemy.name.Length - 4, 4);
            }
            else
            {
                normalName = enemy.name;
            }
            if(!patched.Contains(normalName))
            {
                if (Dictionaries.EnemyTextures.ContainsKey(normalName))
                {
                    enemy.transform.gameObject.GetComponent<tk2dSprite>().GetCurrentSpriteDef().material.mainTexture = Dictionaries.EnemyTextures[normalName];
                }
                patched.Add(normalName);
            }

            Modding.Logger.Log($"normal name: {normalName}");
            return isAlreadyDead;
        }
        private static List<string> patched = new List<string>();```
Something in this code apparently causes infinite loading screens. It uses the hook ```ModHooks.Instance.OnEnableEnemyHook += SpritePatcher.OnEnemyEnable;``` The EnemyTextures dictionary is a dictionary with a string as key and a texture as data. When this piece of code is disabled everything works fine
cedar hemlock
#

you forgot a `

primal latch
#

where?

cedar hemlock
#

ofter enable to make it like this xD

primal latch
jolly oriole
#

Only some general things, might not be the cause, but debugging it shouldn't be an issue as errors clearly state where it crashes

  1. "".Replace(" (Clone)", "") > if (enemy.name.Contains("(Clone)")) and the entire inside
  2. "".Substring(0, "".LastIndexOf("(")) > else if (enemy.name.Contains("(")) and the entire inside
primal latch
#

That isn’t the problem. The normal name itself works. It is something in the part after that. Thanks for the improvements though

#

It does fix some wacky things with unused strings in the compiled assembly

steady comet
#

What appears in the modlog? Nothing?

primal latch
#

Nothing

#

It just kind of sits there

steady comet
#

I assume the first time you get the infinite load is the same as the first time you enter a scene with an enemy to be retextured?

jolly oriole
#

then i'll assume there is a ton of things in output_log if it isn't in modlog

primal latch
steady comet
primal latch
steady comet
#

Side issue - I wonder if cutting of the brackets is actually what you want to be doing; like, it seems the enemy name is something like Fly 1 rather than Fly (1) - at least according to debug mod

primal latch
steady comet
#

Definitely with the brackets, in the enemy.name field?

primal latch
#

I don't understand it

steady comet
#

What I meant is, I believe that enemy.name will not have brackets (if I write code that says

public static bool OnEnemyEnable(GameObject enemy, bool isDead)
        {
          Log(enemy.name);
          return isDead;
        }

there are no parentheses in the entries printed to the log).

midnight canyon
#

Some do, some don't

primal latch
#

indeed

steady comet
#

IDK I don't know unity

jolly oriole
#

you can get

Spitter
Spitter (1)
Spitter (Clone)
Spitter (clone) (Clone)
Spitter (1) (clone)

and yes, i think both versions of clone exist

steady comet
#

Is this TC 🍝 or Unity 🍝?

primal latch
deep wave
#

that makes a change sideax2uHappy

jolly oriole
#

tc, as unity calls them (1), (2)...

#

or only one version of clone (idk if capitalized or not though), when instantiating from code

light zodiac
#

in the docs it says in the SceneChanged part that:
It’s recommended to use the internal SceneLoaded hook instead of the the api’s by using UnityEngine.SceneManagement.SceneManager.sceneLoaded However you’ll probably want to delay this by a frame by using a coroutine.
i dont get how to start a coroutine before the hook is called.

ornate rivet
#

Do StartCoroutine(yourThing()); inside the hook

#

honestly the frame delay isn't necessary a lot of times so I would test it without the delay first

jolly oriole
#

i mean, also an alternative is the activescenechanged hook, and it works for all of my use cases

#

with all my use cases being setting the map width and height

ornate rivet
#

oh yea ^

light zodiac
#

to wait a frame i say yield return null;?

jolly oriole
#

yes

#

just please don't do this in a while loop, it will crush frames

ornate rivet
#

oh whoops

vocal spire
#

Time to crush frames!

jolly oriole
#

i mean, pressgtodab reduced my main menu fps from 800-900 to just 300

#

though it was a

while (HeroController.instance != null) yield return null;
copper nacelle
#

any unsafeInstance

jolly oriole
#

i didn't write that code, i just changed to hook herocontroller.awake i think, made it work with save+exit

vocal spire
#

HeroController.awake is clearly superior to frame murder

copper nacelle
#

pretty sure it won't eat your frames if you don't use instance

#

findobjectoftype every frame is not the tech

jolly oriole
#

yea, i don't use yield return null at all in my code, except for a single instance

steady comet
#

Is there a difference between yield return null and yield return new WaitForEndOfFrame()?

copper nacelle
#

yes

steady comet
#

Woah that chart looks shroompog

stone elm
# copper nacelle The AddTransition/ClearTransitions extensions in SereCore are probably wrong if ...

So I actually proxied the extension functions so I could use FSMUtil's AddTransition but still use SereCore's ClearTransitions. Check this out:

public static class FsmStateExtensionsProxy
    {
        public static void RemoveActionsOfType<T>(this FsmState fsm) where T: FsmStateAction
        {
            PlayMakerExtensions.RemoveActionsOfType<T>(fsm);
        }

        public static FsmState GetState(this PlayMakerFSM fsm, string stateName)
        {
            return FsmUtil.GetState(fsm, stateName);
        }

        public static void ClearTransitions(this FsmState fsm)
        {
            PlayMakerExtensions.ClearTransitions(fsm);
        }

        public static void AddTransition(this FsmState fsm, string state, string transitionTo)
        {
            FsmUtil.AddTransition(fsm, state, transitionTo);
        }

        public static void AddAction(this FsmState fsm, FsmStateAction action)
        {
            FsmUtil.AddAction(fsm, action);
        }

        public static T[] GetActionsOfType<T>(this FsmState fsm) where T: FsmStateAction
        {
            return PlayMakerExtensions.GetActionsOfType<T>(fsm);
        }

        public static void AddFirstAction(this FsmState fsm, FsmStateAction action)
        {
            PlayMakerExtensions.AddFirstAction(fsm, action);
        }
    }

The thing is, SereCore's ClearTransitions looks "fine" in how it works. Here is its source:

    public static void ClearTransitions(this FsmState self)
    {
        self.Transitions = new FsmTransition[0];
    }

It seems like it's fine since it seems like assigning directly onto FsmState.Transitions is done elsewhere, and in Vasi, seemingly without issue.

It seems to me that the problem is elsewhere but I'm unsure what it could be. I'm trying to open the FSM in FSMViewer2 but I literally can't find the FSM/which file to open for that scene.

cedar hemlock
#

how do you do the colours?

stone elm
#

Code block is three backticks, you just put the language on the first line.

```cs
#

Of course you close the code block with three backticks but that's hard to demo without making a block

cedar hemlock
#

yeah ik how to do the code block but the colours is smth new to me

copper nacelle
#

did you build vasi from source?

#

or is that modcommon fsmutil x5fiftPrime

stone elm
#

I did build from source and it isn't modcommon, just checked.

vocal spire
copper nacelle
#

does your source have the 1.5 update

stone elm
#

Yup, I checked history and pulled latest.

cedar hemlock
copper nacelle
#

hmm

#

no exceptions or anything yeah?

stone elm
#

Not in modlog... But I forgot to check the unity logs. There might be something there.

#

Nope, nothing

copper nacelle
#

you know which fsm is dying yeah?

stone elm
#

Yeah, Shiny Control in scene Tutorial_01

#

FsmViewer calls it Shiny Item (1)- Shiny Control

copper nacelle
#

add the debug section to whatever's modifying the fsm

stone elm
#

I had a print to say when a state is entered and it always got stuck at Charm?. I'll add more of the debug statements now

#
[DEBUG]:[RandomizerMod] - End: Pause
[DEBUG]:[RandomizerMod] - Transitioning to: Init
[DEBUG]:[RandomizerMod] - Start: Init
[DEBUG]:[RandomizerMod] - End: Init
[DEBUG]:[RandomizerMod] - Transitioning to: PD Bool?
[DEBUG]:[RandomizerMod] - Start: PD Bool?
[DEBUG]:[RandomizerMod] - End: PD Bool?
[DEBUG]:[RandomizerMod] - Transitioning to: Fling?
[DEBUG]:[RandomizerMod] - Start: Fling?
[DEBUG]:[RandomizerMod] - Start: Fling R
[DEBUG]:[RandomizerMod] - End: Fling R
[DEBUG]:[RandomizerMod] - Transitioning to: In Air
[DEBUG]:[RandomizerMod] - Start: In Air
[DEBUG]:[RandomizerMod] - End: In Air
[DEBUG]:[RandomizerMod] - Transitioning to: null
[DEBUG]:[RandomizerMod] - Start: Land
[DEBUG]:[RandomizerMod] - End: Land
[DEBUG]:[RandomizerMod] - Transitioning to: Idle
[DEBUG]:[RandomizerMod] - Start: Idle
[DEBUG]:[RandomizerMod] - End: Idle
[DEBUG]:[RandomizerMod] - Transitioning to: null
[DEBUG]:[RandomizerMod] - Start: Hero Down
[DEBUG]:[RandomizerMod] - End: Hero Down
[DEBUG]:[RandomizerMod] - Transitioning to: Charm?
[DEBUG]:[RandomizerMod] - Start: Charm?
[DEBUG]:[RandomizerMod] - End: Charm?
[DEBUG]:[RandomizerMod] - Transitioning to: null```
Yeah, looks like transitions are broken.
copper nacelle
#

Log the ToState and see if it's set instead

#

Because if something's not updated it'll be using ToState instead of ToFsmState

stone elm
#
[DEBUG]:[RandomizerMod] - Test ToState: Charm?
[DEBUG]:[RandomizerMod] - Transitioning to: Charm?
[DEBUG]:[RandomizerMod] - Start: Charm?
[DEBUG]:[RandomizerMod] - End: Charm?
[DEBUG]:[RandomizerMod] - Test ToState: 
[DEBUG]:[RandomizerMod] - Transitioning to: null```
#

No ToState and null ToFsmState... Weird.

#

I fixed it by not using (serecore's) ClearTransitions and using Vasi's ChangeTransition on each event that needed changing.

#

Of course now it gets stuck on the next state since that one uses ClearTransitions

#

Why would clearing transitions that way cause it to break? Hmmm....

vocal spire
#

How are you adding back transitions?

stone elm
#

Vasi's method:

public static void AddTransition(this FsmState state, FsmEvent @event, string toState)
{
    state.Transitions = state.Transitions.Append
        (
            new FsmTransition
            {
                FsmEvent = @event,
                ToFsmState = state.Fsm.GetState(toState)
            }
        )
        .ToArray();
}
        
[PublicAPI]
public static void AddTransition(this FsmState state, string eventName, string toState)
{
    state.AddTransition(new FsmEvent(eventName), toState);
}
jolly oriole
#

FsmEvent.GetFsmEvent(eventName)

#

Instead of new

vocal spire
#

Yeah

#

It’s trying to transition with a non existent transition

stone elm
#

I'll change that and recompile Vasi to give it a shot

#

That doesn't fix the issue

#

New function:

[PublicAPI]
public static void AddTransition(this FsmState state, string eventName, string toState)
{
    state.AddTransition(FsmEvent.GetFsmEvent(eventName), toState);
}
#

Hold on, I may have been an idiot and not updated the vasi in my mods folder

#

Yes, that is the fix. Thanks SF, Someone.

#

56, I'll PR this into your repo for you, unless you plan to do it right now.

copper nacelle
#

Sure

#

Does that create the event if it doesn't exist?

jolly oriole
#

yes

copper nacelle
#

interesting

jolly oriole
#

findfsmevent doesn't

copper nacelle
#

Oh is this adding a transition from finished?

stone elm
copper nacelle
#

mrw 3 commits

#

I can merge but fwiw I'd recommend using FsmEvent.Finished instead of the string

jolly oriole
#

and 2 of those just spaces

stone elm
#

I KNOW, OK?

#

I hate whitespace diffs

#

It bugs me

#

Anyway, thanks for the tip. I'll use the member rather than a string literal

copper nacelle
#

yeah I just commented because you can squash

stone elm
#

I'm just lazy... unless stupid whitespace is involved. Then I get hollowwoke

#

Sorry for cluttering your history. 🙂

light zodiac
#

Is there a way to take control away from the player?

copper nacelle
#

RelinquishControl

light zodiac
#

Thank youu

floral blade
#

so i know an object's name but not it's prefab's can i still somehow instantiate it?
the GO is "Arrow Prompt New" and it's prefab to the best of my understanding is available in an FSMStateAction "ShowPromptMarker"

vocal spire
#

Fsm page of apidocs

floral blade
#

i dont see a open scene list in FSMavalonia

jolly oriole
#

rip

steady comet
#

Open resources.assets

floral blade
#

selecting the resources.assets file brings me here

steady comet
#

IIRC there's an Arrow Prompt object in there

copper nacelle
#

i don't see how this has to do with instantiating it

#

you just get the fsm action and take the gameObject off that

floral blade
#

var x = Object.FindObjectsOfType<PromptMarker>();
Logger.Info(this,x[0].gameObject.name);

i did this hack to get the name of the go in hopes that would help 😐

copper nacelle
#

I mean if that finds it you could instantiate it with that

floral blade
jolly oriole
#

though Resources.FindObjectsOfTypeAll<Promptmarker>() is probably better

copper nacelle
#

Yeah ok then get the fsm which spawns it

floral blade
copper nacelle
#

do you know what fsm it is

floral blade
#

i only know the stateAction thanks to ilspy

#

also i feel like i am missing some fsms in fsmviewer avalonia because i dont see the "spitter-spitter" from the apidocs

jolly oriole
#

RestBench - Bench Control - In Range - ShowPromptMarker

floral blade
jolly oriole
#

yes, reads that in unity's docs

floral blade
jolly oriole
#

i just used fsm viewer

#

you'd probably want only the fsm name, so Bench Control

floral blade
floral blade
vocal spire
#

You pinged NoPingNeeded twice 🤔

floral blade
#

wait. i dont know which go to call this LocateMyFsm on, because i'm trying to find the go

vocal spire
#

GameObject.Find(goname)

#

Or preload

floral blade
#

is "RestBench" the go name in this context?

vocal spire
#

Yes

#

You also need to find it in the correct scene after waiting a frame

jolly oriole
#

the restbench is the one from Town btw

floral blade
#

and to figure out which scene the object is from you need the FSM Viewer?

vocal spire
#

Usually you know the scene before the object but yes

copper nacelle
#

need is a strong word

vocal spire
#

Good point

floral blade
#

could i probably figure out scene name using ilspy ?

i'd been figuring out object names by logging the collider's go's name on slashHit

vocal spire
#

No

floral blade
#

could i log it on scene enter ?

vocal spire
#

Also grenade told you the scene name

#

Yes

#

You can also look in the pins for multiple sources of scene names

floral blade
#

yes for this one i'm going to try that one, i'm trying to figure out what would be my workflow for the next time i want to access some random object

languid marsh
#

does anyone know why the hollow point mod does not work? I can see the gun but not equip it?

copper nacelle
floral blade
#

Town - RestBench - Bench Control - In Range - ShowPromptMarker
so this is Scene - go- FSM - State - StateAction ?

copper nacelle
#

no

#

GameObject - Fsm - State - Action I assume

floral blade
#

yeah gotcha!

#

ty

copper nacelle
#

idk what happens with subfolders

#

i'll merge it anyways ig

floral blade
#

i now have a garden of popups with no text , the textMeshPro component seems to be null, but this is progress!

vocal spire
#

Nice

jolly jungle
#

What are you trying to make?

vocal spire
#

Gardening simulator mod?

floral blade
#

as an exercise in getting a better understanding of how it all works, i'm trying to get HK's internal UI systems to popup with custom text / behaviour etc.

#

but if it fails then gardening simulator is always there

#

the garden is really coming along well 😛

copper nacelle
#

beautiful

floral blade
#

it Finally worked

#

apparently there's a "SetTextMeshProGameText" Monobehavior on the GO, which would replace the text, nuking it solved my SetTexts not working

vocal spire
#

Can also set it to use a different key to input into the language stuff

floral blade
#

can we add new items into the language thingy ?

cloud axle
#

someone should try and make a boss with the shield guy, it would be cool if someone did do it

boreal barn
#

does anyone here know where I can find the background assets for Nosk den? I can't find them anywhere in the google folder of sprites & assets (checked npcs, bosses, area backgrounds, etc)

vocal spire
boreal barn
#

which pin?

primal latch
#

?pins

finite forumBOT
heavy patrol
#

My apologies, but does debugger show what sounds are currently playing, or perhaps another mod? Trying to find certain sound effects

jolly oriole
#

afaik no such mod exists currently

rough pulsar
#

so uh

#

i skipped the web installing processes and i tested SharpZipLib

cedar hemlock
#

and that broke everything

rough pulsar
#

yeah i think

cedar hemlock
#

amazing

rough pulsar
#

my memory is not that clear on that one though i might try it again

#

AND i was using 0.88 of SharpZipLib

#

JUST BECAUSE it was the only version that supported .NET Framework 3.5 projects

cedar hemlock
#

lol

#

you can try seeing if you can make a pr to the modinstaller to get it working

rough pulsar
#

hm

cedar hemlock
#

or just edit the code and compile it for yourself

rough pulsar
#

yeah i would do the latter

cedar hemlock
#

although its difficult to look at an big project

#

will take some time

rough pulsar
#

i wouldn't want to go to the trouble of making a pr, waiting a few hours then testing the modinstaller to see it works, fail, make another pr...

rough pulsar
cedar hemlock
#

oh and i reccomend de-grading the thing in modlinks to version 1.1.0

rough pulsar
#

i can redirect it to my own modlinks.xml

cedar hemlock
#

or any other version that works

rough pulsar
#

i'll work on a fix on my mod today i guess

#

so wait

#

modinstaller1 doesn't install stuff from subfolders or nah?

cedar hemlock
#

?

#

the madethe name <Name>x86_64/discord_game_sdk.bundle</Name>

rough pulsar
#

like, the files i placed inside modlinks.xml

#

so modinstaller1 also works with that

cedar hemlock
#

so the name becomes x86_64/discord_game_sdk.bundle

rough pulsar
#

hm...

cedar hemlock
#

1 is identical to 2 but 2 is made in an different software or smth

rough pulsar
#

ik

#

so.

#

what happens if i run a shell command inside my mod

#

powershell works

#

but that makes it windows-only

#

which i don't absolutely want

cedar hemlock
#

cmd also exists on mac and linux

#

so you'll want to use cmd

#

and not powershell

rough pulsar
#

so

#

i can execute curl in mac and linux and be fine? @cedar hemlock

cedar hemlock
#

i have no idea

#

ask google

rough pulsar
#

HOLD ON.

#

If I remember correctly, there's an entire library that's built-in inside C# .NET

#

Which is of course, PowerShell related

#

I might be able to execute PS commands from there

cedar hemlock
#

amazing

#

but is it in 3.5 yet

rough pulsar
#

hm

#

idk

#

actually i have planned to buy an usb stick and install linux ubuntu or fedora there

cedar hemlock
#

you can also try to execute it via modinstaller which is 4.5 or 4 i dont rly know

rough pulsar
#

sooo

cedar hemlock
#

but thats a strech

rough pulsar
#

yeah

#

that's some sort of a strecth

#

apparently

#

it is located inside...

#

System.Management.Automation;

#

WAIT.....

cedar hemlock
#

2002!?

#

that old?

rough pulsar
#

the one at bottom is powershell date

#

YEAH

#

THAT OLD

cedar hemlock
#

wow

rough pulsar
#

I DON'T KNOW WHY MODDING API USES IT

cedar hemlock
#

its not the api

rough pulsar
#

oh

#

right

#

unity 2017

#

i forgot.

cedar hemlock
#

its tc

rough pulsar
#

WHY TEAM CHERRY

cedar hemlock
#

lol

jolly oriole
#

because the game's latest update is from 2017???

#

or 2018, idk

cedar hemlock
#

gonna call you NPN now

#

no SFG anymore

cedar hemlock
#

then we have 4.5+

rough pulsar
#

well

#

its only beta.

cedar hemlock
#

_ _

rough pulsar
#

popopogggogogg

#

imagine teamcherry upgrading to that

cedar hemlock
#

ehm

rough pulsar
#

excrpt.....

#

modding api will break

#

probably

cedar hemlock
#

thats what gonna happen

cedar hemlock
rough pulsar
#

ohhh pog

cedar hemlock
#

there is already 1.5 api that works half iirc

rough pulsar
#

hmmmm

cedar hemlock
#

but mods that dont get fixed will break

rough pulsar
#

i hope the api fixes the issue when it sees a non-.net library

rough pulsar
#

in visual studio

cedar hemlock
#

yes

#

and fix some other things that change with unity 2020.2

rough pulsar
#

meh

#

it only creates one gameobject

#

which has 2 standard functions that seem universal in every unity version

#

start() & update()

cedar hemlock
#

not many things will rly break

#

unity tries to let old things still work

rough pulsar
#

unity do be working on backwards compability

cedar hemlock
#

so not much needs to be changed

cedar hemlock
rough pulsar
#

ur

#

ye

primal latch
#

When will 1.5 release?

deep wave
#

whenever TC feels like it feelspkman

ornate rivet
#

hopefully never

jolly oriole
#

hopefully soon enough, 32bit is ass

vocal spire
#

I prefer never since I wouldn’t need to update mods which requires effort

primal latch
steady comet
#

C sharp question - is there a stylistic way to get a value from a dictionary, with a default if the key's not present? Something like D.get(key, default) in python

vocal spire
copper nacelle
#

containskey x5fiftPrime

stone elm
#

TryGetValue

copper nacelle
#

yeah

#

dict.TryGetValue(key, out var x) ? x : default;

steady comet
#

I'm currently using TryGetValue but IDK it seems a bit redundant

stone elm
#
if (dict.TryGetValue(key, out var val))
{
    //do stuff with val
}
else
{
    //key doesnt exist
}
copper nacelle
#

.net 4 has an extension for a default value

stone elm
#

TryGetValue is the least redundant since it affects the least number of lookups, I believe.

copper nacelle
#

🙂

stone elm
#

ReSharper used to yell at me for doing anything else, back when I used that

steady comet
#

I guess I'll do that then - thanks 🙂

stone elm
#

You could also just create your own extension method. Very valid way to go about it.

copper nacelle
#

yeah

jolly oriole
primal latch
#

Oops

muted gust
#

I found some skin of silksong.

jolly oriole
#

crazy

cedar hemlock
torn birch
#

How do I make FSMView work? I put the repo on github desktop and downloaded+extracted the zip, but neither one seems to work. Is there something else I should do to get it working?

copper nacelle
#

why

#

code ≠ executable

#

unless you built it in which case the cldb needs to be in the same folder

torn birch
#

I'm sorry, I have zero experience with this stuff whatsoever, so does this mean I need to download it as an exe then run it?

#

I'm an absolute caveman rn

copper nacelle
#

there is a releases tab

#

on the right side of the site

torn birch
#

ok

#

I'm there now

#

so do I download the cube icon thingy?

copper nacelle
#

idk what this means

ornate rivet
#

yea download the cube

torn birch
#

ok

#

I did, now what? Do I extract it? Where should I extract it to?

ornate rivet
#

anywhere

#

it will be a folder with a .exe file

torn birch
#

okay, I got it to run

#

now what? It's just all a blank screen

#

well like I see all the bits of it, but I don't see any playmaker scripts

#

is it because I didn't buy playmaker or something?

light zodiac
copper nacelle
primal latch
#

How do you switch out the sprite atlas for the beastiary?

tepid reef
#

How do you edit dialogue text? As in change what a character says?

primal latch
#

How do you switch out the sprite atlas for the beastiary?

vocal spire
primal latch
#

ok

cedar hemlock
#

does anybody know how to make a boss do 1 damage? part 2

light zodiac
#

Take health hook. Return damage/2

cedar hemlock
#

we tried that before

light zodiac
#

and...

cedar hemlock
#

well if it worked i wouldn't be here

light zodiac
cedar hemlock
#
private int damagetaken(int damage)
        {
            return (1);
        }
#

that?

light zodiac
#

Ig

cedar hemlock
#

lg?

#

idk what that means

dusty obsidian
#

ig = i guess. probably

jolly oriole
#

i guess ig

cedar hemlock
#

(why didn't we (you guys(i did nothing)) come up with this earlier lol)

#

will it break overcharmed?

#

lets find out

#

yes

light zodiac
#

Why would it?

cedar hemlock
#

yes it will

#

look guys im doing pv overcharmed

primal latch
#

@cedar hemlock check if the player is overcharmed

#

Using the PlayedData class

cedar hemlock
#

I already did that

#

I know a little about coding :)

primal latch
#

Yeah. You could have just forgotten it. In what way does it break it?

cedar hemlock
#

Just still does 1 damage

#

Instead of 2

primal latch
#

But you wanted to halve the damage right?

cedar hemlock
#

Just wanted 1 instead of 2 by specific bosses

#

Dont start about selecting 1 boss as i already know that

primal latch
#

Check the scene name? Create a list with all the scenes with bosses that you want to halve and check if that list contains the current scene

jolly oriole
#

i mean for everything i know, changing the DamageHero components of a boss results in only that much damage taken, so ¯_(ツ)_/¯

vocal spire
#

Overriding the damage this way makes even radiant bosses deal 1 damage

crystal topaz
#

I was making a dark souls themed skin and when I was testing some of the sprites I noticed that the sprites were messing up a lot idk how to fix it because at first I thought that I colored a part that was supposed to be transparent but that wasn’t the case

torn birch
#

hey, quick question, is it possible to make a script without FSMViewer to mod the game?

copper nacelle
#

yeah

torn birch
#

I want to add some extra events that trigger when number keys are pressed, how would I do that?

#

Would I add an extra script?

copper nacelle
#

Least effort is just have a mod which uses HeroUpdateHook and uses Input.GetKey

torn birch
#

ok

#

is heroUpdateHook on the playerData api doc?

copper nacelle
#

No

torn birch
#

what does it do?

copper nacelle
#

It's invoked when HeroController's Update is invoked

torn birch
#

so when a key is pressed?

copper nacelle
#

No

#

~0-2 times per frame

torn birch
#

ok

#

so it just registers things

#

sorry i have never made a mod previously so I have no clue what im doing

light zodiac
#

Is there any noticable difference between hercontroller update and the normal public void update function

torn birch
#

so the if statement would be on each heroupdatehook and then check if the key was pressed, then run the if statement?

copper nacelle
torn birch
#

so the heroupdatehook is similar to the public void thing that triggers once per frame?

copper nacelle
#

basically

fair rampart
#

Ahahah lil lurien mask pops up when your soul comes out I’m so happy that I’m actually seeing progress in game now

torn birch
#

thats awesome my guy

#

good luck on ur project 🙂

fair rampart
#

👍tysm

torn birch
#

How do I use HeroUpdateHook?

light zodiac
#

In public overide void initialize add this line
ModHooks.Instance.HeroUpdateHook += function name

Then let the IDE create the function for your
Then do if (Input.GetKey(Keycode.{key you want})) and then put what you want to do when button is pressed

torn birch
#

ok

cedar hemlock
#

is there a way to change the amount of damage of only 1 damage type?

#

for example only explosion damage?

jolly oriole
#

there is always a way, but i'd need to check if there is an ez one

#

looking at it, you'd need to manually add things, as the damage type is basically this enum:

public enum HazardType
{
    NON_HAZARD = 0,
    NORMAL,
    SPIKES,
    ACID,
    LAVA,
    PIT
}
cedar hemlock
#

hmm

#

lava?

jolly oriole
#

not implemented

#

but there

cedar hemlock
#

but no explosion grubsad

jolly oriole
#

explosion is the normal type

cedar hemlock
#

but if i change the damage of normal then all normal damage will change and not only explosion

jolly oriole
#

yes

#

this is how lava is implemented

cedar hemlock
#

is there a way to only change explosion or not?

jolly oriole
#

let me look at an explosion object, maybe

#

found the jellyfish explosions

cedar hemlock
#

whats it called?

jolly oriole
#

"Gas Explosion Uumuu"

cedar hemlock
#

and how do i make it 0?

jolly oriole
#
On.DamageHero.Start += yourmethod;

...

private void yourmethod(orig, self)
{
    orig(self);
    if (self.transform.parent != null && self.transform.parent.gameObject.name != "Gas Explosion Uumuu") return;
    self.damageDealt = 0;
}
light zodiac
#

whats orig(self)

jolly oriole
#

the on hook stuff

#

didn't want to write the types

#

just wrote that directly in discord

cedar hemlock
#

where do i place On.DamageHero.Start +=

jolly oriole
#

constructor or initialize of your mod probably

cedar hemlock
#

doesn't work in initialize

jolly oriole
#

why not

cedar hemlock
#
Error    CS0117    'DamageHero' does not contain a definition for 'Start'
jolly oriole
#

change Start to OnEnable

#

didn't check if DamageHero had a Start method

cedar hemlock
#
Error    CS0029    Cannot implicitly convert type 'void' to 'On.DamageHero.hook_OnEnable'
jolly oriole
#

i mean, just write On.DamageHero.Start += yourmethod and let your ide auto complete it

deep wave
#

did you write yourmethod() or something

cedar hemlock
#

ok i forgot to add the thing after += xD

#

lemme try

jolly oriole
#

Explosion gameobject names

Gas Explosion Uumuu (DH-component is on a child gameobject)
Gas Explosion Recycle L (DH-component directly on gameobject)
Gas Explosion Recycle M (DH-component directly on gameobject)
cedar hemlock
#

hmm

#

normal contact damage does 2

#

explosions too

jolly oriole
#

hm :/

cedar hemlock
#

and aparently your code is stronger then the code from yesterday that made all damage 1

#

i took damage from a hidden mosswalker

vocal spire
#

What’s your code in the hook

jolly oriole
#

except it's OnEnable

cedar hemlock
#
private void explodamage(On.DamageHero.orig_OnEnable orig, DamageHero self)
        {
            orig(self);
            if (self.transform.parent != null && self.transform.parent.gameObject.name != "Gas Explosion Uumuu") return;
            self.damageDealt = 0;
        }
#

i prob did smth wrong?

vocal spire
#

Looks right

cedar hemlock
#

then why it broke lol

vocal spire
#

Maybe log the damage and the parent name(log null if parent is null) to make sure everything is right?

cedar hemlock
#

what do i log?

vocal spire
#

...

cedar hemlock
#

self.damageDealt?

vocal spire
#

I just said it

#

Yes

cedar hemlock
#

ehm

#
[INFO]:[ModManager] - Initializing
[INFO]:[ModManager] - Initialized
[INFO]:[API] - Loading ModdingApi Global Settings.
#

is all

jolly oriole
#

are you sure your game is working?

cedar hemlock
#

yes xD

#

this is very wierd

vocal spire
#

What’s in the mods folder

vocal spire
cedar hemlock
#

ok fixed it

#

i just deleted the moddingapi.globalsettings

vocal spire
#

Fun

cedar hemlock
#
[INFO]:[TransMod] - 0
[INFO]:[TransMod] - 0
[INFO]:[TransMod] - 0
[INFO]:[TransMod] - 0
[INFO]:[TransMod] - 0
[INFO]:[TransMod] - 0
[INFO]:[TransMod] - 0
[INFO]:[TransMod] - 0
[INFO]:[TransMod] - 0
[INFO]:[TransMod] - 0
[INFO]:[TransMod] - 0
#

seems like 0

#

i got hit 2 times

vocal spire
#

That’s bc it’s only logging the ones being set to 0

#

You need to rewrite the if statement

cedar hemlock
#

to?

#

wait

vocal spire
#

Fine I’ll rewrite it

#
private void explodamage(On.DamageHero.orig_OnEnable orig, DamageHero self)
        {
            orig(self);
            if (self.transform.parent != null && self.transform.parent.gameObject.name == "Gas Explosion Uumuu") self.damageDealt = 0;
           
            Log(damageDealt + self.transform.parent ? self.transform.parent.name : null);
        }
#

Disclaimer: all code I write on discord in the next like 7 hours is written on mobile

cedar hemlock
#
Error    CS0103    The name 'damageDealt' does not exist in the current context
vocal spire
#

Easy fix

#

I’ll let you fix that imma go do conversation

cedar hemlock
#
Error    CS0019    Operator '+' cannot be applied to operands of type 'Transform' and 'Transform'
``` is what i get when i ask the lightbulb
vocal spire
#

What did you change to fix error 1?

cedar hemlock
#

i just did what the lightbulb suggested

#

i tried all the options

vocal spire
#

Can you send the new code

cedar hemlock
#
private void explodamage(On.DamageHero.orig_OnEnable orig, DamageHero self)
        {
            orig(self);
            if (self.transform.parent != null && self.transform.parent.gameObject.name == "Gas Explosion Uumuu") self.damageDealt = 0;

            Log(message: damageDealt + self.transform.parent ? self.transform.parent.name : null);
        }
```is the last option
vocal spire
#

Have you tried solving it without the lightbulb

#

I still see the first problem

#

Fine I’ll do it

jolly oriole
#

Log($"Damage: {self.damageDealth}, Parent: '{self.transform.parent}'");

cedar hemlock
#

what did i do wrong (or copied over wrong)?

#

just so i know how to fix later

vocal spire
#

First problem was damageDealt was supposed to be self.damageDealt

cedar hemlock
#

i tried that

cedar hemlock
#

no but i tried that before

#

but i got the plus error

vocal spire
#

Then why did you change it back

cedar hemlock
#
Error    CS0019    Operator '+' cannot be applied to operands of type 'int' and 'Transform'
#

because that

#

Log(self.damageDealt + self.transform.parent ? self.transform.parent.name : null);

vocal spire
#

But that would result in the first error

#

Just use what grenade sent, don’t want to write more code

cedar hemlock
#

ok the 2 damage contact damage was caused by me

#

but with the new code still 2 damage

#

[INFO]:[TransMod] - Damage: 2, Parent:

vocal spire
#

The parent is null then

#

I think?

#

Try logging the name of the object instead of the parent

cedar hemlock
#

whats it called

#

just "Name"?

jolly oriole
#

just put it as self.gameObject, also logs name

cedar hemlock
#

ok

#

this ok?

jolly oriole
#

yes, maybe

'

around both parent and name {}, so it's easier to know if there are extra spaces at the front or back

cedar hemlock
#
[INFO]:[TransMod] - Damage: 2, Parent: , name: Gas Explosion Recycle L(Clone) (UnityEngine.GameObject)
vocal spire
#

Check if the gameobject’s name contains(or equals) any of those

#

Then set the damage

cedar hemlock
#

ok lemme try

jolly oriole
#

i mean, at that point one could change the if to if (self.gameObject.name.Contains("Explosion") || (self.transform.parent != null && self.transform.parent.gameObject.name.Contains("Explosion"))) self.damageDealt = 0;

vocal spire
#

That should do it

#

Explosives defused

cedar hemlock
#

yeah

#

well that didn't work

vocal spire
#

Logging?

cedar hemlock
#

not so fast

#

just the same

#

no

cedar hemlock
#

[INFO]:[TransMod] - Damage: 0, Parent: , name: -Gas Explosion Recycle L(Clone) (UnityEngine.GameObject)-

#

i added the -

vocal spire
#

It says 0 damage

cedar hemlock
#

it says 0 but i still get hit 2

vocal spire
#

Hmmm

#

Multiple explosion objects maybe?

cedar hemlock
#

modlog says only that

vocal spire
#

Show your code

cedar hemlock
#

wait-

#

huh?

#
[INFO]:[TransMod] - Damage: 2, Parent: , name: -Lil Jellyfish(Clone) (UnityEngine.GameObject)-
[INFO]:Creating hpbar for Lil Jellyfish(Clone)
[INFO]:[EnemyHPBar] - Added hp bar to Lil Jellyfish(Clone)
[INFO]:[TransMod] - Damage: 0, Parent: , name: -Gas Explosion Recycle L(Clone) (UnityEngine.GameObject)-
[INFO]:[EnemyHPBar] - Enemy Jellyfish Baby (6) ded
[INFO]:Creating hpbar for New Game Object
[INFO]:[EnemyHPBar] - Enemy Jellyfish Baby (5) ded
[INFO]:Creating hpbar for New Game Object

#

it says damage 2 for -Lil Jellyfish(Clone) (UnityEngine.GameObject)-

vocal spire
#

So?

cedar hemlock
#

i add Lil Jellyfish also?

vocal spire
#

That’s just a normal enemy

cedar hemlock
#

but why 2

#

it only did 1

vocal spire
#

I guess you can add it

#

Might work

jolly oriole
#

hm, afaik lil jellyfish should just spawn the other explosion thing, but adding it might work

vocal spire
#

Tc spaghetti code

cedar hemlock
#
            if (self.gameObject.name.Contains("Explosion") || (self.transform.parent != null && self.transform.parent.gameObject.name.Contains("Explosion")) || self.gameObject.name.Contains("Lil Jellyfish") || (self.transform.parent != null && self.transform.parent.gameObject.name.Contains("Lil Jellyfish"))) self.damageDealt = 0;

```?
jolly oriole
#

looks horrible but good

vocal spire
#

Yep

cedar hemlock
#

nice

vocal spire
#

I’ll rewrite it more nicely

cedar hemlock
#

while you do it i try if it works

jolly oriole
#

it works

cedar hemlock
#

yep

jolly oriole
#

the flying fucks already have 2 damage

#

the explosion doesn't even damage you because of iframes

vocal spire
#

if (self.name.Contains(“Explosion”) || self.name.Contains(“Lil Jellyfish) || (self.transform.parent != null && (self.transform.parent.name.Contains(“Explosion”) || self.transform.parent.name.Contains(“Lil Jellyfish”))))

cedar hemlock
#

lol

vocal spire
#

Well discord ruined it

#

Also replace quotes with your quotes since mobile bad

cedar hemlock
#
if (self.name.Contains("Explosion") || self.name.Contains("Lil Jellyfish") || (self.transform.parent != null &&  (self.transform.parent.name.Contains("Explosion") || self.transform.parent.name.Contains("Lil Jellyfish"))))
vocal spire
#

Looks right

#

Slightly shorter than yours

cedar hemlock
#

slightly

cedar hemlock
#

ok got it into a charm thx for the help

cedar hemlock
#

is there a way to detect when uumuu is defeated?

potent dirge
#

I believe there's a boolean for it, yea

#

if you check in debugmod there's an example of it being used in the bosshandler/respawn boss in this scene func

cedar hemlock
#

i cant find anything

steady comet
#

PlayerData.Instance.GetBool(nameof(PlayerData.killedMegaJellyfish))

cedar hemlock
#

thx

steady comet
#

(or something like that)

covert cosmos
#

how do I mod hollow knight ? I just want to change text

cedar hemlock
#

you want to change text for a mod or just want to change text only for you?

covert cosmos
#

changing every single soul into soup

jolly jungle
#

lmao

covert cosmos
#

on the base game

cedar hemlock
#

hmm

#

can be done without making a mod but will take time

covert cosmos
#

like, the charm would be call Soup Catcher

jolly jungle
#

Pretty sure you can check for strings you get, then parse them for Soul and replace

cedar hemlock
#

but i have no idea how to change text via a mod

jolly jungle
#

Pretty sure you can check for strings you get, then parse them for Soul and replace

#

Use the language hook

covert cosmos
#

where are strings ?

jolly jungle
#

Language hook gives you every string as it's displayed

#

There may be a more efficient way

#

But right now I'd just use that, get every string, and look for "soul" in them and replace with "soup"

covert cosmos
#

so I should go on the games files ?$

jolly jungle
#

What

#

No

#

Here

#

This here explains all you need to start making a mod, in general

covert cosmos
#

tysm

jolly jungle
#

Is the language hook I'm referring to

covert cosmos
#

there is, I guess, a way to convert those into a .dll file

cedar hemlock
#

you have to have an IDE

#

google it

#

idk if vs works on mac

covert cosmos
#

if not ?

cedar hemlock
#

use a different one

#

vs is just a IDE

light zodiac
#

Open the sln file, add the references and compile

covert cosmos
#

with what do I open it ?

cedar hemlock
#

an IDE

covert cosmos
#

oh

#

ok

cedar hemlock
#

wait a sec

covert cosmos
#

I'm waiting

cedar hemlock
covert cosmos
#

ty

#

wtf

#

oh hopefully there are versions else than nederland for languages

cedar hemlock
light zodiac
#

Just Google IDE for mac

cedar hemlock
#

im very smort

jolly jungle
#

lmao ruttie zotewheeze

covert cosmos
#

you died

#

killed by uumuu ?

#

I'm very smart : Ik how to read

jolly jungle
#

Oh right it's that cool add on that kaan made

#

Well, it's a mod, technically

cedar hemlock
#

im trying to get when uumuu dies

jolly jungle
#

Wdym?

cedar hemlock
#

im trying to log when uumuu dies

#

i was being stupid

#

made a stupid error

jolly jungle
#

As in, when during the animation?

cedar hemlock
#

just if uumuu is dead

jolly jungle
#

oh lmao

#

What are you gonna use it for?

light zodiac
#

Mod

cedar hemlock
#

giving the player a charm

jolly jungle
#

Ah, cool

cedar hemlock
#

it worked

#

now its spamming my modlog

jolly jungle
#

Woo, nice hollowknice

covert cosmos
#

2 geo

#

omg

jolly jungle
cedar hemlock
#

oh god

covert cosmos
#

you killed an explosive jellyfish

cedar hemlock
#

need to close the game quick

covert cosmos
#

58 minutes remaining$

#

dont mind the $ at the end of my messages btw

covert cosmos
cedar hemlock
#

what you have there is the opposite of an .dll

light zodiac
#

Dnspy

cedar hemlock
#

ohno

#
if (uuwuugone != 0)
            {
                ModHooks.Instance.HeroUpdateHook += uumuu;
            }
#

what do i do wrong

covert cosmos
#

I want to turn a .dll mod into a folder, a .sln etc.

deep wave
#

dnspy or ilspy

cedar hemlock
#

but you have the .sln already

#

just search for the source code on github

deep wave
#

if you already have project files, you can compile those into a .dll
if you need to look at a dll (mainly assembly-csharp.dll) to understand how the game works, dnspy is pretty good

covert cosmos
#

the emote is named flag_ug btw

#

I want to get the non .dll file of Howwow kwnight

cedar hemlock
#

search for howwow on github

covert cosmos
#

didn't work

cedar hemlock
#

it not on github hornetshock

covert cosmos
#

sad

cedar hemlock
#

why is it spamming my modlog!?

#
if (uuwuugone == false)
            {
                ModHooks.Instance.HeroUpdateHook += uumuu;
            }
...
private void uumuu()
        {
            if (PlayerData.instance.GetBool(nameof(PlayerData.killedMegaJellyfish)) == true)
            {
                uuwuugone = true;
                Log("uumuugone?");
                Log(uuwuugone);
            }
        }
#

what did i do wrong

jolly jungle
cedar hemlock
#

the if?

light zodiac
#

You could just do a normal hero update Hook and in the hook check for uuwuu

cedar hemlock
#

in initialize

light zodiac
#

Not other way around

jolly jungle
#

Oh, alright

#

And when is heroupdatehook called?

jolly oriole
jolly jungle
#

Uh
So, what this does is supposed to just spam logs, right?

#

Until uumuu is killed

cedar hemlock
#

ok so i have at the start just bool uuwuugone = false;, then if it is still false then i do ModHooks.Instance.HeroUpdateHook += uumuu; but when i make it true in private void uumuu it just keeps doing ModHooks.Instance.HeroUpdateHook += uumuu;

jolly jungle
#

I think

cedar hemlock
#

but when uumuu dies it still spams

jolly jungle
#

wait there's a thing in playerdata called killedmegajellyfish?

cedar hemlock
#

but while doing Log(uuwuugone); it says its true

jolly jungle
#

Oh I know

#

ou don't remove the hook

#

No?

#

Unless that's not what you asked

#

Anyways gtg, brb

cedar hemlock
#

i want that when uumuu dies the ModHooks.Instance.HeroUpdateHook += uumuu; stops

#

but why does it not stop

#

when uuwuugone is true

floral furnace
#

you have to unhook it i think

cedar hemlock
#

what is unhook

#

and how

floral furnace
#

ModHooks.Instance.HeroUpdateHook -= uumuu

cedar hemlock
#

ah

floral furnace
#

detaches itself from your method

#

that bool does nothing for your method hook

jolly jungle
#

Good luck ruttie sethsalute

cedar hemlock
#

it did nothing

light zodiac
#

Check if the charm is gotten and then make uuwuugone false

vocal spire
cedar hemlock
#

i just did it differently

#

i just did

 if (PlayerData.instance.GetBool(nameof(PlayerData.killedMegaJellyfish)) == true && uuwuugone == false)
            {
light zodiac
cedar hemlock
cedar hemlock
#

how does a mod "fail to load"

#

like, what are the criteria

#

because HKMP does not work without modcommon, but does not fail to load

jolly oriole
cedar hemlock
#

ok

copper nacelle
#

modcommon ax2uC

cedar hemlock
#

it will be changed to vasi later (or all dependancies will be removed)

jolly oriole
#

fsmutil 6.0, or are there then 7?

torn birch
#

how could I revive a boss?

copper nacelle
#

Depends on the boss

#

Debug has a feature you could take a look at for most bosses

#

Generally it falls into one of two categories

#

You set a bool or you change a SceneData element

torn birch
#

ok

#

what about False Knight?

torn birch
#

okay, looks good! Thanks!

#

so line 52 is for False Knight? Each subsequent line is the next boss?

#

Am I seeing that right>

copper nacelle
#

Yeah

#

This one sets a bool on an fsm

torn birch
#

ok, I think

#

so if it was false, false knight would be dead, if not, he would drop down and fight the player?

#

Sorry if I'm a bit slow

covert cosmos
#

The download of the ISE finally finished !

torn birch
#

Nice!

#

What IDE should I use for modding?

#

Is there a specific one?

#

I've been using Notepad++

copper nacelle
#

Visual Studio Community or Rider is what I'd recommend

#

VS Code also works though it's more lightweight

torn birch
#

alright

#

I'll use VSC for now

#

Is there any starting lines I need before I start the script?

copper nacelle
#

Not really

#

You'll end up needing usings

torn birch
#

Just the three unity usually gives, right?

copper nacelle
#

idk what unity gives ngl

torn birch
#

oh

#

nvm then

#

where whould I save it?

#

Does it get saved under HK?

copper nacelle
#

what

#

You put your compiled dll in the Mods folder

torn birch
#

ok

torn birch
#

how do I change the players position, like move them to a different room or reposition them within the room they're in?

copper nacelle
#

HeroController.instance.transform.position

torn birch
#

ok

#

Where can I find names for all the rooms in the code?

copper nacelle
#

you don't

#

they're pinned though

torn birch
#

ok

#

which pinned message? Also, how do I change the player's soul meter?

#

And also, how would I change the bossData for False Knight?

#

To make it so it will be true and revive him if he's been defeated previously

lost bear
#

A'ight my thing got lost in the other chat,, so hopefully this is a better place to ask..

I'm making a custom knight, and would like some help on how to keep an edit to the outline consistent- like how to not make something jitter between frames

#

Gonna make him some little wings or somethin, still deciding on how exactly to make them, but..

#

Really just need help gettin started

copper nacelle
#

you probably want SpritePacker

lost bear
#

Gonna check that out real quick

#

I'll have to download that stuff, then. How do they get all the frames to be like that?

#

All I have is the whole sheet, and there's no way they cropped every single frame

#

Unless they did but god I hope not

#

Or do you select one of those animations and just

#

Hmm

dusty obsidian
#

@lost bear i downloaded sprites from this video. animations are grouped in folders https://www.youtube.com/watch?v=B3bV9SFryfg&feature=youtu.be

ENG
You asked me a lot of times how I do skins so I decided to make a video about it.
I used Google Translate because the english is not my language.


SpritePacker: https://drive.google.com/open?id=1L0MNDMQE6s40zVF132zjwYjc-bSaBYDv
Sprite folder: https://drive.google.com/drive/folde...

▶ Play video
lost bear
#

thank you!

dusty obsidian
#

eg. this is the dash folder

lost bear
#

that'll help a lot

#

which folders should I download for a reskin of just the knight? there's a lot of folders here wow

#

not doing any of the magics right now or any of that

#

some of them don't say knight, then have the knight hiding in there

dusty obsidian
#

i think? most people focus on the Knight folder first

lost bear
#

alright, I just saw that one and... that's a big folder lmao

#

thanks a bunch

#

:D

dusty obsidian
#

i know OTL

#

:^)

lost bear
#

wonder what I should change on the boyye

#

wings are one idea..

#

another was like, tiny fluffy wings and a halo, or..

#

so many possibilities agh

#

well, I appreciate your help! I'll prolly pop by again once I get the hang of this stuff and figure out what I'm gonna do.

lost bear
#

ok.. once again need a little help, agh

#

it wanted sprites in there, so I did that

#

it's all the "knight" folder sprites

#

renamed "knight" --> "sprites" because the spritepacker was looking for a "sprites" location

#

but now spritepacker just isn't opening for me

#

confused

#

Should I have downloaded the entire, bigger sprite folder, with every folder of sprites?

copper nacelle
#

the people in modding-discussion prob know better ngl

#

skin dev is usually over there

lost bear
#

I'll see if they can glance here then, and ask there in the future

copper nacelle
#

thanks

lost bear
#

thank you too ;w;

torn birch
#

which pinned message has the names of the rooms in the game?

#

Also, how do I change the player's soul meter?
And also also, how would I change the bossData bool for False Knight?
To make it so it will be true should revive him if he's been defeated previously, right?

torn birch
#

ok.

light zodiac
torn birch
#

I'm an absolute moron for not seeing that scenes thing lmao

copper nacelle
#

i prefer the literal list ngl

torn birch
#

what app is good for viewing rar on windows?

light zodiac
#

Google?

copper nacelle
#

7zip

torn birch
#

ok

#

also is it herocontroller or hercontroller?

copper nacelle
#

hero

torn birch
#

ok

#

thx

fair rampart
#

Let’s goo I found out which sprite that kept showing up as unedited . So with that one sprite edited the standing still animation has come to a complete shroompog

dusty obsidian
#

hell yea!

fair rampart
lost bear
#

omg that's too cute

cedar hemlock
#

it fixes the "sequence contains no matching element" error (if this fix works ofc)

cedar hemlock
cedar hemlock
#

why did he ask it again then xD
then im just giving irrelevant info :elderC:

covert cosmos
#

UH

#

I have IntelliJ IDEA installed

#

namespace is the name of the mod right ?

jolly oriole
covert cosmos
#

it works for C# as well

#

is there a way to find the non dll file for this mod ? (folder+readme+license+sln file)

deep wave
#

you could ask gradow for the source

#

they might also have it on their github

#

otherwise you can decompile

covert cosmos
covert cosmos
cedar hemlock
#

use
```cs
_ _
```

covert cosmos
#

where ?

cedar hemlock
#

when putting in code

#

way better

#

🇳🇱

#

no deutch

#

i dont get why you put flags everywhere but if you do do the right flag

#

now it looks like im talking to air sadcowgrub

light zodiac
#

Remove the display this text

covert cosmos
#

oh shit ye

#

what

#

oh I sent the wrong one

#
{
    public class SoupMod : Mod
    {
        public SoupMod() : base("SoupMod") { }

        public string LanguageGet( string key, string sheet )
        {
            if( key == "Soul" )
                return "Soup";
            return Language.GetInternal(key, sheet);
        }

        public string LanguageGet( string key, string sheet )
        {
            return "Soul" + key + "Soup" + Language.GetInternal(key, sheet);
        }

        }
    }
}```
#

so 'LanguageGet' is supposed to find on the game's text if there are "Soul" written and replace it by "Soup" ? or I'm totally wrong

deep wave
covert cosmos
#

I didn't found the good Gradow I guess

deep wave
covert cosmos
#

ok the name wasn't gradow

#

ok it doesn't help me at all hollowsad

cedar hemlock
#

why the embed

#

it takes up my whole screen lol

potent dirge
#

I don't know how languageget works, but ngl that looks very not right in slightest ax2uHmm

jolly jungle
jolly jungle
#

key is the name of the string, you use that to get the string itself with Language.GetInternal(key, sheet)

#

What you need to do is call getinternal and stuff the string in a variable (for convenience), then you start parsing the string for "soul" and replace those with "soup", then return the final string

#

If this is confusing I'll try to explain again

#

Also I might be using the word parse wrong

covert cosmos
#

hm

#

and how can I parse the string ?

potent dirge
#

with google peepoArrive

#

and then you ask more if you can't figure out suggested solutions that already exist, for any reason (it makes no sense, it's outdated, it isn't compatible with the hk .net version, etc, anything)

#

(sorry if this came across as rude, but trust me, it will help a ton for individual understanding and problem solving to learn how to Google problems properly)

covert cosmos
#

also there was one } too much

torn birch
#

I see in the code there's a bool for FK in the debug mod. If I change it to true, would he respawn?

jolly jungle
#

Depends what the bool does

#

Try and find out

cedar hemlock
#
public List<bool> gotCharms = new List<bool>() { true, true, true, true };
#

how do i change only 1 of these

#

i only want the 2nd one to be true or false without touching the other ones

#

i cant just do

bool lala = true
...
public List<bool> gotCharms = new List<bool>() { true, lala, true, true };
copper nacelle
#

gotCharms[1]

dark wigeon
#

can't do gotCharms[1] = blah?

stone elm
#

It sounds like you're capable of editing the list initializer, so why not just put false there? Am I missing something maybe?

cedar hemlock
#

if i were to just change it to false all the other ones will also be forced the one i have in the new one

stone elm
#

That didn't make sense to me, but if you just change the second to false it will not affect the others after list initialization.

#

new List<bool>() { true, false, true, true };
Does not affect the other list items.

cedar hemlock
#

not?

#

won't it make the 1st, 3rd and 4th ones true?

stone elm
#

No, it's a new list being initialized. That code is functionally (and literally, once compiled) the same as

gotCharms = new List<bool>();
gotCharms.Add(true);
gotCharms.Add(false);
gotCharms.Add(true);
gotCharms.Add(true);