Ignore:
Timestamp:
Dec 15, 2002, 4:41:32 AM (18 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/aliens.c

    r18 r20  
    44#include "common.h"
    55
    6 static void draw_alien( game *g, int x, int y, int type );
     6static void draw_alien_poolp( game *g, int x, int y, int frame );
     7static void draw_alien_bool( game *g, int x, int y, int frame );
     8static void draw_alien_brah( game *g, int x, int y, int frame );
    79
    810void init_aliens( game *g, aliens *al )
     
    1214    for( i = 0; i < ALIENS; i++ )
    1315    {
    14         al->x[i] = -1;
    15         al->y[i] = -1;
    16         al->img[i] = 0;
    17         al->life[i] = 0;
     16        al->type[i] = ALIEN_NONE;
    1817    }
    1918}
     
    2524    for( i = 0; i < ALIENS; i++ )
    2625    {
    27         if( al->y[i] >= 0 )
     26        switch( al->type[i] )
    2827        {
    29             draw_alien( g, al->x[i], al->y[i], al->img[i] % 2 );
     28            case ALIEN_BRAH:
     29                draw_alien_brah( g, al->x[i], al->y[i], al->img[i] % 8 );
     30                break;
     31            case ALIEN_POOLP:
     32                draw_alien_poolp( g, al->x[i], al->y[i], al->img[i] % 2 );
     33                break;
     34            case ALIEN_BOOL:
     35                draw_alien_bool( g, al->x[i], al->y[i], al->img[i] % 5 );
     36                break;
     37            case ALIEN_NONE:
     38                break;
    3039        }
    3140    }
     
    3847    for( i = 0; i < ALIENS; i++ )
    3948    {
    40         if( al->y[i] < 0 )
     49        switch( al->type[i] )
    4150        {
    42             //al->x[i] = g->w;
     51            case ALIEN_POOLP:
     52            case ALIEN_BOOL:
     53            case ALIEN_BRAH:
     54                al->x[i] = ((al->x[i] + 5) % (g->w + 3)) - 3;
     55                al->y[i] = al->y[i] + (rand() % 8) / 7 - (rand() % 8) / 7;
     56                al->img[i] = al->img[i] + 1;
     57
     58                /* Check bounds */
     59                if( al->y[i] < 0 ) al->y[i] = 0;
     60                if( al->y[i] > g->w - 1 ) al->y[i] = g->w - 1;
     61                break;
     62            case ALIEN_NONE:
     63                break;
    4364        }
    44         else
     65    }
     66}
     67
     68void add_alien( game *g, aliens *al, int x, int y, int type )
     69{
     70    int i;
     71
     72    for( i = 0; i < ALIENS; i++ )
     73    {
     74        if( al->type[i] == ALIEN_NONE )
    4575        {
    46             al->x[i] = ((al->x[i] + 5) % (g->w + 3)) - 3;
    47             al->y[i] = al->y[i] + (rand() % 8) / 7 - (rand() % 8) / 7;
    48             al->img[i] = al->img[i] + rand() % 4;
    49 
    50             /* Check collisions */
    51             if( al->y[i] < 0 ) al->y[i] = 0;
    52             if( al->y[i] > g->w - 1 ) al->y[i] = g->w - 1;
    53         }
    54     }
    55 }
    56 
    57 void add_alien( game *g, aliens *al, int x, int y )
    58 {
    59     int i;
    60 
    61     for( i = 0; i < ALIENS; i++ )
    62     {
    63         if( al->y[i] < 0 )
    64         {
     76            al->type[i] = type;
    6577            al->x[i] = x;
    6678            al->y[i] = y;
    6779            al->img[i] = 0;
    68             al->life[i] = 2;
     80
     81            switch( al->type[i] )
     82            {
     83                case ALIEN_POOLP:
     84                    al->life[i] = 2;
     85                    break;
     86                case ALIEN_BOOL:
     87                    al->life[i] = 2;
     88                    break;
     89                case ALIEN_BRAH:
     90                    al->life[i] = 2;
     91                    break;
     92                case ALIEN_NONE:
     93                    break;
     94            }
     95
    6996            break;
    7097        }
     
    7299}
    73100
    74 static void draw_alien( game *g, int x, int y, int type )
    75 {
    76     switch( type )
     101static void draw_alien_poolp( game *g, int x, int y, int frame )
     102{
     103    switch( frame )
    77104    {
    78105    case 0:
    79         GFX_COLOR( MAGENTA );
    80         GFX_GOTO( x, y );
    81         GFX_WRITE( ',' );
    82         GFX_WRITE( '-' );
    83         GFX_WRITE( '-' );
    84         GFX_WRITE( '-' );
    85         GFX_WRITE( '.' );
    86         GFX_GOTO( x, y+1 );
    87         GFX_WRITE( '\\' );
    88         GFX_COLOR( WHITE );
    89         GFX_WRITE( 'o' );
    90         GFX_WRITE( ' ' );
    91         GFX_WRITE( 'O' );
    92         GFX_COLOR( MAGENTA );
    93         GFX_WRITE( '/' );
    94         GFX_GOTO( x, y+2 );
    95         GFX_WRITE( '^' );
    96         GFX_WRITE( '^' );
    97         GFX_WRITE( '^' );
    98         GFX_WRITE( '^' );
    99         GFX_WRITE( '^' );
     106        gfx_color( MAGENTA );
     107        gfx_goto( x, y );
     108        gfx_putstr( ",---." );
     109        gfx_goto( x, y+1 );
     110        gfx_putchar( '\\' );
     111        gfx_color( WHITE );
     112        gfx_putstr( "o O" );
     113        gfx_color( MAGENTA );
     114        gfx_putchar( '/' );
     115        gfx_goto( x, y+2 );
     116        gfx_putstr( "^^^^^" );
    100117        break;
    101118    case 1:
    102         GFX_COLOR( MAGENTA );
    103         GFX_GOTO( x, y );
    104         GFX_WRITE( ',' );
    105         GFX_WRITE( '-' );
    106         GFX_WRITE( '-' );
    107         GFX_WRITE( '-' );
    108         GFX_WRITE( '.' );
    109         GFX_GOTO( x, y+1 );
    110         GFX_WRITE( '\\' );
    111         GFX_COLOR( WHITE );
    112         GFX_WRITE( 'O' );
    113         GFX_WRITE( ' ' );
    114         GFX_WRITE( 'o' );
    115         GFX_COLOR( MAGENTA );
    116         GFX_WRITE( '/' );
    117         GFX_GOTO( x, y+2 );
    118         GFX_WRITE( '^' );
    119         GFX_WRITE( '^' );
    120         GFX_WRITE( '^' );
    121         GFX_WRITE( '^' );
    122         GFX_WRITE( '^' );
    123         break;
    124     }
    125 }
    126 
    127 #if 0
    128 void draw_rock( int x, int y, int type )
    129 {
    130     switch( type )
    131     {
     119        gfx_color( MAGENTA );
     120        gfx_goto( x, y );
     121        gfx_putstr( ",---." );
     122        gfx_goto( x, y+1 );
     123        gfx_putchar( '\\' );
     124        gfx_color( WHITE );
     125        gfx_putstr( "O o" );
     126        gfx_color( MAGENTA );
     127        gfx_putchar( '/' );
     128        gfx_goto( x, y+2 );
     129        gfx_putstr( "^^^^^" );
     130        break;
     131    }
     132}
     133
     134static void draw_alien_bool( game *g, int x, int y, int frame )
     135{
     136    gfx_color( GREEN );
     137    gfx_goto( x+1, y );
     138    gfx_putstr( ",---." );
     139
     140    gfx_goto( x, y+1 );
     141    gfx_putchar( '(' );
     142
     143    gfx_color( WHITE );
     144    switch( frame )
     145    {
     146    case 4:
     147        gfx_putstr( "##( )" );
     148        break;
     149    case 3:
     150        gfx_putstr( ")##( " );
     151        break;
     152    case 2:
     153        gfx_putstr( " )##(" );
     154        break;
     155    case 1:
     156        gfx_putstr( "( )##" );
     157        break;
    132158    case 0:
    133         GFX_COLOR( RED );
    134         GFX_GOTO( x, y );
    135         GFX_WRITE( '/' );
    136         GFX_WRITE( '\\' );
    137         GFX_WRITE( '_' );
    138         GFX_WRITE( '/' );
    139         GFX_WRITE( '\\' );
    140         GFX_GOTO( x, y+1 );
    141         GFX_WRITE( '>' );
    142         GFX_WRITE( ' ' );
    143         GFX_WRITE( ' ' );
    144         GFX_WRITE( ' ' );
    145         GFX_WRITE( '/' );
    146         GFX_GOTO( x, y+2 );
    147         GFX_WRITE( '\\' );
    148         GFX_WRITE( '/' );
    149         GFX_WRITE( '\\' );
    150         GFX_WRITE( '_' );
    151         GFX_WRITE( '>' );
    152         break;
     159        gfx_putstr( "#( )#" );
     160        break;
     161    }
     162
     163    gfx_color( GREEN );
     164    gfx_goto( x+6, y+1 );
     165    gfx_putchar( ')' );
     166
     167    gfx_goto( x+1, y+2 );
     168    gfx_putstr( "`---'" );
     169}
     170
     171static void draw_alien_brah( game *g, int x, int y, int frame )
     172{
     173    gfx_color( YELLOW );
     174
     175    switch( frame )
     176    {
     177    case 0:
     178        gfx_goto( x, y );
     179        gfx_putchar( '.' );
     180        gfx_goto( x+6, y );
     181        gfx_putchar( ',' );
     182        gfx_goto( x+1, y+1 );
     183        gfx_putstr( "\\ X /" );
     184        break;
     185    case 7:
    153186    case 1:
    154         GFX_COLOR( RED );
    155         GFX_GOTO( x, y );
    156         GFX_WRITE( '_' );
    157         GFX_WRITE( '/' );
    158         GFX_WRITE( '\\' );
    159         GFX_WRITE( '/' );
    160         GFX_WRITE( '>' );
    161         GFX_GOTO( x, y+1 );
    162         GFX_WRITE( '\\' );
    163         GFX_WRITE( ' ' );
    164         GFX_WRITE( ' ' );
    165         GFX_WRITE( ' ' );
    166         GFX_WRITE( '\\' );
    167         GFX_GOTO( x, y+2 );
    168         GFX_WRITE( '<' );
    169         GFX_WRITE( '_' );
    170         GFX_WRITE( '/' );
    171         GFX_WRITE( '\\' );
    172         GFX_WRITE( '/' );
    173         break;
    174     }
    175 }
    176 #endif
     187        gfx_goto( x-1, y );
     188        gfx_putchar( '.' );
     189        gfx_goto( x+7, y );
     190        gfx_putchar( ',' );
     191        gfx_goto( x, y+1 );
     192        gfx_putstr( "`- X -'" );
     193        break;
     194    case 6:
     195    case 2:
     196        gfx_goto( x-1, y+1 );
     197        gfx_putstr( "`-- X --'" );
     198        break;
     199    case 5:
     200    case 3:
     201        gfx_goto( x, y+1 );
     202        gfx_putstr( ",- X -." );
     203        gfx_goto( x-1, y+2 );
     204        gfx_putchar( '\'' );
     205        gfx_goto( x+7, y+2 );
     206        gfx_putchar( '`' );
     207        break;
     208    case 4:
     209        gfx_goto( x+1, y+1 );
     210        gfx_putstr( ", X ." );
     211        gfx_goto( x, y+2 );
     212        gfx_putchar( '/' );
     213        gfx_goto( x+6, y+2 );
     214        gfx_putchar( '\\' );
     215        break;
     216    }
     217
     218    gfx_goto( x+2, y+2 );
     219    gfx_putstr( "`V'" );
     220
     221    gfx_color( WHITE );
     222    gfx_goto( x+2, y+1 );
     223    gfx_putchar( 'o' );
     224    gfx_goto( x+4, y+1 );
     225    gfx_putchar( 'o' );
     226}
     227
     228
Note: See TracChangeset for help on using the changeset viewer.