Skip to content

Advanced Drawing Techniques

Damien de Lemeny edited this page May 27, 2020 · 13 revisions

Remapping the palette

Usage

poke4(2*0x03FF0 + color_index, mapped_color_index)
memset(0x03FF0, mapped_palette, 8)

Description

+-------+-------------------+-------+
| 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.

Low BPP graphics (0.80)

Usage

poke4(2*0x03FFC, blit_segment)

Description

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.

Total indexing VS local indexing

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 with use_map=true and font 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.

Simplified spec for total indexing

val | bin  | target memory segment
-------------------------- 
2  | 0010 | 4bpp  // default value
4  | 0100 | 2bpp
8  | 1000 | 1bpp
Index Stretching
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*
Clone this wiki locally