Vampire Survivors is an action roguelike game where the player has to survive against waves of approaching enemies. The player acquires weapons and items while levelling up (this is called creating a build). Items can impact a weapon in two ways:
- by increasing a stat the weapon relies on (a combo),
- by changing it into a stronger weapon (an evolution).
Weapons and items are limited in number: 6 weapons and 6 items (plus bonus items directly gathered on the map). This enforces the player to make choices: given the current build, which weapon or item to get next?
This project aims at generating optimal builds, regarding two criteria: combos and evolutions.
Some mitigations:
- The model maximizes the number of combos and evolutions, but sometimes evolving a weapon can decrease the number of combos satisfied. Hence, there is a trade-off to perform, using coefficients. Different coefficients will produce different results. I believe most people would want to target evolutions first.
- Other than combos and evolutions, the model ignores everything: DPS, player stats, weapon or item rarity, etc. Produced builds are only called optimal regarding the number of satisfied combos and evolutions.
The generator relies on an integer linear programming (ILP) problem solved using GLPK. Data comes from Vampire Survivors Wiki. Assets are extracted from original game assets.
Contributions are welcome! Don't hesitate to open an issue or a PR.
If you are adding sprites, it looks better if they are taken from original game files. I wrote a little script extract.py
to do this: pass an asset list as argument, which is a JSON file found in Steam > steamapps > common > Vampire Survivors > resources > app > .webpack > renderer > assets > img. For instance:
items.json
for items and weapons,randomazzo.json
for arcanas.
Also, beware that adding more items and weapons to the game increases the complexity of the ILP problem, which can become too hard for a web browser to solve. Try to test the generator a bit to make sure it does not hang after your changes!
Thanks!