TowerFall Ascension

TowerFall Ascension

Evaluări insuficiente
Bending 'till it breaks: Abusing the Workshop Editor
De către Enumex
This guide attempts to show you how to directly edit Workshop Towers and make things that would be impossible to do with the provided editor.

I am writing this as a place to record what map elements do and how they can be abused to make more interesting Versus maps. The main focus of this guide will be on Versus maps as Quest maps require more technical knowledge and Trials maps aren't as popular as the other two due to the nature of speedrunning preferences.

This will read a lot like documentation because it partly is. I just want a place to jot down my notes. I might as well make my findings public to see what others can come up with.
   
Premiază
Adaugă la preferate
Preferat
Elimină din preferate
Prerequisites: About this guide and Some Context
Hello! Thank you for reading this guide!
This is written as a guide on how to make custom content for TowerFall with more features than what TowerFall's level editor is able to provide. While this content is directed at Workshop towers, the information covered might be enough for some resourceful folks to create content for custom Quest, Trials, and modifications to existing Versus towers. A Steam Guide is the best place I can think of for long-form content that can still be found on search engines, so here we are. Information on Discord is limited to it's server, I don't have the tools to make a video on YouTube that I would be happy with, Xitter is not for long-form content, and after Reddit's API changes, I am not using Reddit. There's no other social media that I can think of to post this in.

This guide is written as if it were "escalating in difficulty". The earlier segments will cover common information as if the reader were to just have bought TowerFall. As the guide progresses, I will cover more detailed information. I do this for completion because there are aspects and operations that are not very commonly well known. At the end of the guide, there will be documentation for those who wish to edit towers with code. I do not expect everyone to reach the end of the guide. It's not necessary to reach the end of the guide to make good custom content.

As a final note before getting into prerequisites, I will note that I am writing this while using the Linux version of TowerFall. There should be no mechanical differences between the different desktop versions of TowerFall. This could become relevant if there are objects or actions that crash the game exclusively in one version.

SOFTWARE:
The Bare Minimum Needed:
  • TowerFall Ascension [$15 can go on sale]
    Included here for completion
  • TowerFall Dark World [$5 can go on sale]
    The Dark World DLC is needed to access and play custom levels.

Photo Editing Software:
  • Krita [Free]
    I use Krita. Krita is Free and Open Source Software (FOSS) designed for artists to use. Krita does support pixel art and you are able to do a lot. Since Krita is intended for a variety of styles, there might be a lot of UI that you might not find useful.
  • Gnu Image Manipulation Program (GIMP) [Free]
    GIMP is a general FOSS photo editor. There is a bit of a learning curve. If you can't find anything else to edit with that has transparency, then GIMP might get the job done.
  • Aseprite [$20 at the time of writing]
    Aseprite is known as THE pixel art program. It is the only program that I have not used here because I am broke. While a program specifically made for pixel art sounds great, consider if you are going to be regularly using it. If you want to work extensively on custom tilesets, then it might be a good idea.
This might be weird, but I should say this: Paint is not capable enough to make spritesheets for this game. Paint does not support the ability to save an image with transparency and you will be greatly limited on how to customise assets if you use Paint.

Digital Audio Workstations and Audio Editing Software:
  • LMMS [Free]
    I am not a musician, I don't know if LMMS is the best software to create music. The only reason I'm suggesting LMMS is because it is FOSS. That is the only reason I have used LMMS is because it was free, and it is one of the few Digital Audio Workstations I know of.
  • Audacity [Free]
    An audio editor. Useful for quickly editing downloaded songs to fit better as a loop.
  • Ocenaudio [Free]
    An alternative to Audacity. Long story short; Audacity had a little bit of controversy regarding how they handle user data. If you worry about that kind of thing, Ocenaudio is an alternative. It's what I personally use.
  • youtube-dl [Free]
    If you're not afraid of a terminal, then here's an option if you want to download music you can find from YouTube. I will say this: if you want to be squeaky clean, then do some research before downloading a song. A lot of artists have somewhere where you can read their permissions on how others can use their music. I say this because I don't want to anger anyone. Sharing tools to download music without a disclaimer feels wrong.

Code/Text Editor
  • Default Text Editor [Free]
    There's nothing wrong with using the text editor that comes with your Operating System. I use Gedit; which comes with Ubuntu. Although I am willing to bet that people reading this might use Windows, and I find Notepad to be too barebones.
  • Notepad ++ [Free]
    If you want some more tools to help you effectively write code, Notepad ++ is a good option. I used this in school. It's lightweight without being overwhelming.
  • Visual Studio [Free]
    This is a common Integrated Development Environment for those who want to go deep into coding. Usually by those who code as a career. This is probably the code editor I have used the least. It might be a bit cluttered for those who don't know much about coding. So if you have never written a line of code before, I might suggest Notepad ++.
Editor Basics: Navigation
This section is dedicated to the functions of the editor. As some functions can be further expanded upon with the keyboard. I will cover the actions available categorised by the inputs typically done to perform them. If there's any details to cover about these functions, I'll try to put them here.
Quit:
Return to the Workshop menu.
If you have not saved your tower, you will be prompted to save before quitting the editor.

New Tower:
Make and edit a new blank tower.
If you have not saved the tower you are currently editing, you will be prompted to save before editing the new empty tower.

Save the Tower:
Save the tower being currently edited.
If the tower you are currently editing has not been saved to your disk yet, you will be prompted with a file explorer to set how you want to save the current tower to your disk (location and file name).

Open a Tower:
Open a file navigator to open a tower to edit.
TowerFall does not appear to have a check to make sure that you choose a .TOWER file. Be careful as attempting to open a non-.TOWER file crashes the game. You are also prompted here to save your current tower before opening a new one.

Change Layers:
Change what layer to edit.
Depending on the layer currently being edited, some functions change and some operations focus on the current layer.
Holding SHIFT while attempting to change to the Solids or Actors layer will instead toggle the visibility of their contents.

Draw / Place / Select:
Draw while in the Solids, BackGround(BG), and Details layers, and place actors in the Actors layer.
The Solids and BG layers: Draw auto-tiles; tiles which automatically change their arrangement and visuals depending on the context in which they are in (depending on the surrounding tiles). Holding SHIFT will draw a rectangle starting where you clicked and ending where you release the button. Holding Control(CTRL) will fill the area selected.
The Actors layer: You must first select an actor from the tray at the bottom of the screen. Holding SHIFT and clicking on an already placed actor will duplicate the actor. Holding CTRL will duplicate the actor clicked opposite to where the actor selected is; CTRL + clicking an actor on the left will place an actor on the right and vice-versa.
The Details layer: You must first select at least one tile from the tray at the bottom of the screen. Holding and dragging the tray will highlight a rectangle of tiles. When drawing while in the Details layer, the entire area selected will be used to draw. Note that dragging to the right or down while more than one tile is selected will respect the dimensions of the selected region. This is not true when drawing to the left or up. Holding SHIFT will draw a rectangle using the pattern selected. Holding CTRL will instead highlight a rectangle, and proceed to copy the area selected to draw with. You can use this eyedropper function to draw with a pattern using the same tiles in a different arrangement than the tray. If there is a selection on the tray at the bottom, then you can use W, A, S, and D, to move the selection rectangle around the tray up, left, down, and right respectively. I will note that I generally play TowerFall on keyboard, and I have Player 1's movement keys bound to WASD. So there's a chance that these inputs could be a bit different on your setup.

Erase / Remove:
Erase while in the Solids, BG, and Details layers, and erase actors in the Actors layer.
In the Solids and BG layers, tiles are deleted. Holding SHIFT will erase the contents of the rectangle highlighted. Holding CTRL will erase the area selected.
In the Actors layer, all combinations of clicking will erase any actors under the cursor. Exercise caution as this function removes actors very fast. If there are two or more actors overlapping with the cursor, it is very easy to accidentally delete all the actors under the cursor.
SHIFT + right-click in the Details layer will erase a rectangle as if it were the Solids or BG layers.

Clear the current Layer:
Erases all the contents in the layer currently being edited.

Undo:
Undo the last action done.
You can undo up to 30 times straight.

Redo:
Redo any action undone by Undo.
Making any change after Undo will clear the undo buffer from the point at which you decided to make a change (in other words: Redo will not work if you make a change).

Symmetry:
Mirror the left side of the level to the right.
Holding SHIFT will instead mirror the right side of the level to the left.

Shift:
Move the contents of all the layers in the direction specified.
Everything in the Solids, BG, and Details layers will loop around to the opposite side of the level if it were to go out of bounds. Some actors are able to wrap around should they go out of bounds (Normal and Big Treasure Chests, Torches, both Orbs, Icicles, Cracked Walls, Moon Glass, Proximity Blocks, Red and Blue Switch Blocks, Crumble Blocks, and Crumble Walls). The rest of the actors will stay in place if they would go out of bounds.

Change the grid:
Change the appearance of the overlay grid.
Cycles the colour/appearance of the grid in this order: Yellow (starter), cyan, magenta, no grid.

