Skip to content

xaviershay/factorio-hs

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
app
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

factorio-hs

Very early and experimental library for working with Factorio data. Assume it doesn't work. The solver is intended to be a port of Foreman, but is a long way from being so. It should be platform agnostic, but I've only tried it on Ubuntu.

All command line tools will require an existing Factorio installation:

export FACTORIO_PATH=/opt/factorio

factorio-recipes is a debug tool that prints all loaded recipes. It can be a quick way to find recipe names for constructing graphs.

$ factorio-recipes $FACTORIO_PATH | grep rocket
Recipe {name = "rocket-part", items = [Ingredient "low-density-structure" (-10.0),Ingredient "rocket-fuel" (-10.0),Ingredient "rocket-control-unit" (-10.0),Ingredient "rocket-part" 1.0], category = "rocket-building"}

factorio-solve takes a graphviz representation of an assembly line and annotates it with perfect ratio data:

$ cat example.dot
digraph {
  "copper-cable"
  "copper-plate"
  "iron-plate"
  "electronic-circuit" [factorioTarget = 10]

  "iron-plate" -> "electronic-circuit";
  "copper-plate" -> "copper-cable" -> "electronic-circuit";
}
$ factorio-solve $FACTORIO_PATH example.dot
digraph {
    "copper-cable" [factorioRate=15.0];
    "copper-plate" [factorioRate=15.0];
    "iron-plate" [factorioRate=10.0];
    "electronic-circuit" [factorioRate=10.0
                         ,factorioTarget=10];
    "iron-plate" -> "electronic-circuit";
    "copper-plate" -> "copper-cable";
    "copper-cable" -> "electronic-circuit";
}

This tells us that to run the electronic-circuit recipe 10 times, we need to run the copper-cable recipe 15 times (which actually generates 30 cable).

Installation

None provided yet. Please follow the development instructions.

Development

Some one time setup is needed to install GLPK and Stack. For Ubuntu something like:

sudo apt-get install libglpk-dev haskell-stack
stack upgrade

You can then use standard stack commands to run the programs:

stack build && stack exec factorio-solve $FACTORIO_PATH example.dot

Wishlist

  • Arbitrary supply/consume/passthrough nodes.
  • Show assembler/module needs.
  • Calculate power usage.
  • Auto graph generation (so you don't need to map a rocket build out by hand...)
  • Better frontend than graphviz.
  • Test coverage.

About

Haskell library for working with Factorio data

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published