Ignore:
Timestamp:
Dec 15, 2002, 4:41:32 AM (17 years ago)
Author:
Sam Hocevar
Message:
  • real Debian package files.
  • two new types of aliens. only one rules.
  • removed gfx_write in favor of gfx_putchar and gfx_putstr.
  • added bonuses at alien death. they do nothing yet.
  • seeker missiles. 'b' to test.
  • weapon resolution is now 16*char. needs to be generalized.
  • fixed the supernova bugs. center could collide with the tunnel, and the last frame was badly displayed.
  • lots of cleanups everywhere.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • ttyvaders/trunk/src/explosions.c

    r18 r20  
    55
    66static void draw_small_explosion( int x, int y, int frame );
    7 static void draw_big_explosion( int x, int y, int frame );
     7static void draw_medium_explosion( int x, int y, int frame );
    88
    99void init_explosions( game *g, explosions *ex )
     
    1313    for( i = 0; i < EXPLOSIONS; i++ )
    1414    {
    15         ex->n[i] = 0;
    16         ex->x[i] = -1;
    17         ex->y[i] = -1;
    18         ex->vx[i] = -1;
    19         ex->vy[i] = -1;
    20         ex->type[i] = 0;
     15        ex->type[i] = EXPLOSION_NONE;
    2116    }
    2217}
     
    2823    for( i = 0; i < EXPLOSIONS; i++ )
    2924    {
    30         if( ex->n[i] <= 0 )
    31         {
     25        if( ex->type[i] == EXPLOSION_NONE )
     26        {
     27            ex->type[i] = type;
    3228            ex->x[i] = x;
    3329            ex->y[i] = y;
     
    3632            switch( type )
    3733            {
    38                 case 1: ex->n[i] = 13; break;
    39                 case 2: ex->n[i] = 30; break;
    40                 case 0: default: ex->n[i] = 7; break;
     34                case EXPLOSION_MEDIUM:
     35                    ex->n[i] = 11;
     36                    break;
     37                case EXPLOSION_SMALL:
     38                    ex->n[i] = 7;
     39                    break;
    4140            }
    42             ex->type[i] = type;
    4341            break;
    4442        }
     
    5250    for( i = 0; i < EXPLOSIONS; i++ )
    5351    {
    54         if( ex->n[i] <= 0 )
    55         {
    56             continue;
    57         }
    58 
    5952#if 0
    60         GFX_COLOR( GREEN );
    61         GFX_GOTO( ex->x[i] + 3, ex->y[i] );
     53        gfx_color( GREEN );
     54        gfx_goto( ex->x[i] + 3, ex->y[i] );
    6255        switch( GET_RAND(0,3) )
    6356        {
    6457        case 0:
    65             GFX_WRITE( 'p' );
    66             GFX_WRITE( 'i' );
    67             GFX_WRITE( 'f' );
     58            gfx_putchar( 'p' );
     59            gfx_putchar( 'i' );
     60            gfx_putchar( 'f' );
    6861            break;
    6962        case 1:
    70             GFX_WRITE( 'p' );
    71             GFX_WRITE( 'a' );
    72             GFX_WRITE( 'f' );
     63            gfx_putchar( 'p' );
     64            gfx_putchar( 'a' );
     65            gfx_putchar( 'f' );
    7366            break;
    7467        case 2:
    75             GFX_WRITE( 'p' );
    76             GFX_WRITE( 'o' );
    77             GFX_WRITE( 'u' );
    78             GFX_WRITE( 'f' );
    79             break;
    80         }
    81         GFX_WRITE( '!' );
     68            gfx_putchar( 'p' );
     69            gfx_putchar( 'o' );
     70            gfx_putchar( 'u' );
     71            gfx_putchar( 'f' );
     72            break;
     73        }
     74        gfx_putchar( '!' );
    8275#endif
    8376
    8477        switch( ex->type[i] )
    8578        {
    86             case 1:
    87                 draw_big_explosion( ex->x[i], ex->y[i], ex->n[i] );
    88                 break;
    89             case 0:
    90             default:
     79            case EXPLOSION_MEDIUM:
     80                draw_medium_explosion( ex->x[i], ex->y[i], ex->n[i] );
     81                break;
     82            case EXPLOSION_SMALL:
    9183                draw_small_explosion( ex->x[i], ex->y[i], ex->n[i] );
    9284                break;
    93         }
    94 
     85            case EXPLOSION_NONE:
     86                break;
     87        }
    9588    }
    9689}
     
    10295    for( i = 0; i < EXPLOSIONS; i++ )
    10396    {
    104         if( ex->n[i] > 0 )
    105         {
    106             ex->x[i] += ex->vx[i];
    107             ex->y[i] += ex->vy[i];
    108             ex->n[i]--;
     97        switch( ex->type[i] )
     98        {
     99            case EXPLOSION_MEDIUM:
     100            case EXPLOSION_SMALL:
     101                ex->x[i] += ex->vx[i];
     102                ex->y[i] += ex->vy[i];
     103                ex->n[i]--;
     104                if( ex->n[i] < 0 )
     105                {
     106                    ex->type[i] = EXPLOSION_NONE;
     107                }
     108                break;
     109            case EXPLOSION_NONE:
     110                break;
    109111        }
    110112    }
     
    115117    switch( frame )
    116118    {
    117     default:
    118119    case 6:
    119         GFX_COLOR( YELLOW );
    120         GFX_GOTO( x, y );
    121         GFX_WRITE( '+' );
     120        gfx_color( YELLOW );
     121        gfx_goto( x, y );
     122        gfx_putchar( '+' );
    122123        break;
    123124    case 5:
    124         GFX_COLOR( YELLOW );
    125         GFX_GOTO( x, y );
    126         GFX_WRITE( 'o' );
     125        gfx_color( YELLOW );
     126        gfx_goto( x, y );
     127        gfx_putchar( 'o' );
    127128        break;
    128129    case 4:
    129         GFX_COLOR( YELLOW );
    130         GFX_GOTO( x, y-1 );
    131         GFX_WRITE( '_' );
    132         GFX_GOTO( x-1, y );
    133         GFX_WRITE( ')' );
    134         GFX_WRITE( '_' );
    135         GFX_WRITE( '(' );
     130        gfx_color( YELLOW );
     131        gfx_goto( x, y-1 );
     132        gfx_putchar( '_' );
     133        gfx_goto( x-1, y );
     134        gfx_putstr( ")_(" );
    136135        break;
    137136    case 3:
    138         GFX_COLOR( YELLOW );
    139         GFX_GOTO( x-1, y-1 );
    140         GFX_WRITE( '.' );
    141         GFX_WRITE( '_' );
    142         GFX_WRITE( ',' );
    143         GFX_GOTO( x-1, y );
    144         GFX_WRITE( ')' );
    145         GFX_WRITE( '_' );
    146         GFX_WRITE( '(' );
    147         GFX_GOTO( x-1, y+1 );
    148         GFX_WRITE( '\'' );
    149         GFX_WRITE( ' ' );
    150         GFX_WRITE( '`' );
     137        gfx_color( YELLOW );
     138        gfx_goto( x-1, y-1 );
     139        gfx_putstr( "._," );
     140        gfx_goto( x-1, y );
     141        gfx_putstr( ")_(" );
     142        gfx_goto( x-1, y+1 );
     143        gfx_putstr( "\' `" );
    151144        break;
    152145    case 2:
    153         GFX_COLOR( YELLOW );
    154         GFX_GOTO( x-1, y-1 );
    155         GFX_WRITE( '.' );
    156         GFX_WRITE( 'v' );
    157         GFX_WRITE( ',' );
    158         GFX_GOTO( x-1, y );
    159         GFX_WRITE( '>' );
    160         GFX_WRITE( ' ' );
    161         GFX_WRITE( '<' );
    162         GFX_GOTO( x-1, y+1 );
    163         GFX_WRITE( '\'' );
    164         GFX_WRITE( '^' );
    165         GFX_WRITE( '`' );
     146        gfx_color( YELLOW );
     147        gfx_goto( x-1, y-1 );
     148        gfx_putstr( ".v," );
     149        gfx_goto( x-1, y );
     150        gfx_putstr( "> <" );
     151        gfx_goto( x-1, y+1 );
     152        gfx_putstr( "\'^`" );
    166153        break;
    167154    case 1:
    168         GFX_COLOR( WHITE );
    169         GFX_GOTO( x-1, y-1 );
    170         GFX_WRITE( '.' );
    171         GFX_WRITE( ' ' );
    172         GFX_WRITE( ',' );
    173         GFX_GOTO( x-1, y );
    174         GFX_WRITE( ' ' );
    175         GFX_WRITE( ' ' );
    176         GFX_WRITE( ' ' );
    177         GFX_GOTO( x-1, y+1 );
    178         GFX_WRITE( '\'' );
    179         GFX_WRITE( ' ' );
    180         GFX_WRITE( '`' );
    181         break;
    182     }
    183 }
    184 
    185 static void draw_big_explosion( int x, int y, int frame )
    186 {
    187     GFX_COLOR( YELLOW );
     155        gfx_color( WHITE );
     156        gfx_goto( x-1, y-1 );
     157        gfx_putstr( ". ," );
     158        gfx_goto( x-1, y );
     159        gfx_putstr( "   " );
     160        gfx_goto( x-1, y+1 );
     161        gfx_putstr( "\' `" );
     162        break;
     163    }
     164}
     165
     166static void draw_medium_explosion( int x, int y, int frame )
     167{
     168    gfx_color( YELLOW );
    188169
    189170    switch( frame )
    190171    {
    191     default:
    192     case 12:
    193         GFX_GOTO( x, y );
    194         GFX_WRITE( '+' );
    195         break;
    196     case 11:
    197         GFX_GOTO( x, y );
    198         GFX_WRITE( 'o' );
    199         break;
    200172    case 10:
    201         GFX_GOTO( x, y-1 );
    202         GFX_WRITE( '_' );
    203         GFX_GOTO( x-1, y );
    204         GFX_WRITE( ')' );
    205         GFX_WRITE( '_' );
    206         GFX_WRITE( '(' );
     173        gfx_goto( x, y );
     174        gfx_putchar( '+' );
    207175        break;
    208176    case 9:
    209         GFX_GOTO( x-1, y-1 );
    210         GFX_WRITE( '.' );
    211         GFX_WRITE( '_' );
    212         GFX_WRITE( ',' );
    213         GFX_GOTO( x-1, y );
    214         GFX_WRITE( ')' );
    215         GFX_WRITE( '_' );
    216         GFX_WRITE( '(' );
    217         GFX_GOTO( x-1, y+1 );
    218         GFX_WRITE( '\'' );
    219         GFX_WRITE( ' ' );
    220         GFX_WRITE( '`' );
     177        gfx_goto( x, y );
     178        gfx_putchar( 'o' );
    221179        break;
    222180    case 8:
    223         GFX_GOTO( x-1, y-1 );
    224         GFX_WRITE( '.' );
    225         GFX_WRITE( 'v' );
    226         GFX_WRITE( ',' );
    227         GFX_GOTO( x-1, y );
    228         GFX_WRITE( '>' );
    229         GFX_WRITE( ' ' );
    230         GFX_WRITE( '<' );
    231         GFX_GOTO( x-1, y+1 );
    232         GFX_WRITE( '\'' );
    233         GFX_WRITE( '^' );
    234         GFX_WRITE( '`' );
     181        gfx_goto( x, y-1 );
     182        gfx_putchar( '_' );
     183        gfx_goto( x-1, y );
     184        gfx_putstr( ")_(" );
     185        break;
     186    case 7:
     187        gfx_goto( x-1, y-1 );
     188        gfx_putstr( "._," );
     189        gfx_goto( x-1, y );
     190        gfx_putstr( ")_(" );
     191        gfx_goto( x-1, y+1 );
     192        gfx_putstr( "\' `" );
    235193        break;
    236194    case 6:
    237         GFX_COLOR( RED );
    238     case 7:
     195        gfx_goto( x-1, y-1 );
     196        gfx_putstr( ".v," );
     197        gfx_goto( x-1, y );
     198        gfx_putstr( "> <" );
     199        gfx_goto( x-1, y+1 );
     200        gfx_putstr( "\'^`" );
     201        break;
    239202    case 5:
    240         GFX_GOTO( x-2, y-1 );
    241         GFX_WRITE( '_' );
    242         GFX_WRITE( '\\' );
    243         GFX_WRITE( '~' );
    244         GFX_WRITE( '/' );
    245         GFX_WRITE( '_' );
    246         GFX_GOTO( x-2, y );
    247         GFX_WRITE( '>' );
    248         GFX_WRITE( ' ' );
    249         GFX_WRITE( ' ' );
    250         GFX_WRITE( ' ' );
    251         GFX_WRITE( '<' );
    252         GFX_GOTO( x-2, y+1 );
    253         GFX_WRITE( '~' );
    254         GFX_WRITE( '/' );
    255         GFX_WRITE( '_' );
    256         GFX_WRITE( '\\' );
    257         GFX_WRITE( '~' );
     203        gfx_color( RED );
     204    case 4:
     205        gfx_goto( x-2, y-1 );
     206        gfx_putstr( "_\\~/_" );
     207        gfx_goto( x-2, y );
     208        gfx_putstr( ">   <" );
     209        gfx_goto( x-2, y+1 );
     210        gfx_putstr( "~/_\\~" );
    258211        break;
    259212    case 3:
    260         GFX_COLOR( RED );
    261     case 4:
     213        gfx_color( RED );
    262214    case 2:
    263         GFX_GOTO( x-2, y-1 );
    264         GFX_WRITE( '_' );
    265         GFX_WRITE( '\\' );
    266         GFX_WRITE( ' ' );
    267         GFX_WRITE( '/' );
    268         GFX_WRITE( '_' );
    269         GFX_GOTO( x-2, y );
    270         GFX_WRITE( '_' );
    271         GFX_WRITE( ' ' );
    272         GFX_WRITE( ' ' );
    273         GFX_WRITE( ' ' );
    274         GFX_WRITE( '_' );
    275         GFX_GOTO( x-2, y+1 );
    276         GFX_WRITE( ' ' );
    277         GFX_WRITE( '/' );
    278         GFX_WRITE( ' ' );
    279         GFX_WRITE( '\\' );
    280         GFX_WRITE( ' ' );
     215        gfx_goto( x-2, y-1 );
     216        gfx_putstr( "_\\ /_" );
     217        gfx_goto( x-2, y );
     218        gfx_putstr( "_   _" );
     219        gfx_goto( x-2, y+1 );
     220        gfx_putstr( " / \\ " );
    281221        break;
    282222    case 1:
    283         GFX_COLOR( WHITE );
    284         GFX_GOTO( x-2, y-1 );
    285         GFX_WRITE( '.' );
    286         GFX_WRITE( ' ' );
    287         GFX_WRITE( '\'' );
    288         GFX_WRITE( ' ' );
    289         GFX_WRITE( ',' );
    290         GFX_GOTO( x-2, y );
    291         GFX_WRITE( ' ' );
    292         GFX_WRITE( ' ' );
    293         GFX_WRITE( ' ' );
    294         GFX_WRITE( ' ' );
    295         GFX_WRITE( ' ' );
    296         GFX_GOTO( x-2, y+1 );
    297         GFX_WRITE( '\'' );
    298         GFX_WRITE( ' ' );
    299         GFX_WRITE( '.' );
    300         GFX_WRITE( ' ' );
    301         GFX_WRITE( '`' );
    302         break;
    303     }
    304 }
    305 
     223        gfx_color( WHITE );
     224        gfx_goto( x-2, y-1 );
     225        gfx_putstr( ". \' ," );
     226        gfx_goto( x-2, y );
     227        gfx_putstr( "     " );
     228        gfx_goto( x-2, y+1 );
     229        gfx_putstr( "\' . `" );
     230        break;
     231    }
     232}
     233
Note: See TracChangeset for help on using the changeset viewer.