A script to extract SNESticle from Fight Night Round 2

Overview

fn22snesticle.py

A script for producing a SNESticle ISO from a Fight Night Round 2 ISO and any SNES ROM.

Background

Fight Night Round 2 is a boxing game by Electronic Arts. The Gamecube version of which includes the SNES game Super Punch-Out!!, playable through SNES emulation. Data mining has shown that the DVD contains the strings "SNESticle" and "Copyright (c) 1997-2004 Icer Addis", suggesting that this emulator is in fact SNESticle, the much anticipated but never released follow-up to NESticle.

This script extracts SNESticle from a Fight Night Round 2 ISO (US version) and produces a new ISO containing just SNESticle and a SNES ROM (Super Punch-Out!! or a SNES ROM of your choice). It also patches the joypad emulation to fix some issues and create a more logical button layout.

Requirements

fn22snesticle.py requires Python 3. Using custom banners requires the pillow (PIL) module, but this is strictly optional.

Usage

There are quite a few options but most have sensible defaults, just check the help screen:

./fn22snesticle.py --help

The simplest invocation would look something like this:

./fn22snesticle.py fightnight2.iso superpunchout.iso

This will take SNESticle and the Super Punch-Out!! ROM directly from fightnight2.iso and use them to produce the Gamecube ISO superpunchout.iso.

More interestingly, you can use the --rom option to include a different SNES ROM:

./fn22snesticle.py --rom smw.sfc fightnight2.iso smw.iso

This will produce an ISO containing SNESticle and the ROM smw.sfc (whatever that might mean).

It's generally a good idea to also provide the full name of the SNES game using the --game-name option:

./fn22snesticle.py --rom smw.sfc --game-name "Swell Plumber Place" fightnight2.iso smw.iso

It will be written to multiple fields inside the ISO that can be picked up by your loader. It will also be used to generate the banner image that shows up next to the game in most loaders. If no game name is provided, the ROM filename will be used instead.

If you don't like the generated banners, you can provide your own, using the --banner option:

./fn22snesticle.py fightnight2.iso superpunchout.iso --banner mybanner.png

The image file should be 96 by 32 pixels. Most common image formats are supported, but something non-lossy, like png, is strongly recommended. The pillow (PIL) module is required in order for this to work.

Game IDs

There is generally no need to care about the game id option, just leave it out and hope for the best. But if you are curious, or if you think the game id is causing problems for the script or for your loader, read on.

A game ID is a 6 digit code present on every Gamecube ISO, its structure is the following:

  • A single letter identifying the console type (typically G for Gamecube).
  • Two letters (or digits) identifying the game itself.
  • One letter identifying the region of the game.
  • Two digits (or letters) identifying the publisher.

Fight Night Round 2 (the US version) has game ID GEYE69, where 69 is the publisher code for Electronic Arts, the E before that is for US region, the initial G is for Gamecube and EY is just the unique identifier for Fight Night 2 (unique among Gamecube games published by Electronic Arts in the US that is).

Some loaders will exhibit strange behaviour unless every available ISO has a unique game ID, therefore fn22snesticle.py will try to generate a unique ID for every successfully created ISO. The format used is "ZxxE69". E69 still means Electronic Arts and US, but to avoid collisions with existing games the first letter is set to Z. xx is a two character alphanumeric string, essentially a base 36 number that starts at 00 and increments by one for each generated ISO. So after 09 comes 0A and after 0Z comes 10. After ZZ (or 1296 generated ISOs) it prints a warning and wraps back to 00. The most recently used code is written to a file called .fn22snesticle in your home directory. If the file is deleted, game IDs start over at Z00E69.

You can also freely choose your own game ID using the --game-id option. This will not affect the .fn22snesticle file.

a2bnr.py

A banner is a 96x32 bitmap plus a couple of text strings describing the game. It shows up in the Gamecube OS, as well as in loaders like Swiss and in emulators like Dolphin. a2bnr.py is a Python module that is used by fn22snesticle.py to create a Gamecube banner file from a png, but a2bnr.py can also be used as a stand-alone program to create a new banner from an image file or to modify an existing banner file. A typical invocation would look like this:

./a2bnr.py --image myimage.png mybanner.bnr

This will convert myimage.png to the banner format and write it to mybanner.bnr. If mybanner.bnr already exists, this will only overwrite the bitmap portion of the file, leaving the text strings intact. Similarly, it is possible to replace just (a subset of) the text strings in an existing banner file:

./a2bnr.py --game-name "My game" --developer "I made this" someoldbanner.bnr

This will overwrite the game name and developer fields of someoldbanner.bnr without touching the bitmap or the other text strings.

When creating a new bnr file, the --image option is required but everything else is optional. a2bnr.py will accept any image format that pillow can understand.

SNESticle considerations

Joypad emulation

SNESticle maps the Gamecube buttons to SNES buttons in a very literal way, ie A on the Gamecube controller becomes A on the SNES controller. This works for Super Punch-Out but is useless for most games, so the script patches the code to map buttons based on physical location instead:

GC button SNES button
A B
B Y
X A
Y X
Start Start
Z Select

Compatibility etc

At the time of writing, little is known about the features or accuracy of SNESticle. It happily accept standard SNES ROMS with or without the header (ie SMC or SFC files) and it runs a lot of games with no trouble. It does not seem to support external chips like the DSP or Super FX.

