Пример #1
0
    // constuctor
    cParticle::cParticle(float _x, float _y, int _dir = 0, 
                               float _speed = 0, 
                          int frames = 1, bool _fade = false, 
                          bool _autorot = false, bool _scale = false, int _z = 0) {
                
  		z = _z;
		x = _x;
		y = _y;
		speed = _speed;
		dir = _dir;
		dx = (Sin2(dir) * speed); 
		dy = (-Cos2(dir) * speed);
		da = 1.0 / frames;
		a = 1.0;
		s = 1.0;
		maxdistance = frames;
		if(dir > 0&&_autorot > 0){
			r = dir;
		}

		if(_fade > 0) {
			fade = true;
        }
		if(_autoscale > 0)  {
			scale = true;
		}
                               
    
    }
Пример #2
0
static void BattleIntroTask_FadeScenery(u8 taskId)
{
    s32 i;

    switch (gTasks[taskId].data[1])
    {
    case 2:
    case 4:
        gBattle_BG1_X += 8;
        break;
    case 3:
        gBattle_BG1_X += 6;
        break;
    }

    if (gTasks[taskId].data[1] == 4)
    {
        gBattle_BG1_Y = Cos2(gTasks[taskId].data[6]) / 512 - 8;
        if (gTasks[taskId].data[6] < 0xB4)
            gTasks[taskId].data[6] += 4;
        else
            gTasks[taskId].data[6] += 6;
        if (gTasks[taskId].data[6] == 0x168)
            gTasks[taskId].data[6] = 0;
    }

    switch (gTasks[taskId].tState)
    {
    case 0:
        gTasks[taskId].data[4] = 16;
        if (gBattleTypeFlags & BATTLE_TYPE_LINK)
        {
            gTasks[taskId].tBgXOffset = 16;
            gTasks[taskId].tState++;
        }
        else
        {
            gTasks[taskId].tBgXOffset = 1;
            gTasks[taskId].tState++;
        }
        break;
    case 1:
        gTasks[taskId].tBgXOffset--;
        if (gTasks[taskId].tBgXOffset == 0)
        {
            gTasks[taskId].tState++;
            REG_WININ = 0x3F;
        }
        break;
    case 2:
        // Open up window
        gBattle_WIN0V -= WIN_RANGE(1, 0);  // decrement min Y
        gBattle_WIN0V += WIN_RANGE(0, 1);  // increment max Y
        if ((gBattle_WIN0V & 0xFF00) == 0x3000)
        {
            gTasks[taskId].tState++;
            gTasks[taskId].tBgXOffset = DISPLAY_WIDTH;
            gTasks[taskId].tFramesUntilBg1Slide = 32;
            gTasks[taskId].data[5] = 1;
            gUnknown_02024DE8 &= ~1;
        }
        break;
    case 3:
        if (gTasks[taskId].tFramesUntilBg1Slide != 0)
        {
            gTasks[taskId].tFramesUntilBg1Slide--;
            if (gTasks[taskId].tFramesUntilBg1Slide == 0)
            {
                REG_BLDCNT = 0x1842;
                REG_BLDALPHA = 0xF;
                REG_BLDY = 0;
            }
        }
        else
        {
            if ((gTasks[taskId].data[4] & 0x1F) && --gTasks[taskId].data[5] == 0)
            {
                gTasks[taskId].data[4] += 255;
                gTasks[taskId].data[5] = 4;
            }
        }

        if ((gBattle_WIN0V & 0xFF00) != 0)
            gBattle_WIN0V -= 1020;

        if (gTasks[taskId].tBgXOffset != 0)
            gTasks[taskId].tBgXOffset -= 2;

        // Slide in the top half of the BG from the left
        for (i = 0; i < DISPLAY_HEIGHT / 2; i++)
            gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].tBgXOffset;
        // Slide in the bottom half of the BG from the right
        for (; i < DISPLAY_HEIGHT; i++)
            gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].tBgXOffset;

        if (gTasks[taskId].tBgXOffset == 0)
        {
            gScanlineEffect.state = 3;
            gTasks[taskId].tState++;
            CpuFill32(0, (void *)(VRAM + 0xE000), 0x800);
            REG_BG1CNT = 0x9C00;
            REG_BG2CNT = 0x5E00;
        }
        break;
    case 4:
        EndBattleIntroTask(taskId);
        break;
    }

    if (gTasks[taskId].tState != 4)
        REG_BLDALPHA = gTasks[taskId].data[4];
}