im trying to make a neuro integration mod for your only move is hustle. small issue, yomi hustle runs on godot 3.5 and the neuro sdk is for 4.1, is there a version made for godot 3 or can someone help me out. first time touching the sdk and dont really now where to start
https://github.com/Dynamite227/YourOnlyNeuroIsSama
#your only neuro is sama
1 messages · Page 1 of 1 (latest)
i guess you're in luck. since im currently working on a brotato integration i had to convert it to godot 3.6.
the code is a mess from the conversion and you would need to do a search and replace for Adesi-NeuroIntegration because custom classes don't work. so you need to directly load the files.
https://github.com/Adesii/Neuro-sdk-Brotato-Integration/tree/main/mods-unpacked/Adesi-NeuroIntegration/neuro-sdk
i also had to create 2 child nodes on the mod
https://github.com/Adesii/Neuro-sdk-Brotato-Integration/blob/f1701656c248f5141caf34a3b811376828cbccc5/mods-unpacked/Adesi-NeuroIntegration/mod_main.gd#L65-L75
im not 100% certain my sdk conversion has the same behaviour in all scenarios but so far i haven't had any issues with it
thank you. also, this is my first time messing with websockets or anything online, im a bit overwhelmed do you know where i could learn this stuff? i looked at the official usage file and was confused. i haven't tried your 3.5 version yet I would really appreciate help. ill start figuring out your version later today when i wake up
well.. my version is basically just the normal godot-sdk version downgraded to work in 3.6.
in this case you don't really need to know anything about how it connects to neuro or talks to it. The underlying websocket and networking stuff is already handled and you only really need to use the functions provided by the sdk like the NeuroAction class, ActionWindow and Context.
these 3 are basically all the ones you are gonna use. and maybe the NeuroActionHandler class for manually registering and unregistering actions
my main issue is I dont really know where to start
once i have that ill be able to figure it out
well.. getting your mod loaded in the actual game is likely the first step.
assuming YOMIH uses the godot-modloader addon for the workshop integration it should be fairly easy to mod from there on out.
i would definitely recommend seeing how others have integrated neuro into their games. the other integrations like #1377258855288930356 and #1387262088359055360 etc. are a good place to look even tho they aren't in gdscript. the sdk usage is very similar
alright, ill check it out. thanks
on your github i just need the neuro-sdk folder right?
i figured, ill try again later when im actually awake. thanks
i just decompiled YOMI and it does seem to be similar in structure to brotato. So... after you get through the initial pain of setting it up, it should be fairly easy to set everything up beyond that.
the official sdk repo has the actual specs and some recs on where to use what, limitations, etc...
I also document these on a separate site but idk if that would count as advertising a bit so I won't drop the link
oops didn't mean to ping reply
also if you want I think it would help if you separated the implementation and PR'd a link to it on the official repo readme since I guess some moddable games use gd3.x?
I should probably do that... would need to clean up the whole thing first tho. and make a proper writeup on how to install it. since its a bit more complicated in <=3.6 versions of godot
The main challenge will be how to tell Neuro what is going on
currently my main issue is i have no idea how to set it up. honestly i think ill have an easier time describing whats happening lmao
spent a lot of time today just reading files trying to wrap my head around what i need to edit and what i need to add
im probably severly overcomplicating it
i would recommend not pre-planning too much. there are a few caveats with modding godot 3.x that you will only run into once you start putting things together. The way i handle my project is by going 1 step at a time and once its working move onto the next one or refactor the old solution.
how do i get the test ai to connect? i feel like that would be a good first place to start
im using jippity
i can get it to listen to port 8000 but idk how to get it to connect
You need to have a environment variable set in your OS with the websocket URL
you search Environment Variables in the search box on windows. click on Environment Variables and add a new User variable for NEURO_SDK_WS_URL
you might need to restart or atleast logout for it to be detected. but after that godot should connect to the websocket
i personally haven't had much luck with jippity using actions and properly working (tho i have to add i used it with LM Studio and not with gpt 4 or 5 etc..). i would personally recommend using a local LLM with gary. something like Llama-3.1-8B-Instruct has worked really well for me
should i use absolute filepaths or local filepaths for fixing the filepaths?
but if you are using my sdk. a simple search and replace of Adesi-NeuroIntegration with your modname should be enough
since the structure you need to put it in is the same between the versions afaik
so: mods-unpacked/YOUR-MOD/....
since thats how the modloader expects the mods to be located and packed up
another thing you could do to easily setup the mod folders. is by installing the mod tool from the asset lib. that can generate you a manifest and a basic template so you for sure have a proper mod.
it can also export the mod so you can upload it elsewhere
or test it in the actual game
theres an addon called yh mod helper, or somethng like that. its made specifically for yomi hustle so ive been using that
well.. the mod tool is made by the modloader guys. not sure if yh mod helper integrates that or not
i think i should use the one made by the modloader guys. the yh mod helper is mostly for custom characters i found
:/ yeah.. maybe it doesn't work for this godot version
that one seems to do about the same as the mod tool... so should be enough
alright then ill try what you said and see if i can get it to work
interesting... this mod assistant doesn't put it in a mods-unpacked folder..
so you might need to remove that from the path also
do i put the mods_unloaded in the modloader folder or the neuro integreation
i was just asking that lol
nah. it seems like yomi mods don't need the mods-unpacked path
ok i assume i put it into the neuro_integration folder that the yh assistant made
so.. it basically just res://YOUR-MOD/

