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:

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

Editing Monster Bash with Camoto 2013-09-27
Editing Crystal Caves with Camoto 2013-09-27

See the list of supported games.

Future expansion

These features have not yet been implemented, but are considered most important for future versions:

See also the to-do list.

Help / Discussion

Editing Zone 66 with Camoto 2014-12-05
If you're new to Camoto, see TODO[Getting Started with Camoto Studio](getting-started/).

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:

Download

Windows

Linux / Source code

Build instructions

Editing Word Rescue with Camoto 2013-09-27

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 Tick Tick
libgamearchive Tick Tick
libgamegraphics Tick Tick
libgamemaps Tick Tick
libgamemusic Tick Tick
camoto-studio Tick Cross

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:

  1. libgamecommon must be first
  2. libgamearchive, libgamegraphics, libgamemusic can be done next, in any order
  3. libgamemaps must be done after libgamegraphics
  4. camoto-studio must be done last of all

Dependencies

Here is a full the list of dependencies:

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

More Screenshots

Camoto Studio development as at 2011-08-16