Back to BoundWorlds

About BoundWorlds, the Patchwork Universe Project


I'm lying low for a while as I work on this. If you've got questions or comments, post them here.

Back

What is BoundWorlds?

BoundWorlds is a sprite-based online "massive single-player world building game". In brief, players can create worlds and explore worlds created by other players. Players can also create doorways, or Gates, that link their world to other player's worlds.

The world building system is extremely powerful: objects can be scripted using an event-based system, essentially making each world its own separate game. But unlike other moddable game engines, players don't have to pick and download mods; instead, they can simply explore the network of worlds naturally in-game, using Gates to travel from one world to the next.

You can explore the patchwork universe of BoundWorlds without logging in. Creating a username is necessary to create worlds and save data between sessions. BoundWorlds is free and does not require any downloads to play.

BoundWorlds works on PC and mobile devices (though the PC controls are better). If you're using a mobile device, I reccomend running it as an app by clicking "Add to Home Page" under the options menu in Chrome; this will keep the page from sliding around and stop the URL bar from getting in the way.

Concept

Games can be a powerful creative medium - perhaps even the most powerful, since it is the only form of storytelling that places you directly into the shoes of the main character. I want to see people expressing their creativity in games more, instead of just using them as a money-making engine.

The problem is that making a good game is HARD, and often takes many people with many different talents. You need programmers, artists, story writers, level designers, graphic artists, music writers, and so on. It takes a lot of dedication to make even a moderately decent game - and you need to find some way of getting the word out, too!

BoundWorlds was created to bring people with these different talents together, allowing a single, vast game to grow organically from its different parts. Graphic and musical artists can upload their creations. Programmers can use the BoundWorlds' powerful scripting system to create game objects. Level designers can import these objects to create fun or challenging areas. And storywriters can build overworlds that link together multiple zones into larger unified worlds.

BoundWorlds is a game. But it's also a game maker. It has basic physics and object properties already built in, but it also has a flexible event-based scripting system that opens up tons of possibilities, whether you are a seasoned programmer or just starting to learn.

BoundWorlds is currently in beta. It is fully possible to create and link worlds, but the object import system is still under construction. Check back periodically for new features!

Back

BoundWorlds Gameplay

Controls

The default controls are as follows:

Note that this may change in the future.

When playing on mobile devices, use the box on the right side of the screen to move around, the buttons on the left to use abilities and interact, and tap objects to lock onto them.

Over the course of your journey, you may discover places that let you transform into different objects. Each object has different abilities and will create a different playing experience.

Gates and Worlds

The BoundWorlds universe is made up of Worlds, each World being composed of numerous areas, called Rooms. You can travel from Room to Room by walking over Gates.

Back

Creating your First World

To use the World Builder, you must first log in on the main menu. Once you log in, you can create a world by simply clicking the "create new world" button under the world list. You will have to give a unique name to your world, which will be used as its ID for linking Gates to it (more on this later.) You can change the title of a world afterwards, which affects how it will appear in the World List, but the name will remain.

Once you create your first World, the World editor will open. Here, you can create global objects and rooms, and save your world to the server. You can also create and import packages, which will be explored in detail later. To exit the World Editor, click the "X" in the corner of the World Editor. Make sure to save first!

Your first step will be to create a new Room. Do this by clicking the "New" button under the "Rooms" list. Once you create a room, you will be sent to the room editor.

To return to the World Editor from the Room Editor, click the "X" in the corner of the Room Editor box.

Creating a Room: Adding Layers

A Room in BoundWorlds is a rectangular area that you (or other players) can explore. Rooms are made up of Layers and are connected to each other through Gates. Everything that goes on in the game happens in a Room. Similar to Worlds, a Room has both an ID (used for connecting Gates) and a visible title. Unlike Worlds, you can change a Room's ID after creating it, but be warned that doing so will break all Gates leading to that Room.

When you first create a room, you will want to first set its width and height (in tiles), and then to create a Layer. Layers can be thought of as "planes" in which objects interact with each other. Every object in a Room must occupy a Layer, and objects can normally only interact with other objects in their own Layer.

Although BoundWorlds has semi-3D physics and objects may have Z-position values, and objects in "higher" Layers appear to be above those in lower ones, Layers are not physically "above" or "below" other Layers. An object in a "higher" Layer will always appear "above" an object in a "lower" Layer and the two will never collide.

Simple rooms rarely need more than one layer, except for creating backgrounds and foregrounds. For your first Room, simply create one Layer and name it whatever you like. This will open up the Layer Editor.

