void displaySetup() { DISPLAY_OFF; set_bkg_palette( 0, 1, &bgpalette[0] ); /* Initialize the background */ set_bkg_data(0, 92, data_font); //set_bkg_tiles(1,0, 20, 18, bgmap); set_sprite_palette(0,2,&spritepalette[0]); for(j=0;j!=4;j++) { cursorBigStartX[j] = SCREEN_XO + SCREEN_PSTARTX + (j * SCREEN_XSPACE) - 1; cursorBigStartY[j] = SCREEN_YO + SCREEN_PSTARTY - 8; cursorStartX[j] = SCREEN_XO + SCREEN_PSTARTX + (j * SCREEN_XSPACE) - 8; cursorStartY[j] = SCREEN_YO + SCREEN_PSTARTY; cursorRow[j] = cursorStartY[j]; } SPRITES_8x8; set_sprite_data(SPRITE_ARRT,0x01U, data_barrow); set_sprite_data(SPRITE_ARRL,0x01U, data_larrow); set_sprite_tile(SPRITE_ARRT_START, SPRITE_ARRT); for(j=0;j!=4;j++) set_sprite_tile(j+SPRITE_ARRL_START, SPRITE_ARRL); for(j=0;j!=4;j++) set_sprite_prop(j+SPRITE_ARRT_START,1); for(j=0;j!=4;j++) set_sprite_prop(j+SPRITE_ARRL_START,1); DISPLAY_ON; }
//this adds one to every sprite ID, thus allowing a new sprite to be added. it also set sprites for each bullet accoringly void BulletSlideSpriteIDsUp() { B1_SpriteID++; if (B1_Using) { set_sprite_tile(B1_SpriteID, B1_FrameIndex); } B2_SpriteID++; if (B2_Using) { set_sprite_tile(B2_SpriteID, B2_FrameIndex); } B3_SpriteID++; if (B3_Using) { set_sprite_tile(B3_SpriteID, B3_FrameIndex); } B4_SpriteID++; if (B4_Using) { set_sprite_tile(B4_SpriteID, B4_FrameIndex); } B5_SpriteID++; if (B5_Using) { set_sprite_tile(B5_SpriteID, B5_FrameIndex); } }
void setupBird() { set_sprite_tile(0, bird_offset); set_sprite_tile(1, bird_offset+2); set_sprite_prop(0, 0x00); set_sprite_prop(1, 0x00); }
/* Set sprite tiles */ void tile_sprite() { UBYTE s; s = sframe<<1; set_sprite_tile(0, earth_tiles[s]); set_sprite_tile(1, earth_tiles[s+1]); }
/* enemys */ void enemys() { UBYTE i; for( i=0; i<MAX_ET; i++ ) { if( ef[i] == 1 ) { set_sprite_tile( i*2+DEF_ES0, DEF_1EC0+8 ); set_sprite_tile( i*2+DEF_ES1, DEF_1EC1+(ex[i]-MAX_SX*8-12)+7 ); } } }
/** * Updates player movement and animation. */ void updatePlayer() { UBYTE i, moved; // Get joypad input moved = 0; i = joypad(); if(i & J_RIGHT) { pposx += 1; pdir = DIR_RIGHT; moved = 1; } if(i & J_LEFT) { pposx -= 1; pdir = DIR_LEFT; moved = 1; } if(i & J_UP) { pposy -= 1; pdir = DIR_UP; moved = 1; } if(i & J_DOWN) { pposy += 1; pdir = DIR_DOWN; moved = 1; } // Keep player within bounds if(pposx < PMINX) pposx = PMINX; else if(pposx > PMAXX) pposx = PMAXX; if(pposy < PMINY) pposy = PMINY; else if(pposy > PMAXY) pposy = PMAXY; // Set player position move_sprite(0, pposx, pposy); move_sprite(1, pposx, pposy+8); move_sprite(2, pposx+8, pposy); move_sprite(3, pposx+8, pposy+8); // Set player sprite if(moved) { if(time % 8 == 0) { pframe = (pframe + 1) % 4; } } else { pframe = 1; } i = (pdir << 4) + (pframe << 2); set_sprite_tile(0, i++); set_sprite_tile(1, i++); set_sprite_tile(2, i++); set_sprite_tile(3, i); }
/*--------------------------------------------------------*/ void SET_MOVE_HAMUKO() { set_sprite_tile( 0, hamuko_tile[hd][hp][0] ); set_sprite_tile( 1, hamuko_tile[hd][hp][1] ); set_sprite_tile( 2, hamuko_tile[hd][hp][2] ); set_sprite_tile( 3, hamuko_tile[hd][hp][3] ); move_sprite( 0, hx * 8 + 8, hy * 8 + 16 ); move_sprite( 1, hx * 8 + 8, hy * 8 + 24 ); move_sprite( 2, hx * 8 + 16, hy * 8 + 16 ); move_sprite( 3, hx * 8 + 16, hy * 8 + 24 ); }
void SET_MOVE_SPRITE() { set_sprite_tile( 0, hamumi_tile[gd][gp][0] ); set_sprite_tile( 1, hamumi_tile[gd][gp][1] ); set_sprite_tile( 2, hamumi_tile[gd][gp][2] ); set_sprite_tile( 3, hamumi_tile[gd][gp][3] ); move_sprite( 0, gx * 8 + 8, gy * 8 + 16 ); move_sprite( 1, gx * 8 + 8, gy * 8 + 24 ); move_sprite( 2, gx * 8 + 16, gy * 8 + 16 ); move_sprite( 3, gx * 8 + 16, gy * 8 + 24 ); }
void main(){ int xpos = 8 + GRAPHICS_WIDTH / 2; int ypos = 16 + GRAPHICS_HEIGHT / 2; int count = 0; int joy, i; set_sprite_data(0, 1, crosshair_tiledata); set_sprite_data(1, 6, explode_tiledata); SWITCH_ROM_MBC1(3); set_bkg_data(0, 179, title_tiledata); set_bkg_tiles(0, 0, 20, 18, title_tilemap); SHOW_BKG; DISPLAY_ON; waitpad(J_START); DISPLAY_OFF; SWITCH_ROM_MBC1(2); set_bkg_data(0, 182, earth_tiledata); set_bkg_tiles(0, 0, 20, 18, earth_tilemap); set_sprite_tile(0,0); move_sprite(0, xpos, ypos); SHOW_SPRITES; DISPLAY_ON; waitpadup(); while (1){ wait_vbl_done(); joy = joypad(); if (joy & J_UP && ypos > 14) --ypos; if (joy & J_DOWN && ypos < GRAPHICS_HEIGHT + 13) ++ypos; if (joy & J_LEFT && xpos > 8) --xpos; if (joy & J_RIGHT && xpos < GRAPHICS_WIDTH + 8) ++xpos; if (joy & J_A || joy & J_B){ ++count; move_sprite(count, xpos - 2, ypos - 2); for (i = 1; i != 7; ++i){ set_sprite_tile(count, i); wait_vbl_done(); wait_vbl_done(); } set_sprite_tile(count, 4); set_sprite_prop(count, 1 << 4); if (count == 39){ delay(500); end(); } } move_sprite(0, xpos, ypos); } }
//loads the player sprites (this doesn't increment sprite num since it starts at 0 void PlayerLoad() { //load sprite data set_sprite_tile(0, P_FrameIndex); move_sprite(0, P_PosX, P_PosY); }
unsigned int mainMenu() { int selection; unsigned long int loopCount; DISPLAY_OFF; HIDE_BKG; move_bkg(0,0); set_bkg_palette( 7, 1, &menuPalCGB[28] ); set_bkg_palette( 6, 1, &menuPalCGB[24] ); set_bkg_palette( 5, 1, &menuPalCGB[20] ); set_bkg_palette( 4, 1, &menuPalCGB[16] ); set_bkg_palette( 3, 1, &menuPalCGB[12] ); set_bkg_palette( 2, 1, &menuPalCGB[8] ); set_bkg_palette( 1, 1, &menuPalCGB[4] ); set_bkg_palette( 0, 1, &menuPalCGB[0] ); set_bkg_data( 0, 141, menuTiles ); VBK_REG = 1; set_bkg_tiles(0,0,menuMapWidth,menuMapHeight,menuPal); VBK_REG = 0; set_bkg_tiles(0,0,menuMapWidth,menuMapHeight,menuMap); SHOW_BKG; DISPLAY_ON; setupPointer(); loopCount = 0; do { loopCount++; if((loopCount % 125) == 0) updatePointer(); /* animate the pointer */ selection = checkButtons(); } while(!selection); /* user hasn't made a selection */ set_sprite_tile(0, 0); /* set to straight pointer while waiting */ while(joypad() & (J_A | J_START)); /* wait for the user to let up */ /* "Shoot" the pointer across the screen */ loopCount = 0; while((pointerX + loopCount) <= 168) { move_sprite(0, pointerX + loopCount, pointerYPositions[currSelection]); loopCount++; delay(4); } hidePointer(); return selection; }
UINT8 updateBird() { bird_gravity.w += BIRD_GRAVITY_FORCE; bird_y += bird_gravity.b.h; if(joy & J_A) { if(bird_flag) { bird_gravity.b.h -= 4; bird_flag = FALSE; } } else { bird_flag = TRUE; } if(bird_y > 120 && bird_y < 250) { bird_flag = FALSE; if(bird_y > 121)//only reset force in the sky bird_gravity.w = 0; return 1; //Die } //Hit test pipe if(!(pipe.x+24 < bird_x) && !(pipe.x > bird_x+16)) {// check front and back if(pipe.top_y > bird_y) {//check top bird_gravity.w = 0; return 1; } else if(pipe.bottom_y < bird_y) { bird_gravity.w = 0; return 1; } } // Animate ++bird_frame_skip; if(bird_frame_skip > 4) { bird_frame_skip = 0; ++bird_frame; bird_frame %= 3; set_sprite_tile(0, bird_offset+(bird_frame*4)); set_sprite_tile(1, bird_offset+(bird_frame*4)+2); } return 0; }
void updatePointer() { pointerTile++; if(pointerTile > 8) pointerTile = 1; set_sprite_tile(0, pointerTile); set_sprite_prop(0, pointerTilesCGB[pointerTile]); }
void init_cursor() { UBYTE i; /* Setup the cursor data*/ set_sprite_data(23, 8, cursor_data); for(i = 23;i <= 30;i++){ set_sprite_tile(i, i); } }
void updateScore() { i = SCORE_SPACE; if(score >= 10) { x1 = score/10; x2 = x1*4; set_sprite_tile(i, numbers_offset+(x2)); set_sprite_tile(i+1, numbers_offset+(x2+2)); move_sprite(i, 72, 30); move_sprite(i+1, 72+8, 30); x1 *= 10; x2 = score-x1; x2 *= 4; set_sprite_tile(i+2, numbers_offset+(x2)); set_sprite_tile(i+3, numbers_offset+(x2+2)); move_sprite(i+2, 72+16, 30); move_sprite(i+3, 72+16+8, 30); } else { x1 = score*4; set_sprite_tile(i, numbers_offset+(x1)); set_sprite_tile(i+1, numbers_offset+(x1+2)); move_sprite(i, 80, 30); move_sprite(i+1, 80+8, 30); move_sprite(i+2, 0, 0); move_sprite(i+3, 0, 0); } }
//----------------------------------------Sprite Methods //updates the player stuff (also updates bullet stuff) int PlayerUpdate(int SpriteNum) //0 - nothing happened, 1 - bullet died { //set the sprite set_sprite_tile(SpriteNum, P_FrameIndex); move_sprite(SpriteNum, 0, 0); move_sprite(SpriteNum, P_PosX, P_PosY); //update gun stuff GunUpdate(); //Update bullet stuff return BulletsUpdate(); }
void main() { /* sets the complete sprite data from tile 0 for 1 tile of smile (data begins at tile 0 and ends after 1 tile) */ set_sprite_data(0,1,smile); /* sets tile number 0 to tile 0 of smile */ set_sprite_tile(0,0); /* moves sprite 0 to X-75 Y-75 */ move_sprite(0,75,75); SHOW_SPRITES; } /* end main */
main(){ UBYTE counter,x,y; x=40; y=17; disable_interrupts(); DISPLAY_OFF; /*load background * */ set_bkg_data(0,4,backgroundcharacters); for(counter=0;counter<=16;counter+=2) set_bkg_tiles( 0, counter, 20, 2, bgmap); //load sprite SPRITES_8x8; set_sprite_data(0, 1, spritetiles); set_sprite_tile(0,0); move_sprite(0,x,y); SHOW_BKG; SHOW_SPRITES; DISPLAY_ON; enable_interrupts(); while(1) { /* Skip four VBLs (slow down animation) */ for(counter = 0; counter < 4; counter++){ wait_vbl_done(); } counter = joypad(); if(counter & J_UP) y--; if(counter & J_DOWN) y++; if(counter & J_LEFT) x--; if(counter & J_RIGHT) x++; move_sprite(0,x,y); } }
void setupPointer() { SPRITES_8x8; currSelection = MENU_STORYLINE; pointerTile = 1; /* the current tile for the pointer */ set_sprite_palette(0, 1, &pointerPalCGB[0]); set_sprite_data(0, 9, pointerTiles); set_sprite_tile(0, pointerTile); set_sprite_prop(0, pointerTilesCGB[pointerTile]); move_sprite(0, pointerX, pointerYPositions[currSelection]); SHOW_SPRITES; }
//----------------------------------------Game Loop int main() { SetupGame(); //this is the game loop. this loops forever. while (1) { SHOW_SPRITES; //monster stuff MonsterUpdate(SpriteNum); //player stuff num = PlayerCheckControls(SpriteNum); if (num == 1) //then a bullet was instantiated { SpriteNum++; PlayerSlideBack(); PlayerSlideBack(); PlayerSlideBack(); PlayerSlideBack(); PlayerUpdate(SpriteNum); HIDE_SPRITES; //clear unused sprites } num = PlayerUpdate(SpriteNum); if (num == 1) //then a bullet died { set_sprite_tile(SpriteNum, 5); //hide the players current sprite SpriteNum--; move_sprite(SpriteNum, P_PosX, P_PosY); //and show the new } //woah there sparky delay(20); } }
/* ------------------------------------- main program-----------------------------------------*/ void main() { back(); /* draw the background (platforms and ladders) */ data_arary(); /* create the collision detection array */ updwn=6; /* first up and down tile number */ current=0; /* first left right tile number */ x=15; /* x cordinate to start at */ y=16; /* y cordinate to start at */ SPRITES_8x16; /* sets sprites to, yep you guessed it, 8x16 mode */ set_sprite_data(0, 16, bloke); /* defines the main sprite data */ set_sprite_tile(0, current); move_sprite(current, x, y); /* puts the first sprite on screen */ SHOW_SPRITES; while(!0) /* infinate game loop */ { grav(); /* check we are stood on something and fall if we are'nt */ player(); /* player movement and collision detection routines */ /* returned values have no meaning here, just for tests */ } /* end of infinate loop */ } /* end main */
int player() /* player moving func (see sprite4a.zip for more info) */ { key=joypad(); /* key = what was pressed */ if(key==J_RIGHT) { x++; if(collide(x,y)==1){x--; return 0;} /* check we can move right */ if(!fall) { current+=2; /* if we aren't falling continue animation */ if(current==8) current=0; set_sprite_tile(0,current); } set_sprite_prop(0,0); move_sprite(0,x,y); /* put sprite on screen */ if(!fall) { delay(25); } /* delay if not falling */ return 1; } if(key==J_LEFT) { x--; if(collide(x,y)==1){x++; return 0;} if(!fall) { current+=2; if(current==8) current=0; set_sprite_tile(0,current); } set_sprite_prop(0,S_FLIPX | 0x01); /* flips horizontatly l/r sprite */ move_sprite(0,x,y); if(!fall) { delay(25); } return 1; } if(key==J_UP) { y--; if(test){ if (collide(x,y)==1) {y++; return 0;} } /* for testing purposes */ else if(collide(x,y)!=2){y++; return 0;} updwn+=2; if(updwn==16) { updwn=8; } set_sprite_tile(0,updwn); move_sprite(0,x,y); if(!fall) { delay(25); } return 1; } if(key==J_DOWN) { y++; if(test){ if (collide(x,y)==1) {y--; return 0;} } else if(collide(x,y)!=2){y--; return 0;} updwn+=2; if(updwn==16) { updwn=8; } set_sprite_tile(0,updwn); move_sprite(0,x,y); if(!fall) { delay(25); } return 1; } if(key==J_B) /* just for testing purposes */ { move_sprite(0,200,200); delay(500); for(temp=0;temp<=127;temp++) { scroll_bkg(0,2); delay(5); } delay(500); move_sprite(0,15,16); x=15; y=16; return 1; } if(key==J_A+J_RIGHT || key==J_A+J_LEFT || key==J_A) { if(!fall){ jump();} return 1; } return 0; } /* end of player func */
main(){ disable_interrupts(); DISPLAY_OFF; resetKoords(); //set score to 0 score_p1=0; score_p2=0; //background set_bkg_data(0,10,backgroundcharacters); //background oben set_bkg_tiles(0, 0, 20, 1, bgmap); //background mitte for(counter=1;counter<=13;counter++) set_bkg_tiles(0,counter,20,1,bgmap+20); //background unten set_bkg_tiles(0,14,20,1,bgmap+40); //leer für score etc for(counter=15;counter<=17;counter++) set_bkg_tiles(0,counter,20,1,bgmap+20); set_bkg_tiles(0,14,20,1,bgmap+40); //load sprite SPRITES_8x8; //load paddle tile set_sprite_data(0, 1, spritetiles); //load ball tile set_sprite_data(1, 1, spritetiles+16); //load score set_sprite_data(2, 1, spritetiles+32); set_sprite_data(3, 1, spritetiles+48); set_sprite_data(4, 1, spritetiles+64); set_sprite_data(5, 1, spritetiles+80); set_sprite_data(6, 1, spritetiles+96); set_sprite_data(7, 1, spritetiles+112); set_sprite_data(8, 1, spritetiles+128); set_sprite_data(9, 1, spritetiles+144); set_sprite_data(10, 1, spritetiles+160); set_sprite_data(11, 1, spritetiles+176); set_sprite_data(12, 1, spritetiles+192); //paddle 0 set_sprite_tile(0,0); set_sprite_tile(1,0); set_sprite_tile(2,0); //paddle 1 set_sprite_tile(3,0); set_sprite_tile(4,0); set_sprite_tile(5,0); //ball set_sprite_tile(6,1); //aktiviere bildschirm SHOW_BKG; SHOW_SPRITES; DISPLAY_ON; enable_interrupts(); while(1) { /* Skip four VBLs (slow down animation) */ //for(counter = 0; counter < 10; counter++){ //64 wait_vbl_done(); //} counter = joypad(); //set score score set_sprite_tile(7,2+score_p1); set_sprite_tile(8,2+score_p2); //check paddle 0 for move if(counter & J_UP && y1>=20){ y1-=1; y2-=1; y3-=1; if(checkCollisionBallPaddle(0)<16){ y1+=1; y2+=1; y3+=1; } } if(counter & J_DOWN && y3<=124){ y1+=1; y2+=1; y3+=1; if(checkCollisionBallPaddle(0)<16){ y1-=1; y2-=1; y3-=1; } } //check paddle 1 for move if(y5 > ball_pos_y && y4 >= 20){ y4-=1; y5-=1; y6-=1; if(checkCollisionBallPaddle(1)<16){ y4+=1; y5+=1; y6+=1; } } if(y5 < ball_pos_y && y6 <= 124){ y4+=1; y5+=1; y6+=1; if(checkCollisionBallPaddle(1)<16){ y4-=1; y5-=1; y6-=1; } } //start game? if(counter & J_START && game_status==0){ //if gameover, reset score if(score_p1==10 || score_p2==10){ score_p1=0; score_p2=0; } ball_vektor_x1=1; ball_vektor_x2=1; ball_vektor_y1=1; ball_vektor_y2=1; game_status=1; //game is now running } //move ball if(vektor_pointer==0){ temp1=ball_vektor_x1; temp2=ball_vektor_y1; vektor_pointer=1; } else{ temp1=ball_vektor_x2; temp2=ball_vektor_y2; vektor_pointer=0; } ball_pos_x+=temp1; ball_pos_y+=temp2; col0=checkCollisionBallPaddle(0); if(col0<16){ while(temp1!=0 || temp2!=0){ if(temp1>0){ temp1--; ball_pos_x--; } if(temp1<0){ temp1++; ball_pos_x++; } if(temp2>0){ temp2--; ball_pos_y--; } if(temp2<0){ temp2++; ball_pos_y++; } if (checkCollisionBallPaddle(0)>=16) break; } } col1=checkCollisionBallPaddle(1); if (col1<16){ while(temp1!=0 || temp2!=0){ if(temp1>0){ temp1--; ball_pos_x--; } if(temp1<0){ temp1++; ball_pos_x++; } if(temp2>0){ temp2--; ball_pos_y--; } if(temp2<0){ temp2++; ball_pos_y++; } if (checkCollisionBallPaddle(1)>=16) break; } } //collision detection //left wall if(ball_pos_x<9){ resetKoords(); score_p2++; } //right wall if(ball_pos_x>163){ resetKoords(); score_p1++; } //upper wall if(ball_pos_y<19){ ball_pos_y=19; ball_vektor_y1--; ball_vektor_y1=ball_vektor_y1 ^ 255; ball_vektor_y2--; ball_vektor_y2=ball_vektor_y2 ^ 255; } //lower wall if(ball_pos_y>125){ ball_pos_y=125; ball_vektor_y1--; ball_vektor_y1=ball_vektor_y1 ^ 255; ball_vektor_y2--; ball_vektor_y2=ball_vektor_y2 ^ 255; } //col0 if(col0<16 && ball_pos_x==23){ //ball moves up if(ball_vektor_y1<0 || ball_vektor_y2<0) col_table = &collision_left_up; //ball moves down else col_table = &collision_left_down; col_table+=col0*4; ball_vektor_x1 = *col_table; ball_vektor_y1 = *(col_table+1); ball_vektor_x2 = *(col_table+2); ball_vektor_y2 = *(col_table+3); } //col1 if(col1<16 && ball_pos_x==145){ //ball moves up if(ball_vektor_y1<0 || ball_vektor_y2<0) col_table = &collision_right_up; //ball moves down else col_table = &collision_right_down; col_table+=col1*4; ball_vektor_x1 = *col_table; ball_vektor_y1 = *(col_table+1); ball_vektor_x2 = *(col_table+2); ball_vektor_y2 = *(col_table+3); } //sonderfall col0 if(col0<16 && ball_pos_x!=23){ ball_vektor_y1--; ball_vektor_y2--; ball_vektor_y1=ball_vektor_y1^255; ball_vektor_y2=ball_vektor_y2^255; } //sonderfall col1 if(col1<16 && ball_pos_x!=145){ ball_vektor_y1--; ball_vektor_y2--; ball_vektor_y1=ball_vektor_y1^255; ball_vektor_y2=ball_vektor_y2^255; } //paint p0 move_sprite(0,15,y1); move_sprite(1,15,y2); move_sprite(2,15,y3); //paint p1 move_sprite(3,153,y4); move_sprite(4,153,y5); move_sprite(5,153,y6); //paint ball move_sprite(6,ball_pos_x,ball_pos_y); //paint score move_sprite(7,15,140); move_sprite(8,153,140); } }
void init_key() { UBYTE key_x, key_y, i, j; /* To make numeric KeyPad */ set_sprite_data(0, 24, key_num); /* key pad 1 - 3 */ key_y = KEY_STEP + 40; for(i = 1;i <= 3;i++){ key_x = i * KEY_STEP; set_sprite_tile(i, i); move_sprite(i, key_x, key_y); } /* key pad 4 - 6 */ key_y = KEY_STEP * 2 + 40; for(i = 4;i <= 6;i++){ key_x = (i - 3) * KEY_STEP; set_sprite_tile(i, i); move_sprite(i, key_x, key_y); } /* key pad 7 - 9 */ key_y = KEY_STEP * 3 + 40; for(i = 7;i <= 9;i++){ key_x = (i - 6) * KEY_STEP; set_sprite_tile(i, i); move_sprite(i, key_x, key_y); } /* key pad 'A' - 'D' */ key_x = KEY_STEP * 4; for(i = 0;i <= 3;i++){ key_y = (i+1) * KEY_STEP + 40; set_sprite_tile(i+10, i+10); move_sprite(i+10, key_x, key_y); } /* key pad '*', '0', '#' */ set_sprite_tile(15, 15); move_sprite(15, KEY_STEP * 1, KEY_STEP * 4 + 40); set_sprite_tile(0, 0); move_sprite(0, KEY_STEP * 2, KEY_STEP * 4 + 40); set_sprite_tile(14, 14); move_sprite(14, KEY_STEP * 3, KEY_STEP * 4 + 40); /* func left */ key_x = KEY_STEP * 5 + 8; for(i = 0;i <= 2;i++){ key_y = (i+1) * KEY_STEP + 40; set_sprite_tile(i+16, i+16); move_sprite(i+16, key_x, key_y); } /* func right */ key_x = KEY_STEP * 6 + 8; for(i = 0;i <= 2;i++){ key_y = (i+1) * KEY_STEP + 40; set_sprite_tile(i+19, i+19); move_sprite(i+19, key_x, key_y); } /* dialing button */ key_x = KEY_STEP * 5 + 20; key_y = KEY_STEP * 4 + 40; set_sprite_tile(22, 22); move_sprite(22, key_x, key_y); }
/** * Main ingame loop. */ void gameLoop() { BYTE xdist, ydist; UBYTE cx, cy; // Init player pposx = 80; pposy = 64; pdir = DIR_DOWN; alive = 1; // Set game variables score = 0; nextUpdate = 0; switch_delay = START_DELAY; // Load game map BG tiles DISPLAY_OFF; // Load tile data sets LCDC_REG = B8(01000011); set_sprite_data(0, sprite_dataLen, sprite_data); set_bkg_data(0, game_dataLen, game_data); set_bkg_tiles(0, 0, 20, 18, map_tiles); // Score counter set_sprite_tile(5, 64); move_sprite(5, 15, 148); set_sprite_tile(6, 65); set_sprite_tile(7, 65); move_sprite(6, 26, 148); move_sprite(7, 35, 148); set_sprite_tile(4, 64); clearMap(); addBox(); DISPLAY_ON; // Game loop while(alive) { wait_vbl_done(); time++; nextUpdate++; if(nextUpdate >= switch_delay) { nextUpdate = 0; updateMap(); spawnCells(); } updatePlayer(); // Check if player has picked up box xdist = pposx - boxx; ydist = pposy - boxy; if(xdist > -COLDISTX && xdist < COLDISTX && ydist > -COLDISTY && ydist < COLDISTY) { score++; updateScore(); addBox(); switch_delay--; } // Check if player is on black hole cx = pposx/16 - 1; cy = pposy/16 - 1; if(map[cx + cy*MAPW] >= CELL_BLACK) { alive = 0; } } }
int main() { //setup //sprite stuff set_sprite_palette(0,1,&spritepalette[0]); SPRITES_8x8; set_sprite_data(MARIO, 4, mario); set_sprite_tile(0,0); set_sprite_tile(1,1); set_sprite_tile(2,2); set_sprite_tile(3,3); /* set_sprite_location(0, 0, 20, 0, MARIO, current_map); set_camera_location(0, 0, 2, 0); */ //background stuff set_bkg_palette(0,1,&backgroundpalette[0]); set_bkg_palette(1,1,&backgroundpalette[4]); set_bkg_data(0,4,backgroundcharacters); VBK_REG=1; set_bkg_tiles(0,0,20,24,cgbmap); VBK_REG=0; set_bkg_tiles(0,0,20,24,bgmap); SHOW_BKG; enable_interrupts(); DISPLAY_ON; scroll_bkg(0,1); while(1) {/* printf("camera_x: %i\n", camera_x); printf("camera_y: %i\n", camera_y); printf("spritex: %i\n", spritex); printf("spritey: %i\n", spritey);*/ //read input = joypad(); //eval if(input & J_UP) { spritey--; } if(input & J_DOWN) { spritey++; } if(input & J_LEFT) { if(spritex != 0) { spritex--; } camera_x = spritex - 80; if(spritex <= 80) { camera_x = 0; } if(spritex >= world_width_px - 80) { camera_x = world_width_px - SCREEN_WIDTH; } scrolled = 0; } if(input & J_RIGHT) { if(spritex != world_width_px - 16) { spritex++; } camera_x = spritex - 80; if(spritex <= 80) { camera_x = 0; } if(spritex >= world_width_px - 80) { camera_x = world_width_px - SCREEN_WIDTH; } scrolled = 0; } //print for(y = 0; y <= 18; y++) { /* VBK_REG=1; set_bkg_tiles(0,3,20,19,cgbmap); VBK_REG=0; set_bkg_tiles(0,0,20,19,bgmap); */ map_row = camera_y/8; map_row *= tile_width; map_row += (camera_x/8); VBK_REG=1; set_bkg_tiles(0,y,21,1,&cgbmap[map_row]); VBK_REG=0; set_bkg_tiles(0,y,21,1,&bgmap[map_row]); } move_sprite(0,spritex-camera_x+8,spritey-camera_y+16); move_sprite(1,spritex-camera_x+16,spritey-camera_y+16); move_sprite(2,spritex-camera_x+8,spritey-camera_y+24); move_sprite(3,spritex-camera_x+16,spritey-camera_y+24); //print for(i = 0; i < 4; i++) { //slow down animation wait_vbl_done(); } SHOW_BKG; SHOW_SPRITES; } return 0; }
/** * Updates the score counter sprites * in the HUD */ void updateScore() { set_sprite_tile(6, 65 + score / 10); set_sprite_tile(7, 65 + score % 10); }
void tileSprite(UBYTE index, const unsigned char tile, EntityType type){ set_sprite_tile(index, tile); if (type != VIRUS && type != KING){ set_sprite_tile(index+1, tile + 2); } }
void initPipe() { //Setup i = PIPE_SPACE; pipe.x = 160; if(score < 5) { pipe.size = 5; } else if(score < 15) { pipe.size = 4; } else if(score < 40) { pipe.size = 3; } else { pipe.size = 2; } pipe.gap = 1+(randw()%(7-pipe.size)); pipe.top_y = (pipe.gap*16)+8; pipe.bottom_y = ((pipe.gap+pipe.size)*16)-8; pipe.counted = FALSE; //Top part for (y = 0; y < pipe.gap-1; y++) { set_sprite_tile(i, pipe_offset+2); set_sprite_tile(i+1, pipe_offset+6); set_sprite_tile(i+2, pipe_offset+10); set_sprite_prop(i, 0x00); set_sprite_prop(i+1, 0x00); set_sprite_prop(i+2, 0x00); i += 3; } //Top stop set_sprite_tile(i, pipe_offset); set_sprite_tile(i+1, pipe_offset+4); set_sprite_tile(i+2, pipe_offset+8); set_sprite_prop(i, S_FLIPY); set_sprite_prop(i+1, S_FLIPY); set_sprite_prop(i+2, S_FLIPY); i += 3; //Gap //Bottom stop set_sprite_tile(i, pipe_offset); set_sprite_tile(i+1, pipe_offset+4); set_sprite_tile(i+2, pipe_offset+8); set_sprite_prop(i, 0x00); set_sprite_prop(i+1, 0x00); set_sprite_prop(i+2, 0x00); i += 3; //Bottom part y += pipe.size+1; for (y; y < 7; y++) { set_sprite_tile(i, pipe_offset+2); set_sprite_tile(i+1, pipe_offset+6); set_sprite_tile(i+2, pipe_offset+10); set_sprite_prop(i, 0x00); set_sprite_prop(i+1, 0x00); set_sprite_prop(i+2, 0x00); i += 3; } }
void main() /* main program */ { int spr,spl,spud,x,y,old,key,fall; set_bkg_data(1,3,briks); /* start bkg display (platforms,ladders etc.) */ for(x=0;x<20;x++) {for(y=0;y<18;y++) set_bkg_tiles(x,y,1,1,bkgtilea); } for(x=0;x<10;x++) { set_bkg_tiles(x,2,1,1,brik); } for(x=9;x<14;x++) { set_bkg_tiles(x,4,1,1,brik); } for(y=4;y<18;y++) { set_bkg_tiles(14,y,1,1,ladder); } SHOW_BKG; /* end bkg */ SPRITES_8x16; /* sets sprites to, yep you guessed it, 8x16 mode */ set_sprite_data(0, 24, bloke); /* defines the main sprite data */ for(i=0;i<=11;i++) { set_sprite_tile(i,i*2); /* defines the tiles numbers */ } /* spr = sprite movement right (sprite numbers 0 - 3) spl = sprite movement left (sprite numbers 4 - 7) spud = sprite movement up/down (sprite numbers 8 - 11) */ spr=0; /* right movement sprite starts at no.0 */ spl=4; /* left movement sprite starts at no.4 */ spud=8; /* up / down movement sprite starts at no.8 */ x=15; /* x cordinate to start at */ y=16; /* y cordinate to start at */ old=0; /* the last sprite displayed */ m=0; move_sprite(spr,x,y); /* puts the first sprite on screen */ old=spr; SHOW_SPRITES; while(!0) /* infinate game loop */ { check: y++; /* check we are stood on something using the arrary*/ if(collide(x,y)){y--; fall=0; goto ok; } fall=1; /* if NOT, we fall.... */ move_sprite(old,x,y); delay(10); y++; /* Do this twice so we fall down 2 before l/r movement*/ if(collide(x,y)){y--; fall=0; goto ok; } move_sprite(old,x,y); delay(10); ok: key=joypad(); /* key = what was pressed */ if(key==J_RIGHT) /* IF it was right ... */ { x++; /* increment x , so we can check boundry before moving */ if(x==scrxr){x--; goto check; } /* if x position is equal to max screen right, decerement x and goto check, not allowing movement */ if(collide(x,y)==1){x--; goto check;} /* call the collide function, if it returns 1(wall) do not allow right movement */ move_sprite(old,200,0); /* move the old sprite off screen */ move_sprite(spr,x,y); /* move new sprite onto screen */ old=spr; /* save the current sprite number in old */ if(!fall){delay(25);} /* delay if not falling */ if(!fall){spr++;} /* increment sprite number if not falling */ if(spr==4) spr=0; /* check if we have reached the end of the animation, if so start again */ } /* end of right IF statment */ if(key==J_LEFT) /* see above */ { x--; if(x==scrxl){x++; goto check; } if(collide(x,y)==1){x++; goto check;} move_sprite(old,200,0); move_sprite(spl,x,y); old=spl; if(!fall){delay(25);} if(!fall){spl++;} if(spl==8) spl=4; } if(key==J_UP) /* see above */ { y--; if(y==scryt){y++; goto check; } if(collide(x,y)!=2){y++; goto check;} /* call the collide function, if it's not a ladder (2), don't allow up or down movement */ move_sprite(old,200,0); move_sprite(spud,x,y); delay(25); old=spud; spud++; if(spud==12) spud=8; } if(key==J_DOWN) /* see above */ { y++; if(y==scryb){y--; goto check; } if(collide(x,y)!=2){y--; goto check;} move_sprite(old,200,0); move_sprite(spud,x,y); delay(25); old=spud; spud++; if(spud==12) spud=8; } if(key==J_B) /* just for testing purposes */ { spr=0; move_sprite(old,200,200); move_sprite(spr,15,16); x=15; y=16; old=spr; } } /* end of infinate loop */ } /* end main */