This is a WPF modding tool which edits the CCM Font Files found in many of the Souls games. It has been tested with Demon's Souls, Dark Souls 1, and Dark Souls 2. It allows you to edit the width and spacing of glyphs, add and remove glyphs, and edit the texture coordinates that glyphs are sourced from on their font textures. With this tool, it should be possible to make functional new fonts for the games. Furthermore, through a combination of font texture edits, FMG edits, and this tool, it should be possible to add previously unsupported languages to the games.
- Download the application from the Releases tab on the right in Github, then launch the CCMEdit.exe application.
- File -> Open to select the CCM file to edit. These are located in the "font/" folder of the unpacked game files, so you will need a tool like Nuxe to unpack.
- Select glyphs and edit the font information as needed using.
- Click File -> Save
- Your window is divided into two main views: the glyph view on the left, and the texture view on the right.
- On the glyph view half, the lower section shows the information of the currently selected glyphs.
- Unicode is the numeric unicode ID of the character.
- Width is the width in pixels that the glyph portion of the character. If it exceeds the difference between the Right and Left values, then it will be stretched when printed. If it is less than the difference between the Right and Left values, then it will be squeezed.
- Left Padding is the amount of pixel space placed before the character when printed.
- Right Padding is the amount of pixel space placed after the character when printed. In total, the full width of the character will be the sum of the Width, Left Padding, and Right Padding.
- Top is the top edge Y coordinate in pixels where the glyph is sourced from the texture sheet.
- Left is the left edge X coordinate in pixels where the glyph is sourced from the texture sheet.
- Right is the right edge X coordinate in pixels where the glyph is sourced from the texture sheet.
- Bottom is the bottom edge Y coordinate in pixels where the glyph is sourced from the texture sheet. If the texture size is increased, you will see these change alongside the texture size. That is because coordinates are actually percentages of the texture's width and height under the hood.
- In the upper glyph viewer half, you have a searchbar that will filter the list of glyphs to your search. If one character is entered, it will find the matching character, and if 2 or more are entered, it will try to find a matching Unicode ID.
- Also in the upper glyph viewer section, there is an "Add Glyph" button which will add the entered glyph onto the current texture. It will fail and warn you if you try to add something invalid or if the glyph you entered already exists on a different texture (there cannot be more than 1 entry of the same glyph). It uses the same logic as above, where it will add the entered character if it is only 1 character long, and if it is 2 or more, it will treat what you entered as a Unicode ID.
- On the texture view half, the top section contains boxes to toggle the currently viewed texture and the background color that shows behind transparent parts.
- Also on the texture view side, below the image, there is a number which tracks the position of the mouse on the image.
- Your top navbar contains "File" and "Edit" with a few useful tools. Notably, under "Edit->Change CCM Properties" you will find a new editor window:
- The Properties Window shows you some miscellaneous properties to set on the CCM file. Some of these are very important:
- Game Type is the game version to save the CCM as. There is little difference between versions, but it must be the correct one to work for the game you are using it for. DemonsSouls saves in Big Endian, while the others are assumed to be PC and save in Little Endian. DarkSouls1 is for both PTDE and remastered. DarkSouls2 is for all games from DS2 onwards (some games post DS2 use CCM for their debug menu fonts).
- Full Width is the maximum width of a character on screen. This is a common attribute in fonts, and is used to scale all other characters, so set this to be around what the largest character width in pixels you have in your glyphs, and tweak from there.
- Texture Count is the number of textures the game will read from the texture file. It is important to change this if you have added or removed font textures from the font texture TPF.
- Ref Texture Width & Ref Texture Height is, in practice, the same as the width and height of the textures contained in the font texture TPF. However, since the glyphs use percentage based coordinates, it doesn't seem to matter than much. It may have an important function in some cases, so it is left here just in case.
- Unk1C, Unk1D, and Unk0E are unknown values that usually cause a crash if you change them. Leave them default unless you are attempting to document what they do (and if you do figure it out, please let me know so I can update their names).
- Click glyphs in the glyph view to view their information.
- You can Ctrl + Click or Shift + Click to select multiple.
- Use the mouse wheel to zoom in and out on the texture viewer.
- Clicking and dragging with the middle mouse button will pan the texture viewer.
- Left mouse click on glyphs in texture viewer to select as an alternative way to select and view their information.
- You can resize some sections of your window by left clicking and dragging the dividers between the sections.
- Del key to delete selected glyph entries.
- There is currently no undo support with Ctrl + Z, edit with caution.
- If you select multiple glyphs, editting their values will set that value to be the same on all selected glyphs.
- If all selected glyphs have the same value in one of their properties, you will see that value instead of "--"
- Edit -> Move Selected to Texture will allow you to bulk move glyphs to a new texture.
- Edit -> Auto Width for Selected will automatically set the Width of all selected glyphs to be equal to it's Right property minus it's Left property.
- SoulsFormatsNEXT for file IO.
- DirectXTexNET for dds reading.
- Xceed Extended WPF Toolkit for a few XAML elements.