Repository files navigation

JP Engine

This repository contains a custom game engine and a sample 2D platfomer game demonstrating its features. The engine provides foundational components for building 2D games, including scene management, rendering, basic physics, input handling, and resource management.

Are you interested in learning how to build the project from scratch? Check out the JP Engine Guide!

Core Engine Components

The engine is built upon several key modules:

  • Application (app): The main entry point and core orchestrator. It manages the game loop, window creation and handling, and owns the root of the scene graph.
  • Scene Graph (node, layer): The game world is structured as a tree of Node objects. Each Node can have a parent and multiple children, facilitating hierarchical transformations and event propagation (update, render). Nodes manage their own insertion/removal and recursively handle updates and rendering for their children. Layer provides a mechanism to group nodes (e.g., separating game elements from UI) for potentially different processing or rendering passes.
  • Rendering (camera, sprite_sheet_animation, tilemap, tileset, tile):
    • Camera: Manages the viewport and view transformations, defining what part of the game world is visible.
    • Sprite & Animation: SpriteSheetAnimation handles frame-by-frame animation using texture sheets.
    • Tile System: Tilemap efficiently manages and renders large grids of Tile objects, defined within a Tileset which groups tiles from a single texture sheet.
  • Physics (physics, collider, circle_collider, rectangle_collider): A basic physics simulation layer (Physics) manages collision detection. It uses an abstract Collider base class with concrete implementations like CircleCollider (radius-based) and RectangleCollider (rectangle-based).
  • Input (input): Handles keyboard input, providing functions to query the state of keys (pressed, released, held).
  • Resource Management (resource_manager): Loads and manages game assets like textures, fonts, and sounds. It acts as a cache to avoid redundant disk I/O operations when assets are requested multiple times.
  • State Management (fsm, state, transition): A generic Finite State Machine (FSM) implementation. It uses State objects (with entry, update, exit logic) and Transition objects (defining conditions to move between states). In the sample game, this is used for managing animations.
  • Utilities (derived): Includes helper components, such as derived for enforcing generic type constraints.

Sample 2D Platformer Game Components

A sample platformer-style game is included to demonstrate the engine's usage. It covers most of essential functionalities that the engine provides, making it a perfect fit for those who like learning hands-on.

The demo game features:

  • Entry Point (main): Initializes the engine's App and starts the game.
  • Scene Setup (default_scene, background):default_scene constructs the entire game level layout, including placing the background.
  • Player (player): The controllable player character.
  • Camera Control (follow_player): A component likely attached to the Camera node to make it follow the player (player).
  • Enemies (mushroom, plant, plant_bullet): Different types of enemies with their specific behaviors and projectiles (plant_bullet).
  • Collectibles (banana): Items the player can collect, represented as bananas.
  • Level Goal (end): Represents the end-of-level trigger or object (e.g., the cup).
  • Game Logic (game_manager, score_manager):
    • GameManager: Tracks and controls the overall state of the game (e.g., playing, paused, won, lost).
    • ScoreManager: Manages the player's score and updates the UI display.
  • User Interface (win_canvas, lose_canvas): UI screens displayed on game win or game lose conditions.

Win

Win

The goal of the character is to reach the "end cup" while avoiding to fall or to take damage from the various enemies along the way.

Loss

DeathFall

DeathMushroom

DeathPlantBullet

About

JP (JumP) Engine – Simple cross-platform 2D game engine based on SFML

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

JP Engine

This repository contains a custom game engine and a sample 2D platfomer game demonstrating its features. The engine provides foundational components for building 2D games, including scene management, rendering, basic physics, input handling, and resource management.

Are you interested in learning how to build the project from scratch? Check out the JP Engine Guide!

Core Engine Components

The engine is built upon several key modules:

  • Application (app): The main entry point and core orchestrator. It manages the game loop, window creation and handling, and owns the root of the scene graph.
  • Scene Graph (node, layer): The game world is structured as a tree of Node objects. Each Node can have a parent and multiple children, facilitating hierarchical transformations and event propagation (update, render). Nodes manage their own insertion/removal and recursively handle updates and rendering for their children. Layer provides a mechanism to group nodes (e.g., separating game elements from UI) for potentially different processing or rendering passes.
  • Rendering (camera, sprite_sheet_animation, tilemap, tileset, tile):
    • Camera: Manages the viewport and view transformations, defining what part of the game world is visible.
    • Sprite & Animation: SpriteSheetAnimation handles frame-by-frame animation using texture sheets.
    • Tile System: Tilemap efficiently manages and renders large grids of Tile objects, defined within a Tileset which groups tiles from a single texture sheet.
  • Physics (physics, collider, circle_collider, rectangle_collider): A basic physics simulation layer (Physics) manages collision detection. It uses an abstract Collider base class with concrete implementations like CircleCollider (radius-based) and RectangleCollider (rectangle-based).
  • Input (input): Handles keyboard input, providing functions to query the state of keys (pressed, released, held).
  • Resource Management (resource_manager): Loads and manages game assets like textures, fonts, and sounds. It acts as a cache to avoid redundant disk I/O operations when assets are requested multiple times.
  • State Management (fsm, state, transition): A generic Finite State Machine (FSM) implementation. It uses State objects (with entry, update, exit logic) and Transition objects (defining conditions to move between states). In the sample game, this is used for managing animations.
  • Utilities (derived): Includes helper components, such as derived for enforcing generic type constraints.

Sample 2D Platformer Game Components

A sample platformer-style game is included to demonstrate the engine's usage. It covers most of essential functionalities that the engine provides, making it a perfect fit for those who like learning hands-on.

The demo game features:

  • Entry Point (main): Initializes the engine's App and starts the game.
  • Scene Setup (default_scene, background):default_scene constructs the entire game level layout, including placing the background.
  • Player (player): The controllable player character.
  • Camera Control (follow_player): A component likely attached to the Camera node to make it follow the player (player).
  • Enemies (mushroom, plant, plant_bullet): Different types of enemies with their specific behaviors and projectiles (plant_bullet).
  • Collectibles (banana): Items the player can collect, represented as bananas.
  • Level Goal (end): Represents the end-of-level trigger or object (e.g., the cup).
  • Game Logic (game_manager, score_manager):
    • GameManager: Tracks and controls the overall state of the game (e.g., playing, paused, won, lost).
    • ScoreManager: Manages the player's score and updates the UI display.
  • User Interface (win_canvas, lose_canvas): UI screens displayed on game win or game lose conditions.

Win

Win

The goal of the character is to reach the "end cup" while avoiding to fall or to take damage from the various enemies along the way.

Loss

DeathFall

DeathMushroom

DeathPlantBullet

About

JP (JumP) Engine – Simple cross-platform 2D game engine based on SFML

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

JP Engine

This repository contains a custom game engine and a sample 2D platfomer game demonstrating its features. The engine provides foundational components for building 2D games, including scene management, rendering, basic physics, input handling, and resource management.

Are you interested in learning how to build the project from scratch? Check out the JP Engine Guide!

Core Engine Components