Further reading

More information on this project can be found at https://dataswamp.org/~josk/snesticle/

Owner
Johannes Holmberg
Johannes Holmberg
⛤Keylogger Generator for Windows written in Python⛤

⛤Keylogger Generator for Windows written in Python⛤

FZGbzuw412 33 Nov 24, 2022
Malware for Discord, designed to steal passwords, tokens, and inject discord folders for long-term use.

Vital What is Vital? Vital is malware primarily used to collect and extract information from the Discord desktop client. While it has other features (

HellSec 59 Dec 01, 2022
Driver Buddy Reloaded is an IDA Pro Python plugin that helps automate some tedious Windows Kernel Drivers reverse engineering tasks.

Driver Buddy Reloaded Quickstart Table of Contents Installation Usage About Driver Buddy Reloaded Finding DispatchDeviceControl Labelling WDM & WDF St

Paolo 'VoidSec' Stagno 199 Jan 04, 2023
A CTF2.5/MMF2 Decompiler

CondaDEV A CTF2.5/MMF2 Decompiler What is CondaDEV? CondaDEV (anaCondaDEVeloper) is a fork of Anaconda Mode 4.1, with a lot of Quality of Life patches

ClickNinYT 4 Mar 07, 2022
Fuzzercorn - Bring libfuzzer to Unicorn

Fuzzercorn libfuzzer bindings for Unicorn. API // The main entry point of the fu

lazymio 23 Nov 17, 2022
python driver for fingerprint machine (ZKTeco biometrics)

fpmachine python driver for fingerprint machine (ZKTeco biometrics) support until now 2 model supported and tested ZMM100_TFT and ZMM220_TFT install p

Samy Sultan 4 Oct 06, 2022
Web Headers Security Scanner

Web Headers Security Scanner

Emre Koybasi 3 Dec 16, 2022
Spring-0day/CVE-2022-22965

CVE-2022-22965 Spring Framework/CVE-2022-22965 Vulnerability ID: CVE-2022-22965/CNVD-2022-23942/QVD-2022-1691 Reproduce the vulnerability docker pull

iak 4 Apr 05, 2022
Profil3r is an OSINT tool that allows you to find potential profiles of a person on social networks, as well as their email addresses 🕵️

Profil3r is an OSINT tool that allows you to find potential profiles of a person on social networks, as well as their email addresses. This program also alerts you to the presence of a data leak for

1.1k Aug 24, 2021
Fuzz introspector is a tool to help fuzzer developers to get an understanding of their fuzzer’s performance and identify any potential blockers.

Fuzz introspector Fuzz introspector is a tool to help fuzzer developers to get an understanding of their fuzzer’s performance and identify any potenti

Open Source Security Foundation (OpenSSF) 221 Jan 01, 2023
PreviewGram is for users that wants get a more private experience with the Telegram's Channel.

PreviewGram is for users that wants get a more private experience with the Telegram's Channel.

1 Sep 25, 2022
Gitlab RCE - Remote Code Execution

Gitlab RCE - Remote Code Execution RCE for old gitlab version = 11.4.7 & 12.4.0-12.8.1 LFI for old gitlab versions 10.4 - 12.8.1 This is an exploit f

153 Nov 09, 2022
These are Simple python scripts to test/scan your network

Disclaimer This tool is for Educational purpose only. We do not promote or encourage any illegal activities. Summary These are Simple python scripts t

Varun Jagtap 5 Oct 08, 2022
Python directory buster, multiple threads, gobuster-like CLI, web server brute-forcer, URL replace pattern feature.

pybuster v1.1 pybuster is a tool that is used to brute-force URLs of web servers. Features Directory busting (URI) URL replace patterns (put PYBUSTER

Glaukio 1 Jan 05, 2022
对naabu的端口扫描结果,调用nmap进行指纹识别

naabu2nmap 对naabu的端口扫描结果,调用nmap进行指纹识别

Se7en 12 Nov 22, 2022
adb - A tool that allows you to search for vulnerable android devices across the world and exploit them.

adb - An exploitation tool for android devices. A tool that allows you to search for vulnerable android devices across the world and exploit them. Fea

136 Jan 02, 2023
Analyse a forensic target (such as a directory) to find and report files found and not found from CIRCL hashlookup public service

Analyse a forensic target (such as a directory) to find and report files found and not found from CIRCL hashlookup public service. This tool can help a digital forensic investigator to know the conte

hashlookup 96 Dec 20, 2022
CVE-2021-26084 Remote Code Execution on Confluence Servers

CVE-2021-26084 CVE-2021-26084 Remote Code Execution on Confluence Servers. Dork Fofa: app="ATLASSIAN-Confluence" Usage Show help information. python P

FQ Hsu 63 Dec 30, 2022
Some Attacks of Exchange SSRF ProxyLogon&ProxyShell

Some Attacks of Exchange SSRF This project is heavily replicated in ProxyShell, NtlmRelayToEWS https://mp.weixin.qq.com/s/GFcEKA48bPWsezNdVcrWag Get 1

Jumbo 129 Dec 30, 2022
test application for the licence key web app.

licence_software_test_app Make sure you set your database values in a .env file to the folder. Install MYSQL connector: pip install mysql-connector-py

Carl Beattie 1 Oct 28, 2021