Ignore:
Timestamp:
Dec 15, 2002, 6:16:45 PM (18 years ago)
Author:
Sam Hocevar
Message:
  • new weapon: bomb.
  • beam now collides with aliens.
File:
1 edited

Legend:

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

    r22 r24  
    55#include "common.h"
    66
     7static void draw_bomb( int x, int y, int vx, int vy );
    78static void draw_nuke( int x, int y, int frame );
    89static void draw_beam( int x, int y, int frame );
     
    4546                gfx_putchar( '@' );
    4647                break;
     48            case WEAPON_BOMB:
     49                gfx_color( GRAY );
     50                gfx_goto( (wp->x[i] - wp->vx[i]) >> 4, (wp->y[i] - wp->vy[i]) >> 4 );
     51                gfx_putchar( '.' );
     52                gfx_goto( (wp->x3[i] - wp->vx[i]) >> 4, (wp->y3[i] - wp->vy[i]) >> 4 );
     53                gfx_putchar( '.' );
     54                gfx_goto( (wp->x2[i] - wp->vx[i]) >> 4, (wp->y2[i] - wp->vy[i]) >> 4 );
     55                gfx_putchar( '.' );
     56                gfx_goto( wp->x3[i] >> 4, wp->y3[i] >> 4 );
     57                gfx_putchar( '.' );
     58                gfx_goto( wp->x2[i] >> 4, wp->y2[i] >> 4 );
     59                gfx_putchar( '.' );
     60                draw_bomb( wp->x[i] >> 4, wp->y[i] >> 4, wp->vx[i], wp->vy[i] );
     61                break;
    4762            case WEAPON_BEAM:
    4863                draw_beam( wp->x[i] >> 4, wp->y[i] >> 4, wp->n[i] );
     
    7388                }
    7489                break;
     90            case WEAPON_BOMB:
    7591            case WEAPON_SEEKER:
    7692                /* Update tail */
     
    176192                    break;
    177193                case WEAPON_SEEKER:
     194                case WEAPON_BOMB:
    178195                    wp->x2[i] = x;
    179196                    wp->y2[i] = y;
     
    192209            }
    193210            break;
     211        }
     212    }
     213}
     214
     215static void draw_bomb( int x, int y, int vx, int vy )
     216{
     217    vy *= 2;
     218    gfx_color( CYAN );
     219
     220    if( vx > vy )
     221    {
     222        if( vx > -vy ) /* right quarter */
     223        {
     224            if( vy > vx/4 )
     225            {
     226                /* -1pi/6 */
     227                gfx_goto( x-4, y-1 );
     228                gfx_putstr( "/`-." );
     229                gfx_goto( x-4, y );
     230                gfx_putstr( "`-._\\" );
     231                gfx_goto( x, y+1 );
     232                gfx_putchar( '`' );
     233            }
     234            else if( vy < -vx/4 )
     235            {
     236                /* 1pi/6 */
     237                gfx_goto( x-1, y-1 );
     238                gfx_putstr( "_," );
     239                gfx_goto( x-4, y );
     240                gfx_putstr( ",-' /" );
     241                gfx_goto( x-4, y+1 );
     242                gfx_putstr( "\\,-'" );
     243            }
     244            else
     245            {
     246                /* 0pi/6 */
     247                gfx_goto( x-4, y-1 );
     248                gfx_putstr( "____" );
     249                gfx_goto( x-5, y );
     250                gfx_putstr( "|____>" );
     251            }
     252        }
     253        else /* top quarter */
     254        {
     255            if( vx > -vy/4 )
     256            {
     257                /* 2pi/6 */
     258                gfx_goto( x-1, y-1 );
     259                gfx_putstr( "_," );
     260                gfx_goto( x-2, y );
     261                gfx_putstr( "/ |" );
     262                gfx_goto( x-3, y+1 );
     263                gfx_putstr( "/ /" );
     264                gfx_goto( x-3, y+2 );
     265                gfx_putstr( "`'" );
     266            }
     267            else if( vx < vy/4 )
     268            {
     269                /* 4pi/6 */
     270                gfx_goto( x, y-1 );
     271                gfx_putstr( "._" );
     272                gfx_goto( x, y );
     273                gfx_putstr( "| \\" );
     274                gfx_goto( x+1, y+1 );
     275                gfx_putstr( "\\ \\" );
     276                gfx_goto( x+2, y+2 );
     277                gfx_putstr( "`'" );
     278            }
     279            else
     280            {
     281                /* 3pi/6 */
     282                gfx_goto( x-1, y );
     283                gfx_putstr( ",^." );
     284                gfx_goto( x-1, y+1 );
     285                gfx_putstr( "| |" );
     286                gfx_goto( x-1, y+2 );
     287                gfx_putstr( "|_|" );
     288            }
     289        }
     290    }
     291    else
     292    {
     293        if( vx > -vy ) /* bottom quarter */
     294        {
     295            if( vx > vy/4 )
     296            {
     297                /* -2pi/6 */
     298                gfx_goto( x-2, y-2 );
     299                gfx_putstr( ",." );
     300                gfx_goto( x-2, y-1 );
     301                gfx_putstr( "\\ \\" );
     302                gfx_goto( x-1, y );
     303                gfx_putstr( "\\_|" );
     304            }
     305            else if( vx < -vy/4 )
     306            {
     307                /* -4pi/6 */
     308                gfx_goto( x+1, y-2 );
     309                gfx_putstr( ",." );
     310                gfx_goto( x, y-1 );
     311                gfx_putstr( "/ /" );
     312                gfx_goto( x-1, y );
     313                gfx_putstr( "|_/" );
     314            }
     315            else
     316            {
     317                /* -3pi/6 */
     318                gfx_goto( x, y-3 );
     319                gfx_putchar( '_' );
     320                gfx_goto( x-1, y-2 );
     321                gfx_putstr( "| |" );
     322                gfx_goto( x-1, y-1 );
     323                gfx_putstr( "| |" );
     324                gfx_goto( x-1, y );
     325                gfx_putstr( "`v'" );
     326            }
     327        }
     328        else /* left quarter */
     329        {
     330            if( vy > -vx/4 )
     331            {
     332                /* -5pi/6 */
     333                gfx_goto( x+1, y-1 );
     334                gfx_putstr( ",-'\\" );
     335                gfx_goto( x, y );
     336                gfx_putstr( "/_,-'" );
     337                gfx_goto( x, y+1 );
     338                gfx_putchar( '\'' );
     339            }
     340            else if( vy < vx/4 )
     341            {
     342                /* 5pi/6 */
     343                gfx_goto( x, y-1 );
     344                gfx_putstr( "._" );
     345                gfx_goto( x, y );
     346                gfx_putstr( "\\ `-." );
     347                gfx_goto( x+1, y+1 );
     348                gfx_putstr( "`-./" );
     349            }
     350            else
     351            {
     352                /* 6pi/6 */
     353                gfx_goto( x+1, y-1 );
     354                gfx_putstr( "____" );
     355                gfx_goto( x, y );
     356                gfx_putstr( "<____|" );
     357            }
    194358        }
    195359    }
Note: See TracChangeset for help on using the changeset viewer.