The engine is built upon several key modules:

  • Application (app): The main entry point and core orchestrator. It manages the game loop, window creation and handling, and owns the root of the scene graph.
  • Scene Graph (node, layer): The game world is structured as a tree of Node objects. Each Node can have a parent and multiple children, facilitating hierarchical transformations and event propagation (update, render). Nodes manage their own insertion/removal and recursively handle updates and rendering for their children. Layer provides a mechanism to group nodes (e.g., separating game elements from UI) for potentially different processing or rendering passes.
  • Rendering (camera, sprite_sheet_animation, tilemap, tileset, tile):
    • Camera: Manages the viewport and view transformations, defining what part of the game world is visible.
    • Sprite & Animation: SpriteSheetAnimation handles frame-by-frame animation using texture sheets.
    • Tile System: Tilemap efficiently manages and renders large grids of Tile objects, defined within a Tileset which groups tiles from a single texture sheet.
  • Physics (physics, collider, circle_collider, rectangle_collider): A basic physics simulation layer (Physics) manages collision detection. It uses an abstract Collider base class with concrete implementations like CircleCollider (radius-based) and RectangleCollider (rectangle-based).
  • Input (input): Handles keyboard input, providing functions to query the state of keys (pressed, released, held).
  • Resource Management (resource_manager): Loads and manages game assets like textures, fonts, and sounds. It acts as a cache to avoid redundant disk I/O operations when assets are requested multiple times.
  • State Management (fsm, state, transition): A generic Finite State Machine (FSM) implementation. It uses State objects (with entry, update, exit logic) and Transition objects (defining conditions to move between states). In the sample game, this is used for managing animations.
  • Utilities (derived): Includes helper components, such as derived for enforcing generic type constraints.

Sample 2D Platformer Game Components

A sample platformer-style game is included to demonstrate the engine's usage. It covers most of essential functionalities that the engine provides, making it a perfect fit for those who like learning hands-on.

The demo game features:

  • Entry Point (main): Initializes the engine's App and starts the game.
  • Scene Setup (default_scene, background):default_scene constructs the entire game level layout, including placing the background.
  • Player (player): The controllable player character.
  • Camera Control (follow_player): A component likely attached to the Camera node to make it follow the player (player).
  • Enemies (mushroom, plant, plant_bullet): Different types of enemies with their specific behaviors and projectiles (plant_bullet).
  • Collectibles (banana): Items the player can collect, represented as bananas.
  • Level Goal (end): Represents the end-of-level trigger or object (e.g., the cup).
  • Game Logic (game_manager, score_manager):
    • GameManager: Tracks and controls the overall state of the game (e.g., playing, paused, won, lost).
    • ScoreManager: Manages the player's score and updates the UI display.
  • User Interface (win_canvas, lose_canvas): UI screens displayed on game win or game lose conditions.

Win

Win

The goal of the character is to reach the "end cup" while avoiding to fall or to take damage from the various enemies along the way.

Loss

DeathFall

DeathMushroom

DeathPlantBullet

About

JP (JumP) Engine – Simple cross-platform 2D game engine based on SFML

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

JP Engine

This repository contains a custom game engine and a sample 2D platfomer game demonstrating its features. The engine provides foundational components for building 2D games, including scene management, rendering, basic physics, input handling, and resource management.

Are you interested in learning how to build the project from scratch? Check out the JP Engine Guide!

Core Engine Components

The engine is built upon several key modules:

  • Application (app): The main entry point and core orchestrator. It manages the game loop, window creation and handling, and owns the root of the scene graph.
  • Scene Graph (node, layer): The game world is structured as a tree of Node objects. Each Node can have a parent and multiple children, facilitating hierarchical transformations and event propagation (update, render). Nodes manage their own insertion/removal and recursively handle updates and rendering for their children. Layer provides a mechanism to group nodes (e.g., separating game elements from UI) for potentially different processing or rendering passes.
  • Rendering (camera, sprite_sheet_animation, tilemap, tileset, tile):
    • Camera: Manages the viewport and view transformations, defining what part of the game world is visible.
    • Sprite & Animation: SpriteSheetAnimation handles frame-by-frame animation using texture sheets.
    • Tile System: Tilemap efficiently manages and renders large grids of Tile objects, defined within a Tileset which groups tiles from a single texture sheet.
  • Physics (physics, collider, circle_collider, rectangle_collider): A basic physics simulation layer (Physics) manages collision detection. It uses an abstract Collider base class with concrete implementations like CircleCollider (radius-based) and RectangleCollider (rectangle-based).
  • Input (input): Handles keyboard input, providing functions to query the state of keys (pressed, released, held).
  • Resource Management (resource_manager): Loads and manages game assets like textures, fonts, and sounds. It acts as a cache to avoid redundant disk I/O operations when assets are requested multiple times.
  • State Management (fsm, state, transition): A generic Finite State Machine (FSM) implementation. It uses State objects (with entry, update, exit logic) and Transition objects (defining conditions to move between states). In the sample game, this is used for managing animations.
  • Utilities (derived): Includes helper components, such as derived for enforcing generic type constraints.

