All Projects → Vanilagy → MarbleBlast

Vanilagy / MarbleBlast

Licence: MIT license
A web port of Marble Blast Gold and Marble Blast Platinum.

Programming Languages

typescript
32286 projects
GLSL
2045 projects
CSS
56736 projects
javascript
184084 projects - #8 most used programming language
HTML
75241 projects
C#
18002 projects

Projects that are alternatives of or similar to MarbleBlast

good-reads
List of inspiring articles, blogs, tutorials and books. Tech stuff.
Stars: ✭ 14 (-80.28%)
Mutual labels:  physics
react-redux-platformer
A clone of Six using react-game-kit
Stars: ✭ 24 (-66.2%)
Mutual labels:  physics
mxfactorial
a payment application intended for deployment by the united states treasury
Stars: ✭ 36 (-49.3%)
Mutual labels:  physics
gopem
GUI for OPEM library
Stars: ✭ 20 (-71.83%)
Mutual labels:  physics
Fermi.jl
Fermi quantum chemistry program
Stars: ✭ 107 (+50.7%)
Mutual labels:  physics
spark-ar-physics
A helper module for connecting Spark AR with physics libraries
Stars: ✭ 28 (-60.56%)
Mutual labels:  physics
pymae
Materials for the book "Python for Mechanical and Aerospace Engineering"
Stars: ✭ 56 (-21.13%)
Mutual labels:  physics
FunwithScience
No description or website provided.
Stars: ✭ 127 (+78.87%)
Mutual labels:  physics
ai4materials
Deep learning for crystal-structure recognition and analysis of atomic structures
Stars: ✭ 26 (-63.38%)
Mutual labels:  physics
cannon-es-debugger
Wireframe debugger for use with cannon-es https://github.com/react-spring/cannon-es
Stars: ✭ 69 (-2.82%)
Mutual labels:  physics
Radial-Engine
3D Game engine with an editor(Qt) using OpenGL
Stars: ✭ 23 (-67.61%)
Mutual labels:  physics
MAPLEAF
6-DOF Rocket Flight Simulation Framework
Stars: ✭ 28 (-60.56%)
Mutual labels:  physics
encounter
Remaking the classic C64 game in WebGL.
Stars: ✭ 45 (-36.62%)
Mutual labels:  physics
Unity3D-Cars
A project built for a Renaissance Coders tutorial to introduce vehicle physics.
Stars: ✭ 60 (-15.49%)
Mutual labels:  physics
pyqentangle
Quantum Entanglement in Python
Stars: ✭ 16 (-77.46%)
Mutual labels:  physics
canvas-fluid-solver
Real-time fluid simulation in Javascript.
Stars: ✭ 45 (-36.62%)
Mutual labels:  physics
heron
[DISCONTINUED] An ergonomic physics API for bevy games
Stars: ✭ 313 (+340.85%)
Mutual labels:  physics
leaps
🎥 Declarative Vue.js animations library, spring-physics based.
Stars: ✭ 53 (-25.35%)
Mutual labels:  physics
Statistics-Notes
Personal notes on statistics with a focus on applications to experimental high energy physics
Stars: ✭ 19 (-73.24%)
Mutual labels:  physics
DynamicalBilliards.jl
An easy-to-use, modular, extendable and absurdly fast Julia package for dynamical billiards in two dimensions.
Stars: ✭ 97 (+36.62%)
Mutual labels:  physics

Marble Blast Web

This project is a clean-room web port of the 3D platformer games Marble Blast Gold and Marble Blast Platinum (including Marble Blast Ultra), implemented in TypeScript.

Play it here: https://marbleblast.vani.ga/
TAS Rewind version here: https://github.com/RandomityGuy/MBG-Web-Rewind

Features

In this game, the objective is to roll your marble to the finish pad in the fastest time possible, while avoiding hazards and collecting gems and power-ups. It includes almost 4000 levels, including 220 original MBG/MBP/MBU levels (69 beginner, 79 intermediate, 108 advanced, 25 expert) and more than 3900 community custom levels. It implements all gameplay elements, sounds, music and UI/menu components from both Marble Blast Gold, Platinum and Ultra - additional features include a replay system and online leaderboards. The two games (Gold/Platinum) can be switched between seamlessly and without reloading in the main menu. The game can be played using a keyboard, mouse, gamepad or on your mobile device.

View version history

Screenshots

Technical overview

The game is fully implemented in TypeScript and utilizes its own custom rendering and physics engine. Its levels and assets weren't rebuilt from scratch; instead, they are read and imported from .dif, .dts and .mis files used internally by the Torque 3D Engine, on which the original game runs. All the game's internal logic was implemented from scratch, however. The physics simulation runs at a fixed rate of 120 Hz and utilizes continuous collision detection - it was tuned to feel like a Marble Blast game, but there are still differences in the physics, because of which times in this game shouldn't be compared to those in the original. Resources are lazily loaded over the network when required for levels, making the initial load time of the website relatively short. The UIs are all implemented in plain HTML and CSS, and local persistence for settings, scores and replays is provided by IndexedDB. The game features a state-based replay system which guarantees deterministic playback - replays are compressed using pako and stored locally. Custom levels are supplied by Marbleland and are cached on the server. The backend itself is implemented using Node.js and mostly handles resource loading and leaderboard updates. An SQLite database is used to store online scores. The built-in video renderer is implemented using the WebCodecs API and my own multiplexing library.

Building and developing

If you wish to build the game yourself, simply clone the repository, then run npm install --legacy-peer-deps and npm run compile, which will compile the TypeScript code using rollup. Then run npm start to start up the server (runs on :8080 by default). If you want to configure the port and other server options, modify server/data/config.json. For fast development run npm run watch-fast (or npm run watch for a slower, but typechecked version). If you wish to bundle the project, run npm run bundle, which uses Sarcina and writes to dist/.

Note: This project has a dependency that requires node-gyp. Install node-gyp before running npm install on this project with npm install -g node-gyp, and if you're on Windows, make sure to run npm install --global --production windows-build-tools right afterwards in an elevated command prompt (one with admin rights) to handle the annoying installation stuff.

Notes

The current version only runs on the newest versions of Chromium-based browsers, Firefox and Safari, both on desktop and on mobile. Android support should be top-notch, and Safari is as best as it can be given Apple's restrictive PWA features on iOS. Older versions of this project utilized three.js for rendering and OimoPhysics for physics - without them, this project wouldn't even exist. Additional thanks to the maintainers of pako and jszip for making other parts of this project possible, as well as to Jeff, RandomityGuy and Whirligig for helping me out with parts of the code, and to the entire Marble Blast community for their feedback and support. The gameplay itself wasn't my idea at all and I highly recommend you check out GarageGames's original version of Marble Blast Gold, as well as the game's community, here: https://marbleblast.com/

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].