Adding a Gate

Gates are the entrances into your Room. In order to travel from one Room to another, whether within the same World or to a different World, players must pass through a Gate. You will also need a Gate to test out your Rooms.

To create a new Gate, open the "Gates" list in the Layer Editor and click "New". When editing a Gate, just click on the screen to place it in the Room. You can make a Gate multiple tiles across by holding Shift and dragging the mouse to select its area. To test out your Room, click on the "Test Gate" button. Your avatar should appear on your Gate and can be controlled as normal. You have just created your first Room!

Of course, there's not a whole lot to do here yet. When you're ready to return to the World Builder, click the "Open World Builder" button.

Adding a Tilemap

You're probably going to want more than just a black screen to walk around in. To add more features to your Room, you'll want to create a tileset. By now, you should know how to add one - click the "New" button under the Tilesets menu.

Tilesets are images made up of 32x32 pixel square tiles, which can be placed anywhere in a Layer. While you will automatically be given a simple white square to work with, you will probably want something a little more elaborate. To import a tilemap image, click the "Manage" button in the Tileset Editor. This will open up your BoundWorlds file system, where you can import images or upload your own. Your file system will be shared by all the Worlds you create, so feel free to organize it as you choose.

If you don't happen to have any tileset images on your computer, you can make use of the Public Resources folder. You can also find tilesets all over the Web by searching for "32x32 Tilesets". Choose whatever image you like as your tileset, and it will appear in the Tileset Editor.

Once you have a Tileset, click on the image to select your tiles, then click on the main screen to place them. You can click the small white square under the tile editor to erase tiles instead. Also, you can use both the left and right mouse buttons to select and place two different tiles at a time.

If your Room is more than 16x16 tiles in size, you can drag the screen around by holding the mouse button. You can also select a rectangular area by holding the Shift key; this will allow you to place multiple tiles at once.

Now open the Gate menu and click on the Test button to walk around. Cool, right? But not much of a game, since the tiles don't do anything yet. You're probably going to want tiles that represent walls, so you can set boundaries or make mazes for players.

To create solid walls, click a tile in the Tileset Editor and then check the "Solid" checkbox underneath. This will cause that tile to represent solid blocks. Now you can make mazes!

There are other options that you can make tiles represent. Pits serve as hazards for the player to avoid. "Drop" tiles let areas function as 2-D sidescrolling platforming spaces. "Climb" represents ladders. "Floor" tiles overwrite pits in the same space. Mix them together to create a room for players to explore!

Linking Rooms

Once you have created multiple Rooms, you'll want some way to link them together. This is where Gates come in.

Gates can be given a target location - the target being a Gate in another Room. When a player steps on a Gate that has a target location, they will instantly be sent to that location. Using this, you can link Rooms in your World together, creating a World!

Creating Sprites

Sprites are the main objects that do things in the BoundWorlds universe. Anything in a Layer that is not a tilemap, a background, or a Gate is a Sprite. Sprites have a great deal of functionality - they can be given basic stats, or can be programmed from the ground up to behave exactly as you want! Creating new sprites is the most complicated part of world building, so there are several chapters dedicated to sprite creation.

Going Public

Once you feel your World is ready, it's time to create a Public Gate. This Gate is the means by which other world builders can create links to enter your World. Creating a Public Gate is as simple as selecting a regular Gate and clicking the "Public" checkbox. The title of the Gate is what will appear to other users, so make sure to name it something appropriate.

When creating a Public Gate, you may also want to select a list of tags to describe your World. This will allow other users to find it, as well as drawing Random Gates. Use a small amount of appropriate and commonly-used tags to maximize the chances of visitors.

Back

Sparks

Sparks are the base "currency" of the BoundWorlds universe. Sparks are earned in two basic ways: by exploring, and by building.

Collecting sparks through exploration is fairly straightforward. You can earn sparks by collecting items, defeating enemies, or completing challenges.

When building a world, you can add sparks by creating objects that have a number in their "Increase Sparks" field under the "Basic Player Interaction" menu. Such items can be used as incentives or rewards for players exploring your world, or to create trails that lead them toward a desired exit. You earn sparks by getting players to explore your world and collect sparks. In general, the key to earning sparks is to add neither too many nor too few opportunities to earn sparks.

The mechanism by which spark collection occurs is as follows:

