Hacking NDS ROM File Format

pekalicious

Member
OP
Newcomer
Joined
Jan 12, 2010
Messages
21
Trophies
0
Age
40
Website
pekalicious.com
XP
79
Country
Greece
Hello again,

Continuing on my quest to create a ROM Manager I am trying to find a good specification of the .nds ROM format.

What I found up until now is the following sites:

http://dsibrew.org/wiki/NDS_Format
http://www.bottledlight.com/ds/index.php/F...rmats/NDSFormat
http://imrannazar.com/The-Smallest-NDS-File

Although I had some luck reading the game title and some other data (which I verified using NDS Header Tool 2.0), I have problems of what type of data I am expecting to read, what are they for etc.

I also looked through the DeSMuME source code but had little luck on that.

Any ideas of where can I find more information about the format? Anyone here knows?

Thanks again!
 

Gryphon93

Well-Known Member
Member
Joined
Nov 30, 2008
Messages
145
Trophies
0
XP
252
Country
Wow! Why didn't I think of that? Of course the GBATek has all that information. Thanks a lot, FAST6191! (If you're wondering, I was also looking for this...)
 

pekalicious

Member
OP
Newcomer
Joined
Jan 12, 2010
Messages
21
Trophies
0
Age
40
Website
pekalicious.com
XP
79
Country
Greece
FAST6191 said:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

You are my hero!!!!
biggrin.gif
:D:D:D:D:D

I just can't thank you enough really!
 

DanTheManMS

aka Ricochet Otter
Member
Joined
Jun 2, 2007
Messages
4,453
Trophies
1
Age
34
Location
Georgia
XP
752
Country
United States
I had to draw a picture to figure it out, but I think I understand it. Okay, so let's just take a look at a single tile first. This tile is defined by a block of bytes, 4 wide by 8 tall. If you write this out as a series of bits, at 8 bits to a byte this gives you a block that is 8 rows of 32 bits each. At 4 bits to a pixel ("4bit depth") this gives you 8 rows of 8 pixels, or in other words, an 8x8 block of pixels (a "tile"). You then have a 4x4 arrangement of these tiles, which gives you a 32x32 pixel image.

This diagram I whipped together might help explain what I'm trying to say here:

Code:
Here's the 4x8 arrangement of bytes for a single tile:

B B B B
B B B B
B B B B
B B B B
B B B B
B B B B
B B B B
B B B B

If we expand that out into bits, we get something like:

11110000 11110000 11110000 11110000
00001111 00001111 00001111 00001111
11110000 11110000 11110000 11110000
00001111 00001111 00001111 00001111
11110000 11110000 11110000 11110000
00001111 00001111 00001111 00001111
11110000 11110000 11110000 11110000
00001111 00001111 00001111 00001111

Then space it out into pixels, 4 bits per pixel:

1111 0000 1111 0000 1111 0000 1111 0000
0000 1111 0000 1111 0000 1111 0000 1111
1111 0000 1111 0000 1111 0000 1111 0000
0000 1111 0000 1111 0000 1111 0000 1111
1111 0000 1111 0000 1111 0000 1111 0000
0000 1111 0000 1111 0000 1111 0000 1111
1111 0000 1111 0000 1111 0000 1111 0000
0000 1111 0000 1111 0000 1111 0000 1111

Which turns into pixels of various colors:

Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl

So then a single tile looks like this in the end, 8x8 pixels:

- - - - - - - - 
- - - - - - - - 
- - - - - - - - 
- - - - - - - - 
- - - - - - - - 
- - - - - - - - 
- - - - - - - - 
- - - - - - - - 

Then a 4x4 grid of those:

- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + + 
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +

+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 

- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + + 
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +

+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -

Hope this is correct, and if it is, hope it helped.
 

pekalicious

Member
OP
Newcomer
Joined
Jan 12, 2010
Messages
21
Trophies
0
Age
40
Website
pekalicious.com
XP
79
Country
Greece
DanTheManMS said:
I had to draw a picture to figure it out, but I think I understand it. Okay, so let's just take a look at a single tile first. This tile is defined by a block of bytes, 4 wide by 8 tall. If you write this out as a series of bits, at 8 bits to a byte this gives you a block that is 8 rows of 32 bits each. At 4 bits to a pixel ("4bit depth") this gives you 8 rows of 8 pixels, or in other words, an 8x8 block of pixels (a "tile"). You then have a 4x4 arrangement of these tiles, which gives you a 32x32 pixel image.

This diagram I whipped together might help explain what I'm trying to say here:

Code:
Here's the 4x8 arrangement of bytes for a single tile:

B B B B
B B B B
B B B B
B B B B
B B B B
B B B B
B B B B
B B B B

If we expand that out into bits, we get something like:

11110000 11110000 11110000 11110000
00001111 00001111 00001111 00001111
11110000 11110000 11110000 11110000
00001111 00001111 00001111 00001111
11110000 11110000 11110000 11110000
00001111 00001111 00001111 00001111
11110000 11110000 11110000 11110000
00001111 00001111 00001111 00001111

Then space it out into pixels, 4 bits per pixel:

1111 0000 1111 0000 1111 0000 1111 0000
0000 1111 0000 1111 0000 1111 0000 1111
1111 0000 1111 0000 1111 0000 1111 0000
0000 1111 0000 1111 0000 1111 0000 1111
1111 0000 1111 0000 1111 0000 1111 0000
0000 1111 0000 1111 0000 1111 0000 1111
1111 0000 1111 0000 1111 0000 1111 0000
0000 1111 0000 1111 0000 1111 0000 1111

Which turns into pixels of various colors:

Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl
Pixl Pixl Pixl Pixl Pixl Pixl Pixl Pixl

So then a single tile looks like this in the end, 8x8 pixels:

- - - - - - - - 
- - - - - - - - 
- - - - - - - - 
- - - - - - - - 
- - - - - - - - 
- - - - - - - - 
- - - - - - - - 
- - - - - - - - 

Then a 4x4 grid of those:

- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + + 
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +

+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 

- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + + 
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +
- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +

+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - - 
+ + + + + + + +ÂÂ- - - - - - - -ÂÂ+ + + + + + + +ÂÂ- - - - - - - -

Hope this is correct, and if it is, hope it helped.

...............

Wow! I'm absolutely blown away.... Only problem is, I have no idea how to split a byte into bits.. :S I am using Java.... I can do byte manipulation but not bit... I think it has something to do with shifting.... Which means I got a lot of reading to do right now... :/
 

pekalicious

Member
OP
Newcomer
Joined
Jan 12, 2010
Messages
21
Trophies
0
Age
40
Website
pekalicious.com
XP
79
Country
Greece
DanTheManMS said:
http://www.exampledepot.com/egs/java.util/Bits2Array.html might help. It looks like it takes in a sequence of bytes and returns a byte array of the equivalent bits. There's probably an easier way, but I honestly haven't had enough experience with Java to really know what I'm doing in that regard.

I don't remember how many times I said this in this thread, but, Thank you!
tongue.gif
 

DanTheManMS

aka Ricochet Otter
Member
Joined
Jun 2, 2007
Messages
4,453
Trophies
1
Age
34
Location
Georgia
XP
752
Country
United States
More brainstorming here, but if it's 4 bits to a pixel, I doubt each pixel is absolutely defined in RGB (red green blue) terms. Do you happen to know if there's a set palette that all DS icons use or something? Or if the palette is defined elsewhere in the rom? Because with 4 bits you can represent the decimal numbers 0 through 15, so my guess is that there's a 16-entry palette somewhere and every 4-bit pixel merely references a palette index.

For comparison, the GBA in mode 3 uses 16 bits to represent a single pixel. 5 bits for the red component, 5 for the green, 5 for the blue, and the last one goes unused, giving you 32*32*32 = 32,768 possible color combinations. In mode 4, you only have 8 bits per pixel, so rather than splitting it into 2 red 2 green 2 blue (which would give you 4*4*4 = 64 color combinations) they use the palette method to give you up to 2^8 = 256 possible colors on screen at once.

If this icon is 4 bits per pixel, if you wanted to use the red/green/blue approach you'd only have 2*2*2 = 8 possible colors (white, black, red, green, blue, and 3 in-between), which is why I'm guessing they use the palette method to get up to 16 colors.

Again, this is all purely a guess, and I doubt it will help you much, but it's interesting to think about at least.
 

pekalicious

Member
OP
Newcomer
Joined
Jan 12, 2010
Messages
21
Trophies
0
Age
40
Website
pekalicious.com
XP
79
Country
Greece
DanTheManMS said:
More brainstorming here, but if it's 4 bits to a pixel, I doubt each pixel is absolutely defined in RGB (red green blue) terms. Do you happen to know if there's a set palette that all DS icons use or something? Or if the palette is defined elsewhere in the rom? Because with 4 bits you can represent the decimal numbers 0 through 15, so my guess is that there's a 16-entry palette somewhere and every 4-bit pixel merely references a palette index.

For comparison, the GBA in mode 3 uses 16 bits to represent a single pixel. 5 bits for the red component, 5 for the green, 5 for the blue, and the last one goes unused, giving you 32*32*32 = 32,768 possible color combinations. In mode 4, you only have 8 bits per pixel, so rather than splitting it into 2 red 2 green 2 blue (which would give you 4*4*4 = 64 color combinations) they use the palette method to give you up to 2^8 = 256 possible colors on screen at once.

If this icon is 4 bits per pixel, if you wanted to use the red/green/blue approach you'd only have 2*2*2 = 8 possible colors (white, black, red, green, blue, and 3 in-between), which is why I'm guessing they use the palette method to get up to 16 colors.

Again, this is all purely a guess, and I doubt it will help you much, but it's interesting to think about at least.

Actually yes, there is the data of the color palette exactly after the image data. There are 16 colors of 16bit depth (32 bytes in total, 2 bytes each color). The first one is the transparent color.
 

pekalicious

Member
OP
Newcomer
Joined
Jan 12, 2010
Messages
21
Trophies
0
Age
40
Website
pekalicious.com
XP
79
Country
Greece
DanTheManMS said:
More brainstorming here, but if it's 4 bits to a pixel, I doubt each pixel is absolutely defined in RGB (red green blue) terms. Do you happen to know if there's a set palette that all DS icons use or something? Or if the palette is defined elsewhere in the rom? Because with 4 bits you can represent the decimal numbers 0 through 15, so my guess is that there's a 16-entry palette somewhere and every 4-bit pixel merely references a palette index.

For comparison, the GBA in mode 3 uses 16 bits to represent a single pixel. 5 bits for the red component, 5 for the green, 5 for the blue, and the last one goes unused, giving you 32*32*32 = 32,768 possible color combinations. In mode 4, you only have 8 bits per pixel, so rather than splitting it into 2 red 2 green 2 blue (which would give you 4*4*4 = 64 color combinations) they use the palette method to give you up to 2^8 = 256 possible colors on screen at once.

If this icon is 4 bits per pixel, if you wanted to use the red/green/blue approach you'd only have 2*2*2 = 8 possible colors (white, black, red, green, blue, and 3 in-between), which is why I'm guessing they use the palette method to get up to 16 colors.

Again, this is all purely a guess, and I doubt it will help you much, but it's interesting to think about at least.

Now that you mentioned it, does anybody here knows how is the color encoded? Is it the same as the GBA mode 3? 5 bits for each component and the last one is unused?
 

pekalicious

Member
OP
Newcomer
Joined
Jan 12, 2010
Messages
21
Trophies
0
Age
40
Website
pekalicious.com
XP
79
Country
Greece
Gryphon93 said:
I guess (but I'm not sure...) that you'll find an answer to your question in the topic FAST6191 referred to earlier, namely this one: http://gbatemp.net/index.php?showtopic=45360. There's a lot of things mentioned there about how to read the palette and stuff, so I think you better check it out
wink.gif
.

OK.. After many hours of reading and hacking around I think I have finally found how to do it. My problem is that I am developing in Java and this is the first time I am developing in such low level image and bit manipulations. I am currently waiting from two communities to help me out with this. One in JavaRanch and the other in StackOverflow. If there is someone here that can also help I would be grateful (once again).

At this stage I have read most header information and made my first steps into decoding the filesystem. Currently my goal is to create a Java library that will decode a ROM. Once this is done I will definitely write a blog post about everything I learned and release the source code. Of course you will be the first to read about this since I own you everything.
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • Psionic Roshambo @ Psionic Roshambo:
    So Bonzi buddy was an evil version of Alexa lol
    +2
  • BakerMan @ BakerMan:
    the legal drinking age here in the US is 21, as some of you may know, but i think either it should be 18 or the age you're an adult should be 21.
    +1
  • BakerMan @ BakerMan:
    and i know what you may be thinking, "why become an adult at 21? doesn't that mean that banging an 18 year old would be illegal?"
    first of all, being in a relationship with someone who's 18 is technically ok, as long as it started when they were 18, but the age gap is still weird depending on how old you are. besides, the age of consent differs between different states
    +1
  • BakerMan @ BakerMan:
    also my reasoning for adult age being 21 is because the reason that's the drinking (and now smoking) age is because it "gives them more time to think rationally and not drive drunk"
    so you should have that extra time to mature and think rationally before going to serve in the military or vote
    +1
  • BakerMan @ BakerMan:
    tl;dr the "adult" age and the legal drinking age (and voting age) here in the US should be the same
    +4
  • Psionic Roshambo @ Psionic Roshambo:
    It's all good no one pays attention to the law anyway lol
  • BigOnYa @ BigOnYa:
    What about making kids wait till 18 or 21 to drive? And yea is messed up, you can join army and die for your country at age 18, but you can't drink alcohol or smoke a cig til 21, is ridiculous
    +3
  • Psionic Roshambo @ Psionic Roshambo:
    If someone is in the military they should be allowed to smoke and drink at 18.... Would help drive recruitment lol
    +3
  • BigOnYa @ BigOnYa:
    We all know they do and will anyways. I think laws prevented them only pushes them to illegally do it. Even tho if was legal, most prob wouldn't even bother. Not a big deal or risque if its legal, no fun.
    +2
  • ZeroT21 @ ZeroT21:
    That's why some kids don't mind having a rap sheet or two just so they never get drafted
    +2
  • BakerMan @ BakerMan:
    also, i think the voting age should match the adult and drinking ages too, because by the logic of giving them time to mature and think rationally so they don't drive drunk, then they should also have that time to mature and think rationally so they can think for themselves
    +2
  • BakerMan @ BakerMan:
    fucking hell i'm becoming a mini leo with the way i yap aren't i?
    +1
  • impeeza @ impeeza:
    I was unable to create the VM for the debloat windows, but found the video where I learned it:

    https://www.youtube.com/watch?v=mZm6mY3I7J4
    +2
  • BigOnYa @ BigOnYa:
    No you def no leo, and I like your insight. You are a smart Baked cookie.
  • K3Nv2 @ K3Nv2:
    Chicken drumsticks and sweet potato for dinner tonight turned out good
    +1
  • BakerMan @ BakerMan:
    "i promise not to get all political and/or philosophical"
    3 drinks later:
    "so yeah think for yourself and i think the government sucks"
    +1
  • K3Nv2 @ K3Nv2:
    Is @BigOnYa drunk again
  • BakerMan @ BakerMan:
    no, i was poking fun at myself
  • BigOnYa @ BigOnYa:
    Again? I have a IV feeding me so I never come down.
    +2
  • BakerMan @ BakerMan:
    because self deprecating humor is important, as long as it doesn't turn into self hate. because you can't really make fun of anyone if you can't even make fun of yourself
    +2
  • Psionic Roshambo @ Psionic Roshambo:
    Booze enemas are real lol
  • The Real Jdbye @ The Real Jdbye:
    that explains a lot
  • K3Nv2 @ K3Nv2:
    @BigOnYa, invented the first ever pill that gets you instantly hammered, now filling the streets of Miami
    K3Nv2 @ K3Nv2: @BigOnYa, invented the first ever pill that gets you instantly hammered, now filling the streets...