• Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 250,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!

    You are currently viewing our boards as a visitor. Click here to sign up right now and start on your path in the Smash community!

The Complete CSP Compendium

CeLL

Smash Lord
Joined
Jan 26, 2014
Messages
1,026
Location
Washington
Oh, no. I've thought in the past an archive of pngs might be useful, but never started one.

FastStone (which I use as my default imaging program, instead of the sub-par default program Windows uses) includes a batch convert feature. It's under the Tools tab.

Though it might be just as easy to dump them with Dolphin. Just delete all the images in the image dump folder after you load up the CSS and run through each of the character's costumes real quick.
Thanks that works.
 

Sempai

Smash Ace
Joined
Apr 9, 2007
Messages
614
Location
Wildwood/St.Louis, MO
Apologize for my absence.

Ive taken on waaay too many projects over the past couple months. Smash related and otherwise.

In any case, Ill try to have mew2 and jiggs CSPs done within a week.
 

mooki

Smash Apprentice
Joined
Apr 13, 2013
Messages
157
Location
Cali
@ DRGN DRGN Ok, I feel like such a scrub right now. I tried to add the SNES Captain Falcon CSP to the original MnSlChr.usd via the DAT Texture Wizard, and because there's no placement file (not that I expected one) I added the offset myself by looking in placement.txt. The line "34 - 0011f040 ~*CAPTAIN FALCON" shows the offset 0011f040 so the "Source Textures" in DTW showed "D:\Desktop\Textures\SNES Falcon CSP.tpl --> 0011f040" (this is all semi-redundant but I thought I'd explain it so it shows that I felt like I knew what I was doing, and wasn't just coming to you for things already stated). Well anyways, it crashes my game. Is that not the correct offset?

Edit: Solved through random guessing, haha. Didn't know for DTW to work with CSPs you needed to add/leave _9 on the end of the .tpl filename. Didn't read that anywhere in the documentation so I'm wondering what else I missed. Could you please point me to where it said so @ DRGN DRGN ? :)
 
Last edited:

CeLL

Smash Lord
Joined
Jan 26, 2014
Messages
1,026
Location
Washington
How do you manually add TPLs with a hex editor? Just copy the contents and paste it over the correct offset like with dats?
 

Doq

Smash Lord
Joined
Dec 28, 2012
Messages
1,037
Location
The Lab, Sweet Home, OR
I thought it was 0x260 onward and then 0x20-0x210 for the palette.

But I'm not talking about TPLs created with the DAT wizard, as I've never used it for palette images.
I dunno. I haven't done CSP injections in a year or so, so I don't remember. You're probably right tho.
 

T4Varsity

Smash Apprentice
Joined
Mar 20, 2010
Messages
77
Location
Las Vegas, NV
DRGN has a good explanation of how a TPL file is structured here, as far as I know you just need to copy the image data to the offset listed in Steelia's packs and then directly after it add the palette data (I may be slightly off about that, haven't done it in a while either). At least that's how you need to copy it for adding a CSP to MnSlChr.usd.
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
@ DRGN DRGN Ok, I feel like such a scrub right now. I tried to add the SNES Captain Falcon CSP to the original MnSlChr.usd via the DAT Texture Wizard, and because there's no placement file (not that I expected one) I added the offset myself by looking in placement.txt. The line "34 - 0011f040 ~*CAPTAIN FALCON" shows the offset 0011f040 so the "Source Textures" in DTW showed "D:\Desktop\Textures\SNES Falcon CSP.tpl --> 0011f040" (this is all semi-redundant but I thought I'd explain it so it shows that I felt like I knew what I was doing, and wasn't just coming to you for things already stated). Well anyways, it crashes my game. Is that not the correct offset?

Edit: Solved through random guessing, haha. Didn't know for DTW to work with CSPs you needed to add/leave _9 on the end of the .tpl filename. Didn't read that anywhere in the documentation so I'm wondering what else I missed. Could you please point me to where it said so @ DRGN DRGN ? :)
Yeah, those image type numbers with that underscore should pretty much always be on the image no matter what you're doing (because there's no other way to tell what type it is, once it's no longer a TPL). I'll check the documentation and make sure it's in there. Thanks.
I thought it was 0x260 onward and then 0x20-0x210 for the palette.

