diff options
Diffstat (limited to 'oldrunner.h')
-rw-r--r-- | oldrunner.h | 282 |
1 files changed, 282 insertions, 0 deletions
diff --git a/oldrunner.h b/oldrunner.h new file mode 100644 index 0000000..5e32306 --- /dev/null +++ b/oldrunner.h @@ -0,0 +1,282 @@ +/* $Id: oldrunner.h,v 1.2 2012/01/06 10:11:30 culot Exp $ */ + +/* + * Copyright (c) 2010, 2012 Frederic Culot <frederic@culot.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef OLDRUNNER_H +#define OLDRUNNER_H + +#include <stdlib.h> +#include <stdio.h> + +#include "config.h" +#include "compat.h" +#include "cfg.h" + +/* Option to set auto-center mode on/off */ +#define AUTO_CENTER_MODE 0 + +/* Game level screen properties. */ +#define LEVEL_DEFAULT_WIDTH 26 +#define LEVEL_DEFAULT_HEIGHT 16 +#define LEVEL_MAX_WIDTH 128 +#define LEVEL_MAX_HEIGHT 128 +#define VIEWPORT_WIDTH 80 +#define VIEWPORT_HEIGHT 24 + +/* Possible characters states. */ +#define STATE_ALIVE 0x01 +#define STATE_FALLING 0x02 +#define STATE_DIGGING 0x04 +#define STATE_TRAPPED 0x08 + +/* Game sprites. */ +enum sprite { + /* Sprites used to draw a level. */ + SP_NONE, + SP_BRICK, + SP_BRICK_SCRACK, + SP_BRICK_LCRACK, + SP_BRICK_BROKEN, + SP_CIMENT, + SP_FAKE_BRICK, + SP_LADDER, + SP_ROPE, + SP_ESCAPE_LADDER, + + /* Sprites used for objects. */ + SP_MONEY, + + /* Sprites used to draw characters. */ + SP_HERO, + SP_FOE, + SP_INVALID, + SPRITES +}; + +enum move { + MOV_UP, + MOV_DOWN, + MOV_LEFT, + MOV_RIGHT, + MOV_FALL, + MOV_NONE, + MOVES +}; + +struct size { + unsigned h; /* height */ + unsigned w; /* width */ +}; + +struct coord { + int y; /* Position on the vertical axis. */ + int x; /* Position on the horizontal axis. */ +}; + +struct timer { + double time; /* time in usec. */ + double elapsed; +}; + +/* Structure defining all possible user inputs. */ +struct usr_input { + int key; +}; + +struct game_info { +#define NO_CHANGE 0x0 +#define LEVEL_CHANGE 0x1 +#define SCORE_CHANGE 0x2 +#define LIVES_CHANGE 0x4 + int state; + + unsigned level; + unsigned score; + unsigned lives; +}; + +#define STRINGIFY(x) #x +#define TOSTRING(x) STRINGIFY(x) +#define __FILE_POS__ __FILE__ ":" TOSTRING(__LINE__) + +#define ERROR_MSG(...) do { \ + char msg[BUFSIZ]; \ + int len; \ + \ + len = snprintf (msg, BUFSIZ, "%s: %d: ", __FILE__, __LINE__); \ + (void)snprintf (msg + len, BUFSIZ - len, __VA_ARGS__); \ + (void)fprintf (stderr, "%s\n", msg); \ +} while (0) + +#define EXIT(...) do { \ + ERROR_MSG(__VA_ARGS__); \ + exit (1); \ +} while (0) + +#define EXIT_IF(cond, ...) do { \ + if ((cond)) \ + EXIT(__VA_ARGS__); \ +} while (0) + +/* bricks.c */ +#define BRICK_COMEBACK_TIME (OLDRUNNER_TIMEOUT * 80) +void bricks_init (void); +void bricks_free (void); +void bricks_break (const struct coord *); +void bricks_draw (void); +void bricks_update (void); +unsigned bricks_broken_at (const struct coord *); + +/* coord.c */ +void coord_copy (const struct coord *, struct coord *); +void coord_below (const struct coord *, struct coord *); +void coord_above (const struct coord *, struct coord *); +enum move coord_opposite_dir (enum move); +void coord_compute (const struct coord *, enum move, struct coord *); +void coord_set_yx (struct coord *, int, int); +unsigned coord_equal (const struct coord *, const struct coord *); +void coord_diff (const struct coord *, const struct coord *, + struct coord *); + +/* foes.c */ +void foes_init (void); +void foes_free (void); +void foes_add (const struct coord *); +void foes_draw (void); +unsigned foes_at_pos (const struct coord *); +void foes_update_pos (void); +unsigned foes_wallup_at (const struct coord *); + +/* game.c */ +void game_won (void); +void game_init (int); +void game_end (void); +void game_update (void); +unsigned game_load (const char *); +void game_score_inc (void); +int game_level_num (void); +void game_level_inc (void); +void game_level_dec (void); +void game_lives_inc (void); +void game_lives_dec (void); + +/* gfx.c */ +void gfx_init (void); +void gfx_end (void); +void gfx_alert (void); +void gfx_center_at (struct coord *); +void gfx_update (void); +void gfx_get_input (struct usr_input *); +void gfx_show_sprite (enum sprite, const struct coord *); +void gfx_move_sprite (enum sprite, const struct coord *, const struct coord *); +void gfx_update_info (const struct game_info *); +void gfx_popup (const char *, const char *); +void gfx_game_over (void); +void gfx_game_won (void); + +/* hero.c */ +void hero_init (void); +void hero_draw (void); +void hero_set_pos (const struct coord *); +void hero_set_initpos (const struct coord *); +void hero_get_pos (struct coord *); +void hero_get_initpos (struct coord *); +unsigned hero_at_pos (const struct coord *); +void hero_move (enum move); +void hero_dig (enum move); +void hero_dig_done (void); +void hero_trapped (void); +void hero_die (void); +unsigned hero_wallup_at (const struct coord *); + +/* io.c */ +FILE *io_fopen (const char *); +void io_fclose (FILE *); +char *io_getln (FILE *); + +/* lvl.c */ +void lvl_started (void); +enum sprite lvl_decor_at_pos (const struct coord *); +void lvl_init (void); +unsigned lvl_load (int); +unsigned lvl_load_next (void); +unsigned lvl_load_prev (void); +void lvl_won (void); +void lvl_lost (void); +void lvl_draw_escape_ladder (void); +unsigned lvl_set_name (const char *); +unsigned lvl_set_author (const char *); +unsigned lvl_set_size (char *); +unsigned lvl_set_row (int, int, const char *); +unsigned lvl_width (void); +unsigned lvl_height (void); +unsigned lvl_add_new (void); +unsigned lvl_valid_move (const struct coord *, enum move, struct coord *, + enum sprite); +unsigned lvl_valid_dig (const struct coord *); +unsigned lvl_nothing_below (const struct coord *); +unsigned lvl_obstacle_at (const struct coord *); +void lvl_objects_update (void); +unsigned lvl_got_hole_below (const struct coord *); +enum move lvl_shortest_way (const struct coord *, enum move, enum move); +int lvl_random_xpos (void); +enum move lvl_random_hdir (void); + +/* mem.c */ +void *xmalloc (size_t); +void *xcalloc (size_t, size_t); +void *xrealloc (void *, size_t, size_t); +char *xstrdup (const char *); +void xfree (void *); + +/* money.c */ +void money_init (void); +void money_free (void); +void money_add (const struct coord *); +void money_draw (void); +void money_check_at (const struct coord *); +unsigned money_all_collected (void); + +/* timer.c */ +void timer_get_time (struct timer *); +void timer_start (struct timer *); +void timer_stop (struct timer *); +double timer_diff (const struct timer *, const struct timer *); +double timer_elapsed (const struct timer *); +void timer_set (const struct timer *, struct timer *); +void timer_add (struct timer *, double); +unsigned timer_delay_elapsed (struct timer *, double); + +/* usr.c */ +void usr_input (void); +void usr_reset_input (void); + +#endif /* OLDRUNNER_H */ |