Advertisement
Guest User

Gameboy code

a guest
Oct 24th, 2017
464
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.91 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <gb/gb.h>
  3. #include <gb/drawing.h>
  4. #include "tiles.c"
  5. #include "sprites.c"
  6. #include "map.c"
  7. #define door 0x01
  8. #define empty 0x00
  9. unsigned char map[] =
  10. {
  11.   0x0A,0x10,0x10,0x10,0x0E,0x10,0x10,0x10,0x10,0x10,
  12.   0x0E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x09,
  13.   0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
  14.   0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,
  15.   0x11,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,
  16.   0x11,0x00,0x00,0x04,0x00,0x0A,0x10,0x06,0x00,0x11,
  17.   0x11,0x00,0x00,0x00,0x0A,0x10,0x0B,0x00,0x11,0x00,
  18.   0x07,0x10,0x10,0x08,0x00,0x11,0x00,0x00,0x00,0x11,
  19.   0x0C,0x10,0x10,0x10,0x0B,0x00,0x11,0x00,0x11,0x00,
  20.   0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x0A,0x10,0x0B,
  21.   0x11,0x00,0x00,0x00,0x03,0x00,0x07,0x10,0x08,0x00,
  22.   0x0A,0x10,0x10,0x06,0x00,0x11,0x00,0x11,0x00,0x11,
  23.   0x11,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  24.   0x11,0x00,0x00,0x00,0x00,0x11,0x00,0x03,0x00,0x11,
  25.   0x11,0x00,0x07,0x10,0x09,0x00,0x0A,0x10,0x10,0x10,
  26.   0x08,0x00,0x05,0x10,0x0E,0x08,0x00,0x00,0x00,0x11,
  27.   0x11,0x00,0x00,0x00,0x07,0x10,0x08,0x00,0x00,0x00,
  28.   0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x04,0x00,0x11,
  29.   0x0C,0x10,0x09,0x00,0x00,0x00,0x00,0x00,0x0A,0x10,
  30.   0x0E,0x10,0x10,0x10,0x08,0x00,0x05,0x0B,0x00,0x11,
  31.   0x11,0x00,0x11,0x00,0x0A,0x10,0x10,0x10,0x08,0x00,
  32.   0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x11,
  33.   0x11,0x00,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00,
  34.   0x07,0x10,0x10,0x06,0x00,0x05,0x10,0x0D,0x10,0x0B,
  35.   0x11,0x00,0x07,0x10,0x08,0x00,0x05,0x10,0x09,0x00,
  36.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,
  37.   0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,
  38.   0x0A,0x10,0x10,0x10,0x10,0x10,0x10,0x09,0x00,0x11,
  39.   0x11,0x00,0x0A,0x10,0x10,0x10,0x09,0x00,0x11,0x00,
  40.   0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x11,
  41.   0x11,0x00,0x03,0x00,0x00,0x00,0x07,0x10,0x0D,0x10,
  42.   0x08,0x00,0x0A,0x10,0x10,0x06,0x00,0x11,0x00,0x11,
  43.   0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
  44.   0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x11,0x00,0x11,
  45.   0x07,0x10,0x10,0x10,0x0D,0x10,0x10,0x10,0x10,0x10,
  46.   0x10,0x10,0x0D,0x10,0x10,0x10,0x10,0x0D,0x10,0x08
  47. };
  48. unsigned char sprites[] =
  49. {
  50.   0x3C,0x3C,0x7E,0x42,0xFF,0xA5,0xFF,0x81,
  51.   0xFF,0xA5,0xFF,0x99,0x7E,0x42,0x3C,0x3C,
  52.   0x18,0x18,0x2C,0x24,0x3C,0x24,0x18,0x18,
  53.   0x08,0x08,0x18,0x18,0x08,0x08,0x18,0x18,
  54.   0x3C,0x3C,0x42,0x42,0x81,0x81,0x81,0x81,
  55.   0x81,0x81,0x81,0x81,0x81,0x81,0xFF,0xFF,
  56.   0x3C,0x3C,0x56,0x6A,0xD5,0xAB,0xD5,0xAB,
  57.   0xD1,0xAB,0xD5,0xAB,0xD5,0xAB,0xFF,0xFF
  58. };
  59. unsigned char tiles[] =
  60. {
  61.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  62.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  63.   0x3C,0x3C,0x56,0x6A,0xD5,0xAB,0xD5,0xAB,
  64.   0xD1,0xAB,0xD5,0xAB,0xD5,0xAB,0xFF,0xFF,
  65.   0x7E,0x7E,0x83,0x81,0xBD,0x83,0xBD,0x83,
  66.   0xBD,0x83,0xBD,0x83,0xC1,0xBF,0x7E,0x7E,
  67.   0xBD,0x83,0xBD,0x83,0xBD,0x83,0xBD,0x83,
  68.   0xBD,0x83,0xBD,0x83,0xC1,0xBF,0x7E,0x7E,
  69.   0x7E,0x7E,0x83,0x81,0xBD,0x83,0xBD,0x83,
  70.   0xBD,0x83,0xBD,0x83,0xBD,0x83,0xBD,0x83,
  71.   0x7F,0x7F,0x80,0x80,0xBF,0x80,0xBF,0x80,
  72.   0xBF,0x80,0xBF,0x80,0xC0,0xBF,0x7F,0x7F,
  73.   0xFE,0xFE,0x03,0x01,0xFD,0x03,0xFD,0x03,
  74.   0xFD,0x03,0xFD,0x03,0x01,0xFF,0xFE,0xFE,
  75.   0xBD,0x83,0xBE,0x80,0xBF,0x80,0xBF,0x80,
  76.   0xBF,0x80,0xBF,0x80,0xC0,0xBF,0x7F,0x7F,
  77.   0xBD,0x83,0x7D,0x03,0xFD,0x03,0xFD,0x03,
  78.   0xFD,0x03,0xFD,0x03,0x03,0xFD,0xFE,0xFE,
  79.   0xFE,0xFE,0x03,0x01,0xFD,0x03,0xFD,0x03,
  80.   0xFD,0x03,0xFD,0x03,0x7D,0x83,0xBD,0x83,
  81.   0x7F,0x7F,0xC0,0x80,0xBF,0x80,0xBF,0x80,
  82.   0xBF,0x80,0xBF,0x80,0xBE,0x81,0xBD,0x83,
  83.   0xBD,0x83,0x7D,0x03,0xFD,0x03,0xFD,0x03,
  84.   0xFD,0x03,0xFD,0x03,0x7D,0x83,0xBD,0x83,
  85.   0xBD,0x83,0xBE,0x80,0xBF,0x80,0xBF,0x80,
  86.   0xBF,0x80,0xBF,0x80,0xBE,0x81,0xBD,0x83,
  87.   0xBD,0x83,0x7E,0x00,0xFF,0x00,0xFF,0x00,
  88.   0xFF,0x00,0xFF,0x00,0x00,0xFF,0xFF,0xFF,
  89.   0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,
  90.   0xFF,0x00,0xFF,0x00,0x7E,0x81,0xBD,0x83,
  91.   0xBD,0x83,0x7E,0x00,0xFF,0x00,0xFF,0x00,
  92.   0xFF,0x00,0xFF,0x00,0x7E,0x81,0xBD,0x83,
  93.   0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,
  94.   0xFF,0x00,0xFF,0x00,0x00,0xFF,0xFF,0xFF,
  95.   0xBD,0x83,0xBD,0x83,0xBD,0x83,0xBD,0x83,
  96.   0xBD,0x83,0xBD,0x83,0xBD,0x83,0xBD,0x83,
  97.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  98.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  99. };
  100. UINT16 gridxTL, gridyTL, gridxBR, gridyBR, gridxBL, gridyBL, gridxTR, gridyTR, x, y, x2, y2, scrx, scry = 0;
  101. int gridPosTL(int addx, int addy){
  102.     gridxTL = (x/8) + addx;
  103.     gridyTL = (y/8) + addy;
  104.     return map[((20*gridyTL) + gridxTL)];
  105. }
  106. int gridPosTR(int addx, int addy){
  107.     gridxTR = ((x2)/8) - addx;
  108.     gridyTR = ((y)/8) + addy;
  109.     return map[((20*gridyTR) + gridxTR)];  
  110. }
  111. int gridPosBL(int addx, int addy){
  112.     gridxBL = ((x)/8) + addx;
  113.     gridyBL = ((y2)/8) - addy;
  114.     return map[((20*gridyBL) + gridxBL)];
  115.    
  116. }
  117. int gridPosBR(int addx, int addy){
  118.     gridxBR = ((x2)/8) - addx;
  119.     gridyBR = ((y2)/8) - addy;
  120.     return map[((20*gridyBR) + gridxBR)];
  121. }
  122. int keyFlag1, keyFlag2, keyFlag3;
  123. void main(){
  124.     x = 16; //starting position of the player
  125.     y = 16;
  126.     move_sprite(1,152,57);  //move key
  127.     DISPLAY_ON;
  128.     set_bkg_data(0, 18, tiles);             //load 3 tiles into background memory
  129.     set_bkg_tiles(0, 0, 20, 18, map);   //load map on display
  130.     set_sprite_data(0, 0, sprites);         //load sprites into memory
  131.     set_sprite_tile(0, 0);              //set tile 0 as sprite 0
  132.     set_sprite_tile(1, 1);              //set tile 1 as sprite 1...
  133.     set_sprite_tile(2, 3);
  134.     set_sprite_tile(4, 1);
  135.     set_sprite_tile(5, 1);
  136.     set_sprite_tile(3, 2);
  137.     move_sprite(2,113,144); //move door
  138.     move_sprite(4,152,143); //move key
  139.     move_sprite(5,32,103);  //move key
  140.     SHOW_BKG;
  141.     SHOW_SPRITES;
  142.     keyFlag1, keyFlag2, keyFlag3 = 0;
  143.     while(1){
  144.         scrx = x + 8;   //fixes discrepancy between screen coordinates and sprite coordinates
  145.         scry = y + 16;
  146.         x2 = x + 7;     //coordinates of sprite's bottom right pixel for collision testing
  147.         y2 = y + 7;
  148.         move_sprite(0,scrx,scry);   //move sprite to screen cooridnates
  149.         if(joypad() & J_UP && gridPosBR(0,1)  == empty && gridPosBL(0,1) == empty){ //move up if above tile is not a wall
  150.             y --;
  151.         }
  152.         if(joypad() & J_DOWN && gridPosTL(0,1)  == empty && gridPosTR(0,1) == empty){   //move down if below tile is not a wall
  153.             y ++;
  154.         }
  155.         if(joypad() & J_RIGHT && gridPosTL(1,0)  == empty && gridPosBL(1,0) == empty){  //move right if right tile is not a wall
  156.             x ++;
  157.         }
  158.         if(joypad() & J_LEFT && gridPosBR(1,0)  == empty && gridPosTR(1,0) == empty){   //move left if left tile is not a wall
  159.             x --;
  160.         }
  161.         if(scrx == 152 && scry == 64){  //if sprite overlaps key...
  162.             keyFlag1 = 1;
  163.             move_sprite(1,0,0);
  164.         }
  165.         if(scrx == 152 && scry == 136){ //if sprite overlaps key...
  166.             keyFlag2 = 1;
  167.             move_sprite(4,0,0);
  168.         }
  169.         if(scrx == 32 && scry == 96){   //if sprite overlaps key...
  170.             keyFlag3 = 1;
  171.             move_sprite(5,0,0);
  172.         }
  173.         if((keyFlag1 == 1)&&(keyFlag2 == 1)&&(keyFlag3 == 1)){
  174.             move_sprite(2,0,0);
  175.             move_sprite(3,113,144);
  176.         }
  177.         if(((keyFlag1 == 1)&&(keyFlag2 == 1)&&(keyFlag3 == 1)) && (scrx == 119 && scry == 144)){    //if sprite overlaps door...
  178.             gotogxy(6,8);
  179.             gprintf("You win!");
  180.             HIDE_SPRITES;
  181.         }
  182.         delay(10);
  183.     }
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement