summaryrefslogtreecommitdiff
path: root/fpcsrc/packages/libndsfpc/examples/graphics/Sprites/sprite_extended_palettes/SpriteExtendedPalettes.pp
blob: 0c3221136a7cb8e1e71b296b2f34907101fe210f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
program SpriteExtendedPalettes;

{$mode objfpc}

uses
  ctypes, nds9;

var
	i: integer;
	touch: touchPosition;
	gfx1, gfx2: pcuint16;

begin
	videoSetMode(MODE_0_2D);

	vramSetBankA(VRAM_A_MAIN_SPRITE);

	oamInit(oamMain, SpriteMapping_1D_32, true);

	gfx1 := oamAllocateGfx(oamMain, SpriteSize_16x16, SpriteColorFormat_256Color);
	gfx2 := oamAllocateGfx(oamMain, SpriteSize_16x16, SpriteColorFormat_256Color);

	//------------------------------------------------------------------
	// notice both sprites are filled with color 1
	//------------------------------------------------------------------
	for i := 0 to (16 * 16 div 2) - 1 do
	begin
		gfx1[i] := 1 or (1 shl 8);
		gfx2[i] := 1 or (1 shl 8);
	end;

	//------------------------------------------------------------------
	// unlock vram (cannot write to vram while mapped as palette memory)
	//------------------------------------------------------------------
	vramSetBankF(VRAM_F_LCD);

	VRAM_F_EXT_PALETTE^[0][1] := RGB15(31,0,0);
	VRAM_F_EXT_PALETTE^[1][1] := RGB15(0,31,0);

	// set vram to ex palette
	vramSetBankF(VRAM_F_SPRITE_EXT_PALETTE);

	while true do
	begin
		scanKeys();

		if (keysHeld() and KEY_TOUCH) <> 0 then
			touchRead(touch);

		oamSet(oamMain, //main graphics engine context
			0,           //oam index (0 to 127)
			touch.px, touch.py,   //x and y pixle location of the sprite
			0,                    //priority, lower renders last (on top)
			0,					  //this is the palette index if multiple palettes or the alpha value if bmp sprite
			SpriteSize_16x16,
			SpriteColorFormat_256Color,
			gfx1,                  //pointer to the loaded graphics
			-1,                  //sprite rotation data
			false,               //double the size when rotating?
			false,			//hide the sprite?
			false, false, //vflip, hflip
			false	//apply mosaic
			);


		oamSet(oamMain,
			1,
			SCREEN_WIDTH - touch.px,
			SCREEN_HEIGHT - touch.py,
			0,
			1,  //use second palette
			SpriteSize_16x16,
			SpriteColorFormat_256Color,
			gfx2,
			-1,
			false,
			false,
			false, false,
			false
			);

		swiWaitForVBlank();


		oamUpdate(oamMain);
  end;
end.