Playtest:
Play on the tower in its current state.

Tower Properties:
Edit the tower's properties.
This is going to be covered in separate section(s).

Change level:
Change the level currently being edited.
Going to the right while already at the last level available will instead create a new empty level if there are less than 24 levels.
Editor Basics: Keyboard shortcuts
As someone who works a lot with digital workstations, I will say that learning some keyboard shortcuts can speed up your workflow. You don't need to learn every shortcut, I would suggest with learning some basic, common actions to start off (such as Undo, Redo, Playtest).
Action:
Shortcut:
Additional Notes:
Quit
Escape(Esc)
Same rules apply if you haven't saved.
New Tower
CTRL + N
Same rules apply if you haven't saved.
Save Tower
CTRL + S
Same rules apply if you don't have the tower on your disk.
Open Tower
CTRL + O
Same rules apply if you haven't saved.
Change Layer
1 or 2 or 3 or 4
The number corresponds to these layers in order: Solids, Actors, BG, Details. SHIFT can be held to toggle visibility on the Solids and Actors layers.
Clear the Layer
DELETE
-
Undo
CTRL + Z
-
Redo
CTRL + Y
CTRL + SHIFT + Z does not work like some other programs.
Symmetry
CTRL + F
CTRL + SHIFT + F also works to flip the direction.
Shift the level
CTRL + any arrow key
-
Change Grid
G
-
Playtest
Space Bar
This shortcut also works while playtesting the level. (Kinda oof for me, because I use the Space Bar to dash...)
Change Level
Left/Right arrow keys, or "[" and "]"
The arrows keys only work in the editor. The block brackets will also work while playtesting a level.
Editor Basics: Tower Properties (1)
On the sidebar, you can click on the tower's name to edit the tower properties. The tower properties is responsible for managing the behaviour of some items, aesthetics, and giving context to the tower. It is also where you manage any assets and even perform some more basic actions.

This section will be dedicated to further exploring each tab in the tower properties.

Tower:
Title
The tower's name; what is displayed in the tower selection screen.
All characters in the name are forced into uppercase as TowerFall's font uses some lowercase characters for other purposes.
A name can contain alphanumeric characters ( A-Z 0-9 ), punctuation ( . , ? ! ( ) ), plus, minus/hyphen, greater than, less than, space, and underscore ( + - > < _ ). The actual character count of the name is irrelevant as TowerFall uses the total width of the title as a limit. Here, you can input a name consisting of up to 46 periods, while a name using only "M" can be up to 20 characters.

Author
The creator(s) of the tower; you put your name here.
The text field follows the same rules as the Title, with the only difference being the size of the text field. The maximum character limit is 60 periods, or 25 "M"s.

Dark World
A checkbox to signal if the tower resides in the Dark World.
If checked then lava, hot coals, fire from all torches with fire, and explosions are coloured green and lime instead of the typical red and orange. The map pointer in the tower selection screen will open a portal to the Dark World over the selected location.

Cold
A checkbox to determine if the tower is in a cold biome.
I am unable to find any notable use of this option. The most notable part of this is that when true, archers who are living will periodically breathe out visibly with fog.

Light
A slider to adjust the intensity of ambient lighting in the tower.
Ambient lightning can be described as the minimum amount of light on the level. Setting the light level to lower values on the left of the slider means that the map is darker where there are no light sources. Setting the slider to the maximum value will not render torches useless as they still emit a small amount of glow.

Pictured: The thumbnail shown for every light option available.
Ambient lighting is uniform across the entire map regardless of the layout in the Solids and Background layers. Covering the entire Background layer with solid walls will not reduce the lighting on the stage.

Lanterns
A selector for the style of lanterns in the tower.
Pressing this option will cycle through the lanterns in this order: Sacred Ground, Twilight Spire, Backfire, Flight, Moonstone. Selecting while at the end of the list will cycle to the top.

Pictured: All the available lanterns in order. The top row is for the normal world and the bottom row is if the Dark World option is checked.
All lanterns are functionally identical with the exceptions of the Moonstone lanterns. The blue lanterns cannot be extinguished by dashing past them and cannot be used to start a fire by firing an arrow through them. The light they emit is dimmer and coloured blue, which is less effective to illuminate with.

Levels:
This is a general view of 24 levels in the tower.
The Solid layer in the level is black, and the background layer is a darkening to the thumbnail of the level. Note that any tiles in the Details layer and any actor will not appear here.
In this menu, selecting a level will enable the buttons on the bottom of the screen. A level can be moved in the order. There is no functional purpose to the order of levels in the tower. The order of towers is mostly for organisational purposes. A selected level can be duplicated, copying all the content in all four layers to a new level if there are less than the maximum (24) amount of levels. A selected level can be deleted too. Exercise caution as there is no prompt to confirm deletion of a level.

Treasure:
Here you can adjust the balance of the treasures obtainable from chests.
At the top of the screen there is a bar to visually show the item distribution. All the items are divided into two categories: arrows (the top two rows), and other (the bottom two rows). If there is at least one item in both categories that is enabled, then there will be an arrow to show the divide between the two categories. You can click and drag the arrow to adjust the ratio of arrow to other items. The bar is divided into 20 segments. As long as there is one item enabled in each category, then the arrow cannot be set to either extreme. Right-clicking on any item on the bar will set that item's weight to zero; removing it from the pool.
All items have a weight represented with green squares. The editor can assign weights ranging from 0 to 4 points; a weight of 0 disables the item from appearing in chests. Left-clicking an item will add one point of weight while right-clicking will remove one point of weight. Trying to add/remove points beyond the range of allowed weight values will result in a loop around to the highest/lowest value.
Note that despite all items being able to be assigned a weight from 0 to 4, some items have naturally lower weights.
Items:
Relative Value:
All Arrows:
1.0
Shields, Wings, Speed Boots
1.0
Magic Mirror
0.5
Time Orb, Darkness Orb, Lava Orb, Chaos Orb
0.3
Trap Chest
0.2
This table was made by observing the bar, estimating the ratio using the notches at the top, and using some math to get an estimated value. Using this table, you can see that 1 point on Shield, 2 points on Time Orb, and 2 points on Trap Chest means that shields would appear from %50 of all chests.
At the bottom of the screen, there is a list of the towers in the game. Selecting a tower will copy that tower's treasure pool.
Editor Basics: Tower Properties (2)
Background:
Configure the tower's background.
You are able to copy the background from any existing tower in the game. This copies the ambience and animations from the environment. Here's a list of effects that accompany each background which render on top of the game, and sound effects (sfx).

Sacred Ground Clouds obscure the left and right of the screen, waving laterally. Occasionally, lightning will make the entire background flash white with thunder sfx.
Thornwood Subtle fog waves laterally throughout the entire screen.
Frostfang Keep Clouds wave laterally over everything. A separate layer of snow particles slowly rises too.
King's Court Clouds wave laterally over everything.
Sunken City A water texture waves vertically over all of the screen. This texture will slightly tint the screen a teal colour.
Towerforge A "cloudy" texture waves very subtly vertically over everything. While the texture itself is very difficult to notice, the texture will tint the screen a red/orange colour.
Ascension Rain falls over everything. Beams of light shine from the top. Lightning flashes the background white with sfx. Very subtle clouds wave laterally over everything.
Gauntlet Lightning makes the background flash white with sfx.
The Amaranth Rain falls over everything. A wave may crash into the background with sfx.
Dreadwood Clouds wave laterally over everything.
Darkfang Subtle clouds wave laterally over everything on the whole screen. Two separate fog layers slowly scroll to the right.
Cataclysm When lightning strikes in the background, sfx accompanies.

At the bottom of the Background tab, you are given the option to use a custom background. You can export the currently used background to disk, or you can import an image to use as the background.
Despite the sample background (pictured) being 360 pixels by 280 pixels (360x280px), you need a minimum of 320x240px. The sample background even goes as far as highlighting the center 320x240px with a red rectangle. In general gameplay, any portion outside of this red rectangle is not visible. You should consider that screenshaking and wave effects may reveal a little beyond the edge. If it weren't for the file size limit (200KB), then you could hypothetically upload an image of any size. The image will be centred. Any part outside the bounds of the image will show up completely black in-game and white in the editor.
You can import PNG, JPEG, and GIF files whenever an image is needed. Despite PNG files supporting transparency, the background will render any partial transparency as fully opaque and any full transparency as if it were out of bounds. JPEG files are prone to compression, making the image quality poor. GIF files do not animate. The first frame is the only visible part of the GIF. I have not tested every file type. Most of the software I mentioned in the prefix is able to export to these formats.

Aside from setting the image to use as the background, you can choose to apply some effects to give the background more life.
Rain: Rain falls down and slightly to the right.
Wind: A nebulous texture scrolls quickly to the right.
Fog: The same texture as Wind scrolls much slower to the right.
Wave: The background image waves laterally. On the sides you can see a little outside the normally visible area.
Water: A water texture waves vertically over everything. The only effect here to render over the fight. May tint the game teal/blue
Snow: Snow falls in the same direction as Rain, at a much slow rate.

