Changeset 576


Ignore:
Timestamp:
May 2, 2011, 2:28:20 PM (6 years ago)
Author:
sam
Message:

game: properly time the fade in and fade out effects, as well as the
introduction scrolling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • abuse/trunk/src/game.cpp

    r575 r576  
    11621162extern int start_doubled;
    11631163
    1164 static template<int N> Fade(image *im, int steps)
    1165 {
     1164template<int N> static void Fade(image *im, int steps)
     1165{
     1166    /* 25ms per step */
     1167    float const duration = 25.f;
     1168
    11661169    palette *old_pal = pal->copy();
    11671170
     
    11731176    }
    11741177
    1175     for (int i = 0; i < steps; i++)
    1176     {
     1178    for (Timer total; total.PollMs() < duration * steps; )
     1179    {
     1180        Timer frame;
    11771181        uint8_t *sl1 = (uint8_t *)pal->addr();
    11781182        uint8_t *sl2 = (uint8_t *)old_pal->addr();
     1183        int i = (int)(total.PollMs() / duration);
    11791184        int v = (N ? i + 1 : steps - i) * 256 / steps;
    1180         for (int j = 0; j < 256; j++)
    1181         {
    1182             *sl1 = (int)*sl2++ * v / 256;
    1183             *sl1 = (int)*sl2++ * v / 256;
    1184             *sl1 = (int)*sl2++ * v / 256;
    1185         }
     1185
     1186        for (int j = 0; j < 3 * 256; j++)
     1187            *sl1++ = (int)*sl2++ * v / 256;
     1188
    11861189        pal->load();
    11871190        wm->flush_screen();
    1188         milli_wait(25);
     1191        frame.WaitMs(duration);
    11891192    }
    11901193
     
    12011204void fade_in(image *im, int steps)
    12021205{
    1203     Fade<1>(NULL, steps);
     1206    Fade<1>(im, steps);
    12041207}
    12051208
     
    12491252    milli_wait(100);
    12501253
    1251     int i;
    12521254    char *str = lstring_value(LSymbol::FindOrCreate("plot_start")->Eval());
    12531255
     
    12641266
    12651267        char nm[20];
    1266         for(i = 0; i < 5; i++)
     1268        for (int i = 0; i < 5; i++)
    12671269        {
    12681270            sprintf(nm, "smoke%04d.pcx", i + 1);
     
    12791281        fade_in(NULL, 16);
    12801282        uint8_t cmap[32];
    1281         for(i = 0; i < 32; i++)
     1283        for(int i = 0; i < 32; i++)
    12821284        cmap[i] = pal->find_closest(i * 256 / 32, i * 256 / 32, i * 256 / 32);
    12831285
    12841286        event ev;
    12851287        ev.type = EV_SPURIOUS;
    1286         time_marker start;
    1287 
    1288         for(i = 0; i < 320 && (ev.type != EV_KEY && ev.type != EV_MOUSE_BUTTON); i++)
    1289         {
     1288        Timer total;
     1289
     1290        while (ev.type != EV_KEY && ev.type != EV_MOUSE_BUTTON)
     1291        {
     1292            Timer frame;
     1293
     1294            // 100 ms per step
     1295            int i = (int)(total.PollMs() / 100.f);
     1296            if (i >= 320)
     1297                break;
     1298
    12901299            gray->put_image(screen, dx, dy);
    12911300            smoke[i % 5]->put_image(screen, dx + 24, dy + 5);
     
    12941303            time_marker now;
    12951304
    1296             while(now.diff_time(&start) < 0.18)
    1297             {
    1298                 milli_wait(20); // ECS - Added the wait, so CPU utilization stays low during the story
    1299                 now.get_time();
    1300             }
    1301 
    1302             start.get_time();
    1303 
    13041305            while(wm->event_waiting() && ev.type != EV_KEY)
    1305             {
    13061306                wm->get_event(ev);
    1307             }
     1307
    13081308            if((i % 5) == 0 && DEFINEDP(space_snd) && (sound_avail & SFX_INITIALIZED))
    1309             {
    13101309                cache.sfx(lnumber_value(space_snd))->play(sfx_volume * 90 / 127);
    1311             }
     1310
     1311            frame.WaitMs(25.f);
    13121312        }
    13131313
     
    13161316        fade_out(16);
    13171317
    1318         for(i = 0; i < 5; i++)
     1318        for (int i = 0; i < 5; i++)
    13191319            delete smoke[i];
    13201320        delete gray;
Note: See TracChangeset for help on using the changeset viewer.