<div align="center">

![](.media/icon-128x128_round.png)

# Flyingsnake

CLI Terraria world map renderer

</div>

## Links

[![Available on PyPI](https://img.shields.io/pypi/v/flyingsnake)](https://pypi.org/project/flyingsnake/)

## Screenshots

![flyingsnake Small_Example.wld Output.png](https://i.imgur.com/HtNEIKw.png)

## Requirements

To use `flyingsnake`, you need [Python 3.7 or higher](https://www.python.org/downloads/) installed on your machine and inside your PATH.

## Installing

### Windows

Open either **Windows PowerShell** (Windows 10) or the **Command Prompt** (other Windows versions) and enter:

```batch
pip install flyingsnake --upgrade
```

### Linux

Enter this in your terminal:

```bash
python3.7 -m pip install flyingsnake --upgrade
```

## Usage

> **Warning**
> 
> Loading maliciously designed Terraria worlds can drain system resources, crash the interpreter, or possibly do more evil things!
> 
> **Make sure you trust the worlds you are rendering!**

To create a world map image named `Output.png` from the `Small_Example.wld` file present in your current working directory, run in your terminal:

```bash
flyingsnake Small_Example.wld Output.png
```

### Layers

The world map is generated by merging together multiple layers that can be enabled/disabled through flags.

In order, those are:
- Background
- Walls
- Liquids
- Blocks
- Wires

#### Background

The background layer is made by coloring the Overworld, the Underground and the Caverns their respective background color.

It can be selected exclusively with the `--background` flag, or turned off with the `--no-background` flag.

![flyingsnake Small_Example.wld Output.png --background](https://i.imgur.com/69qRLZX.png)

#### Walls

The walls layer contains the colors of the walls present in the world.

It can be selected exclusively with the `--walls` flag, or turned off with the `--no-walls` flag.

If the walls are painted, they will be colored with the paint color.
You can turn off paint colors with the `--no-paints` option.

![flyingsnake Small_Example.wld Output.png --walls](https://i.imgur.com/Grkq5PQ.png)

#### Liquids

The liquids layer contains the colors of the liquids present in the world (water, lava, honey...)

It can be selected exclusively with the `--liquids` flag, or turned off with the `--no-liquids` flag.

![flyingsnake Small_Example.wld Output.png --liquids](https://i.imgur.com/Pifjb4D.png)

#### Blocks

The blocks layer contains the colors of the blocks present in the world.

It can be selected exclusively with the `--blocks` flag, or turned off with the `--no-blocks` flag.

If the blocks are painted, they will be colored with the paint color.
You can turn off paint colors with the `--no-paints` option.

![flyingsnake Small_Example.wld Output.png --blocks](https://i.imgur.com/E05kgOA.png)

#### Wires

The wires layer is a semi-transparent overlay of the wires present in the world.

It can be selected exclusively with the `--wires` flag, or turned off with the `--no-wires` flag.

![flyingsnake Small_Example.wld Output.png --wires](https://i.imgur.com/XDLRCAE.png)

### Custom colors

By default, `flyingsnake` uses the colors defined in the [TEdit settings file](https://github.com/TEdit/Terraria-Map-Editor/blob/master/TEditXna/settings.xml).

However, you can use different colors by passing the `--colors colors.json` option to the command.

You can see an example colors file [here](https://github.com/Steffo99/flyingsnake/tree/master/flyingsnake/example_colors.json); the colors are in RGBA format, and go from 0 to 255.

## License

`flyingsnake` is licensed under the [AGPL 3.0](/LICENSE.txt).
Basically, you're allowed to do whatever you want with this program, but you have to publish all modified code, and it has to be published under the same license.

## See also

If you are interested in `flyingsnake`, you might be interested in these other programs too:

- [lihzahrd](https://github.com/Steffo99/lihzahrd), the package used to make this generator
- [TEdit](https://github.com/TEdit/Terraria-Map-Editor), the Terraria map editor from which this package gets its default colors