Sample 2D Platformer Game Components

A sample platformer-style game is included to demonstrate the engine's usage. It covers most of essential functionalities that the engine provides, making it a perfect fit for those who like learning hands-on.

The demo game features:

  • Entry Point (main): Initializes the engine's App and starts the game.
  • Scene Setup (default_scene, background):default_scene constructs the entire game level layout, including placing the background.
  • Player (player): The controllable player character.
  • Camera Control (follow_player): A component likely attached to the Camera node to make it follow the player (player).
  • Enemies (mushroom, plant, plant_bullet): Different types of enemies with their specific behaviors and projectiles (plant_bullet).
  • Collectibles (banana): Items the player can collect, represented as bananas.
  • Level Goal (end): Represents the end-of-level trigger or object (e.g., the cup).
  • Game Logic (game_manager, score_manager):
    • GameManager: Tracks and controls the overall state of the game (e.g., playing, paused, won, lost).
    • ScoreManager: Manages the player's score and updates the UI display.
  • User Interface (win_canvas, lose_canvas): UI screens displayed on game win or game lose conditions.

Win

Win

The goal of the character is to reach the "end cup" while avoiding to fall or to take damage from the various enemies along the way.

Loss

DeathFall

DeathMushroom

DeathPlantBullet

About

JP (JumP) Engine – Simple cross-platform 2D game engine based on SFML

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

JP Engine

This repository contains a custom game engine and a sample 2D platfomer game demonstrating its features. The engine provides foundational components for building 2D games, including scene management, rendering, basic physics, input handling, and resource management.

Are you interested in learning how to build the project from scratch? Check out the JP Engine Guide!

Core Engine Components

The engine is built upon several key modules:

  • Application (app): The main entry point and core orchestrator. It manages the game loop, window creation and handling, and owns the root of the scene graph.
  • Scene Graph (node, layer): The game world is structured as a tree of Node objects. Each Node can have a parent and multiple children, facilitating hierarchical transformations and event propagation (update, render). Nodes manage their own insertion/removal and recursively handle updates and rendering for their children. Layer provides a mechanism to group nodes (e.g., separating game elements from UI) for potentially different processing or rendering passes.
  • Rendering (camera, sprite_sheet_animation, tilemap, tileset, tile):
    • Camera: Manages the viewport and view transformations, defining what part of the game world is visible.
    • Sprite & Animation: SpriteSheetAnimation handles frame-by-frame animation using texture sheets.
    • Tile System: Tilemap efficiently manages and renders large grids of Tile objects, defined within a Tileset which groups tiles from a single texture sheet.
  • Physics (physics, collider, circle_collider, rectangle_collider): A basic physics simulation layer (Physics) manages collision detection. It uses an abstract Collider base class with concrete implementations like CircleCollider (radius-based) and RectangleCollider (rectangle-based).
  • Input (input): Handles keyboard input, providing functions to query the state of keys (pressed, released, held).
  • Resource Management (resource_manager): Loads and manages game assets like textures, fonts, and sounds. It acts as a cache to avoid redundant disk I/O operations when assets are requested multiple times.
  • State Management (fsm, state, transition): A generic Finite State Machine (FSM) implementation. It uses State objects (with entry, update, exit logic) and Transition objects (defining conditions to move between states). In the sample game, this is used for managing animations.
  • Utilities (derived): Includes helper components, such as derived for enforcing generic type constraints.

