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 + -
显示快捷键?