goom_core.c
来自「linux下的MPEG1」· C语言 代码 · 共 894 行 · 第 1/3 页
C
894 行
case 8: case 18: case 19: goomInfo->update.zoomFilterData.mode = SCRUNCH_MODE; goomInfo->update.zoomFilterData.waveEffect = 1; goomInfo->update.zoomFilterData.hypercosEffect = 1; break; case 29: case 30: goomInfo->update.zoomFilterData.mode = YONLY_MODE; break; case 31: case 32: case 33: goomInfo->update.zoomFilterData.mode = SPEEDWAY_MODE; break; default: goomInfo->update.zoomFilterData.mode = NORMAL_MODE; goomInfo->update.zoomFilterData.waveEffect = 0; goomInfo->update.zoomFilterData.hypercosEffect = 0; } } /* tout ceci ne sera fait qu'en cas de non-blocage */ if (goomInfo->update.lockvar == 0) { /* reperage de goom (acceleration forte de l'acceleration du volume) */ /* -> coup de boost de la vitesse si besoin.. */ if (goomInfo->sound.timeSinceLastGoom == 0) { int i; goomInfo->update.goomvar++; /* SELECTION OF THE GOOM STATE */ if ((!goomInfo->update.stateSelectionBlocker)&&(goom_irand(goomInfo->gRandom,3))) { goomInfo->update.stateSelectionRnd = goom_irand(goomInfo->gRandom,goomInfo->statesRangeMax); goomInfo->update.stateSelectionBlocker = 3; } else if (goomInfo->update.stateSelectionBlocker) goomInfo->update.stateSelectionBlocker--; for (i=0;i<goomInfo->statesNumber;i++) if ((goomInfo->update.stateSelectionRnd >= goomInfo->states[i].rangemin) && (goomInfo->update.stateSelectionRnd <= goomInfo->states[i].rangemax)) goomInfo->curGState = &(goomInfo->states[i]); if ((goomInfo->curGState->drawIFS) && (goomInfo->update.ifs_incr<=0)) { goomInfo->update.recay_ifs = 5; goomInfo->update.ifs_incr = 11; } if ((!goomInfo->curGState->drawIFS) && (goomInfo->update.ifs_incr>0) && (goomInfo->update.decay_ifs<=0)) goomInfo->update.decay_ifs = 100; if (!goomInfo->curGState->drawScope) goomInfo->update.stop_lines = 0xf000 & 5; if (!goomInfo->curGState->drawScope) { goomInfo->update.stop_lines = 0; goomInfo->update.lineMode = goomInfo->update.drawLinesDuration; } /* if (goomInfo->update.goomvar % 1 == 0) */ { guint32 vtmp; guint32 newvit; goomInfo->update.lockvar = 50; newvit = STOP_SPEED + 1 - ((float)3.5f * log10(goomInfo->sound.speedvar * 60 + 1)); /* retablir le zoom avant.. */ if ((goomInfo->update.zoomFilterData.reverse) && (!(goomInfo->cycle % 13)) && (rand () % 5 == 0)) { goomInfo->update.zoomFilterData.reverse = 0; goomInfo->update.zoomFilterData.vitesse = STOP_SPEED - 2; goomInfo->update.lockvar = 75; } if (goom_irand(goomInfo->gRandom,10) == 0) { goomInfo->update.zoomFilterData.reverse = 1; goomInfo->update.lockvar = 100; } if (goom_irand(goomInfo->gRandom,10) == 0) goomInfo->update.zoomFilterData.vitesse = STOP_SPEED - 1; if (goom_irand(goomInfo->gRandom,12) == 0) goomInfo->update.zoomFilterData.vitesse = STOP_SPEED + 1; /* changement de milieu.. */ switch (goom_irand(goomInfo->gRandom,25)) { case 0: case 3: case 6: goomInfo->update.zoomFilterData.middleY = goomInfo->screen.height - 1; goomInfo->update.zoomFilterData.middleX = goomInfo->screen.width / 2; break; case 1: case 4: goomInfo->update.zoomFilterData.middleX = goomInfo->screen.width - 1; break; case 2: case 5: goomInfo->update.zoomFilterData.middleX = 1; break; default: goomInfo->update.zoomFilterData.middleY = goomInfo->screen.height / 2; goomInfo->update.zoomFilterData.middleX = goomInfo->screen.width / 2; } if ((goomInfo->update.zoomFilterData.mode == WATER_MODE) || (goomInfo->update.zoomFilterData.mode == YONLY_MODE) || (goomInfo->update.zoomFilterData.mode == AMULETTE_MODE)) { goomInfo->update.zoomFilterData.middleX = goomInfo->screen.width / 2; goomInfo->update.zoomFilterData.middleY = goomInfo->screen.height / 2; } switch (vtmp = (goom_irand(goomInfo->gRandom,15))) { case 0: goomInfo->update.zoomFilterData.vPlaneEffect = goom_irand(goomInfo->gRandom,3) - goom_irand(goomInfo->gRandom,3); goomInfo->update.zoomFilterData.hPlaneEffect = goom_irand(goomInfo->gRandom,3) - goom_irand(goomInfo->gRandom,3); break; case 3: goomInfo->update.zoomFilterData.vPlaneEffect = 0; goomInfo->update.zoomFilterData.hPlaneEffect = goom_irand(goomInfo->gRandom,8) - goom_irand(goomInfo->gRandom,8); break; case 4: case 5: case 6: case 7: goomInfo->update.zoomFilterData.vPlaneEffect = goom_irand(goomInfo->gRandom,5) - goom_irand(goomInfo->gRandom,5); goomInfo->update.zoomFilterData.hPlaneEffect = -goomInfo->update.zoomFilterData.vPlaneEffect; break; case 8: goomInfo->update.zoomFilterData.hPlaneEffect = 5 + goom_irand(goomInfo->gRandom,8); goomInfo->update.zoomFilterData.vPlaneEffect = -goomInfo->update.zoomFilterData.hPlaneEffect; break; case 9: goomInfo->update.zoomFilterData.vPlaneEffect = 5 + goom_irand(goomInfo->gRandom,8); goomInfo->update.zoomFilterData.hPlaneEffect = -goomInfo->update.zoomFilterData.hPlaneEffect; break; case 13: goomInfo->update.zoomFilterData.hPlaneEffect = 0; goomInfo->update.zoomFilterData.vPlaneEffect = goom_irand(goomInfo->gRandom,10) - goom_irand(goomInfo->gRandom,10); break; case 14: goomInfo->update.zoomFilterData.hPlaneEffect = goom_irand(goomInfo->gRandom,10) - goom_irand(goomInfo->gRandom,10); goomInfo->update.zoomFilterData.vPlaneEffect = goom_irand(goomInfo->gRandom,10) - goom_irand(goomInfo->gRandom,10); break; default: if (vtmp < 10) { goomInfo->update.zoomFilterData.vPlaneEffect = 0; goomInfo->update.zoomFilterData.hPlaneEffect = 0; } } if (goom_irand(goomInfo->gRandom,5) != 0) goomInfo->update.zoomFilterData.noisify = 0; else { goomInfo->update.zoomFilterData.noisify = goom_irand(goomInfo->gRandom,2) + 1; goomInfo->update.lockvar *= 2; } if (goomInfo->update.zoomFilterData.mode == AMULETTE_MODE) { goomInfo->update.zoomFilterData.vPlaneEffect = 0; goomInfo->update.zoomFilterData.hPlaneEffect = 0; goomInfo->update.zoomFilterData.noisify = 0; } if ((goomInfo->update.zoomFilterData.middleX == 1) || (goomInfo->update.zoomFilterData.middleX == (signed int)goomInfo->screen.width - 1)) { goomInfo->update.zoomFilterData.vPlaneEffect = 0; if (goom_irand(goomInfo->gRandom,2)) goomInfo->update.zoomFilterData.hPlaneEffect = 0; } if ((signed int)newvit < goomInfo->update.zoomFilterData.vitesse) /* on accelere */ { pzfd = &goomInfo->update.zoomFilterData; if (((newvit < STOP_SPEED - 7) && (goomInfo->update.zoomFilterData.vitesse < STOP_SPEED - 6) && (goomInfo->cycle % 3 == 0)) || (goom_irand(goomInfo->gRandom,40) == 0)) { goomInfo->update.zoomFilterData.vitesse = STOP_SPEED - goom_irand(goomInfo->gRandom,2) + goom_irand(goomInfo->gRandom,2); goomInfo->update.zoomFilterData.reverse = !goomInfo->update.zoomFilterData.reverse; } else { goomInfo->update.zoomFilterData.vitesse = (newvit + goomInfo->update.zoomFilterData.vitesse * 7) / 8; } goomInfo->update.lockvar += 50; } } if (goomInfo->update.lockvar > 150) { goomInfo->update.switchIncr = goomInfo->update.switchIncrAmount; goomInfo->update.switchMult = 1.0f; } } /* mode mega-lent */ if (goom_irand(goomInfo->gRandom,700) == 0) { /* * printf ("coup du sort...\n") ; */ pzfd = &goomInfo->update.zoomFilterData; goomInfo->update.zoomFilterData.vitesse = STOP_SPEED - 1; goomInfo->update.zoomFilterData.pertedec = 8; goomInfo->update.zoomFilterData.sqrtperte = 16; goomInfo->update.goomvar = 1; goomInfo->update.lockvar += 50; goomInfo->update.switchIncr = goomInfo->update.switchIncrAmount; goomInfo->update.switchMult = 1.0f; } } /* * gros frein si la musique est calme */ if ((goomInfo->sound.speedvar < 0.01f) && (goomInfo->update.zoomFilterData.vitesse < STOP_SPEED - 4) && (goomInfo->cycle % 16 == 0)) { pzfd = &goomInfo->update.zoomFilterData; goomInfo->update.zoomFilterData.vitesse += 3; goomInfo->update.zoomFilterData.pertedec = 8; goomInfo->update.zoomFilterData.sqrtperte = 16; goomInfo->update.goomvar = 0; } /* * baisser regulierement la vitesse... */ if ((goomInfo->cycle % 73 == 0) && (goomInfo->update.zoomFilterData.vitesse < STOP_SPEED - 5)) { pzfd = &goomInfo->update.zoomFilterData; goomInfo->update.zoomFilterData.vitesse++; } /* * arreter de decrémenter au bout d'un certain temps */ if ((goomInfo->cycle % 101 == 0) && (goomInfo->update.zoomFilterData.pertedec == 7)) { pzfd = &goomInfo->update.zoomFilterData; goomInfo->update.zoomFilterData.pertedec = 8; goomInfo->update.zoomFilterData.sqrtperte = 16; } /* * Permet de forcer un effet. */ if ((forceMode > 0) && (forceMode <= NB_FX)) { pzfd = &goomInfo->update.zoomFilterData; pzfd->mode = forceMode - 1; } if (forceMode == -1) { pzfd = NULL; } /* * Changement d'effet de zoom ! */ if (pzfd != NULL) { int dif; goomInfo->update.cyclesSinceLastChange = 0; goomInfo->update.switchIncr = goomInfo->update.switchIncrAmount; dif = goomInfo->update.zoomFilterData.vitesse - goomInfo->update.previousZoomSpeed; if (dif < 0) dif = -dif; if (dif > 2) { goomInfo->update.switchIncr *= (dif + 2) / 2; } goomInfo->update.previousZoomSpeed = goomInfo->update.zoomFilterData.vitesse; goomInfo->update.switchMult = 1.0f; if (((goomInfo->sound.timeSinceLastGoom == 0) && (goomInfo->sound.totalgoom < 2)) || (forceMode > 0)) { goomInfo->update.switchIncr = 0; goomInfo->update.switchMult = goomInfo->update.switchMultAmount; } } else { if (goomInfo->update.cyclesSinceLastChange > TIME_BTW_CHG) { pzfd = &goomInfo->update.zoomFilterData; goomInfo->update.cyclesSinceLastChange = 0; } else goomInfo->update.cyclesSinceLastChange++; } #ifdef VERBOSE if (pzfd) { printf ("GOOM: pzfd->mode = %d\n", pzfd->mode); }#endif /* Zoom here ! */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?