Feb 27, 2018 at 7:31 AM
Senior Member
Modding Community Discord Moderator
CSE Discord Moderator
"I, Ikachan. The Life and Documentary of the OrigiNAL SQuiD."
Join Date: Jan 14, 2014
Location: Antarctica (The Penguins say Hi)
Posts: 153
Age: 24
Pronouns: he/him
This has been out on the CSMC for a bit now, but I figured the forums would probably like a link.
CMPGenerator is a modding tool that aims to make the process of creating large CMP/SMP TSC commands easy.
It's 99% feature complete right now, with the last 1% being a few extra options/quality of life improvements.
The program's pretty simple to use (and should be Mac/Linux compatible thanks to Mono), but if you want some sort of a tutorial, feel free to read this quick guide:
Demo / Download / Source Code
CMPGenerator is a modding tool that aims to make the process of creating large CMP/SMP TSC commands easy.
It's 99% feature complete right now, with the last 1% being a few extra options/quality of life improvements.
The program's pretty simple to use (and should be Mac/Linux compatible thanks to Mono), but if you want some sort of a tutorial, feel free to read this quick guide:
Currently, CMPGenerator works off of .pxm files directly, so before you begin, make sure you know what the actual file names of your maps are.
- Start the program and click "File" -> "Open" -> "Map 1...".
- Select the map file you would like to use as a base, then select the tileset that belongs to it (or one that doesn't, if you like glitches).
- Unless you plan on turning this map (or a portion of it) into another separate map, you can click "Yes" to loading this map as map two. Otherwise, it's the same map opening process as last time.
- Now that you have your maps opened, make some edits! None of these changes are saved to the .pxm file unless you manually click "Save As..." and overwrite, so feel free to mess up either map as much as you want.
- As you make changes, CMPGenerator will automatically generate a long string of CMP/SMP commands that turn map one into map two. In the event it doesn't, just click "Regenerate" under "TSC Options".
- Copy/Paste the tsc into your editor of choice. In the event your game crashes on loading the map, try using the "tsc_malloc" xml in boosters lab's hackinator.
- By default, CMPGenerator will not generate any CMP/SMP code for tiles that don't need any change. This can be changed by unchecking "Ignore Identical Tiles" in the main CMPGenerator window.
- As I mentioned in Getting Started, CMPGenerator can load two completely separate maps if you so desire. Doing so does not account for anything but the tile data however, so it's up to you to account for differences in the tileset.
- Each map has an adjustable rectangle overlayed on top of it called the "range", which determines what tiles are actually being considered for CMP/SMP generation. It can be adjusted using the "Range Editor".
- Map one's range can either be as big as map one, or as big as map two's range, while map two's range has no limit (No, that doesn't mean you can have the range be outside the map boundaries).
- In the event map one and map two's ranges' are not the same size, CMPGenerator will automatically generate the appropriate OOB TSC flags to resize the map.
- Depending on how you resize the map, Cave Story may end up pulling tile data out of ram. To simulate this, CMPGenerator has a bunch of different map importing options (which can be found in each map's "Open..." menu), and makes use of a feature called a "null tile". Null tiles represent tiles whose values will be pulled from RAM at runtime, and so can not be easily predicted. You can place these manually, but their main purpose is for use with those custom import options (in the event you do know what map was previously loaded/what tiles will be there).
- Having null tiles in either range will disable use of SMP.
- If you already have some CMP/SMP/OOB TSC flags you would like to apply to a map (maybe you're adding on to a previous set of CMP/SMP commands), just click "Apply TSC", paste in your code, and hit "Ok".
Demo / Download / Source Code