Adam Nielsen edited this page May 15, 2016 · 49 revisions

This is the to-do list for Camoto. If you find anything that's incomplete or doesn't work yet, please add it to this page so we don't lose track of it!


These issues are not specific to any games.


  • [High] There is no standalone editor that can load files outside of a game.
  • There is no palette editor.
  • There is no B800 (text screen) editor.
  • There is no sound editor.
  • editor-tileset: Need to be able to right-click on a tile to export or replace it, so you don't have to do that to the whole tileset.
  • editor-tileset: Need to be able to insert and delete tiles.
  • [Easy] editor-tileset: Cosmo Actors tileset has background transparency, but the tileset viewer doesn't show them as transparent.


  • Rename 'fmt' to 'arch' in filenames and Doxygen headers to match other libraries.
  • dat-hugo: Add test code for separate-FAT variant (looks like this will bring out some bugs)


  • tls-jill is currently read-only, add write support. Will have to come up with a method of handling the VGA, EGA and CGA colour maps. Perhaps another level of palettes? (see also Jill below)
  • Tileset_FromImageList doesn't handle Item::SplitType::SingleTile yet


  • IMF, MIDI and other non-tracked files need to be optimised on load so that each note is as close as possible instead of hundreds of "rows" apart.

  • Add test to confirm saving a song with identical patches (only differing in .rhythm flag) get merged into the one entry.

  • TBSA: files play perc notes at the same time, but they happen to be read in correctly so they sound fine when playing. But when writing them out e.g. to an IMF file, the order gets swapped so the wrong frequencies are used, and the IMF version doesn't sound correct.

    Create a new type of 'priority event' (if this will work for the mod nature of TBSA) and store the priority of each event on the two shared OPL channels, so that after the song is loaded, a function can run through the events in a song and convert the prioritised notes to normal notes, while at the same time copying the frequency from all the highest priority notes to the lower ones.

    Then once this is done, remove the CMF-specific priority code from the MIDI handler and make it use this shared code too.

  • TBSA: Confirm whether the EffectEvent::Volume really does change the note volume immediately as is currently implemented or whether it controls the volume of the next event.

  • MIDI: Recognise MIDI control event to change patches, not just patch-change event.

  • IBK: Add test code.

  • New test: Note, delay, tempo change, another delay. Confirm the total length is calculated correctly.

  • libgamemusic: Refactor psMusic to input in all isInstance() functions.

  • S3M: Work out how the finetune (c2spd) works for Adlib instruments (check ST3 sources?)

  • S3M: Implement pitch bends

  • DSM: Implement pitch bends (currently ignored)

  • Dark Ages song 5 has a wrong/loud instrument, and the Vinyl instruments (esp. tafa.mus) sound too loud as well. Is there a problem with the note velocity calculations?

  • Add XMI support

  • Add .mid type-1 support

  • Add SF2/DLS support

  • Add BNK support for 256 instrument OPL GM+perc bank for MIDI playback w/ percussion

  • Add support for 3D Realms' EMIDI spec


Captain Comic

  • libgamemaps: Tileset filename for each map is read from the start of the EXE file (which is wrong.) Figure out how to find the right offset and return the correct tileset filename.

Cosmo's Cosmic Adventures

  • [Easy] Studio prompts about actor tilesets possibly being in the wrong format, but they all load fine.
  • Some actor images are wrong (E1L1).
  • Player start point shows up as question mark - should be handled as generic start point.
  • Need a lookup table of actor position offsets - some are one tile too low, some aren't, some are flipped, some are hanging, etc.

Crystal Caves

  • Remove a lot of the tiles from the foreground layer, as they cause confusion and many don't work at all
  • Add support for setting (and drawing correctly) the different background tiles and wall styles
  • Add tests for resizing tilesets
  • Update offsets when changing subtileset dimensions (?)

Dangerous Dave

  • Add support for getting and setting the player start position
  • tls-ddave: Should realSize be smaller than storedSize? (because of the padding byte)

