Register - Login
Views: 99380852
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
04-23-22 11:40:42 PM
Jul - Posts by yoshiman
Pages: 1 2 3 4 5
yoshiman
Member
Level: 23


Posts: 41/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 03-07-08 10:50:02 PM, in Why a Peach 64 hack is not impossible, but would require a lot of work! (last edited by yoshiman at 03-24-08 07:50 PM) Link
Long answer: A code to make Yoshi giant will either affect the size modifiers in the Yoshi object or change the size modifier in the Yoshi graphic structure.

Short answer: no.

To change the colour of Yoshi you need to know where his actual polygon data is which are the vertices and triangles that make up Yoshi including the colour modifier commands.

Since writing this I've done a yellow colour Yoshi but I ended up with 64 codes! Why couldn't Nintendo have used simple RGB?

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 42/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 03-13-08 10:52:38 PM, in Alternate extender for Super Mario 64 Link
Will your extended work with other versions of the ROM such as PAL?

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 43/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 03-21-08 12:01:09 AM, in Behaviour Scripts (last edited by yoshiman at 03-21-08 07:44 PM) Link
I finally had time to look at what VL-Tone calls in his doc 'behaviour scripts' but they are nothing more than short assembly language routines so I can tell you exactly what is happening. From his doc he writes:

The 0x0C command calls ASM functions found in RAM.

[0C] [00 00 00] [80 2A CC 3C]

[0]= 0C is the command byte.
[1,2,3]= Always zero, unused?
[4,5,6,7]= Offset in RAM of the ASM function.

I can tell you that 0x0C is the ASM JAL (Jump And Link, a procedure call) and the three bytes [1,2,3] are always zero so that translates to JAL 0x80000000. Because of the delay slot the next instruction is also executed which VL-Tone calls the offset in RAM of the ASM function and that's where I'm confused.

It does look like a pointer to ASM and indeed of the ones I've checked there is coding there but it's actually an instruction that supposedly is the offset in RAM, the instruction loads a byte into a register; the offset is half the address. I'll stop there and not go into any more detail unless you want me to as to be kind to those who are unfamiliar with MIPS ASM.

In a RAM object there seems to be 3 behaviour pointers which is somewhat supported by VL-Tone's doc. Change these values and the object behaves differently but if you swap the behaviour values in the scripts it has a global effect so that, for e.g., all Bob-ombs act like Goombas! I guess you could do the same with a ROM hack which essentially is what Toad's Tool does.

What my finding means is that I can look at any object in the RAM and identify what the behaviour is but that of course means there has to be an object that uses that type of behaviour.

But I now have doubts if it is pure ASM because it doesn't make sense even converted from C. What it seems to do, apart from the call to the behaviour coding, is set the state of certain variables in each RAM object that uses that type of behaviour.

Taken from VL-TONE's doc for the Toad message behaviour:

21CCFC/002EFC 11 01 40 49

The 4049 is copied to the variable in the Toad object that determines how it reacts to Mario.

I hope this is of help and I'd be happy to add more if you want me to.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 44/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 03-24-08 10:46:02 PM, in Behaviour Scripts Link
Thanks VL-TONE for your doc as I was changing behaviours with codes but when I looked at your doc and investigated something clicked. I will try to work out what more of the scripts do. Maybe Nintendo thought they'd use the same code value for a call to ASM that's used in the script but added the zero padding. In ASM the 0x0Cxxxxxx is jal which doesn't use an actual address like in the script but instead divides it by four (the length of an instruction).

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 45/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 03-25-08 10:23:13 PM, in Behaviour Scripts Link
Your reasoning is valid and now I see it not as instructions but it's strange they used the same value for the jal (0x0C) as they did for a jump to ASM in the script. I assumed that the behaviour pointers in a RAM object were to ASM but instead they are to different parts of a behaviour script. So the calls are to ASM in the behaviour scripts but had it been an ASM instruction the address would have been stored differently.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 46/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 04-09-08 03:26:19 PM, in Behaviour Scripts Link
Very interesting. If you have a look on my site or the thread about RAM objects that will tell you what some of the other params do (though I have an updated version to upload).