Every second a player spends exploring a world, they automatically accumulate one shell. After exiting a world, the sparks they collected as well as the shells are tallied up, and the shells are paired up with the sparks. Any unpaired sparks are lost; this means that a player cannot earn more sparks from a given world than the number of seconds they spent exploring that world. After pairing up the shells and sparks, any leftover shells are then "purified" by the sparks - one spark purifies one shell. One tenth of the purified shells are then converted into sparks and given to the world's builder.

This means that to maximize the sparks you collect from a given player, you should ideally give one spark for every two seconds you expect them to spend in your world. However, offering the opportunity to earn more than this by completing extra challenges can offer incentive for players to stay longer.

Important: Only players who exit a world through a Gate will earn sparks, for both themselves and the world builder! If a player quits to the Main Menu, any sparks they earned from that world will be lost. Avoid trapping your players without a means of exit!

Back

Gate Properties

If you've started to build a world, you probably already know about Gates. There are, however, many nuances that can allow you to ensure smooth connections between different areas of your world, and with other worlds.

Gates can occupy multiple tiles. To create a multi-tile Gate, hold the Shift key and drag the mouse across the tiles, or simply change the width and height in the Gate Editor. Since Gates create backtracking paths, this is much better than adding multiple one-tile Gates to connect two rooms.

Gates retain the player's position. When a player steps onto a Gate, their position is saved and they will be automatically placed in a corresponding position of the destination Gate. If the Gates are different sizes, the position will be adjusted relative to the Gate's total size.

There are eight kinds of Gates, each one with slightly different properties.

Shift: These are the most primative kind of Gate, simply moving the player from one Gate to the other. They retain the player's X and Y position and have no transition effects. When accessing a random Gate, Shift Gates can connect to any other Gate, but will prefer to connect to other Shift Gates or Bed Gates.

Walk: Most Gates leading off-screen will be Walk Gates; generally representing a pathway from one area to another, or a path between an "overworld" area and a local region. Walk Gates should almost always be given a direction, representing the direction that the player is expected to enter. When entering through a Walk Gate, the player will be placed next to the Gate's tile and will automatically face in the appropriate direction. Only the coordinate perpendicular to the Gate's direction will be stored when entering through a Walk Gate. Walk Gates strongly prefer to connect to other Walk Gates leading in the opposite direction. When placing a Gate on the edge of a room, the Gate will automatically be set as a Walk Gate facing in the appropriate direction.

Here <-> Inside: Used to represent the entrance to a cave or building. Functionally very similar to Walk Gates, except that they prefer to connect to Here <-> Outside Gates.

Here <-> Outside: Used to represent the exit of a cave or building. Functionally very similar to Walk Gates, except that they prefer to connect to Here <-> Inside Gates.

Ground Hole: Placed over a pit, these Gates will only activate when the player falls into the pit. You can make large Ground Holes that cover over a large area of a room and link them to a Sky Hole on a "lower floor", allowing the player to fall into the lower room whenever they fall into a pit. Gates placed over pit tiles will be set as Ground Holes by default. Prefers to connect with Sky Holes.

Sky Hole: Opposite of a Ground Hole. Sky Holes will not activate normally.

Bed: Represents the entrance to a "dream world". Unlike most Gates, the player's position will not be stored when entering or exiting a Bed Gate. May have other functionalities later. Prefers to connect with Shift Gates.

Teleport: Represents a teleporter. Does not store the player's position when entering or exiting, instead placing them directly in the center of the Gate. In order to enter a teleporter, the player's hitbox must be positioned completely inside the Gate's area. Prefers to connect with other Teleport Gates.

Back

Global and Local Tilesets

Tilesets come in two main varieties, global and local. A global tileset is added to the World Editor at the top level, and can be used by any room in that World. All packaged tilesets are global. A local tileset is added to a layer directly and is used only by that layer.

When editing a layer, you will see a list of the global tilesets that are not being used in that layer. To add a global tileset to the layer, click the small green (+) icon next to the tileset's name. This will allow you to place tiles in the layer.

Tileset Properties

Tiles have several properties that will affect all objects that walk over them. Each individual tile can be given any combination of properties. When creating tilesets, there are several things to keep in mind.

Tile properties are additive. While this is not really an issue in simple rooms with only one tileset, if you make multiple tilesets in a single layer the final outcome of a tile's attributes will be the sum total of all the tiles that occupy it. This means that if you place a Climb tile and a Water tile in the same space, the tile will be functionally identical to if you placed a single tile with both the Climb and Water attributes checked.