But I'm not talking about TPLs created with [PNG to-from TPL]...
This is correct. But only for TPLs created with TexConv.exe
For others, check out the link T4Varasity posted above to find the offset ranges.
Or you could just use DAT Texture Wizard, which does this automatically regardless of what made the TPL.
 

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
I really dont want to deal with pallet offsets. DRGN would it be feasible with your program to go from tpl to png to _5 type back to tpl?
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
I really dont want to deal with pallet offsets. DRGN would it be feasible with your program to go from tpl to png to _5 type back to tpl?
So you mean to go from _9 TPL to _5 TPL? My current programs don't have this ability, but I could make a new program to do this. You know how to do it manually already, right? We did it with that Zelda/Sheik CSP that we put in the game without a palette for a proof of concept. So you should know then that the problem is that _5 take more space than _9, so they won't fit in the same space in the file.
 

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
So you mean to go from _9 TPL to _5 TPL? My current programs don't have this ability, but I could make a new program to do this. You know how to do it manually already, right? We did it with that Zelda/Sheik CSP that we put in the game without a palette for a proof of concept. So you should know then that the problem is that _5 take more space than _9, so they won't fit in the same space in the file.
Yeah if you remember, I just added the image at the end of the file. I want to know how far that method could be pushed as in can it be done for every character. The MnChrSl is one of the larger files and it might go over the size limit allowed.
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Yeah if you remember, I just added the image at the end of the file. I want to know how far that method could be pushed as in can it be done for every character. The MnChrSl is one of the larger files and it might go over the size limit allowed.
A long time ago I tried adding a complete set of CSPs to the end of MnSlChr (copy and pasting all the originals at the end) and it did not work. This is why I've totally abandoned working on this idea for the time being.
 

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
A long time ago I tried adding a complete set of CSPs to the end of MnSlChr (copy and pasting all the originals at the end) and it did not work. This is why I've totally abandoned working on this idea for the time being.
That wont be loaded into the ram. But I think I found out what I was doing wrong adding relocation entries. If Im right then what you tried would work. Similar to how when I added the image to the end I had to change the pointer to the new location. Otherwise it isn't loaded into the ram.
I really dont want to go and find the locations in ram though. If you include the pallets its around 200 (25x4x2). Too tedious.
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
That wont be loaded into the ram. But I think I found out what I was doing wrong adding relocation entries. If Im right then what you tried would work. Similar to how when I added the image to the end I had to change the pointer to the new location. Otherwise it isn't loaded into the ram.
I really dont want to go and find the locations in ram though. If you include the pallets its around 200 (25x4x2). Too tedious.
It loads into the RAM if you change the file length (first line of the file). One of the big projects I'm working on is converting my debug menu into the MnSlChr file. It definitely gets loaded into the RAM.
 

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
It loads into the RAM if you change the file length (first line of the file). One of the big projects I'm working on is converting my debug menu into the MnSlChr file. It definitely gets loaded into the RAM.
Are you sure everything is. When I added the image to the end of the file I searched for the previous image (good thing I was too lazy to remove it) and it wasnt there. It only loaded when I changed the relocation table. Maybe its treating it as an extension of the string table if its still loading.
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
Are you sure everything is. When I added the image to the end of the file I searched for the previous image (good thing I was too lazy to remove it) and it wasnt there. It only loaded when I changed the relocation table. Maybe its treating it as an extension of the string table if its still loading.
Yes, I'm sure. There's obviously a limit, but I don't know what that is. Somewhere between adding nothing and adding the length of every character's csps. I play the game on Dolphin and Wii and my debug menu boots up. This means it is loaded in the RAM.
 

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
Yes, I'm sure. There's obviously a limit, but I don't know what that is. Somewhere between adding nothing and adding the length of every character's csps. I play the game on Dolphin and Wii and my debug menu boots up. This means it is loaded in the RAM.
Well I guess theres no pointer to the size of the string table so itd just run until the file terminated.
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
That wont be loaded into the ram. But I think I found out what I was doing wrong adding relocation entries. If Im right then what you tried would work. Similar to how when I added the image to the end I had to change the pointer to the new location. Otherwise it isn't loaded into the ram.
I really dont want to go and find the locations in ram though. If you include the pallets its around 200 (25x4x2). Too tedious.
Ah, I see. Well if you figure out exactly what is needed for one file, perhaps we can script the rest.

A long time ago I tried adding a complete set of CSPs to the end of MnSlChr (copy and pasting all the originals at the end) and it did not work. This is why I've totally abandoned working on this idea for the time being.
I thought about doing that too. What type of images did you use? And which pointers did you change? Just those in the headers?
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
I thought about doing that too. What type of images did you use? And which pointers did you change? Just those in the headers?
I copied from the first CSP offset to the last CSP offset and then just pasted that (so every CSP in the game) at the end of the file. With the thought that this would be the minimum amount of space necessary for another complete set of CSPs. It did not work. So there was no use trying to even mess with pointers and stuff. It seems as though it simply can't hold enough information (in this single file) for two sets of CSPs.
 
