-
-
Notifications
You must be signed in to change notification settings - Fork 529
Advanced Drawing Techniques
poke4(2*0x03FF0 + color_index, mapped_color_index)
memset(0x03FF0, mapped_palette, 8)
+-------+-------------------+-------+
| ADDR | INFO | SIZE |
|-------+-------------------+-------|
| 00000 | SCREEN | 16320 | 240x136 = 32640 4bit pixels
| 03FC0 | PALETTE | 48 | 16 x 24bit RGB color values
| 03FF0 | PALETTE MAP | 8 | 16 x 4bit color indexes (for palette swapping of individual sprites)
+-------+-------------------+-------+
TIC-80 uses PALETTE MAP
to swap 4 bits colors indices to be drawn to any combination of 4 bits colors in the palette. The mapped 4 bits color is written on SCREEN
.
With sprite-drawing functions (spr
, map
, textri
), this color swap is done when reading the color from sprite memory.
colorkey
parameters are applied on source colors, swapping out color indices before remapping.
poke4(2*0x03FFC, blit_segment)
The blit segment controls how sprite drawing functions will read sprites in memory. It can specify the amount of bits to read per pixel and the position of the spritesheet.
In TIC-80, sprite drawing functions use two different types of indexing:
- total indexing:
spr
indexes sprites counting 8x8 sprite positions from left to right and from top to bottom on the whole spritesheet - local indexing:
map
,textri
withuse_map=true
andfont
use 8 bit unsigned integer as indexes. This difference is the reason why those functions are limited to a portion of the spritesheet.
The blit segment modifies how indexes are interpreted.
val | bin | target memory segment
--------------------------
2 | 0010 | 4bpp // default value
4 | 0100 | 2bpp
8 | 1000 | 1bpp
4 bpp 2 bpp 1 bpp
<---------16 cols---------> <---------32 cols---------> <---------64 cols--------->
+------+------+------+------+ +------+------+------+------+ +------+------+------+------+
| 0000 | | 0015 | | 0000 | | 0031 | | 0000 | | 0063 |
+------+-- --+------+ +------+-- --+------+ +------+-- --+------+
| | | | | |
: TILES (BG) : : TILES (BG) : : TILES (BG) :
| | | | | |
+ --+-- --+------+ + --+-- --+------+ + --+-- --+------+
| | 0255 | | | 0511 | | | 1023 |
+------+-- - - - - --+------+ +------+-- - - - - --+------+ +------+-- - - - - --+------+
| 0256 | | 0271 | | 0512 | | 0527 | | 1024 | | 1087 |
+------+-- --+------+ +------+-- --+------+ +------+-- --+------+
| | | | | |
: SPRITES (FG) : : SPRITES (FG) : : SPRITES (FG) :
| | | | | |
+ --+-- --+------+ + --+-- --+------+ + --+-- --+------+
| | 0511 | | | 1023 | | | 2047 |
+------+------+------+------+ +------+------+------+------+ +------+------+------+------+
## Using Low BPP graphics (0.80)
*Todo*
TIC-80 tiny computer https://tic80.com | Twitter | Telegram | Terms
Built-in Editors
Console
Platform
RAM & VRAM | Display | Palette | Bits per Pixel (BPP) |
.tic
Format | Supported Languages
Other
Tutorials | Code Snippets | Libraries | External Tools | FFT
API
- BDR (0.90)
- BOOT (1.0)
- MENU
- OVR (deprecated)
- SCN (deprecated)
- TIC
- btn & btnp
- circ & circb
- clip
- cls
- elli & ellib (0.90)
- exit
- fget & fset (0.80)
- font
- key & keyp
- line
- map
- memcpy & memset
- mget & mset
- mouse
- music
- peek, peek4
- peek1, peek2 (1.0)
- pix
- pmem
- poke, poke4
- poke1, poke2 (1.0)
- rect & rectb
- reset
- sfx
- spr
- sync
- ttri (1.0)
- time
- trace
- tri & trib (0.90)
- tstamp (0.80)
- vbank (1.0)