Dark Ages

  • Add files for episode 2 and 3.
  • See Music above for instrument/velocity issues.
  • Add write support for AdLib MDI music. (Probably don't need a write flag, just allow MIDI files to be written with OPL patches present.)


  • Make sure game can load and play newly created TBSA .bsa music files.

Duke Nukem I

  • Finish working out tile mapping.
  • Allow multiple tiles to be combined into larger images so 2x2 enemies and things like the rocket appear in full.
  • [Easy] Studio prompts to open each tileset as the format isn't identified correctly.
  • Backdrops won't open, because the header bytes indicate there are zero tiles. Create a new type duke1-drop based off ccaves-sub to override this. Or create a special image type similar to CosmoBackdropImageType so the resulting single image can be used as a map backdrop in the level editor.
  • Sound effects cannot be opened (Studio) or edited (libgamemusic).

Duke Nukem II

  • Images for map actors are not drawn, and show up as question marks.
  • Teleporters (e.g. E1L1) cannot be edited.
  • [Low] Map backdrop is fixed and shrunk to fit, rather than being parallaxed (if that option is set in the map file.)


  • Add to Camoto Studio, music can be extracted


  • Add to Camoto Studio, music can be extracted (and maybe played once XMI support is added)

God of Thunder

  • Finish reverse engineering the map format (3*16 bytes after actor later + 40 bytes after object layer)
  • Figure out how the actor tiles work and implement support for them
  • Populate music attribute with song filenames
  • Populate tile list for default background tile

Halloween Harry

Hocus Pocus

  • Level editor doesn't place point items correctly.
  • Can't edit warp points.
  • Can't edit destroyable walls.

Jill of the Jungle

  • [Easy] Add files for episodes 2 and 3.
  • Need tile writeback function as tileset cannot currently be modified
  • Work out a way of providing access to CGA and EGA tiles as well. Perhaps multiple palettes for the tileset?
  • Tiles need to hold a reference to the main tileset (like stream_archfile)

Major Stryker

  • No level editor.
  • Files from epsiodes 2 and 3 need to be added to the XML, along with all levels from episode 1.


  • mus-dmx: Handle percussion on channel 15.

Secret Agent

  • Add a number to each level sprite on the world map to indicate which level it will go to. These are position-based, so numbers will change on potentially all sprites as a new one is added or one is moved. Probably no way to automatically reorder levels though.


  • The list of required sprites in map files needs to be set, and treated differently to Monster Bash. Until this is done, levels won't be able to be edited correctly.

Stellar 7

  • .raw capture is missing deep bass note at end of Dynamix logo when played through gamemus (note is present when same .raw file is played through AdPlug. Note is present in the game too.)


  • mus-dsm-dsik: Implement pitch bends

Vinyl Goddess From Mars

  • Music: When a tom-tom note is played, the frequency must be immediately updated on the other three single-operator percussive channels. Currently the pitch is not updated until the next notes are played, so the hi-hat and snare may sound incorrect on songs that use the tom-tom.
  • Music: Handle default melodic and percussive instruments if we can find a song that uses them. Maybe make decode-midi start with patch 255 instead of patch 0 so it's clear when no patch has been set.
  • Music: Figure out the correct default percussion pitch. The docs say two octaves below middle-C for tom+cymbal, and seven semitones above that for hihat/snare, but that doesn't sound the name. Vinyl's crush.mus comes out at 0.147Hz (OPL block 0 fnum 3) for the hihat/snare which is definitely not seven semitones above two octaves below middle-C...
  • Music: Add write support for .mus files.
  • Music: Allow .tim files to be loaded independently of .mus as well as with .mus.
  • Maps: Mark levels as read-only in release versions of Camoto Studio until the file format has been reverse-engineered enough to allow modification. Currently the game won't load levels that have been saved with Camoto.
  • Maps: Add support for all the data following the foreground layer.

Wacky Wheels

  • Finish reverse engineering .klm music format, fix read+write code.

Word Rescue

  • Actors all appear too low - looks like the coordinates are of the bottom of the images rather than the top.

Zone 66

  • mf2gmuz.z66 has a pattern-break event at the end. Handle it, to avoid a long delay when looping.
  • Handle extra attributes in tile map like destroyed tiles, which are currently lost when saving a level.
  • Provide a way for tileinfo to be edited, so that animated tiles can be customised.
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.