Game Boulder is a game engine built in JavaScript. I modeled this around the language a paradigms from older versions of GameMaker. This is still pretty early in it’s life, but it’s already fairly stable and competent as a game making tool.
Source
Game Boulder is open source of course! The repository is here!
Let’s play some demos!
Reference
This table contains every object and function you need to get started with Game Boulder. There’s more information on the Github page.
Type | Property | Description |
---|---|---|
EngineResource | GameEngine(String canvasSelector || Object HTMLCanvasElement, fps=24) | ID selector for canvas, game FPS |
array | GameEngine.rooms | Array of all rooms in the game, accessible to the engine. |
array | GameEngine.sprites | Array of all registered sprites. |
array | GameEngine.resources | Array of all registered files |
array | GameEngine.objects | Array of all registered objects. |
array | GameEngine.sounds | Array of all registered sounds (EngineResources, not files) |
array | GameEngine.tiles | Array of all registered tiles |
array | GameEngine.backgrounds | Array of all registered backgrounds |
function | GameEngine.generateID | Generates a new unique ID |
function | GameEngine.checkKey(String KeyEvent.type) | Function to check if key is currently being held |
function | GameEngine.checkMouse(Number mouseButton) | Function to check if mouse button is currently being held |
function | GameEngine.getEngineResources(Number any=-1 || String name || Number ID) | Returns EngineResources across all categories. If a name or ID is specified, only resources matching that name or ID will be returned. |
function | GameEngine.getSprite(Number ID=-1 || String name || EngineResource Sprite) | Returns a registered Sprite resource from a name, ID, or object. Note that Instances created using Instance() will not be retrieved. |
function | GameEngine.getObject(Number ID=-1 || String name || EngineResource GameObject) | Returns a registered Object resource from a name, ID, or object. Note that Instances created using Instance() will not be retrieved. |
function | GameEngine.addRoom(EngineResource Room) | Function to add rooms to game registry. This is done automatically when a room is created. |
function | GameEngine.getRoom(Number ID || String roomName) | Get a room object from either an ID or name |
function | GameEngine.getCurrentRoom() | Gets the currently active game room |
function | GameEngine.setCurrentRoom(Number ID || String roomName) | Switches game to a room |
function | GameEngine.importTiles(JSON tileData) | Import tileset from JSON. Useful for designing rooms in-game |
function | GameEngine.begin() | Start the game loop |
function | GameEngine.getIntersecting(x1,y1,x2,y2) | Get if two rectangles are intersecting based on their coordinates |
function | GameEngine.mDistance(Number x1, Number y1, Number x2, Number y2) | Returns Manhattan distance given two sets of coordinates. |
function | GameEngine.distance(Number x1, Number y1, Number x2, Number y2, Boolean precise=true) | Returns Pythagorean distance given two sets of coordinates, or, if precise is false, return Manhattan distance. |
function | GameEngine.getPointDirection(Number direction, Number distance) | Returns an array of the X and Y coordinates given a direction and distance (ie, direction 270 and distance 1 yields Array [0,1]). |
function | GameEngine.getPointDir(Number direction, Number distance) | Alias of GameEngine.getPointDirection |
function | GameEngine.getDirectionFromPoints(Number x1, Number y1, Number x2, Number y2) | Returns the angle in degrees from coordinate x1,y1 to coordinate x2,y2. |
function | GameEngine.choose(Array toChooseFrom) | Chooses a random element from an array. |
function | GameEngine.random(Number min=0, Number max=1) | Returns a random number between min and max. |
function | GameEngine.irandom(Number min=0, Number max=1) | Returns a random integer between min and max. |
function | GameEngine.degToRad(Number degrees) | Converts the provided degrees into radians. |
function | GameEngine.radToDeg(Number radians) | Converts the provided radians into degrees. |
object | GameEngine.draw | Collection of drawing functions to draw somewhere in a room, based on the view position, not the canvas position. |
function | GameEngine.draw.rect(Number x, Number y, Boolean fill=false, Number color=-1 || String color=””) | Draws a filled or unfilled rectangle at a given point in the room. Not supplying a color will draw it at whatever the current canvas context fill or stroke color is. |
function | GameEngine.draw.text(String text, Number x, Number y, Boolean fill=false, Number color=-1 || String color=””) | Draws a filled or unfilled text at a given point in the room. Not supplying a color will draw it at whatever the current canvas context fill or stroke color is. |
function | GameEngine.draw.arc(Number x, Number y, Number startAngle, Number endAngle, Boolean counterClockWise=false, Number color=-1 || String color=””) | Draws an arc at a given point in the room. Note that angles are in degrees, not radians. Not supplying a color will draw it at whatever the current canvas context fill or stroke color is. |
function | GameEngine.draw.ellipse(Number x, Number y, Number radiusX, Number radiusY, Number rotation, Number startAngle, Number endAngle, Boolean counterClockWise=false, Number color=-1 || String color=””) | Draws an ellipse at a given point in the room. Note that angles are in degrees, not radians. Not supplying a color will draw it at whatever the current canvas context fill or stroke color is. |
function | GameEngine.draw.image(HTMLImageElement image, Number dx, Number dy) || (HTMLImageElement image, Number dx, Number dy, Number dWidth, Number dHeight) || (HTMLImageElement image, Number sx, Number sy, Number sWidth, Number sHeight, Number dx, Number dy, Number dWidth, Number dHeight) | Draws an image at a given point in the room. See the MDN for a more detailed reference on the arguments. |
function | GameEngine.draw.line(Array coordinates[Array [Number x, Number y],…], Number width=1, Number color=1 || String color=””) | Draws a line or lines between all coordinates provided in the coordinates argument. Not supplying a color will draw it at whatever the current canvas context fill or stroke color is. |
number | GameEngine.currentRoom | Array index of current active game room. |
number | GameEngine.fps | Framerate at which the game will run |
object | GameEngine.debug | Debug flags |
object | GameEngine.engine | Object containing utilities and canvas data |
object | GameEngine.engine.ctx | Reference to 2D context. Can be used to draw to the canvas natively. |
object | GameEngine.engine.importResource(String fileName, forceNewResource=false) | Adds a file resource to the game’s resource registry. This is mainly called internally. |
string | GameEngine.status | Current gamestate |
EngineResource | GameObject(String name, Number x=0, Number y=0, EngineResource Sprite=-1, Function onstep=-1, Function ondraw=-1, Boolean visible=true, Boolean active=true, Array collisionBox=false || Boolean collisionBox=false, Number depth=0) | Building block of game interactivity. |
array | GameObject.collisionBox | Coordinates to use when checking for collisions. Defaults to sprite width/height or 16×16 if no sprite is specified. collisionBox entries are [x,y,width,height]. |
boolean | GameObject.visible | Whether the object should draw a sprite and perform its draw event |
function | GameObject.onstep() | Custom event to execute every game step (frame) |
function | GameObject.getCoordinates(Boolean object=true) | Returns an object with the values of this objects x1, x2, y1, and y2, based on its location and collision box. |
function | GameObject.getCoords(Boolean object=true) | Alias of GameObject.getCoordinates. |
function | GameObject.getCollisions(solidOnly=false, offsetX = 0, offsetY = 0) | Returns an array of all objects this object is currently overlapping with. Solid only specifies whether to check for collisions with all objects, or just ones marked solid. offsetX and offsetY indicate offsets from the current location of the collisionBox. |
function | GameObject.wrap(wrapX=true,wrapY=true) | Checks to see if an object is outside of the room, and if it is, will move the object to the other side. Specifying wrapX and wrapY will determine which axes the object should wrap on. |
function | GameObject.ondraw() | Custom event to execute every game draw (frame) |
function | GameObject.ondestroy() | Custom event to execute when the GameObject is destroyed via destroy() |
function | GameObject.onkeypress(KeyboardEvent ev) | Custom event to handle key presses. This recieves input events from native JavaScript event listeners. The first argument provides the data from the event. |
function | GameObject.onkeyup(KeyboardEvent ev) | Custom event to handle key releases. This recieves input events from native JavaScript event listeners. The first argument provides the data from the event. |
function | GameObject.onkeydown(KeyboardEvent ev) | Custom event to handle key downs. This recieves input events from native JavaScript event listeners. The first argument provides the data from the event. |
function | GameObject.onmousedown(KeyboardEvent ev, Boolean local) | Custom event to handle mouse presses. This recieves input events from native JavaScript event listeners. The first argument provides the data from the event. The local argument indicates whether the mouse event occured over the objects collision box. |
function | GameObject.onmouseup(KeyboardEvent ev, Boolean local) | Custom event to handle mouse releases. This recieves input events from native JavaScript event listeners. The first argument provides the data from the event. The local argument indicates whether the mouse event occured over the objects collision box. |
function | GameObject.onmousemove(KeyboardEvent ev, Boolean local) | Custom event to handle mouse movement. This recieves input events from native JavaScript event listeners. The first argument provides the data from the event. The local argument indicates whether the mouse event occured over the objects collision box. |
function | GameObject.oncontextmenu(KeyboardEvent ev, Boolean local) | Custom event to handle right clicks. This recieves input events from native JavaScript event listeners. The first argument provides the data from the event. The local argument indicates whether the mouse event occured over the objects collision box. |
function | GameObject.generatePath(Number x, Number y, Number gridWidth, number gridHeight) | Generate a path to a given location on a certain grid, avoiding solid objects. Note that this is an extremely performance-heavy function and should only be called when needed. Using a larger gridWidth/gridHeight decreases the performance cost, but lowers the path resolution.. |
function | GameObject.pathStep(Number speed=0) | Take a step to/towards the next step in the path generated by generatePath(). A speed of 0 will make the object jump to its next coordinate. A non-zero speed will make the object execute moveTowardsPoint() towards its next path coordinate. |
function | GameObject.moveTowardsPoint(Number x, Number y, Number speed) | Move towards given coordinates, ignoring objects in the way |
function | GameObject.moveInDirection(Number direction, Number speed) | Move at a given speed in a given direction (degrees) |
function | GameObject.moveContactSolid(Number direction, Number maxDistance=-1) | Move this GameObject in a given direction until it has come in contact with a solid object. If it does not reach a solid object in less than the maxDistance, it will not move. A maxDistance of -1 will move the object until it finds a solidObject, or until it is outside of the room. Returns false if no solid is contacted. |
function | GameObject.snapToGrid(Number gridWidth=room.gridWidth, Number gridHeight=room.gridHeight) | Snaps the GameObject’s x and y coordinates to a specified grid. |
function | GameObject.getOutsideRoom() | Returns true if the outside of the current room’s bounds. |
function | GameObject.getOutsideView() | Returns true if the outside of the current view’s bounds. |
function | GameObject.setSprite(String spriteName || Number ID || EngineResource Sprite, Number frameX=-1, Number frameY=-1, Number speed=-1, Number scaleX=-1, Number scaleY=-1) | Changes the GameObject’s sprite IF the sprite is different from the object’s current sprite. Specifying -1 for any of the optional arguments will leave the value unchanged for the current sprite. |
function | GameObject.setDepth(Number z=0) | Set the position in the draw order (z-index) |
function | GameObject.destroy() | Remove this object from the current room |
function | GameObject.deactivate() | Prevent this object from performing any of its actions or drawing without removing it from the room. |
function | GameObject.activate() | Reactivate the object |
number | GameObject.x | X coordinate of object in room |
number | GameObject.y | Y coordinate of object in room | number | GameObject.xstart | The X starting coordinate of an object, set when the object is created. | number | GameObject.ystart | The Y starting coordinate of an object, set when the object is created. | number | GameObject.xprevious | The X position this object occupied prior to its current position. | number | GameObject.yprevious | The Y position this object occupied prior to its current position. |
number | GameObject.sprite | EngineResource Sprite to draw at the GameObject’s position in the room |
number | GameObject.hspeed | Horizontal speed |
number | GameObject.vspeed | Vertical speed |
number | GameObject.friction | Friction to apply to object’s movements |
number | GameObject.gravity | Gravity to apply to object |
number | GameObject.gravityDirection | Direction of gravity to apply |
number | GameObject.fallSpeed | The current speed at which an object is falling in the direction of its specified gravity. |
number | GameObject.terminalVelocity | The maximum fallSpeed an object can achieve. |
number | GameObject.id | Internal unique ID |
object | GameObject.path | Path generated by generatePath() |
object | GameObject.tags | Object containing tag data related to the object. Tag data can be used to apply identifying properties to an object. |
function | GameObject.tags.list() | Returns all tags for the current GameObject. |
function | GameObject.tags.has(String tagName) | Checks to see if the GameObject has a specific tag. Returns true if the tag is found, and false if it is not. |
function | GameObject.tags.get(String tagName) | Gets the index of the tag in the GameObjects tag array. |
function | GameObject.tags.add(String tagName) | Adds a tag to the GameObject. Returns false if the tag is already present. |
function | GameObject.tags.push(String tagName) | Alias of GameObject.tags.add |
function | GameObject.tags.remove(String tagName) | Removes a tag from the GameObject. Returns the new list of tags. |
string | GameObject.name | String used to identify the object in a room |
EngineResource | Instance(String EngineResource.name || Number EngineResource.id || Object EngineResource || Object object | Creates a deep copy of an EngineResource. Note that no references are passed to the new object with the exception of HTML resources. For performance reasons, it is recommended that you use the Instance resource sparingly, and instead create instances using constructor functions. |
EngineResource | Room(String roomName, Number width = 1280, Number height = 720, Number gridX=32, Number gridY=32, Array roomObjects = [], Array tiles=[], EngineResource Background) || String color) | |
array | roomObjects | All objects currently in the room |
array | Room.tiles | All tiles currently in the room |
function | Room.addObject(EngineResource GameObject, Boolean copy=false, sortDepth=true) | Adds an object to this room. Specifying that it should be a copy will create a shallow copy of the object. It is recommended you create constructor functions for objects that need instances. sortDepth will cause the room to adjust the depth order according to the new object’s depth. If the object’s depth doesn’t matter, setting sortDepth to false will slightly improve performance. |
function | Room.getObject(String objectName || Number ID) | Get an object in the room given an ID or object name. If there are multiple objects with the name, it will return the first in the room array. |
function | Room.getObjects(String objectName || String[] objectName) | Get an array of instances of an object in the room given an object name, or array of object names. |
function | Room.getTilesAt(Number x, Number y, Boolean solidOnly = false, Number width = 1, Number height = 1) | Get all tiles at a given location |
function | Room.getObjectsAt(Number x, Number y, Boolean solidOnly = false, Number width = 1, Number height = 1, Array ignoreObjects[String objectName || Number ID]=[]) | Get all objects at a given location, within a given width. Adding objects to the ignoreObjects argument will exclude them from the search. |
function | Room.getAllAt(Number x, Number y, Boolean solidOnly = false, Number width = 1, Number height = 1) | Get all objects and tiles at a given location |
function | Room.checkEmpty(Number x, Number y, Boolean solidOnly = false, Number width = 1, Number height = 1) | Check if there is anything at a given location |
number | Room.width | Playable room width |
number | Room.height | Playable room height |
number | Room.gridX | Grid X dimension |
number | Room.gridY | Grid Y dimension |
number | Room.view.x | X to start drawing from |
number | Room.view.y | Y to start drawing from |
number | Room.view.width | Width of view to draw to |
number | Room.view.height | Height of view to draw to |
number | Room.id | Internal unique ID |
object | Room.background | EngineResource Background to draw behind room |
object | Room.view | Object containing variables related to how the room is displayed on the canvas |
string | Room.name | String used to identify the object in a room |
string | Room.view.objectName | Object to follow with view |
EngineResource | Sprite(String spriteName, Number sheetX = 0, Number sheetY = 0, Number sheetWidth = 16, Number sheetHeight=16, Number drawWidth=16, Number drawHeight=16, Number animationSpeed = 1, Boolean forceNewResource=false) | An image loaded from an image file used to draw tiles, objects, and backgrounds. Sprites can be from sheets, or use entire images. They can be animated, or still. |
boolean | Sprite.resource | File resource from image |
function | Sprite.draw(Number x, Number y) | Draws the sprite. This is usually called automatically. |
function | Sprite.setFrame(Number frameX=0, Number frameY=0) | Jumps the sprite to a given X and Y frame in its animation. |
number | Sprite.speed | Animation speed, if applicable |
number | Sprite.sheetX | X to start taking sprite from. This is primarily for sprite sheets where the sprite you want to draw may not be at position 0,0. For animations, specify an array of X positions. |
number | Sprite.sheetY | Y to start taking sprite from. This is primarily for sprite sheets where the sprite you want to draw may not be at position 0,0. For animations, specify an array of Y positions. |
number | Sprite.sheetWidth | Width of sprite on the sheet. This is primarily for sprite sheets where the sprite you want to draw may be smaller than the entire sheet. |
number | Sprite.sheetHeight | Height of sprite on the sheet. This is primarily for sprite sheets where the sprite you want to draw may be smaller than the entire sheet. |
number | Sprite.drawWidth | Actual width to draw sprite in room. This will scale the sprite. |
number | Sprite.drawHeight | Actual height to draw sprite in room. This will scale the sprite. |
number | Sprite.scaleX | The X scale at which to draw the sprite. Supplying a negative value will cause the image to flip. |
number | Sprite.scaleY | The Y scale at which to draw the sprite. Supplying a negative value will cause the image to flip. |
number | Sprite.id | Internal unique ID |
string | Sprite.name | String used to identify the sprite |
string | Sprite.fileName | Location of file containing image or images |
EngineResource | Background(String color, EngineResource Sprite=-1, Boolean tiled=true) | An image or color to be drawn in a room behind all objects and tiles. |
string | Background.color | Color to draw to in room, if no sprite is present. |
string | Background.colour | Alias of color for our friends across the pond. |
number | Background.sprite | EngineResource Sprite to draw in room, either tiled or not. |
boolean | Background.tiled | Whether or not to tile the sprite in the room, if it is not larger than the room. |
function() | Background.draw | Draw the background. This is usually called automatically. |
EngineResource | Tile(String name, EngineResource Sprite=EngineResource Sprite(), Number x=0, Number y=0, Boolean solid=false, Array properties=[]) | Decorative element to be drawn in a room. Like an object, these can be pathable, but they cannot have scripts or events attached to them. |
array | Tile.properties | Properties to help identify this tile. Useful for water or terrain properties. |
boolean | Tile.solid | Whether this tile should affect pathfinding |
function | Tile.destroy() | Remove this tile from the current room. |
number | Tile.x | X coordinate of tile in room |
number | Tile.y | Y coordinate of tile in room |
number | Tile.id | Internal unique ID |
object | Tile.sprite | EngineResource Sprite to draw at the Tiles position in the room |
string | Tile.name | String used to identify the object in a room |
EngineResource | Sound(String soundName, String fileName, Number volume=1,Boolean forceNewResource=false) | EngineResource to play audio in game. |
boolean | Sound.resource | JS file resource from sound |
function | Sound.play(Number volume) | Plays the sound |
function | Sound.loop() | Plays the sound, looping on completion |
function | Sound.pause() | Pauses the sound, retaining its current playback position |
function | Sound.stop() | Stops playing the sound, losing its current playback position |
function | Sound.seek(Number time) | Seeks to a point in the sound |
function | Sound.setVolume(Number volume) | Set the volume at which to play the sound |
function | Sound.mute() | Mutes the sound, remembering previous volume |
function | Sound.unmute() | Unmutes the sound, returning its playback to its previous volume |
function | Sound.setSpeed(Number speed) | Sets the speed at which to play the sound |
number | Sound.id | Internal unique ID |
string | Sound.name | String used to identify the Sound |
string | Sound.fileName | Location of file containing sound |