Guest User

cube palete shift sgdk demo

a guest
Aug 23rd, 2025
143
0
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.61 KB | None | 0 0
  1.  
  2. /////////////////////////////// RESOURCES.RES ///////////////////////////////
  3.  
  4. PALETTE pal0 "2.png"
  5. PALETTE pal1 "1.png"
  6. IMAGE ip1 "1.png" NONE ALL
  7.  
  8.  
  9. /////////////////////////////// LEVELSTRUCTS.H ///////////////////////////////
  10.  
  11. #ifndef _H_LEVEL_STRUCTS
  12. #define _H_LEVEL_STRUCTS
  13. #include <genesis.h>
  14. typedef struct {
  15. int property;
  16. } objproperties;
  17.  
  18. typedef struct {
  19. s16 x;
  20. s16 y;
  21. u16 type;
  22. objproperties * props;
  23. bool triggered;
  24. const Image * img;
  25. u16 tile_index;
  26. int tilesize;
  27. int id;
  28. } SpawnEvent;
  29. #endif
  30.  
  31.  
  32.  
  33. /////////////////////////////// NEWLEVEL.H ///////////////////////////////
  34. // Script autogenerated code. Doublecheck it
  35. #ifndef _H_LEVEL_NEWLEVEL
  36. #define _H_LEVEL_NEWLEVEL
  37.  
  38. #include <genesis.h>
  39. #include "resources.h"
  40.  
  41. #include "levelstructs.h"
  42.  
  43. #define NEWLEVEL_NUMSPR 17
  44.  
  45. extern objproperties element1_props;
  46.  
  47. extern SpawnEvent spawn_events[NEWLEVEL_NUMSPR];
  48.  
  49. void init_level_test(void);
  50.  
  51. #endif
  52.  
  53.  
  54. /////////////////////////////// NEWLEVEL.C ///////////////////////////////
  55.  
  56. // Script autogenerated code. Doublecheck it
  57. #include <genesis.h>
  58. #include "resources.h"
  59. #include "newlevel.h"
  60.  
  61. objproperties newlevel_element1_props = { 0 };
  62.  
  63. SpawnEvent spawn_events[NEWLEVEL_NUMSPR];
  64.  
  65. void init_level_test(void)
  66. {
  67. const Image * newlevel_i1 = &ip1;
  68.  
  69. spawn_events[0] = (SpawnEvent){ 488, 12, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 0 };
  70. spawn_events[1] = (SpawnEvent){ 41, 13, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 1 };
  71. spawn_events[2] = (SpawnEvent){ 65, 13, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 2 };
  72. spawn_events[3] = (SpawnEvent){ 85, 13, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 3 };
  73. spawn_events[4] = (SpawnEvent){ 110, 13, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 4 };
  74. spawn_events[5] = (SpawnEvent){ 130, 13, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 5 };
  75. spawn_events[6] = (SpawnEvent){ 148, 13, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 6 };
  76. spawn_events[7] = (SpawnEvent){ 171, 13, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 7 };
  77. spawn_events[8] = (SpawnEvent){ 193, 13, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 8 };
  78. spawn_events[9] = (SpawnEvent){ 362, 13, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 9 };
  79. spawn_events[10] = (SpawnEvent){ 236, 14, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 10 };
  80. spawn_events[11] = (SpawnEvent){ 263, 14, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 11 };
  81. spawn_events[12] = (SpawnEvent){ 295, 14, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 12 };
  82. spawn_events[13] = (SpawnEvent){ 315, 14, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 13 };
  83. spawn_events[14] = (SpawnEvent){ 343, 14, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 14 };
  84. spawn_events[15] = (SpawnEvent){ 411, 14, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 15 };
  85. spawn_events[16] = (SpawnEvent){ 436, 14, 1, &newlevel_element1_props, FALSE, newlevel_i1, 0, newlevel_i1->tileset->numTile, 16 };
  86. };
  87.  
  88.  
  89. /////////////////////////////// MAIN.C ///////////////////////////////
  90. #include <genesis.h>
  91. #include "resources.h"
  92. #include "newlevel.h"
  93.  
  94. #define LEVEL_SCROLL_SPEED 1
  95. #define LEVEL_WIDTH 2047
  96. #define SCREEN_W 332
  97. #define EXIT_SCREEN_MARGIN 129
  98. #define MAP_W 128
  99. #define MAP_H 64
  100. u16 last_tile_index = TILE_USER_INDEX;
  101.  
  102. TileSet * tilesetloaded[NEWLEVEL_NUMSPR]; // max is numspr in case that all are different
  103. u16 tilesetloadedindex[NEWLEVEL_NUMSPR]; // max is numspr in case that all are different
  104.  
  105. s16 logicToPlaneX(s16 logicX, s16 planeWidthTiles);
  106. s16 logicToSequence(s16 logicX, s16 planeWidthTiles);
  107. void spawn_entity(s16 x, s16 y, u16 type, s16 property, Image * img);
  108. void setObjectVisible(SpawnEvent * evt);
  109. u16 spawn_event_count = 0;
  110. s16 scroll_x;
  111. u16 pal[16];
  112. int cont = 1;
  113. int grad[12];
  114. int bl =0;
  115. int size=0;
  116.  
  117. ///////////////////////////////////////////////////////////////////////////////
  118. u16 randomColor() {
  119. setRandomSeed(random());
  120. u16 r = 1 & 0x0F; // 4 bits RED
  121. u16 g =0& 0x0F; // 4 bits GREEN
  122. u16 b = 0 & 0x0F; // 4 bits BLUE
  123. return (b << 8) | (g << 4) | r;
  124. }
  125.  
  126. ///////////////////////////////////////////////////////////////////////////////
  127. void initgradient() {
  128.  
  129. for(int i=1; i<12; i++) {
  130. u16 r = 0 & 0x0F; // 4 bits rojo
  131. u16 g = 0 & 0x0F; // 4 bits verde
  132. u16 b = 0 & 0x0F; // 4 bits azul
  133. grad[i] = (b << 8) | (g << 4) | r;
  134.  
  135. }
  136. }
  137.  
  138. ///////////////////////////////////////////////////////////////////////////////
  139. void shadow(int cont) {
  140.  
  141. // Yes, grad[i] and initgradient is useless but remains here if anyone wants to play
  142. for(int i=0; i<12; i++) {
  143. PAL_setColor(i+16, grad[i]);
  144. }
  145. u16 color = RGB24_TO_VDPCOLOR(0xFF0000);
  146. PAL_setColor(16, color);
  147. color = RGB24_TO_VDPCOLOR(0x550000);;
  148. PAL_setColor(cont+16, color);
  149. color = RGB24_TO_VDPCOLOR(0x330000);;
  150. PAL_setColor(cont+17, color);
  151. color = RGB24_TO_VDPCOLOR(0x220000);;
  152. PAL_setColor(cont+18, color);
  153. color = RGB24_TO_VDPCOLOR(0x110000);;
  154. PAL_setColor(cont+19, color);
  155. }
  156.  
  157. ///////////////////////////////////////////////////////////////////////////////
  158. HINTERRUPT_CALLBACK * HIntHandler() {
  159. // whatever....
  160. return NULL;
  161. }
  162.  
  163. ///////////////////////////////////////////////////////////////////////////////
  164. void VIntHandler() {
  165.  
  166. VDP_setHInterrupt(FALSE);
  167.  
  168. // whateverforever
  169.  
  170. VDP_setHInterrupt(TRUE);
  171. }
  172.  
  173. ///////////////////////////////////////////////////////////////////////////////
  174. void init_sysints() {
  175. SYS_disableInts();
  176. {
  177. SYS_setVIntCallback(VIntHandler);
  178. SYS_setHIntCallback(HIntHandler);
  179. VDP_setHIntCounter(2);
  180. }
  181. SYS_enableInts();
  182. }
  183.  
  184.  
  185. ///////////////////////////////////////////////////////////////////////////////
  186. void check_spawn_events(s16 scroll_x, SpawnEvent * spawn_events) {
  187. spawn_event_count = sizeof(spawn_events) / sizeof(SpawnEvent);
  188. for (int i = 0; i < NEWLEVEL_NUMSPR; i++)
  189. {
  190. SpawnEvent* evt = (SpawnEvent*)&spawn_events[i];
  191.  
  192. s16 rel_x = (evt->x*8) - scroll_x;
  193. if (!evt->triggered && rel_x >= -EXIT_SCREEN_MARGIN && rel_x <= SCREEN_W) {
  194. evt->triggered = TRUE;
  195. setObjectVisible(evt);
  196.  
  197. }else if (evt->triggered && rel_x < -EXIT_SCREEN_MARGIN) {
  198. evt->triggered = FALSE;
  199. setObjectVisible(evt);
  200. }
  201. }
  202. }
  203.  
  204. ///////////////////////////////////////////////////////////////////////////////
  205. s16 logicToPlaneX(s16 logicX, s16 planeWidthTiles) {
  206. return logicX % 129;
  207. }
  208.  
  209. ///////////////////////////////////////////////////////////////////////////////
  210. s16 logicToSequence(s16 logicX, s16 planeWidthTiles) {
  211. return logicX / planeWidthTiles;
  212. }
  213.  
  214.  
  215.  
  216. ///////////////////////////////////////////////////////////////////////////////
  217. void setObjectVisible(SpawnEvent * evt) {
  218.  
  219. TileSet * ts = evt->img->tileset;
  220. TileMap * tm = evt->img->tilemap;
  221. int w = tm->w;
  222. int h = tm->h;
  223.  
  224. s16 plane_x = logicToPlaneX(evt->x, MAP_W); // en tiles
  225. s16 plane_y = evt->y;
  226.  
  227. if (evt->triggered ){
  228. bool loadtile=FALSE;
  229.  
  230. for (int i=0;i<NEWLEVEL_NUMSPR;i++){
  231. if (tilesetloaded[i] == ts) {
  232. loadtile=TRUE;
  233. evt->tile_index = (u16)tilesetloadedindex[i];
  234. break;
  235. }
  236. }
  237. if (!loadtile){
  238. if (size<NEWLEVEL_NUMSPR){
  239. tilesetloaded[size] = evt->img->tileset;
  240. evt->tile_index = last_tile_index;
  241. last_tile_index += evt->tilesize;
  242. u16 ind = evt->tile_index;
  243. tilesetloadedindex[size] = ind;
  244. size++;
  245. }
  246. VDP_loadTileSet(ts, evt->tile_index, DMA_QUEUE);
  247. }
  248. if (evt->type != 1)
  249. VDP_setTileMapEx(BG_A,tm, TILE_ATTR_FULL(PAL0, FALSE,FALSE,FALSE,evt->tile_index), plane_x, plane_y-5, 0, 0, w, h, DMA_QUEUE);
  250. else
  251. VDP_setTileMapEx(BG_A,tm, TILE_ATTR_FULL(PAL1, FALSE,FALSE,FALSE,evt->tile_index), plane_x, plane_y-5, 0, 0, w, h, DMA_QUEUE);
  252. VDP_waitDMACompletion();
  253. } else {
  254.  
  255. if (plane_x < 1)
  256. plane_x = 0;
  257. if (plane_y < 1)
  258. plane_y = 0;
  259. if (plane_x > MAP_W)
  260. plane_x = MAP_W;
  261. if (plane_y >MAP_H)
  262. plane_y = MAP_H;
  263.  
  264. VDP_clearTileMapRect(BG_A, plane_x, plane_y-5, tm->w+5, tm->h+1);
  265.  
  266. }
  267. }
  268.  
  269. ///////////////////////////////////////////////////////////////////////////////
  270. void initTileMem(){
  271. for (int i = 0; i<NEWLEVEL_NUMSPR; i++){
  272. tilesetloaded[i] = NULL;
  273. tilesetloadedindex[i] = NULL; // max is numspr in case that all are different
  274. }
  275. }
  276.  
  277. ///////////////////////////////////////////////////////////////////////////////
  278. int main() {
  279. VDP_init();
  280. VDP_setPlaneSize(MAP_W, 64,TRUE);
  281. VDP_setScreenWidth320();
  282.  
  283. VDP_setScrollingMode(HSCROLL_PLANE, VSCROLL_PLANE);
  284.  
  285. //VDP_drawText("Level Example", 10, 2);
  286. PAL_setPalette(PAL0, pal0.data , DMA);
  287. PAL_setPalette(PAL1, pal1.data , DMA);
  288.  
  289. initgradient();
  290. init_level_test();
  291. initTileMem();
  292. init_sysints();
  293.  
  294. spawn_event_count = sizeof(spawn_events) / sizeof(SpawnEvent);
  295.  
  296. scroll_x = 0;
  297.  
  298. spawn_events[0].tile_index = last_tile_index;
  299.  
  300. for (int i = 1; i<NEWLEVEL_NUMSPR; i++){
  301. spawn_events[i].tile_index = spawn_events[i-1].tile_index + spawn_events[i-1].img->tileset->numTile;
  302. //KLog_S1("ti: ", spawn_events[i].tile_index);
  303. }
  304. int bl = 0;
  305. while(1)
  306. {
  307. if (bl %2== 0){
  308. cont = (cont + 1) % 12;
  309. if (cont == 0)cont=1;
  310. shadow(cont);
  311. }
  312. bl = (bl + 1)%10;
  313. scroll_x = (scroll_x + LEVEL_SCROLL_SPEED) % LEVEL_WIDTH;
  314. check_spawn_events(scroll_x, (SpawnEvent*)&spawn_events);
  315. VDP_setHorizontalScroll(BG_A,-(scroll_x));
  316. KLog_S2("CPU: ", SYS_getCPULoad(), " FPS: ", SYS_getFPS());
  317. SYS_doVBlankProcess();
  318. }
  319.  
  320. return 0;
  321. }
  322.  
Advertisement
Comments
  • TheNomCognom
    1 year
    # text 4.28 KB | 0 0
    1. 2.png is useless... put anything or clean the code
    2.  
    3. 1.png
    4.  
    5. data:image/png;base64,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
  • TheNomCognom
    1 year
    # text 0.19 KB | 0 0
    1. The code is mine despite being labeled Guest as the uploader. Nothing changes anyway. Aging is becoming worse on keeping agile on multiple user accounts, designs, devices... or just being idiot.
Add Comment
Please, Sign In to add comment