123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- unit advanced;
- interface
- uses
- ctypes, nds9, scrolling, RotBackgrounds, TextBackgrounds, Multilayer;
- procedure advMosaic();
- procedure advRotating();
- procedure advScaling();
- procedure advExtendedPalette();
- procedure advMultipleLayers();
- implementation
- procedure advMosaic();
- var
- bg: cint;
- keys: integer;
- mosaic_x: integer;
- mosaic_y: integer;
- begin
- videoSetMode(MODE_0_2D);
- vramSetBankA(VRAM_A_MAIN_BG);
-
- bg := bgInit(0, BgType_Text8bpp, BgSize_T_256x256, 0,1);
-
- dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
- dmaCopy(@Layer256x256Map, bgGetMapPtr(bg), Layer256x256MapLen);
- dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
-
- bgMosaicEnable(bg);
-
-
- while ((keys and KEY_B) = 0) do
- begin
- scanKeys();
- keys := keysDown();
-
- if (keys and KEY_UP) <> 0 then mosaic_y := mosaic_y - 1;
- if (keys and KEY_DOWN) <> 0 then mosaic_y := mosaic_y + 1;
-
- if (keys and KEY_LEFT) <> 0 then mosaic_x := mosaic_x - 1;
- if (keys and KEY_RIGHT) <> 0 then mosaic_x := mosaic_x + 1;
- if (mosaic_x > 15) then mosaic_x := 15;
- if (mosaic_x < 0) then mosaic_x := 0;
-
- if (mosaic_y > 15) then mosaic_y := 15;
- if (mosaic_y < 0) then mosaic_y := 0;
-
- swiWaitForVBlank();
-
- bgSetMosaic(mosaic_x, mosaic_y);
-
- consoleClear();
- iprintf('Press B to exit'#10);
- iprintf('DX: %d DY: %d', mosaic_x, mosaic_y);
-
- end;
- end;
- procedure advRotating();
- var
- bg: cint;
- keys: integer;
- angle: integer;
- mosaic_x: integer;
- mosaic_y: integer;
- center_x: integer;
- center_y: integer;
- begin
- videoSetMode(MODE_5_2D);
- vramSetBankA(VRAM_A_MAIN_BG);
-
- bg := bgInit(3, BgType_ExRotation, BgSize_ER_256x256, 0,1);
-
- dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
- dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
- dmaCopy(@Layer256x256Map, bgGetMapPtr(bg), Layer256x256MapLen);
-
- bgMosaicEnable(bg);
-
- while ((keys and KEY_B) = 0) do
- begin
- scanKeys();
- keys := keysHeld();
-
- if (keys and KEY_UP) <> 0 then center_y := center_y - 1;
- if (keys and KEY_DOWN) <> 0 then center_y := center_y + 1;
-
- if (keys and KEY_LEFT) <> 0 then center_x := center_x - 1;
- if (keys and KEY_RIGHT) <> 0 then center_x := center_x + 1;
- if (keys and KEY_L) <> 0 then angle := angle - 1;
- if (keys and KEY_R) <> 0 then angle := angle + 1;
- if (center_x > 256) then center_x := 256;
- if (center_x < 0) then center_x := 0;
-
- if (center_y > 192) then center_y := 192;
- if (center_y < 0) then center_y := 0;
-
- swiWaitForVBlank();
-
- bgSetRotate(bg, angle);
- bgSetScroll(bg, center_x, center_y);
- bgSetCenter(bg, center_x, center_y);
- bgUpdate();
- consoleClear();
- iprintf('Press B to exit.'#10);
- iprintf('Angle: %d '#10'center X: %d center Y: %d', angle, center_x, center_y);
-
- end;
- end;
- procedure advScaling();
- var
- bg: cint;
- keys, scale_x, scale_y: integer;
-
- begin
- videoSetMode(MODE_5_2D);
- vramSetBankA(VRAM_A_MAIN_BG);
-
- bg := bgInit(3, BgType_ExRotation, BgSize_ER_256x256, 0,1);
-
- dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
- dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
- dmaCopy(@Layer256x256Map, bgGetMapPtr(bg), Layer256x256MapLen);
-
- bgMosaicEnable(bg);
-
- scale_x := 1 shl 8;
- scale_y := 1 shl 8;
-
- while ((keys and KEY_B) = 0) do
- begin
- scanKeys();
- keys := keysHeld();
-
- if (keys and KEY_UP) <> 0 then scale_y := scale_y - 1;
- if (keys and KEY_DOWN) <> 0 then scale_y := scale_y + 1;
-
- if (keys and KEY_LEFT) <> 0 then scale_x := scale_x + 1;
- if (keys and KEY_RIGHT) <> 0 then scale_x := scale_x - 1;
- swiWaitForVBlank();
-
- bgSetScale(bg, scale_x , scale_y );
-
- bgUpdate();
- consoleClear();
- iprintf('Press B to exit.'#10);
- iprintf('scale X: %d scale Y: %d', scale_x, scale_y);
-
- end;
- end;
- procedure advExtendedPalette();
- begin
- end;
- procedure advMultipleLayers();
- var
- bg1, bg2, bg3: cint;
- keys: integer;
- bg1_hidden, bg2_hidden, bg3_hidden: boolean;
- begin
- videoSetMode(MODE_5_2D);
- vramSetBankA(VRAM_A_MAIN_BG);
-
- //initialize the backgrounds
- bg1 := bgInit(0, BgType_Text8bpp, BgSize_ER_256x256, 0,1);
- bg2 := bgInit(1, BgType_Text8bpp, BgSize_ER_256x256, 1,1);
- bg3 := bgInit(2, BgType_ExRotation, BgSize_ER_256x256, 2,1);
-
- //make sure the floor is on the bottom (by default hardware layer 0 will be rendered last)
- bgSetPriority(bg1, 3);
- bgSetPriority(bg2, 2);
- bgSetPriority(bg3, 1);
-
- //they all share tiles and a palette
- dmaCopy(@MultilayerTiles, bgGetGfxPtr(bg1), sizeof(MultilayerTiles));
- dmaCopy(@MultilayerPal, BG_PALETTE, sizeof(MultilayerPal));
- //all we need to do is copy in the maps
- dmaCopy(@Layer_1Map, bgGetMapPtr(bg1), Layer_1MapLen);
- dmaCopy(@Layer_2Map, bgGetMapPtr(bg2), Layer_2MapLen);
- dmaCopy(@Layer_3Map, bgGetMapPtr(bg3), Layer_3MapLen);
-
- keys := 0;
- bg1_hidden := false;
- bg2_hidden := false;
- bg3_hidden := false;
- while ((keys and KEY_B) = 0) do
- begin
- scanKeys();
-
- keys := keysDown();
-
- if (keys and KEY_UP) <> 0 then bg1_hidden := not bg1_hidden;
- if (keys and KEY_DOWN) <> 0 then bg2_hidden := not bg2_hidden;
- if (keys and KEY_LEFT) <> 0 then bg3_hidden := not bg3_hidden;
-
- swiWaitForVBlank();
-
- if bg1_hidden then bgHide(bg1) else bgShow(bg1);
- if bg2_hidden then bgHide(bg2) else bgShow(bg2);
- if bg3_hidden then bgHide(bg3) else bgShow(bg3);
-
- consoleClear();
- iprintf('Press UP DOWN LEFT to toggle the layers'#10#10);
- if bg1_hidden then
- iprintf('Floor (UP): %s'#10, 'hidden')
- else
- iprintf('Floor (UP): %s'#10, 'displayed');
-
- if bg2_hidden then
- iprintf('Walls (DOWN): %s'#10, 'hidden')
- else
- iprintf('Walls (DOWN): %s'#10, 'displayed');
-
- if bg3_hidden then
- iprintf('Decorations (LEFT): %s'#10, 'hidden')
- else
- iprintf('Decorations (LEFT): %s'#10, 'displayed');
- end;
- end;
- end.
|