I've found when creating my codes that change behaviours that they often work not as expected. For e.g., with my codes that allow you to pick up an object that was a signpost it flys further than normal, perhaps because other params haven't been set.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 47/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 04-18-08 10:48:45 PM, in Editing the RAM objects Link
I will post soon an updated list of the variables used by the objects. I don't think that the commands used by the behaviour scripts specify the offset into the RAM object. I noticed the familiar value as mentioned on the behaviour script thread and tested by changing the value and it confirmed what the command does. So maybe the game knows what offset is to be used for the values used with each script command, but I might be wrong.

Each object is a 'RAM structure,' I call it that since it's a collection of variables bound to each object which in C (that the game was likely to have been programmed in) that's known as a structure. Actually, they look to be doubly linked-lists, in other words, each object has a pointer to the next and previous object.

The way I locate an object in a level is to search for the graphics value it uses and then you can narrow it down. With Mario, there is in the RAM a pointer to his object since which object he uses depends on the level. Unlike, in Ocarina of Time, where Link always used the same object.

I have found that each object has scaling variables for its size along the three axis, but the actual ASM forces them to fixed values for some objects such as Mario, Goombas and strangely the ! switches. People could change Mario's size equally along the 3 axis but it wasn't until I patched the actual coding that Luigi, Wario, etc size Mario was possible.

If you adjust the size of a box, its collision size updates also but for some objects it doesn't so that may be due to the different collision map or not even using polygons for collision as VL-TONE pointed out.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 48/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 04-19-08 11:29:27 PM, in Behaviour Scripts Link
I've found two behaviour script instructions that basically do the same as the ASM equivalent. There's 0x0C000000 which is a jump to ASM and 0x00000000 which functions the same as NOP (do nothing) and has the same opcode.

More interesting is this behaviour script instruction:
0x27260000 xxxxxxxx
The value xxxxxxxx is placed at offset 0x120 in each object structure that uses the behaviour script. I don't know exactly what the variable at offset 0x120 does but it seems to be only used with animated objects. If you copy Chain-chomp's value to a Goomba it moves its head up and down like a chomping movement.

The behaviour pointers in an object structure often point to a position not at the start of the behaviour script, where it points to seems to be for values that need to be continually updated in the object structure, including jumps to ASM. As for values that are written once to each object when the level is initialized there is no pointer in the object to those script instructions.

While looking at the behaviour pointers for the Tox boxes in Shifting Sand Land I noticed a pointer at offset 0x1AC that's different for each box and points to data that determines their paths. This data in the RAM isn't overwritten even if you re-enter Shifting Sand Land which is strange. I don't know exactly what each value does but by studying the Tox box movement I've seen a pattern.

(PAL)

802FCA68 0401040104010401
802FCA70 0401020501050105
802FCA78 0105010501070102
802FCA80 0601060105010204
802FCA88 010701FF

Each movement appears to be grouped into two, though there seems to be an index variable in the object structure that inceases by one each time. You see that there are 5 0x0401 theses are the south movements where the first Tox box ends up at the start of the pathway.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 49/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 04-20-08 10:13:09 PM, in Behaviour Scripts Link
It seems in every object structure there are at least three pointers to postions in a behaviour script, the first two are often the same and the last usually points to the start of the behaviour script. This explains why changing the third pointer appears to have no affect since it possibly initializes whereas the other pointers indicate values that are constantly written to the object including calls to ASM.

I did think that the behaviour script instructions did not explicitily state the offset into the object where the variable is located to be written to but I now wonder if that is not so.

Have a look at these behaviour script instructions I have worked out that copy the 16-bit value to a variable in the object structure:

0x1101xxxx xxxx is put at offset 0x8E in object structure
0x1103xxxx xxxx is put at offset 0x96

But what about this instruction:

0x27260000 xxxxxxxx xxxxxxxx is placed at offset 0x120. How does it know that 32-bits is to be witten or is it so that only certain offsets can be used?

Do you see a connection? I'll have to test but this might mean that using the behaviour scripts you can write to any variable in an object structure. This would give us great power but you'd have to be careful as to not change variables that shouldn't be altered that might crash the game.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 50/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 04-21-08 09:53:37 PM, in Behaviour Scripts Link
I have made some sense of the behaviour script instructions we've been discussing. I used the Goomba behaviour script as a test and changed the instruction values and noted the effects.

1100xxxx places the value xxxx at offset 0x8A in the object structure.

Now look at the pattern:

1100=offset 0x8A
1101=offset 0x8E
1102=offset 0x92
1103=offset 0x96

Obviously the offset increases by 4 which is weird considering that only 16-bits (i.e 2 bytes) can be written to the variable which would mean you couldn't write to any variable in the object structrure.

As for the instructions that write 32-bits:

2725=offset 0x11C
2726=offset 0x120

Again, a 4 byte difference which is logical with those instructions. If you change the four zeros after the 2725 or 2726 it appears to be ignored by the game. So it knows how many bytes are to be copied to the variable but how?

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 51/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 04-22-08 10:57:24 PM, in Behaviour Scripts Link
I must of missed that, maybe I can find out by looking at the ASM. Speaking of the coding, I can now change what an item box gives out, I found the item table in the RAM so it acts as a master control for all item boxes. Because of looking at the behaviour coding for the item box that lead me to the list of values that decide what the item looks like, and what it does.

I won't post any actual values here until I do a video on YouTube but this discovery means two very exciting things:

(1) Have items that you couldn't.
(2) If it's possible to expand the table, add more different types of items that you can get from an item box.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 52/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 04-23-08 11:30:48 PM, in Behaviour Scripts Link
I've been studying the coding a lot which has helped me to understand how the object variables are used since an offset is used to reference them. I did have a brief look at Koopa the quick and it seems there's a ponter (different offset to the Tox boxes) in its object structure that indicates some values but I can't yet work them out. As you race Koopa the pointer value changes and the 16-bit value it points to is copied to Koopa's object structure at a nearby offset. Changing them seems to have no affect so maybe the ASM will reveal something.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 53/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 04-27-08 09:54:39 PM, in Behaviour Scripts Link
So far I have only edited the ASM in the RAM but of course doing that with codes has big limitations. I also inserted my own short routines into a unused area of RAM to do simple things such as increase Mario's lives when pressing D-Pad up. Let's not forget that Gameshark codes are converted to ASM routines but it's better to work in harmony with the game's coding.

Yes, I do think it's possible, but what exactly would be best? We could adjust the existing behaviour coding or possible add new behaviours. Speaking of that, either I've made a serious error or I've missed something obvious. I've been looking at the ASM called by the 0x0C behaviour instruction and the signposts and Bullet bill blaster both make the same call. I know that being able to read a signpost is due to a variable in the object and not the 0x0C call but I don't see the connection with a blaster. And similar, why do the trees need a 0x0C call when you can climb a tree because of a set variable in its structure like with the signposts?

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 54/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 04-28-08 10:55:23 PM, in Behaviour Scripts Link
Very helpful information but it amazes me how overly complex this game is. For e.g., the red coin and 1-up 0x0c call do exactly as you would expect them, i.e. to increase Mario's red coin total/lives, play sound, etc. But that is not so with other objects that rely more on behaviour type variables in the object structure.

I have done mainly RAM hacking, so could you please direct me to a place in the ROM where it would be suitable to place new ASM. And would that be an area protected by checksum, though that can be fixed with a program.

Creating behaviours generally isn't too difficult, but typically we would also want to use existing functions that do common things. It seems that there are two important pointers available for behaviours, a pointer to Mario's object structure and what appears to be a pointer to the object structure who the behaviour belongs to (e.g., a coin). Using these pointers we can get at any of the variables that belong to the object so there are great possibilities.

So, can you please confirm that this is correct: the game uses a command to load ASM from the ROM into the RAM. Since the coding stays at the same place in the RAM regardless of the level, when are these commands to load the ASM executed?

If we did create new behaviours and have the game load them there might not be free space in the RAM (though ASM takes up very little space compared to graphics, sound, etc). How does the game link behaviour coding to the 0x0c command in the script-is it segment/offset?