you do need to do a tiny bit more for it to load tho
in the main scene i make a node with the mod_main script and main as a child node of that?
no
ah
the mod loader takes care of all that
you cannot change any of the project
you can only do stuff through your mod_main.gd script
yea i was a bit confused about how that might work
any changes you do to the project like adding or removing settings will not apply to the actual game once you export
makes sense
the project is basically just a testbed. so you can have a editor to work with for your mod's assets
alright. how do i get the modloader to do that
well. your mod_main.gd should be automatically be loaded. if you launch the project and put a print in your init function it should be called
im guessing i replace the modmain file that the yh assistant made with the mod_main, or do i move the code over
the name of the file is important im guessing
yea i was doing that and planned to edit what i needed to
hmm.. looking at the thing it generated it seems like the structure isn't the same between the modloader versions so i doubt it works
ah
you basically just need to replicate these few things in your mod_main.gd
no wonder nothing was loading
(the add_child_nodes() is called in the _init() function)
i just updated my repository btw. just moved some stuff about and used a script extension. not sure if the changes will affect you really
i had the changes on my local git. but didn't push them until just now
in yomi's case you probably want to extend the ModOverride.gd script instead of how i done Utils
what do the changes do
i used script extensions basically
decoupled the logic a bit.
script extensions basically just allows you to change logic in scripts or add new logic to them. very useful for autoloads.
and.. i basically use a script extension to store all the different neuro-sdk stuff like ActionWindow class etc. so i can just create a new one with: Utils.ActionWindow.new() instead of having to load the file every time
sounds easier to use
it is 
also the about section on your repository says balatro
i knew i would forget to change it somewhere
always happens
brotato, balatro... i always mix them up 
https://github.com/Adesii/Neuro-sdk-Brotato-Integration/blob/main/mods-unpacked/Adesi-NeuroIntegration/extensions/utils_ext.gd but yeah.. this is basically the file i store all my global stuff in
what file is the util_ext.gd file extending? its not in the mod
well. that comes from whatever game your modding
in your case you probably want to extend "res://ModOverride.gd"
think i found itr
no
oh
Yomi doesn't have a Utils autoload
you need to extend something from the autoload list. in yomi's case its probably best to just use the one that is intended to be overriden
ok i changed it to extend modoverride
well.. if you've done that. and added the child nodes in your mod_main and installed the script extension. it should probably just work?
assuming you changed all the paths to your own mod
ive changed the paths but im a bit confused about changes i need to make to modmain
extends Node
const AUTHORNAME_MODNAME_DIR := "Adesi-NeuroIntegration"
var mod_dir_path := ""
var extensions_dir_path := ""
var mod_loader
func _init(ml = ModLoader):
mod_loader = ml
mod_dir_path = "res://your-mod/"
install_script_extensions()
add_child_nodes()
var action_handler
func add_child_nodes():
var websocket = load("res://mods-unpacked/Adesi-NeuroIntegration/neuro-sdk/websocket/websocket.gd").new()
websocket.name = "WebsocketNode"
add_child(websocket)
action_handler = load("res://mods-unpacked/Adesi-NeuroIntegration/neuro-sdk/actions/neuro_action_handler.gd").new()
action_handler.name = "NeuroActionHandlerNode"
add_child(action_handler)
func install_script_extensions() -> void:
extensions_dir_path = mod_dir_path.plus_file("extensions")
mod_loader.installScriptExtension(extensions_dir_path.plus_file("utils_ext.gd"))
func _ready() -> void:
ModOverride.NeuroActionHandler = action_handler
i think this should work if you change out the paths...
actually.. the mod_dir_path won't work..
so you might need to just manually set it to "res://your-mod/"
i did that and its not doing anything when i run the game
yea it doesnt put anything in the console
wait i see... you need to create a mods folder next to your editor's binary files
and then export the mod in there
you can use the YHMA to auto-export the mod there
no
i see
i probably did something wrong when i run the project i get this
oh
wrong paths
whoops
found the issue, my stupid ass just put this