The "Blank Tile" is a tile. It is easy to think of the blank tile as a simple "delete tile" option, but the blank tile can be given attributes just like any other tile. This is especially notable if you choose to give the blank tile the "Pit" property; this will cause all blank tiles to function as pits. This is especially important in conjuction with the previous fact; if you have a regular room and then add a tilemap with the "Pit" property, even without actually adding any tiles, the entire room will be a pit. This is the main reason why the "Floor" attribute was created, as it cancels out this common issue.

The tile attributes are as follows:

Floor: Floor tiles behave as normal blank tiles, but the Floor attribute cancels out the Pit and Drop attributes on the same tile. The main purpose of this is to deal with multi-tileset layers.

Solid: Represents solid walls. Blocks the movement of any sprite that does not have the Ghostly attribute.

Pit: Any object that is affected by gravity and cannot fly will fall into a pit and be destroyed. An object's entire hitbox must be positioned over a pit for it to fall in.

Drop: Creates 2-D sidescrolling sections. Gravity will pull objects down and it is possible to jump on top of solid blocks. Still has some bugs.

Slick: Creates slippery tiles with low friction.

Sticky: Creates sticky tiles with high friction.

Water: Creates water tiles. While in water, sprites use their swimming abilities to move. Sprites with no swim speed will not pass over water tiles.

Grass (incomplete): Creates tall grass tiles. Objects will be able to hide in the grass.

Back

Sprites and Classes

Every object in the BoundWorlds universe, aside from tilemaps and gates, is a sprite. BoundWorlds does not make any hard distinction between collectable items, interactive NPCs, puzzle elements, or enemies - all of these are just sprites with different behaviors. In order to really begin creating a world, you need to create sprites.

Every sprite is part of a class. A class is a "type" of sprite, and multiple sprites may belong to the same class. For example, you might have a single class called "sign", but there may be many signs in a world. Each individual sign is a sprite, while the "sign" category is the class.

Classes may be global, which allows them to be used in any room of the same world, or they may be tied to a specific layer in a specific room. This allows you to make classes that will be used in many different rooms, or unique local classes that will only be used in one place, saving clutter. To create a global class, simply create the class while the World Builder is navigated outside of any particular room.

You can edit a class by double-clicking it in the class list, or clicking the "E" edit button. When you have a class selected and have a layer opened in the World Builder, you can place sprites in the layer by clicking on the screen, then selecting the direction the sprite should face. You can also select individual placed sprites by clicking the "Select" button under the class list. Right-clicking deletes sprites, and you can also hold Shift to align them to tiles.

Individual Attributes

You don't have to create a new class whenever you want to make slight variations on a basic template. The Class Editor allows you to create "individual attributes" by ticking the green checkboxes next to their attributes.

Creating an individual attribute allows you to set that attribute for each individual sprite after placing it. For example, the "sign" class may its "text" attribute set individually. This allows each individual sign to have different text, without having to create a whole new sign class. In addition to saving on space and loading time, this is also especially useful when you want to export your classes, as it allows them to be far more versitile. Almost all basic properties can be set individually, except for graphic, function, and technique-related attributes.

Back

Sprite Graphics

When creating a class, your first priority will probably be to give it graphics. To do this, open up the class in the World Builder and click on the "Edit Graphics" button near the top.

Every sprite gets its graphics from a spritesheet, which is an image file that is divided up into tiles of a specific width and height. You can upload a spritesheet from your computer or choose one from the public resources by clicking the "manage" button. This will load the spritesheet into the Graphic Editor.

To actually make the sprite's graphics appear, you must create animations. For simple sprites, you can create animations automatically by selecting an option from the "Animation Convention" tab. This is useful for simple, one-frame sprites, or from spritesheets made by Charas Project or for RPG Maker. Otherwise, you will have to create your own animations. Fortunately, BoundWorlds does a lot of the work for you.

Every animation in a BoundWorlds sprite can have multiple directions depending on which way the sprite is facing - north, south, east, or west. BoundWorlds supports several conventions for sprite facing directions - 1 way, 2 way, 4 way, 4 way diagonal, and 8 way. There is also a "free rotation" option for sprites that automatically rotate toward the direction they are supposed to be facing, like ships in Asteroids-style games.

You will see several animations available by default, these will be used based on the sprite's current behavior. The most important animations are _stand and (if you want your sprite to move) _walk. You can also add custom animations that will be used in functions or techniques.

To add frames to an animation, simply select the animation and click on the spritesheet. You can adjust the frames as well, flipping them horizontally or vertically to make spritesheets smaller.

Back

Adding Physics

Once you have created a class and given it graphics, you're probably going to want it to actually do something. Time to start using the Class Editor.

