Worlds are containers for collections of BGMaps or OBJs. They determine if, when, and where these graphical units are drawn on either of the VB's two 384×224 screens. There are a total of 32 worlds (numbered 0 to 31) but not all of them need be on-screen at one time.
Worlds are drawn in reverse order starting at 31 and moving toward 0 so that the opaque areas of lower numbered Worlds obscure those of higher numbered ones. Only visible Worlds—those with LON, RON, or both set—are actually rendered. Also, the entire world rendering process can be halted by setting a World's END bit. Such a World—along with all remaining Worlds—is skipped.
The 32 Worlds, which consist of sixteen 16-bit words (32 bytes), reside in the 0×400 bytes (1KB) from 0×0003 D800 to 0×0003 DBFF. This is known as WAM—World Attribute Memory.
BGMap-based Worlds can be rendered normally (useful for backgrounds or large sprites) or with special effects such as shifting, skewing, scaling, and rotation. There is also a parallax value considered at certain parts of the rendering process to facilitate the stereoscopic 3-D imagery which sets the VB apart. Said parallax values are used to modify X coordinates, resulting in horizontal disparity which the human brain perceives as depth. Since they are added for the right screen and subtracted for the left, a more positive parallax sends things away from the viewer while a negative value brings them closer. This rule should also be applied to each pixel when drawing separate images for each eye.
Here is the structure of a World:
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| LON | RON | BGM | SCX | SCY | OVR | END | 0 | 0 | BGMAP_BASE (0 - 13) |
| GX ( -32,768 - 32,767 ) |
| GP ( -32,768 - 32,767 ) |
| GY ( -32,768 - 32,767 ) |
| MX ( -32,768 - 32,767 ) |
| MP ( -32,768 - 32,767 ) |
| MY ( -32,768 - 32,767 ) |
| W ( 0 - 65535 ) |
| H ( 0 - 65535 ) |
| PARAM_BASE | 0 | 0 | 0 | 0 |
| OVERPLANE_CHARACTER |
| WRITING FORBIDDEN |
| WRITING FORBIDDEN |
| WRITING FORBIDDEN |
| WRITING FORBIDDEN |
| WRITING FORBIDDEN |
LON
RON
BGM
Background Mode: 00 = Normal
BGMap, 01 = H-bias
BGMap, 10 = Affine
BGMap, 11 = OBJ collection.
SCX
The number of
BGMaps to combine in the X direction expressed as a power of two. (See also: SCY)
SCY
The number of
BGMaps to combine in the Y direction expressed as a power of two. The total number of
BGMaps is 2
SCX * 2
SCY with a maximum of eight.
| SCX/SCY | 00 | 01 | 10 | 11 |
| 00 | 1×1 | 1×2 | 1×4 | 1×8 |
| 01 | 2×1 | 2×2 | 2×4 | N/A |
| 10 | 4×1 | 4×2 | N/A | N/A |
| 11 | 8×1 | N/A | N/A | N/A |
OVR
Disables
BGMap wrapping. If the VIP attempts to retrieve the pixel at (-1, -1) and OVR is cleared, it would actually retrieve the pixel at (511,511) (assuming only one
BGMap in the collection). But if OVR is set, the bottom-right pixel of the OVERPLANE_CHARACTER would be retrieved.
END
BGMAP_BASE
The number of the first
BGMap to display; see SCX, SCY for total number of
BGMaps. Always count left to right, top to bottom, for next
BGMap to display.
GX
GP
GY
MX
MP
MY
W
H
PARAM_BASE
Parameter table base address; used in H-bias and Affine modes for shifting, scaling, etc. The value to be stored here is calculated as follows: PARAM_BASE = ( ( (Address - 0×00020000) / 2 ) & 0xFFF0 ).
OVERPLANE_CHARACTER
This is the number of a cell in the current
BGMap. Zero-based, starting in the upper-left and counting left-to-right and top-to-bottom. If the OVR bit is set, this
Char is tiled on the screen anywhere the source coordinates (MX +/- MP, MY) lie outside the
BGMap collection.
Discussion