Howe

Flexi Lemmix Tutorial - Part 3

Welcome to the Advanced section of the Flexi Lemmix tutorial! If you've read the Intermediate Tutorial, you should know everything you need to know to make a pack using the Flexi Toolkit. This part will teach you about manipulating the data files manually, rather than doing it through the app, in case you wanted more direct control, don't like the app's interface for a certain part, or perhaps even wanted to write your own tool to manage data.

When a project is saved from the Flexi Toolkit, it saves all the files needed for the pack, in the format the player uses them in. There's no packing everything into some unique obscure format, no seperate "project info" file - everything the toolkit saves is used by the end player, and in the same format; the only difference is that when compiled into a pack, all these files are packed into a single NXP file.

So, what exact files are there?
  • SYSTEM.DAT - This contains the information on the project's settings, texts, etc. Only Flexi itself can edit this file properly.
  • TALISMAN.DAT - This contains information, if any, on the game's talismans. Only Flexi itself (or the now-outdated Talisman Tool) can edit this file properly.
  • xxxx.LVL - These are the level files; they're stored in a "levels" subfolder.
  • levels.ini - This lists the positions of the levels. It's also stored in the "levels" subfolder.
  • xxxx.LRB / xxxx.NXRP - These are replay files. These always begin with the corresponding level's filename (including the .lvl extension), and are listed in replays.ini.
  • replays.ini - This lists details about the replay files.
  • <graphic sets> - These files also have a .DAT extension. The format of them is unique to NeoLemmix, though they are compressed with the same algorithm as DOS / traditional Lemmix.
  • <music files>.ogg / .it - These are the music files for your pack. The standard versions are stored in the main project folder, while the music pack versions are stored in a "MusicPack" subfolder.
  • ixxxx.txt / pxxxx.txt - These contain the preview and postview texts for any levels that have them. They're just plain ANSI text files; either CRLF or LF newline encoding is acceptable.
  • music.txt - This file contains the list of musics in the standard rotation.
  • <image files>.png - These are the custom graphics for your pack. The full set of names is listed below.
  • Custom Data Files - These can be anything, and are stored in a "files" subfolder.
So, how can one go about modifying these files directly? Firstly, a word of warning - never modify the files in the project file while the tool is open. The tool does not check for updated files, and will blindly overwrite them when you save your project. Instead, save your project, close the tool, then you may work with the files directly.

We'll start with levels. These are stored in a subfolder called "levels". The levels.ini file tells the toolkit which level is at what position. For example, if "Just Dig.lvl" is level 1 of rank 1, levels.ini would contain a line "0101=Just Dig.lvl". The order within levels.ini doesn't really matter, but it is important that there are no gaps (for example, if you have up to 0105, and have 0107, but do not have 0106, it will stop loading for that rank after 0105). You can have more than one position point to the same level file, in case you wanted a filler level for not-yet-filled slots in your project.

Replay files are somewhat complicated; I strongly suggest not attempting to modify these by hand. However, directly replacing existing replay files rather than re-importing them is generally okay. (Do note that Flexi won't detect they've changed and mark them as now being up-to-date; this still has to be done through the Replay Manager). If you feel confident enough, you can examine the replays.ini file; the hexidecimal number is the CRC32 of the level file the last time the replay was marked as up to date, and the rest should be easy to figure out.

Graphic sets are once again a matter of, just drop them in the folder. You can also edit them directly from the folder with the NeoLemmix Graphic Set Tool if you like. Likewise, musics work the same way - some things to keep in mind are that if you have both an OGG and an IT file for the same track, the OGG file has priority, and the IT will in fact get deleted if you open then re-save the project in the Flexi Toolkit.

Next, the text files. These should be named iRRLL.txt for a preview text, or pRRLL.txt for a postview text, where RR is the rank number (with the first rank being 01) and LL is the level number. These should be as two-digit numbers, ie: put a leading zero for single-digit numbers. However, in the event you have a rank with more than 99 levels, you simply put the level number as three digits, so for example, Rank 3 Level 105 preview text would be i03105.txt. The files themself are just plain text, nothing else; do keep in mind the limit of 40 characters per line, and 18 lines total. The files may exceed this, but larger number of characters will likely not fit on screen, while lines beyond the 18th are outright ignored. For those who are technically-minded enough to know what this means - it does not matter if the text files are CRLF or LF-only, but they must ANSI, not unicode / UTF-8.

The music.txt file is exactly the same as what you see in the Edit Music Rotation dialog. One track per line, in the order they should be in the rotation.

