Game Engine

jMaz

A game engine built from the ground up for a seamless cross-platform experience. Developed entirely in Java, without the use of external libraries.

Industry

Game Development

Stack
Java
Render Engine

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.

Lighting System

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.

Sprite System

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.

Animation System

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.

Camera System

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.

Input System

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.

Object Management System

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.

Physics Engine

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.

Collision System

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 System

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.

Stage System

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.

Audio System

The audio system allows the game engine to feature the use of background music and sound effects.

Client/Server Functionality

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.

Browse my other projects.

I've worked on countless projects throughout the years, why don't you check out a few and see what I can do?

mazen.ai

Developer Portfolio
By Mazen M.

Contact

LinkedIn