Ondo
Smash Apprentice
- Joined
- Jun 20, 2007
- Messages
- 160
Compacted CSS
This CSS has one major change - it is 2,847 KB, down from Project M 3.6's 3,324 KB.
There are a couple minor visible changes as well - I've removed the shadows cast by the CSS icons; they looked good in vBrawl, but I don't think they work with the Project M background. Also, the flashing new icon is never visible, rather than appearing over any character that was unlockable in vBrawl that you've never played on your current save.
If you want to change the CSPs in this build, see the section on Making Efficient CSPs in this post.
I've put details of what exactly was changed in spoilers, for anyone who cares. Most useful if you want to make some or all of these changes in your own CSS, rather than starting from this one.
Changes to the CSPs:
Changes to sc_selcharacter.pac, just to make it smaller:
Changes that simplify editing parts of sc_selcharacter.pac, in addition to making it smaller:
Download here. Install by copying the included sc_selcharacter.pac over the Project M one (in projectm\pf\menu2).
Making Efficient CSPs
The Character Selection Portraits in these CSSs are all 128x148, as their bottom 12 rows were not being displayed anyway.
Additionally, to make the CSPs compress better, pixels that are never visible (even when using the C stick) were replaced with transparent pixels. For most characters, I included pixels that are not directly visible, but cast a shadow that is visible. For portraits that fill the bottom left corner where the shadow would be visible, like those of Ganondorf and Ike's default costume, I have another mask that only includes the pixels that are directly visible.
You can grab the masks, and the batch file I use to do the conversion, here. It requires ImageMagick. Running it works like "ReduceCSPs Mask.gif", to convert every PNG file in the directory you're in, and all sub-directories (recursively), to 128x148, with the pixels that are black in Mask.gif converted to transparent.
If you want to do it in a safer way, you can just run "convert INPUTFILE -crop 128x148 Mask.gif -compose DstOut -composite OUTPUTFILE". (Replace INPUTFILE with the file you want to convert, and OUTPUTFILE with whatever you want to name the result. Same as INPUTFILE if you just want to overwrite, which is what the batch file does but probably not what you want to do if you're doing them one at a time.)
If anyone has questions about this, let me know. I may work on a better tool for it at some point - I'd like it to be easy, since it helps significantly with saving space. (And improves the quality of CI8 images, as there are fewer colors to start with.)
Also, note that the results screen portraits are still 128x160, so a full size version should be kept around for them. (I'm not sure they need to be 128x160 - I haven't checked what pixels are visible - but they don't seem to have any file size issues anyway.)
Less Compressed CSPs
This builds on the Compacted CSS, and uses the extra available space to store CSPs as higher-quality CI8 instead of using CMPR. I did so for every portrait for which I had a source - that is, every portrait that was CI8 in either vBrawl, PM3.02, or PM 2.6b. I also made CI8 versions of some of the PM alts using sources from the HD Retexture Project.
It also uses a hack I've been working on to store CI8 textures very efficiently by having the indexes be stored only once for multiple images, with only the palettes differing. This CSS uses that technique for Mr. Game & Watch, and Fox and Falco's Melee alts. As a result, those are currently not well understood by BrawlBox, so I wouldn't recommend editing them.
Download here. Install by copying the included sc_selcharacter.pac over the Project M one (in projectm\pf\menu2).
No Names and Less Compressed CSPs
This builds on Less Compressed CSPs, and removes the names from each character's icon.
This is not just changing the Y translation of nameEA7, but actually removing all the data for the names, reducing the filesize by around 14KB. Here's a list of what I removed, for anyone who wants all the details:
Download here.
Out-of-the-Box CSS
A new layout for the CSS. Built on top of No Names & Less Compressed CSPs.
Download here. Install by copying the included sc_selcharacter.pac over the Project M one (in projectm\pf\menu2).
Upcoming Projects
Future plans include a Smash 3 CSS I've put significant work into, though it's been a while since I touched it. It still may undergo significant changes, but here's what I have so far:
This CSS has one major change - it is 2,847 KB, down from Project M 3.6's 3,324 KB.
There are a couple minor visible changes as well - I've removed the shadows cast by the CSS icons; they looked good in vBrawl, but I don't think they work with the Project M background. Also, the flashing new icon is never visible, rather than appearing over any character that was unlockable in vBrawl that you've never played on your current save.
If you want to change the CSPs in this build, see the section on Making Efficient CSPs in this post.
I've put details of what exactly was changed in spoilers, for anyone who cares. Most useful if you want to make some or all of these changes in your own CSS, rather than starting from this one.
Changes to the CSPs:
CSPs are now 128x148, as the final 12 rows were not being displayed anyway. To accomplish this, the texture UVs of MenSelchrCchar4 had their Y components multiplied by 160/148.
Pixels that were not visible were removed, as mentioned in the Making Efficient CSPs section.
The CSP for Diddy Kong's new orange costume was converted from RGB5A3 to CMPR. Mr. Game & Watch's CSPs were all converted to CI4 - the file is 3KB larger than if all 9 were CMPR, but the higher quality seems worth the small price. (I used uncompressed versions from the HD Retexture Project as a starting point.)
Pixels that were not visible were removed, as mentioned in the Making Efficient CSPs section.
The CSP for Diddy Kong's new orange costume was converted from RGB5A3 to CMPR. Mr. Game & Watch's CSPs were all converted to CI4 - the file is 3KB larger than if all 9 were CMPR, but the higher quality seems worth the small price. (I used uncompressed versions from the HD Retexture Project as a starting point.)
First, and easiest - MiscData[30] contains MenSelchrFaceA through MenSelchrFaceI; they are the models for the nine different sizes that faces can be, shrinking as you unlock more characters. For Project M, with 42 characters always available, only MenSelchrFaceI is needed - the others were deleted (from 3DModels, AnmChr, AnmClr, and AnmTexPat).
Another thing that saved a chunk of space is going through and switching the compression of everything in char_bust_tex_lz77 from LZ77 to ExtendedLZ77.
The MenSelchrFaceB.001 texture, in MiscData[30], is a copy of Mario's first CSP. It needs to exist (and have a palette) but is not shown. I replaced it with a 4x4 black square in CI4 format.
The various MenMainBack textures were deleted. They are from the old background that was replaced in Project M.
The model for "New!" was removed. (I don't think it makes any sense for Project M.) It was MenSelchrNew in the different sections of MiscData[30] - for the model (in 3DModels), I removed everything except one bone. The texture was deleted. For the animations (in AnmChr, AnmVis, and AnmClr), all the children of the animation were removed but the animation itself was not deleted. (If the model or animations are completely deleted, the game will freeze when going to the selection screen.)
MenSelchrCoin has 4 different animations, MenSelchrCoin_TopN__0 though MenSelchrCoin_TopN__3. For AnmClr, these are the colors for the four different players. In AnmChr, AnmVis, and AnmTexPat, only the first one is used, __1 though __3 were deleted.
There are a number of blank name images for character slots that aren't used - specifically, MenSelchrChrNm.201, 351, 381, 411, 421, 441, and 471. These textures were all deleted, and the references to them in AnmTexPat > MenSelchrCname4 > Card010 and Card011 > Texture0 were removed.
For the AnmChr of MenSelchrFaceI, I found every bone in the animation that had only one frame, made sure the values in that frame match the values for that bone in the model, and then removed that bone from the animation. This could be done for every animation, I think, but I only did it for this one. It doesn't save much space (around 1,500 bytes for this one, before compression), but it does make it so you can edit the bone on the model and not have it overridden by the animation (at least for the ones where the animation was removed; you still will want to check that first).
In char_bust_tex_lz77, there's a MiscData[41] with only blank images. That was removed.
Another thing that saved a chunk of space is going through and switching the compression of everything in char_bust_tex_lz77 from LZ77 to ExtendedLZ77.
The MenSelchrFaceB.001 texture, in MiscData[30], is a copy of Mario's first CSP. It needs to exist (and have a palette) but is not shown. I replaced it with a 4x4 black square in CI4 format.
The various MenMainBack textures were deleted. They are from the old background that was replaced in Project M.
The model for "New!" was removed. (I don't think it makes any sense for Project M.) It was MenSelchrNew in the different sections of MiscData[30] - for the model (in 3DModels), I removed everything except one bone. The texture was deleted. For the animations (in AnmChr, AnmVis, and AnmClr), all the children of the animation were removed but the animation itself was not deleted. (If the model or animations are completely deleted, the game will freeze when going to the selection screen.)
MenSelchrCoin has 4 different animations, MenSelchrCoin_TopN__0 though MenSelchrCoin_TopN__3. For AnmClr, these are the colors for the four different players. In AnmChr, AnmVis, and AnmTexPat, only the first one is used, __1 though __3 were deleted.
There are a number of blank name images for character slots that aren't used - specifically, MenSelchrChrNm.201, 351, 381, 411, 421, 441, and 471. These textures were all deleted, and the references to them in AnmTexPat > MenSelchrCname4 > Card010 and Card011 > Texture0 were removed.
For the AnmChr of MenSelchrFaceI, I found every bone in the animation that had only one frame, made sure the values in that frame match the values for that bone in the model, and then removed that bone from the animation. This could be done for every animation, I think, but I only did it for this one. It doesn't save much space (around 1,500 bytes for this one, before compression), but it does make it so you can edit the bone on the model and not have it overridden by the animation (at least for the ones where the animation was removed; you still will want to check that first).
In char_bust_tex_lz77, there's a MiscData[41] with only blank images. That was removed.
The basic method is taking the models with animations based either on the number of characters in the CSS or the size of the face models, and removing that animation since we now always have 42 characters and are using FaceI.
MenSelchrPos covers the positions of the faces, the main icons for selecting characters, and has a separate animation for every number of characters from 0 to 50. I simplified by copying the translation data from frame 43 of the AnmChr to the bones of the 3DModel, then removing the children of the AnmChr (but not deleting it entirely, because the game looks for it). I did the same child removal to the AnmVis. Also, I reordered the bones of the 3DModel to put them in numerical order (instead of having 2 after 19, for example), and deleted the bones for pos43 through pos50.
IMPORTANT WARNING - editing the MenSelchrPos model, which has bones but no polygons, will not work in BrawlBox 0.71 (and earlier, I think). Use BrawlBox 0.73b, available here.
MenSelchrCoin is the circle object that you drop on a character to mark who you pick - it gets smaller as the faces get smaller. To simplify it, I copied the data from frame 9 of the AnmChr to the bones of the 3DModel, and removed the children of the AnmChr except for scaleN (if scaleN is removed you can't use A to pick up the coin again after placing it on a character - no idea why). For scaleN, I reduced it to just 1 frame with the data from what was frame 9.
MenSelchrCursorB is the flashing box around the face you're coin is on or over. To simplify it, I copied the data from frame 9 of the AnmChr to the bones of the 3DModel, and removed the children of the AnmChr. (If I had not removed the shadow, I would have done the same for MenSelchrShadow, except using frame 10 instead).
MenSelchrPos covers the positions of the faces, the main icons for selecting characters, and has a separate animation for every number of characters from 0 to 50. I simplified by copying the translation data from frame 43 of the AnmChr to the bones of the 3DModel, then removing the children of the AnmChr (but not deleting it entirely, because the game looks for it). I did the same child removal to the AnmVis. Also, I reordered the bones of the 3DModel to put them in numerical order (instead of having 2 after 19, for example), and deleted the bones for pos43 through pos50.
IMPORTANT WARNING - editing the MenSelchrPos model, which has bones but no polygons, will not work in BrawlBox 0.71 (and earlier, I think). Use BrawlBox 0.73b, available here.
MenSelchrCoin is the circle object that you drop on a character to mark who you pick - it gets smaller as the faces get smaller. To simplify it, I copied the data from frame 9 of the AnmChr to the bones of the 3DModel, and removed the children of the AnmChr except for scaleN (if scaleN is removed you can't use A to pick up the coin again after placing it on a character - no idea why). For scaleN, I reduced it to just 1 frame with the data from what was frame 9.
MenSelchrCursorB is the flashing box around the face you're coin is on or over. To simplify it, I copied the data from frame 9 of the AnmChr to the bones of the 3DModel, and removed the children of the AnmChr. (If I had not removed the shadow, I would have done the same for MenSelchrShadow, except using frame 10 instead).
Download here. Install by copying the included sc_selcharacter.pac over the Project M one (in projectm\pf\menu2).
Making Efficient CSPs
The Character Selection Portraits in these CSSs are all 128x148, as their bottom 12 rows were not being displayed anyway.
Additionally, to make the CSPs compress better, pixels that are never visible (even when using the C stick) were replaced with transparent pixels. For most characters, I included pixels that are not directly visible, but cast a shadow that is visible. For portraits that fill the bottom left corner where the shadow would be visible, like those of Ganondorf and Ike's default costume, I have another mask that only includes the pixels that are directly visible.
You can grab the masks, and the batch file I use to do the conversion, here. It requires ImageMagick. Running it works like "ReduceCSPs Mask.gif", to convert every PNG file in the directory you're in, and all sub-directories (recursively), to 128x148, with the pixels that are black in Mask.gif converted to transparent.
If you want to do it in a safer way, you can just run "convert INPUTFILE -crop 128x148 Mask.gif -compose DstOut -composite OUTPUTFILE". (Replace INPUTFILE with the file you want to convert, and OUTPUTFILE with whatever you want to name the result. Same as INPUTFILE if you just want to overwrite, which is what the batch file does but probably not what you want to do if you're doing them one at a time.)
If anyone has questions about this, let me know. I may work on a better tool for it at some point - I'd like it to be easy, since it helps significantly with saving space. (And improves the quality of CI8 images, as there are fewer colors to start with.)
Also, note that the results screen portraits are still 128x160, so a full size version should be kept around for them. (I'm not sure they need to be 128x160 - I haven't checked what pixels are visible - but they don't seem to have any file size issues anyway.)
Less Compressed CSPs
This builds on the Compacted CSS, and uses the extra available space to store CSPs as higher-quality CI8 instead of using CMPR. I did so for every portrait for which I had a source - that is, every portrait that was CI8 in either vBrawl, PM3.02, or PM 2.6b. I also made CI8 versions of some of the PM alts using sources from the HD Retexture Project.
It also uses a hack I've been working on to store CI8 textures very efficiently by having the indexes be stored only once for multiple images, with only the palettes differing. This CSS uses that technique for Mr. Game & Watch, and Fox and Falco's Melee alts. As a result, those are currently not well understood by BrawlBox, so I wouldn't recommend editing them.
Download here. Install by copying the included sc_selcharacter.pac over the Project M one (in projectm\pf\menu2).
No Names and Less Compressed CSPs
This builds on Less Compressed CSPs, and removes the names from each character's icon.
This is not just changing the Y translation of nameEA7, but actually removing all the data for the names, reducing the filesize by around 14KB. Here's a list of what I removed, for anyone who wants all the details:
From 3DModels, MenSelchrFaceI, I removed the following:
The nameEA7 bone.
Face06 material.
Shader3 shader.
nameEA7__Face06 vertices.
#2 UVs
polygon3 object
MenSelchrNmS.000 texture.
I also removed Textures > MenSelchrChrNmS.000 and AnmTexPat > MenSelchrFaceI > Face06, and all the MenSelchrChrNmS Textures in MiscData[70].
The nameEA7 bone.
Face06 material.
Shader3 shader.
nameEA7__Face06 vertices.
#2 UVs
polygon3 object
MenSelchrNmS.000 texture.
I also removed Textures > MenSelchrChrNmS.000 and AnmTexPat > MenSelchrFaceI > Face06, and all the MenSelchrChrNmS Textures in MiscData[70].
Download here.
Out-of-the-Box CSS

A new layout for the CSS. Built on top of No Names & Less Compressed CSPs.
Download here. Install by copying the included sc_selcharacter.pac over the Project M one (in projectm\pf\menu2).
Upcoming Projects
Future plans include a Smash 3 CSS I've put significant work into, though it's been a while since I touched it. It still may undergo significant changes, but here's what I have so far:

Last edited: