You are assuming that the display is 16 characters.
They come in 1 line thru 4 lines (well 1,2 and 4). They also come in 8, 10, 16, 20, 40 and 80 characters per line.
The most common is 1, 2 and 4 lines and 16 and 20 characters per line.
The library never saves the characters per line of the display.
That array should be calculated based on number of characters per line.
I will find my modified library where I added _charline and used it to calculate the array you redefined.
They way a 4 line display works is the third line is actually end of the first line. If you set the cursor at 0,0 and start printing you will see after the last character on the first like you will start at the first character of the third line.
All this is from memory and I currently do not have one here setup and connected, but I will as soon as I have some time.
Let me know if this makes sense or not.
Thanks for the input.
Tim