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
APKLeaks - Scanning APK file for URIs, endpoints & secrets.

APKLeaks - Scanning APK file for URIs, endpoints & secrets.

dw1 3.5k Jan 09, 2023
Exploiting CVE-2021-42278 and CVE-2021-42287 to impersonate DA from standard domain user

Exploiting CVE-2021-42278 and CVE-2021-42287 to impersonate DA from standard domain user Known issues it will not work outside kali , i will update it

Hossam 867 Dec 22, 2022
Whois-Python - Get Whois Domain with Python GUI

Whois-Python-GUI Get Whois Domain with Python - GUI :) WARNING Dont Copy ! - W

MR.D3F417 3 Feb 21, 2022
🍉一款基于Python-Django的多功能Web安全渗透测试工具,包含漏洞扫描,端口扫描,指纹识别,目录扫描,旁站扫描,域名扫描等功能。

Sec-Tools 项目介绍 系统简介 本项目命名为Sec-Tools,是一款基于 Python-Django 的在线多功能 Web 应用渗透测试系统,包含漏洞检测、目录识别、端口扫描、指纹识别、域名探测、旁站探测、信息泄露检测等功能。本系统通过旁站探测和域名探测功能对待检测网站进行资产收集,通过端

简简 300 Jan 07, 2023
A bare-bones POC container runner in python

pybox A proof-of-concept bare-bones container written in 50 lines of python code. Provides namespace isolation and resource limit control Usage Insta

Anirudh Haritas Murali 5 Jun 03, 2021
MITMSDR for INDIAN ARMY cybersecurity hackthon

There mainly three things here: MITMSDR spectrum Manual reverse shell MITMSDR Installation Clone the project and run the setup file: ./setup One of th

2 Jul 26, 2022
NexScanner is a tool which allows you to scan a website and find the admin login panel and sub-domains

NexScanner NexScanner is a tool which helps you scan a website for sub-domains and also to find login pages in the website like the admin login panel

8 Sep 03, 2022
Security System using OpenCV

Security-System Security System using OpenCV Files in this Repository: email_send.py - This file contains python code to send an email when something

Mehul Patwari 1 Oct 28, 2021
Delta Sharing: An Open Protocol for Secure Data Sharing

Delta Sharing: An Open Protocol for Secure Data Sharing Delta Sharing is an open protocol for secure real-time exchange of large datasets, which enabl

Delta Lake 497 Jan 02, 2023
SeaSurf is a Flask extension for preventing cross-site request forgery (CSRF).

Flask-SeaSurf SeaSurf is a Flask extension for preventing cross-site request forgery (CSRF). CSRF vulnerabilities have been found in large and popular

Max Countryman 183 Dec 28, 2022
Bypass 4xx HTTP response status codes.

Forbidden Bypass 4xx HTTP response status codes. To see all the test cases, check the source code - follow the NOTE comments. Script uses multithreadi

Ivan Šincek 165 Dec 28, 2022
A Burp extension adding a passive scan check to flag parameters whose name or value may indicate a possible insertion point for SSRF or LFI.

BurpParamFlagger A Burp extension adding a passive scan check to flag parameters whose name or value may indicate a possible insertion point for SSRF

Allyson O'Malley 118 Nov 07, 2022
Js File Scanner This is Js File Scanner

Js File Scanner This is Js File Scanner . Which are scan in js file and find juicy information Toke,Password Etc.

122 Dec 12, 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
Zero-attacker is an multipurpose hacking tool with over 12 tools

Zero Attacker Zero Attacker is bunch of tools which we made for people.These all tools are for purpose of ethical hacking and discord tools. Who is th

Asjad 300 Dec 28, 2022
pybotnet - A Python Library for building Botnet , Trojan or BackDoor for windows and linux with Telegram control panel

pybotnet A Python Library for building botnet , trojan or backdoor for windows and linux with Telegram control panel Disclaimer: Please note that this

</oNion 181 Jan 02, 2023
A python script to bypass 403-forbidden.

4nought3 A python script to bypass 403-forbidden. It covers methods like Host-Header Injections, Changing HTTP Requests Methods and URL-Injections. Us

11 Aug 27, 2022
OpenSource Poc && Vulnerable-Target Storage Box.

reapoc OpenSource Poc && Vulnerable-Target Storage Box. We are aming to collect different normalized poc and the vulerable target to verify it. Now re

cckuailong 560 Dec 23, 2022
A collection of intelligence about Log4Shell and its exploitation activity

Log4Shell-IOCs Members of the Curated Intelligence Trust Group have compiled a list of IOC feeds and threat reports focused on the recent Log4Shell ex

Curated Intel 172 Nov 17, 2022
A Modified version of TCC's Osprey poc framework......

fierce-fish fierce-fish是由TCC(斗象能力中心)出品并维护的开源漏洞检测框架osprey的改写,去掉臃肿功能的精简版本poc框架 PS:真的用不惯其它臃肿的功能,不过作为一个收集漏洞poc && exp的框架还是非常不错的!!! osprey For beginners fr

lUc1f3r11 10 Dec 30, 2022