ok it gives me the same error but slightly different
i mean... that path is clearly wrong
it is?
do you have a Adesi-NeuroIntegration in your project?
res://Neuro_integration/Adesi-NeuroIntegration/extensions/utils_ext.gd thats the path
yea ill edit it soon
but the path is the correct path
can you show the filesystem for your project?
i found the issue
wait do i gotta move the modmain
Neuro_Integration =/= Neuro-Integration
ah
you have the wrong path 
bruh

when trying to run jippity in the consol is it supposed to say this
i should probably use Llama
that looks like a correct output
oh wait right i gotta have a different tool to see what its trying to output
tho... looking at the console output in your godot. you didn't setup your environment variable correctly 
-_-
i would definitely still recommend using gary for getting started. since you won't need a full gpt when starting to test your game. once you have all the actions and everything figured out you can switch to jippity to finetune the context and see if a actual llm can play the game
unless you use jippity with something like ollama or lm studio the way i did
alright i guess i could start trying to set up the actions
ill start with character selection seems the simplest to start with

thats also what i started with
i would also probably automatically just go to the character screen without making it an action
thats the way i do it in brotato
wouldnt it be better to set it to pick a character when its on the character select screen? would be cool to work with online play as well
i mean yeah. but it needs to get there somehow. neuro can't press buttons. and registering a action to get from the main menu to a character screen seems... unnecessary. but i guess it depends on what you want
to what screen it goes to should probably be a config file or something so vedal can set it up if needed
i think im thinking too far ahead, i should make sure it works first

