// 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; } }
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]; }