The image files are just standard PNG files - note that problems may occur if they're not 32-bit PNGs; and most certianly you cannot use BMPs here (the reason you can use them when importing through the toolkit is because the toolkit automatically converts then to PNGs). The full list of possible filenames are:
  • logo.png - The title graphic for the main menu. This should be exactly 632x94 in size. Semitransparency is supported.
  • background.png - The background used in the menu / preview / postview screens. This can be of any size, it will be tiled to fill the needed area. Semitransparency is not supported for obvious reasons.
  • sign_<type>.png - The signs on the main menu - the types are "play", "code", "rank", "config", "talisman" and "exit". The rank sign should be blank; ie: with no actual rank's name displayed on it. The normal size for these is 120x63, but they do not have to be exactly that; as long as they're close to it, they should work alright. Semitransparency is supported.
  • skill_panels.png - This is the blank skill panel, which the various icons will be drawn onto. It should not have an area for digits, and should be 16x23 in size. If you want more than one appearance, you can have a width that's a multiple of 16, and NeoLemmix will loop through each panel graphic. Masking is supported.
  • empty_slot.png - This is the graphic used for a skill panel slot that would have a skill, but is filling space in a level with less than eight types of skills in the skillset. Unlike the skill panels, you cannot have more than one graphic; it must be a single 16x23 panel. Masking is supported.
  • skill_count_digits.png - These are the digits for the skill count. All of them are contained in a single image, arranged horizontally starting from zero, with infinite and then locked at the end.The total image should be 56x8 in size (4x8 per digit, except infinite and locked which are 8x8). Semitransparency is supported, and it can be masked.
  • skill_count_erase.png - This is a bit misleading name; it's actually the skill digit area for panels that have one. Semitransparency is supported but not recommended. It can be masked, but the mask must be added as a custom data file.
  • minimap_region.png - This is the border of the minimap. It should be 111x16 in size.
  • rank_<number>.png - These are the graphics to appear on the rank sign for each rank. These are not the entire sign, but only a portion of it; the optimal size for these is 72x27, but slightly differing from that should still work (indeed, many of the official games' conversions use 73x28 images). Semitransparency is supported.
All mask images should have filenames matching the main image, with "_mask" added at the end (eg: to add a mask for skill_panel.png, you would call it skill_panel_mask.png).

The following additional image files can be added as Custom Data Files. These go in the "files" subfolder.
  • menu_font.png - This is the font used in the menu. All characters are in a single image, arranged horizontally. Each character is 16x16, for a total size of 1504x16. The characters are, in order: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~. Semitransparency is supported.
  • talismans.png - These are the talisman graphics as shown on the talisman list. The image contains all six graphics (three colors, in both active and inactive forms). The inactive ones are on the left, the active on the right; with bronze at the top, then silver, then gold. Each talisman graphic should be 48x48, making the total size 96x144. Semitransparency is supported.
  • scroller_lemmings.png - These are the lemming graphics displayed on the main menu scroller. All frames of both lemmings are combined into one single file, which is 96 x 256 in size (each frame being 48x16). The left-side lemming is on the left, the right-side lemming is on the right, and the animation frames are ordered from top to bottom. Semitransparency is not supported.
  • scroller_segment.png - This is the graphic that is tiled to make the actual scroller itself (the scroller_lemmings.png only contains the lemmings at the ends). This should be 16x16 in size. Semitransparency is not supported.
  • panel_font.png - This is the font used on the skill panel. All of them are in a single image, arranged horizontally. Each character is 8x16, for a total size of 352x16. The characters are, in order: %0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ. Semitransparency and masking are both supported.
  • panel_icons.png - These are the other icons used on the skill panel. Each icon is 8x16, for a total size of 56x16. The icons are, in order: replay mode (no insert), lemmings to spawn, lemmings alive, save requirement, stopwatch (time taken on no-time-limit levels), hourglass (remaining time on time-limited levels) and replay mode (insert mode active). Semitransparency and masking are both supported.
  • icon_<name>.png - These are the graphics drawn onto the skill panels to show their function. For the skills, the name is the name of the skill. Other valid names are, in the order they're shown in-game, "rr_minus", "rr_plus", "pause", "nuke", "ff", "restart", "1fb", "1ff", "clearphysics", "directional", "load_replay" and "minimap". Note that the split in the middle of the directional select button is in fact part of the icon graphic itself. Semitransparency and masking are supported.
  • tick.png - This is the green tick shown on the level select screen to mark a level as having been completed. Semitransparency is supported.
Custom lemming sprites are also added as custom data files in the "files" folder. It is recommended to use the default sprites as a starting point. If you simply want to make a couple of changes to the default sprites, you can simply put a custom file with a matching name. If you want to include a custom set, you must change the name so the prefix matches your custom set name (eg: if your set is called "mylems", you should have eg "mylems_walker.png", "mylems_digger.png", and so on). Every lemming sprite supports masking, and none require a mask (not even those that do have one in the default sprites). The xxxx_scheme.nxmi file is important too; this defines how many animation frames each sprite has, and where its foot position is. Generally, if your sprites are based off the default ones, you won't need to change anything in the scheme file, but you'll still need to include a copy of it. For anyone who is advanced enough to be modifying the scheme file, it should be simple enough to figure out how it works; note that the whitespace in it before the start of each line is not significant, but any whitespace after the first non-whitespace character on a line is considered significant. Blank lines are also not significant, and lines that don't have a meaningful keyword at the start, as long as they don't start with a $ sign, will simply be ignored (though it is recommended to start any comments with a #).
So, that concludes everything you need to know about the Flexi Toolkit. Hope you're finding it useful, and I look forward to seeing your packs! :)