Student Projects (original) (raw)

Experimental: Hacking games

Introduction

This is not a Game Boy feature itself, but something that could make AI/bots work easier. In some of the game wrappers, we have implemented overrides of ROM data to alter the code it executes. In Mario, we can manipulate the world/level selection, while in Tetris, we can force the shape of the next Tetromino.

You can find disassemblies online, as well as tools to assist the work.

To make it easier to identify important RAM addresses, it might also be interesting to make a memory scanner, which can help identify changed values or exact searches.

The details of the Game Boy are described in the Pan Docs.

Tasks

https://github.com/mattcurrie/mgbdis

https://github.com/pret/pokered

https://github.com/kaspermeerts/supermarioland

https://github.com/Baekalfen/PyBoy/issues/72

https://gbdev.io/pandocs/

Emulation: Improve Sub-frame Input Timing

Introduction

The current implementation puts all user input at the beginning of each frame. This is not always enough. Some games depend on more precise input timing.

The hardware details are described in the Pan Docs.

Tasks

https://github.com/Baekalfen/PyBoy/issues/116

https://gbdev.io/pandocs/

Introduction

The current implementation of PyBoy lacks support for the Link Cable, although there is code from an earlier attempt. The Link Cable was a primitive serial connection between two Game Boys. It was used to play against others etc.

The hardware details are described in the Pan Docs.

Tasks

https://github.com/Baekalfen/PyBoy/pull/232

https://gbdev.io/pandocs/Serial_Data_Transfer_(Link_Cable).html

Experimental: AI

Introduction

This is not a Game Boy feature itself, but something that is easier to approach through emulation. What I imagine, is a neural network -- or maybe a simple, handwritten bot -- which can play the Game Boy autonomously.

PyBoy already supports external controls to report objects on the screen and sending input to the Game Boy. It supports running at unlimited speed and without rendering the display to speed up the learning process.

The details of the Game Boy are described in the Pan Docs.

There are already examples of other people implementing AIs for console games.

Tasks

https://docs.pyboy.dk/botsupport/index.html

https://docs.pyboy.dk/plugins/index.html

https://gbdev.io/pandocs/

https://www.youtube.com/watch?v=DcYLT37ImBY

https://www.youtube.com/watch?v=qv6UVOQ0F44

https://www.youtube.com/watch?v=iakFfOmanJU

Experimental: Debugger

Introduction

To improve functionality on the emulator, we will need good debugging tools. The current code does not have a debugger. Some of the functionality could be a plain memory view, a view with disassembled machine code or improved tools to see call stacks, interrupts, graphics settings, memory scanner and so on.

Tasks

https://gbdev.io/pandocs/

https://github.com/Baekalfen/PyBoy/issues/72

Experimental: New Game Wrappers

Introduction

This is not a Game Boy feature itself, but something that will make AI/bots work easier. We have already implemented a set of wrappers which present an easy interface to some popular games -- Tetris, Super Mario Land and Kirby. But we could always use more. You can choose exactly which game you want to support -- or improve one of the existing wrappers.

In the Super Mario Land wrapper, it can quickly identify enemies, Mario, boundaries, score, time left and so on. This is an immense help for developers of the AIs or bots.

To make it easier to identify important RAM addresses, it might also be interesting to make a memory scanner, which can help identify changed values or exact searches.

The details of the Game Boy are described in the Pan Docs.

Tasks

https://docs.pyboy.dk/plugins/index.html

https://github.com/Baekalfen/PyBoy/issues/72

https://gbdev.io/pandocs/

Experimental: Rewind Time [Completed]

Introduction

This is not a Game Boy feature itself, but something we can do when emulating. I imagine a feature, where it is possible to go back in time and redo something that went wrong in the game. It could be fine-grained at CPU-cycle level, less fine at each produced frame (60 FPS), or coarse at larger intervals. It depending on what is possible to implement.

The details of the Game Boy are described in the Pan Docs.

There are already examples of other people implementing a rewind feature.

Tasks

https://gbdev.io/pandocs/

https://binji.github.io/2017/12/31/binjgb-rewind.html

Emulation: Sound [Completed]

Introduction

The current implementation of PyBoy does not emulate the built-in sound controller.

The sound controller supports 4 primitive types of tone and noise generators. These are described in detail in the Pan Docs.

Tasks

https://gbdev.io/pandocs/Audio.html

Emulation: Improve Screen Rendering [Completed]

Introduction

The current implementation of PyBoy has support for rendering graphics, but it is quite limited in it's accuracy. The task will be to pass as much of the DMG Acid2 test as possible.

The hardware details are described in the Pan Docs.

Tasks

https://github.com/mattcurrie/dmg-acid2

https://gbdev.io/pandocs/Graphics.html

Emulation: Game Boy Color [Completed]

Introduction

The current implementation of PyBoy only supports the original black-and-white Game Boy from 1989. The Game Boy Color shares almost all of the same architecture of the original Game Boy, but adds a little more memory, a modified video controller and double the CPU frequency. The current implementation trivially supports doubling the CPU speed, so this won't be an issue.

The details are described in the Pan Docs.

Tasks

https://gbdev.io/pandocs/Graphics.html