Solid Tiles:
Select the appearance of tiles in the Solid layer.
You can opt to copy the assets from an existing tower. Do note that you can see through the preview that the existing spritesheets don't all have the same amount of tiles. Some towers give some tile formations more attention. Such as Flight having little fully enclosed tiles because of the open nature of that tower.

If you are using custom assets, you are subject to most of the image rules applying to background images: file size limit (50KB), PNG/JPEG/GIF file type, GIFs will not animate. The only difference in the properties of the image is the restriction on transparency. For Solid and BG tiles, partial/full transparency is allowed.

As for the contents of the image itself, the tiles on the spreadsheet need to be arranged in a specific way. If you export the solid tileset without importing one first you will get an image which shows how tiles should be arranged by default.
On the left is the sample spritesheet exported from a new tower. Since it may be a little difficult to read the arrangement of sprites in some areas, the image on the right serves to show the arrangement of the tiles. While the spritesheet layout can be modified, that requires editing the TOWER file directly which will be covered later, I promise.

This is the only time this happens, but different tiles with the same orientation do not all have the same probability of appearing. For the fully enclosed tiles, the top left sprite (the only one at the top without a darker square inside it) is much more likely to be used than the other 7 "fully enclosed" sprites. 10/17 or ~%58.82 of tiles will use that first fully enclosed sprite. The rest of the block orientation have the same odds of being used in their respective groupings.

BG Tiles:
Select the appearance of BG tiles in the BG layer.
You can copy the assets from an existing tower. The amount of sprites per orientation appears to be equal between different tilesets. The only tileset I will point out is Ascension. Nearly all the sprites in that spritesheet are partially transparent and will allow you to partially see the background through them. While there are other towers which have transparent BG tiles, Ascension makes extensive use of it.

If you want to use a custom spritesheet, you will also be subject to limitations regarding the arrangement of the spritesheet. Exporting the sample BG tileset will show an interesting feature.
There are notably fewer variations of each tile orientation. A lot of the space is instead reserved for decorations which are normally inaccessible in the BG layer (marked on the right image with red "X"s). Rather, these sprites are meant to be accessed by using the Details layer. When making your own content, don't stress out too much about making everything fit nicely. As long as you have 41 or less 10 by 10 pixel tiles combined from all the background props. If you have less than 42 sprites, then feel free to cut a larger object into individual tiles and moving them around. Oh yeah, I should have mentioned that tiles in the Solids and BG layers are 10x10px.

The image should use the same properties as the Solids spritesheet. PNG/JPEG/GIF, a file size limit of 50 KB, and transparency allowed.

Music:
Select the background music that plays during a game.
You can select to use the music from any existing tower in the game. At the bottom you can opt to use custom music. A file can be up to 50 MB. I have only been able to successfully import WAV files.
On the top, the currently selected background music is shown along with an option to preview the song. I will note that when previewed, the music will continue to play until you press the button again to stop the preview. Use this to change the editor's music if you get bored of the default! :)
Editor Basics: Tower Properties (3)
Variants:
Set a game mode to suggest to the players.
I say suggest with some emphasis because the players are under no obligation to play with the rules set out here. This means that if you make a map that absolutely depends on a specific ruleset, there's a chance that the players opt not to play with the ruleset you suggest and break the idea you make. The game mode cannot be be separated from the variants you set; it's accept everything or nothing.

At the top you set the game mode. If it's set to ANY, then no game mode will be suggested to the players. The other available game modes are HEADHUNTERS, LAST MAN STANDING, and TEAM DEATHMATCH. Do note that to set the game mode to TEAM DEATHMATCH, you should probably have at least one level eligible for Team Deathmatch with enough Team Spawns.

Most variants available in Versus mode are available here. The only variants excluded are all the variants under the POWERUPS category except for Arrow Shuffle. Like Versus mode, there are certain combinations of variants that are not allowed. In the following table, every cell can have only one variant active at a time.
No Autobalance, Weak Autobalance
No Time Limit, Sudden Death
No Treasure, Max Treasure, Always Big Treasure, Bottomless Treasure, Bomb Chests
No Treasure, Max Treasure, Treasure Draft
No Arrows, Single Arrow, Max Arrows
"Start with" Bomb Arrows, "" Laser Arrows, "" Bramble Arrows, "" Drill Arrows, "" Bolt Arrows, "" Super Bomb Arrows, "" Feather Arrows, "" Trigger Arrows, "" Prism Arrows, "" Random Arrows, "" Toy Arrows
No Seeking Arrows, Super Seeking Arrows
Secret Arrows, Start Invisible
Exploding Corpses, Trigger Corpses
Trigger Corpses, Return as Ghosts
Small Quivers, No Quivers
No Dodging, Super Dodging
No Dodging, Clumsy Archers
No Dodging, Show Dodge Cooldown
No Dodging, Cursed Dodges
No Slipping, Slippery Floors
Always Scrolling, Offset World
In this table, I wrote Always Scrolling in italics because I wouldn't suggest using this variant. Whenever I try to use this variant by the tower's suggested game mode, it doesn't work. I have to turn on this variant through the Versus menu.
I will not describe the effect of each variant here, as I feel I've already digressed enough. If you want to do some further reading, here is a link to a TowerFall wiki article on variants (don't worry, it's not Fandom)[towerfall.wikidot.com].

Icon:
Draw the icon used to represent your tower in the tower selection screen.
You are given a 16 by 16 pixel grid to draw your tower's icon on. Left-clicking will draw on the canvas, right-click will erase on the canvas. Most functions available when drawing tiles on the Solids layer are available here; SHIFT + click will draw/erase a rectangle, and CTRL + click will fill/erase the selected area.

The "?" button will copy the icon from an existing tile to the canvas. The icon copied cycles through the existing towers, looping back to the first one when at the last one. The button with the rectangle will clear the canvas. There are also buttons to undo and redo the last changes to the canvas. You can undo up to 50 actions, as well as being able to undo clearing the canvas, or copying an existing tower's icon (although if you then press the "?" button again, the next tower in the cycle will not be undone). You can use CTRL + Z and CTRL + Y to undo and redo respectively. DELETE does not clear the canvas.



To the right, there are five tiles you can display your art on. The light grey and brown tiles draw the icon in black with shading as if it were carved. The light blue and purple ones draw the icon in black with shadows behind it. The black tile will draw the icon in white with a very subtle shadow behind it.

Map:
Select where in the world of Towerfall your tower resides.
In the tower selection screen, Twilight Spire, Sunken City, Towerforge, Ascension, and all the Dark World levels have custom animations when hovered over. Your custom tower is unable to use these animations. If Dark World is true in the Tower tab, then a portal with a transparent center will be used as the center of the selection.
Beginning to Break the Game: Accessing the Game Files
The rest of the guide will start to get into more technical areas. So if you feel overwhelmed by all that follows, don't stress out about it. I recognize that this as a tutorial is a bit barebones and may be hard to understand. I'm also treating this as a documentation of sorts, a place where I can store info on what can be done and how.

To start with breaking the game, you have to know where the game's directory is. If you purchased the game through Itch.io or Good Old Games then I believe that you get to select where the game files are stored on your computer. The folder where the game's executable (.EXE) is stored is what I will refer to as GameRoot/.
Steam likes to put their folders a bit deeper in the computer. Since Towerfall is available in multiple operating systems I'm going to show you how to get to the Game Root through Steam. Also just to make it easier.

  1. In the list of games you own, find and right click on Towerfall.
  2. In the drop down menu, select "Properties...".
  3. A window with options will appear. In this new window, look for a tab for "Installed Files".
  4. Under "Installed Files", you should see the option to "Browse..." the local files. Selecting this option will open your file manager to the Game Root.
    I'll take the opportunity of this screenshot here and point out the "Verify integrity of game files" button here. If you ever feel like modifying game files and mess around, you can press this button and it will restore the game's files to a functioning state. Do note that your custom towers are exempt from this check. So keep backups of your own files if you want to rewind any major mistakes.

Once you have opened the Game Root, your custom towers are stored in GameRoot/Workshop . Towerfall will exclusively search this directory when it looks for custom towers in the Versus tower selection. That means that if you were to make a folder in this directory, then the Versus tower selection would exclude anything within this new folder. In fact, TowerFall comes with all non-Dark World levels stored as TOWER files for you to reference and edit if you want. They're under GameRoot/Workshop/Examples/. I generally make a folder inside GameRoot/Workshop/ to store small segments of the towers I make for testing purposes and as backups.

Now that we're inside the game files, I will point out some interesting directories.
GameRoot/Content/Levels/ or GameRoot/DarkWorldContent/Levels/
Inside these directories are all the levels in the game sorted by game mode and stored as OEL files. Don't be shy, OEL files won't bite. I open these up with my text editor to reference. OEL files are surprisingly similar to TOWER files. I particularly observe where the actors are stored. As internally, OEL files and TOWER files both use the same name for the actors. This is a good place to reference content if you want to experiment.
Beginning to Break the Game: Warnings and Precautions
I'm dedicating this section for some precautions; some things to do to prevent headaches in the future.