Hitboxes

The first thing you're going to want to do is give your sprite a hitbox. Hitboxes allow sprites to collide and interact with each other. The only sprites that should not be given a hitbox are intangible things like graphic effects and function controllers. Hitbox controls are under the "Basic Options" tab in the Class Editor.

BoundWorlds sprites have two kinds of hitboxes - circular and rectangular. Generally, mobile sprites like people and creatures should have circular hitboxes, while solid, stationary objects like blocks and doors should have rectangular hitboxes. To create a radial hitbox, set a number in the "Hitbox Radius" field. To create a rectangular hitbox, use the "Hitbox Size" field to set the object's X and Y values. If you create a radial hitbox, you'll be able to visualize the size of the hitbox based on the sprite's shadow (although you can override this by setting the "Shadow Size" field to a value other than -1).

Basic Properties

Besides hitboxes, other attributes under the Basic Properties tab affect certain qualities of the sprite.

Targetable Unit: Makes the sprite targetable by both the player and NPCs. NPCs will ignore non-targetable sprites. Generally, if a sprite is going to be doing any fighting, it should be a targetable unit.

Solid: Solid objects will prevent other sprites from moving through them. Note that most mobile objects should not be solid, as it is easy for the player to get stuck behind them if they move into the wrong place. Solid objects should be reserved for things like doors, walls, and non-moving guard NPCs.

Bullet: Bullets will not collide with other bullets, only with non-bullet sprites. This makes processing faster if there need to be many bullets on screen.

Effect: Designates the sprite as a special effect. Effects do not collide with other sprites at all, speeding up processing time.

Ghostly: Allows a sprite to pass through solid objects. The sprite will still process any collision events associated with the object.

Lock to grid: Forces the sprite to remain aligned with the tile grid. Physics for these sprites are simplified; they do not experience normal acceleration or knockback. Suitable for non-moving or rarely-moving obstacles.

Motion and Physics

Sprites can be given various stats affecting their ability to move around. These are selected under the "Physics and Motion" tab in the Class Editor. Note that the options in this tab will not affect a sprite's AI or behavior - unless they are given idle behaviors and/or combat AI, a sprite will remain still, even if it technically has the ability to move. If the player is transformed into a mobile but behavior-less sprite, they will be able to move.

Mass: The weight of the sprite. This mainly affects collisions and knockback. When hit by an impact, the force of the impact will be divided by the mass of the sprite. If mass is set to -1, the sprite will be entirely unaffected by knockback effects.

Push Force: The force that the sprite will push away other sprites that touch its hitbox. The actual amount the other sprite will be pushed depends on their mass.

Top Speed: The top speed of the sprite, measured in pixels per frame. Sprites with a speed of 0 will be unable to move under their own power. If set to -1, the sprite will not have its speed capped. WARNING: If top speed is too high, the sprite may clip through walls when moving too quickly.

Acceleration: The amount of acceleration the sprite will experience when moving. If set to -1, the sprite will instantly reach their top speed when moving.

Friction: The sprite will be slowed down by their friction amount each frame. If set to -1, the sprite will stop instantly when not actively accelerating.

Gravity: The sprite will accelerate downwards at this rate when not supported by the ground.

Terminal Velocity The top speed the sprite can accelerate downwards due to gravity.

Jump: The sprite will attain this upwards velocity when jumping.

Flight Ascent: The speed the sprite can accelerate upwards while in mid-air. Enables flying.

Climbing speed: The speed of the sprite while climbing ladders.

Hover Altitude: The sprite will automatically attempt to hover at least this number of pixels off the ground. The sprite must be capable of flight in order to actually hover. If incapable of flight but capable of jumping and the hover altitude is not 0, they will jump constantly.

Maximum Altitude: The highest the sprite is capable of flying. This is not a "hard limit" on the sprite's altitude, but they will be unable to accelerate upwards if above this level.

Turning Speed: The number of degrees the sprite is capable of turning per frame. If set to -1 (the default), the sprite will face in any direction instantly. Turning is best used with Free Rotation graphics. When the player is controlling a sprite with turning speed, the controls are different; Left and Right rotate the sprite while Up and Down move them forwards and backwards.

Back

Basic Interaction

While BoundWorlds has a lot of options for advanced users, it is quite simple to create basic interactions for simpler sprites without even opening up the Functions menu. The "Basic Interactions" menu has two sections, one determining what event should trigger the interaction and the other describing what should happen when the sprite is triggered.

