Camoto Desktop
Camoto Desktop is a now discontinued collection of integrated utilities for editing (modding) "classic DOS games", those running under MS-DOS on the PC from the early to mid 1990s.
It has been superseded by Camoto Online, a Javascript rewrite that runs in a web browser. The rest of this page applies to the discontinued version and is left available for historical reasons.
News - December 2020
I have decided to "retire" the current version of Camoto, due to the following reasons:
- The group of people who are interested in modding DOS games and familiar with C++ is vanishingly small, so few people have been able to contribute to the codebase, despite quite a lot of interest.
- Getting Camoto Studio to compile under Windows is an exercise in frustration, and wastes weeks of effort that could be better spent adding support for more games.
- Getting Camoto Studio to run under Windows is also difficult, whether it's different versions of Windows missing DLLs or over-zealous virus scanners flagging it as malware, it requires a lot of time just to provide basic support.
For these reasons I have stopped work on the C++ version of Camoto Studio and all the libgame* libraries. I have no objection to anyone who wants to contribute to the libgame* libraries and will happily merge PRs over on GitHub, however I have no desire to continue working on the desktop version of Camoto Studio as the GUI code gives you an incredibly low return on the time you invest writing it.
Instead, my new plan is to switch to a more modern language and environment, namely JavaScript and the web browser. I am planning to rewrite all the libgame* libraries in JS (using NodeJS to provide the command line interfaces), and create a web-based version of Camoto Studio instead of the desktop version. This means no need to compile on Windows, so installation problems, the future possibility of having it work on mobile devices like an app, and most importantly hopefully a wider pool of people who will be able to contribute code to the project.
In the past I have always been enthusiastic about adding support for lots of different games and file formats, even before the functionality was there to make use of them, however this backfired somewhat. Many people complained that their favourite game had only incomplete support and they got their hopes up only to have them dashed, when they found that some critical feature was missing or something didn't work as expected. So this time I am focusing on getting everything fully working for only a much smaller number of games first, so that hopefully the games that are supported will work much better than they have with the older Camoto versions.
Main features
- Map editor for 2D tile-based/grid maps (most platform games, some early FPS games)
- Export and import images and tilesets as .png files with transparency
- Listen to Ad Lib music via software OPL synth (borrowed from DOSBox)
- Edits files directly inside group/archive files, no need to extract them first or merge them later
- Works with files in their native format, no need to distribute images of tilesets, and when changes are saved they are immediately visible if the game is launched
- Consistent user interface for editing many different games
See the list of supported games.
Future expansion
These features have not yet been implemented, but are considered most important for future versions:
- Automatically decompress .exe files (e.g. with unlzexe). This must be done manually at present.
- Package up a modified game into a single .exe that can be placed into a game's folder, and run without disturbing the original game files.
- Opening standalone songs and allowing conversion to all supported formats (to replace DRO2MIDI.)
See also the to-do list.
Help / Discussion
The 'official' help forum for Camoto is the RGB Classic Games modding forum. If you run into problems or have questions about Camoto, please ask them there.
You can watch development progress by following @CamotoModding on Twitter.
Contributing
Camoto is open source - please contribute! There are many ways in which you can help:
- Edit some games and if you find something that doesn't work properly, make sure it's on the to-do list
- If Camoto can edit file formats from a game but it's not in Camoto Studio's list of games, add it! See: How to add a new game to Camoto Studio
- If there are any file formats used by DOS games you know about, make sure they are listed on the ModdingWiki
- If you know C++, find some file formats on the ModdingWiki which haven't yet been implemented in Camoto and add them! See: How to add a new archive format to Camoto
- Keep an eye on the RGB Classic Games modding forum and help out anyone who's stuck modding or reverse engineering their favourite game!
Download
Windows
- camoto-install-20150221.exe (Windows 32-bit, 9.8 MB, git) - released 2015-02-21
- Previous version: camoto-install-20140115.exe (Windows 32-bit, 4.3 MB - released 2014-01-15
Linux / Source code
- libgamecommon-1.2.tar.bz2 (source only, 342 kB, git) - released 2015-02-21
- libgamearchive-1.2.tar.bz2 (source only, 437 kB, git) - released 2015-02-21
- libgamegraphics-1.2.tar.bz2 (source only, 423 kB, git) - released 2015-02-21
- libgamemaps-1.2.tar.bz2 (source only, 402 kB, git) - released 2015-02-21
- libgamemusic-1.2.tar.bz2 (source only, 475 kB, git) - released 2015-02-21
- camoto-studio-1.2.tar.bz2 (source only, 719 kB, git) - released 2015-02-21
Build instructions
The Camoto libraries underwent a significant rewrite in July 2016. Please ensure you use the '''v1.x''' git branch for all components if you want to compile the GUI. But if you want to contribute, please use the '''master''' branch as this is where all work is being done. The wxWidgets v1.x GUI has been discontinued, and a new GTK-based GUI is being written to replace it. The table below illustrates progress on the rewrite - those components with a tick are fully functional, while those with a cross have not yet reached a stage where they are usable (and may not even compile.)
Component | v1.x | master |
---|---|---|
libgamecommon | ||
libgamearchive | ||
libgamegraphics | ||
libgamemaps | ||
libgamemusic | ||
camoto-studio |
For Windows, see How to compile Camoto with Visual Studio.
Under Linux, the code is compiled in the usual way:
$ git clone git://github.com/Malvineous/libgamecommon.git
$ cd libgamecommon
$ ./autogen.sh
$ ./configure && make && sudo make install
Repeat for each of the Camoto support libraries. The order of the libraries is important:
- libgamecommon must be first
- libgamearchive, libgamegraphics, libgamemusic can be done next, in any order
- libgamemaps must be done after libgamegraphics
- camoto-studio must be done last of all
Dependencies
Here is a full the list of dependencies:
- libgamecommon: boost (test)
- libgamearchive: boost (filesystem, program options, test), libgamecommon
- libgamegraphics: boost (program options, test), libpng, pngpp, libgamecommon
- libgamemaps: boost (filesystem, program options, test), libpng, pngpp, libgamegraphics, libgamecommon
- libgamemusic: boost (filesystem, program options, threads, test), portaudio (optional), libgamecommon
- camoto-studio: boost (filesystem, threads), libpng, pngpp, wxwidgets >= 2.9.4 w/ GL support, libxml2, portaudio, glew, all libgame* libraries
- boost means boost >= 1.60
- pngpp means png++ >= 0.2.7
- portaudio means portaudio >= 2.0
User interfaces
The Camoto suite has a number of command-line interfaces to its functionality, as well as a single GUI that combines everything into one IDE-like environment.
Application | Library | Description |
---|---|---|
Camoto Studio (GUI) | camoto-studio | Cross-platform GUI combining the entire Camoto suite into a single integrated application |
gamearch | libgamearchive | View and edit group/archive files (like zip/unzip) |
gamecomp | libgamearchive | Encrypt/decrypt and compress/decompress individual files |
gametls | libgamegraphics | Extract (as .png), view (in ANSI/ASCII) and replace images within a tileset (a tileset is a single file containing many images) |
gameimg | libgamegraphics | View (in ANSI/ASCII) and replace single-image graphics files |
gamemap | libgamemaps | Examine game levels (hex dump, print metadata) |
gamemus | libgamemusic | Import, export and basic conversion of game music files |
dro2txt | libgamemusic | Dump events in DOSBox .dro captures as text. Events are handled so that OPL register writes in a different order won't change the output, providing the audio would sound the same, making it useful to use with a diff utility to compare two .dro files. Very useful to compare your own Adlib player with another one to ensure playback accuracy. |
dumppal | libgamegraphics | Read a .png image and dump the palette in a supported file format. |
dumpb800 | libgamegraphics | Read a 4000-byte B800 text screen on stdin, and write it to stdout, using ANSI colour escape codes so it is readable in a terminal. (You may still have to pass it through iconv -f cp437 to convert the glyphs, if you have a UTF8 terminal.) |
Developers
The Camoto codebase is broken up into the following libraries. Each library name is a link to the Doxygen documentation for that library.
Library | Issues link | Description |
---|---|---|
libgamecommon | report bug | Common functionality shared by multiple libraries. Endian independent stream functions, methods for reading and writing streams in units other than 8-bit bytes, and helper functions for various common tasks. |
libgamearchive | report bug | Interface to game archives (like .zip files where lots of game data is stored in one big file.) Allows full editing of supported file types. |
libgamegraphics | report bug | Examine, convert and modify game graphics in all their multitude of formats. This includes tilesets, sprites, backgrounds, animations, etc. |
libgamemaps | report bug | Provide a standard method of level editing. This will (initially) only support 2D grid-based maps, which means platform games and some early 3D games. |
libgamemusic | report bug | Play and convert music from supported games. The UI for this component will include real-time OPL/Adlib conversion to MIDI (to replace DRO2MIDI.) |
libgamesfx | Proposed library, not yet started. Listen to and replace sound effects - digitised (PCM), synthesised (Adlib) and PC speaker. Possibly this functionality will end up in libgamemusic as so much code is common between music and sound effects, and there is little technical difference between an instrument and a sound effect |
Further Reading
- While developing Camoto I discovered that Every Game Has a New Feature.