First of all, make backups. Now that I taught you how to access the game's files, and in extension, the files for your custom maps, you should be able to copy and paste these files somewhere else. As I said, when TowerFall looks towers in Versus mode, it will look exactly in the directory GameRoot/Workshop. Any files stored inside of a folder inside this directory will not count. Using this information, it is quite easy to make a new folder inside GameRoot/Workshop to store backups and other relevant data. I have the directory GameRoot/Workshop/Segments for towers with few levels for testing.

On the topic of segments, I generally like to export a single level from a tower to a "testing" tower. As Versus mode randomly picks a level, copy and pasting an individual level from a tower should make playtesting much more bearable.

This might be a bit out of place, but here's what I do.
  1. Create a new tower without editing anything.
  2. In a text editor, open the newly created tower and the tower containing the level which you want to segment.
  3. If you look through the data of the tower, you will find a line that says "<levels>". If you can't find it or have custom data which you don't want to scroll for, press CTRL + F to look for a string of text and type in "<levels>".
  4. After that line, you should find data structures that look similar to the level you created. If you translate some of the zeroes as blank space and ones as tiles, then the solids layer should be visible. These are generally found contained within tags that look like this: "<level ffa="#" teams="True">". Copy everything from the level you want to copy, starting at <level ffa="#" teams="True"> to </level>
  5. Take the data you just copied and paste it in the new tower, between the <levels> and </levels> tags.
  6. You have successfully manually transferred a level to an independent tower. Bonus points if you deleted the formerly empty level or paste over it.
Beginning to Break the Game: Workflow and Resources
The basics of reading tower data:
TOWER files resemble XML. I have no way to confirm if it actually is XML. I have not used XML in any projects before this. The closest I've done was HTML. For those who have done XML, I might be speaking in cringe, but I'm doing my best here. I'm going to try and give the bare minimum on how to read TOWER files. This guide is merely a start, I recommend experimentation to get experience.

XML is a format to store various types of data into one file. Data is stored through various types of tags. Tags are easily identified as they are enclosed with greater than and less than symbols; a.k.a.: < and >. While a <tag> can commonly be found as only the one word, a tag can have parameters embedded in it. For example, if I wanted to place a mushroom then I would write <MushroomEd>. But that's about as effective as saying "there's a mushroom". We at least want to specify where the mushroom is. So I would have to write <MushroomEd x="120" y="80">.

Except that I was simplifying how a tag looks like. For our purposes, there are two types of tags. What I call objects tags, and data tags.
Object tags represent an object with no more information other than whatever parameters may be needed. As a proper example of an object tag:
<MushroomEd x="120" y="80" />
Note the backslash at the end of the tag and the formatting. You need the "double quotations" around the parameters, even if they're numbers. There can only be spaces between parameters, so <MushroomEd x = 120 y = 80 /> would be wrong for two different reasons. I put spaces between the x and the equal sign and the equal sign and the number, and the number is not encased in double quotation marks.

Data tags are used for things that contain abstract information. Data tags come in pairs, with an opening <tag> and a closing </tag>. The information is stored in between the two tags. The moving blocks both store a node object to indicate where they move to. So a moving block would look like:
<MovingPlatform x="0" y="0" width="20" height="20"> <node x="300" y="220" /> </MovingPlatform>
Note the object tag inside the data tag. The information inside of the data tag doesn't need to be another tag. The tower's name is stored in plain text: <title>Tower Name Here</title>.

Particularly astute readers might have noticed that object tags have a slash at the end of tag <tag/>, while data tags have the slash at the start of the closing tag <tag></tag>.

Where to reference:
If you were to look into the directories I showcased in Accessing the Game's Files (GameRoot/Content/Levels and GameRoot/DarkWorldContent/Levels), you can look directly at the OEL files. While the format of the tower is different than a TOWER file, a lot of the data itself is similar. Both TOWER files and OEL files use the <BG> data tag to store the arrangement of the BG tiles. If you look even at the first level, you will notice that under <Entities> or what we've called actors, a lot of actors that we've already seen have parameters that you would otherwise not see. You will also see some actors which are inaccessible through the editor. I will not cover these at the moment as they generally don't behave well with the editor. We'll talk about them later.
If you want something to study on how to start breaking the game, referencing these towers gives some good information to apply to your towers.

How I work to change data easily:
It's possible to have the tower open in the game's editor and in a text editor. While I generally have a tower open on both ends, I never try to edit on both at the same time. It's not generally good practice as when you save on one end it will get overwritten when you save on the other end.

Besides, that's not how I work on towers. I use the in-game editor to make the structure of the tower and place everything how I want. I think I've said before that the in-game editor is still a good tool to edit towers. Anything visual is much easier to work with in the editor. Solid Tiles, BG Tiles, Details. If there are actors that can be placed through the editor, I still prefer to place them in the editor. Even for actors normally inaccessible through the editor, I place a substitute actor. Through the text editor, I can change some data to transform one actor into another. Even if the new actor has some parameters like width and height, I can use a similar actor to substitute it with.

I don't generally like to make new actors from code. The only time I do that is when I would like to place more actors than what the in-game editor allows me to. Even then, I copy and paste the code from an already existing actor. I edit the position of an actor only when I want to do something like place an actor outside the typical boundaries of the screen.
The Deep End: Position and Units
Every object represents its position in the game with two number values. An "x" value and a "y" value. For those who haven't taken high school geometry before, x is a general name used to represent the horizontal position of an object, while y is used to represent the vertical position of an object. It is conventional in mathematics that the y-axis uses positive values to represent positions above the origin (where both x and y equal zero). Towerfall for some reason has the origin at the top-left of the screen and positive y values go below the origin. Here's an image which represents the coordinate space of Towerfall.

You can download this image, and import it into a custom tower to measure things. As you can see, every tile in the game is 10 units by 10 units.

Oh yeah, units. I should explain it. One in-game unit is equal to one pixel. That's it. If you import the above grid image into the game, then one pixel of the image is one unit. Units aren't that necessary to know if you don't want to get into editing a tower through a text editor, but it's a very good idea to get a feeling for units if you want to edit things as most objects use units as measurement.

All this said, you can see by the image that a level is 320 units horizontally and 240 units vertically. While mostly everything tries to stay within the bounds of these numbers, there's nothing preventing you from using larger numbers, decimal numbers, or even negative numbers. For some parameters, such as the length of some objects you can't have this freedom. In general, I avoid putting objects outside of the play area as they would have no use, or may crash the game depending on the object. If you want to do it, go ahead. But as I have warned, make backups in case your last change crashes the game.
The Deep End: Tile and BG Tile Asset Reading
Back in Editor Basics: Tower Properties(2), I promised I would cover how to gain control over custom tile assets. Before I fulfil this, I have to cover how Towerfall reads a sprite sheet to convert it into something that the game can manipulate.

In the tower's data, there's a segment where every arrangement of tiles is provided a list of tile IDs. Whenever a tile needs a sprite, it will go to the data that matches its arrangement (the arrangement is the context of the tile based on the tiles around this tile). An arrangement in the data can have more than one ID assigned to it. When this happens, Towerfall will pick a random ID from that arrangement list and use the sprite assigned to it.

The way the game divides a sprite sheet into individual sprites with IDs is simple. Start at the very top-left of the image, with ID zero (0). Create a 10px by 10px area aligning with the corner that will read the part of the image highlighted and convert it to a sprite with an ID. After that follow this sequence:
  • Scan the 10px by 10px area highlighted.
  • Does any part of the highlighted area go outside the bounds of the image?
  • > If yes, align the highlighted area to the left of the image and move it 10px down.
  • > If no, save the highlighted part of the image with the current ID as a sprite. Prepare to use the next ID, and move the highlighted area 10px to the right.
  • If the highlighted area was moved down to read a new row, does the new position go outside the bounds of the image?
  • > If yes, stop reading. There are no more tiles to read from the sprite sheet.
  • > If no, go back to the top of this list and continue from there.

This might be a little weird to some, so I'll make an example here. Let's use this spritesheet:

In the image above, the borders of each sprite is faintly highlighted to keep the image white. Any black area represents a portion outside the bounds of the image. With this sprite sheet, let's use this data:
<autotiling> <Center>0,0,0,1</Center> <Top>2</Top> <Bottom>2</Bottom> <Right>3</Right> <Left>3</Left> <TopLeft>4</TopLeft> <TopRight>4</TopRight> <BottomLeft>4</BottomLeft> <BottomRight>4</BottomRight> <InsideTopLeft>4</InsideTopLeft> <InsideTopRight>4</InsideTopRight> <InsideBottomLeft>4</InsideBottomLeft> <InsideBottomRight>4</InsideBottomRight> <Single>4</Single> <SingleHorizontalLeft>5</SingleHorizontalLeft> <SingleHorizontalCenter>6</SingleHorizontalCenter> <SingleHorizontalRight>5</SingleHorizontalRight> <SingleVerticalTop>7</SingleVerticalTop> <SingleVerticalCenter>8</SingleVerticalCenter> <SingleVerticalBottom>7</SingleVerticalBottom> </autotiling>
There are two things of note here. The fully surrounded tile has four entries, three of which are the same tile. Remember: when there is a list of IDs in one arrangement, one ID from the list is picked at random. This data means that for every fully surrounded tile, there is a %25 chance that the sprite used is a different one (this is why I know that by default the top-left tile is used half the time). We also use IDs in more than one arrangement. This is valid. I wouldn't recommend it because then it can look like you're reusing content which might be seen as cheap. I'm doing it here to make this compact.

