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
|
program Simple;
{$mode objfpc}
uses
ctypes, nds9;
var
i: integer;
touch: touchPosition;
gfx, gfxSub: pcuint16;
begin
videoSetMode(MODE_0_2D);
videoSetModeSub(MODE_0_2D);
vramSetBankA(VRAM_A_MAIN_SPRITE);
vramSetBankD(VRAM_D_SUB_SPRITE);
oamInit(oamMain, SpriteMapping_1D_32, false);
oamInit(oamSub, SpriteMapping_1D_32, false);
gfx := oamAllocateGfx(oamMain, SpriteSize_16x16, SpriteColorFormat_256Color);
gfxSub := oamAllocateGfx(oamSub, SpriteSize_16x16, SpriteColorFormat_256Color);
for i := 0 to (16 * 16 div 2) - 1 do
begin
gfx[i] := 1 or (1 shl 8);
gfxSub[i] := 1 or (1 shl 8);
end;
SPRITE_PALETTE[1] := RGB15(31,0,0);
SPRITE_PALETTE_SUB[1] := RGB15(0,31,0);
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,
gfx, //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(oamSub,
0,
touch.px,
touch.py,
0,
0,
SpriteSize_16x16,
SpriteColorFormat_256Color,
gfxSub,
-1,
false,
false,
false, false,
false
);
swiWaitForVBlank();
oamUpdate(oamMain);
oamUpdate(oamSub);
end;
end.
|