mirror of
https://github.com/ShadauxCat/CATSFC.git
synced 2025-04-02 10:41:47 -04:00
214 lines
9.7 KiB
Markdown
214 lines
9.7 KiB
Markdown
CATSFC version 1.36, 2013-06-16
|
|
|
|
A Super Nintendo emulator for the Supercard DSTWO.
|
|
|
|
Based on:
|
|
* Snes9x 1.43, by the Snes9x team (with research by the ZSNES folks, anomie,
|
|
zsKnight, etc.)
|
|
* NDSSFC 1.06, by the Supercard team (porting to the MIPS processor)
|
|
* BAGSFC, by BassAceGold (improving over NDSSFC)
|
|
* CATSFC, by ShadauxCat and Nebuleon (improving over BAGSFC)
|
|
|
|
Contains:
|
|
* Language files written by the GBAtemp community: Dutch by Aeter, French
|
|
by Nebuleon, German by SignZ, Portuguese (Brazilian) by Diego Liberal,
|
|
Spanish by Boriar
|
|
* Language files written by GitHub users: Italian by alexinfurs
|
|
|
|
# Installing
|
|
|
|
(If you got the source code and want to compile it, see the `Compiling` section
|
|
at the end of the file.)
|
|
|
|
To install the plugin to your storage card, copy `catsfc.plg`, `catsfc.ini` and
|
|
`catsfc.bmp` from the release archive to the card's `_dstwoplug` directory.
|
|
Then, copy the `CATSFC` subdirectory to the root of the card.
|
|
|
|
# Cheats
|
|
|
|
The format accepted by the "Load a cheat file" function is equivalent to the
|
|
old format used in Mightymo's BSNES Cheat Code Pack.
|
|
|
|
1. Download the BSNES Cheat Code Pack at
|
|
<http://www.mightymo.net/downloads.html>. It will be a zip archive.
|
|
2. Open the zip file, with WinZip, WinRAR or the built-in zip extension in
|
|
the operating system on your computer.
|
|
3. In the zip file, open the folder called *BSNES Cheat Code Pack*, then
|
|
the one called *BSNES v0.51-0.74 Cheat Code Pack*.
|
|
4. Open your storage card's CATSFC folder, then descend into gamecht.
|
|
5. Drag the cheat code files from the zip archive to the card's gamecht
|
|
folder.
|
|
|
|
To add cheats to the menu in a game, first load the game, then use the Cheats
|
|
menu's "Load a cheat file" option.
|
|
|
|
# Frame skipping
|
|
|
|
In the Video & audio menu, the **Frame skipping** option allows you to select
|
|
a number of frames to skip between rendered frames.
|
|
|
|
As of version 1.29, the default is - (Keep up with the game). For most games,
|
|
this setting keeps video and audio fluid, without the sudden slowdowns of
|
|
previous versions when many sprites fill the screen. The DS controller buttons
|
|
are also responsive at this setting.
|
|
|
|
For some games, you may need to adjust frame skipping.
|
|
* If a game runs at 5 frames per second, like *Yoshi's Island*,
|
|
*Kirby Super Star*, *Star Fox* or *Super Mario RPG*, setting frame skipping
|
|
to 1 will allow you to jump, move or shoot at the right times.
|
|
* If you want to show more frames per second in a game that already shows 20,
|
|
setting frame skipping to 1 or 0 will cause more frames to appear,
|
|
but your DS button input may stop responding for 2 entire seconds every so
|
|
often. The audio may also be stretched. (This is similar to NDSGBA.)
|
|
* Setting this to 10 will skip 10 frames and render one, but this will
|
|
severely desynchronise the audio. You will also find yourself unable to
|
|
perform actions during the correct frame with the DS buttons. It is advised
|
|
to set frame skipping to the lowest value with which you can play a game.
|
|
|
|
# Fluidity
|
|
|
|
Fluidity is an option you can find under the Video & audio menu in a game.
|
|
By default, video fluidity is preferred over audio fluidity in games.
|
|
|
|
* Preferring video fluidity makes audio skip certain notes, up to
|
|
23 milliseconds, in order to render more video. In many games, this
|
|
difference is not audible, but you may hear certain audio glitches if a game
|
|
depends highly on timing for its audio.
|
|
Use this option if you want to play games that require fluid imagery more
|
|
than precise audio emulation. You can also use this option when watching game
|
|
introductions, endings and cutscenes.
|
|
* Preferring audio fluidity makes video skip certain images, up to
|
|
46 milliseconds, in order to render audio closer to 32,000 times per second.
|
|
Use this option if you want to play games mainly for their soundtracks, or in
|
|
a game's sound test mode. You can also use this option to experiment with the
|
|
green berry glitch in Super Mario World that makes TIME go over and under 100
|
|
units constantly and makes the music play very fast.
|
|
|
|
# Hotkeys
|
|
|
|
You can set buttons to press to perform certain actions. For each action,
|
|
there is a *global hotkey* and a *game-specific override hotkey*. You might,
|
|
for example, want to have the R button bound to Temporary fast-forward, but
|
|
a specific game uses R for something important. In that case, you can set the
|
|
global hotkey to R and make an override with X for that game.
|
|
|
|
Hotkeys are sent to the current game as well as to their corresponding action.
|
|
The criterion for a hotkey is met when **at least** all of its buttons are
|
|
held. Additional keys are sent to the game and can trigger another hotkey.
|
|
For example, setting a hotkey to L and another to R+X, then pressing L+R+X+Y
|
|
will trigger both and send L+R+X+Y to the game.
|
|
|
|
Available actions are:
|
|
* Go to main menu. In addition to tapping the Touch Screen to return to
|
|
the main menu, you can set a hotkey to do the same.
|
|
* Temporary fast-forward. While this hotkey is held, the fast-forward option
|
|
will be forced on.
|
|
* Toggle sound. Each time this hotkey is held, the sound will be disabled if
|
|
it's currently enabled, and vice-versa.
|
|
* Save state #1. Each time this hotkey is held, saved state #1 will be written,
|
|
without confirmation if it exists.
|
|
* Load state #1. Each time this hotkey is held, saved state #1 will be loaded.
|
|
* Toggle full-screen. Each time this hotkey is held:
|
|
* If the current display mode *is* a full-screen mode, then the display mode
|
|
is set to 3 (Middle, square pixels) and the top and bottom will be cut off.
|
|
* If the current display mode *is not* a full-screen mode, then the display
|
|
mode is set to 4 (Entire screen, smoothed).
|
|
|
|
# The font
|
|
|
|
The font used by CATSFC is similar to the Pictochat font. To modify it,
|
|
see `source/font/README.txt`.
|
|
|
|
# Translations
|
|
|
|
Translations for CATSFC may be submitted to the author(s) under many forms,
|
|
one of which is the Github pull request. To complete a translation, you will
|
|
need to do the following:
|
|
|
|
* Open `CATSFC/system/language.msg`.
|
|
* Copy what's between `STARTENGLISH` and `ENDENGLISH` and paste it at the end
|
|
of the file.
|
|
* Change the tags. For example, if you want to translate to Japanese, the tags
|
|
will become `STARTJAPANESE` and `ENDJAPANESE`.
|
|
* Translate each of the messages, using the lines starting with `#MSG_` as a
|
|
guide to the context in which the messages will be used.
|
|
|
|
If you are not comfortable editing C code, or cannot compile CATSFC after your
|
|
changes, you may instead test your translation in the English block and submit
|
|
it. That allows you to look for message length issues and to align the option
|
|
names and values to your liking with spaces.
|
|
|
|
If you wish to also hook your language into the user interface, you will need
|
|
to do the following:
|
|
|
|
* Edit `source/nds/message.h`. Find `enum LANGUAGE` and add the name of your
|
|
language there. For the example of Japanese, you would add this at the end of
|
|
the list:
|
|
```
|
|
,
|
|
JAPANESE
|
|
```
|
|
* Still in `source/nds/message.h`, just below `enum LANGUAGE`, you will find
|
|
`extern char* lang[` *some number* `]`. Add 1 to that number.
|
|
* Edit `source/nds/gui.c`. Find `char *lang[` *some number* `] =`.
|
|
Add the name of your language, in the language itself. For the example of
|
|
Japanese, you would add this at the end of the list:
|
|
```
|
|
,
|
|
"日本語"
|
|
```
|
|
* Still in `source/nds/gui.c`, find `char* language_options[]`, which is below
|
|
the language names. Add an entry similar to the others, with the last number
|
|
plus 1. For example, if the last entry is `, (char *) &lang[7]`, yours would
|
|
be `, (char *) &lang[8]`.
|
|
* Still in `source/nds/gui.c`, find `case CHINESE_SIMPLIFIED`. Copy the lines
|
|
starting at the `case` and ending with `break`, inclusively. Paste them
|
|
before the `}`. Change the language name and tags. For the example of
|
|
Japanese, you would use:
|
|
```
|
|
case JAPANESE:
|
|
strcpy(start, "STARTJAPANESE");
|
|
strcpy(end, "ENDJAPANESE");
|
|
break;
|
|
```
|
|
|
|
Compile again, copy the plugin and your new `language.msg` to your card
|
|
under `CATSFC/system`, and you can now select your new language in CATSFC!
|
|
|
|
# Compiling
|
|
|
|
Compiling CATSFC is best done on Linux. Make sure you have access to a Linux
|
|
system to perform these steps.
|
|
|
|
## The DS2 SDK
|
|
To compile CATSFC, you need to have the Supercard team's DS2 SDK.
|
|
The Makefile expects it at `/opt/ds2sdk`, but you can move it anywhere,
|
|
provided that you update the Makefile's `DS2SDKPATH` variable to point to it.
|
|
|
|
For best results, download version 0.13 of the DS2 SDK, which will have the
|
|
MIPS compiler (`gcc`), extract it to `/opt/ds2sdk`, follow the instructions,
|
|
then download version 1.2 of the DS2 SDK and extract its files into
|
|
`opt/ds2sdk`, overwriting version 0.13.
|
|
|
|
Additionally, you will need to add the updated `zlib`, DMA
|
|
(Direct Memory Access) and filesystem access routines provided by BassAceGold
|
|
and recompile `libds2a.a`. To do this:
|
|
|
|
> sudo rm -r /opt/ds2sdk/libsrc/{console,core,fs,key,zlib,Makefile} /opt/ds2sdk/include
|
|
> sudo cp -r sdk-modifications/{libsrc,include} /opt/ds2sdk
|
|
> sudo chmod -R 600 /opt/ds2sdk/{libsrc,include}
|
|
> sudo chmod -R a+rX /opt/ds2sdk/{libsrc,include}
|
|
> cd /opt/ds2sdk/libsrc
|
|
> sudo rm libds2a.a ../lib/libds2a.a
|
|
> sudo make
|
|
|
|
## The MIPS compiler (`gcc`)
|
|
You also need the MIPS compiler from the DS2 SDK.
|
|
The Makefile expects it at `/opt/mipsel-4.1.2-nopic`, but you can move it
|
|
anywhere, provided that you update the Makefile's `CROSS` variable to point to
|
|
it.
|
|
|
|
## Making the plugin
|
|
To make the plugin, `catsfc.plg`, use the `cd` command to change to the
|
|
directory containing your copy of the CATSFC source, then type
|
|
`make clean; make`. `catsfc.plg` should appear in the same directory.
|