Experimental javascript engine reimplemention of Mario Kart DS.
 
 
 
Go to file
RHY3756547 4af42625a0 Initial implementation of Nitro Particles
- Drifting particles and mini turbo (sans extra spark particles)
- Slowdown particles (grass/sand/water)
- Itembox collect particle
- Wall collide particle (this is really extreme and there should
probably be others)
- Shader improvements, such as dithered shadows for alpha and reduction
of artifacts. The best way to remove all artifacts would be generating
normals for courses and using the diffuse direction as a more reliable
indication of shadowed/not.
- Fixed checkpoints not resetting on new laps.
- Fixed me not being able to count to 3. (now 3 laps instead of 4)
- Fixed battle mode courses crashing on load and during due to AI being
funny (above 31, eg 36 for block fort)
2018-03-24 23:50:10 +00:00
code Initial implementation of Nitro Particles 2018-03-24 23:50: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-09-08 18:25:31 +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 Initial implementation of Nitro Particles 2018-03-24 23:50:10 +00:00

README.md

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://rhy3756547.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)
  • 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.