so for right now, for testing ill have it start in singleplayer and the ai will be player 2 i think\
Actually there's no real reason to make it player 2. It would just make it more complicated later
probably best to just make it player 1 for now
yea
first i gotta change the action files you made to actually work with yomi hustle
i did manage to get jippity working. but the game keeps crashing
i dont know what to do with outgoing message
@wintry hound can you help me a bit here?
well.. that means the message/action is null
so you didn't do something correct when creating a action maybe... or something else is messed up
most likely i did something wrong with creating actions
ill show you my code for that
i probably did something wrong in the first image where i try to set the action in the main.gd file
are the actions extending NeuroAction?
yes
is that schema wrapper putting it inside an object schema? (I'm assuming it does but just making sure)
its saying its an error in the get_ws_message function so ill show you that
ah wait get ws message doesnt have that function
try commenting out all the Context.send you have. i want to see something
ok
they are using my actions basically for the most part. the schema works fine for me 
also what does jippity say when it happens

a crash on the godot side. shouldn't matter to jippity
especially if its about sending messages and not receiving
i get the same error when i comment out the send function in the context file
idk, just taking a shot in the dark that maybe jippity logs could say something, that was all
could you maybe send your mod here? that way i could debug it on my side and see if i see anything wrong with it
like the packed zip
heres what jippity is saying
(sometimes it does reveal some problems I didn't think it would reveal so)
ok so nothing of value 
just connection closed on top
maybe i accidentally broke something
in the message codes
oh wait. looking at the open ai logs, the only message jippity is getting sent is "you are now playing your only move is hustle"
well.. yeah because you are crashing on trying to send the other messages
oh, yea
i think i might have found the issue... let me test real quick
but im also just crashing when the single player button gets pressed..
oh. also i did use copilot a little while starting the project, it made some changes that broke everything and maybe i forgot to revert all of them
did you copy the tbfg.dll file into the lib folder
the what
its in yomi hustles file location, you just gotta copy it over to the lib folder in the yomi extracted
yeah now it works
alright
i think its the turn based fighting game framework. it doesnt get decompiled
alright... now i have the same error as you
ah so i did brake something
(we already knew that)
early on im pretty sure copilot edited this but im worried about changing it in case it brakes something
in the context.gd file
wait... yeah that is completely wrong
i have since learned that vibe coding fucking sucks lmao

last time i try that
good
whats it supposed to say?
well.. you are creating a ws_message directly
when it should create a context class
oh so its not using the one that i need to send its just making a new one
not even that. that function is basically so you can call Context.send from anywhere
but you need to create a Context object that then gets passed as a outgoing message to the websocket node
thats why that function is static. it creates a instance of the script its in
thats why it was loading context.gd
load("res://mods-unpacked/Adesi-NeuroIntegration/neuro-sdk/messages/outgoing/context.gd").new(message, silent)
and passing it into itself
well. im getting a new error now. but it works 
replace the static func with this:
static func send(message: String, silent: bool = false):
var websocket_node = ModLoader.get_tree().root.get_node_or_null("/root/ModLoader/@@2/WebsocketNode")
if websocket_node != null:
var ws_message = load("res://Neuro_integration/Adesi-NeuroIntegration/neuro-sdk/messages/outgoing/context.gd").new(message, silent)
websocket_node.send(ws_message)
else:
print("WebSocket node not found at /root/ModLoader/Adesi-NeuroIntegration/WebsocketNode")
also i would recommend just giving your mod node a name instead of using @@2 everywhere
i copied the code and im getting the same error
like this instead and then search and replace the @@2 everywhere
its only the load that you need to change.
i downloaded the one i sent you in case somethng happened and now i get this error
it is sending the actions though
i guess i forgot a couple
i don't like all this path mangling either... but godot 3.x doesn't leave us another choice from what i saw..
once i got my brotato thing working i'll clean up the neuro-sdk and maybe release it as its own thing with clearer instructions on how to use it
now i get this error
pretty sure i can fix this one though, i think i just gave the wrong variable for the character buttons
yeah. atleast now it seems like it isn't a neuro-sdk issue
thanks for helping
no problem
trying to test it and
-_-
also how do i fix this error: Error calling OpenAI API with request ID req_8f3ea212a9b04622abc2236a63c7cf24 -> 400 An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. The following tool_call_ids did not have response messages: call_iE6zVjG6EtDcsT5IW0ZuzKr5
did it happen again?
this is the first time i got that error
yeah but when you retried did it happen again
probably due to the crash
i'm guessing
||I tried looking it up to make sure I'm not yapping misinfo and didn't get any results||
thats what ive been thinking

what is bro on about
theres no fireball move T_T
HE FUCKING BURSTED IN NEUTRAL LMFAO
the shurriken thrower
actually making progress it can choose moves, currently it sometimes chooses moves that arent avaliable so i gotta fix that
its able to choose any character but for some reason it has only chosen ninja or wizard
what model are you using? some are really bad at this kind of thing
gtp 4o mini, the issue was on my end end, it no longer picks nonexistant actions
just played the first full match with the ai and it loved to spam hustle
its max combo on me was 2
it just got a 4 hit combo on me, they grow up so fast
the mod technically works, its just not good and i gotta refractor
https://github.com/Dynamite227/YourOnlyNeuroIsSama
i made a github repository
Might be actually taking the title literally.
i spent the last 6 hours tryin to get the ai to be able to set the adjustable data (like angle of shurrikens thrown) but nothing has worked and now i have a headache.
Progress. The ai can now sometimes adjust the data
sometimes
Little something: before shuriken was shuriken, it was fireball
Which might explain that
This whole thing is really sick to see, though
T_T
whoops
since im setting the aim value directly i forgot to call the function in xyplot that clamps the aim value
lol
It's only a matter of time until its winning tournaments
Progress is slowing down a lot since I'm mainly trying to get good context for the ai
i have a silly idea
what if whenever the ai gets put into the game for the first time, i just send these documents as context depending on what character it is https://docs.google.com/document/d/1DuNf9kSAS_MR1AMvTd4885cUFLWRmBJ3dbgKHwjn3QQ/edit
https://docs.google.com/document/d/1egOzmgIs_dEzRLPAuAWqW0dCrh8ZJ_Fh3e5RSnK8sVs/edit
https://docs.google.com/document/d/19STLe0X1nw5kZyuQksfkaR6co_cACBlcc8pQsSxMDgo/edit
https://docs.google.com/document/d/1_WYNoQuaidV1iIuKW_B_2v13D1_Do3OC4AbycRkj5Os/edit
https://docs.google.com/document/d/1rnf9JY3gGIGqgmB3leEfaiy1QaTy5phVOVpj2k6bGAE/edit
https://docs.google.com/document/d/1VmJyAaOHcdQnQ9oHC7VxV8Q2Ch8dRs1o8A_m5ti21y4/edit
i have no idea if it would work or not
Google Docs
Cherry Flavour: Yomi Ninja School of Style KINDA MASSIVE OVERHAUL: People were using the guide section for far longer than it is useful for, and it was outdated. To bring this more in line with the other Cherry Flavours, I’ve removed everything bar the usual frame data section. I have also remove...
Google Docs
Cherry Flavour 4: Wild West Ways Frame Data, Properties, and Base Damage (‘*’ for Wallsplat)Spot Dodge: 11f IASA, Full invul frame 5-7. Grab Invul frames 1-4. Foresight: 14f IASA (10f in combos). Places an afterimage. Lasts 100 frames.Hindsight: Free action, costs 1 meter, place a Foresight wh...
Google Docs
Cherry Flavour 2: Secrets of Alchemy -Frame Data (‘*’ for Wallsplats):-Tome Slap: 5f startup, 3 active frames, IASA 12f-Kick: 7f startup, 13 active frames, IASA 25f (Low profile from frames 8-25)-Icicle: 7f startup, 3 active frames, IASA 17f-Jumping Icicle: Identical, but IASA 24f, and airbo...
Google Docs
Cherry Flavour 3: Robotechnician Unique Mechanic: Robot takes 10% less damage from all sources but takes less knockback to compensate. Autoguard: You begin with one use of it, and it lasts for the entirety of the move you attach it to until the next time you are actionable, but will only start 3 ...
Google Docs
Cherry Flavour 6: Slop Connoisseur PROPERTY DIFFERENCES: Mutant has 2 Air Options, and takes 10% more damage.UNIQUE TRAIT - Juke: This is a resource that allows the Mutant to give themselves momentum in a number of set directions as a free action toggle alongside their main action. Mutant regain...
i kinda wanna try it T_T
just to see what would happen
Tell us what happens
It would probably be more efficient than trying to cram all the context into one program
Does the ai knows where the opponent is?
it knows the position of both players
So globally and not relatively to itself?
I'd assume globally
@round lantern @slim sage you wouldn't believe this, but...
???
whuh
Replying to your suggestion in #1267109093902913581 message
thats so based of you 
WAIT I GET THE TITLE OF THIS PROJECT NOW POGGG
i finally got xy plot to actualy work lmao. took long enough
So would this work with modded characters or just the base 5?
I assume you would have to write out what the modded character can do?
I don't currently have any plans on modded characters
Dang, I was gonna try and make a Neuro mod if it would work. Oki <3
technically it would work since im getting all usable moves, but im sending character specific context rn
Gotcha
So they will be able to play them, but would have little idea of what they are doing.
Unless you added context for them to work off of
Or you could also directly make your own character document together with your mod: #1403635423594680402 message
Bet

Did you do it in the end?
I've been busy with a lot of things rn. Maybe if I get some free time