Sample 2D Platformer Game Components

A sample platformer-style game is included to demonstrate the engine's usage. It covers most of essential functionalities that the engine provides, making it a perfect fit for those who like learning hands-on.

The demo game features:

  • Entry Point (main): Initializes the engine's App and starts the game.
  • Scene Setup (default_scene, background):default_scene constructs the entire game level layout, including placing the background.
  • Player (player): The controllable player character.
  • Camera Control (follow_player): A component likely attached to the Camera node to make it follow the player (player).
  • Enemies (mushroom, plant, plant_bullet): Different types of enemies with their specific behaviors and projectiles (plant_bullet).
  • Collectibles (banana): Items the player can collect, represented as bananas.
  • Level Goal (end): Represents the end-of-level trigger or object (e.g., the cup).
  • Game Logic (game_manager, score_manager):
    • GameManager: Tracks and controls the overall state of the game (e.g., playing, paused, won, lost).
    • ScoreManager: Manages the player's score and updates the UI display.
  • User Interface (win_canvas, lose_canvas): UI screens displayed on game win or game lose conditions.

Win

Win

The goal of the character is to reach the "end cup" while avoiding to fall or to take damage from the various enemies along the way.

Loss

DeathFall

DeathMushroom

DeathPlantBullet

About

JP (JumP) Engine – Simple cross-platform 2D game engine based on SFML

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

JP Engine

This repository contains a custom game engine and a sample 2D platfomer game demonstrating its features. The engine provides foundational components for building 2D games, including scene management, rendering, basic physics, input handling, and resource management.

Are you interested in learning how to build the project from scratch? Check out the JP Engine Guide!

Core Engine Components

The engine is built upon several key modules:

  • Application (app): The main entry point and core orchestrator. It manages the game loop, window creation and handling, and owns the root of the scene graph.
  • Scene Graph (node, layer): The game world is structured as a tree of Node objects. Each Node can have a parent and multiple children, facilitating hierarchical transformations and event propagation (update, render). Nodes manage their own insertion/removal and recursively handle updates and rendering for their children. Layer provides a mechanism to group nodes (e.g., separating game elements from UI) for potentially different processing or rendering passes.
  • Rendering (camera, sprite_sheet_animation, tilemap, tileset, tile):
    • Camera: Manages the viewport and view transformations, defining what part of the game world is visible.
    • Sprite & Animation: SpriteSheetAnimation handles frame-by-frame animation using texture sheets.
    • Tile System: Tilemap efficiently manages and renders large grids of Tile objects, defined within a Tileset which groups tiles from a single texture sheet.
  • Physics (physics, collider, circle_collider, rectangle_collider): A basic physics simulation layer (Physics) manages collision detection. It uses an abstract Collider base class with concrete implementations like CircleCollider (radius-based) and RectangleCollider (rectangle-based).
  • Input (input): Handles keyboard input, providing functions to query the state of keys (pressed, released, held).
  • Resource Management (resource_manager): Loads and manages game assets like textures, fonts, and sounds. It acts as a cache to avoid redundant disk I/O operations when assets are requested multiple times.
  • State Management (fsm, state, transition): A generic Finite State Machine (FSM) implementation. It uses State objects (with entry, update, exit logic) and Transition objects (defining conditions to move between states). In the sample game, this is used for managing animations.
  • Utilities (derived): Includes helper components, such as derived for enforcing generic type constraints.

Sample 2D Platformer Game Components

A sample platformer-style game is included to demonstrate the engine's usage. It covers most of essential functionalities that the engine provides, making it a perfect fit for those who like learning hands-on.