I wanted to do an ASM thread ages a go and I asked VL-TONE but he said not to since not many people know ASM so perhaps it could be kept to this thread. If you would like I could put samples of behaviour coding used by objects such as coins so you can get an idea of what goes on.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 55/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 04-30-08 01:44:31 AM, in Behaviour Scripts Link
That's a very good website you provided, thanks.

I need to become more familiar with the NTSC game before I make any big changes to the ROM since I know the PAL game more, and there might not be enough RAM to hold new code. Oh, and I'll be on holiday soon as well, so if I don't reply in a while that's why.

Having had a look at the file select menu as you suggested objects are used, for e.g., the first object is the background. You can move it, rotate it and change what it looks like exactly as you would with in-game objects. The behaviour for the background basically fixes its size using a very common function that takes one size and applies it to all 3 object size modifiers.

I checked each of the pointers to graphic structures and found that there are 2 for Mario new file icon and 2 for Mario icon of a file that has already been started. It may be nothing but the extras could have been used for Luigi if he were to be playable as well as Mario.

As well as the file select menu behaviours the in-game behaviour coding is there but not the scripts. I did a test and applied the Koopa shell 0x0c call to the background and it span around, but no change in music.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 56/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 05-02-08 01:13:32 AM, in Behaviour Scripts Link
I haven't found the mouse yet used for the file select screen and as I'll be on holiday tomorrow I'll have to continue investigating when I get back.

The 0x1101 command appears to determine how much an object reacts to Mario but it's exact use seems to vary depending on the behaviour. As for the 0x08 command it appears to affect the animation of the object; if you copy the value for Chain-chomp to a Goomba they move their heads like a chomping action. This is confusing since there's a pointer dedicated to animation.

From what I've seen, every object has a pointer to the behaviour script for initialization and then two more (often the same values) that pointe to a position in the behaviour script to be called often, usually a 0x0c call as to update the object.

There is something that's really bugging me I'd like someone to explain. Codes I create that modify the coding only work if activated before the file select screen if using an emulator but on my actual N64 I can edit the RAM any time and the effects are instant. Anything else you can change and you see immediately the changes but not with coding, as if the emulator makes a back up copy-but how would it know?

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 57/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 05-12-08 10:26:25 PM, in Behaviour Scripts Link
I've been on holiday so I haven't done any more hacking yet but I was just reading over the threads. I remember that one of the box behaviours forces the object to use the box graphics, which of the 2 textures is used is selected by a variable in the object structure. Does anyone know what command sets that variable?

Modifing or adding new behaviours could only be done by those who know ASM so that would not be a good idea to integrate into TT64. Certainly choosing which 0x0c calls are used would allow for the custom behaviours using the existing coding.

The best thing we could do with SM64 is put in object behaviours from past Mario games although the Blarrg & Yoshi egg behaviours might be there. Nemu is great for studying the behaviour coding since you can set up watches on certain addresses, do something significant in the game and Nemu will pause showing the instruction that read/wrote to the watch address. This came in handy when, for example, someone requested that I do a code so that the Bob-ombs ignored Mario.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 58/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 05-12-08 10:33:20 PM, in Editing the RAM objects Link
Finding the ROM address of a Gameshark code depends on what the code does. If the code gave Mario unlimited lives that would affect a variable which lives in the RAM so that could not be converted to a patch in the ROM unless you changed it to affect the coding (such as to not subtract a life when Mario was killed).

If it's changing colours that you want to do in the ROM usually these values aren't changed in the RAM for the current level but are loaded from the ROM due to system limitations. If the values are unique (i.e. something like 8EFC) do a search in the ROM and then compare with the bytes that follow to check that it's the right data.

Remember, of the two main Gameshark codes:

80 writes 8-bits
81 writes 16-bits

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 59/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 05-13-08 11:08:01 PM, in Behaviour Scripts Link
Thanks for reminding me that the extended ROM doesn't work in Nemu, that's gonna cause problems until a better version of Project64 is released that has hacking features.

The draw distance you talk of should affect collision since objects aren't updated until they are in view, though there might be exceptions.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
yoshiman
Member
Level: 23


Posts: 60/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 05-13-08 11:14:43 PM, in Editing the RAM objects Link
I've already done a code to ride Yoshi but there are problems with it:

(1) Mario's animation needs correcting
(2) Yoshi shouldn't spin around when not riding (easily fixed with ASM patch)
(3) If Yoshi touches water it's bye, bye

Of course, ideally we need a new behaviour for a ridable Yoshi but we could base it on the Koopa shell.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
Pages: 1 2 3 4 5
Jul - Posts by yoshiman


Rusted Logic

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

24 database queries, 53 query cache hits.
Query execution time:  0.087639 seconds
Script execution time:  0.024011 seconds
Total render time:  0.111650 seconds


TidyHTML vomit below
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
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 147 column 135 - 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 128 - Warning: unescaped & or unknown entity "&page"
line 149 column 163 - Warning: unescaped & or unknown entity "&page"
line 149 column 196 - Warning: unescaped & or unknown entity "&page"
line 149 column 50 - Warning: missing </font> before </td>
line 149 column 231 - 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 190 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 192 column 9 - Warning: missing <tr>
line 210 column 13 - Warning: missing <tr>
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 238 column 13 - Warning: missing <tr>
line 272 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 274 column 9 - Warning: missing <tr>
line 292 column 13 - Warning: missing <tr>
line 300 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 302 column 9 - Warning: missing <tr>
line 320 column 13 - Warning: missing <tr>
line 328 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 330 column 9 - Warning: missing <tr>
line 348 column 13 - Warning: missing <tr>
line 358 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 360 column 9 - Warning: missing <tr>
line 378 column 13 - Warning: missing <tr>
line 394 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 396 column 9 - Warning: missing <tr>
line 414 column 13 - Warning: missing <tr>
line 440 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 442 column 9 - Warning: missing <tr>
line 460 column 13 - Warning: missing <tr>
line 481 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 483 column 9 - Warning: missing <tr>
line 501 column 13 - Warning: missing <tr>
line 527 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 529 column 9 - Warning: missing <tr>
line 547 column 13 - Warning: missing <tr>
line 560 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 562 column 9 - Warning: missing <tr>
line 580 column 13 - Warning: missing <tr>
line 588 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 590 column 9 - Warning: missing <tr>
line 608 column 13 - Warning: missing <tr>
line 618 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 620 column 9 - Warning: missing <tr>
line 638 column 13 - Warning: missing <tr>
line 656 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 658 column 9 - Warning: missing <tr>
line 676 column 13 - Warning: missing <tr>
line 692 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 694 column 9 - Warning: missing <tr>
line 712 column 13 - Warning: missing <tr>
line 726 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 728 column 9 - Warning: missing <tr>
line 746 column 13 - Warning: missing <tr>
line 758 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 760 column 9 - Warning: missing <tr>
line 778 column 13 - Warning: missing <tr>
line 793 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 795 column 9 - Warning: missing <tr>
line 813 column 13 - Warning: missing <tr>
line 823 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 825 column 9 - Warning: missing <tr>
line 843 column 13 - Warning: missing <tr>
line 857 column 17 - Warning: missing <tr>
line 857 column 17 - Warning: discarding unexpected <table>
line 860 column 35 - Warning: missing <tr>
line 860 column 95 - Warning: unescaped & or unknown entity "&page"
line 860 column 128 - Warning: unescaped & or unknown entity "&page"
line 860 column 163 - Warning: unescaped & or unknown entity "&page"
line 860 column 196 - Warning: unescaped & or unknown entity "&page"
line 860 column 50 - Warning: missing </font> before </td>
line 860 column 231 - Warning: missing </font> before </table>
line 862 column 35 - Warning: missing <tr>
line 862 column 50 - Warning: missing </font> before </td>
line 862 column 135 - Warning: missing </font> before </table>
line 864 column 17 - Warning: discarding unexpected </textarea>
line 864 column 28 - Warning: discarding unexpected </form>
line 864 column 35 - Warning: discarding unexpected </embed>
line 864 column 43 - Warning: discarding unexpected </noembed>
line 864 column 53 - Warning: discarding unexpected </noscript>
line 864 column 64 - Warning: discarding unexpected </noembed>
line 864 column 74 - Warning: discarding unexpected </embed>
line 864 column 82 - Warning: discarding unexpected </table>
line 864 column 90 - Warning: discarding unexpected </table>
line 866 column 9 - Warning: missing </font> before <table>
line 878 column 25 - Warning: discarding unexpected </font>
line 887 column 58 - Warning: discarding unexpected </font>
line 865 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 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 172 column 15 - Warning: <img> lacks "alt" attribute
line 195 column 22 - Warning: <img> lacks "alt" attribute
line 195 column 63 - Warning: <img> lacks "alt" attribute
line 195 column 112 - Warning: <img> lacks "alt" attribute
line 195 column 161 - Warning: <img> lacks "alt" attribute
line 206 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 234 column 15 - Warning: <img> lacks "alt" attribute
line 277 column 22 - Warning: <img> lacks "alt" attribute
line 277 column 63 - Warning: <img> lacks "alt" attribute
line 277 column 112 - Warning: <img> lacks "alt" attribute
line 277 column 161 - Warning: <img> lacks "alt" attribute
line 288 column 15 - Warning: <img> lacks "alt" attribute
line 305 column 22 - Warning: <img> lacks "alt" attribute
line 305 column 63 - Warning: <img> lacks "alt" attribute
line 305 column 112 - Warning: <img> lacks "alt" attribute
line 305 column 161 - Warning: <img> lacks "alt" attribute
line 316 column 15 - Warning: <img> lacks "alt" attribute
line 333 column 22 - Warning: <img> lacks "alt" attribute
line 333 column 63 - Warning: <img> lacks "alt" attribute
line 333 column 112 - Warning: <img> lacks "alt" attribute
line 333 column 161 - Warning: <img> lacks "alt" attribute
line 344 column 15 - Warning: <img> lacks "alt" attribute
line 363 column 22 - Warning: <img> lacks "alt" attribute
line 363 column 63 - Warning: <img> lacks "alt" attribute
line 363 column 112 - Warning: <img> lacks "alt" attribute
line 363 column 161 - Warning: <img> lacks "alt" attribute
line 374 column 15 - Warning: <img> lacks "alt" attribute
line 399 column 22 - Warning: <img> lacks "alt" attribute
line 399 column 63 - Warning: <img> lacks "alt" attribute
line 399 column 112 - Warning: <img> lacks "alt" attribute
line 399 column 161 - Warning: <img> lacks "alt" attribute
line 410 column 15 - Warning: <img> lacks "alt" attribute
line 445 column 22 - Warning: <img> lacks "alt" attribute
line 445 column 63 - Warning: <img> lacks "alt" attribute
line 445 column 112 - Warning: <img> lacks "alt" attribute
line 445 column 161 - Warning: <img> lacks "alt" attribute
line 456 column 15 - Warning: <img> lacks "alt" attribute
line 486 column 22 - Warning: <img> lacks "alt" attribute
line 486 column 63 - Warning: <img> lacks "alt" attribute
line 486 column 112 - Warning: <img> lacks "alt" attribute
line 486 column 161 - Warning: <img> lacks "alt" attribute
line 497 column 15 - Warning: <img> lacks "alt" attribute
line 532 column 22 - Warning: <img> lacks "alt" attribute
line 532 column 63 - Warning: <img> lacks "alt" attribute
line 532 column 112 - Warning: <img> lacks "alt" attribute
line 532 column 161 - Warning: <img> lacks "alt" attribute
line 543 column 15 - Warning: <img> lacks "alt" attribute
line 565 column 22 - Warning: <img> lacks "alt" attribute
line 565 column 63 - Warning: <img> lacks "alt" attribute
line 565 column 112 - Warning: <img> lacks "alt" attribute
line 565 column 161 - Warning: <img> lacks "alt" attribute
line 576 column 15 - Warning: <img> lacks "alt" attribute
line 593 column 22 - Warning: <img> lacks "alt" attribute
line 593 column 63 - Warning: <img> lacks "alt" attribute
line 593 column 112 - Warning: <img> lacks "alt" attribute
line 593 column 161 - Warning: <img> lacks "alt" attribute
line 604 column 15 - Warning: <img> lacks "alt" attribute
line 623 column 22 - Warning: <img> lacks "alt" attribute
line 623 column 63 - Warning: <img> lacks "alt" attribute
line 623 column 112 - Warning: <img> lacks "alt" attribute
line 623 column 161 - Warning: <img> lacks "alt" attribute
line 634 column 15 - Warning: <img> lacks "alt" attribute
line 661 column 22 - Warning: <img> lacks "alt" attribute
line 661 column 63 - Warning: <img> lacks "alt" attribute
line 661 column 112 - Warning: <img> lacks "alt" attribute
line 661 column 161 - Warning: <img> lacks "alt" attribute
line 672 column 15 - Warning: <img> lacks "alt" attribute
line 697 column 22 - Warning: <img> lacks "alt" attribute
line 697 column 63 - Warning: <img> lacks "alt" attribute
line 697 column 112 - Warning: <img> lacks "alt" attribute
line 697 column 161 - Warning: <img> lacks "alt" attribute
line 708 column 15 - Warning: <img> lacks "alt" attribute
line 731 column 22 - Warning: <img> lacks "alt" attribute
line 731 column 63 - Warning: <img> lacks "alt" attribute
line 731 column 112 - Warning: <img> lacks "alt" attribute
line 731 column 161 - Warning: <img> lacks "alt" attribute
line 742 column 15 - Warning: <img> lacks "alt" attribute
line 763 column 22 - Warning: <img> lacks "alt" attribute
line 763 column 63 - Warning: <img> lacks "alt" attribute
line 763 column 112 - Warning: <img> lacks "alt" attribute
line 763 column 161 - Warning: <img> lacks "alt" attribute
line 774 column 15 - Warning: <img> lacks "alt" attribute
line 798 column 22 - Warning: <img> lacks "alt" attribute
line 798 column 63 - Warning: <img> lacks "alt" attribute
line 798 column 112 - Warning: <img> lacks "alt" attribute
line 798 column 161 - Warning: <img> lacks "alt" attribute
line 809 column 15 - Warning: <img> lacks "alt" attribute
line 828 column 22 - Warning: <img> lacks "alt" attribute
line 828 column 63 - Warning: <img> lacks "alt" attribute
line 828 column 112 - Warning: <img> lacks "alt" attribute
line 828 column 161 - Warning: <img> lacks "alt" attribute
line 839 column 15 - Warning: <img> lacks "alt" attribute
line 872 column 25 - Warning: <img> lacks "alt" attribute
line 877 column 267 - Warning: <img> lacks "alt" attribute
line 147 column 135 - Warning: trimming empty <font>
line 149 column 231 - Warning: trimming empty <font>
line 857 column 17 - Warning: trimming empty <tr>
line 860 column 231 - Warning: trimming empty <font>
line 862 column 135 - Warning: trimming empty <font>
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 211 column 27 - Warning: <nobr> is not approved by W3C
line 239 column 27 - Warning: <nobr> is not approved by W3C
line 293 column 27 - Warning: <nobr> is not approved by W3C
line 321 column 27 - Warning: <nobr> is not approved by W3C
line 349 column 27 - Warning: <nobr> is not approved by W3C
line 379 column 27 - Warning: <nobr> is not approved by W3C
line 415 column 27 - Warning: <nobr> is not approved by W3C
line 461 column 27 - Warning: <nobr> is not approved by W3C
line 502 column 27 - Warning: <nobr> is not approved by W3C
line 548 column 27 - Warning: <nobr> is not approved by W3C
line 581 column 27 - Warning: <nobr> is not approved by W3C
line 609 column 27 - Warning: <nobr> is not approved by W3C
line 639 column 27 - Warning: <nobr> is not approved by W3C
line 677 column 27 - Warning: <nobr> is not approved by W3C
line 713 column 27 - Warning: <nobr> is not approved by W3C
line 747 column 27 - Warning: <nobr> is not approved by W3C
line 779 column 27 - Warning: <nobr> is not approved by W3C
line 814 column 27 - Warning: <nobr> is not approved by W3C
line 844 column 27 - Warning: <nobr> is not approved by W3C
Info: Document content looks like HTML5
Info: No system identifier in emitted doctype
Tidy found 236 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