Git Product home page Git Product logo

rotary-bobble's Introduction

Rotary Bobble

A ROM hack, and matching controller, to add rotary controls to the Neo Geo game Puzzle Bobble

gameplay.mp4

Status

ROM Hack

The ROM hack is complete. It...

  • gives rotary controls to all gameplay
  • rotary input on high score name entry screen
  • how to play screen has a spinner instead of a joystick
  • each player can hold start for about 1.5 seconds to toggle between joystick and rotary controls. Useful if say playing a two player game and only have one rotary controller.

The complete patch is at src/patches/rotary-bobble.json

Controller

I have built a rough, but working, prototype using an Arduino Nano.

controller prototype

It uses transistors to control RLDU, B, C and D. It has normal push buttons for A, Select, Start.

I also had a prototype using a Raspberry Pi Pico, but always had a little bit of noise in the Pico's analog readings, causing a bit of jitter during gameplay. The Nano has no jitter and provides perfect controls.

For more info, check the src/pico and src/arduino folders.

IPS Patches

IPS patches are available in releases

  1. unzip pbobblen.zip
  2. patch d96-02.c5 with pbobblen.d96-02.c5.ips using an IPS patcher
  3. patch d96-03.c6 with pbobblen.d96-03.c6.ips using an IPS patcher
  4. patch d96-07.ep1 with pbobblen.d96-07.ep1.ips using an IPS patcher
  5. Make sure the three patched files keep the original name of the file they patched (overwrite it)
  6. zip the files back up into pbobblen.zip

NOTE: MAME will notice the ROM is different and not launch it from the UI. You must launch it from the command line if using MAME

Still To Do

  • Controller

    • build a working prototype
    • circuit can likely be improved, just winged it...
    • resolve the potentiometer noise issue, possibly with an LM4040?
    • Simple input mode to handle things like NeoSD's menu
    • Figure out a good power solution for the Arduino
    • Instructions on how to create a controller
  • ROM Hack

    • single player rotary controls during main gameplay
    • High score entry using rotary controls
    • Allow player two to use rotary controls during a single player game (ie start a game with p2 instead of p1)
    • Rotary controls for both players during a two player match (versus)
    • Add a tagline to the title screen to indicate this is the rotary version
    • Allow toggling rotary by holding start for a couple seconds
    • Change the how to play to show rotary controls
    • maybe a website that easily allows applying the hack?

How to hack on this

clownassembler

The 68k assember, clownassembler, was copied into clownassembler/ from https://github.com/Clownacy/clownassembler, it needs to be built with cd clownassembler && make. This is needed for creating patches.

To patch

only tested on x64 Ubuntu 22. You will need a recent version of Node, I am using 18.18.2

Set the env variable MAME_ROM_DIR to where you store your roms for MAME.

  • yarn install
  • copy an untouched pbobblen.zip, that is intended for MAME, into the root directory of the repo
    • all zips are in gitignore, so the rom won't end up in the repo
  • run ts-node src/patchRom/main.ts src/patches/rotary-bobble.json

rotary-bobble.json is the main patch, and applies all changes. The patches in patches/individual can be applied instead to just do parts. They should be self explanatory from the file name and the description at the top of each patch.

Once patched, it will run in MAME if you start it on the command line. You can also run yarn to-neosd to create a .neo file. This requires neosdconv. I would prefer to use TerraOnion's NeoBuilder, but I've not gotten it to work properly.

rotary-bobble's People

Contributors

city41 avatar

Stargazers

 avatar

Watchers

 avatar

rotary-bobble's Issues

combine the patch files into one

Now that patches rely on absolute addresses, it would be easier and less error prone if all the patches were just in one file.

bonus: have doPatch support symbols to avoid the absolute address problem altogether.

Possibility of SNK Dial Controller usage

Feature request just in case it's a possibility down the line. The hardware already supports dial for Pop n' Bounce, accessed through both MAME and FBN with a mouse or a mouse device spinner like the SpinTrak. The spinner for that itself isn't absolute, but it might not be an issue as long as the centering is reset to read whatever the current position of the spinner is as zero before a round.

I suspect this is all probably a lot more work and beyond the scope of the project.

either way, playing without a dial using your precise controls patch with normal controls is great as well :)

Add tagline to title screen

The title screen should say something like "rotary version" or something like that. Just using the fix layer should be fine.

This should be added to both puzzle bobble (eu,jpn) and bust a move (us)

Input routine: use existing flow as much as possible

The current hack hijacks the "update angle" routine. This is not good. It would be better to alter the entire flow as needed. For example the routine that determines shooter delta is where rotary input should be considered, then that delta should get passed along to existing routines. Existing routines should be altered as minimally as possible.

This has the advantage of input not needing to be changed (especially for A), and the dino will crank faster the larger the delta, which is a nice touch

Two player support

The original input routines were generalized for p1 and p2, so generalizing the rotary routines should be equally simple. Based on which addresses the game passes, it should be possible to determine if the call was for p1 or p2, and set the values in the proper place in memory accordingly. Oh and read p1 or p2 control inputs too.

The high score and gameplay patches have duplicate code

Extract the common rotary decoding into a subroutine.

patchProm will need to support just adding an arbitrary subroutine without any jumping.

The rotary subroutine will need to use BIOS_PLAYER_MOD1/2 to determine who it's reading/updating

Simple input mode

A button read by the mcu that toggles between simple and full rotary mode.

Full - used to play the game.
Simple - left third is left input, center third is nothing, right third is right input

Simple mode is to allow navigating NeoSD menus and the like without having to use a normal controller

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.