The demo game features:

  • Entry Point (main): Initializes the engine's App and starts the game.
  • Scene Setup (default_scene, background):default_scene constructs the entire game level layout, including placing the background.
  • Player (player): The controllable player character.
  • Camera Control (follow_player): A component likely attached to the Camera node to make it follow the player (player).
  • Enemies (mushroom, plant, plant_bullet): Different types of enemies with their specific behaviors and projectiles (plant_bullet).
  • Collectibles (banana): Items the player can collect, represented as bananas.
  • Level Goal (end): Represents the end-of-level trigger or object (e.g., the cup).
  • Game Logic (game_manager, score_manager):
    • GameManager: Tracks and controls the overall state of the game (e.g., playing, paused, won, lost).
    • ScoreManager: Manages the player's score and updates the UI display.
  • User Interface (win_canvas, lose_canvas): UI screens displayed on game win or game lose conditions.

Win

Win

The goal of the character is to reach the "end cup" while avoiding to fall or to take damage from the various enemies along the way.

Loss

DeathFall

DeathMushroom

DeathPlantBullet

About

JP (JumP) Engine – Simple cross-platform 2D game engine based on SFML

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

JP Engine

This repository contains a custom game engine and a sample 2D platfomer game demonstrating its features. The engine provides foundational components for building 2D games, including scene management, rendering, basic physics, input handling, and resource management.

Are you interested in learning how to build the project from scratch? Check out the JP Engine Guide!

Core Engine Components

The engine is built upon several key modules:

  • Application (app): The main entry point and core orchestrator. It manages the game loop, window creation and handling, and owns the root of the scene graph.
  • Scene Graph (node, layer): The game world is structured as a tree of Node objects. Each Node can have a parent and multiple children, facilitating hierarchical transformations and event propagation (update, render). Nodes manage their own insertion/removal and recursively handle updates and rendering for their children. Layer provides a mechanism to group nodes (e.g., separating game elements from UI) for potentially different processing or rendering passes.
  • Rendering (camera, sprite_sheet_animation, tilemap, tileset, tile):
    • Camera: Manages the viewport and view transformations, defining what part of the game world is visible.
    • Sprite & Animation: SpriteSheetAnimation handles frame-by-frame animation using texture sheets.
    • Tile System: Tilemap efficiently manages and renders large grids of Tile objects, defined within a Tileset which groups tiles from a single texture sheet.
  • Physics (physics, collider, circle_collider, rectangle_collider): A basic physics simulation layer (Physics) manages collision detection. It uses an abstract Collider base class with concrete implementations like CircleCollider (radius-based) and RectangleCollider (rectangle-based).
  • Input (input): Handles keyboard input, providing functions to query the state of keys (pressed, released, held).
  • Resource Management (resource_manager): Loads and manages game assets like textures, fonts, and sounds. It acts as a cache to avoid redundant disk I/O operations when assets are requested multiple times.
  • State Management (fsm, state, transition): A generic Finite State Machine (FSM) implementation. It uses State objects (with entry, update, exit logic) and Transition objects (defining conditions to move between states). In the sample game, this is used for managing animations.
  • Utilities (derived): Includes helper components, such as derived for enforcing generic type constraints.

Sample 2D Platformer Game Components

A sample platformer-style game is included to demonstrate the engine's usage. It covers most of essential functionalities that the engine provides, making it a perfect fit for those who like learning hands-on.

The demo game features:

  • Entry Point (main): Initializes the engine's App and starts the game.
  • Scene Setup (default_scene, background):default_scene constructs the entire game level layout, including placing the background.
  • Player (player): The controllable player character.
  • Camera Control (follow_player): A component likely attached to the Camera node to make it follow the player (player).
  • Enemies (mushroom, plant, plant_bullet): Different types of enemies with their specific behaviors and projectiles (plant_bullet).
  • Collectibles (banana): Items the player can collect, represented as bananas.
  • Level Goal (end): Represents the end-of-level trigger or object (e.g., the cup).
  • Game Logic (game_manager, score_manager):
    • GameManager: Tracks and controls the overall state of the game (e.g., playing, paused, won, lost).
    • ScoreManager: Manages the player's score and updates the UI display.
  • User Interface (win_canvas, lose_canvas): UI screens displayed on game win or game lose conditions.

