Cool mod. I was thinking of trying to make a bot for the game at some point but I didn’t really want to have to do all the work to hook everything up properly just to get started. I’ll take a look at this and see what can be done with it. It’d probably still take a lot of work to make a learner work properly, but it’s kind of interesting that a bot with such a simple heuristic can at least win normal mode.
Yeah, a big part of my thinking when making this was trying to see just how simple I could make it. I was definitely a little surprised to see the AI go all the way for the first time, and most of the changes since then were just little tweaks and bugfixes. Winning consistently is much, much more difficult. I'm really curious to see if someone can make an AI manage that, at least on A0. If you decide to give it a shot, I look forward to seeing what you make.
I am disapointed. I came expecting a slay the spire bot built on a convolutional neural network that would still lose horribly after hours of training. Instead, we get a hard-coded bot that actually wins?! The nerve!
7:15 - 5% winrate for Silent, 7% for Ironclad, 10% for defect. That is still pretty high for a game that is mechanically complex, but I would still expect a proper AI (ML-based, or using tree-search) to have significantly higher winrates.
Honestly, idk anything about neural networks but I would love to see a true AI play STS just to see what kind of strategies it comes up with. Maybe with some hard-coding to tell it how to pick cards and play cards, etc.
EDIT: nvm, I was looking at github releases and not official (Steam Workshops) releases. Just a heads up, a small typo in your pom.xml requires ModTheSpire version 3.10.1+, but the latest release of ModTheSpire is 3.6.3
I see the "dependency-reduced-pom.xml", but using that doesn't seem to fix the error, not sure where it's pulling the version from in that case :shrug:
3.10.1 is in fact the latest release of ModTheSpire. Unfortunately, the ModTheSpire devs no longer push jars to github, so you can only get the latest build either by compiling it yourself or subscribing to ModTheSpire in the Steam workshop.
EDIT: NVM, I found them (Steam/steamapps/workshop/content/646570/1605060445 or 1605833019 for anyone else wondering) Ah, thanks! Sorry, I've never tried to mod anything before, much less used maven. Do you know where the .jars for steam workshop are stored?
Maybe not NEAT, but there has been some cool stuff lately looking at neuroevolution as an alternative to deep reinforcement learning (see eng.uber.com/deep-neuroevolution/ for example for a nice article from Uber research). I don't know much about these sorts of genetic algorithms, but it is possible someone may give it a shot. Computational resources may be a big bottleneck for hobbyists looking to use approaches like that, though.
Alright, can't wait for somebody to make a neural network that tries to learn how to play on it's own! Unfortunately, I have 0 coding skill, so I can't do it myself...
I am getting an error: java.io.IOException: Cannot run program "": CreateProcess error=87, The parameter is incorrect when i click the "start external process" button in the mod settings. It seems that the program isn't reading the command properly from the config file. I went into the config file: (%LOCALAPPDATA%\ModTheSpire\CommunicationMod\config.properties) and edited the command line to read the path to the main.py. (is this the wrong config file?) ``` #Fri May 17 10:19:34 EDT 2019 command=python C:\\Users\\USERNAME\\Desktop\\spirecomm-master\\spirecomm-master\\main.py ``` (this: command=python C\:\\Users\\USERNAME\\Desktop\\spirecomm-master\\spirecomm-master\\main.py didn't work either) any help is much appreciated.
I agree with your diagnostic that the program isn't reading the command from the config file. That second one looks like the right sort of thing, so I would just suggest making sure StS is closed, editing the file to that, restarting StS, and making sure that in the Communication Mod options, the external process command looks correct. Right now, the game seems to be getting an empty string instead. If the config file you're using was auto-created, it's the right file, and that should also mean that the mod was able to read and write to that file successfully, so I can't think of how it wouldn't be able to read and write successfully again. I apologize if none of this is helpful.
@@ForgottenArbiter Thanks for replying. in your code you check to see if the command is null (CommunicationMod.java - line 62 github.com/ForgottenArbiter/CommunicationMod/blob/a0ad0c6fe6a6ba4e494bfa38eb37a5c930a5ff8c/src/main/java/communicationmod/CommunicationMod.java#L62). This if statement evaluating true is the only way that it is possible for the command to be "". (it is set to DEFAULT_COMMAND) This means I have the wrong config file somehow (even though it is autogenerated). I can't recompile your code (don't have the basemod or any of the other dependencies (to much work to get it lol)) and hard code my path into it. So I guess I am stuck. Maybe you can add into the source code a line that logs the path of the config.properties file although I don't know how to do that) (also doesn't seem very useful except in niche cases like this.) If you have time to waste, I would be grateful if you can try to reproduce the error (I am on windows 10) (redownload version 0.4.0.jar->place it into SlayTheSpire\mods->etc) and come back to me. If not, well I hope other people make cool stuff with it.
The command will be "" if that is null (the config file doesn't have command= in it), or if in the config file, the command is set to "" (it contains a line containing literally "command="). I doubt you have the wrong config file, but I don't have any suggestions other than what I've already said, which is basically to check the config file, save it, close it, run Communication Mod, see what the command is there, close Slay the Spire, and check the config file again. If you want to compile it yourself, you definitely do have all of the dependencies, since you need them to run the mod in the first place. Sorry I couldn't be more helpful.
hardcoded is not AI say "hardcoded" 5% winrate programm. You should make a lerning AI. Why would you not do that . Evolving strategys seem 100000x more fun. BUT you did your job amazingly well becuase now the communication mod can be used and enable anyone with enought motivation to use there strategys. Great. Thanks, altho i did not have enought motivaiton to look at the code and wont until i do which might be until im psychiatrically medicated or never
since all the wins fought time eater, do you think time eater is easier for your AI than the other bosses? I would think donu + deca would be the easiest because they don't respond in particular to any strategies a player uses. on the other hand, your silent AI would have a harder time beating awakened one because it favors playing powers, right?
Yes, Donu and Deca appears to be the easiest boss according to winrate, but the AI does defeat all three bosses regularly with all 3 characters. Time Eater actually has the lowest winrate of the three, so it's interesting that the three random runs I picked all faced Time Eater. I didn't notice that until after I uploaded it the video, or I probably would have gone for a wider variety of bosses. For Silent in particular, Donu and Deca still seems to be the easiest boss, and Time Eater the hardest. Defect is the only character that struggles the most with Awakened One, probably due to the power-heavy focus and lack of strength reduction.
Actually, I think the AI's play in combat is worse than its card choices. If it played fights much better, it would win much more often, but I think keeping the play in fights the same and picking cards more intelligently would have a smaller impact.
I reached 33th floor and i was proud. And you tell me that AI that picks most of the time automated options is better than me? SadPepe.jpg Btw nice vid
Uff ... I really like the idea of this but boy does someone with a way better knowledg e of STS need to take care of it -.- I don't mean to be rude but everyone who's at least mediocre at the game could have told you way up front, that your silent strategy won't work
This guy beat slay the spire true ending on ascension 20 with 0 cards in deck. I'm sure the part that was hard wasn't finding a good strategy to win the game, but rather, finding a strategy the bot could employ.
It's an AI because it's the computer taking decisions, you are referring to AI learning, wich is a different thing In this case he taught the AI what to do instead of letting it figure out what to do (probably because it's faster and easier for a game like this)
god im so glad the robot is best with the robot
Please change the title to:
*AI Slays the Spire*
Glad to see that Nobby Boi is a run killer for AI too lul
Now for an AI that evolves and learns from its losses
I'm definitely looking forward to seeing something more sophisticated, if it does arise.
Cool mod. I was thinking of trying to make a bot for the game at some point but I didn’t really want to have to do all the work to hook everything up properly just to get started. I’ll take a look at this and see what can be done with it. It’d probably still take a lot of work to make a learner work properly, but it’s kind of interesting that a bot with such a simple heuristic can at least win normal mode.
Yeah, a big part of my thinking when making this was trying to see just how simple I could make it. I was definitely a little surprised to see the AI go all the way for the first time, and most of the changes since then were just little tweaks and bugfixes. Winning consistently is much, much more difficult. I'm really curious to see if someone can make an AI manage that, at least on A0. If you decide to give it a shot, I look forward to seeing what you make.
Thanks for this, looking forward to toying around with various AIs!
I look forward to seeing it if you do!
I am disapointed. I came expecting a slay the spire bot built on a convolutional neural network that would still lose horribly after hours of training. Instead, we get a hard-coded bot that actually wins?! The nerve!
7:15 - 5% winrate for Silent, 7% for Ironclad, 10% for defect.
That is still pretty high for a game that is mechanically complex, but I would still expect a proper AI (ML-based, or using tree-search) to have significantly higher winrates.
Hard-coded bots are boring
Guess we start advising people to hard-code themselves if they can't beat ascension 0.
Nicholas So is that a NL reference?
@@maximmorshin7446 Not at all, though I'm interested in what you thought I referenced.
Lmao
@@nicholasso8560 Northernlion, a canadian TH-camr who plays Slay The Spire in his channel, and is famous for being bad at it lol
Ayyyy lets gooooo I’ve been waiting for a year for this thanks for this
Me too! I hope it motivates some people to pick up where I left off.
Damn, the runic dome has no downside for AIs ^^'
Woo! Nice work. SMOrc-clad best 'clad
This is awesome! So inspiring!!
Also, I didn't hear any mention of potion strategy, do the AI just unload all the potion when it encounter act bosses?
Yeah, sorry, that's exactly what it does.
Honestly, idk anything about neural networks but I would love to see a true AI play STS just to see what kind of strategies it comes up with. Maybe with some hard-coding to tell it how to pick cards and play cards, etc.
Really appreciate what you do - your content stays incredibly interesting and satisfying. Big ups
I can only agree, great video
Thanks! I do read all comments, even if I don't always respond, and comments like these are a great motivation.
EDIT: nvm, I was looking at github releases and not official (Steam Workshops) releases.
Just a heads up, a small typo in your pom.xml requires ModTheSpire version 3.10.1+, but the latest release of ModTheSpire is 3.6.3
I see the "dependency-reduced-pom.xml", but using that doesn't seem to fix the error, not sure where it's pulling the version from in that case :shrug:
Ah. Apparently I needed to change the version in src/main/resources/ModTheSpire.json, not pom.xml
3.10.1 is in fact the latest release of ModTheSpire. Unfortunately, the ModTheSpire devs no longer push jars to github, so you can only get the latest build either by compiling it yourself or subscribing to ModTheSpire in the Steam workshop.
EDIT: NVM, I found them (Steam/steamapps/workshop/content/646570/1605060445 or 1605833019 for anyone else wondering)
Ah, thanks! Sorry, I've never tried to mod anything before, much less used maven. Do you know where the .jars for steam workshop are stored?
This is so cool
I wonder if someone will be able to do this without hardcoding the AI, like using NEAT
Maybe I will try, someday
Maybe not NEAT, but there has been some cool stuff lately looking at neuroevolution as an alternative to deep reinforcement learning (see eng.uber.com/deep-neuroevolution/ for example for a nice article from Uber research). I don't know much about these sorts of genetic algorithms, but it is possible someone may give it a shot. Computational resources may be a big bottleneck for hobbyists looking to use approaches like that, though.
How does the AI's block heuristic interact with Runic Dome's hiding of the enemy intents?
It chooses a heuristic attack amount based on the number of enemies and act.
Wow this is great!
Thanks!
Hence, the flood gate open.....
Don't let NL see this
According to my TH-cam comment section, apparently NL isn't allowed to see any of my videos. Poor NL :(
Alright, can't wait for somebody to make a neural network that tries to learn how to play on it's own! Unfortunately, I have 0 coding skill, so I can't do it myself...
wow this is really impressive :O
Superfastmode aaaah!
Obligatory Creative AI joke
I am getting an error:
java.io.IOException: Cannot run program "": CreateProcess error=87, The parameter is incorrect
when i click the "start external process" button in the mod settings.
It seems that the program isn't reading the command properly from the config file.
I went into the config file: (%LOCALAPPDATA%\ModTheSpire\CommunicationMod\config.properties) and edited the command line to read the path to the main.py. (is this the wrong config file?)
```
#Fri May 17 10:19:34 EDT 2019
command=python C:\\Users\\USERNAME\\Desktop\\spirecomm-master\\spirecomm-master\\main.py
```
(this: command=python C\:\\Users\\USERNAME\\Desktop\\spirecomm-master\\spirecomm-master\\main.py didn't work either)
any help is much appreciated.
I agree with your diagnostic that the program isn't reading the command from the config file. That second one looks like the right sort of thing, so I would just suggest making sure StS is closed, editing the file to that, restarting StS, and making sure that in the Communication Mod options, the external process command looks correct. Right now, the game seems to be getting an empty string instead.
If the config file you're using was auto-created, it's the right file, and that should also mean that the mod was able to read and write to that file successfully, so I can't think of how it wouldn't be able to read and write successfully again. I apologize if none of this is helpful.
@@ForgottenArbiter
Thanks for replying.
in your code you check to see if the command is null (CommunicationMod.java - line 62 github.com/ForgottenArbiter/CommunicationMod/blob/a0ad0c6fe6a6ba4e494bfa38eb37a5c930a5ff8c/src/main/java/communicationmod/CommunicationMod.java#L62). This if statement evaluating true is the only way that it is possible for the command to be "". (it is set to DEFAULT_COMMAND)
This means I have the wrong config file somehow (even though it is autogenerated). I can't recompile your code (don't have the basemod or any of the other dependencies (to much work to get it lol)) and hard code my path into it. So I guess I am stuck.
Maybe you can add into the source code a line that logs the path of the config.properties file although I don't know how to do that) (also doesn't seem very useful except in niche cases like this.)
If you have time to waste, I would be grateful if you can try to reproduce the error (I am on windows 10) (redownload version 0.4.0.jar->place it into SlayTheSpire\mods->etc) and come back to me. If not, well I hope other people make cool stuff with it.
The command will be "" if that is null (the config file doesn't have command= in it), or if in the config file, the command is set to "" (it contains a line containing literally "command="). I doubt you have the wrong config file, but I don't have any suggestions other than what I've already said, which is basically to check the config file, save it, close it, run Communication Mod, see what the command is there, close Slay the Spire, and check the config file again. If you want to compile it yourself, you definitely do have all of the dependencies, since you need them to run the mod in the first place. Sorry I couldn't be more helpful.
This bug as described is present in version 0.4.0. It is completely fixed in version 0.5.0.
Thanks for the fast updates! :D
hardcoded is not AI say "hardcoded" 5% winrate programm.
You should make a lerning AI. Why would you not do that . Evolving strategys seem 100000x more fun. BUT you did your job amazingly well becuase now the communication mod can be used and enable anyone with enought motivation to use there strategys. Great. Thanks, altho i did not have enought motivaiton to look at the code and wont until i do which might be until im psychiatrically medicated or never
I'd like to try to use this mod locally, but ran into some issues. I opened an issue on the github repo
So to summarize, does it check the seed before playing to know how it can win? if not, what is the winrate?
since all the wins fought time eater, do you think time eater is easier for your AI than the other bosses? I would think donu + deca would be the easiest because they don't respond in particular to any strategies a player uses. on the other hand, your silent AI would have a harder time beating awakened one because it favors playing powers, right?
Yes, Donu and Deca appears to be the easiest boss according to winrate, but the AI does defeat all three bosses regularly with all 3 characters. Time Eater actually has the lowest winrate of the three, so it's interesting that the three random runs I picked all faced Time Eater. I didn't notice that until after I uploaded it the video, or I probably would have gone for a wider variety of bosses. For Silent in particular, Donu and Deca still seems to be the easiest boss, and Time Eater the hardest. Defect is the only character that struggles the most with Awakened One, probably due to the power-heavy focus and lack of strength reduction.
twitch plays slay the spire
Is there a way to get a neural network to run with this? Instead of a programmed bot.
What about the new character?
Also, a good showcase how awful at the game a player would be if one rely on ratings on card choices.
Actually, I think the AI's play in combat is worse than its card choices. If it played fights much better, it would win much more often, but I think keeping the play in fights the same and picking cards more intelligently would have a smaller impact.
zetris for slay the spire?
niiiice
More sts AI
I reached 33th floor and i was proud. And you tell me that AI that picks most of the time automated options is better than me? SadPepe.jpg
Btw nice vid
You'll get there! Thanks for watching!
Well, its kinda funny that the day after i wrote this comment i made it.
Uff ... I really like the idea of this but boy does someone with a way better knowledg e of STS need to take care of it -.-
I don't mean to be rude but everyone who's at least mediocre at the game could have told you way up front, that your silent strategy won't work
This guy beat slay the spire true ending on ascension 20 with 0 cards in deck. I'm sure the part that was hard wasn't finding a good strategy to win the game, but rather, finding a strategy the bot could employ.
@@AvasFangs Probably, or finding a suitable run in the first place *g*
if you know what it's exactly doing, it's not AI
Well, I'd argue it indeed is a kind of artificial intelligence, but not a very advanced one though.
It's an AI because it's the computer taking decisions, you are referring to AI learning, wich is a different thing
In this case he taught the AI what to do instead of letting it figure out what to do (probably because it's faster and easier for a game like this)