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); }
void gameLoop() { --pipe.x; if(pipe.x < 232 && pipe.x > 160) { initPipe(); } movePipe(); //Scroll ground if(WX_REG == 0) WX_REG = 7; else --WX_REG; if(updateBird() != 0) { //Kill bird flash_frames = 0; bird_flag = FALSE; set_sprite_prop(0, S_FLIPY); set_sprite_prop(1, S_FLIPY); gameState = GAME_STATE_DEAD; } if(!pipe.counted && pipe.x+24 < bird_x) { pipe.counted = TRUE; if(score != 99) { ++score; updateScore(); } } moveBird(); }
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; }
void INIT() { UBYTE i; disable_interrupts(); HIDE_BKG; HIDE_SPRITES; HIDE_WIN; DISPLAY_OFF; set_bkg_data( 0, 5, bgtile1 ); set_bkg_tiles( 0, 0, bgmap3Width, bgmap3Height, bgmap3 ); set_sprite_data( 0, 32, girl ); SPRITES_8x8; gx = gy = 1; gd = 2; gp = 1; SET_MOVE_SPRITE(); for( i = 0; i < 4; i++ ){ set_sprite_prop( i, 0 ); } SHOW_BKG; SHOW_SPRITES; DISPLAY_ON; enable_interrupts(); }
void empty_screen (void) { UBYTE temp1; HIDE_BKG; HIDE_SPRITES; VBK_REG = 0; SWITCH_ROM_MBC1(1); for (temp1=0; temp1<40; temp1++) { move_sprite(temp1,0,200); set_sprite_prop (temp1,0); } for (temp1=0; temp1<20; temp1++) { set_bkg_tiles (0,temp1,20,1,(unsigned char *) &cEMPTY[0]); set_win_tiles (0,temp1,20,1,(unsigned char *) &cEMPTY[0]); VBK_REG = 1; set_bkg_tiles (0,temp1,20,1,(unsigned char *) &cEMPTY[0]); set_win_tiles (0,temp1,20,1,(unsigned char *) &cEMPTY[0]); VBK_REG = 0; } move_bkg (0,0); SWITCH_ROM_MBC1(0); SHOW_BKG; SHOW_SPRITES; }
void updatePointer() { pointerTile++; if(pointerTile > 8) pointerTile = 1; set_sprite_tile(0, pointerTile); set_sprite_prop(0, pointerTilesCGB[pointerTile]); }
void resetGame() { bird_flag = FALSE; bird_gravity.w = 0; showLogo(); gameState = GAME_STATE_INTRO; score = 0; hideScore(); hidePipe(); set_sprite_prop(0, 0x00); set_sprite_prop(1, 0x00); bird_x = 0; bird_y = 0; }
void createNPC(UBYTE index, EntityType type){ fixed r; UBYTE spriteIndex = (index + 1) << 1; EntityData *npc = &(npc_data[index]); npc_counts[npc->type]++; //TODO: figure out why this doesn't work??!? //npc->type = type; //place at a random location off-screen r.w = rand(); if (r.b.l & 1){ npc->position.x.b.h = r.b.l << 4; npc->position.y.b.h = (r.b.l % 96) + 160; } else { npc->position.x.b.h = (r.b.l % 80) + 168; npc->position.y.b.h = r.b.l << 4; } //TEMP start with random speed r.w = rand(); //first 3 for x speed npc->speed.x.w = (r.b.l & 0x7) - 3;//(-3,4) r.w = r.w >> 2; //another 3 for y speed (speeds share a bit) npc->speed.y.w = (r.b.l & 0x7) - 3;//(-3,4) r.w = r.w >> 2; //initialize sprite tile reference register //make sure sprite is in front of background set_sprite_prop(spriteIndex, 0); set_sprite_prop(spriteIndex + 1, 0); //this is done inside npc_setVisibility, no need to do it twice right? //tileSprite(spriteIndex, entity_tiles_ref[npc->type][0], npc->type); placeSprite(spriteIndex, npc); //last 4 for randomizing animation start point (nice-to-have) npc->animFrame = 0;//r.b.l & (entity_anim_frames[type] - 1); npc_setVisibility(npc, spriteIndex); }
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); } }
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; }
/*--------------------------------------------------------*/ void INIT() { UBYTE i; printf(" "); disable_interrupts(); HIDE_BKG; HIDE_SPRITES; HIDE_WIN; DISPLAY_OFF; set_bkg_data( 0, 5, bgtile1 ); set_bkg_data( 160, 65, hamumoji ); // ハム子文字に使うタイルデータ 160番〜 65枚 hamumoji(で作ったタイル)をセットする set_sprite_data( 0, 32, hamuko ); SPRITES_8x8; SHOW_BKG; SHOW_SPRITES; DISPLAY_ON; enable_interrupts(); //------------------------------乱数の初期化の為にオープニングにメッセージを追加 OPENING_MESSAGE(); RANSUU_INIT(); //------------------------------ set_bkg_tiles( 0, 0, bgmap4Width, bgmap4Height, bgmap4 ); hx = hy = 1; hd = 2; hp = 0; SET_MOVE_HAMUKO(); for( i = 0; i < 4; i++ ){ set_sprite_prop( i, 0 ); } }
void empty_screen (void) { UBYTE temp1; //DISPLAY_OFF; HIDE_BKG; HIDE_SPRITES; VBK_REG = 0; ENABLE_RAM_MBC1; for (temp1=0; temp1<40; temp1++) { move_sprite(temp1,0,200); set_sprite_prop (temp1,0); } SWITCH_ROM_MBC1(4); for (temp1=0; temp1<20; temp1++) { set_bkg_tiles (0,temp1,20,1,(unsigned char *) &cEMPTY[0]); set_win_tiles (0,temp1,20,1,(unsigned char *) &cEMPTY[0]); VBK_REG = 1; set_bkg_tiles (0,temp1,20,1,(unsigned char *) &cEMPTY[0]); set_win_tiles (0,temp1,20,1,(unsigned char *) &cEMPTY[0]); VBK_REG = 0; } SWITCH_ROM_MBC1(0); DISABLE_RAM_MBC1; move_bkg (0,0); SHOW_BKG; SHOW_SPRITES; //DISPLAY_ON; }
void main() { UBYTE i, j; disable_interrupts(); DISPLAY_OFF; LCDC_REG = 0x67; /* * LCD = Off * WindowBank = 0x9C00 * Window = On * BG Chr = 0x8800 * BG Bank = 0x9800 * OBJ = 8x16 * OBJ = On * BG = On */ doorstate = CLOSED; /* Set palettes */ BGP_REG = OBP0_REG = OBP1_REG = 0xE4U; /* Initialize the background */ set_bkg_data(0xFC, 0x04, std_data); set_bkg_data(0x00, 0x2D, bkg_data); /* * Draw the background * * Width = 0x100 = 0x20 * 8 * Height = 0x100 = 0x20 * 8 */ for(i = 0; i < 32; i+=8) for(j = 0; j < 32; j+=8) set_bkg_tiles(i, j, 8, 8, bkg_tiles); bposx.w = 0; SCX_REG = 0; bposy.w = 0; SCY_REG = 0; bspx.w = 0xFF00; bspy.w = 0x0080; /* Initialize the window */ set_win_data(0x80, 0x21, frame_data); /* * Draw the frame in the window * * Width = 0x80 = 0x10 * 8 * Height = 0x50 = 0x0A * 8 */ set_win_tiles(0, 0, 16, 10, frame_tiles); /* * Draw the door in the window * * Width = 0x60 = 0x20 * 12 * Height = 0x30 = 0x20 * 6 */ set_win_tiles(2, 2, 12, 6, door1_tiles); wposx.b.h = MAXWNDPOSX; wposx.b.l = 0; WX_REG = MAXWNDPOSX; wposy.b.h = MAXWNDPOSY; wposy.b.l = 0; WY_REG = MAXWNDPOSY; wspx.w = 0xFF80; wspy.w = 0xFFC0; /* Initialize the sprite */ set_sprite_data(0x00, 0x1C, earth_data); set_sprite_prop(0, 0x00); set_sprite_prop(1, 0x00); sframe = 0; sposx.w = 0x1000; sposy.w = 0x1000; sspx.w = 0x0040; sspy.w = 0x0040; tile_sprite(); place_sprite(); DISPLAY_ON; enable_interrupts(); while(1) { /* Skip four VBLs (slow down animation) */ for(i = 0; i < 4; i++) wait_vbl_done(); time++; fade(); door(); scroll(); animate_sprite(); i = joypad(); if(i & J_B) { if(i & J_UP) bspy.w -= 0x0010; if(i & J_DOWN) bspy.w += 0x0010; if(i & J_LEFT) bspx.w -= 0x0010; if(i & J_RIGHT) bspx.w += 0x0010; } else if(i & J_A) { if(i & J_UP) wspy.w -= 0x0010; if(i & J_DOWN) wspy.w += 0x0010; if(i & J_LEFT) wspx.w -= 0x0010; if(i & J_RIGHT) wspx.w += 0x0010; } else { if(i & J_SELECT) color = STARTFADE; if(i & J_START) if(doorstate == CLOSED) { doorstate = OPENING; doorpos = 0; } else if(doorstate == OPENED) { doorstate = CLOSING; doorpos = NBDFRAMES; } if(i & J_UP) sspy.w -= 0x0010; if(i & J_DOWN) sspy.w += 0x0010; if(i & J_LEFT) sspx.w -= 0x0010; if(i & J_RIGHT) sspx.w += 0x0010; } } }
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; } }
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 */