You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Henry Jameson e1b4272c21 documentation 1 year ago
YACardEmu@d9e2dc13a4 poop 2 years ago
docs documentation 1 year ago
.gitignore better logging 1 year ago
.gitmodules poop 2 years ago documentation 1 year ago
config.ini poop 2 years ago
index.js small fixes 1 year ago
libccid_Info.plist plist to make shit nfc scanner work 2 years ago
nfc.js better logging 1 year ago
package.json builtin YACE launcher added 1 year ago
sm.png builtin YACE launcher added 1 year ago
statemachine.js builtin YACE launcher added 1 year ago
statuslogger.js better logging 1 year ago
yacardemu.js small fixes 1 year ago
yarn.lock builtin YACE launcher added 1 year ago


What is it?

SugoiDeCard is a unconventional user interface tool for old arcade games utilizing paper-magnetic cards, allowing these games to be played with modern arcade IC cards such as Aime™, NESiCA, Amusement IC or pretty much any NFC or RFID cards.

Originally written by HJ for Sugoi game center as a hobby project out of desire to preserve certain game and make it more accessible.

How it works?

SugoiDeCard starts YACardEmu which does the heavy lifting of the emulating original card-reader device arcade machines use, which SugoDeCard watches for any change in state (shutter open/close, card present/absent) and uses it to guess the state of the game using a state machine. It tells YACardEmu to load or insert "card" associated with scanned IC card.


  • Can only ever service one cab per host.
    • Does not care about which reader IC card was scanned from
    • Architecture is not entirely ready for it yet
    • Does not check if card is already in use on other cab on same game
  • Only supports Wangan Midnight Maximum Tune 3(DX(+)) game
    • Other games can work but yet to be tested and documented


Save files

Stores saves locally on given directory, directory can potentially be on a remote drive (SMB/CIFS/WebDAV/NFS). If you're going to use multiple hosts in a network, however note that there are no check if card is already in use.

Storing game data on NFC card is not supported and unlikely be supported as arcade IC cards are RFID only, and don't really have writable storage space, plus storing on the card would require user to leave the card on the reader, which isn't intuitive

Game state estimation and concessions

SugoiDeCard tries to estimate game state based on whatever is happening with the emulated card reader, i.e. initial "idle" state = machine working in "attract" mode, when card reader's "shutter" (front "door" on an actual reader) is open SugoiDeCard assumes that game entered login screen (player pressed on gas pedal to start the game) and game awaits for card to be inserted, shutter closing means login screen ended etc. This works for most cases but sometimes it can get desynced if something unexpected happened.

Another thing is that certain features either missing or work differently, mainly due to different nature of how games handled disposable paper cards and how IC cards are handled nowadays.

More info about concessions, wiring and more on each game's page:

Building and using

  1. install yarn
  2. yarn install
  3. node ./index.js

You will also need YACardEmu built and installed in PATH, or ran somewhere (use -r to connect SugoiDeCard to existing YACE instance instead of starting its own)

How to use it for actual hardware setup?

You will need following:

  • Any device that can run node.js and (preferably) (GNU/)Linux
    • Raspberry Pi 3 works fine
    • Any generic modern x86_64 IBM-PC works fine
  • A PC/SC-compatible NFC reader. (pcscd and pcsc-lite will be used)
    • ACR122U works fine out of the box.
      • Sony FeliCa (Aime) cards somewhat work but need improvement
      • ACR1252U should also work but that remains to be tested
    • Elexlinco NC004 (shows as GHI NC001) works but you'll need to add it to libccid_Info.plist to make it appear in pcscd
      • Does not work with Sony FeliCa (Aime) cards at all (reader just doesn't react to them)
    • Readers can react to bank cards or ID cards but this currently might crash SugoiDeCard
    • Regular smart cards and readers (i.e magnet strip or chip) could potentially work but untested (and probably never will)
  • RS232 (or potentially RS485 for other games) serial port (i.e. COM port)
    • USB adapters and built-in DB9 COM ports should work fine, but you'll probably need a breakout adapter to connect game to it.
    • RaspberryPI's GPIO should also work fine if configured properly.
  • I2C bus and display (optional but highly recommended)
    • I2C bus
      • Built-in I2C bus on RaspberryPI can work, but this will have limitations on how long cable can be. so far, using a USB adapter is preferable.
      • USB-ISS does work but you'll need this kernel module to make it work as a regular I2C bus.
    • 20x4 LCD display with HD44780 controller, adafruit and many hobby electronics stores sell them
    • I2C "backpack" for LCD display mentioned above. Some stores sell those LCD displays with I2C backpacks already soldered in