Changeset 121


Ignore:
Timestamp:
Nov 10, 2003, 10:26:40 AM (20 years ago)
Author:
Sam Hocevar
Message:
  • libee/sprite.c: + More robust sprite loader. + Added ee_set_sprite_frame() and ee_get_sprite_frame(). + Free all structures in ee_free_sprite().
  • src/aliens.c src/bonus.c: + Use ee_draw_sprite() instead of our manual sprite rendering.
  • src/box.c: + Use ee_draw_line() instead of the manual equivalent.
  • data/: + Added foo_fighter, baz_fighter, item_gem and item_heart sprites.
Location:
libcaca/trunk
Files:
4 added
6 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/data/Makefile.am

    r119 r121  
    1 EXTRA_DIST = bar_fighter bar_boss
     1EXTRA_DIST = foo_fighter bar_fighter bar_boss baz_fighter item_gem item_heart
  • libcaca/trunk/libee/ee.h

    r115 r121  
    8888
    8989struct ee_sprite * ee_load_sprite(const char *);
     90void ee_set_sprite_frame(struct ee_sprite *, int);
     91int ee_get_sprite_frame(struct ee_sprite *);
    9092void ee_draw_sprite(int, int, struct ee_sprite *);
    9193void ee_free_sprite(struct ee_sprite *);
  • libcaca/trunk/libee/sprite.c

    r115 r121  
    2525#include <stdio.h>
    2626#include <stdlib.h>
     27#include <string.h>
    2728
    2829#include "ee.h"
     
    8889        for(y = 0; y < h; y++)
    8990        {
     91            memset(buf, ' ', w);
     92            buf[w] = '\0';
    9093            if(!fgets(buf, BUFSIZ, fd))
    9194                goto failed;
     
    97100        for(y = 0; y < h; y++)
    98101        {
     102            memset(buf, ' ', w);
     103            buf[w] = '\0';
    99104            if(!fgets(buf, BUFSIZ, fd))
    100105                goto failed;
     
    124129}
    125130
     131void ee_set_sprite_frame(struct ee_sprite *sprite, int f)
     132{
     133    if(f < 0 || f >= sprite->nf)
     134        return;
     135
     136    sprite->f = f;
     137}
     138
     139int ee_get_sprite_frame(struct ee_sprite *sprite)
     140{
     141    return sprite->f;
     142}
     143
    126144void ee_draw_sprite(int x, int y, struct ee_sprite *sprite)
    127145{
     
    146164void ee_free_sprite(struct ee_sprite *sprite)
    147165{
     166    int i;
     167
     168    for(i = sprite->nf; i--;)
     169    {
     170        struct ee_frame *frame = &sprite->frames[i];
     171        free(frame->chars);
     172        free(frame->color);
     173    }
     174
     175    free(sprite->frames);
    148176    free(sprite);
    149177}
  • libcaca/trunk/src/aliens.c

    r109 r121  
    3131static void draw_alien_baz(game *, int, int, int);
    3232
     33struct ee_sprite *foo_sprite;
     34struct ee_sprite *bar_sprite;
     35struct ee_sprite *baz_sprite;
     36
    3337void init_aliens(game *g, aliens *al)
    3438{
     
    3943        al->type[i] = ALIEN_NONE;
    4044    }
     45
     46    foo_sprite = ee_load_sprite("data/foo_fighter");
     47    bar_sprite = ee_load_sprite("data/bar_fighter");
     48    baz_sprite = ee_load_sprite("data/baz_fighter");
    4149}
    4250
     
    133141static void draw_alien_bar(game *g, int x, int y, int frame)
    134142{
    135     switch(frame)
    136     {
    137     case 0:
    138         ee_color(EE_MAGENTA);
    139         ee_goto(x, y);
    140         ee_putstr(",---.");
    141         ee_goto(x, y+1);
    142         ee_putchar('\\');
    143         ee_color(EE_WHITE);
    144         ee_putstr("o O");
    145         ee_color(EE_MAGENTA);
    146         ee_putchar('/');
    147         ee_goto(x, y+2);
    148         ee_putstr("^^^^^");
    149         break;
    150     case 1:
    151         ee_color(EE_MAGENTA);
    152         ee_goto(x, y);
    153         ee_putstr(",---.");
    154         ee_goto(x, y+1);
    155         ee_putchar('\\');
    156         ee_color(EE_WHITE);
    157         ee_putstr("O o");
    158         ee_color(EE_MAGENTA);
    159         ee_putchar('/');
    160         ee_goto(x, y+2);
    161         ee_putstr("^^^^^");
    162         break;
    163     }
     143    ee_set_sprite_frame(bar_sprite, frame);
     144    ee_draw_sprite(x, y, bar_sprite);
    164145}
    165146
    166147static void draw_alien_baz(game *g, int x, int y, int frame)
    167148{
    168     ee_color(EE_GREEN);
    169     ee_goto(x, y-1);
    170     ee_putstr("__");
    171 
    172     ee_goto(x-1, y);
    173     ee_putchar('/');
    174     ee_goto(x+2, y);
    175     ee_putchar('\\');
    176 
    177     switch(frame)
    178     {
    179     case 3:
    180         ee_goto(x-2, y+1);
    181         ee_putstr("//'`\\\\");
    182         break;
    183     case 4:
    184     case 2:
    185         ee_goto(x-2, y+1);
    186         ee_putstr("/(~~)\\");
    187         break;
    188     case 5:
    189     case 1:
    190         ee_goto(x-2, y+1);
    191         ee_putstr("((^^))");
    192         break;
    193     case 0:
    194         ee_goto(x-1, y+1);
    195         ee_putstr("\\\\//");
    196         break;
    197     }
    198 
    199     ee_color(EE_WHITE);
    200     ee_goto(x, y);
    201     ee_putstr("oo");
     149    ee_set_sprite_frame(baz_sprite, frame);
     150    ee_draw_sprite(x, y, baz_sprite);
    202151}
    203152
    204153static void draw_alien_foo(game *g, int x, int y, int frame)
    205154{
    206     ee_color(EE_YELLOW);
    207 
    208     switch(frame)
    209     {
    210     case 0:
    211         ee_goto(x, y);
    212         ee_putchar('.');
    213         ee_goto(x+6, y);
    214         ee_putchar(',');
    215         ee_goto(x+1, y+1);
    216         ee_putstr("\\ X /");
    217         break;
    218     case 7:
    219     case 1:
    220         ee_goto(x-1, y);
    221         ee_putchar('.');
    222         ee_goto(x+7, y);
    223         ee_putchar(',');
    224         ee_goto(x, y+1);
    225         ee_putstr("`- X -'");
    226         break;
    227     case 6:
    228     case 2:
    229         ee_goto(x-1, y+1);
    230         ee_putstr("`-- X --'");
    231         break;
    232     case 5:
    233     case 3:
    234         ee_goto(x, y+1);
    235         ee_putstr(",- X -.");
    236         ee_goto(x-1, y+2);
    237         ee_putchar('\'');
    238         ee_goto(x+7, y+2);
    239         ee_putchar('`');
    240         break;
    241     case 4:
    242         ee_goto(x+1, y+1);
    243         ee_putstr(", X .");
    244         ee_goto(x, y+2);
    245         ee_putchar('/');
    246         ee_goto(x+6, y+2);
    247         ee_putchar('\\');
    248         break;
    249     }
    250 
    251     ee_goto(x+2, y+2);
    252     ee_putstr("`V'");
    253 
    254     ee_color(EE_WHITE);
    255     ee_goto(x+2, y+1);
    256     ee_putchar('o');
    257     ee_goto(x+4, y+1);
    258     ee_putchar('o');
     155    ee_set_sprite_frame(foo_sprite, frame);
     156    ee_draw_sprite(x, y, foo_sprite);
    259157}
    260158
  • libcaca/trunk/src/bonus.c

    r109 r121  
    2727#include "common.h"
    2828
     29struct ee_sprite *heart_sprite;
     30struct ee_sprite *gem_sprite;
     31
    2932void init_bonus(game *g, bonus *bo)
    3033{
     
    3538        bo->type[i] = BONUS_NONE;
    3639    }
     40
     41    heart_sprite = ee_load_sprite("data/heart");
     42    gem_sprite = ee_load_sprite("data/gem");
    3743}
    3844
     
    4652        {
    4753            case BONUS_GREEN:
    48                 ee_color((bo->n[i]/2 % 3) ? EE_GREEN : EE_WHITE);
    49                 ee_goto(bo->x[i]+1, bo->y[i]-1);
    50                 ee_putchar('_');
    51                 ee_goto(bo->x[i], bo->y[i]);
    52                 ee_putstr("/ \\");
    53                 ee_goto(bo->x[i], bo->y[i]+1);
    54                 ee_putstr("\\_/");
    55                 ee_color(EE_WHITE);
    56                 ee_goto(bo->x[i]+1, bo->y[i]);
    57                 ee_putchar('g');
     54                ee_set_sprite_frame(gem_sprite, (bo->n[i]/2 % 3) ? 0 : 1);
     55                ee_draw_sprite(bo->x[i], bo->y[i], gem_sprite);
    5856                break;
    5957            case BONUS_LIFE:
    60                 ee_color((bo->n[i] % 3) ? EE_RED : EE_WHITE);
    61                 ee_goto(bo->x[i]+1, bo->y[i]-1);
    62                 ee_putchar('_');
    63                 ee_goto(bo->x[i]+3, bo->y[i]-1);
    64                 ee_putchar('_');
    65                 ee_goto(bo->x[i], bo->y[i]);
    66                 ee_putstr("( ' )");
    67                 ee_goto(bo->x[i]+1, bo->y[i]+1);
    68                 ee_putstr("`v'");
    69                 ee_color(EE_WHITE);
    70                 ee_goto(bo->x[i]+3, bo->y[i]);
    71                 ee_putchar('^');
     58                ee_set_sprite_frame(heart_sprite, (bo->n[i] % 3) ? 0 : 1);
     59                ee_draw_sprite(bo->x[i], bo->y[i], heart_sprite);
    7260                break;
    7361            case BONUS_NONE:
  • libcaca/trunk/src/box.c

    r109 r121  
    4242void draw_box(game *g, box *b)
    4343{
    44     int i, j, frame;
     44    int j, frame;
    4545
    4646    ee_color(EE_YELLOW);
     
    4949    if(b->frame < 8)
    5050    {
    51         for(i = b->x - b->w * b->frame / 16 ;
    52              i < b->x + b->w * b->frame / 16 ;
    53              i++)
    54         {
    55             ee_goto(i, b->y);
    56             ee_putchar('X');
    57         }
    58 
     51        ee_draw_line(b->x - b->w * b->frame / 16, b->y,
     52                     b->x + b->w * b->frame / 16 - 1, b->y, 'X');
    5953        return;
    6054    }
     
    6357    frame = b->frame < 12 ? b->frame : 12;
    6458
    65     for(i = b->x - b->w / 2 ;
    66          i < b->x + b->w / 2 ;
    67          i++)
    68     {
    69         ee_goto(i, b->y - b->h * (frame - 8) / 8);
    70         ee_putchar('X');
    71         ee_goto(i, b->y + b->h * (frame - 8) / 8);
    72         ee_putchar('X');
    73     }
     59    ee_draw_line(b->x - b->w / 2, b->y - b->h * (frame - 8) / 8,
     60                 b->x + b->w / 2 - 1, b->y - b->h * (frame - 8) / 8, 'X');
     61    ee_draw_line(b->x - b->w / 2, b->y + b->h * (frame - 8) / 8,
     62                 b->x + b->w / 2 - 1, b->y + b->h * (frame - 8) / 8, 'X');
    7463
    75     for(j = b->y - b->h * (frame - 8) / 8 ;
    76          j < b->y + b->h * (frame - 8) / 8 ;
    77          j++)
    78     {
    79         ee_goto(b->x - b->w / 2, j);
    80         ee_putchar('X');
    81         ee_goto(b->x + b->w / 2 - 1, j);
    82         ee_putchar('X');
    83     }
     64    ee_draw_line(b->x - b->w / 2, b->y - b->h * (frame - 8) / 8,
     65                 b->x - b->w / 2, b->y + b->h * (frame - 8) / 8 - 1, 'X');
     66    ee_draw_line(b->x + b->w / 2 - 1, b->y - b->h * (frame - 8) / 8,
     67                 b->x + b->w / 2 - 1, b->y + b->h * (frame - 8) / 8 - 1, 'X');
    8468
    8569    ee_color(EE_BLACK);
    8670
    87     for(j = b->y - b->h * (frame - 8) / 8 + 1 ;
    88          j < b->y + b->h * (frame - 8) / 8 ;
     71    for(j = b->y - b->h * (frame - 8) / 8 + 1;
     72         j < b->y + b->h * (frame - 8) / 8;
    8973         j++)
    9074    {
    91         for(i = b->x - b->w / 2 + 1 ;
    92              i < b->x + b->w / 2 - 1 ;
    93              i++)
    94         {
    95             ee_goto(i, j);
    96             ee_putchar('X');
    97         }
     75        ee_draw_line(b->x - b->w / 2 + 1, j,
     76                     b->x + b->w / 2 - 2, j, 'X');
    9877    }
    9978
Note: See TracChangeset for help on using the changeset viewer.