diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 142 |
1 files changed, 20 insertions, 122 deletions
@@ -16,138 +16,29 @@ * <http://www.gnu.org/licenses/>. */ -#include <SDL.h> +#include <string.h> +#include <stdio.h> #include "init.h" #include "logging.h" -#include "resources/image.h" -#include "resources/map.h" -#include "viewport.h" -#include "area.h" -#include "palettes.h" +#include "demo.h" -#define DEMO() \ - do { \ - vp->x = x + map->tilewidth / 2 - vp->w / 2; \ - vp->y = y + map->tileheight / 2 - vp->h / 2; \ - /* \ - * See the following resources when computing realistic \ - * daylight cycles: \ - * * <https://en.wikipedia.org/wiki/Sunrise_equation> \ - * * <http://www.esrl.noaa.gov/gmd/grad/solcalc/sunrise.html>\ - */ \ - if (i % i_max < i_max / 6 * 2) { \ - /* 00:00 - 04:00 */ \ - t_max = i_max / 6 * 2; \ - pal_start = map->palettes[MAP_PALETTE_MORN] \ - .palette->palette; \ - pal_end = map->palettes[MAP_PALETTE_DAY] \ - .palette->palette; \ - } else if (i % i_max < i_max / 6 * 4) { \ - /* 04:00 - 12:00 */ \ - t_max = i_max / 6 * 2; \ - pal_start = map->palettes[MAP_PALETTE_DAY] \ - .palette->palette; \ - pal_end = map->palettes[MAP_PALETTE_EVE] \ - .palette->palette; \ - } else if (i % i_max < i_max / 6 * 5) { \ - /* 12:00 - 20:00 */ \ - t_max = i_max / 6 * 1; \ - pal_start = map->palettes[MAP_PALETTE_EVE] \ - .palette->palette; \ - pal_end = map->palettes[MAP_PALETTE_NIGHT] \ - .palette->palette; \ - } else { \ - /* 04:00 - 12:00 */ \ - t_max = i_max / 6 * 1; \ - pal_start = map->palettes[MAP_PALETTE_NIGHT] \ - .palette->palette; \ - pal_end = map->palettes[MAP_PALETTE_MORN] \ - .palette->palette; \ - } \ - if (!cycle_palettes_cosine(i, t_max, \ - pal_start, pal_end, pal)) { \ - warn("Failed to cycle palettes"); \ - } \ - set_area_palette(a, pal); \ - if (!SDL_SetPalette(vp->screen, SDL_LOGPAL, \ - pal->colors, 0, pal->ncolors)) { \ - warn("Failed to set palette"); \ - } \ - render_area_to_viewport(a, vp); \ - SDL_Flip(vp->screen); \ - SDL_Delay(10); \ - ++i; \ - } while (0) +static void usage(const char *program_name, FILE *stream); int -main(void) +main(int argc, char **argv) { - struct viewport *vp; - struct map *map; - struct area *a; - SDL_Palette *pal; - struct map_exit *e; + const char *game; - init(); - vp = init_viewport(320, 240, 8); - - map = map_get(MAPSDIR "/db16-route.tmx"); - if (map == NULL) { - map = map_get("data/maps/db16-route.tmx"); - } - if (map == NULL) { - err(1, "Where's the map, George?"); - } - pal = map->palettes[MAP_PALETTE_DAY].palette->palette; - if (!SDL_SetPalette(vp->screen, SDL_LOGPAL, pal->colors, - 0, pal->ncolors)) { - warn("Failed to set palette"); - } - a = area_new(map, vp->screen->format->palette); - - for (e = map->map_exits_head; e != NULL; e = e->next) { - debug("Map exit (size %dx%d) at (%d,%d) " - "to map %s (size %dx%d) at (%d,%d)", - e->width, e->height, - e->x, e->y, - e->target_map_name, - e->target_map->width, e->target_map->height, - e->target_x_coord, e->target_y_coord); + if (argc != 2) { + usage(argv[0], stderr); + exit(1); } + game = argv[1]; - /* Demo */ - { - Uint32 start, end; - int i, i_max, t_max; - int x, y; - SDL_Palette *pal_start, *pal_end; - - pal = malloc(sizeof(*pal)); - pal->colors = calloc(64, sizeof(*pal->colors)); - pal->ncolors = 64; + init(); - i = 0; - i_max = 1440; - start = SDL_GetTicks(); - x = 9 * map->tilewidth ; - y = 58 * map->tileheight; - for (; y > 50 * map->tileheight; y -= 1) DEMO(); /* Up */ - for (; x < 12 * map->tilewidth ; x += 1) DEMO(); /* Right */ - for (; y > 43 * map->tileheight; y -= 1) DEMO(); /* Up */ - for (; x > 5 * map->tilewidth ; x -= 1) DEMO(); /* Left */ - for (; y > 32 * map->tileheight; y -= 1) DEMO(); /* Up */ - for (; x < 13 * map->tilewidth ; x += 1) DEMO(); /* Right */ - for (; y > 31 * map->tileheight; y -= 1) DEMO(); /* Up */ - for (; x < 16 * map->tilewidth ; x += 1) DEMO(); /* Right */ - for (; y < 34 * map->tileheight; y += 1) DEMO(); /* Down */ - for (; x < 24 * map->tilewidth ; x += 1) DEMO(); /* Right */ - for (; y > 15 * map->tileheight; y -= 1) DEMO(); /* Up */ - for (; x > 11 * map->tilewidth ; x -= 1) DEMO(); /* Left */ - for (; y > 5 * map->tileheight; y -= 1) DEMO(); /* Up */ - for (; x < 17 * map->tilewidth ; x += 1) DEMO(); /* Right */ - for (; y > 1 * map->tileheight; y -= 1) DEMO(); /* Up */ - end = SDL_GetTicks(); - debug("Rendered %d frames in %d milliseconds", i, end - start); + if (strcmp(game, "demo") == 0) { + demo(); } quit(0); @@ -155,3 +46,10 @@ main(void) /* Control doesn't actually reach here. */ return 0; } + +void +usage(const char *program_name, FILE *stream) +{ + fprintf(stream, "Usage: %s <game>\n", program_name); + fputs("<game> can be \"demo\".\n", stream); +} |