A game engine built from the ground up for a seamless cross-platform experience. Developed entirely in Java, without the use of external libraries.
Game Development
jMaz features a custom render engine built from the ground up which has the ability to render shapes, fonts, light sources, full images, and segments of images. The render engine works by iterating through the pixel data of all components and merging the pixels into a pixel map through the use of bit shifting to accurately obtain and combine all red, green, blue, and alpha (RGBA) layers.
An extension of the render engine, jMaz implements a lighting system that allows for ambient stage lighting, the creation and movement of light sources, the ability to have certain objects block light and create shadows, as well as the merging of light sources. This system works by having all light source pixel data be placed into a light map. This data is then merged along with the RGBA data in the pixel map to create a result of either dimmed or brightened pixels.
In addition to rendering full images, an image can be loaded into the engine as a sprite sheet. This sprite sheet is then split into a varying amount of segments of a specified size. The sprite sheet allows for a single image to be used in multiple different contexts.
The primary use of sprite sheets is for animation. A sprite sheet could contain various different animations where each segment of the sprite sheet is a frame for a certain action or behavior.
The camera is essentially the lens that the user sees the game through. Anything within the camera’s view is displayed in the game container viewport. The camera can focus on a specified object, and follow the object throughout the stage without displaying anything out of bounds.
An input system is used in order to catch and handle hardware inputs made by the user. The primary use of this system is to handle player movement, allowing the player to shoot projectiles, move and jump around the game environment.
The player character, projectiles, light sources, and so on, are all considered to be independent objects by the engine. The object management system updates the state and interactions of all objects and handles them accordingly. Once an object has been updated and is classified as still existing, it is passed to renderer at the end of each frame.
The physics engine defines physics within the game environment, and correctly applies it to all relevant objects. This allows for the use of gravity, acceleration, collision, and more.
Different types of objects may have different interactions when colliding with each other. The collision system handles these various types of interactions. This could range from colliding with platforms/boundaries, being hit by a projectile, or triggering an event by being in a certain area.
Projectile objects can be created at specified locations or by other specified objects. These work alongside the physics engine and object management system in order to move in the game environment and perform certain actions upon collision.
jMaz features a stage templating system that combines level design and the collision system in a straight forward manner. Stages are loaded using two images. One containing the visual elements of how the stage will appear on screen, while the other contains the tile collision data that is used to define boundaries and platforms.
The audio system allows the game engine to feature the use of background music and sound effects.
In order to support online connectivity and multiplayer features, jMaz utilizes Java’s remote method invocation (RMI) system. The jMaz client and server both share the same API which defines the operation codes and data parameters for each operation. This API allows methods within the client to remotely invoke methods on the server and receive operations in response.
Developer Portfolio
By Mazen M.