I will grab the above sprite sheet and highlight it with colours to represent an area which is scanned.

As I said, we start at the top-left. Red is assigned ID 0, orange is assigned ID 1, yellow is assigned ID 2, lime is assigned ID 3. We get to green and see that the area scanned would go out of bounds, so we start back to the left and go down one row. Teal is assigned ID 4, cyan is assigned ID 5, blue is assigned ID 6, indigo is assigned ID 7. We get to purple and the area scanned is outside the bounds of the image. As we go one row down to the red-checkered square, we see that after moving to a new row we are still out of bounds. So we stop reading.

In reality, I'm over simplifying this. Instead of reading then assigning IDs, it appears to do it in the opposite order based on my experience of crashing the game to test it. I'm presenting it in this manner to hopefully show you how not to cause a game crash. Because if you notice, the data uses ID 8. But in the sample case I gave, I never "assigned" an ID of 8. So what happens? Towerfall says "Oh ♥♥♥♥!" and proceeds to crash if any tile in the middle of a thin vertical column has to be renderd.

All in all, you are able to change how many tile variations there are, as well as their distribution if you want more than one variant. You could hypothetically get away with a 10px by 10px image if you change all arrangements to use the "0th" tile. But you're here to make better towers. As I said, don't be afraid to crash the game. As long as the sprite sheet is "less than 50KB", you're free to arrange it however you want with this info.
The Anatomy of a TOWER: Preamble
The following sections will cover the contents of a .TOWER file. A lot of this information can also be applied to .OEL files which are used to store the data of typical towers like the ones found in Quest and Trials.

As a reminder under "Beginning to Break the Game: Workflow and Resources" I gave a brief summary on how to read the tags of a tower's data. I will write the tags as they appear to show if they are a data tag or an object tag.

I will also advise, this is probably best read if you open up a .TOWER file and read along. Mostly to see how exactly the data is formatted as an example.
The Anatomy of a TOWER: Basic Tags
<tower></tower>
I'm including this for completion. All of the tower's data is contained inside this tag couple. There isn't much to gloss over here as everything of interest is contained inside of this tag couple.
<title></title> and <author></author>
I group both of these because they are very similar. The <title> tag couple store the tower's name while the <author> tag couple store your name. As a general rule of thumb, keep text in uppercase. Towerfall uses the Archer font (Download Link from Discord)[cdn.discordapp.com]. If you don't want to download the font and experiment, I'll just say it here. The font is best used with uppercase letters. Uppercase and lowercase are exactly identical with the exception of "i" and "x". "i" is converted into "∞" for some reason and "x" is written much smaller. In my experience of tinkering with this font, there are times where Towerfall does not properly display characters with finer details and ends up making weird looking characters.
Writing text here is not subject to Towerfall's limitation on length. If you have a name for your tower that does not fit within the text field the in-game editor provides, then you are free to manually write your name here. It is not intended to have an overly long name for your tower, so the tower selection screen has no way to handle text if it becomes long enough to bleed beyond the left and right extremes of the tower.
<icon></icon>
Inside of this tag couple, there are two tags which make up the icon to represent your tower among others in the tower selection screen.

<data></data>
Between this tag couple, your icon is stored using ones. You expected zeroes. From my experiments, you could hypothetically substitute zero with any character. I wouldn't recommend it. There's no reason to replace any of the 256 characters with anything other than one or zero. In fact, I don't see any reason to edit the icon from here. I can't modify the data to do anything out of the ordinary. Additional characters do not draw any more, and removing data leads the game to crash.

<tile></tile>
There are five values for this:
Normal
Secret
Ascension
Dark
Cataclysm
Manually writing any other value here causes the game to crash. Again, I don't see much reason to edit this here.
<map/>
This is where in the world of TowerFall the tower resides. In the tower selection screen, the area is highlighted when your tower is hovered over. While the camera follows the arrow around, the camera will stay within the bounds of the map if the arrow were to go out of bounds. The editor allows you to place the arrow anywhere between (35, 60) and (445, 450). You can edit the tower's file to change the x and y coordinates to be out of bounds with numbers outside of these ranges.
<players/>
This tag serves to indicate the game on what the limitation of players are of this tower. The 'ffa' parameter indicates the maximum amount of players that can fight on a tower in a free-for-all fight (Deathmatch and Head Hunters), while the 'teams' parameter simply indicates if there is a level with the appropriate spawns for a Team Deathmatch. These two parameters don't have to be set by the same level in the tower. It is mostly a check generated when saving the tower to avoid having to search the entire tower to see if it can be played on with the current amount of players.
And it should stay that way. Trying to manually change this value to fight on it with a surplus of players will crash the game. This is why I generally edit as much as I can using the in-game editor before editing details outside the game. I'd rather get the machine to do this kind of thing for me if I can.
The Anatomy of a TOWER: Properties Tags
<mode></mode>
Under the "variants" tab of the tower parameters, you can set a game mode to suggest to the player. Here is where it's stored. The allowed values in between the tag couple are:
Any
HeadHunters
LastManStanding
TeamDeathmatch
Values outside of this table will crash the game.
<variants></variants>
This is where the actual variants are stored. Variants are stored by their name separated with commas. This area is weird because each variant is written out the same way they are written when you hover over them. All in uppercase with spaces included.
Trying to manually enter two incompatible variants does not work. When selecting the tower in Versus mode, Towerfall will manually filter out incompatible variants and present you a valid arrangement.
<darkWorldDLC></darkWorldDLC>
Imma keep it real with y'all. I have no idea what this does. I have only seen this be set to 'True' or 'False'. I tried changing it and have noticed no changes. I don't even know why this is an option, you need the DLC to access the tower editor. If anyone has any clue what this does, feel free to put it in the comments.
<world></world>
The acceptable values are 'Normal' and 'Dark'. Normal indicates that the tower resides in the normal world while Dark indicates that it takes place in the dark world.
<treasure></treasure>
This tag is interesting because there is a parameter in a data tag. The parameter arrows is used to determine the frequency of arrows if there are arrows and other items selected. This number typically ranges from 0.05 and 0.95, but it can be manually adjusted to be outside these values. I don't see use in setting it outside of these values as then chests will exclude treasures with no discernible pattern. I didn't test this too much as I don't find much reason to go outside these values. But you can at least set it to values that are not steps of 0.05.

Inside the tag couple are the points assigned to each treasure laid out as a sequence of numbers. The order of the numbers is important as the position of the numbers are assigned to treasures. Starting from the left going to the right, here is the order of the treasures:
  1. Extra Arrows
  2. Bomb Arrows
  3. Super Bomb Arrows
  4. Laser Arrows
  5. Bramble Arrows
  6. Drill Arrows
  7. Bolt Arrows
  8. Feather Arrows
  9. Trigger Arrows
  10. Prism Arrows
  11. Shield
  12. Wings
  13. Speed Boots
  14. Magic Mirror
  15. Time Orb
  16. Dark Orb
  17. Lava Orb
  18. Space Orb
  19. Unknown
  20. Bomb Trap
There are 19 items in the treasures screen, but 20 entries in the list. I have no clue what the 19th entry belongs to, I can only speculate. Manually setting all entries but the 19th to zero results in a bomb trap. This doesn't mean that the 19th entry is also a bomb trap, because if I set all the entries to zero a bomb trap still appears.
I will also note that the editor can assign up to four points to a treasure. We can assign up to nine manually. It works as one would expect. Do note that treasures still have a natural weight multiplier in terms of actually being selected.
<tileset></tileset>, <bgtileset></bgtileset>, <background></background>, and <music></music>
It's a long list but that's because I want to cover these more in detail in an independent segment. Besides, these share the same* values. <tileset>, <background>, and <music> share the same values, while <bgtileset> just appends 'BG' at the end if it's not 'Custom' (so 'Flight' goes to 'FlightBG'):
SacredGround
TwilightSpire
Backfire
Flight
Mirage
Thornwood
FrostfangKeep
KingsCourt
SunkenCity
Moonstone
TowerForge
Ascension
Gauntlet
TheAmaranth
Dreadwood
Darkfang
Cataclysm
Anything outside of this table will crash the game.
<lanterns></lanterns>
The type of lanterns placed by the editor. The values allowed here appear in the same order as they are in the editor when scrolling through them:
CathedralTorch
DarkHallsTorch
CavesTorch
DayMountainTorch
MoonstoneCrystal
<darkOpacity></darkOpacity>
This one is fun. This little number controls the ambient lighting of your tower. The editor usually allows you to set this number from 0.1 to 0.4, where 0.4 is the darkest value. So the first question on your mind might be: "What does 1.0 look like?" It looks like the darkness orb. In fact, you can set darkOpacity to a value higher than one and have it be even darker. If you do this and pick up a darkness orb, then the stage will actually get brighter for the duration of the darkness orb.
If we set this value to zero (0.0), then we remove the ambient shadows. I will note from some brief testing, that coloured light sources appear to not radiate colour without shadows. It might have to do with the intensity of the light source.
Ok, but lets take this one step further. Do negative numbers work? YES. They do work. They "shade" the screen with white instead of black. -1 does almost the same thing as 1.0, but obscuring the screen with white. I say almost the same thing because there are some quirks of this. Sources of light which emit colour will instead radiate the inverse colour. So the moonstone lanterns will radiate a red aura when dispelling the white, and the darkness orbs emit a lime light instead of purple. Furthermore positive darkness values will shade actors, solid tiles, and background tiles, leaving the background unchanged. Negative darkness values will obscure the ENTIRE screen. This may ruin some aesthetics.
<cold></cold>
A 'True' or 'False' if the tower is in a cold region.
<levels></levels>
Here is where all the tower's levels are stored with <level></level> tag couples. I cover this topic in further detail in The Anatomy of a Level.
A tower file doesn't actually have written anywhere how many levels there are. Pasting a level here is surprisingly easy. Especially since Towerfall doesn't do any checks to see if a tower has a valid amount of levels. This means that you can have more than 24 levels if you manually insert them here. I have once made a 72 level tower.
The Anatomy of a TOWER: Custom Data Tags
When you use a custom asset for solid tiles, BG tiles, backgrounds, or music, all the data is stored in the same file. The game internally sets <tileset></tileset>, <bgtileset></bgtileset>, <background></background>, <music></music> to 'Custom'. <bgtileset></bgtileset> doesn't add 'BG' as a suffix. After the <cold></cold> tag additional tags are used to contain the data of the custom assets. Each type of asset has its own tag to contain the relevant asset and any modifiers applied through the properties of the tower.
<customtileset></customtileset> and <custombgtileset></custombgtileset>
The actual image is stored inside the <data></data> tag couple. As you can see, it looks like gibberish. If this data doesn't make a proper file, the game will crash. Unfortunately, I have no idea what algorithm the game uses to convert data from files to text. If I did, I would try to find a way to create this text manually to bypass limitations. If you were to manually insert an image converted to text here, you can import an image larger than the 50KB that Towerfall allows you to. You can actually "import" an image up to 200KB yourself here. Import the sprite sheet you want as a background, save, copy the text in the section for the background, and paste it here. It does work.

After the image we have <autotiling></autotiling>. This is where you tell the game where to find each arrangement of tiles in the spritesheet. I covered how Towerfall reads an image to convert to "ID"s in The Deep End. Most of the names here are self-explanatory. The only one I had trouble with initially was the "single" ones, but it helps if you mentally think of "single" as "one tile wide/tall".
<custombg></custombg>
The image is stored in the <data></data> tag couple. As previously said, Towerfall allows up to 200KB imported through the editor. This means that you can use this area as a way to convert any image up to 200KB to text for use elsewhere. Such as a custom tileset or BG tileset.

Right after the data tag there are six more tag couples. All six of these simply contain a 'True' or 'False' to indicate if the listed effect is applied to the background. I have already covered the details of each effect in Editor Basics: Tower Properties (2); I will not go over them again.
<custommusic></custommusic>
The music is stored here directly. There is no <data> tag couple to store the music. It makes sense as there is no additional data to attach to the music used in the stage. All you can do is select a song.
I will share a simple tip: I generally add the music last in my workflow, because music takes up a majority of the tower's memory size. The sample music provided takes up 3.4MB. The song is short and it takes up at least 10 times the memory than the maximum background image size. This means that if I want to edit a tower manually, I would have to scroll all the way to the bottom. I don't actually scroll because I press (SHIFT + END) to go to the end of the file, but not having to do that is simpler for me. Especially when I want to add more than 24 levels.
The Anatomy of a Level: <level></level>
Every level has two parameters: 'ffa' and 'teams'. These parameters are near identical to the <players> tag that I covered in The Anatomy of a Tower: Basic Tags. I generally don't tinker with these parameters as I don't find a need to.
<LoadSeed></LoadSeed>
As I have shown you, a tile arrangement can have more than one variation chosen at random when the tile is drawn. The random tiles are chosen according to Random Number Generation (RNG). In order to prevent a level from changing every time it is loaded, an RNG seed is saved to the level. A seed is a number used to control RNG, since true randomness on a computer is a big problem.
I'm not going to go into detail on how RNG works, as I feel that it would be outside of the scope of this guide. What matters here is that this number controls what tiles are picked for the tiles that randomly choose from a list. If there is for any reason a certain combination of tiles that you do not like currently present, feel free to change this number and get another formation. Any integer from -2147483648 to 2147483647 works.
<Solids></Solids>
This is where solids layer tiles are stored. This area is pretty flexible in terms of what data we can input. There are up to 24 rows of tiles stored here. If we were to remove a line, then the bottom row of tiles disappear. There are up to 32 columns of tiles here. If we have a line shorter than 32 characters, then the tiles stop being placed after the line ends. This area uses ones and zeroes to represent the data. In reality, pretty much any character is read as a zero; the game is looking explicitly for '1' to draw a tile. The only thing I've done to crash the game is have a line with more than 32 characters. There isn't much reason to since Towerfall uses a "pacman-like" space in its fights. Any solid tiles outside the playing field wouldn't factor into the game.
<BG></BG>
The BG tiles are stored here with the same limitations as <Solids>.
<Entities></Entities>
Here is where all the actors are saved. Every actor is its own tag. There are some actors which are stored as data tags with another tag inside for more details. For example: the moving blocks, where they store a "node" to indicate where they should move to.
The Documentation sections of this guide is where I will go into detail of what actors are available, as well as their parameters and additional tags. Writing actors here has the benefit of ignoring most constraints from the editor. You can place actors outside the play area, you can use illegal values for parameters, you can place more actors than what the editor allows you to.
<BGTiles></BGTiles>
The difference between <BG> and <BGTiles> is the difference between the Background Layer and the Detail Layer. Each row is separated by a new line, and every tile is separated with a comma. Aside from that, the data appears to behave similar to <Solids> and <BG>. If there is a row without any tiles, then there will be no text in that row. The values here are the "ID"s that I talk about back in The Deep End: Tile and BG Tile Asset Reading.
Documentation: Preamble
Before we head into the documentation, there are some things that I want to talk about. Mostly to expedite things and set some terms that I will use.
Bracket Notation
Every now and then I will bring up a range of numbers. Written out as (0, 10). The brackets do have some meaning. Square brackets mean that the number is included in the range, while circle brackets mean that the number is excluded. So 1.5 is not in the range of [-13.1, 1.5) but -13.1 is in its range.
Audio Limits
Every now and then I might say something along the lines of "any position within audio limits". The range here is [-160, 480].
The reason this is important is because of surround sound. Despite taking place in a Pac-Man-like space, Towerfall uses stereophonic sound; if something makes noise on the right side of the screen, then your right headphone speaker plays the sound louder than the left. This system can break Towerfall if you try to play a sound too far in one direction. The good news is that the breaking point is outside the play area and actors like to wrap around the screen. The bad news is that not all actors wrap around and we're here to break the game.
If an object makes directional noise while it is too far to the right (>480) or left (<-160), the game will crash. Some objects like Sunken City's Crushers make noise with no direction, those are fine to be placed anywhere. Some objects like Moving blocks make directional noise, an thus, have to be placed within audio limits. If you are insistent on placing actors outside of the audio limit, then there's the option of going into "Options" and setting "Sounds" to zero. But if you have any intention on sharing your map, then this is probably a bad idea.
Wrapping
I don't think I've talked about this much, so I'll cover it here as some objects have interesting behaviours. Towerfall takes place on the surface of a torus, if this is weird, then Towerfall takes place in a Pac-Man-like space. If you cross one border of the screen, you "wrap around" and appear from the opposite border. This isn't an inherent property of the space that is played on. Rather, actors that are allowed to wrap around have some way of handling this behaviour. There is space outside what is played on, but only actors that ignore the wrap would be able to stay in this out of bounds space.
I bring this up here because when I define the x and y parameters which is found on essentially all actors, I will note if they can wrap or not. There are some actors which exhibit particular behaviours when placed outside the bounds of the level. I will expand upon those behaviours when I get to them.
Legality
I have been referring to some things as "illegal". An illegal element is something that is erased when the tower is opened to edit or to upload to the Steam Workshop. Typically, anything that you can access through the in-game editor is legal; even if it has non-standard parameters. When I want to use illegal elements, I make sure I do as much legal work as I can before inserting illegal elements. I place a legal element that shares similar parameters where and how I want the illegal element to appear.
While illegal elements limit you from being able to upload towers as intended to the Steam Workshop, you are still able to play on these towers if you directly insert the .TOWER file into GameRoot/Workshop.

