+ Renamed ee_color() to ee_set_color(), wrote ee_get_color(). * libee/line.c: + Implemented draw_polyline() and draw_thin_polyline(). * libee/sprite.c: + Removed the f member of struct ee_sprite. + Implemented ee_get_sprite_{width|height|dx|dy}(). + Restore the color fater ee_draw_sprite() is called. * libee/box.c: + Fixed a bug causing improper box clipping at the right and the bottom. * data/foo_fighter: + Fixed bugs in the sprite. * src/intro.c: + Test effects for the future game's intro. * test/spritedit.c: + Added stuff to the sprite editor. We can now navigate through frames. git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/ttyvaders/trunk@154 92316355-f0b4-4df1-b90c-862c8a59935fmaster
@@ -19,11 +19,11 @@ dddededdd | |||||
ddd | ddd | ||||
9 2 4 0 | 9 2 4 0 | ||||
,-oXo-. | ,-oXo-. | ||||
' V ` | |||||
' `V' ` | |||||
ddededd | ddededd | ||||
d d d | |||||
d ddd d | |||||
7 2 3 0 | 7 2 3 0 | ||||
,oXo. | ,oXo. | ||||
/ V \ | |||||
/ `V' \ | |||||
deded | deded | ||||
d d d | |||||
d ddd d |
@@ -67,7 +67,7 @@ void ee_draw_thin_box(int x1, int y1, int x2, int y2) | |||||
for(x = x1 < 0 ? 1 : x1 + 1; x < x2 && x < xmax; x++) | for(x = x1 < 0 ? 1 : x1 + 1; x < x2 && x < xmax; x++) | ||||
ee_putchar(x, y1, '-'); | ee_putchar(x, y1, '-'); | ||||
if(y2 < ymax) | |||||
if(y2 <= ymax) | |||||
for(x = x1 < 0 ? 1 : x1 + 1; x < x2 && x < xmax; x++) | for(x = x1 < 0 ? 1 : x1 + 1; x < x2 && x < xmax; x++) | ||||
ee_putchar(x, y2, '-'); | ee_putchar(x, y2, '-'); | ||||
@@ -75,7 +75,7 @@ void ee_draw_thin_box(int x1, int y1, int x2, int y2) | |||||
for(y = y1 < 0 ? 1 : y1 + 1; y < y2 && y < ymax; y++) | for(y = y1 < 0 ? 1 : y1 + 1; y < y2 && y < ymax; y++) | ||||
ee_putchar(x1, y, '|'); | ee_putchar(x1, y, '|'); | ||||
if(x2 < xmax) | |||||
if(x2 <= xmax) | |||||
for(y = y1 < 0 ? 1 : y1 + 1; y < y2 && y < ymax; y++) | for(y = y1 < 0 ? 1 : y1 + 1; y < y2 && y < ymax; y++) | ||||
ee_putchar(x2, y, '|'); | ee_putchar(x2, y, '|'); | ||||
@@ -20,6 +20,14 @@ | |||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
*/ | */ | ||||
#ifndef __EE_H__ | |||||
#define __EE_H__ | |||||
#ifdef __cplusplus | |||||
extern "C" | |||||
{ | |||||
#endif | |||||
/* | /* | ||||
* Colors | * Colors | ||||
*/ | */ | ||||
@@ -51,13 +59,16 @@ void ee_end(void); | |||||
char ee_get_key(void); | char ee_get_key(void); | ||||
void ee_color(int); | |||||
void ee_set_color(int); | |||||
int ee_get_color(void); | |||||
void ee_putchar(int, int, char); | void ee_putchar(int, int, char); | ||||
void ee_putstr(int, int, char *); | void ee_putstr(int, int, char *); | ||||
void ee_clear(void); | void ee_clear(void); | ||||
void ee_draw_line(int, int, int, int, char); | void ee_draw_line(int, int, int, int, char); | ||||
void ee_draw_polyline(int[], int[], int, char); | |||||
void ee_draw_thin_line(int, int, int, int); | void ee_draw_thin_line(int, int, int, int); | ||||
void ee_draw_thin_polyline(int[], int[], int); | |||||
void ee_draw_circle(int, int, int, char); | void ee_draw_circle(int, int, int, char); | ||||
void ee_draw_ellipse(int, int, int, int, char); | void ee_draw_ellipse(int, int, int, int, char); | ||||
@@ -76,8 +87,16 @@ int ee_rand(int, int); | |||||
int ee_sqrt(int); | int ee_sqrt(int); | ||||
struct ee_sprite * ee_load_sprite(const char *); | struct ee_sprite * ee_load_sprite(const char *); | ||||
void ee_set_sprite_frame(struct ee_sprite *, int); | |||||
int ee_get_sprite_frame(struct ee_sprite *); | |||||
void ee_draw_sprite(int, int, struct ee_sprite *); | |||||
int ee_get_sprite_frames(struct ee_sprite *); | |||||
int ee_get_sprite_width(struct ee_sprite *, int); | |||||
int ee_get_sprite_height(struct ee_sprite *, int); | |||||
int ee_get_sprite_dx(struct ee_sprite *, int); | |||||
int ee_get_sprite_dy(struct ee_sprite *, int); | |||||
void ee_draw_sprite(int, int, struct ee_sprite *, int); | |||||
void ee_free_sprite(struct ee_sprite *); | void ee_free_sprite(struct ee_sprite *); | ||||
#ifdef __cplusplus | |||||
} | |||||
#endif | |||||
#endif /* __EE_H__ */ |
@@ -33,8 +33,11 @@ | |||||
#include "ee.h" | #include "ee.h" | ||||
void ee_color(int color) | |||||
static int ee_color = 0; | |||||
void ee_set_color(int color) | |||||
{ | { | ||||
ee_color = color; | |||||
#ifdef USE_SLANG | #ifdef USE_SLANG | ||||
SLsmg_set_color(color); | SLsmg_set_color(color); | ||||
#elif USE_NCURSES | #elif USE_NCURSES | ||||
@@ -44,6 +47,11 @@ void ee_color(int color) | |||||
#endif | #endif | ||||
} | } | ||||
int ee_get_color(void) | |||||
{ | |||||
return ee_color; | |||||
} | |||||
void ee_putchar(int x, int y, char c) | void ee_putchar(int x, int y, char c) | ||||
{ | { | ||||
#ifdef USE_SLANG | #ifdef USE_SLANG | ||||
@@ -68,6 +68,23 @@ void ee_draw_line(int x1, int y1, int x2, int y2, char c) | |||||
clip_line(&s); | clip_line(&s); | ||||
} | } | ||||
void ee_draw_polyline(int x[], int y[], int n, char c) | |||||
{ | |||||
int i; | |||||
struct line s; | |||||
s.c = c; | |||||
s.draw = draw_solid_line; | |||||
for(i = 0; i < n; i++) | |||||
{ | |||||
s.x1 = x[i]; | |||||
s.y1 = y[i]; | |||||
s.x2 = x[i+1]; | |||||
s.y2 = y[i+1]; | |||||
clip_line(&s); | |||||
} | |||||
} | |||||
/** | /** | ||||
* \brief Draw a thin line on the screen, using ASCII art. | * \brief Draw a thin line on the screen, using ASCII art. | ||||
* | * | ||||
@@ -88,6 +105,22 @@ void ee_draw_thin_line(int x1, int y1, int x2, int y2) | |||||
clip_line(&s); | clip_line(&s); | ||||
} | } | ||||
void ee_draw_thin_polyline(int x[], int y[], int n) | |||||
{ | |||||
int i; | |||||
struct line s; | |||||
s.draw = draw_thin_line; | |||||
for(i = 0; i < n; i++) | |||||
{ | |||||
s.x1 = x[i]; | |||||
s.y1 = y[i]; | |||||
s.x2 = x[i+1]; | |||||
s.y2 = y[i+1]; | |||||
clip_line(&s); | |||||
} | |||||
} | |||||
/* | /* | ||||
* XXX: The following functions are local. | * XXX: The following functions are local. | ||||
*/ | */ | ||||
@@ -44,7 +44,6 @@ struct ee_frame | |||||
struct ee_sprite | struct ee_sprite | ||||
{ | { | ||||
int f; | |||||
int nf; | int nf; | ||||
struct ee_frame *frames; | struct ee_frame *frames; | ||||
}; | }; | ||||
@@ -60,7 +59,6 @@ struct ee_sprite *ee_load_sprite(const char *file) | |||||
return NULL; | return NULL; | ||||
sprite = malloc(sizeof(struct ee_sprite)); | sprite = malloc(sizeof(struct ee_sprite)); | ||||
sprite->f = 0; | |||||
sprite->nf = 0; | sprite->nf = 0; | ||||
sprite->frames = NULL; | sprite->frames = NULL; | ||||
@@ -136,34 +134,72 @@ struct ee_sprite *ee_load_sprite(const char *file) | |||||
return sprite; | return sprite; | ||||
} | } | ||||
void ee_set_sprite_frame(struct ee_sprite *sprite, int f) | |||||
int ee_get_sprite_frames(struct ee_sprite *sprite) | |||||
{ | { | ||||
if(sprite == NULL) | if(sprite == NULL) | ||||
return; | |||||
return 0; | |||||
return sprite->nf; | |||||
} | |||||
int ee_get_sprite_width(struct ee_sprite *sprite, int f) | |||||
{ | |||||
if(sprite == NULL) | |||||
return 0; | |||||
if(f < 0 || f >= sprite->nf) | if(f < 0 || f >= sprite->nf) | ||||
return; | |||||
return 0; | |||||
return sprite->frames[f].w; | |||||
} | |||||
int ee_get_sprite_height(struct ee_sprite *sprite, int f) | |||||
{ | |||||
if(sprite == NULL) | |||||
return 0; | |||||
if(f < 0 || f >= sprite->nf) | |||||
return 0; | |||||
sprite->f = f; | |||||
return sprite->frames[f].h; | |||||
} | } | ||||
int ee_get_sprite_frame(struct ee_sprite *sprite) | |||||
int ee_get_sprite_dx(struct ee_sprite *sprite, int f) | |||||
{ | { | ||||
if(sprite == NULL) | if(sprite == NULL) | ||||
return -1; | |||||
return 0; | |||||
return sprite->f; | |||||
if(f < 0 || f >= sprite->nf) | |||||
return 0; | |||||
return sprite->frames[f].dx; | |||||
} | |||||
int ee_get_sprite_dy(struct ee_sprite *sprite, int f) | |||||
{ | |||||
if(sprite == NULL) | |||||
return 0; | |||||
if(f < 0 || f >= sprite->nf) | |||||
return 0; | |||||
return sprite->frames[f].dy; | |||||
} | } | ||||
void ee_draw_sprite(int x, int y, struct ee_sprite *sprite) | |||||
void ee_draw_sprite(int x, int y, struct ee_sprite *sprite, int f) | |||||
{ | { | ||||
int i, j; | |||||
int i, j, oldcol; | |||||
struct ee_frame *frame; | struct ee_frame *frame; | ||||
if(sprite == NULL) | if(sprite == NULL) | ||||
return; | return; | ||||
frame = &sprite->frames[sprite->f]; | |||||
if(f < 0 || f >= sprite->nf) | |||||
return; | |||||
frame = &sprite->frames[f]; | |||||
oldcol = ee_get_color(); | |||||
for(j = 0; j < frame->h; j++) | for(j = 0; j < frame->h; j++) | ||||
{ | { | ||||
@@ -172,12 +208,14 @@ void ee_draw_sprite(int x, int y, struct ee_sprite *sprite) | |||||
int col = frame->color[frame->w * j + i]; | int col = frame->color[frame->w * j + i]; | ||||
if(col >= 0) | if(col >= 0) | ||||
{ | { | ||||
ee_color(col); | |||||
ee_set_color(col); | |||||
ee_putchar(x + i - frame->dx, y + j - frame->dy, | ee_putchar(x + i - frame->dx, y + j - frame->dy, | ||||
frame->chars[frame->w * j + i]); | frame->chars[frame->w * j + i]); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
ee_set_color(oldcol); | |||||
} | } | ||||
void ee_free_sprite(struct ee_sprite *sprite) | void ee_free_sprite(struct ee_sprite *sprite) | ||||
@@ -21,6 +21,7 @@ ttyvaders_SOURCES = \ | |||||
collide.c \ | collide.c \ | ||||
common.h \ | common.h \ | ||||
explosions.c \ | explosions.c \ | ||||
intro.c \ | |||||
main.c \ | main.c \ | ||||
overlay.c \ | overlay.c \ | ||||
player.c \ | player.c \ | ||||
@@ -26,10 +26,6 @@ | |||||
#include "common.h" | #include "common.h" | ||||
static void draw_alien_foo(game *, int, int, int); | |||||
static void draw_alien_bar(game *, int, int, int); | |||||
static void draw_alien_baz(game *, int, int, int); | |||||
struct ee_sprite *foo_sprite; | struct ee_sprite *foo_sprite; | ||||
struct ee_sprite *bar_sprite; | struct ee_sprite *bar_sprite; | ||||
struct ee_sprite *baz_sprite; | struct ee_sprite *baz_sprite; | ||||
@@ -57,13 +53,13 @@ void draw_aliens(game *g, aliens *al) | |||||
switch(al->type[i]) | switch(al->type[i]) | ||||
{ | { | ||||
case ALIEN_FOO: | case ALIEN_FOO: | ||||
draw_alien_foo(g, al->x[i], al->y[i], al->img[i] % 8); | |||||
ee_draw_sprite(al->x[i], al->y[i], foo_sprite, al->img[i] % 8); | |||||
break; | break; | ||||
case ALIEN_BAR: | case ALIEN_BAR: | ||||
draw_alien_bar(g, al->x[i], al->y[i], al->img[i] % 2); | |||||
ee_draw_sprite(al->x[i], al->y[i], bar_sprite, al->img[i] % 2); | |||||
break; | break; | ||||
case ALIEN_BAZ: | case ALIEN_BAZ: | ||||
draw_alien_baz(g, al->x[i], al->y[i], al->img[i] % 6); | |||||
ee_draw_sprite(al->x[i], al->y[i], baz_sprite, al->img[i] % 6); | |||||
break; | break; | ||||
case ALIEN_NONE: | case ALIEN_NONE: | ||||
break; | break; | ||||
@@ -138,22 +134,3 @@ void add_alien(game *g, aliens *al, int x, int y, int type) | |||||
} | } | ||||
} | } | ||||
static void draw_alien_bar(game *g, int x, int y, int frame) | |||||
{ | |||||
ee_set_sprite_frame(bar_sprite, frame); | |||||
ee_draw_sprite(x, y, bar_sprite); | |||||
} | |||||
static void draw_alien_baz(game *g, int x, int y, int frame) | |||||
{ | |||||
ee_set_sprite_frame(baz_sprite, frame); | |||||
ee_draw_sprite(x, y, baz_sprite); | |||||
} | |||||
static void draw_alien_foo(game *g, int x, int y, int frame) | |||||
{ | |||||
ee_set_sprite_frame(foo_sprite, frame); | |||||
ee_draw_sprite(x, y, foo_sprite); | |||||
} | |||||
@@ -51,12 +51,12 @@ void draw_bonus(game *g, bonus *bo) | |||||
switch(bo->type[i]) | switch(bo->type[i]) | ||||
{ | { | ||||
case BONUS_GREEN: | case BONUS_GREEN: | ||||
ee_set_sprite_frame(gem_sprite, (bo->n[i]/2 % 3) ? 0 : 1); | |||||
ee_draw_sprite(bo->x[i], bo->y[i], gem_sprite); | |||||
ee_draw_sprite(bo->x[i], bo->y[i], gem_sprite, | |||||
(bo->n[i]/2 % 3) ? 0 : 1); | |||||
break; | break; | ||||
case BONUS_LIFE: | case BONUS_LIFE: | ||||
ee_set_sprite_frame(heart_sprite, (bo->n[i] % 3) ? 0 : 1); | |||||
ee_draw_sprite(bo->x[i], bo->y[i], heart_sprite); | |||||
ee_draw_sprite(bo->x[i], bo->y[i], heart_sprite, | |||||
(bo->n[i] % 3) ? 0 : 1); | |||||
break; | break; | ||||
case BONUS_NONE: | case BONUS_NONE: | ||||
break; | break; | ||||
@@ -43,7 +43,7 @@ void draw_box(game *g, box *b) | |||||
{ | { | ||||
int j, frame; | int j, frame; | ||||
ee_color(EE_YELLOW); | |||||
ee_set_color(EE_YELLOW); | |||||
/* Draw the thin horizontal line */ | /* Draw the thin horizontal line */ | ||||
if(b->frame < 8) | if(b->frame < 8) | ||||
@@ -66,7 +66,7 @@ void draw_box(game *g, box *b) | |||||
ee_draw_line(b->x + b->w / 2 - 1, b->y - b->h * (frame - 8) / 8, | ee_draw_line(b->x + b->w / 2 - 1, b->y - b->h * (frame - 8) / 8, | ||||
b->x + b->w / 2 - 1, b->y + b->h * (frame - 8) / 8 - 1, 'X'); | b->x + b->w / 2 - 1, b->y + b->h * (frame - 8) / 8 - 1, 'X'); | ||||
ee_color(EE_BLACK); | |||||
ee_set_color(EE_BLACK); | |||||
for(j = b->y - b->h * (frame - 8) / 8 + 1; | for(j = b->y - b->h * (frame - 8) / 8 + 1; | ||||
j < b->y + b->h * (frame - 8) / 8; | j < b->y + b->h * (frame - 8) / 8; | ||||
@@ -82,7 +82,7 @@ void draw_box(game *g, box *b) | |||||
} | } | ||||
/* Draw the text inside the frame */ | /* Draw the text inside the frame */ | ||||
ee_color(EE_YELLOW); | |||||
ee_set_color(EE_YELLOW); | |||||
/* FIXME: use a font */ | /* FIXME: use a font */ | ||||
ee_putstr(b->x - b->w / 2 + 12, b->y - b->h / 2 + 2, | ee_putstr(b->x - b->w / 2 + 12, b->y - b->h / 2 + 2, | ||||
@@ -20,6 +20,8 @@ | |||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
*/ | */ | ||||
void intro(void); | |||||
/* | /* | ||||
* Compile-time limits | * Compile-time limits | ||||
*/ | */ | ||||
@@ -26,9 +26,6 @@ | |||||
#include "common.h" | #include "common.h" | ||||
static void draw_small_explosion(int x, int y, int frame); | |||||
static void draw_medium_explosion(int x, int y, int frame); | |||||
struct ee_sprite *medium_sprite; | struct ee_sprite *medium_sprite; | ||||
struct ee_sprite *small_sprite; | struct ee_sprite *small_sprite; | ||||
@@ -79,7 +76,7 @@ void draw_explosions(game *g, explosions *ex) | |||||
for(i = 0; i < EXPLOSIONS; i++) | for(i = 0; i < EXPLOSIONS; i++) | ||||
{ | { | ||||
#if 0 | #if 0 | ||||
ee_color(GREEN); | |||||
ee_set_color(GREEN); | |||||
ee_goto(ex->x[i] + 3, ex->y[i]); | ee_goto(ex->x[i] + 3, ex->y[i]); | ||||
switch(ee_rand(0,2)) | switch(ee_rand(0,2)) | ||||
{ | { | ||||
@@ -106,10 +103,12 @@ void draw_explosions(game *g, explosions *ex) | |||||
switch(ex->type[i]) | switch(ex->type[i]) | ||||
{ | { | ||||
case EXPLOSION_MEDIUM: | case EXPLOSION_MEDIUM: | ||||
draw_medium_explosion(ex->x[i], ex->y[i], ex->n[i]); | |||||
ee_draw_sprite(ex->x[i], ex->y[i], medium_sprite, | |||||
10 - ex->n[i]); | |||||
break; | break; | ||||
case EXPLOSION_SMALL: | case EXPLOSION_SMALL: | ||||
draw_small_explosion(ex->x[i], ex->y[i], ex->n[i]); | |||||
ee_draw_sprite(ex->x[i], ex->y[i], small_sprite, | |||||
6 - ex->n[i]); | |||||
break; | break; | ||||
case EXPLOSION_NONE: | case EXPLOSION_NONE: | ||||
break; | break; | ||||
@@ -141,15 +140,3 @@ void update_explosions(game *g, explosions *ex) | |||||
} | } | ||||
} | } | ||||
static void draw_small_explosion(int x, int y, int frame) | |||||
{ | |||||
ee_set_sprite_frame(small_sprite, 6 - frame); | |||||
ee_draw_sprite(x, y, small_sprite); | |||||
} | |||||
static void draw_medium_explosion(int x, int y, int frame) | |||||
{ | |||||
ee_set_sprite_frame(medium_sprite, 10 - frame); | |||||
ee_draw_sprite(x, y, medium_sprite); | |||||
} | |||||
@@ -0,0 +1,77 @@ | |||||
/* | |||||
* ttyvaders Textmode shoot'em up | |||||
* Copyright (c) 2002 Sam Hocevar <sam@zoy.org> | |||||
* All Rights Reserved | |||||
* | |||||
* $Id$ | |||||
* | |||||
* This program is free software; you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published by | |||||
* the Free Software Foundation; either version 2 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with this program; if not, write to the Free Software | |||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | |||||
#include "config.h" | |||||
#include <stdlib.h> | |||||
#include <math.h> | |||||
#include <unistd.h> | |||||
#include "common.h" | |||||
void intro(void) | |||||
{ | |||||
struct ee_sprite *foo_sprite = ee_load_sprite("data/foo_fighter"); | |||||
struct ee_sprite *bar_sprite = ee_load_sprite("data/bar_fighter"); | |||||
struct ee_sprite *baz_sprite = ee_load_sprite("data/baz_fighter"); | |||||
int frame = 0; | |||||
while(ee_get_key() == 0) | |||||
{ | |||||
int i, xo, yo, x[5], y[5]; | |||||
frame++; | |||||
ee_clear(); | |||||
xo = ee_get_width() / 2; | |||||
yo = ee_get_height() / 2; | |||||
ee_set_color(EE_RED); | |||||
ee_fill_ellipse(xo, yo, 16, 8, '#'); | |||||
ee_set_color(EE_GREEN); | |||||
ee_draw_thin_ellipse(xo, yo, 16, 8); | |||||
for(i = 0; i < 4; i ++) | |||||
{ | |||||
x[i] = xo + 0.5 + 12 * cos(0.05 * frame + i * M_PI / 2); | |||||
y[i] = yo + 0.5 + 6 * sin(0.05 * frame + i * M_PI / 2); | |||||
} | |||||
x[4] = x[0]; | |||||
y[4] = y[0]; | |||||
ee_set_color(EE_BLACK); | |||||
ee_fill_triangle(x[0], y[0], x[1], y[1], x[2], y[2], '#'); | |||||
ee_fill_triangle(x[0], y[0], x[3], y[3], x[2], y[2], '#'); | |||||
ee_draw_line(x[0], y[0], x[2], y[2], '#'); | |||||
ee_set_color(EE_GREEN); | |||||
ee_draw_thin_polyline(x, y, 4); | |||||
ee_draw_sprite(xo, yo, foo_sprite, frame % 5); | |||||
ee_refresh(); | |||||
usleep(40000); | |||||
} | |||||
} | |||||
@@ -48,6 +48,8 @@ int main (int argc, char **argv) | |||||
g->w = ee_get_width(); | g->w = ee_get_width(); | ||||
g->h = ee_get_height(); | g->h = ee_get_height(); | ||||
intro(); | |||||
/* Go ! */ | /* Go ! */ | ||||
start_game(g); | start_game(g); | ||||
@@ -32,49 +32,49 @@ void draw_status(game *g) | |||||
static char dashes30[] = "=============================="; | static char dashes30[] = "=============================="; | ||||
/* Draw life jauge */ | /* Draw life jauge */ | ||||
ee_color(EE_GRAY); | |||||
ee_set_color(EE_GRAY); | |||||
ee_putstr(4, 1, dots30); | ee_putstr(4, 1, dots30); | ||||
if(g->p->life > MAX_LIFE * 7 / 10) | if(g->p->life > MAX_LIFE * 7 / 10) | ||||
{ | { | ||||
ee_color(EE_GREEN); | |||||
ee_set_color(EE_GREEN); | |||||
} | } | ||||
else if(g->p->life > MAX_LIFE * 3 / 10) | else if(g->p->life > MAX_LIFE * 3 / 10) | ||||
{ | { | ||||
ee_color(EE_YELLOW); | |||||
ee_set_color(EE_YELLOW); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
ee_color(EE_RED); | |||||
ee_set_color(EE_RED); | |||||
} | } | ||||
ee_putstr(4, 1, dashes30 + (MAX_LIFE - g->p->life) * 30 / MAX_LIFE); | ee_putstr(4, 1, dashes30 + (MAX_LIFE - g->p->life) * 30 / MAX_LIFE); | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putstr(1, 1, "L |"); | ee_putstr(1, 1, "L |"); | ||||
ee_putstr(34, 1, "|"); | ee_putstr(34, 1, "|"); | ||||
/* Draw weapon jauge */ | /* Draw weapon jauge */ | ||||
ee_color(EE_GRAY); | |||||
ee_set_color(EE_GRAY); | |||||
ee_putstr(42, 1, dots30 + 10); | ee_putstr(42, 1, dots30 + 10); | ||||
if(g->p->special > MAX_SPECIAL * 9 / 10) | if(g->p->special > MAX_SPECIAL * 9 / 10) | ||||
{ | { | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
} | } | ||||
else if(g->p->special > MAX_SPECIAL * 3 / 10) | else if(g->p->special > MAX_SPECIAL * 3 / 10) | ||||
{ | { | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
ee_color(EE_BLUE); | |||||
ee_set_color(EE_BLUE); | |||||
} | } | ||||
ee_putstr(42, 1, dashes30 + 10 | ee_putstr(42, 1, dashes30 + 10 | ||||
+ (MAX_SPECIAL - g->p->special) * 20 / MAX_SPECIAL); | + (MAX_SPECIAL - g->p->special) * 20 / MAX_SPECIAL); | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putstr(39, 1, "S |"); | ee_putstr(39, 1, "S |"); | ||||
ee_putstr(62, 1, "|"); | ee_putstr(62, 1, "|"); | ||||
} | } | ||||
@@ -57,7 +57,7 @@ void draw_player(game *g, player *p) | |||||
if(p->dead) | if(p->dead) | ||||
return; | return; | ||||
ee_draw_sprite(p->x, p->y, ship_sprite); | |||||
ee_draw_sprite(p->x, p->y, ship_sprite, 0); | |||||
} | } | ||||
void update_player(game *g, player *p) | void update_player(game *g, player *p) | ||||
@@ -53,7 +53,7 @@ void draw_starfield(game *g, starfield *s) | |||||
{ | { | ||||
if(s[i].x >= 0) | if(s[i].x >= 0) | ||||
{ | { | ||||
ee_color(s[i].c); | |||||
ee_set_color(s[i].c); | |||||
ee_putchar(s[i].x, s[i].y, s[i].ch); | ee_putchar(s[i].x, s[i].y, s[i].ch); | ||||
} | } | ||||
} | } | ||||
@@ -71,7 +71,7 @@ void draw_tunnel(game *g, tunnel *t) | |||||
int i, j; | int i, j; | ||||
char c; | char c; | ||||
ee_color(EE_GREEN); | |||||
ee_set_color(EE_GREEN); | |||||
/* Left border */ | /* Left border */ | ||||
for(i = 0; i < g->h ; i++) | for(i = 0; i < g->h ; i++) | ||||
@@ -109,7 +109,7 @@ void draw_tunnel(game *g, tunnel *t) | |||||
ee_putchar(t->right[i] - 1, i, c); | ee_putchar(t->right[i] - 1, i, c); | ||||
} | } | ||||
ee_color(EE_RED); | |||||
ee_set_color(EE_RED); | |||||
/* Left concrete */ | /* Left concrete */ | ||||
for(i = 0; i < g->h ; i++) | for(i = 0; i < g->h ; i++) | ||||
@@ -56,20 +56,20 @@ void draw_weapons(game *g, weapons *wp) | |||||
switch(wp->type[i]) | switch(wp->type[i]) | ||||
{ | { | ||||
case WEAPON_LASER: | case WEAPON_LASER: | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putchar(wp->x[i] >> 4, wp->y[i] >> 4, '|'); | ee_putchar(wp->x[i] >> 4, wp->y[i] >> 4, '|'); | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_putchar(wp->x[i] >> 4, (wp->y[i] >> 4) + 1, '|'); | ee_putchar(wp->x[i] >> 4, (wp->y[i] >> 4) + 1, '|'); | ||||
break; | break; | ||||
case WEAPON_SEEKER: | case WEAPON_SEEKER: | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_putchar(wp->x3[i] >> 4, wp->y3[i] >> 4, '.'); | ee_putchar(wp->x3[i] >> 4, wp->y3[i] >> 4, '.'); | ||||
ee_putchar(wp->x2[i] >> 4, wp->y2[i] >> 4, 'o'); | ee_putchar(wp->x2[i] >> 4, wp->y2[i] >> 4, 'o'); | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putchar(wp->x[i] >> 4, wp->y[i] >> 4, '@'); | ee_putchar(wp->x[i] >> 4, wp->y[i] >> 4, '@'); | ||||
break; | break; | ||||
case WEAPON_BOMB: | case WEAPON_BOMB: | ||||
ee_color(EE_GRAY); | |||||
ee_set_color(EE_GRAY); | |||||
ee_putchar((wp->x[i] - wp->vx[i]) >> 4, (wp->y[i] - wp->vy[i]) >> 4, '.'); | ee_putchar((wp->x[i] - wp->vx[i]) >> 4, (wp->y[i] - wp->vy[i]) >> 4, '.'); | ||||
ee_putchar((wp->x3[i] - wp->vx[i]) >> 4, (wp->y3[i] - wp->vy[i]) >> 4, '.'); | ee_putchar((wp->x3[i] - wp->vx[i]) >> 4, (wp->y3[i] - wp->vy[i]) >> 4, '.'); | ||||
ee_putchar((wp->x2[i] - wp->vx[i]) >> 4, (wp->y2[i] - wp->vy[i]) >> 4, '.'); | ee_putchar((wp->x2[i] - wp->vx[i]) >> 4, (wp->y2[i] - wp->vy[i]) >> 4, '.'); | ||||
@@ -333,19 +333,16 @@ static void draw_bomb(int x, int y, int vx, int vy) | |||||
} | } | ||||
} | } | ||||
ee_set_sprite_frame(bomb_sprite, frame); | |||||
ee_draw_sprite(x, y, bomb_sprite); | |||||
ee_draw_sprite(x, y, bomb_sprite, frame); | |||||
} | } | ||||
static void draw_fragbomb(int x, int y, int frame) | static void draw_fragbomb(int x, int y, int frame) | ||||
{ | { | ||||
/* Draw the head */ | /* Draw the head */ | ||||
ee_set_sprite_frame(fragbomb_sprite, frame & 1); | |||||
ee_draw_sprite(x, y, fragbomb_sprite); | |||||
ee_draw_sprite(x, y, fragbomb_sprite, frame & 1); | |||||
/* Draw the tail */ | /* Draw the tail */ | ||||
ee_set_sprite_frame(fragbomb_sprite, 2 + (frame % 4)); | |||||
ee_draw_sprite(x, y, fragbomb_sprite); | |||||
ee_draw_sprite(x, y, fragbomb_sprite, 2 + (frame % 4)); | |||||
} | } | ||||
static void draw_beam(int x, int y, int frame) | static void draw_beam(int x, int y, int frame) | ||||
@@ -356,84 +353,84 @@ static void draw_beam(int x, int y, int frame) | |||||
switch(frame) | switch(frame) | ||||
{ | { | ||||
case 24: | case 24: | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putstr(x, y-3, "__"); | ee_putstr(x, y-3, "__"); | ||||
ee_putchar(x-1, y-2, '\''); | ee_putchar(x-1, y-2, '\''); | ||||
ee_putchar(x+2, y-2, '`'); | ee_putchar(x+2, y-2, '`'); | ||||
break; | break; | ||||
case 23: | case 23: | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_putstr(x, y-3, "__"); | ee_putstr(x, y-3, "__"); | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putstr(x-2, y-2, "-'"); | ee_putstr(x-2, y-2, "-'"); | ||||
ee_putstr(x+2, y-2, "`-"); | ee_putstr(x+2, y-2, "`-"); | ||||
break; | break; | ||||
case 22: | case 22: | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_putstr(x, y-3, "__"); | ee_putstr(x, y-3, "__"); | ||||
ee_putchar(x-1, y-2, '\''); | ee_putchar(x-1, y-2, '\''); | ||||
ee_putchar(x+2, y-2, '`'); | ee_putchar(x+2, y-2, '`'); | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putstr(x-3, y-2, ",-"); | ee_putstr(x-3, y-2, ",-"); | ||||
ee_putstr(x+3, y-2, "-."); | ee_putstr(x+3, y-2, "-."); | ||||
break; | break; | ||||
case 21: | case 21: | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_putstr(x-1, y-3, "____"); | ee_putstr(x-1, y-3, "____"); | ||||
ee_putchar(x-2, y-2, '\''); | ee_putchar(x-2, y-2, '\''); | ||||
ee_putchar(x+3, y-2, '`'); | ee_putchar(x+3, y-2, '`'); | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putstr(x-4, y-2, ",-"); | ee_putstr(x-4, y-2, ",-"); | ||||
ee_putstr(x+4, y-2, "-."); | ee_putstr(x+4, y-2, "-."); | ||||
break; | break; | ||||
case 20: | case 20: | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putstr(x, y-3, "%%"); | ee_putstr(x, y-3, "%%"); | ||||
ee_putchar(x-4, y-2, ','); | ee_putchar(x-4, y-2, ','); | ||||
ee_putchar(x+5, y-2, '.'); | ee_putchar(x+5, y-2, '.'); | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_putchar(x-1, y-3, ':'); | ee_putchar(x-1, y-3, ':'); | ||||
ee_putchar(x+2, y-3, ':'); | ee_putchar(x+2, y-3, ':'); | ||||
ee_putstr(x-3, y-2, "-'"); | ee_putstr(x-3, y-2, "-'"); | ||||
ee_putstr(x+3, y-2, "`-"); | ee_putstr(x+3, y-2, "`-"); | ||||
break; | break; | ||||
case 19: | case 19: | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putstr(x, y-4, "%%"); | ee_putstr(x, y-4, "%%"); | ||||
ee_putstr(x, y-3, "##"); | ee_putstr(x, y-3, "##"); | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_putchar(x-1, y-4, ':'); | ee_putchar(x-1, y-4, ':'); | ||||
ee_putchar(x+2, y-4, ':'); | ee_putchar(x+2, y-4, ':'); | ||||
ee_putchar(x-1, y-3, '%'); | ee_putchar(x-1, y-3, '%'); | ||||
ee_putchar(x+2, y-3, '%'); | ee_putchar(x+2, y-3, '%'); | ||||
ee_putstr(x-4, y-2, ",-'"); | ee_putstr(x-4, y-2, ",-'"); | ||||
ee_putstr(x+3, y-2, "`-."); | ee_putstr(x+3, y-2, "`-."); | ||||
ee_color(EE_BLUE); | |||||
ee_set_color(EE_BLUE); | |||||
ee_putchar(x-2, y-3, ':'); | ee_putchar(x-2, y-3, ':'); | ||||
ee_putchar(x+3, y-3, ':'); | ee_putchar(x+3, y-3, ':'); | ||||
break; | break; | ||||
case 18: | case 18: | ||||
default: | default: | ||||
r = (18 - frame) * (18 - frame); | r = (18 - frame) * (18 - frame); | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putstr(x-1, y-5-r, ":%%:"); | ee_putstr(x-1, y-5-r, ":%%:"); | ||||
ee_putstr(x-1, y-4-r, "%##%"); | ee_putstr(x-1, y-4-r, "%##%"); | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_putchar(x-2, y-4-r, ':'); | ee_putchar(x-2, y-4-r, ':'); | ||||
ee_putchar(x+3, y-4-r, ':'); | ee_putchar(x+3, y-4-r, ':'); | ||||
ee_putchar(x-2, y-2, '\''); | ee_putchar(x-2, y-2, '\''); | ||||
ee_putchar(x+3, y-2, '`'); | ee_putchar(x+3, y-2, '`'); | ||||
ee_color(EE_BLUE); | |||||
ee_set_color(EE_BLUE); | |||||
ee_putchar(x-3, y-2, ':'); | ee_putchar(x-3, y-2, ':'); | ||||
ee_putchar(x+4, y-2, ':'); | ee_putchar(x+4, y-2, ':'); | ||||
for(i = 0; i <= r; i++) | for(i = 0; i <= r; i++) | ||||
{ | { | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_putstr(x-1, y-3-i, ((i+frame) % 5) ? "####" : "%%%%"); | ee_putstr(x-1, y-3-i, ((i+frame) % 5) ? "####" : "%%%%"); | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_putchar(x-2, y-3-i, '%'); | ee_putchar(x-2, y-3-i, '%'); | ||||
ee_putchar(x+3, y-3-i, '%'); | ee_putchar(x+3, y-3-i, '%'); | ||||
ee_color(EE_BLUE); | |||||
ee_set_color(EE_BLUE); | |||||
ee_putchar(x-3, y-3-i, ':'); | ee_putchar(x-3, y-3-i, ':'); | ||||
ee_putchar(x+4, y-3-i, ':'); | ee_putchar(x+4, y-3-i, ':'); | ||||
} | } | ||||
@@ -446,14 +443,14 @@ static void draw_nuke(int x, int y, int frame) | |||||
int r = (29 - frame) * (29 - frame) / 8; | int r = (29 - frame) * (29 - frame) / 8; | ||||
/* Lots of duplicate pixels, but we don't care */ | /* Lots of duplicate pixels, but we don't care */ | ||||
ee_color(EE_BLUE); | |||||
ee_set_color(EE_BLUE); | |||||
ee_draw_ellipse(x, y, r, r / 2, ':'); | ee_draw_ellipse(x, y, r, r / 2, ':'); | ||||
ee_draw_ellipse(x, y, r + 1, r / 2, ':'); | ee_draw_ellipse(x, y, r + 1, r / 2, ':'); | ||||
ee_draw_ellipse(x, y, r + 2, r / 2, ':'); | ee_draw_ellipse(x, y, r + 2, r / 2, ':'); | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_draw_ellipse(x, y, r + 2, r / 2 + 1, '%'); | ee_draw_ellipse(x, y, r + 2, r / 2 + 1, '%'); | ||||
ee_draw_ellipse(x, y, r + 3, r / 2 + 1, '%'); | ee_draw_ellipse(x, y, r + 3, r / 2 + 1, '%'); | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_draw_ellipse(x, y, r + 3, r / 2 + 2, '#'); | ee_draw_ellipse(x, y, r + 3, r / 2 + 2, '#'); | ||||
ee_draw_ellipse(x, y, r + 4, r / 2 + 2, '#'); | ee_draw_ellipse(x, y, r + 4, r / 2 + 2, '#'); | ||||
ee_draw_ellipse(x, y, r + 4, r / 2 + 3, '#'); | ee_draw_ellipse(x, y, r + 4, r / 2 + 3, '#'); | ||||
@@ -142,7 +142,7 @@ static void display_menu(void) | |||||
int yo = ee_get_height() - 2; | int yo = ee_get_height() - 2; | ||||
ee_clear(); | ee_clear(); | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_draw_line(xo, yo, 1, yo, '.'); | ee_draw_line(xo, yo, 1, yo, '.'); | ||||
ee_draw_line(1, yo, 1, 1, ':'); | ee_draw_line(1, yo, 1, 1, ':'); | ||||
ee_draw_line(xo, 1, xo, yo, ':'); | ee_draw_line(xo, 1, xo, yo, ':'); | ||||
@@ -178,7 +178,7 @@ static void demo_all(void) | |||||
ee_clear(); | ee_clear(); | ||||
/* Draw the sun */ | /* Draw the sun */ | ||||
ee_color(EE_YELLOW); | |||||
ee_set_color(EE_YELLOW); | |||||
xo = ee_get_width() / 4; | xo = ee_get_width() / 4; | ||||
yo = ee_get_height() / 4 + 5 * sin(0.03*i); | yo = ee_get_height() / 4 + 5 * sin(0.03*i); | ||||
@@ -190,9 +190,9 @@ static void demo_all(void) | |||||
} | } | ||||
j = 15 + sin(0.03*i) * 8; | j = 15 + sin(0.03*i) * 8; | ||||
ee_color(EE_WHITE); | |||||
ee_set_color(EE_WHITE); | |||||
ee_fill_ellipse(xo, yo, j, j / 2, '#'); | ee_fill_ellipse(xo, yo, j, j / 2, '#'); | ||||
ee_color(EE_YELLOW); | |||||
ee_set_color(EE_YELLOW); | |||||
ee_draw_ellipse(xo, yo, j, j / 2, '#'); | ee_draw_ellipse(xo, yo, j, j / 2, '#'); | ||||
/* Draw the pyramid */ | /* Draw the pyramid */ | ||||
@@ -208,19 +208,19 @@ static void demo_all(void) | |||||
x3 = ee_get_width() / 4 - sin(0.02*i) * 5; | x3 = ee_get_width() / 4 - sin(0.02*i) * 5; | ||||
y3 = ee_get_height() * 3 / 4 + cos(0.02*i) * 5; | y3 = ee_get_height() * 3 / 4 + cos(0.02*i) * 5; | ||||
ee_color(EE_GREEN); | |||||
ee_set_color(EE_GREEN); | |||||
ee_fill_triangle(xo, yo, x2, y2, x1, y1, '%'); | ee_fill_triangle(xo, yo, x2, y2, x1, y1, '%'); | ||||
ee_color(EE_YELLOW); | |||||
ee_set_color(EE_YELLOW); | |||||
ee_draw_thin_triangle(xo, yo, x2, y2, x1, y1); | ee_draw_thin_triangle(xo, yo, x2, y2, x1, y1); | ||||
ee_color(EE_RED); | |||||
ee_set_color(EE_RED); | |||||
ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#'); | ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#'); | ||||
ee_color(EE_YELLOW); | |||||
ee_set_color(EE_YELLOW); | |||||
ee_draw_thin_triangle(x1, y1, x2, y2, x3, y3); | ee_draw_thin_triangle(x1, y1, x2, y2, x3, y3); | ||||
ee_color(EE_BLUE); | |||||
ee_set_color(EE_BLUE); | |||||
ee_fill_triangle(xo, yo, x2, y2, x3, y3, '%'); | ee_fill_triangle(xo, yo, x2, y2, x3, y3, '%'); | ||||
ee_color(EE_YELLOW); | |||||
ee_set_color(EE_YELLOW); | |||||
ee_draw_thin_triangle(xo, yo, x2, y2, x3, y3); | ee_draw_thin_triangle(xo, yo, x2, y2, x3, y3); | ||||
/* Draw a background triangle */ | /* Draw a background triangle */ | ||||
@@ -233,7 +233,7 @@ static void demo_all(void) | |||||
x3 = ee_get_width() / 3; | x3 = ee_get_width() / 3; | ||||
y3 = ee_get_height() - 3; | y3 = ee_get_height() - 3; | ||||
ee_color(EE_CYAN); | |||||
ee_set_color(EE_CYAN); | |||||
ee_draw_thin_triangle(x1, y1, x2, y2, x3, y3); | ee_draw_thin_triangle(x1, y1, x2, y2, x3, y3); | ||||
xo = ee_get_width() / 2 + cos(0.027*i) * ee_get_width() / 3; | xo = ee_get_width() / 2 + cos(0.027*i) * ee_get_width() / 3; | ||||
@@ -244,13 +244,13 @@ static void demo_all(void) | |||||
ee_draw_thin_line(x3, y3, xo, yo); | ee_draw_thin_line(x3, y3, xo, yo); | ||||
/* Draw a sprite on the pyramid */ | /* Draw a sprite on the pyramid */ | ||||
ee_draw_sprite(xo, yo, sprite); | |||||
ee_draw_sprite(xo, yo, sprite, 0); | |||||
/* Draw a trail behind the foreground sprite */ | /* Draw a trail behind the foreground sprite */ | ||||
for(j = i - 60; j < i; j++) | for(j = i - 60; j < i; j++) | ||||
{ | { | ||||
int delta = ee_rand(-5, 5); | int delta = ee_rand(-5, 5); | ||||
ee_color(ee_rand(1, 10)); | |||||
ee_set_color(ee_rand(1, 10)); | |||||
ee_putchar(ee_get_width() / 2 | ee_putchar(ee_get_width() / 2 | ||||
+ cos(0.02*j) * (delta + ee_get_width() / 4), | + cos(0.02*j) * (delta + ee_get_width() / 4), | ||||
ee_get_height() / 2 | ee_get_height() / 2 | ||||
@@ -261,7 +261,7 @@ static void demo_all(void) | |||||
/* Draw foreground sprite */ | /* Draw foreground sprite */ | ||||
ee_draw_sprite(ee_get_width() / 2 + cos(0.02*i) * ee_get_width() / 4, | ee_draw_sprite(ee_get_width() / 2 + cos(0.02*i) * ee_get_width() / 4, | ||||
ee_get_height() / 2 + sin(0.02*i) * ee_get_height() / 3, | ee_get_height() / 2 + sin(0.02*i) * ee_get_height() / 3, | ||||
sprite); | |||||
sprite, 0); | |||||
ee_refresh(); | ee_refresh(); | ||||
} | } | ||||
@@ -275,7 +275,7 @@ static void demo_dots(void) | |||||
for(i = 1000; i--;) | for(i = 1000; i--;) | ||||
{ | { | ||||
/* Putpixel */ | /* Putpixel */ | ||||
ee_color(ee_rand(1, 10)); | |||||
ee_set_color(ee_rand(1, 10)); | |||||
ee_putchar(ee_rand(0, xmax), ee_rand(0, ymax), '#'); | ee_putchar(ee_rand(0, xmax), ee_rand(0, ymax), '#'); | ||||
} | } | ||||
ee_refresh(); | ee_refresh(); | ||||
@@ -298,7 +298,7 @@ static void demo_lines(void) | |||||
x2 = ee_rand(0, w - 1); y2 = ee_rand(0, h - 1); | x2 = ee_rand(0, w - 1); y2 = ee_rand(0, h - 1); | ||||
} | } | ||||
ee_color(ee_rand(1, 10)); | |||||
ee_set_color(ee_rand(1, 10)); | |||||
if(thin) | if(thin) | ||||
ee_draw_thin_line(x1, y1, x2, y2); | ee_draw_thin_line(x1, y1, x2, y2); | ||||
else | else | ||||
@@ -324,12 +324,12 @@ static void demo_boxes(void) | |||||
x2 = ee_rand(0, w - 1); y2 = ee_rand(0, h - 1); | x2 = ee_rand(0, w - 1); y2 = ee_rand(0, h - 1); | ||||
} | } | ||||
ee_color(ee_rand(1, 10)); | |||||
ee_set_color(ee_rand(1, 10)); | |||||
ee_fill_box(x1, y1, x2, y2, '#'); | ee_fill_box(x1, y1, x2, y2, '#'); | ||||
if(outline) | if(outline) | ||||
{ | { | ||||
ee_color(ee_rand(1, 10)); | |||||
ee_set_color(ee_rand(1, 10)); | |||||
ee_draw_thin_box(x1, y1, x2, y2); | ee_draw_thin_box(x1, y1, x2, y2); | ||||
} | } | ||||
@@ -357,12 +357,12 @@ static void demo_ellipses(void) | |||||
} while(x - a < 0 || x + a >= w || y - b < 0 || y + b >= h); | } while(x - a < 0 || x + a >= w || y - b < 0 || y + b >= h); | ||||
} | } | ||||
ee_color(ee_rand(1, 10)); | |||||
ee_set_color(ee_rand(1, 10)); | |||||
ee_fill_ellipse(x, y, a, b, '#'); | ee_fill_ellipse(x, y, a, b, '#'); | ||||
if(outline) | if(outline) | ||||
{ | { | ||||
ee_color(ee_rand(1, 10)); | |||||
ee_set_color(ee_rand(1, 10)); | |||||
ee_draw_thin_ellipse(x, y, a, b); | ee_draw_thin_ellipse(x, y, a, b); | ||||
} | } | ||||
@@ -389,12 +389,12 @@ static void demo_triangles(void) | |||||
x3 = ee_rand(0, w - 1); y3 = ee_rand(0, h - 1); | x3 = ee_rand(0, w - 1); y3 = ee_rand(0, h - 1); | ||||
} | } | ||||
ee_color(ee_rand(1, 10)); | |||||
ee_set_color(ee_rand(1, 10)); | |||||
ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#'); | ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#'); | ||||
if(outline) | if(outline) | ||||
{ | { | ||||
ee_color(ee_rand(1, 10)); | |||||
ee_set_color(ee_rand(1, 10)); | |||||
ee_draw_thin_triangle(x1, y1, x2, y2, x3, y3); | ee_draw_thin_triangle(x1, y1, x2, y2, x3, y3); | ||||
} | } | ||||
@@ -404,7 +404,7 @@ static void demo_triangles(void) | |||||
static void demo_sprites(void) | static void demo_sprites(void) | ||||
{ | { | ||||
ee_draw_sprite(ee_rand(0, ee_get_width() - 1), | ee_draw_sprite(ee_rand(0, ee_get_width() - 1), | ||||
ee_rand(0, ee_get_height() - 1), sprite); | |||||
ee_rand(0, ee_get_height() - 1), sprite, 0); | |||||
ee_refresh(); | ee_refresh(); | ||||
} | } | ||||
@@ -22,32 +22,89 @@ | |||||
#include "config.h" | #include "config.h" | ||||
#include <math.h> | |||||
#include <string.h> | |||||
#include <stdio.h> | |||||
#include "ee.h" | #include "ee.h" | ||||
int main(int argc, char **argv) | int main(int argc, char **argv) | ||||
{ | { | ||||
int quit = 0; | int quit = 0; | ||||
struct ee_sprite *sprite; | |||||
int frame = 0; | |||||
if(argc < 2) | |||||
{ | |||||
fprintf(stderr, "%s: missing argument (filename).\n", argv[0]); | |||||
return 1; | |||||
} | |||||
if(ee_init()) | if(ee_init()) | ||||
return 1; | |||||
sprite = ee_load_sprite(argv[1]); | |||||
if(!sprite) | |||||
{ | { | ||||
ee_end(); | |||||
fprintf(stderr, "%s: could not open `%s'.\n", argv[0], argv[1]); | |||||
return 1; | return 1; | ||||
} | } | ||||
/* Go ! */ | /* Go ! */ | ||||
while(!quit) | while(!quit) | ||||
{ | { | ||||
char key = ee_get_key(); | |||||
switch(key) | |||||
int xa, ya, xb, yb; | |||||
char buf[BUFSIZ]; | |||||
switch(ee_get_key()) | |||||
{ | { | ||||
case 0: | case 0: | ||||
break; | break; | ||||
case 'q': | case 'q': | ||||
quit = 1; | quit = 1; | ||||
break; | break; | ||||
case '-': | |||||
if(frame > 0) | |||||
frame--; | |||||
break; | |||||
case '+': | |||||
if(frame < ee_get_sprite_frames(sprite) - 1) | |||||
frame++; | |||||
break; | |||||
} | } | ||||
ee_clear(); | |||||
ee_set_color(EE_WHITE); | |||||
ee_draw_thin_box(0, 0, ee_get_width() - 1, ee_get_height() - 1); | |||||
ee_putstr(3, 0, "[ Sprite editor for libee ]"); | |||||
sprintf(buf, "sprite `%s'", argv[1]); | |||||
ee_putstr(3, 2, buf); | |||||
sprintf(buf, "frame %i/%i", frame, ee_get_sprite_frames(sprite) - 1); | |||||
ee_putstr(3, 3, buf); | |||||
/* Crosshair */ | |||||
ee_draw_thin_line(57, 2, 57, 18); | |||||
ee_draw_thin_line(37, 10, 77, 10); | |||||
ee_putchar(57, 10, '+'); | |||||
/* Boxed sprite */ | |||||
xa = -1 - ee_get_sprite_dx(sprite, frame); | |||||
ya = -1 - ee_get_sprite_dy(sprite, frame); | |||||
xb = xa + 1 + ee_get_sprite_width(sprite, frame); | |||||
yb = ya + 1 + ee_get_sprite_height(sprite, frame); | |||||
ee_set_color(EE_BLACK); | |||||
ee_fill_box(57 + xa, 10 + ya, 57 + xb, 10 + yb, ' '); | |||||
ee_set_color(EE_WHITE); | |||||
ee_draw_thin_box(57 + xa, 10 + ya, 57 + xb, 10 + yb); | |||||
ee_draw_sprite(57, 10, sprite, frame); | |||||
/* Free sprite */ | |||||
ee_draw_sprite(20, 10, sprite, frame); | |||||
ee_refresh(); | |||||
} | } | ||||
/* Clean up */ | /* Clean up */ | ||||