The level editor allows creating custom levels!
- 1 Editor Menu
- 2 Objects
- 3 Placing Objects
- 4 Settings
- 5 Menu
- 6 Notes
- 7 Old Editor
To start making a level, just click Edit Custom Levels... -> Create a new level (or click an existing one to edit it).
If debug mode is enabled, pressing F3 will switch the player from playing a level to editing it.
"Get new levels" and "Level History" do the same thing as in the Custom Levels menu.
Edit Custom Levels
Allows editing singular levels that are in your Data\Worlds\Levels folder. These are the levels that you obtain upon saving a level downloaded from a code.
Clicking a level in the list will allow you to edit that level. Right clicking a level will allow deleting that level.
If "Sort By Name" is disabled, levels are sorted alphabetically by their levelid value in the level's .ld file (and by filename if two levels are equal), which by default increments with every new level made such that levels made later appear later in the list. If it is enabled, levels are sorted alphabetically by name.
Allows editing entire levelpacks that are in your Data\Worlds folder. After selecting a pack, the interface is very similar o to the Edit Custom Levels menu., but with more options:
Levels that are set to the "map" type have a purple border around them. Selecting "Sort by Type" will place all map levels at the start of the level list.
The "change author" and "change name" buttons open a text input to change the respective value.
"Set first level" sets the level that the player spawns in the first time they open the levelpack. The level that this is set to has a pink border with an S around it.
"Set world map" sets the initial parent level that the player has when loading up the map. Returning to map from the first level will send the player here. The level that this is set to has a yellow border with an M around it.
The worlds "baba" and "Levels" will not appear in the list of levelpacks to edit. "baba" is the main game and editing it allows changing levels in it, and "Levels" is the folder used to manage levels not in a levelpack.
There are some settings to change gamepad controls in this menu. There are also 10 tutorials that teach how to use the editor.
Enable Advanced Words
Some words don't appear in the premade object list that the editor has unless this is enabled.
These words are: All Letters, .
Enable Advanced Features
This enables the "Edit Levelpacks" option. It also enables most of the options in the "Edit Objects" menu.
This can also be accessed with the tab button. To switch to an object, simply click on it.
The "Pick nothing" button selects empty space, which can be used to remove objects.
The "new object" button allows adding objects to the list. Simply click the wanted object in the list, and voila!
- Adding an object will also add its respective text, and vice-versa.
- Some objects are not present unless "Enable Advanced Words" is enabled.
If "remove object" is enabled, the next tile clicked will be removed from the list.
Objects can be dragged around the object grid to be positioned in whatever place is most convenient.
Allows searching for an object by name.
"Remove search" removes the search string, though this can also be done by searching for an empty string. Typing in either object menu will also trigger the search menu to appear.
All of the objects are also placed into tags. This feature allows filtering for them.
Searching for multiple tags will only provide objects that meet all of them.
Allows compressing a noun/text pair into a single entry in the object list instead of two.
The scroll wheel can be used to switch between an object and its text. There is also a button next to the button to enable or disable this.
Note that the customizable object positions in the list for the two modes are completely different, so it's best to commit to only using one
If "edit object" is enabled, an edit menu will open for the next tile clicked. This can also be accessed by rightclicking an object. Note that only editing the sprite is available unless "Enable Advanced Features" is enabled.
This menu includes the visuals (0/8/16/24 for objects, and both colors for text, and all 3 frames of each) at the left, and also shows the object's name, ID, and type.
Changing the sprite allows selecting any object in Data\Sprites, or Data\Worlds\worldname\Sprites if editing a level pack.
Sprite filenames are in the format <name>_<id>_<frame>.png, and should be 24x24 pixels in size. Frames 1, 2, and 3 must always exist for all sprites for the wobble effect, even in the "None" animation style. Below is a table of what sprite ID is used by each animation style
|Animation style||Required sprites||Description|
|Directions||0, 8, 16, 24||Changes based on direction.|
|Animated||0, 1, 2, 3||Has an actual animation beyond the wobble.|
|Anim. Direction||0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27||Animated, and is based on direction.|
|Character||Same as Anim. Direction, and optionally 7, 15, 23, 31||Same as Anim. Directions, but can also use sleep sprites.|
|Tiled||All from 0 to 15||Connects to nearby tiles of the same name, level tiles, and EDGE.|
Objects that are not tiled use sprites 31 and 0-3 when facing right, 7-12 when facing down, 15-23 when facing left, and 24-28 when facing up. Sprites 0-3 gives a respective animation frame and 7 is the sleep sprite, taken modulo 8.
"Character" changes animation frame every time they move, while the "animated" options change animation every turn.
When calculating which sprite to use for "Tiled" objects, a bitfield is used, where right is the first bit (1), up is the second bit (2), left is the third bit (4), and down is the fourth bit (8). The sum of these numbers based on which directions the sprite should connect to is the sprite ID that will be used. For example, not connecting to any side will use sprite 0 (0+0+0+0), connecting to the right is ID 1 (1+0+0+0), a tile connecting upwards and downwards will be sprite 10 (0+2+0+8), and a tile connecting to every direction will be sprite 15 (1+2+4+8).
Text have two color options. The active color is its color when in a rule. Available colors are based on the palette.
The z-level determines what gets drawn on top of other objects, with higher being drawn on top. This is an integer clamped to [0,20].
An text is named text_name. An object's name determines what it's called, both in letter spelling and the name shown in the pause menu.
Nouns' text refers to the object named the same as it. All non-noun text will only function if spelled the proper name. Letters will spell words based on their name.
Having more than one object with the same name is a bad idea and will cause issues with undoing. (See Metatext)
The text type refers to where things are able to form a rule. Things may still function properly if set to the wrong texttype (eg. property as type 0 still functions); however, buggy behaviours will likely occur.
The "BABA" "IS" "YOU" "LONELY" "ON" "BA" buttons can be used to easily set text type to 0, 1, 2, 3, 7, 5 respectively.
|Text type||Used for|
will accept things with texttype 0,2. will accept things with texttype 2. will additionally accept . These are special behaviours which occur independently of texttype. They are set to the object when you add them to your object list, but will not change apart from that.
There are three layers, switchable with the L buttons at the top right. To stack objects, they must be placed on separate layers. All placement will only occur on the current layer.
Right clicking will change the held object to the object on the space clicked on that layer (block picker), and set your placement mode back to freeform. Middle clicking will also do this, but will also remove the object that was clicked. Switching objects otherwise is done through the objects menu.
There are some recently used items at the top right. The scroll wheel will allow quickly swapping between these. An object can also be saved by rightclicking on it.
Ctrl + scroll wheel can be used to switch between an object and its text.
Ctrl + left click allows dragging an object, including levels, paths, and specials, which can't be moved efficiently with the selection tool.
The large arrows can be used to rotate the objects being placed. Pressing arrow keys on the keyboard will also do this.
The objects menu has additional settings, which are used to determine how objects are placed.
In all modes except freeform and flood fill, releasing on the same tile as the clicked tile will cancel placement.
|Freeform||Anywhere left click is held down, objects will be placed.|
|Line||Draws a line from the center of the clicked tile to the center of the released tile, and places an object on every tile that line reaches.|
|Rectangle||Draws a hollow rectangle from clicked location to released location.|
|Filled Rect.||Draws a filled rectangle from clicked location to released location.|
|Flood Fill||Clicking a tile will change all tiles of that slot orthogonally connected to that tile on that layer to the selected tile.|
|Eraser||Acts exactly like freeform with empty selected.|
When selecting an area with the selection tool, that area will be deleted, but the area selected then becomes the "object" being placed. Placing it somewhere will not clear your selection.
A selection can be rotated with left or right, and vertically flipped with up or down.
Pressing F4 will give the player a text input. If words are typed, the player will switch to the selection tool with those typed words in hand, and will also automatically add any missing objects to the object list. (eg. "baba has j" will give a selection of )
Levels can only be placed in level packs. They can only be placed in freeform mode. Existing levels can be edited by clicking a level with the tool selected. The same prompt also appears when the level is placed.
Levels cannot interact with normal objects, and normal objects cannot interact with levels. (They can be treated as a different set of layers.)
When the level tool is selected, hovering over a level displays the levelname it leads to.
Selecting a level opens a similar menu to that in the main editor. The selected level defaults at the current level.
Two colors can be set (TODO: What are the colors actually used for?). Left click sets both, while right click only sets the one with grey outline.
For information about state, see LEVEL.
The visual selector's outer arrows change the value by 10. The special icons can be configured in map settings > map icon setup.
See Paths to see how paths work. The gate count's outer arrows change the value by 5.
The object of placed paths is the object that is being placed of normal objects. The sprite in the editor also changes if it is a gate and what the gate is set to, but does not change based on its object.
When hovering over a path with the paths tool enabled, the data of the path is displayed where the level name normally is.
These are not implemented yet, however they share many properties with levels. There are multiple types of specials. They can be created in the .ld menu.
Controls: Displays game's controls onscreen. Can be adjusted which controls it displays.
Level: Makes objects it overlaps have a level metadata. When an object is turned into a level, it can be entered.
Flower: Rotating flower. Its color and radius can be adjusted.
Sign: Adds a message to an object which is displayed when YOU object is near the sign object.
This menu can also be reached with F1.
It has options for level name, author, and subtitle, which appear when playing the level.
Level music can be changed. Displayed name is the filename (minus extension). Files are placed in Data\Music and are .ogg files.
Particles are background (or foreground) effects so it isn't a single flat color.
The palette sets the color scheme of everything while in the level. They can be found in Data\Palettes or Data\Worlds\worldname\Palettes.
The world size is capped at 33x18 (68x38 in debug mode). Everything too far off to the right/bottom will be removed if the level shrinks.
Levels set to "Map" type don't have music stop when there are no objects, and the level name doesn't appear upon entry.
The "levels needed to clear" changes the amount of levels needed to receive the Blossom (and propogate paths) from the level. The outer arrows change the value by 10, and it is clamped to [0,99].
The map icon setup allows setting 20 sprites that level icons can have set as their icon.
Some levels have a custom parent. When these levels are won, the player goes to the custom parent instead of the level they came from. (This does not apply to transforms!)
This menu can also be reached with the escape key.
Testing the level allows the level to actually be played. The transform status of levels in the ba.ba savefile (inaccessible normally) is used. Levels cannot be entered via select while testing a level. Beating or transforming a level will return you to the editor immediately. The Return to Map option is also replaced with a Return to Editor button.
If "Upload Level" is selected, you will have to verify that the level is beatable. Only a win/end/all is done will allow the level to be uploaded. The upload will fail if the level has any objects with sprites or names not normally in the game.
A theme is a collection of the included objects (and edits made to them), palette, music, and particles. Saving current theme will save those in the current level, allowing easy copying to another level.
There is a prompt to load a theme when creating a new level. Loading a theme will clear all objects in the level.
Themes are stored in Data\Themes or Data\Worlds\worldname\Themes.
All string inputs provide a keyboard the user can click. However, the keyboard can be used as well. Punctuation symbols (-.?!,':_><) cannot be typed from the keyboard. Enter or the OK button confirms a string. Cancel cancels the option that led to the string input in the first place. Backspace or the left arrow removes the last character.
Lists with many pages have two page-swap buttons for each direction. The inner ones move 1 page, and the outer ones 5. If there is not enough pages left to move the full 5, the button is greyed out.
In February 2020, a beta update came out that completely revamped the level editor. The old editor can still be used in the old-editor branch of the game. This is the old information from this page.
Baba Is You features a level editor used by the developer Hempuli. It is not fully finished and still has errors but it does work.
It allows the user to create both hub worlds and levels. It features a world theme and palette editor in addition to the basic level editing ability. This allows you to swap any sprite group with another and change its colours.
Enabling the Level Editor
Because the editor is not unlockable nor intended to be unlocked or used by a regular player, the user will have to enable it manually. This only works when selecting the old-editor branch on Steam.
- You can put this file into your Lua folder (located at SteamApps/common/Baba Is You/Data/Lua), and it will automatically enable the editor. It is also unaffected by updates so you don't have to worry about enabling it every time
- If you do not have a Lua folder, go to SteamApps/common/Baba Is You/Data and open syntax.lua, then add generaldata.strings[BUILD] = "debug" above the first end.
Using the Level Editor
Now that we've enabled the level editor, it's time to use it. Head over to the Guides section for more information.
An external level editor made by DevilSquirrel exists: https://github.com/ShootMe/BabaIsYouEditor. It allows you to do more than the current ingame editor, as well as edit things from a level's .ld file in the editor itself.
- Right click: Set brush to selection
- Left click: Make selection
- Left-ctrl Drag: Drag item under cursor (does not overwrite)
- 1/2/3: Select layer + see layer visible
- WASD: Translate level in direction (with wrap)
- Arrow Keys: Change object's direction
- Tab: Open Objects list
- Z: Set brush to secret
- F3: Switch between playing and editing (requires debug mode)
- E: Go to selected level
How to Use
To place down objects, click on OBJECTS and select what you want to use. Then left click to place it down.
If you want to erase, right click a space with nothing on it or the level border, which sets the brush to erase.
To test your level, click SAVE and then press F3 to switch to playing mode.
To place down levels for an overworld, click Add Level and then click the space you want to place it on.
The top option is what level you will be taken to.
The next option is whether the level is Hidden (can't be seen), Normal (where you can see the outline but not number/symbol), and Opened (level is fully open and visible).
Symbol style lets you choose to use numbers, text, dots, or a custom icon (which is set on MENU>Map-Related Settings>Map Icon Setup).
Symbol lets you advance the amount for the number/text/dots.
Set selector places the map cursor to the mouse position, which can be used to access levels.
For adding paths, first you want to click Set Path. This lets you choose whether your path is Hidden (not seen until adjacent level is unlocked) or Visible.
- You can then set whether it is locked by fluffs or full flowers, the arrows changing the amount required. Then all the objects let you choose what the path looks like if it's locked.
- You then click Add Path and place it however you want.
If you want to change the level objects, click on Menu>Change Level Theme. The theme determines what objects are in a level.
You can change the colours of the whole level using Menu>Change Level Palette.
To change an individual objects properties, use Menu>Object Settings. From here you can change the object sprite, name, type (Object, Text), animation style, text type, and others.
You have to do a bit of external work in order to change object colours. Here is a list of all the default palettes included with the game, upscaled so they can be easily seen.
Then go to your .ld file for your level, and you will see something like colour=x,y activecolour=x,y (when a rule is active), or clearcolour=x,y (when a level is completed). X goes horizontally and Y goes vertically, the top left square being 0,0.
You find your object you want to recolour, then look at the palette horizontally first, and then vertically.
Other Level Things
If you want to set music for a level, go to the .ld file and then add the line music=(your choice) under Settings. The music folder is Baba Is You>Data>Music
If you want particle effects in the background, add particles=(choices below) to your .ld