I specify this because this guide writes the legal actors in their own section(s) before the illegal actors.
A Great Big Thank You:
If you managed to read the entirety of this guide, thank you. If you skipped down here to the documentation, thank you. Even if you stopped reading partway and don't see this, thank you still.
I know I wrote a whole lot, with some parts probably difficult to read. I struggle to explain things occasionally, if there's anything that you fail to understand feel free to ask. As I (hopefully) explained before, this guide was partially written so that I could reference it later on when making my own maps. I ultimately decided that I should prioritise publishing this information because I've been periodically working on this for... at least... a year... yeah...
Perfectionism can be a pain to manage.
Documentation: Legal Actors
<PlayerSpawn/>
A placeholder to determine where player archers can spawn.
Parameters:
x= The Editor allows a range of [5, 315]. While the actor itself does not appear to wrap, the archers that spawn from them do wrap as soon as possible if they are out of bounds. This effectively means that the spawn wraps around.
This is a behaviour to note as the facing direction of the archer is determined by the position of the spawn point. If the spawn point is set to an x position of 160 or less, the archer spawn facing to the right. Otherwise, face to the left. This behaviour also covers out of bounds. Meaning that a spawn point out of bounds to the left will always start facing right after wrapping.
This is also important to know because for a very brief moment, the archer is technically out of bounds. This means that if the archer makes noise, they could crash the game if the spawn point is placed outside the audio limits. This can be easily observed by placing the spawn point in solid collision and having the archer immediately die outside the audio limits.
y= An archer spawning out of bounds in immediately wrapped in bounds.
<TeamSpawn/>
A placeholder to determine where player archers can spawn in team matches.
Parameters:
x= The same behaviour as <PlayerSpawn/> but I theorise that placing a team spawn on the opposite side would allow you to place an archer on the wrong side of the screen, since the team is determined by position on the screen much like facing direction is. (I have yet to be able to try this)
y= Same as <PlayerSpawn/>
<TreasureChest/>
A small chest containing one treasure.
Parameters:
x= Any value is valid. Chests appear to wrap around even in the editor, posing no problems when spawning. As such there's no real reason to go out of bounds.
y= Same as the x parameter.
Type= A chest can be "Normal" or "Special" (Big Chests are their own object). Special chests are those used for unlocking Yellow. This parameter only matters in Trials. I have been unable to get this special chest elsewhere.
Treasure= Appears to determine the contents of a chest in Trials.
Mode= Unknown
Timer= Unknown
<BigTreasureChest/>
A large chest containing three treasures.
Parameters:
x= Same as <TreasureChest/>.
y= Same as x parameter.
<Spawner/>
A dark portal where monsters can spawn from. Note that I have found <Spawner></Spawner> in the data for the Quest towers. I will not cover them as those are likely to heavily depend on interactions with the Quest mode.
Parameters:
x= The portal does not wrap, but the enemies will. This means that you can place the portal within audio limits and the enemies will seemingly appear from nowhere. The place where monsters appear is on the portal's relative position.
y= same as x parameter
<BGLantern/>
An automatically changing lantern which illuminates the tower.
Parameters:
x= Does not wrap around.
y= Same as x.
Lit= If the torch starts out lit or extinguished. The only unlit torch is found in Trials: Sacred Ground II. This does not seem to work for Workshop Versus towers.
<OrbEd/>
A purple orb which falls when touched or shot. Different from <Orb/> found in the Trials.
Parameters:
x= Wraps around even in the editor.
y= Same as x.
<ExplodingOrb/>
Very similar to <OrbEd/>. But green. And therefore explosive. This will get you banned from airports.
Parameters:
x= Wraps around even in the editor.
y= Same as x.
<Icicle/>
If <OrbEd/> is so good, why isn't there an <OrbEd/>2?
Oh wait, there is.
Parameters:
x= Wraps around even in the editor.
y= Same as x.
<HotCoals/>
A line of burning coals which cause archers to hop off any floor the coals touch.
Parameters:
x= The position of the coals is the left end. Hopping off the coals makes directional noise. An archer spawning out of bounds on coals will crash the game if placed outside the audio limits.
y= The coals don't wrap.
width= How far the coals extend to the right from x. The minimum value accessible in the editor (Editor minimum) is 10.
<Ice/>
When placed on a surface, it removes friction.
Parameters:
x= The position of the ice is the left end.
y= The ice doesn't wrap.
width= How far the ice extends to the right from x. Editor minimum is 10.
<Mud/>
Inhibits movement on surfaces.
Parameters:
x= The position of the mud is the left end. Note that mud makes noise the first time a player is in it, and it is directional. This means that if an archer were to spawn in mud out of bounds, the game will crash. It's best to place mud within audio limits.
y= The mud doesn't wrap.
width= How far the mud extends to the right from x. Editor minimum is 20.
<CrackedPlatform/>
A "one-way" platform that breaks when stepped on.
Parameters:
x= The position of the platform is the left end.
y= The platform doesn't wrap.
width= How far the ice extends to the right from x. The platform makes noise when stepped on or when it reappears, originating from the middle of it. This means that the audio limit depends on both the parameters x, and width. Editor Minimum is 20.
<CrackedWall/>
A 2x2 block that will break if an explosive is used on it.
Parameters:
x= The position of the block is it's top-left corner.
y= The block will wrap around.
<JumpPad/>
A platform which augments the jumps from any players standing on it.
Parameters:
x= The position of the pad is it's top-left corner.
y= The pad does not wrap.
width= How far the pad extends to the right. Keep it within audio limits as it makes noise when a player gets off of it. Editor minimum is 20.
</MovingPlatform>
A block that will move at a set velocity after a brief delay.
Parameters/Tags:
x= Keep the block within audio limits. It makes noise when it starts or stops moving.
y= The block does not wrap. If you want to make it look like it's "wrapping", make another moving platform out of bounds 320 units away horizontally. Do note that this can have some weird interactions becuase they would technically separate blocks. Bolt arrows stuck on it's surface vanish when wrapping, as do brambles.
width= The position of the moving platform is the top-left corner. Editor minimum is 20.
height= How much the block extends downwards. Editor minimum is 20.
<node/>: The </MovingPlatform> tag has a <node/> tag inside of it to indicate where the block should move to. This tag has the following parameters: x, y. These should follow the same rules as the parameters of </MovingPlatform>.
<MoonGlassBlock/>
The glass from Moonstone that is only tangible to creatures.
Parameters:
x= The glass wraps.
y= The position is the top-left of the glass block.
width= How far the block extends to the right. Editor minimum is 20.
height= Extends down. Editor minimum is 20.
<ProximityBlock/>
The block from Moonstone that vanishes when a player approaches.
Parameters:
x= The block wraps.
y= The center of the block is the position.
<CrumbleBlock/>
The blocks from Darkfang that break within explosions.
Parameters:
x= The block wraps.
y= The top-left is the position.
width= Extends to the right. Editor minimum is 10.
height= Extends down. Editor minimum is 10.
Documentation: Legal Actors (cont.)
<RedSwitchBlock/> and <BlueSwitchBlock/>
A pair of blocks where only one colour is tangible at a time. A round starts with the red blocks tangible and alternate tangibility every ~5 seconds.
Parameters:
x= The blocks wrap. The position is the top-left corner.
y= No need to be concerned with audio limits. Not that the audio is directional as far as I can tell.
width= The editor minimum is 20. Extends to the right.
height= Extends downwards.
</ShiftBlock>
The crushing blocks from Sunken City. Much like </MovingPlatform> this is a data tag, not an object tag.
Parameters:
x= The position is the top-left corner of the block.
y= The block does not wrap. Nor does it make directional sound.
width= Extends to the right. Editor minimum is 20.
height= Extends downwards.
<node/>= Where the block moves to. Unlike </MovingPlatform>, all </ShiftBlock>s are synchronised and will start and stop moving at the same time. This means that the speed of the block is variable to accommodate different distances. The parameters for this tag are: x, and y.
<SensorBlock/>
The "thwomps" that crush moving players below them found in Dreadwood.
Parameters:
x= The position is the top-left corner of the block.
y= The "thwomp" does not wrap, and will still function outside of the play area. This means that you can put a sensor block above the play area and have it "appear from nowhere".
width= Extends to the right.
<CrumbleWall/>
The purple blocks from Cataclysm that break if you as so much as sneeze on them.
Parameters:
x= The position is the top-left corner.
y= The block can wrap.
<SpikeBallEd/>
A spiky ball on a chain that rotates in a circle around it's "pivot point".
x= The position is the top-center of the spiky ball. The editor limits is [10, 310].
y= The maximum value is dependent on the length of the chain. While the spike ball cannot be placed in a position that initially wraps, the ball can wrap.
height= The editor's boundaries are [40, 120]. If externally modifying this value, beware that values below 18 are unstable and will likely crash the game. Unfortunately, I haven't found a way to have an immobile ball of danger.
<ExplodingSpikeBall/>
Imagine <SpikeBallEd/> but it explodes, and it spins a bit faster.
Parameters:
x= Same position as <SpikeBallEd/>.
y= Same limits as <SpikeBallEd/>.
height= Same rules as <SpikeBallEd/>.
<GhostPlatform/>
A stationary platform that players can go through from below, and drop from above by crouching and jumping. Fun fact: You can drop through with no speed loss with a frame-perfect input.
Parameters:
x= The position is the left end of the platform.
y= The platform does not wrap. The editor cannot put this actor within 5 units of the bottom of the screen.
width= The editor minimum is 20.
<GraniteBlock/>
A solid block whose purpose is to stop drill arrows.
x= The position is the top-left of the granite.
y= Granite does not wrap.
width= Extends to the right. The editor limit is 10.
height= Extends downwards.
<ChalicePad/>
A platform to summon a killer ghost. Only found "naturally" on the Nintendo Switch version of Towerfall (where there is no level editor (and it's only found with a variant (no stage naturally has it (should I stop this gag? (yes (yes I should)))))).
Parameters:
x= The position is the top-left end of it.
y= The pad cannot wrap.
width= Extends to the right. The editor minimum is 20.
<Chain/>
A decorative chain.
x= The top of the chain is the position.
y= The chain does not wrap.
height= Extends downwards. The editor's range is [20, 60] units.
<Lantern/>
A decorative lantern that drops to the ground inert if a player touches it or if it tinks an arrow.
Parameters:
x= The lantern does not wrap. The position of the lantern is the top-center
y= If the lantern is positioned at the end of a chain, then it will attach to the chain; swinging if the chain is disturbed.
<BGSkeleton/>
A decorative skeleton that crumbles if disturbed.
Parameters:
x= If placed with a solid tile only on its right end, it will flip around. The position of the skeleton is the bottom-center.
y= Cannot wrap. I have been unable to disintegrate it outside audio limits.
<MushroomEd/>
A decorative mushroom.
Parameters
x= Cannot wrap. The position is the top middle of the small mushroom.
y= If placed a small distance above solid terrain, it will transform into a 2-tile-tall mushroom. While this tall mushroom can make noise when passed, I haven't been able to make it make noise outside the audio limits.
<SnowEd/>
An object that places a series of decorative snow piles. They vanish when an archer dashes through them.
Parameters:
x= The position is the left end, with the snow resting on top of the position.
y= Cannot wrap.
width=Extends to the right.
<WaterDrop/>
Decoration that makes a waterdrop fall and splash on anything. Only one droplet per decoration can exist at a time.
Parameters:
x= Cannot wrap, the position is the very centre of the droplet.
y= While the droplets make noise, placing out of bounds seems to disrupt that.
<PirateBanner/>
A decorative banner that waves around with wind. If the top of the banner is in solid tiles, then the banner is red. Otherwise, it is a black banner. A black banner stays in the background while a red banner will render over the game, potentially hiding objects.
Parameters:
x= The position of the banner is the top-center. Between the two points where the banner visibly hangs.
y= The banner does not wrap.
Documentation: Illegal Actors
<Cobwebs/>
Decorative cobwebs that seem to render over the players.
A cobweb must be placed on a "corner"; failure to do so will cause a game crash.
The cobweb must be placed where there's a wall exactly 10 units (one block) away, and a floor or a ceiling exactly 10 units away. In case one position can create more than one cobweb based on the surrounding tiles ceilings take priority over floors and left walls take priority over right walls.
Tiles can be missing from the corner and be fine. The following diagram places the minimum amount of tiles required. Every cobweb is placed in the centre of of the circular stained glass in the background.
Parameters:
x
y
<FloorMiasma/>
A row of fire that flares up when stepped on by an archer and then kill anyone on top.
They appear to be heavily tied to Quest mode. I have been unable to get the fire to function in a Versus game. I could use some help in this. If anyone knows how to get this to work, then feel free to write a comment. Breaking the more "professional" tone of this guide, I'm kinda bummed by this as there's no real way to make an immobile hazard that is stable enough for use.
Parameters:
x= The position appears to be the left end of the fire.
y= The object is placed 5 units above the floor.
width
<BGMushroom/>
The small mushroom that <MushroomEd/> makes. I'll be honest and say: just use <MushroomEd/>.
Parameters:
x
y
<BGBigMushroom/>
The large mushroom that <MushroomEd/> makes. Again, just use <MushroomEd/>
Parameters:
x
y
<SnowClump/>
The same clump of snow (singular) that <SnowEd/> makes. No real reason to use as it places only one clump.
Parameters:
x
y
<KingIntro/>
The King of TowerFall as he appears in King's Court. At the beginning of the round he will signal for the archers to fight, and he will laugh at the death of archers. Without the proper implementation from Quest, he does not transform into the boss.
Parameters:
x= The position appears to be at the very center of the king.
y
<Event/>
Appears to control certain actors in Quest mode. Terria (on Discord) has informed me that <Event/> is used in Sunken City to mark where Cyan can teleport to. Included here for completion. Has a "x" and "y" parameters.
<BossMarker/> and <BossMarkerB/>
The information here was found by Terriamon. Used by bosses to mark the location of attacks, or components. Included for completion. Has "x" and "y" parameters, along with BossMarker able to possess optional Nodes. Only has uses in the following levels, spawning this actor in any other level will do nothing:
Lady Abigail (Dreadwood) (Without Nodes): It is the position for an eye of the boss.
Lady Abigail (Dreadwood): The "tentacle" attacks can spawn from this position to the first node's position.
Blind Lich (Darkfand): Summons ghosts when the boss defends itself between damage phases.
Cataclysm (Cataclysm): Spawns the shield orb.
BossMarkerB only functions in Lady Abigail (Dreadwood), where it is used for the flowers from her body. From Terriamon: "Note that it does not have any relation between the how BrambleSpores spawns. Its just a visual".
</PrismBlock>
The hovering blocks found in the fight against Cataclysm. Found by Terriamon.
The block will oscillate from the its own coordinates to the coordinates from the Node. The width and height parameters have to be specific values or the game will crash. I feel comfortable in saying this because in the game's Dark World atlas image does not have a tileset for these crystals. These crystal blocks are only rendered in the following (width, height) pairs:
(20, 30) (40, 10) (30, 10)
Parameters:
x=
y=
width=
height=
<node/>=
<BGCrystal/>
Torches as they are found on Moonstone. Likely implemented as different from torches due to their unique behaviour and lighting.
Parameters:
x
y
<RainDrops/>
When placed one tile above a solid floor, will produce pitter-patter effects as if rain is falling on the surface.
Parameters:
x
y
<Dummy/>
The dummies used in Trials mode. They have no effect on the status of the match. I.E.: if all the dummies in a level are destroyed, the match does not end. Note that a dummy needs to know if it is facing left or right.
The dummy automatically adapts to the surrounding environment. Putting the dummy in the right position on a chain will attach the dummy to the chain, near to the ground will stand the dummy on the ground etc.
Parameters:
x
y
Facing= The possible values are "Left" and "Right"
<FakeWall/>
A fake block of tiles which render over most other objects.
When an archer stands inside of the fake wall, the wall vanishes as long as an archer remains inside of it. If the fake wall intersects with solid terrain, the fake wall will automatically adapt its appearance to blend in with the environment.
Parameters:
x= The position is the top-left corner of the rectangle.
y= To keep up the illusion, the position appears to be as if it were rounded to the nearest ten.
width
height
<YellowStatue/>
The statue from which Yellow Archer is unlocked from. I already have Yellow unlocked, and he does not appear when I place this. It's likely dynamic and will disappear when placed.
Parameters:
x= As I have already unlocked Yellow, I can't see where the coordinates point to.
y
<Ogmo/>
Ogmo
Parameters:
x=Ogmo
y=Ogmo
<RandomBlock/>
I only found this in the Versus Cataclysm levels. It appears to be related to that tower's random level generation.
<GhostShipWindow/>
A circular ship window with some animation. It renders on top of the players. Found in Amaranth's levels on top of solid tiles. I wouldn't recommend using it as decoration because it includes a portion of Amaranth's tiles, making it stick out awkwardly if you use any other tileset.
Parameters:
x= The position is based on the very center of the window.
y
<LoopPlatform/>
A ghost platform which moves in a straight line ignoring any other collidable objects and looping around the screen when necessary.
Parameters:
x= The position is base on the left side of the platform, indicating where the platform will start.
y
width= How large the platform is, the platform extends to the right.
Direction= To what direction does the platform travel, the four available values are "Left", "Right", "Up", and "Down".
<RotatePlatformsCenter/>
A ring of ghost platforms which travel in a circle. The platforms do not wrap if they go offscreen.
Parameters:
x= The position is for the center of the ring of platforms.
y
Amount= How many platforms are there in the ring.
Radius= How far the center of the platforms orbit around the position.
Width= The width of the platforms, note that this is written with an uppercase W.
DegSpeed= The speed which the platforms rotate at. I believe it's measured in Radians/second.