Esempio n. 1
0
File: Game.c Progetto: yoyz/genesis
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;

        }
    }
}
Esempio n. 2
0
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);
	}
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
}
Esempio n. 6
0
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();
}