Last edited:

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
I copied from the first CSP offset to the last CSP offset and then just pasted that (so every CSP in the game) at the end of the file. With the thought that this would be the minimum amount of space necessary for another complete set of CSPs. It did not work. So there was no use trying to even mess with pointers and stuff. It seems as though it simply can't hold enough information (in this single file) for two sets of CSPs.
Oh, OK. And you changed the file size value in the first line. Do you know if the total size of the ISO was still under the GC disc image limit?
 

Starreaver1

Smash Apprentice
Joined
Oct 12, 2013
Messages
132
Location
Minneapolis, MN/Princeton, NJ
I copied from the first CSP offset to the last CSP offset and then just pasted that (so every CSP in the game) at the end of the file. With the thought that this would be the minimum amount of space necessary for another complete set of CSPs. It did not work. So there was no use trying to even mess with pointers and stuff. It seems as though it simply can't hold enough information (in this single file) for two sets of CSPs.
Doesn't work for me either. What if you split the data?
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
Well, we can have more than one MnSlChr, right? So if we did that, the question is, how do we point to a location in a different file? I don't know, but it doesn't seem to make sense that we could just change a pointer.
 

Ndrew

Smash Rookie
Joined
Jul 10, 2014
Messages
20
If it's worth anything, I'd like a guide on how to do this, since most videos are either not good enough detail wise, or are outdated visually.
 

Starreaver1

Smash Apprentice
Joined
Oct 12, 2013
Messages
132
Location
Minneapolis, MN/Princeton, NJ
Well, we can have more than one MnSlChr, right? So if we did that, the question is, how do we point to a location in a different file? I don't know, but it doesn't seem to make sense that we could just change a pointer.
Yeah that part doesn't make much sense to me either. But I don't really understand how the game reads the CSP data, memory breakpoints on the data and certain pointers never trigger for me.
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
Theyre only read during the loading cycle.
Ah, that makes sense. So if we want to load something that's in the other file, we need to trigger another loading cycle and change which file is loaded into RAM. So how does the game reference or ID different files?
 

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
Ah, that makes sense. So if we want to load something that's in the other file, we need to trigger another loading cycle and change which file is loaded into RAM. So how does the game reference or ID different files?
When I said read I was referring to the file. The game reads the data from the file and stores it during the loading cycle in ram. The problem is that I think the ram only has room for 4MB for the mnslchr and if you add in every character its 6MB. If you change the file name MnSlChr.usd to MnSlChr.dat in the ram it will load the japanese version instead. So in theory if you could figure out how to get the game to only load part of a file while leaving the rest intact you could hotswap the CSP data.
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
When I said read I was referring to the file. The game reads the data from the file and stores it during the loading cycle in ram. The problem is that I think the ram only has room for 4MB for the mnslchr and if you add in every character its 6MB. If you change the file name MnSlChr.usd to MnSlChr.dat in the ram it will load the japanese version instead. So in theory if you could figure out how to get the game to only load part of a file while leaving the rest intact you could hotswap the CSP data.
Right, I understood what you meant by read.

Although I'm not sure what you mean by "if you add in every character." You mean every character's CSP images? I think the game already has a function to only load a portion of the file into RAM. If so, I wonder how we could find this function. Once found, I imagine it should be possible to call it ourselves with our own arguments. e.g. tell it what file to load from, and which part(s).
 
Last edited:

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
Right, I understood what you meant by read.

Although I'm not sure what you mean by "if you add in every character." You mean every character's CSP images? I think the game already has a function to only load a portion of the file into RAM. If so, I wonder how we could find this function. Once found, I imagine it should be possible to call it ourselves with our own arguments. e.g. tell it what file to load from, and which part(s).
Yeah but I dont know enough about loading cycles to do so. What I meant by every character was their CSP images. The game loads the whole file at once and doesnt read it again until its reloaded. There isnt enough room in the ram for two full sets of CSP images. If you knew what function was called that opened a file, you could reload the CSS tell it to ignore everything but the second set for that character and place it somewhere free in the ram and then change the pointers to it. If the size is small enough the loading cycle might be virtually seamless.
 

T4Varsity

Smash Apprentice
Joined
Mar 20, 2010
Messages
77
Location
Las Vegas, NV
Got some new CSPs for you guys! It was a lazy holiday season but now I feel like getting back into this and doing the rest of the roster. Next I'm going to do the rest of my Marth CSPs (defaults and some more alt costumes) and then I was thinking of doing Captain Falcon or Fox.

1st row: Defaults
2nd row: Brawl Peach, Black and Gold, Hatsune Miku, Purple Peach, Tinkerbell
3rd row: Christmas Peach, Gold and Black, Rosalina, Gardevoir Peach
4th row: NES Peach, Anju, Emo Peach
5th row: Akutsuki Peach, Dawn, Rosalina (no vertex hack)
6th row: Red Peach






 
Top Bottom