Want to make a basic collectible that rewards the player with sparks? Set the sprite to trigger when touched by the player, and make it destroy itself and increase the player's spark count.

Want to make an NPC that displays a message when the player checks it? Set the sprite to trigger when checked, and make it display a message when triggered.

Want to make an enemy that transforms into a different enemy when it is defeated? Set the sprite to trigger on death, and make it transform when triggered.

And so on.

One option under basic interactions lets it trigger other sprites that have a matching "trigger code". This allows you to create interactions across multiple sprites. For example, a switch that opens all doors with a particular code when pressed. You can even chain triggers together by making the triggered sprite also have a trigger code.

While this system is quite flexible, don't go overboard with it. Once you're ready to really start adding extra functionality to your world, it's time to start working with functions.

Back

Basic Combat

Unless their team is set to 0, Sprites will fight with other sprites that belong to a team not their own. Sprites will attempt to attack and defeat any targetable unit that enters their Aggro Radius, and will continue to fight until one of the following conditions are met:

  1. The sprite or its enemy is defeated.
  2. The distance between the sprite and its target is greater than the attacker's Max Aggro.
  3. The distance between the attacker and its original position is greater than its Maximum Leash.

Aside from walking around, everything a sprite does while in combat is a technique. Most techniques have either a cooldown period or an MP cost; after using a technique the sprite must wait for it to become available again.

While waiting for its combat techniques to become available, a sprite will enter "stalking" mode. While stalking an enemy, the sprite will attempt to remain within a "ring" at a distance from its opponent greater than its Avoidance Distance, and closer than its Max Stalking distance.

Back

Roaming Behavior

The "Roaming Behavior" tab in the Class Editor determines the behavior of a sprite when not talking, fighting, or following a scripted behavior. For the most part, this amounts to walking around aimlessly.

Back

Functions and Techniques

Functions and techniques are the deepest part of BoundWorlds. Both allow you to create flexible scripts that can make your world unique!

Functions and techniques are very similar in many ways. Both are sequences of events that are run one after another; both allow classical programming operations including getting and setting variables, conditions, and loops. The events available for each are mostly the same. In addition, functions can call techniques, and techniques can call functions. However, they are fairly different in their application.

Functions are a series of events that play out in sequence. There are several built-in functions which are called at particular points during the sprite's operation, such as when it is created, when it dies, when it encounters the player, or every frame. A function will run each event in sequence, sometimes waiting for a response from the player, before moving to the next event. Functions are generally used for updating custom variables, controlling events in the room, creating conversations, or running cutscenes.

Techniques are designed to be run by the sprite's AI, or used manually by the player while playing as the sprite. They have built-in parameters for things like cooldown, MP cost, usage frequency, and the circumstances and targets on which it can be used. Unlike functions, techniques take a specific amount of time to run, and can be directly associated with an animation. While functions are run in sequence, each frame of a technique is its own function and always takes exactly one frame to complete; any event that takes multiple frames (such as a jump) will be triggered, but the function will proceed immediately to the next event. Most importantly, a sprite may only use one technique at a time; using a new technique interrupts any that are currently in use. It is also often possible to interrupt a technique by hitting the sprite with an attack. Most techniques will be used in combat, aside from those designed to be used by the player for moving around or random periodic behaviors to be used by the AI.

Back
Back

Exporting Packages

Once you have created some interesting classes or tilesets, you might want to export them for other players to make use of. To do this, you need to create a package in the World Builder. Only global classes and tilesets can be added to a package.

When you open up a new package, you can add objects to it by clicking on them in World Builder menu. Objects that make use of each other should be packaged together; for example, an entity that spawns bullets should be packaged together with those bullets, and objects that transform into other classes should be packaged along with their alternate forms. You can also package hidden objects by selecting the "hidden" option in the Class Builder. Hidden classes will not appear in the class menu, preventing players from adding them directly to a room.

While you can organize your classes in packages without saving them, you must save a package in the file system before you can make it public.

Note that editing and saving an existing package will automatically update that package in all worlds that make use of it. Saving a world that contains a package after editing the object in that package will also update it. Make sure to test changes before updating.

Nesting Packages

It is possible for packages to include other packages. This allows you to create single packages that are used by many different objects. For example, you might create multiple creatures that all make use the same special effects; instead of packaging a copy of the effects along with each creature you can put the "effects" in their own package and include the package with each creature. This will ensure that the effects are only loaded once, even if a world uses several of your creatures. This will speed up loading, make updating easier, and avoid cluttering up the class menu with duplicate objects.