Register - Login
Views: 99381928
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
04-24-22 01:03:05 AM
Jul - The Cutting Room Floor - Killer Instinct 1 & 2 Arcade Image Compression/Encryption New poll - New thread - New reply
Pages: 1 2 3 Next newer thread | Next older thread
Abystus
Member
Level: 18


Posts: 12/60
EXP: 29536
For next: 361

Since: 04-03-11


Since last post: 6.0 years
Last activity: 5.8 years

Posted on 05-11-13 06:23:59 AM Link | Quote
I was wondering if anyone familiar with Rare's games might be able to suggest a program that would be able to get at the character sprites in the arcade image files for these games? I wrote my own program a while back (generic 555 565 image viewer) that was able to read such images as character select portraits, stages, etc.. but did not display character sprites, logo sprites, etc.... I am thinking they are possibly compressed (though it is odd because stages are not, and they are way bigger images than sprites), or encrypted some how to where they wont display under normal means.

I have also tried saving dumps of memory running in MAME (hoping the images would be decompressed) to a binary file, and then loading that into my viewer. The result is basically the same as reading the file unfortunately, and the only extra images I found were from the frame buffer of the current and previous frame. I've been in search of the unused character "Vampire" for quite some time now (Chris Tilston says there are still sprites of him in the game), but so far my efforts at a sprite hack have been in vain. If anyone can suggest a tool, or possibly wants to take a look at the files themselves (they can be found all over the net "KI.img" [128 mb] & "KI2.img" [409.7 mb]) it would be appreciated.

If interested in my program, you can find more info about it below:
Killer Instinct Image View
Joe
Common spammer
🍬
Level: 111


Posts: 2861/3392
EXP: 14488707
For next: 379653

Since: 08-02-07

From: Pororoca

Since last post: 3 days
Last activity: 5 hours

Posted on 05-11-13 07:11:06 AM Link | Quote
Have you checked that they're not in some other simple format, such as 4- or 8-bit with a palette?

You could also try corrupting the disk image and see if you can narrow down where the character sprites are stored. If you can find them, someone here might be able to decompress them.

You could also try following the game's code in MAME's debugger. Beware: it's very time consuming! (However, if you can locate the compressed graphics, the debugger is excellent for reverse-engineering the compression format.)

____________________
ふにゃあ。
Abystus
Member
Level: 18


Posts: 13/60
EXP: 29536
For next: 361

Since: 04-03-11


Since last post: 6.0 years
Last activity: 5.8 years

Posted on 05-11-13 07:37:22 AM Link | Quote
Originally posted by Joe
Have you checked that they're not in some other simple format, such as 4- or 8-bit with a palette?

You could also try corrupting the disk image and see if you can narrow down where the character sprites are stored. If you can find them, someone here might be able to decompress them.

You could also try following the game's code in MAME's debugger. Beware: it's very time consuming! (However, if you can locate the compressed graphics, the debugger is excellent for reverse-engineering the compression format.)


Well so far I've modified my viewer (not released) to view all 444, 555, and 565 combinations. It has the ability to rotate bits, reverse byte order, and even reverse all bits within said bytes, along with applying every possible RGB combination overlay (as a primitive palette cracker). I am not so good with graphics (this has been my first swing at it), though I've done a lot of reading online about different formats and such. I pretty much live in the MAME debugger, but from where it stands at the moment, I cant seem to pinpoint where the sprites are being loaded. I have hacked the game apart finding FMV modifiers, screen image modifiers, sound modifiers, etc.. all based on visible pointers in memory. The sprites though are a bit more tricky, and I'm starting to think (losing my mind at this point) that since they are hidden from view like the FMVs from my viewer, that they may be small movies that play instead of individual sprites (though it's highly unlikely). I've even tried throwing a few well known decompression routines at the bytes within the image to try and expand them and have look, but so far I have not found one that actually displays anything recognizable.

As far as tracing, I've done a bit when loading matches, etc... though never actually stumbled on the asm loading images, though I've found quite a bit of other interesting stuff. I'm really surprised that no one has broken these games open yet, as there are dedicated sites to the MK games out there doing pretty much the same thing I'm doing with the KI series. Hopefully I can accomplish this last goal, as its about the only thing left that I haven't fully explored.

Thanks for the various methods you provided. I will try a few more things with the image to see If I can get it to display, though I believe I'll be after this for quite some time (been working on it months so far) solo.




Joe
Common spammer
🍬
Level: 111


Posts: 2862/3392
EXP: 14488707
For next: 379653

Since: 08-02-07

From: Pororoca

Since last post: 3 days
Last activity: 5 hours

Posted on 05-11-13 08:25:54 AM Link | Quote
Originally posted by Abystus
Well so far I've modified my viewer (not released) to view all 444, 555, and 565 combinations. It has the ability to rotate bits, reverse byte order, and even reverse all bits within said bytes, along with applying every possible RGB combination overlay (as a primitive palette cracker).
I doubt any of that is necessary - the hardware probably supports only one RGB format, and that'll be the one that any sane developer will choose for the palette. It's probably the same format as the background graphics. You should concentrate your efforts on finding the indexes first.

____________________
ふにゃあ。
Abystus
Member
Level: 18


Posts: 14/60
EXP: 29536
For next: 361

Since: 04-03-11


Since last post: 6.0 years
Last activity: 5.8 years

Posted on 05-11-13 06:45:36 PM Link | Quote
Originally posted by Joe
I doubt any of that is necessary - the hardware probably supports only one RGB format, and that'll be the one that any sane developer will choose for the palette. It's probably the same format as the background graphics. You should concentrate your efforts on finding the indexes first.


It's odd though, the background images and other things are stored with palette inside the image (555/565 15/16 bit format), which is why I'm able to make them display perfectly. Everything else appears to be using something different, which is probably shared to the rest of the images on the disk. I have looked around for a color index (they usually stick out as they are usually at the beginning of the file, and show up as a large gradient of colors), but have only found jumbles of colors instead of everything being neat and organized. These jumbles of color are most likely more images in a format I cannot currently process.

Things I can currently display for each game perfectly using (555, 565) 15/16 bit palette format:

KI1:

Killer Instinct Logo
Available for Home in 1995 image sequence (funny this isn't a real FMV)
Rare's Logo
Mini Stage Portraits
Character Select Portraits
Backgrounds (sectioned out)
Some Stage Props

KI2:

Character Select Portraits
Tower Character Portraits
Backgrounds (sectioned out)
Profile FMV Images (Incorrect palette with this one, also its funny how they stored them in image format instead of movies like the rest.)
Some Stage Props

It seems they are using a mix of formats (at least 3), so I'm gonna look around again for a color index like you suggested (haven't found it thus far). Things may be stored with palettes inside the images I found due to these games being stored on HDD and not cart, so there would be no real reason to use a palette look up (since there is ample space available). Hopefully my work inspires someone to solve the character sprite format mystery if I'm unable to :/. Thanks for the reply.
Joe
Common spammer
🍬
Level: 111


Posts: 2863/3392
EXP: 14488707
For next: 379653

Since: 08-02-07

From: Pororoca

Since last post: 3 days
Last activity: 5 hours

Posted on 05-11-13 08:58:02 PM Link | Quote
Okay, I'm confused. How many bits per pixel are the images you are able to display?

____________________
ふにゃあ。
Abystus
Member
Level: 18


Posts: 15/60
EXP: 29536
For next: 361

Since: 04-03-11


Since last post: 6.0 years
Last activity: 5.8 years

Posted on 05-11-13 10:25:05 PM Link | Quote
Originally posted by Joe
Okay, I'm confused. How many bits per pixel are the images you are able to display?


Currently the read is set to 2 bytes, so using 555/565 (5 bits) per color up converted using *255/31 formula:

red = (int)((((value & 0x7C00) >> 10) * 255) / 31);
green = (int)((((value & 0x3E0) >> 5) * 255) / 31);
blue = (int)(((value & 0x1F) * 255) / 31);

Outside of that I have tried several 12 bit bit masks on those 2 bytes (444 or 4 bits per color, up converted to 888 using a similar formula *255/15). I have also tried using 3 bytes (1 byte per color as straight 888) to see if anything was stored in 24 bit, though it doesn't appear so. I have not tried anything lower (using 1 byte), though at those color ranges, I doubt the palette would be too low to support anything decent looking.
Foxhack
Member
Annoying fuzzball
Level: 54


Posts: 380/722
EXP: 1173391
For next: 60479

Since: 04-17-12

From: Mexicali, Mexico

Since last post: 2.0 years
Last activity: 1.8 years

Posted on 05-11-13 10:26:26 PM Link | Quote
I don't suppose using MAME's disassembler to see how the game is loading these graphics is an option?

____________________
My Video Game Collection
Joe
Common spammer
🍬
Level: 111


Posts: 2864/3392
EXP: 14488707
For next: 379653

Since: 08-02-07

From: Pororoca

Since last post: 3 days
Last activity: 5 hours

Posted on 05-11-13 11:16:42 PM Link | Quote
Originally posted by Abystus
I have not tried anything lower (using 1 byte), though at those color ranges, I doubt the palette would be too low to support anything decent looking.
That's not what a palette is. A palette is a lookup table that is used by indexed color images, such as the character sprites you are looking for.

There are several different formats for graphics; the most common two are RGB and indexed.

RGB images are typically stored with 15, 16, 24, or 32 bits per pixel. These have bit layouts of 555, 565, 888, and 888. Your decoder works on images of this type. RGB images do not have a palette.

Indexed images are typically stored with 8 or 4 bits per pixel, and sometimes even less than that. The bits are usually packed together so that a 2bpp image has four pixels in one byte. The palette is a lookup table containing the RGB values, usually stored in the same format as individual pixels in an RGB image (555, 888, or whatever). The image data refers to entries in this table: a color value of "0xF3" in an 8bpp image refers to color 0xF3 in the palette; the same byte in a 4bpp image represents one pixel of color 0xF and one pixel of color 0x3.

____________________
ふにゃあ。
Abystus
Member
Level: 18


Posts: 16/60
EXP: 29536
For next: 361

Since: 04-03-11


Since last post: 6.0 years
Last activity: 5.8 years

Posted on 05-11-13 11:43:55 PM Link | Quote
Hmm, did not know that RGB type images were not considered as containing their own palette instead of using a look up for it (but i guess the look up is the palette). But even with this newly acquired information, without a look up I wouldn't be able to get colors for the values found. I've seen a few large jumbled color sections, so i may try to use them as color look ups to see if i get anything different, though I have seen nothing definite (like a section of gradient colors you would find in say a SNES rom). I will rework the application to see if it can grab one of these bulk color bunches, and use it as test palettes for the rest of the rom. This is gonna take a bit of doing in its current state.
Joe
Common spammer
🍬
Level: 111


Posts: 2865/3392
EXP: 14488707
For next: 379653

Since: 08-02-07

From: Pororoca

Since last post: 3 days
Last activity: 5 hours

Posted on 05-12-13 12:08:24 AM Link | Quote
You don't really need the correct palette to find the graphics. Here's a rip of some 4bpp graphics from a game I have sitting around:

wrong palette

None of these are in the correct palette, but you can still get a pretty good idea of what they are. (You might even be able to tell which game I ripped these from.)

____________________
ふにゃあ。
Abystus
Member
Level: 18


Posts: 17/60
EXP: 29536
For next: 361

Since: 04-03-11


Since last post: 6.0 years
Last activity: 5.8 years

Posted on 05-12-13 01:29:56 AM Link | Quote
Thing is, even if my palette was wrong, I would still see something resembling character sprites (I've drawn the image using both 2 and 3 byte mask types 12bpp, 15/16bpp, 24bpp). I have my doubts that anything less than 2 byte combinations for drawing would be available in these games (due to lack of colors per bit range). The only possibility I haven't tried is using some sort of 32 bit setup, though I think the game is a bit primitive for such an image type to be included (not sure when this was mainstream).

Do you happen to know any tool that I would be able to open these images in to see if anything lower was present? Been on this project a while, so I begin to get a headache from modifying code a zillion times . I would assume if anything, it would be some higher bpp for drawing (check out the game for the quality of graphics (Killer Instinct 2).
Sik

Level: 23


Posts: 12/107
EXP: 64767
For next: 2956

Since: 12-07-12


Since last post: 3.3 years
Last activity: 1.2 years

Posted on 05-12-13 03:53:39 AM Link | Quote
He means you should be looking for 1 byte or less per pixel (try either 8-bit or 4-bit).
Abystus
Member
Level: 18


Posts: 18/60
EXP: 29536
For next: 361

Since: 04-03-11


Since last post: 6.0 years
Last activity: 5.8 years

Posted on 05-12-13 04:27:04 AM (last edited by Abystus at 05-12-13 04:54:26 AM) Link | Quote
Originally posted by Sik
He means you should be looking for 1 byte or less per pixel (try either 8-bit or 4-bit).


We'll I understand what he means, though if you break it down:

1 Byte = 8 bits (11111111)

The only even variation that can happen within 8 bits (1 Byte) is 2/2/2.

Variations:

R G B
[11] [11] [11] 11
11 [11] [11] [11]
[11] 11 [11] [11]
[11] [11] 11 [11]

The total number of color variations that can be pulled from a 2 bits is 4 (0-3). Even when used in a palette look up, the maximum array index would only be the maximum of the 2 bit pull (3). I'm pretty sure there are no 4 or 8 bit images stored within the image file (especially as character sprites), but I asked if there is a program that can look for me (without me having to re-code my application to offer this kind of functionality). I appreciate the help, but I believe this is going to take more than 1 byte can offer to decode the character sprites (if they are not compressed), as they appear to be at a higher resolution than the backgrounds (decoded with 2 bytes 5/5/5 RGB). The method I am using to draw sprites requires a R/G/B input. Outside of that, I don't think I can draw with the OpenGL method I'm using.

If anyone would like to try their hand at these files let me know through PM. I'll happily provide a link for download.
Joe
Common spammer
🍬
Level: 111


Posts: 2866/3392
EXP: 14488707
For next: 379653

Since: 08-02-07

From: Pororoca

Since last post: 3 days
Last activity: 5 hours

Posted on 05-12-13 05:12:11 AM Link | Quote
Palette lookup is not separated by RGB components. Each 8-bit value is used as an index into a 256-entry palette containing 256 RGB colors. (Or, if it's 4bpp, each byte is two 4-bit values that are used as indexes into a 16-entry palette containing 16 RGB colors.) Have you read the Wikipedia article I keep linking?

kagami in 8 bits

That image is my avatar, reduced to 8 bits per pixel. Each pixel is an index into a 256-entry palette. Each of those 256 colors is stored using 3 bytes: 24 bits per color.


Now, if you're looking for graphics, you probably won't know what the correct palette is. No problem! substitute in your own palette, and you can still see if something is graphical in nature.

kagami in glitch bits

It doesn't look very good, but you can still tell it's supposed to be an image.


I'm hesitant to mention it because of its very broken support of RGB color formats, but Tile Molester can view indexed graphics to a reasonable degree. To use it, set the codec to 8bpp linear and the mode to 2-dimensional.

____________________
ふにゃあ。
Abystus
Member
Level: 18


Posts: 19/60
EXP: 29536
For next: 361

Since: 04-03-11


Since last post: 6.0 years
Last activity: 5.8 years

Posted on 05-12-13 05:38:32 AM Link | Quote
I have looked over that article a few times (even before posting here as it was a reference point a long time ago when starting this project). I am currently trying to modify my application to read in such a way that it uses this indexed look up to a color array I define, though it will take some time to get it in shape.

As far as Tile Molester, I tinkered with this application originally. It is able to display most of the images of my application, though its lack of hot keys for shifting canvas size (for proper rotating) drives me nuts. I am sorry if I seem on edge -- I have a 7 month old that has been driving me nuts today lol. Anyways I have sent you a PM about this matter while I attempt to get things working in my application for the new read style. I'm not really sure what to do though if they aren't stored in these format. I have a feeling that even if I do find something, I'll have a heck of a time building a color palette array that is suitable for displaying the images properly.
Sik

Level: 23


Posts: 13/107
EXP: 64767
For next: 2956

Since: 12-07-12


Since last post: 3.3 years
Last activity: 1.2 years

Posted on 05-12-13 02:27:39 PM Link | Quote
Just set the palette colors to rand() and see what comes out =P
Rachel Mae

Creature of Chaos
Level: 141


Posts: 5354/5929
EXP: 33575251
For next: 544763

Since: 07-03-07

Pronouns: she/her
From: Foxglen

Since last post: 11 days
Last activity: 2 days

Posted on 05-12-13 11:06:10 PM Link | Quote
Well, I was hoping to glean some information about the character graphics format from the MAME source, but it looks as though the video hardware may be comprised of CPLDs (programmable logic devices), rather than dedicated graphics processors. This would mean that the game itself programs the chips and decides how they should function, making the source rather useless.

____________________
Joe
Common spammer
🍬
Level: 111


Posts: 2867/3392
EXP: 14488707
For next: 379653

Since: 08-02-07

From: Pororoca

Since last post: 3 days
Last activity: 5 hours

Posted on 05-13-13 12:58:10 AM Link | Quote
Somehow or another, I mysteriously gained access to the contents of Killer Instinct 1 and 2 (I'm not sure which version, but I guess it doesn't matter too much at this point) and I decided to take a look through them.

I did see things in KI2 that looked like 8bpp image sequences (one of them starts at 0x3A1B015), but nothing resembling the character sprites.

Unless I've missed something big, the character sprites are all compressed.

...But that's not a problem! The next thing you can do is corrupt the game's RAM during a match and see if you can glitch out the player sprites. Once you've managed to get a sprite to glitch out without crashing the game, set a read breakpoint on that memory address. (You may wish to restore the previous contents of that memory before setting the breakpoint.) The game should halt somewhere within the decompression function.
Originally posted by BMF54123

Er, I read the source, and the source says there's a framebuffer in RAM and it's up to the game software to decode any graphics formats.

____________________
ふにゃあ。
Abystus
Member
Level: 18


Posts: 20/60
EXP: 29536
For next: 361

Since: 04-03-11


Since last post: 6.0 years
Last activity: 5.8 years

Posted on 05-13-13 01:48:49 AM Link | Quote
I appreciate everyone trying their hand at this. I had guessed a while back they were compressed (since they were invisible to my viewer), and have been working with the ram for some time now (I have gotten characters to blink/disappear, though nothing that changed or altered the character sprites). The games are very stubborn, and both crash very easily if you touch the wrong spot at the wrong time heh. Most of my hacks for this game were done by just watching the memory viewer, looking for pointers, and going to the appropriate rom locations they pointed to and making modifications there. I would have guessed the graphics once decompressed (to be used in the game) would also be that way in running memory at the time, but apparently that is not the case with these games.

From here I believe it's going to be a long road of ram modifications (seems I've been at this a while). I was hoping to save myself some time by simplifying the search with my program (sigh). I still have quite a bit I've found that I haven't added to the site yet, so at least i'll have something to do (organize my findings) on the side while progressing through the remaining ram locations. Keep me updated if anyone finds an alternate sure-fire method to getting at these particular sprites. Thanks again.



Pages: 1 2 3 Next newer thread | Next older thread
Jul - The Cutting Room Floor - Killer Instinct 1 & 2 Arcade Image Compression/Encryption New poll - New thread - New reply


Rusted Logic

Acmlmboard - commit 47be4dc [2021-08-23]
©2000-2022 Acmlm, Xkeeper, Kaito Sinclaire, et al.

31 database queries, 14 query cache hits.
Query execution time:  0.251039 seconds
Script execution time:  0.033618 seconds
Total render time:  0.284657 seconds


TidyHTML vomit below
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 2 column 301 - Warning: unescaped & or unknown entity "&page"
line 119 column 11 - Warning: <form> isn't allowed in <table> elements
line 118 column 10 - Info: <table> previously mentioned
line 120 column 11 - Warning: missing <tr>
line 120 column 119 - Warning: missing </font> before </td>
line 124 column 16 - Warning: plain text isn't allowed in <tr> elements
line 120 column 11 - Info: <tr> previously mentioned
line 125 column 68 - Warning: missing </nobr> before </td>
line 141 column 68 - Warning: missing </nobr> before <tr>
line 147 column 35 - Warning: missing <tr>
line 147 column 50 - Warning: missing </font> before </td>
line 148 column 37 - Warning: unescaped & or unknown entity "&id"
line 147 column 232 - Warning: missing </font> before </table>
line 149 column 35 - Warning: missing <tr>
line 149 column 97 - Warning: unescaped & or unknown entity "&page"
line 149 column 130 - Warning: unescaped & or unknown entity "&page"
line 149 column 50 - Warning: missing </font> before </td>
line 149 column 165 - Warning: missing </font> before </table>
line 156 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 158 column 9 - Warning: missing <tr>
line 162 column 71 - Warning: unescaped & or unknown entity "&dateline"
line 176 column 13 - Warning: missing <tr>
line 177 column 102 - Warning: unescaped & or unknown entity "&postid"
line 188 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 190 column 9 - Warning: missing <tr>
line 208 column 13 - Warning: missing <tr>
line 209 column 102 - Warning: unescaped & or unknown entity "&postid"
line 211 column 74 - Warning: <style> isn't allowed in <td> elements
line 211 column 9 - Info: <td> previously mentioned
line 218 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 220 column 9 - Warning: missing <tr>
line 224 column 71 - Warning: unescaped & or unknown entity "&dateline"
line 238 column 13 - Warning: missing <tr>
line 239 column 102 - Warning: unescaped & or unknown entity "&postid"
line 259 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 261 column 9 - Warning: missing <tr>
line 279 column 13 - Warning: missing <tr>
line 280 column 102 - Warning: unescaped & or unknown entity "&postid"
line 282 column 74 - Warning: <style> isn't allowed in <td> elements
line 282 column 9 - Info: <td> previously mentioned
line 285 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 287 column 9 - Warning: missing <tr>
line 291 column 71 - Warning: unescaped & or unknown entity "&dateline"
line 305 column 13 - Warning: missing <tr>
line 306 column 102 - Warning: unescaped & or unknown entity "&postid"
line 335 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 337 column 9 - Warning: missing <tr>
line 355 column 13 - Warning: missing <tr>
line 356 column 102 - Warning: unescaped & or unknown entity "&postid"
line 358 column 74 - Warning: <style> isn't allowed in <td> elements
line 358 column 9 - Info: <td> previously mentioned
line 361 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 363 column 9 - Warning: missing <tr>
line 367 column 71 - Warning: unescaped & or unknown entity "&dateline"
line 381 column 13 - Warning: missing <tr>
line 382 column 102 - Warning: unescaped & or unknown entity "&postid"
line 396 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 398 column 9 - Warning: missing <tr>
line 416 column 13 - Warning: missing <tr>
line 417 column 102 - Warning: unescaped & or unknown entity "&postid"
line 422 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 424 column 9 - Warning: missing <tr>
line 442 column 13 - Warning: missing <tr>
line 443 column 102 - Warning: unescaped & or unknown entity "&postid"
line 445 column 74 - Warning: <style> isn't allowed in <td> elements
line 445 column 9 - Info: <td> previously mentioned
line 454 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 456 column 9 - Warning: missing <tr>
line 460 column 71 - Warning: unescaped & or unknown entity "&dateline"
line 474 column 13 - Warning: missing <tr>
line 475 column 102 - Warning: unescaped & or unknown entity "&postid"
line 480 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 482 column 9 - Warning: missing <tr>
line 500 column 13 - Warning: missing <tr>
line 501 column 102 - Warning: unescaped & or unknown entity "&postid"
line 503 column 74 - Warning: <style> isn't allowed in <td> elements
line 503 column 9 - Info: <td> previously mentioned
line 510 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 512 column 9 - Warning: missing <tr>
line 516 column 71 - Warning: unescaped & or unknown entity "&dateline"
line 530 column 13 - Warning: missing <tr>
line 531 column 102 - Warning: unescaped & or unknown entity "&postid"
line 538 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 540 column 9 - Warning: missing <tr>
line 558 column 13 - Warning: missing <tr>
line 559 column 102 - Warning: unescaped & or unknown entity "&postid"
line 564 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 566 column 9 - Warning: missing <tr>
line 570 column 71 - Warning: unescaped & or unknown entity "&dateline"
line 584 column 13 - Warning: missing <tr>
line 585 column 102 - Warning: unescaped & or unknown entity "&postid"
line 608 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 610 column 9 - Warning: missing <tr>
line 628 column 13 - Warning: missing <tr>
line 629 column 102 - Warning: unescaped & or unknown entity "&postid"
line 631 column 74 - Warning: <style> isn't allowed in <td> elements
line 631 column 9 - Info: <td> previously mentioned
line 648 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 650 column 9 - Warning: missing <tr>
line 654 column 71 - Warning: unescaped & or unknown entity "&dateline"
line 668 column 13 - Warning: missing <tr>
line 669 column 102 - Warning: unescaped & or unknown entity "&postid"
line 676 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 678 column 9 - Warning: missing <tr>
line 696 column 13 - Warning: missing <tr>
line 697 column 102 - Warning: unescaped & or unknown entity "&postid"
line 702 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 704 column 9 - Warning: missing <tr>
line 722 column 13 - Warning: missing <tr>
line 723 column 102 - Warning: unescaped & or unknown entity "&postid"
line 728 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 730 column 9 - Warning: missing <tr>
line 748 column 13 - Warning: missing <tr>
line 749 column 102 - Warning: unescaped & or unknown entity "&postid"
line 751 column 74 - Warning: <style> isn't allowed in <td> elements
line 751 column 9 - Info: <td> previously mentioned
line 761 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 763 column 9 - Warning: missing <tr>
line 767 column 71 - Warning: unescaped & or unknown entity "&dateline"
line 781 column 13 - Warning: missing <tr>
line 782 column 102 - Warning: unescaped & or unknown entity "&postid"
line 793 column 17 - Warning: missing <tr>
line 793 column 17 - Warning: discarding unexpected <table>
line 796 column 35 - Warning: missing <tr>
line 796 column 97 - Warning: unescaped & or unknown entity "&page"
line 796 column 130 - Warning: unescaped & or unknown entity "&page"
line 796 column 50 - Warning: missing </font> before </td>
line 796 column 165 - Warning: missing </font> before </table>
line 798 column 35 - Warning: missing <tr>
line 798 column 50 - Warning: missing </font> before </td>
line 799 column 37 - Warning: unescaped & or unknown entity "&id"
line 798 column 232 - Warning: missing </font> before </table>
line 800 column 17 - Warning: discarding unexpected </textarea>
line 800 column 28 - Warning: discarding unexpected </form>
line 800 column 35 - Warning: discarding unexpected </embed>
line 800 column 43 - Warning: discarding unexpected </noembed>
line 800 column 53 - Warning: discarding unexpected </noscript>
line 800 column 64 - Warning: discarding unexpected </noembed>
line 800 column 74 - Warning: discarding unexpected </embed>
line 800 column 82 - Warning: discarding unexpected </table>
line 800 column 90 - Warning: discarding unexpected </table>
line 802 column 9 - Warning: missing </font> before <table>
line 814 column 25 - Warning: discarding unexpected </font>
line 823 column 58 - Warning: discarding unexpected </font>
line 801 column 1 - Warning: missing </center>
line 120 column 63 - Warning: <img> lacks "alt" attribute
line 125 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 125 column 93 - Warning: <img> lacks "alt" attribute
line 141 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 141 column 98 - Warning: <img> lacks "alt" attribute
line 148 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 246 - Warning: <img> proprietary attribute value "absmiddle"
line 161 column 22 - Warning: <img> lacks "alt" attribute
line 161 column 63 - Warning: <img> lacks "alt" attribute
line 161 column 112 - Warning: <img> lacks "alt" attribute
line 161 column 161 - Warning: <img> lacks "alt" attribute
line 162 column 11 - Warning: <img> lacks "alt" attribute
line 172 column 15 - Warning: <img> lacks "alt" attribute
line 193 column 23 - Warning: <img> lacks "alt" attribute
line 193 column 64 - Warning: <img> lacks "alt" attribute
line 193 column 113 - Warning: <img> lacks "alt" attribute
line 193 column 163 - Warning: <img> lacks "alt" attribute
line 194 column 11 - Warning: <img> lacks "alt" attribute
line 204 column 15 - Warning: <img> lacks "alt" attribute
line 223 column 22 - Warning: <img> lacks "alt" attribute
line 223 column 63 - Warning: <img> lacks "alt" attribute
line 223 column 112 - Warning: <img> lacks "alt" attribute
line 223 column 161 - Warning: <img> lacks "alt" attribute
line 224 column 11 - Warning: <img> lacks "alt" attribute
line 234 column 15 - Warning: <img> lacks "alt" attribute
line 264 column 23 - Warning: <img> lacks "alt" attribute
line 264 column 64 - Warning: <img> lacks "alt" attribute
line 264 column 113 - Warning: <img> lacks "alt" attribute
line 264 column 163 - Warning: <img> lacks "alt" attribute
line 265 column 11 - Warning: <img> lacks "alt" attribute
line 275 column 15 - Warning: <img> lacks "alt" attribute
line 290 column 22 - Warning: <img> lacks "alt" attribute
line 290 column 63 - Warning: <img> lacks "alt" attribute
line 290 column 112 - Warning: <img> lacks "alt" attribute
line 290 column 161 - Warning: <img> lacks "alt" attribute
line 291 column 11 - Warning: <img> lacks "alt" attribute
line 301 column 15 - Warning: <img> lacks "alt" attribute
line 340 column 23 - Warning: <img> lacks "alt" attribute
line 340 column 64 - Warning: <img> lacks "alt" attribute
line 340 column 113 - Warning: <img> lacks "alt" attribute
line 340 column 163 - Warning: <img> lacks "alt" attribute
line 341 column 11 - Warning: <img> lacks "alt" attribute
line 351 column 15 - Warning: <img> lacks "alt" attribute
line 366 column 22 - Warning: <img> lacks "alt" attribute
line 366 column 63 - Warning: <img> lacks "alt" attribute
line 366 column 112 - Warning: <img> lacks "alt" attribute
line 366 column 161 - Warning: <img> lacks "alt" attribute
line 367 column 11 - Warning: <img> lacks "alt" attribute
line 377 column 15 - Warning: <img> lacks "alt" attribute
line 401 column 22 - Warning: <img> lacks "alt" attribute
line 401 column 63 - Warning: <img> lacks "alt" attribute
line 401 column 112 - Warning: <img> lacks "alt" attribute
line 401 column 162 - Warning: <img> lacks "alt" attribute
line 402 column 11 - Warning: <img> lacks "alt" attribute
line 412 column 15 - Warning: <img> lacks "alt" attribute
line 427 column 23 - Warning: <img> lacks "alt" attribute
line 427 column 64 - Warning: <img> lacks "alt" attribute
line 427 column 113 - Warning: <img> lacks "alt" attribute
line 427 column 163 - Warning: <img> lacks "alt" attribute
line 428 column 11 - Warning: <img> lacks "alt" attribute
line 438 column 15 - Warning: <img> lacks "alt" attribute
line 459 column 22 - Warning: <img> lacks "alt" attribute
line 459 column 63 - Warning: <img> lacks "alt" attribute
line 459 column 112 - Warning: <img> lacks "alt" attribute
line 459 column 161 - Warning: <img> lacks "alt" attribute
line 460 column 11 - Warning: <img> lacks "alt" attribute
line 470 column 15 - Warning: <img> lacks "alt" attribute
line 485 column 23 - Warning: <img> lacks "alt" attribute
line 485 column 64 - Warning: <img> lacks "alt" attribute
line 485 column 113 - Warning: <img> lacks "alt" attribute
line 485 column 163 - Warning: <img> lacks "alt" attribute
line 486 column 11 - Warning: <img> lacks "alt" attribute
line 496 column 15 - Warning: <img> lacks "alt" attribute
line 515 column 22 - Warning: <img> lacks "alt" attribute
line 515 column 63 - Warning: <img> lacks "alt" attribute
line 515 column 112 - Warning: <img> lacks "alt" attribute
line 515 column 161 - Warning: <img> lacks "alt" attribute
line 516 column 11 - Warning: <img> lacks "alt" attribute
line 526 column 15 - Warning: <img> lacks "alt" attribute
line 535 column 809 - Warning: <img> proprietary attribute value "absmiddle"
line 535 column 809 - Warning: <img> lacks "alt" attribute
line 543 column 22 - Warning: <img> lacks "alt" attribute
line 543 column 63 - Warning: <img> lacks "alt" attribute
line 543 column 112 - Warning: <img> lacks "alt" attribute
line 543 column 162 - Warning: <img> lacks "alt" attribute
line 554 column 15 - Warning: <img> lacks "alt" attribute
line 569 column 22 - Warning: <img> lacks "alt" attribute
line 569 column 63 - Warning: <img> lacks "alt" attribute
line 569 column 112 - Warning: <img> lacks "alt" attribute
line 569 column 161 - Warning: <img> lacks "alt" attribute
line 570 column 11 - Warning: <img> lacks "alt" attribute
line 580 column 15 - Warning: <img> lacks "alt" attribute
line 584 column 92 - Warning: <font> attribute "color" had invalid value "7C60B0" and has been replaced
line 613 column 23 - Warning: <img> lacks "alt" attribute
line 613 column 64 - Warning: <img> lacks "alt" attribute
line 613 column 113 - Warning: <img> lacks "alt" attribute
line 613 column 163 - Warning: <img> lacks "alt" attribute
line 614 column 11 - Warning: <img> lacks "alt" attribute
line 624 column 15 - Warning: <img> lacks "alt" attribute
line 653 column 22 - Warning: <img> lacks "alt" attribute
line 653 column 63 - Warning: <img> lacks "alt" attribute
line 653 column 112 - Warning: <img> lacks "alt" attribute
line 653 column 161 - Warning: <img> lacks "alt" attribute
line 654 column 11 - Warning: <img> lacks "alt" attribute
line 664 column 15 - Warning: <img> lacks "alt" attribute
line 681 column 22 - Warning: <img> lacks "alt" attribute
line 681 column 63 - Warning: <img> lacks "alt" attribute
line 681 column 112 - Warning: <img> lacks "alt" attribute
line 681 column 162 - Warning: <img> lacks "alt" attribute
line 692 column 15 - Warning: <img> lacks "alt" attribute
line 706 column 11 - Warning: <img> lacks "alt" attribute
line 707 column 23 - Warning: <img> lacks "alt" attribute
line 707 column 64 - Warning: <img> lacks "alt" attribute
line 707 column 113 - Warning: <img> lacks "alt" attribute
line 707 column 163 - Warning: <img> lacks "alt" attribute
line 708 column 11 - Warning: <img> lacks "alt" attribute
line 718 column 15 - Warning: <img> lacks "alt" attribute
line 725 column 726 - Warning: <img> proprietary attribute value "absmiddle"
line 725 column 726 - Warning: <img> lacks "alt" attribute
line 725 column 882 - Warning: <img> lacks "alt" attribute
line 733 column 23 - Warning: <img> lacks "alt" attribute
line 733 column 64 - Warning: <img> lacks "alt" attribute
line 733 column 113 - Warning: <img> lacks "alt" attribute
line 733 column 163 - Warning: <img> lacks "alt" attribute
line 734 column 11 - Warning: <img> lacks "alt" attribute
line 744 column 15 - Warning: <img> lacks "alt" attribute
line 755 column 1279 - Warning: <img> proprietary attribute value "absmiddle"
line 755 column 1279 - Warning: <img> lacks "alt" attribute
line 758 column 1846 - Warning: <img> proprietary attribute value "absmiddle"
line 758 column 1846 - Warning: <img> lacks "alt" attribute
line 758 column 2120 - Warning: <img> proprietary attribute value "absmiddle"
line 758 column 2120 - Warning: <img> lacks "alt" attribute
line 766 column 22 - Warning: <img> lacks "alt" attribute
line 766 column 63 - Warning: <img> lacks "alt" attribute
line 766 column 112 - Warning: <img> lacks "alt" attribute
line 766 column 161 - Warning: <img> lacks "alt" attribute
line 767 column 11 - Warning: <img> lacks "alt" attribute
line 777 column 15 - Warning: <img> lacks "alt" attribute
line 799 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 799 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 799 column 246 - Warning: <img> proprietary attribute value "absmiddle"
line 808 column 25 - Warning: <img> lacks "alt" attribute
line 813 column 267 - Warning: <img> lacks "alt" attribute
line 793 column 17 - Warning: trimming empty <tr>
line 125 column 68 - Warning: <nobr> is not approved by W3C
line 141 column 68 - Warning: <nobr> is not approved by W3C
line 177 column 27 - Warning: <nobr> is not approved by W3C
line 209 column 27 - Warning: <nobr> is not approved by W3C
line 239 column 27 - Warning: <nobr> is not approved by W3C
line 280 column 27 - Warning: <nobr> is not approved by W3C
line 306 column 27 - Warning: <nobr> is not approved by W3C
line 356 column 27 - Warning: <nobr> is not approved by W3C
line 382 column 27 - Warning: <nobr> is not approved by W3C
line 417 column 27 - Warning: <nobr> is not approved by W3C
line 443 column 27 - Warning: <nobr> is not approved by W3C
line 475 column 27 - Warning: <nobr> is not approved by W3C
line 501 column 27 - Warning: <nobr> is not approved by W3C
line 531 column 27 - Warning: <nobr> is not approved by W3C
line 559 column 27 - Warning: <nobr> is not approved by W3C
line 585 column 27 - Warning: <nobr> is not approved by W3C
line 629 column 27 - Warning: <nobr> is not approved by W3C
line 669 column 27 - Warning: <nobr> is not approved by W3C
line 697 column 27 - Warning: <nobr> is not approved by W3C
line 723 column 27 - Warning: <nobr> is not approved by W3C
line 725 column 74 - Warning: <table> proprietary attribute "height"
line 749 column 27 - Warning: <nobr> is not approved by W3C
line 782 column 27 - Warning: <nobr> is not approved by W3C
Info: Document content looks like HTML5
Info: No system identifier in emitted doctype
Tidy found 305 warnings and 0 errors!


The alt attribute should be used to give a short description
of an image; longer descriptions should be given with the
longdesc attribute which takes a URL linked to the description.
These measures are needed for people using non-graphical browsers.

For further advice on how to make your pages accessible
see http://www.w3.org/WAI/GL.
You are recommended to use CSS to specify the font and
properties such as its size and color. This will reduce
the size of HTML files and make them easier to maintain
compared with using <FONT> elements.

You are recommended to use CSS to control line wrapping.
Use "white-space: nowrap" to inhibit wrapping in place
of inserting <NOBR>...</NOBR> into the markup.

About HTML Tidy: https://github.com/htacg/tidy-html5
Bug reports and comments: https://github.com/htacg/tidy-html5/issues
Official mailing list: https://lists.w3.org/Archives/Public/public-htacg/
Latest HTML specification: http://dev.w3.org/html5/spec-author-view/
Validate your HTML documents: http://validator.w3.org/nu/
Lobby your company to join the W3C: http://www.w3.org/Consortium

Do you speak a language other than English, or a different variant of
English? Consider helping us to localize HTML Tidy. For details please see
https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md