Experimental javascript engine reimplemention of Mario Kart DS.
 
 
 
Go to file
RHY3756547 245a3f314c Reverse engineered SPA format
A gift from me to the Mario Kart DS community (i think these are used in
Pokemon too). Might work on ingame particle emitters now that I'm the
only person ever to have tried reading these stupid files.
2018-03-22 01:30:10 +00:00
code Reverse engineered SPA format 2018-03-22 01:30:10 +00:00
resource ...and add it all back. 2017-09-08 17:24:16 +01:00
server ...and add it all back. 2017-09-08 17:24:16 +01:00
.gitignore Initial Commit of Project Files 2017-04-28 05:35:26 +01:00
LICENSE Initial commit 2017-04-27 18:32:47 +01:00
README.md Update README.md 2017-04-27 18:58:59 +01:00
audio.html Initial Commit of Project Files 2017-04-28 05:35:26 +01:00
audioSFX.html Initial Commit of Project Files 2017-04-28 05:35:26 +01:00
index.html Reverse engineered SPA format 2018-03-22 01:30:10 +00:00

README.md

mkjs

mkscrn2s mkjs is an experimantal javascript engine reimplemention of Mario Kart DS. Users of the application must provide their own Mario Kart DS ROM, dumped using a DS or 3DS. This project exists for entirely educational purposes.

I'll post a demo link here when you can just slam a ROM in using a basic file selector.

Purpose

I started working on mkjs a few years ago to get a better grasp on a lot things, mainly for fun. Here are the key factors:

  • WebGL game engine with no dependancies. Entirely written using vanilla Javascript ES5. (will not accept contributions using libraries!)
    • (exception is GLMatrix, which is required for matrix and vector operations)
  • Entirely implement readers for NDS file formats, and ways to utilise them in an actual game environment.
  • SSEQ (midi) music and sfx player using Web Audio API features. Supports 3D sound, and used to support doppler...
  • Custom simple collision engine with swept sphere collision against quadtree partitioned triangle collision meshes. Performs well enough in javascript, but could likely be faster.
  • Attempts to replicate the perfect physics and feeling of this beautiful game, through format and physics reverse engineering.
  • Very clean "class" structure in ES5. ES6 port would be welcome, I might do that at some point.
  • Works on many platforms, including iOS at 60 fps!

Current Features

The base game mostly works. A lot of the grunt work is done - the current setup shows a good prototype of the game working.

  • Nitro filesystem management for real .nds files, allowing a ROM to be provided with no changes.
  • Loads and displays all courses (including battle) in some playable form. Textures, texture animations are intact.
  • Functional Kart vs. World physics, using kcl files for courses.
  • Work in progress Kart vs. Moving object physics (see Tick Tock Clock, Bowser's Castle DS)
  • Functional AI karts that follow the same waypoints as MKDS AI. (battle and race AI modes)
  • Content system for work in progress course objects, eg. routed car obstacles, moving platforms.

Possible Future

  • UI engine
  • Race Logic (checkpoints, lap count, lap tracking, race completion...)
  • All course obstacles (enemies, bridge in delfino)
  • Items & damage
  • Particle effects format reader and renderer (no idea how these formats work).
  • Custom Menus
  • Battle Mode & Mission Mode
  • Multiplayer (custom courses? >8 players?)
  • Lots of bug fixes for collisions and format readers!

Multiplayer

mkmulti

While multiplayer using a Websockets server is semi-functional, it is very simplistic and only exists for testing purposes. A future implementation would ideally connect to peers using WebRTC rather than connecting through a central server.