void InGameMenuLoop() { VDP_resetSprites(); u16 tileAttr = TILE_ATTR_FULL(PAL0,0,0,0,goplanesLoadedTileInfo.startIndex); VDP_setSprite(0, TILE_TO_PIXEL(12), TILE_TO_PIXEL(9) + TILE_TO_PIXEL(menuItem), SPRITE_SIZE(3,3), tileAttr, 0); MyVDP_waitVSync(); VDP_updateSprites(); if (joyButtonPressedState.b) { CloseInGameMenu(); return; } if (joyButtonPressedState.start || joyButtonPressedState.a) { switch (menuItem) { case MENU_ITEM_RETURN: { CloseInGameMenu(); return; } break; case MENU_ITEM_ENABLE_DEBUG: { if (playerObject->aiState != AI_STATE_DEBUG) { Player_StartDebugMovement(); } else { Player_EndDebugMovement(); } DrawText(); } break; case MENU_ITEM_INVINCIBILITY: debugSettings.invincibility = !debugSettings.invincibility; DrawText(); break; case MENU_ITEM_VSYNC: debugSettings.waitforvsync = !debugSettings.waitforvsync; DrawText(); break; case MENU_ITEM_FPSCOUNTER: debugSettings.showFPSCounter = !debugSettings.showFPSCounter; DrawText(); break; } } }
static void process_stars(star *stars) { for (int i = 0; i < NUM_STARS; i++) { stars[i].x = stars[i].x + stars[i].speed; if (stars[i].x >= 320) { stars[i].x = 0; stars[i].y = GET_HVCOUNTER%256; } sprite_put(stars[i].x, stars[i].y, SPRITE_SIZE(1,1), stars[i].size); } }
void initBoard() { int x,y,c; for (y = 0; y != BOARD_Y; y++) { for (x = 0; x != BOARD_X; x++) { c = (custrand() % 4) + 1; board[y][x].id = c; board[y][x].selected = 0; } } VDP_resetSprites(); cursor.posx = 0; cursor.posy = 0; cursor.size = SPRITE_SIZE(2, 2); cursor.tile_attr = TILE_ATTR_FULL(PAL1, PRIORITY_HIGH, FALSE, FALSE, TILE_USERINDEX); cursor.link = 0; VDP_setSpriteP(0, &cursor); VDP_updateSprites(); SND_startPlay_VGM(muz_gameplay1); }
u16 EnemyPlaneCreate(s16 x, s16 y) { ObjectStruct* enemyPlaneObject = CreateObject(TYPE_ENEMY, EnemyPlaneUpdate, EnemyPlaneDestroy, EnemyPlaneDraw, EnemyPlaneCollide); if (!enemyPlaneObject) { #ifdef DEBUG_OBJECTS KDebug_Alert("EnemyPlane could not be created!"); #endif return 0; } enemyPlaneObject->x = x; enemyPlaneObject->y = y; enemyPlaneObject->speedx = 0; enemyPlaneObject->speedy = 0; enemyPlaneObject->sprite.size = SPRITE_SIZE(3,3); enemyPlaneObject->spriteIndex = random() & 31; enemyPlaneObject->sprite.tile_attr = enemyPlaneAnimationFrames[enemyPlaneObject->spriteIndex] + enemyPlaneLoadedTileInfo.startIndex; enemyPlaneObject->aiState = ENEMYPLANE_AI_STATE_FLYING; enemyPlaneObject->rectLeft = PIXEL_TO_VIRTUAL(-12); enemyPlaneObject->rectRight = PIXEL_TO_VIRTUAL(12); enemyPlaneObject->rectTop = PIXEL_TO_VIRTUAL(-12); enemyPlaneObject->rectBottom = PIXEL_TO_VIRTUAL(12); enemyPlaneObject->healthPoints = 1; enemyPlaneObject->damage = 1; enemyPlaneObject->visible = 1; #ifdef DEBUG_OBJECTS KDebug_Alert("EnemyPlaneCreate"); #endif return 1; }
u16 EnemyBulletCreate(s16 x, s16 y, s16 speedx, s16 speedy) { ObjectStruct* enemyBulletObject = CreateObject(TYPE_ENEMY_PROJECTILE, EnemyBulletUpdate, EnemyBulletDestroy, EnemyBulletDraw, EnemyBulletCollide); if (!enemyBulletObject) { #ifdef DEBUG_OBJECTS KDebug_Alert("EnemyBullet could not be created!"); #endif return 0; } enemyBulletObject->x = x; enemyBulletObject->y = y; enemyBulletObject->speedx = speedx; enemyBulletObject->speedy = speedy; enemyBulletObject->sprite.size = SPRITE_SIZE(1,1); enemyBulletObject->spriteIndex = 0; enemyBulletObject->sprite.tile_attr = TILE_ATTR_FULL(PAL0,1,0,0,bulletLoadedTileInfo.startIndex); enemyBulletObject->rectLeft = PIXEL_TO_VIRTUAL(-4); enemyBulletObject->rectRight = PIXEL_TO_VIRTUAL(4); enemyBulletObject->rectTop = PIXEL_TO_VIRTUAL(-4); enemyBulletObject->rectBottom = PIXEL_TO_VIRTUAL(4); enemyBulletObject->damage = 1; enemyBulletObject->healthPoints = 1; enemyBulletObject->visible = 1; #ifdef DEBUG_OBJECTS KDebug_Alert("EnemyBulletCreate"); #endif return 1; }
void titleScreen() { snowflake snowflakes[TITLE_SCREEN_SNOWFLAKES]; SpriteDef sfdefs[TITLE_SCREEN_SNOWFLAKES]; VDP_resetScreen(); VDP_resetSprites(); // Load Swirls VDP_loadTileData(swirls, TILE_USERINDEX, 20, TRUE); VDP_loadTileData(title_screen, TILE_USERINDEX + 20, 15, TRUE); VDP_loadTileData(swirl_spr, TILE_USERINDEX + 35, 20, TRUE); VDP_setPalette(PAL1, swirl_pal); VDP_setPalette(PAL2, sel_pal); VDP_setPalette(PAL3, ts_pal); JOY_init(); JOY_setEventHandler(titleHandler); ImageAsset* title = getImage(titlbg); VDP_setPalette(PAL0, title->palette); VDP_loadTileData(title->tiles, TILE_USERINDEX + 55, (title->xTiles * title->yTiles), TRUE); VDP_fillTileMapRectInc(VDP_PLAN_B, TILE_ATTR_FULL(PAL0, PRIORITY_LOW, FALSE, FALSE, TILE_USERINDEX + 55), 0, 0, title->xTiles, title->yTiles); MEM_free( title ); VDP_fillTileMapRectInc(VDP_PLAN_A, TILE_ATTR_FULL(PAL3, PRIORITY_LOW, FALSE, FALSE, TILE_USERINDEX + 20), 18, 3, 5, 3); VDP_drawText("Mega Swirl", 1, 7); VDP_drawText("Testing Demo", 1, 8); VDP_drawText(VERSION_STRING, 1, 9); VDP_drawText("Music from Deflemask by", 1, 11); VDP_drawText("Delek", 1, 12); VDP_drawText("Featuring artwork by", 1, 14); VDP_drawText("Radioactivemantaray", 1, 15); VDP_drawText("- Press Start to Play -", 1, 21); VDP_drawText(BUILD_DATE, 1, 24); u8 selected_swirl; for(int i = 0; i != TITLE_SCREEN_SNOWFLAKES; i++) { snowflakes[i].startedAt = snowflakes[i].startDelay = snowflakes[i].fallRate = snowflakes[i].swirltype = 0; sfdefs[i].posx = sfdefs[i].posy = sfdefs[i].tile_attr = sfdefs[i].size = sfdefs[i].link = 0; selected_swirl = (custrand() % 4); snowflakes[i].swirltype = selected_swirl; // Select one of four swirl types snowflakes[i].startDelay = ((custrand() % 3000) + 1) / 300; // Select between a 1-10 second delay (300 ticks per second) snowflakes[i].startedAt = getTick(); // Time when this snowflake was created snowflakes[i].fallRate = (custrand() % 2) + 1; // Select how fast this snowflake should fall to the bottom of the screen sfdefs[i].posx = (custrand() % 320); // Select X position for this swirl sfdefs[i].posy = -16; // Start it off screen sfdefs[i].size = SPRITE_SIZE(2, 2); sfdefs[i].tile_attr = TILE_ATTR_FULL(PAL1, PRIORITY_HIGH, FALSE, FALSE, TILE_USERINDEX + 35 + (4 * selected_swirl)); // This will need to be changed as we need tiles arranged for sprites if(i != 0) { sfdefs[i - 1].link = i; } } VDP_setSpritesDirect(0, sfdefs, TITLE_SCREEN_SNOWFLAKES); Z80_loadDriver(Z80_DRIVER_VGM, 1); Z80_requestBus(1); YM2612_enableDAC(); Z80_releaseBus(); SND_startPlay_VGM(muz_title); while (waitflag == FALSE) { for(int i = 0; i != TITLE_SCREEN_SNOWFLAKES; i++) { if(getTick() - snowflakes[i].startedAt >= snowflakes[i].startDelay) { if(sfdefs[i].posy != 240) { sfdefs[i].posy = sfdefs[i].posy + snowflakes[i].fallRate; } else { selected_swirl = (custrand() % 4); snowflakes[i].startDelay = ((custrand() % 3000) + 1) / 300; snowflakes[i].startedAt = getTick(); snowflakes[i].fallRate = (custrand() % 2) + 1; sfdefs[i].posx = (custrand() % 320); sfdefs[i].posy = -16; } } VDP_setSpritesDirect(0, sfdefs, TITLE_SCREEN_SNOWFLAKES); } } waitflag = FALSE; srand(GET_HVCOUNTER); VDP_clearPlan(APLAN, FALSE); JOY_setEventHandler(joyHandler); ImageAsset* test = getImage(swlspace); VDP_setPalette(PAL0, test->palette); VDP_loadTileData(test->tiles, TILE_USERINDEX + 55, (test->xTiles * test->yTiles), TRUE); VDP_fillTileMapRectInc(VDP_PLAN_B, TILE_ATTR_FULL(PAL0, PRIORITY_LOW, FALSE, FALSE, TILE_USERINDEX + 55), 0, 0, test->xTiles, test->yTiles); MEM_free( test ); SND_stopPlay_VGM(); }