No Description

Thomas Dy bc4ad05148 Don't overwrite empty lines 2 years ago
.github d587ed9e1c Upgrade node because old npm is broken 3 years ago
assets 9acaeb0d34 Add more contrast for game elements 3 years ago
scripts 6d7713dde0 Update release script for new build 3 years ago
src bc4ad05148 Don't overwrite empty lines 2 years ago
tests a13d0b2779 Test that display matches the kana's state machine 3 years ago
.gitignore 1f93616734 Switch to ES modules and snowpack 3 years ago
LICENSE 6b14100bf9 Add LICENSE and README 3 years ago a9df1d4def Allow loading the editor's config in the game directly 2 years ago
package-lock.json 19c4380d13 Add tests 3 years ago
package.json e9912557f0 Release v0.1.2 2 years ago
prettier.config.js 5f10e39d04 Fix prettier reformatting levels.json text 3 years ago
snowpack.config.js 1f93616734 Switch to ES modules and snowpack 3 years ago
tsconfig.json 86bfde6eaa Support longer form of small tsu 3 years ago


This is a clone of an old flash game called TypingMania. It's a speed typing game where you type lyrics (typically in Japanese) in time with the song.

There are many differences from the original and full compatibility is not a goal.

  • scoring is different (still in flux)
  • you're allowed to skip a single character, this is to make finishing the songs more feasible but counts as a miss
  • the displayed text is in Hepburn romanization but still supports other romanizations for input
  • YouTube support for songs (still experimental)
  • waiting sections can be skipped

You might also be interested in innocenat's clone.

Gameplay Instructions

The initial screen shows available songs. You can navigate left/right through folders and up/down through songs. Space or enter will select a song. Escape or backspace can be used to go back out.


Get the latest release and unzip it. Edit the levels.json with your own songs. Then simply serve it as a static site.


You can use the online editor for most changes. There are some minor things it doesn't support changing yet. In that case, you will have to edit it by hand.

The config is a simple JSON file with the following properties:

The following accept any CSS color

  • background - the default background
  • baseColor - base color of all text and UI elements
  • highlightColor - accent color mainly for selections

The following let you customize the sound effects by specifying files relative to the index.html. Defaults are provided so there's no need to modify them unless you want to.

  • selectSound - sound effect when navigating
  • decideSound - sound effect when entering a song

The levelSets property describes the "folder" structure. It expects an array of the following:

  • name - name of the folder
  • levels - an array of level data

Level data has the following properties (a lot of the weird naming is inherited from TypingMania).

  • name - name of the song
  • creator - artist of the song
  • genre - "genre" of the song, but can be used for anything
  • difficulty - a number to show beside the song
  • audio - path to the audio file or a youtube video
  • background - path to an image to serve as the background, if not specified, it shows the video otherwise just uses the default background
  • songLink - a link back to the source of the song
  • lines - array containing lyrics and timing data

Lines contain the following properties:

  • kanji - display lyrics of the song, has no effect on the game
  • kana - the kana for the lyrics, this is what's used for the game
  • start - start time of the segment in seconds
  • end - end time of the segment in seconds

If audio is not specified, lines does not need to specify timing information. It will just act like a normal untimed typing game.


If the levels.json property in index.html is changed to a folder instead, we try to load the folder assuming it contains TypingMania data (settings.xml, folderlist.xml, etc.). I haven't tested this extensively so there could be incompatibilities.


There is an online editor available. It lets you create a full config from scratch and then download the JSON file.

For fast testing, it's also possible to go to try out the editor's config in the game by appending ?from=editor to the game URL. For the online editor, that would be here. Note that this is all in browser, sharing the link with someone else will simply error out.

Build Instructions

The project is a vanilla typescript project. Simply run:

npm install
npm run build