Ignore:
Timestamp:
Dec 23, 2002, 10:28:37 AM (17 years ago)
Author:
Sam Hocevar
Message:
  • the beam now digs the tunnel.
  • the starfield is now an array of stars.
  • fixed wall rendering (offset issues and disappearing left wall).
  • 32 seekers on fragbomb explosion, not 16.
File:
1 edited

Legend:

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

    r42 r50  
    44 *                 All Rights Reserved
    55 *
    6  *   $Id: collide.c,v 1.7 2002/12/22 22:17:41 sam Exp $
     6 *   $Id: collide.c,v 1.8 2002/12/23 09:28:37 sam Exp $
    77 *
    88 *   This program is free software; you can redistribute it and/or modify
     
    2727void collide_weapons_tunnel( game *g, weapons *wp, tunnel *t, explosions *ex )
    2828{
    29     int i, x, y;
     29    int i, j, x, y;
    3030
    3131    for( i = 0; i < WEAPONS; i++ )
     
    7777            break;
    7878        case WEAPON_LASER:
    79             if( x <= t->left[y+1]
    80                  || x >= t->right[y+1] )
    81             {
    82                 add_explosion( g, ex, x, y+1, 0, 1, EXPLOSION_SMALL );
    83 
    84                 if( x <= t->left[y+1] )
    85                 {
    86                     t->left[y]--;
    87                     t->left[y+1]-=2;
    88                     t->left[y+2]--;
    89                 }
    90                 else
    91                 {
    92                     t->right[y]++;
    93                     t->right[y+1]+=2;
    94                     t->right[y+2]++;
    95                 }
    96 
    97                 wp->type[i] = WEAPON_NONE;
    98             }
    99             else if( x <= t->left[y]
    100                       || x >= t->right[y] )
    101             {
    102                 add_explosion( g, ex, x, y, 0, 1, EXPLOSION_SMALL );
    103 
    104                 if( x <= t->left[y] )
    105                 {
    106                     t->left[y-1]--;
    107                     t->left[y]-=2;
    108                     t->left[y+1]--;
    109                 }
    110                 else
    111                 {
    112                     t->right[y-1]++;
    113                     t->right[y]+=2;
    114                     t->right[y+1]++;
    115                 }
    116 
    117                 wp->type[i] = WEAPON_NONE;
    118             }
    119             break;
     79            for( j = GET_MIN( 0, wp->vy[i] >> 4 ) ;
     80                 j < GET_MAX( 0, wp->vy[i] >> 4 ) ;
     81                 j++ )
     82            {
     83                if( x <= t->left[y+j] || x >= t->right[y+j] )
     84                {
     85                    add_explosion( g, ex, x, y+j, 0, 1, EXPLOSION_SMALL );
     86                    wp->type[i] = WEAPON_NONE;
     87
     88                    if( x <= t->left[y+j] )
     89                    {
     90                        t->left[y+j-1]--;
     91                        t->left[y+j] -= 2;
     92                        t->left[y+j+1]--;
     93                    }
     94                    else
     95                    {
     96                        t->right[y+j-1]++;
     97                        t->right[y+j] += 2;
     98                        t->right[y+j+1]++;
     99                    }
     100                    break;
     101                }
     102            }
     103            break;
     104        case WEAPON_BEAM:
     105            if( wp->n[i] > 19 )
     106            {
     107                break;
     108            }
     109
     110            j = (29 - wp->n[i]) * (29 - wp->n[i]) / 8;
     111            j = GET_MIN( y, j );
     112
     113            for( ; j > 0 ; j-- )
     114            {
     115                if( x - 2 <= t->left[y-j] )
     116                {
     117                    add_explosion( g, ex, GET_MIN(t->left[y-j], x+3), y-j, 0, 1, EXPLOSION_SMALL );
     118                    t->left[y-j] -= GET_RAND(0,3);
     119                }
     120                else if( x + 3 >= t->right[y-j] )
     121                {
     122                    add_explosion( g, ex, GET_MAX(t->right[y-j], x-2), y-j, 0, 1, EXPLOSION_SMALL );
     123                    t->right[y-j] += GET_RAND(0,3);
     124                }
     125            }
     126            break;
     127
    120128        case WEAPON_NUKE:
    121         case WEAPON_BEAM:
    122             /* The nuke and the laser do not break the tunnel */
     129            /* The nuke does not break the tunnel */
    123130            break;
    124131        }
     
    128135void collide_weapons_aliens( game *g, weapons *wp, aliens *al, explosions *ex )
    129136{
    130     int i, j, x, y;
     137    int i, j, k, x, y;
    131138
    132139    for( i = 0; i < WEAPONS; i++ )
     
    166173
    167174        case WEAPON_BEAM:
     175            if( wp->n[i] > 19 )
     176            {
     177                break;
     178            }
     179
    168180            r = (29 - wp->n[i]) * (29 - wp->n[i]) / 8;
    169181
     
    191203                }
    192204
    193                 if( x >= al->x[j] && x <= al->x[j] + 4
    194                      && y >= al->y[j] && y <= al->y[j] + 2 )
    195                 {
    196                     al->life[j]--;
    197                     ok = 1;
    198                 }
    199                 else if( x >= al->x[j] && x <= al->x[j] + 4
    200                           && y+1 >= al->y[j] && y+1 <= al->y[j] + 2 )
    201                 {
    202                     al->life[j]--;
    203                     ok = 1;
     205                for( k = GET_MIN( 0, wp->vy[i] >> 4 ) ;
     206                     k < GET_MAX( 0, wp->vy[i] >> 4 ) ;
     207                     k++ )
     208                {
     209                    if( x >= al->x[j] && x <= al->x[j] + 4
     210                         && y+k >= al->y[j] && y+k <= al->y[j] + 2 )
     211                    {
     212                        al->life[j]--;
     213                        ok = 1;
     214                        break;
     215                    }
    204216                }
    205217            }
Note: See TracChangeset for help on using the changeset viewer.