Win

Win

The goal of the character is to reach the "end cup" while avoiding to fall or to take damage from the various enemies along the way.

Loss

DeathFall

DeathMushroom

DeathPlantBullet

About

JP (JumP) Engine – Simple cross-platform 2D game engine based on SFML

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

JP Engine

This repository contains a custom game engine and a sample 2D platfomer game demonstrating its features. The engine provides foundational components for building 2D games, including scene management, rendering, basic physics, input handling, and resource management.

Are you interested in learning how to build the project from scratch? Check out the JP Engine Guide!

Core Engine Components

The engine is built upon several key modules:

  • Application (app): The main entry point and core orchestrator. It manages the game loop, window creation and handling, and owns the root of the scene graph.
  • Scene Graph (node, layer): The game world is structured as a tree of Node objects. Each Node can have a parent and multiple children, facilitating hierarchical transformations and event propagation (update, render). Nodes manage their own insertion/removal and recursively handle updates and rendering for their children. Layer provides a mechanism to group nodes (e.g., separating game elements from UI) for potentially different processing or rendering passes.
  • Rendering (camera, sprite_sheet_animation, tilemap, tileset, tile):
    • Camera: Manages the viewport and view transformations, defining what part of the game world is visible.
    • Sprite & Animation: SpriteSheetAnimation handles frame-by-frame animation using texture sheets.
    • Tile System: Tilemap efficiently manages and renders large grids of Tile objects, defined within a Tileset which groups tiles from a single texture sheet.
  • Physics (physics, collider, circle_collider, rectangle_collider): A basic physics simulation layer (Physics) manages collision detection. It uses an abstract Collider base class with concrete implementations like CircleCollider (radius-based) and RectangleCollider (rectangle-based).
  • Input (input): Handles keyboard input, providing functions to query the state of keys (pressed, released, held).
  • Resource Management (resource_manager): Loads and manages game assets like textures, fonts, and sounds. It acts as a cache to avoid redundant disk I/O operations when assets are requested multiple times.
  • State Management (fsm, state, transition): A generic Finite State Machine (FSM) implementation. It uses State objects (with entry, update, exit logic) and Transition objects (defining conditions to move between states). In the sample game, this is used for managing animations.
  • Utilities (derived): Includes helper components, such as derived for enforcing generic type constraints.

Sample 2D Platformer Game Components

A sample platformer-style game is included to demonstrate the engine's usage. It covers most of essential functionalities that the engine provides, making it a perfect fit for those who like learning hands-on.

The demo game features:

  • Entry Point (main): Initializes the engine's App and starts the game.
  • Scene Setup (default_scene, background):default_scene constructs the entire game level layout, including placing the background.
  • Player (player): The controllable player character.
  • Camera Control (follow_player): A component likely attached to the Camera node to make it follow the player (player).
  • Enemies (mushroom, plant, plant_bullet): Different types of enemies with their specific behaviors and projectiles (plant_bullet).
  • Collectibles (banana): Items the player can collect, represented as bananas.
  • Level Goal (end): Represents the end-of-level trigger or object (e.g., the cup).
  • Game Logic (game_manager, score_manager):
    • GameManager: Tracks and controls the overall state of the game (e.g., playing, paused, won, lost).
    • ScoreManager: Manages the player's score and updates the UI display.
  • User Interface (win_canvas, lose_canvas): UI screens displayed on game win or game lose conditions.

Win

Win

The goal of the character is to reach the "end cup" while avoiding to fall or to take damage from the various enemies along the way.

Loss

DeathFall

DeathMushroom

DeathPlantBullet

About

JP (JumP) Engine – Simple cross-platform 2D game engine based on SFML

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages