Register - Login
Views: 99386967
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
04-24-22 05:44:38 AM
Jul - The Cutting Room Floor - Instruction Manual sub-map leftovers? (Wario Land 1) New poll - New thread - New reply
Pages: 1 2 3 Next newer thread | Next older thread
Xkeeper

Level: 263


Posts: 20224/25343
EXP: 296716998
For next: 2243455

Since: 07-03-07

Pronouns: they/them/????????

Since last post: 9 days
Last activity: 3 days

Posted on 05-31-12 02:42:19 AM Link | Quote
Originally posted by GuyPurrrfect
So I was bored. Shut up!

I would appreciate it a lot if you "got bored" more often.


____________________
GuyPerfect
Catgirl
Level: 68


Posts: 761/1096
EXP: 2663435
For next: 65365

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 05-31-12 03:01:37 AM Link | Quote
Originally posted by GoldS
In that set of maps (thanks for that, by the way) I found at least one unused room. It's in Mt. Teapot 1 (Or Map 6).

[pic snip]

This might have been the original checkpoint room. I'm guessing that the break in the water is where the checkpoint would be.
You appear to be correct. Keen eye, since the image had different tiles than the ones in your picture.

Go ahead and reload 6.gif, though, since I strongarmed it to look correct (it took some hunting and patching to get it to look right).

So there we have it. If nothing else, Wario Land has an unused checkpoint room. Should probably take it to the next step so we can at least see if there's still a checkpoint object in there or not.


Originally posted by GoldS
Here's what each map corresponds to.


This is excellent. Thanks for taking the time to link levels with the data. I'm hoping similar information is in there somewhere too, since the game knows which maps to load for which course numbers.

If it's not too much to ask, could you label the remaining ones/copies as well just so we know what they are at a glance?


Originally posted by Xkeeper
I would appreciate it a lot if you "got bored" more often.
I know, right? Shit gets done when I have nothing better to do!

Though to be honest, there was something I should probably have been doing instead, which makes it all the more satisfying that it was successful.
Keitaro

Fire Snake
LOVELY ARRANGEMENT. VOLCANO BAKEMEAT
Level: 70


Posts: 1113/1191
EXP: 2898891
For next: 116920

Since: 09-09-08

From: California

Since last post: 4.1 years
Last activity: 3.8 years

Posted on 05-31-12 03:43:03 AM Link | Quote
Hm, I noticed that none of the data you posted from the Course 01 thing seemed to correspond to the music used in the stage (unless it was one of the unknowns and I overlooked it, but I didn't notice any sound related results with those), I was going to go through and map all the songs/search for any unused ones (though I'm going to guess there aren't any since the GBS has been available for years )
Rena
I had one (1) message in Discord deleted and proceeded to make a huge, huge mess about how it was a violation of free speech and how moderators are supposed to be spam janitors and nobody should have the right to tell me not to talk about school shootings
Level: 135


Posts: 4805/5390
EXP: 29051161
For next: 283844

Since: 07-22-07

Pronouns: he/him/whatever
From: RSP Segment 6

Since last post: 333 days
Last activity: 333 days

Posted on 05-31-12 05:10:48 AM Link | Quote
Post #4805 · Thu 120531 011048
Originally posted by Xkeeper
I'd guess that WL1's engine is more along the lines of SML2's.
Mm, but SML2 and Metroid 2 share some content. IIRC the credits from one are left in the other... Probably all three are different versions of the same engine.

____________________
Keitaro

Fire Snake
LOVELY ARRANGEMENT. VOLCANO BAKEMEAT
Level: 70


Posts: 1114/1191
EXP: 2898891
For next: 116920

Since: 09-09-08

From: California

Since last post: 4.1 years
Last activity: 3.8 years

Posted on 05-31-12 08:01:13 AM Link | Quote
SML2's engine was built from Metroid's, and SML3's was built from SML2's...so yeah more or less a lot of code overlap, I'd imagine.
GuyPerfect
Catgirl
Level: 68


Posts: 762/1096
EXP: 2663435
For next: 65365

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 05-31-12 03:17:50 PM Link | Quote
Immediately following the world definitions is a table containing door definitions. It's another list of addresses in bank 0x0C, but this time there's a surreal 1391 entries... They point to 24-byte structures:
032192 = Right-most door in the first area of Rice Beach 1 (low tide)


1E E0 68 00 1E 60 08 00 00 00 E1 06 69 6E
00 56 00 72 00 40 0A 64 F6 44

1E Wario destination door(/area?)
E0 Wario start Y coordinate
68 Wario start X coordinate
00 (Unknown)
1E Camera/background destination door(/area?)
60 Camera Y offset
08 Camera X offset
00 Camera type (same as before?)
00 Graphics modifier (same as before?)
00 (Unknown)
E1 Background Palette
06 World tile bank
69 6E World tile address 0x01AE69
00 56 Block/Coin tile address 0x045600
00 72 GUI, Coin Sprite tile address 0x047200
00 40 Animated world tile address 0x044000
0A 64 Block definition address 0x02E40A
F6 44 (Enemy pointer thing again)
A recurring theme here is that tilesets are loaded based on the data explicitly, rather than by ID. This seems somewhat wasteful, since there's only a handful of tilesets and they always seem to have the same banks/addresses/coins/GUI/animated/blocks/etc. each time they're used. A level editor would be able to pick up on this to simplify data exchange, I would think.

Still missing are object and door placements within levels. The "enemy pointer" loads the group of enemies that can appear in a given area, which affects their graphics and behavior (effectively swapping out enemies with different ones), but it doesn't actually seem to have anything to do with how they're positioned within the levels. Box contents and other objects are floating around in there somewhere too, and I'm keeping my fingers crossed for them to all be in the same place.
GlitterBerri

Translator
Level: 39


Posts: 298/339
EXP: 403694
For next: 1077

Since: 11-10-10


Since last post: 6.6 years
Last activity: 1.2 years

Posted on 05-31-12 05:55:20 PM Link | Quote
Originally posted by Sheeza
I think not. We removed similar information from the Pokemon Red page already that were based on instruction manual screenshots.


Aw, really? I would have been interested in that. What was it?
GuyPerfect
Catgirl
Level: 68


Posts: 763/1096
EXP: 2663435
For next: 65365

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 05-31-12 05:56:25 PM Link | Quote
At ROM file address 0x01F1AA is the list of objects placed into Rice Beach 1 at low tide. However, the data seems to implicitly skip the top 16 rows of blocks (256 pixels), which might be the norm. Did anyone see any level data up there in the dump images, or is it always garbage?

The data is encoded with a simple placement algorithm that has 2 phases, which I'll refer to as Pair and Skip:
  • The decoded begins in the Pair phase, and alternates each time a piece of data is processed.
  • As with the world data, blocks are arranged left-to-right then top-to-bottom. There are 256 blocks in a row.
  • If phase is Pair, load one byte, which contains 2 object definitions (4 bits each). These apply to the next 2 blocks, starting with the high 4 bits of the byte.
  • If phase is Skip, load one byte, multiply by 2, and skip that many blocks.
With object IDs overlayed, level 1 looks like this (click for full image):



Object ID can be one of the following:
0 = Box: Coin (drop) / Nothing

1 = Object 1
2 = Object 2
3 = (Unknown/nothing)
4 = (Unknown/nothing)
5 = (Unknown/nothing)
6 = (Unknown/nothing)
7 = Box: Garlic Pot
8 = Box: Jet Pot
9 = Box: Dragon Pot
A = Box: Key
B = Box: Heart
C = Box: Star
D = Box: Coin (bounce)
E = Box: 10 Coin
F = Box: Bull Pot

Indeed, one of those "worth 10" coins can pop out of a box. Do any of those actually appear in the game?

Object 1 and Object 2 vary depending on what the aforementioned "enemy pointer" points to. This can be enemies, unlockable doors, huge blocks and moving platforms among other things.

If a box exists in the world data and doesn't have an object assigned to the same location, it will produce a single coin. In other words, unless otherwise specified, all blocks contain object ID 0.

It would appear (so to speak) that you can assign box contents to non-box blocks in the world data, which will cause a box to appear if you jump under it.

Still MIA is the master course data structure, which contains music, course number and door specifications.
Peardian

  
Magikoopa

16/3/1: KvSG #479 is up!

Level: 157


Posts: 5984/7597
EXP: 48562056
For next: 1017177

Since: 08-02-07

From: Isle Delfino

Since last post: 1 day
Last activity: 4 hours

Posted on 05-31-12 06:15:55 PM Link | Quote
GuyPerfect, you rock!


I wish I had more to say, but figuring out this kind of stuff still goes over my head.

____________________
-Peardian-

"Kindness is the language which the deaf can hear and the blind can see." -Mark Twain


GuyPerfect
Catgirl
Level: 68


Posts: 764/1096
EXP: 2663435
For next: 65365

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 05-31-12 06:57:55 PM (last edited by GuyPerfect at 05-31-12 10:44:11 PM) Link | Quote
There's a list of pointers at 0x01C199 (07:4199) containing addresses in the same bank of all the level object layers, conveniently in the same order as the ones in the world definition tables. This means we can easily line up world data with object data.

Indeed, it appears that skipping the top 16 rows of blocks is what we're supposed to be doing. I ran my program on Mt. Teapot 1 and found this:



The checkpoint object is definitely in there, but um... it's kinda floating up above the water a bit. I've uploaded an artist's conception of what it looks like to TCRF:



Originally posted by Peardian
GuyPerfect, you rock!

I wish I had more to say, but figuring out this kind of stuff still goes over my head.
Thanks! I appreciate the encouragement: makes me want to keep going.

I know there's a lot of people who have the motivation to do the work, but simply don't have the know-how... We should think about setting up some kind of resource or seminar of some kind for hacking fundamentals.
Xkeeper

Level: 263


Posts: 20238/25343
EXP: 296716998
For next: 2243455

Since: 07-03-07

Pronouns: they/them/????????

Since last post: 9 days
Last activity: 3 days

Posted on 05-31-12 07:17:47 PM Link | Quote
Perhaps it was a [!] box instead, then?

____________________
GuyPerfect
Catgirl
Level: 68


Posts: 765/1096
EXP: 2663435
For next: 65365

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 05-31-12 07:21:53 PM Link | Quote
*Blink*

Dod gammit, now I have to see if that information is in there anywhere.

The only way to know for sure what that object represents is to examine an "enemy pointer" that lands in the area. If it's one thing, that's an enemy. If it's another, it's a checkpoint. If it's yet another, it could be the switch block or one of the giant blocks or something...

I'll keep my fingers crossed and hope there's a transfer point that dumps you out there, 'cause if not, there's no way we're going to know for sure what's actually in that room.
Xkeeper

Level: 263


Posts: 20239/25343
EXP: 296716998
For next: 2243455

Since: 07-03-07

Pronouns: they/them/????????

Since last post: 9 days
Last activity: 3 days

Posted on 05-31-12 07:22:55 PM Link | Quote
Thanks. I appreciate your effort.

____________________
Aeonic Butterfly
200
Level: 32


Posts: 85/207
EXP: 191521
For next: 14921

Since: 12-27-10

From: Ridgecrest, CA

Since last post: 4.4 years
Last activity: 4.4 years

Posted on 05-31-12 07:41:19 PM (last edited by Aeonic Butterfly at 05-31-12 07:42:14 PM) Link | Quote
GuyPerfect, for starters, you are awesome.

Also, I'd be interested in a beginner's course. I once upon a time had a tiny bit of this knowhow (I could convert codes from Pokemon Red/Blue to Yellow), but that's been many, many years now. I understand Hex, and that's about it.

Also, your avatar is awesome. I'm pretty sure I have that logo on my old, lousy, crappy McCrap Angelfire page from when I was what? 12? Yeah, a long, long time ago.

It's good for the nostalgia, though.
GuyPerfect
Catgirl
Level: 68


Posts: 766/1096
EXP: 2663435
For next: 65365

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 05-31-12 09:09:32 PM (last edited by GuyPerfect at 05-31-12 09:14:27 PM) Link | Quote
Looks like GoldS updated the list to document the duplicates. The indexes are all the same, if you add 43 to the normal ones. I suspect this is probably used as the alternate version for switch block levels, which would mean every level can be switched arbitrarily. The implications are quite delicious, so we'll have to wait and see how it works out.
__________

At 0x000534 (00:0534), waaaaaay at the beginning of the ROM file, is a list of pointers (86 entries) for course numbers. What exactly do those pointers point to, you ask? Get ready to facepalm:
00:058A 3E 01     ld  a,01

00:058C C9 ret
00:058D 3E 02 ld a,02
00:058F C9 ret
00:0590 3E 03 ld a,03
00:0592 C9 ret
00:0593 3E 04 ld a,04
00:0595 C9 ret
00:0596 3E 05 ld a,05
00:0598 C9 ret
(And so on...)

The game program loads the address, jumps to it, and executes the code there... which just in turn loads the course number via immediate data. They could have, oh, I dunno, used a list of bytes containing the course numbers in place of this code pointer->load code business, but they wanted to keep it fresh.

They used 5 bytes of ROM data to represent 1 byte of information per level.

These ld+ret blocks continue sequentially all the way up to 40, so to simplify course number translation, you can take the address from the table and process it with this formula: Course = (Address - 0x0587) / 3

As usual, the indexes are the same as for the other tables. Mt. Teapot 1, Course No. 7, has an index of 6, at which position is $059C. This becomes 0x059C - 0x0587 = 21 / 3 = 7.
_________

At 0x033E73 (0C:7E73) is a table of 43 pointers for level music. The data immediately following the pointers specifies the musics themselves, and the only ones present are the ones used in the final game. Their values and not-very-helpful names are as follows:
$7EC9 = Lake

$7ED5 = Beach 1
$7EE1 = Cave 1
$7EED = Cave 2
$7EF9 = Train
$7F05 = Boss Level
$7F11 = Cave 3
$7F1D = Cave 4
$7F29 = Beach 2
$7F35 = Cave 5
$7F41 = Syrup Castle
$7F4D = Cave 6
$7F59 = Sherbet Land

The music "definitions" look like they take up 12 bytes each, putting the next one at $7F65, but that crashes the game, so there certainly isn't any music defined there.
__________

Originally posted by Aeonic Butterfly
GuyPerfect, for starters, you are awesome.
I long suspected as such! But it's good to have a second opinion.

Originally posted by Aeonic Butterfly
Also, I'd be interested in a beginner's course. I once upon a time had a tiny bit of this knowhow (I could convert codes from Pokemon Red/Blue to Yellow), but that's been many, many years now. I understand Hex, and that's about it.
Well, hex is definitely something you'll need. Let me think on how to establish some lessons and I'll bring it up again later.
Xkeeper

Level: 263


Posts: 20241/25343
EXP: 296716998
For next: 2243455

Since: 07-03-07

Pronouns: they/them/????????

Since last post: 9 days
Last activity: 3 days

Posted on 05-31-12 09:13:11 PM Link | Quote
I'm still amused that after all this time you still use .

____________________
GuyPerfect
Catgirl
Level: 68


Posts: 767/1096
EXP: 2663435
For next: 65365

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 05-31-12 10:46:43 PM (last edited by GuyPerfect at 05-31-12 10:50:05 PM) Link | Quote
EDIT:

D'aw! Foiled again! The room isn't unused after all: there's a door leading to it. From the checkpoint area, go down into the water and head left. Break the blocks on the bottom to reveal the door.



I'm still working out the details as to how the doors are placed into levels, but I'm this close to having it all figured out to the point that we can make a level editor.

Originally posted by Xkeeper
I'm still amused that after all this time you still use .
It's mah trademark. I actually started using that because I didn't want my posts turning into graphics, but as we can see, I earned a graphic anyway.
GuyPerfect
Catgirl
Level: 68


Posts: 768/1096
EXP: 2663435
For next: 65365

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 05-31-12 11:23:59 PM Link | Quote
Okay, got it. At 0x030F30 (0C:4F30) is a table of door destination pointers. There are 32 pointers per level, and entries for all 86 of them.

Door placement in levels is somewhat arbitrary: the levels are divided up into regions of 256x256 pixels (16x16 blocks), meaning it's 16 regions wide and 2 regions tall. Remember, we're discounting the uppermost 256 rows of pixels because screw those mofos we don't love them anymore.

Within those regions can be doors. Or not. The door can be anywhere within it, as long as it's one of the 16x16 blocks, and its destination info is read from the table at the corresponding location (left-to-right then top-to-bottom). There can presumably be any number of doors in a particular region, and they'd all go to the same destination, but the level designers never used more than one. This is something to be tested.

The destination information, documented in an earlier post, includes the target region, which will initialize the background map and position Wario and the camera. A door can lead to a location that doesn't have a return door.

If the taget region is out of range, the game will handle it accordingly. It's got some hard-coded behaviors for regions 32, 33, 34, etc. (I don't remember how many), which includes the exit door, and apparently 255 will cause the door to not go anywhere at all.
__________

Okay, let's see... We have the following information:
  • Course Number
  • Music
  • World graphics (start and door transfer)
  • World data
  • Object and enemy data
  • Door data
  • (Presumably switch block status, but this needs to be tested)
And the following information needs some more investigation:
  • Specifics of Wario/camera positioning on region entry
  • Scrolling boundaries
Both of those are known in the data we already have; we just need to know exactly how they're represented in the bytes.

Aaaaaand then we can make a level editor. I'm thinking Java for a number of reasons: it runs on everything, it's easy to use, and all the GUI stuff is built in. We could put the code up in a spot where everyone can get to it... not necessarily a version-controlled repository or anything, but something for people to see and contribute to.
Xkeeper

Level: 263


Posts: 20242/25343
EXP: 296716998
For next: 2243455

Since: 07-03-07

Pronouns: they/them/????????

Since last post: 9 days
Last activity: 3 days

Posted on 05-31-12 11:31:38 PM Link | Quote
GitHub, maybe.

____________________
GuyPerfect
Catgirl
Level: 68


Posts: 769/1096
EXP: 2663435
For next: 65365

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 06-01-12 01:34:31 AM (last edited by GuyPerfect at 06-01-12 01:37:10 AM) Link | Quote
Aaaaaaand done. Turns out there *is* additional information pertinent to scrolling boundaries.

At 0x030000 (0C:4000) is a table (43 entries) of scrolling boundary types for each of the 256x256-pixel regions within the levels. Each entry is 32 bytes, and the bytes themselves indicate how the scrolling stops in that region:
Bit 0 = Boundary on right side

Bit 1 = Boundary on left side
Bits 2-7 = (Nothing)

Since there aren't boundary definitions for the duplicate/switched worlds, it's important to make them mirror each other so the camera behaves correctly.

Considering that each level is only 2 "regions" tall, and that door destinations target entire regions, it seems unlikely that you could wrap a single room using one tileset completely around another room using a different tileset. At least while keeping the circumscribed room hidden from view at all times. The implication is that a combination of door destinations and region scrolling boundaries can probably be used to reliably configure the graphics of a level display. It'd take a sort of flood fill to detect where Wario is capable of traversing, however.
__________

A more complete description of the basic world definition is as follows:

0x030792 = Rice Beach 1 (low tide)


03 00 52 00 54 00 72 00 4A 10 01 0A 46 01
60 00 28 08 20 00 E0 00 00 02 00 00 07 E1 CF 44

03 World tile bank
00 52 World tile address 0x0C1200 -- 96 at $9200
00 54 Block/Coin tile address 0x045400 -- 32 at $9000
00 72 GUI, Coin Sprite tile address 0x047200 -- 23 at $8B00
00 4A Animated world tile address 0x044A00 -- 4 at $9200
10 Bank number of world data
01 Index of world data 0x040002 -> 0x04081E
0A 46 Block definition address 0x02C60A
01 Wario starting Y region
60 Wario starting pixel Y
00 Wario starting X region
28 Wario starting pixel X
08 (Unknown)
20 Graphics modifier
Bits 0-3 = (Unknown/no effect)
Bit 4 = Wario's colors inverted
Bit 5 = Wario is right-facing
Bit 6 = Wario is vertically flipped
Bit 7 = All sprites behind background
00 Camera Y region (0-1)
E0 Camera Y scroll
00 Camera X region (0-15)
00 Camera X scroll
02 Scrolling boundary type for initial region
00 Camera Type
Bit 0 = Train bumps
Bits 1-3 = (Unknown/no effect)
Bit 4 = Wario stays center screen
Bits 5-7 = Auto-scrolling (all three identical?)
00 Wario start status
00 = Standing
** = Swimming
07 Animated world tile frame delay
E1 Background palette
Bits 0-1 = Color 0 = 1
Bits 2-3 = Color 1 = 0
Bits 4-5 = Color 2 = 2
Bits 6-7 = Color 3 = 3
CF 44 (Pointer to enemy definitions of some sort; bank?)

