Giter Club home page Giter Club logo

ness's Introduction

NESS, a NES Emulator + Automated Speedrunner

For the past couple of months, I have been working on a really exciting project. Although the Ninendo Entertainment System was released in North America 14 years before I was born, I still enjoyed the multitude of games that I played on various NES emulators. It was about time I wrote my own!

Usage and Gameplay

Super Mario Bros. Ice Climber
Donkey Kong 3 Excitebike

To build this project, just run make -j200 (just in case you are on a server). This will create a nes executable.

Due to the temporary lack of a GUI File System, you will have to pass the parameters via the command line.

  • To simply play a game: ./ness play <path_to_binary_game_file>
  • To create a tool-assisted speedrun: ./ness record <path_to_binary_game_file> <path_to_tas_file>
  • To view your tool-assisted speedrun: ./ness replay <path_to_binary_game_file> <path_to_tas_file>

The in-game controls are:

Keyboard A - (A)
Keyboard S - (B)
Keyboard Z - (Start)
Keyboard X - (Select)
Arrow Keys - (D-Pad)

The Name

I didn't want this to just be another NES emulator ;) so I just titled it after my favorite programming language (and the one I used to build this project), C++. Also, NESS more than just an emulator - it is a competitive gaming environment for retro enthusiasts!

My journey in emulation began in Summer 2018, when I built a Chip8 Interpreter, but my interests in retro tech began in my pre-teen years. At this point, I may as well get started on a Super Nintendo Emulator. However, the 8-bit NES proved to be quite a challenging project - I can only imagine the hardware quirks, volume of instructions, and graphical rendering that goes behind the 16-bit SNES. Before I embark on this new adventure, there are a couple of aspects of NESS that I would like to improve:

  • Code refactor - in a rush to complete NESS before the school term, there are some aspects of the code which could be encapsulated more effectively.
  • Improved GUI - while I like what I have done so far, I want to add a file browser system and display some diagnostics such as the framerate.

Currently, I have put this project on hold to focus on the school term, but I look forward to resuming development after finals!

Tool-Assisted Speedrunning

Speedrunning is a "sport" where gamers around the world compete to beat a game (from it's start screen to the end credits) in the minimal amount of time. Check out this incredible video to witness the extents that hardcore speedrunners reach to shave off milliseconds from the world records.

The premise behind Tool-Assisted Speedrunning is that you can use software to create a precise sequence of controller inputs which will allow you to consistently exploit in-game glitches. While humans can become very good at speedrunning, there are usually instances where the input into the game must be so precise, that only a Tool-Assisted Speedrunner could achieve it at a reasonable success rate.

At the bottom of the screen, the NES Joypad's button presses are being indicated in real-time. This is to help with the tool-assisted speedrunning experience. By screen-recording a speedrun recorded on this emulator, you can observe the frame-by-frame inputs that the author is making. Hopefully, this can make speedrunning more accessible to newcomers who have not developed 60Hz reflexes yet.

Credits

  • NesDev Wiki - the NES development community is unparalleled. Thanks to all of the clever researchers and reverse-engineers who made this possible!
  • LaiNES and ANESE - for much-needed inspiration and guidance in solving some of the more intricate bugs
  • My friends and family - they never ceased to believe in and support me, even during that 8 hour long bug (which ended up being an incorrect offset into the cartridge memory XD)

ness's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.