Skip to content
/ mkjs Public
forked from riperiperi/mkjs

Experimental javascript engine reimplemention of Mario Kart DS.

License

Notifications You must be signed in to change notification settings

Qainguin/mkjs

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mkjs

mkscrn2s mkjs is an experimental 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.

If you have a ROM of MKDS available, you can give mkjs a shot here: http://riperiperi.github.io/mkjs

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)
  • All road collision types (loop, sticky not yet implemented)
  • 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.

About

Experimental javascript engine reimplemention of Mario Kart DS.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 96.3%
  • HTML 3.2%
  • Other 0.5%