In all cases, the initial configuration of the screen/world scrolling should be such that Wario is visible within the window rectangle.
Pages: 1 2 3 Next newer thread | Next older thread
Jul - The Cutting Room Floor - Instruction Manual sub-map leftovers? (Wario Land 1) 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, 9 query cache hits.
Query execution time:  0.108723 seconds
Script execution time:  0.035218 seconds
Total render time:  0.143942 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 223 - Warning: missing </font> before </table>
line 149 column 35 - Warning: missing <tr>
line 149 column 95 - 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 176 column 13 - Warning: missing <tr>
line 177 column 102 - Warning: unescaped & or unknown entity "&postid"
line 179 column 74 - Warning: <style> isn't allowed in <td> elements
line 179 column 9 - Info: <td> previously mentioned
line 184 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 186 column 9 - Warning: missing <tr>
line 204 column 13 - Warning: missing <tr>
line 205 column 102 - Warning: unescaped & or unknown entity "&postid"
line 230 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 232 column 9 - Warning: missing <tr>
line 250 column 13 - Warning: missing <tr>
line 251 column 102 - Warning: unescaped & or unknown entity "&postid"
line 256 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 258 column 9 - Warning: missing <tr>
line 276 column 13 - Warning: missing <tr>
line 277 column 102 - Warning: unescaped & or unknown entity "&postid"
line 279 column 4759 - Warning: replacing unexpected input with </input>
line 279 column 5073 - Warning: discarding unexpected </span>
line 282 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 284 column 9 - Warning: missing <tr>
line 302 column 13 - Warning: missing <tr>
line 303 column 102 - Warning: unescaped & or unknown entity "&postid"
line 308 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 310 column 9 - Warning: missing <tr>
line 328 column 13 - Warning: missing <tr>
line 329 column 102 - Warning: unescaped & or unknown entity "&postid"
line 359 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 361 column 9 - Warning: missing <tr>
line 379 column 13 - Warning: missing <tr>
line 380 column 102 - Warning: unescaped & or unknown entity "&postid"
line 387 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 389 column 9 - Warning: missing <tr>
line 407 column 13 - Warning: missing <tr>
line 408 column 102 - Warning: unescaped & or unknown entity "&postid"
line 445 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 447 column 9 - Warning: missing <tr>
line 465 column 13 - Warning: missing <tr>
line 466 column 102 - Warning: unescaped & or unknown entity "&postid"
line 468 column 74 - Warning: <style> isn't allowed in <td> elements
line 468 column 9 - Info: <td> previously mentioned
line 468 column 363 - Warning: missing </font> before <center>
line 468 column 437 - Warning: inserting implicit <font>
line 468 column 568 - Warning: inserting implicit <font>
line 479 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 481 column 9 - Warning: missing <tr>
line 499 column 13 - Warning: missing <tr>
line 500 column 102 - Warning: unescaped & or unknown entity "&postid"
line 519 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 521 column 9 - Warning: missing <tr>
line 539 column 13 - Warning: missing <tr>
line 540 column 102 - Warning: unescaped & or unknown entity "&postid"
line 542 column 74 - Warning: <style> isn't allowed in <td> elements
line 542 column 9 - Info: <td> previously mentioned
line 545 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 547 column 9 - Warning: missing <tr>
line 565 column 13 - Warning: missing <tr>
line 566 column 102 - Warning: unescaped & or unknown entity "&postid"
line 577 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 579 column 9 - Warning: missing <tr>
line 597 column 13 - Warning: missing <tr>
line 598 column 102 - Warning: unescaped & or unknown entity "&postid"
line 600 column 74 - Warning: <style> isn't allowed in <td> elements
line 600 column 9 - Info: <td> previously mentioned
line 603 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 605 column 9 - Warning: missing <tr>
line 623 column 13 - Warning: missing <tr>
line 624 column 102 - Warning: unescaped & or unknown entity "&postid"
line 635 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 637 column 9 - Warning: missing <tr>
line 655 column 13 - Warning: missing <tr>
line 656 column 102 - Warning: unescaped & or unknown entity "&postid"
line 704 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 706 column 9 - Warning: missing <tr>
line 724 column 13 - Warning: missing <tr>
line 725 column 102 - Warning: unescaped & or unknown entity "&postid"
line 727 column 74 - Warning: <style> isn't allowed in <td> elements
line 727 column 9 - Info: <td> previously mentioned
line 730 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 732 column 9 - Warning: missing <tr>
line 750 column 13 - Warning: missing <tr>
line 751 column 102 - Warning: unescaped & or unknown entity "&postid"
line 764 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 766 column 9 - Warning: missing <tr>
line 784 column 13 - Warning: missing <tr>
line 785 column 102 - Warning: unescaped & or unknown entity "&postid"
line 805 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 807 column 9 - Warning: missing <tr>
line 825 column 13 - Warning: missing <tr>
line 826 column 102 - Warning: unescaped & or unknown entity "&postid"
line 828 column 74 - Warning: <style> isn't allowed in <td> elements
line 828 column 9 - Info: <td> previously mentioned
line 831 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 833 column 9 - Warning: missing <tr>
line 851 column 13 - Warning: missing <tr>
line 852 column 102 - Warning: unescaped & or unknown entity "&postid"
line 914 column 17 - Warning: missing <tr>
line 914 column 17 - Warning: discarding unexpected <table>
line 917 column 35 - Warning: missing <tr>
line 917 column 95 - Warning: unescaped & or unknown entity "&page"
line 917 column 130 - Warning: unescaped & or unknown entity "&page"
line 917 column 50 - Warning: missing </font> before </td>
line 917 column 165 - Warning: missing </font> before </table>
line 919 column 35 - Warning: missing <tr>
line 919 column 50 - Warning: missing </font> before </td>
line 920 column 37 - Warning: unescaped & or unknown entity "&id"
line 919 column 223 - Warning: missing </font> before </table>
line 921 column 17 - Warning: discarding unexpected </textarea>
line 921 column 28 - Warning: discarding unexpected </form>
line 921 column 35 - Warning: discarding unexpected </embed>
line 921 column 43 - Warning: discarding unexpected </noembed>
line 921 column 53 - Warning: discarding unexpected </noscript>
line 921 column 64 - Warning: discarding unexpected </noembed>
line 921 column 74 - Warning: discarding unexpected </embed>
line 921 column 82 - Warning: discarding unexpected </table>
line 921 column 90 - Warning: discarding unexpected </table>
line 923 column 9 - Warning: missing </font> before <table>
line 935 column 25 - Warning: discarding unexpected </font>
line 944 column 57 - Warning: discarding unexpected </font>
line 922 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 23 - Warning: <img> lacks "alt" attribute
line 161 column 64 - Warning: <img> lacks "alt" attribute
line 161 column 113 - Warning: <img> lacks "alt" attribute
line 161 column 163 - Warning: <img> lacks "alt" attribute
line 162 column 11 - Warning: <img> lacks "alt" attribute
line 172 column 15 - Warning: <img> lacks "alt" attribute
line 189 column 22 - Warning: <img> lacks "alt" attribute
line 189 column 63 - Warning: <img> lacks "alt" attribute
line 189 column 112 - Warning: <img> lacks "alt" attribute
line 189 column 162 - Warning: <img> lacks "alt" attribute
line 200 column 15 - Warning: <img> lacks "alt" attribute
line 215 column 764 - Warning: <img> proprietary attribute value "absmiddle"
line 215 column 764 - Warning: <img> lacks "alt" attribute
line 218 column 1072 - Warning: <img> proprietary attribute value "absmiddle"
line 218 column 1072 - Warning: <img> lacks "alt" attribute
line 225 column 1687 - Warning: <img> proprietary attribute value "absmiddle"
line 225 column 1687 - Warning: <img> lacks "alt" attribute
line 234 column 11 - Warning: <img> lacks "alt" attribute
line 235 column 22 - Warning: <img> lacks "alt" attribute
line 235 column 63 - Warning: <img> lacks "alt" attribute
line 235 column 112 - Warning: <img> lacks "alt" attribute
line 235 column 162 - Warning: <img> lacks "alt" attribute
line 246 column 15 - Warning: <img> lacks "alt" attribute
line 253 column 475 - Warning: <img> proprietary attribute value "absmiddle"
line 253 column 475 - Warning: <img> lacks "alt" attribute
line 261 column 23 - Warning: <img> lacks "alt" attribute
line 261 column 64 - Warning: <img> lacks "alt" attribute
line 261 column 113 - Warning: <img> lacks "alt" attribute
line 261 column 163 - Warning: <img> lacks "alt" attribute
line 272 column 15 - Warning: <img> lacks "alt" attribute
line 279 column 4459 - Warning: <img> proprietary attribute value "absmiddle"
line 279 column 4459 - Warning: <img> lacks "alt" attribute
line 286 column 11 - Warning: <img> lacks "alt" attribute
line 287 column 22 - Warning: <img> lacks "alt" attribute
line 287 column 63 - Warning: <img> lacks "alt" attribute
line 287 column 112 - Warning: <img> lacks "alt" attribute
line 287 column 162 - Warning: <img> lacks "alt" attribute
line 298 column 15 - Warning: <img> lacks "alt" attribute
line 305 column 157 - Warning: <img> proprietary attribute value "absmiddle"
line 305 column 157 - Warning: <img> lacks "alt" attribute
line 313 column 22 - Warning: <img> lacks "alt" attribute
line 313 column 63 - Warning: <img> lacks "alt" attribute
line 313 column 112 - Warning: <img> lacks "alt" attribute
line 313 column 162 - Warning: <img> lacks "alt" attribute
line 324 column 15 - Warning: <img> lacks "alt" attribute
line 363 column 11 - Warning: <img> lacks "alt" attribute
line 364 column 22 - Warning: <img> lacks "alt" attribute
line 364 column 63 - Warning: <img> lacks "alt" attribute
line 364 column 112 - Warning: <img> lacks "alt" attribute
line 364 column 161 - Warning: <img> lacks "alt" attribute
line 365 column 11 - Warning: <img> lacks "alt" attribute
line 375 column 15 - Warning: <img> lacks "alt" attribute
line 392 column 22 - Warning: <img> lacks "alt" attribute
line 392 column 63 - Warning: <img> lacks "alt" attribute
line 392 column 112 - Warning: <img> lacks "alt" attribute
line 392 column 162 - Warning: <img> lacks "alt" attribute
line 403 column 15 - Warning: <img> lacks "alt" attribute
line 415 column 1122 - Warning: <img> lacks "alt" attribute
line 449 column 17 - Warning: <img> lacks "alt" attribute
line 450 column 23 - Warning: <img> lacks "alt" attribute
line 450 column 64 - Warning: <img> lacks "alt" attribute
line 450 column 112 - Warning: <img> lacks "alt" attribute
line 450 column 162 - Warning: <img> lacks "alt" attribute
line 451 column 11 - Warning: <img> lacks "alt" attribute
line 461 column 15 - Warning: <img> lacks "alt" attribute
line 468 column 437 - Warning: <img> lacks "alt" attribute
line 468 column 590 - Warning: <img> proprietary attribute value "absmiddle"
line 468 column 590 - Warning: <img> lacks "alt" attribute
line 474 column 1167 - Warning: <img> lacks "alt" attribute
line 484 column 22 - Warning: <img> lacks "alt" attribute
line 484 column 63 - Warning: <img> lacks "alt" attribute
line 484 column 112 - Warning: <img> lacks "alt" attribute
line 484 column 162 - Warning: <img> lacks "alt" attribute
line 495 column 15 - Warning: <img> lacks "alt" attribute
line 499 column 90 - Warning: <font> attribute "color" had invalid value "7C60B0" and has been replaced
line 506 column 488 - Warning: <img> lacks "alt" attribute
line 510 column 779 - Warning: <img> lacks "alt" attribute
line 512 column 995 - Warning: <img> proprietary attribute value "absmiddle"
line 512 column 995 - Warning: <img> lacks "alt" attribute
line 514 column 1227 - Warning: <img> proprietary attribute value "absmiddle"
line 514 column 1227 - Warning: <img> lacks "alt" attribute
line 524 column 23 - Warning: <img> lacks "alt" attribute
line 524 column 64 - Warning: <img> lacks "alt" attribute
line 524 column 113 - Warning: <img> lacks "alt" attribute
line 524 column 163 - Warning: <img> lacks "alt" attribute
line 525 column 11 - Warning: <img> lacks "alt" attribute
line 535 column 15 - Warning: <img> lacks "alt" attribute
line 542 column 901 - Warning: <div> anchor "xklayout" already defined
line 550 column 22 - Warning: <img> lacks "alt" attribute
line 550 column 63 - Warning: <img> lacks "alt" attribute
line 550 column 112 - Warning: <img> lacks "alt" attribute
line 550 column 162 - Warning: <img> lacks "alt" attribute
line 561 column 15 - Warning: <img> lacks "alt" attribute
line 570 column 161 - Warning: <img> proprietary attribute value "absmiddle"
line 570 column 161 - Warning: <img> lacks "alt" attribute
line 582 column 23 - Warning: <img> lacks "alt" attribute
line 582 column 64 - Warning: <img> lacks "alt" attribute
line 582 column 113 - Warning: <img> lacks "alt" attribute
line 582 column 163 - Warning: <img> lacks "alt" attribute
line 583 column 11 - Warning: <img> lacks "alt" attribute
line 593 column 15 - Warning: <img> lacks "alt" attribute
line 600 column 901 - Warning: <div> anchor "xklayout" already defined
line 607 column 15 - Warning: <img> proprietary attribute value "absmiddle"
line 607 column 15 - Warning: <img> lacks "alt" attribute
line 607 column 58 - Warning: <img> proprietary attribute value "absmiddle"
line 607 column 58 - Warning: <img> lacks "alt" attribute
line 607 column 101 - Warning: <img> proprietary attribute value "absmiddle"
line 607 column 101 - Warning: <img> lacks "alt" attribute
line 607 column 144 - Warning: <img> proprietary attribute value "absmiddle"
line 607 column 144 - Warning: <img> lacks "alt" attribute
line 608 column 22 - Warning: <img> lacks "alt" attribute
line 608 column 63 - Warning: <img> lacks "alt" attribute
line 608 column 112 - Warning: <img> lacks "alt" attribute
line 608 column 162 - Warning: <img> lacks "alt" attribute
line 619 column 15 - Warning: <img> lacks "alt" attribute
line 623 column 92 - Warning: <font> attribute "color" had invalid value "7C60B0" and has been replaced
line 630 column 533 - Warning: <img> proprietary attribute value "absmiddle"
line 630 column 533 - Warning: <img> lacks "alt" attribute
line 632 column 630 - Warning: <img> proprietary attribute value "absmiddle"
line 632 column 630 - Warning: <img> lacks "alt" attribute
line 640 column 22 - Warning: <img> lacks "alt" attribute
line 640 column 63 - Warning: <img> lacks "alt" attribute
line 640 column 112 - Warning: <img> lacks "alt" attribute
line 640 column 162 - Warning: <img> lacks "alt" attribute
line 651 column 15 - Warning: <img> lacks "alt" attribute
line 655 column 90 - Warning: <font> attribute "color" had invalid value "7C60B0" and has been replaced
line 673 column 1345 - Warning: <img> proprietary attribute value "absmiddle"
line 673 column 1345 - Warning: <img> lacks "alt" attribute
line 699 column 2947 - Warning: <img> proprietary attribute value "absmiddle"
line 699 column 2947 - Warning: <img> lacks "alt" attribute
line 709 column 23 - Warning: <img> lacks "alt" attribute
line 709 column 64 - Warning: <img> lacks "alt" attribute
line 709 column 113 - Warning: <img> lacks "alt" attribute
line 709 column 163 - Warning: <img> lacks "alt" attribute
line 710 column 11 - Warning: <img> lacks "alt" attribute
line 720 column 15 - Warning: <img> lacks "alt" attribute
line 727 column 901 - Warning: <div> anchor "xklayout" already defined
line 727 column 1038 - Warning: <img> proprietary attribute value "absmiddle"
line 727 column 1038 - Warning: <img> lacks "alt" attribute
line 735 column 22 - Warning: <img> lacks "alt" attribute
line 735 column 63 - Warning: <img> lacks "alt" attribute
line 735 column 112 - Warning: <img> lacks "alt" attribute
line 735 column 162 - Warning: <img> lacks "alt" attribute
line 746 column 15 - Warning: <img> lacks "alt" attribute
line 750 column 90 - Warning: <font> attribute "color" had invalid value "7C60B0" and has been replaced
line 761 column 618 - Warning: <img> proprietary attribute value "absmiddle"
line 761 column 618 - Warning: <img> lacks "alt" attribute
line 761 column 837 - Warning: <img> proprietary attribute value "absmiddle"
line 761 column 837 - Warning: <img> lacks "alt" attribute
line 769 column 22 - Warning: <img> lacks "alt" attribute
line 769 column 63 - Warning: <img> lacks "alt" attribute
line 769 column 112 - Warning: <img> lacks "alt" attribute
line 769 column 162 - Warning: <img> lacks "alt" attribute
line 780 column 15 - Warning: <img> lacks "alt" attribute
line 810 column 23 - Warning: <img> lacks "alt" attribute
line 810 column 64 - Warning: <img> lacks "alt" attribute
line 810 column 113 - Warning: <img> lacks "alt" attribute
line 810 column 163 - Warning: <img> lacks "alt" attribute
line 811 column 11 - Warning: <img> lacks "alt" attribute
line 821 column 15 - Warning: <img> lacks "alt" attribute
line 828 column 901 - Warning: <div> anchor "xklayout" already defined
line 836 column 22 - Warning: <img> lacks "alt" attribute
line 836 column 63 - Warning: <img> lacks "alt" attribute
line 836 column 112 - Warning: <img> lacks "alt" attribute
line 836 column 162 - Warning: <img> lacks "alt" attribute
line 847 column 15 - Warning: <img> lacks "alt" attribute
line 851 column 90 - Warning: <font> attribute "color" had invalid value "7C60B0" and has been replaced
line 920 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 920 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 920 column 246 - Warning: <img> proprietary attribute value "absmiddle"
line 929 column 25 - Warning: <img> lacks "alt" attribute
line 934 column 267 - Warning: <img> lacks "alt" attribute
line 279 column 4826 - Warning: trimming empty <label>
line 468 column 363 - Warning: trimming empty <font>
line 914 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 205 column 27 - Warning: <nobr> is not approved by W3C
line 251 column 27 - Warning: <nobr> is not approved by W3C
line 277 column 27 - Warning: <nobr> is not approved by W3C
line 303 column 27 - Warning: <nobr> is not approved by W3C
line 329 column 27 - Warning: <nobr> is not approved by W3C
line 380 column 27 - Warning: <nobr> is not approved by W3C
line 408 column 27 - Warning: <nobr> is not approved by W3C
line 466 column 27 - Warning: <nobr> is not approved by W3C
line 473 column 811 - Warning: <td> proprietary attribute "background"
line 500 column 27 - Warning: <nobr> is not approved by W3C
line 540 column 27 - Warning: <nobr> is not approved by W3C
line 566 column 27 - Warning: <nobr> is not approved by W3C
line 598 column 27 - Warning: <nobr> is not approved by W3C
line 624 column 27 - Warning: <nobr> is not approved by W3C
line 656 column 27 - Warning: <nobr> is not approved by W3C
line 725 column 27 - Warning: <nobr> is not approved by W3C
line 751 column 27 - Warning: <nobr> is not approved by W3C
line 785 column 27 - Warning: <nobr> is not approved by W3C
line 826 column 27 - Warning: <nobr> is not approved by W3C
line 852 column 27 - Warning: <nobr> is not approved by W3C
Info: Document content looks like HTML5
Info: No system identifier in emitted doctype
Tidy found 338 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