Level sprites
Explains the format of level sprites.

Structure of level sprite
The level sprite is a structure size of 8 bytes and sprite placement data of each level is the array of this structure.
The format of this structure is as follows:

struct spriteplacement
{
    ushort parameter;
    ushort x;
    ushort y;
    ushort type;
}
However, if 0 is specified for the parameter, it means end of the sprite placement.
Parameter
Parameter is a value assigned to all sprites, and it specifies sprite attributes and controls sprite loading.

Upper byte: Group ID
Sprites with same group ID are loaded at once when one of the sprite in the group is loaded. At this time, it does not matter whether sprites loaded dependently are within the their loading zone or not.
Group ID should be between 0x01 and 0x1F, and when you don't assign group ID, use 0x00.
Group ID is mainly used to synchronize multiple sprites, but when you give same group ID to too many sprites, it will cause lag or sprite over.

Note
Most of throwable objects (DK barrels, wooden boxes, Klobbers, etc.) have a bug that gives infinite respawn if they are given group ID.
You can find some example in original game. For example, the Klobber located near [N] letter in 1-1 and DK barrel near midway entrance in 1-4.

Upper nibble of lower byte: Loading zone
Determin each sprite's loading zone. This setting should be set between 0x0 and 0x6 and default is 0x0.
You should set small loading zone for the sprites located in overcrowded area to prevent sprite over.
Also, you should set large loading zone for the sprites that often scrollouts such as bosses, to suppress unloading.

Value Left Right Top Bottom
0
32
32
32
64
1
16
16
16
16
2
48
48
64
96
3
32
32
64
96
4
32
32
248
248
5
248
248
248
248
6
248
248
32
64

Lower nibble of lower byte: Attribute
This value dominates attribute of each sprite definitely. Unless otherwise notes, "parameter" words in the documents simply means this 4-bit value.
By specifying an appropriate value, special processing such as conditional loading can be performed.

Value Content
0
End of the sprite placement data
If you set this value, the game will not load any more sprites.
1, 2, F
Default
Load normally. Nothing special. Parameter 0xF is automatically assigned for the sprites generated by sprite generators.
3, 4, 5, 6, 8
Suppress loading
The sprites given these parameters are never loaded, but it is not end of data.
These parameters are undefined, and you should not use them.
7
Graphics fix
This parameter enables sprites using large images to correctly transfer its image to VRAM and map them.
The definition of "large image" is images that use 32 tiles or more in 8x8 tile conversion (16x16 tile is counted as four 8x8 tiles).
If you assign othe value to them, it will cause glitchy rendering.
9, E
Suppress image loading
This value is mainly used for control sprites that do not need to be displayed on the screen, or sprites don't use images.
Since this parameter skips transfering image to VRAM, if you use this for normal sprites, the sprite won't be rendered, or will be glitchy or will render defferent image.
If you use other value for control sprites, it may cause glitch rendering or control sprites may not function properly.
A
Conditional loading
The sprites given this parameter will be loaded only you complete the condition specified in bonus timer.
B, C
Conditional loading
Basically, these parameter is similar to parameter 0xA but they each use different flags for condition judge.
Note that these flag is only defined, there is no use example in the original game, and there is no way to access them, so even if these parameter is used, loading is never performed.
If you want to use these parameter effectively, you have to add some assembly accessing these flags.
D
Conditional loading
This parameter is only for the hooks in Kleever's Kiln. The sprites given this parameter will be loaded only you complete the condition "attack to Kleever 3 times, and then Kleever attacks you once".
However, since the flag referred to is same as the parameter 0xA, these sprites also will be affected by the bonus timer.
This parameter does part of  the sprite loading process itself, so if you use this parameter for other sprites, it may cause issue, at the worst case, crashes the game.