summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c142
1 files changed, 20 insertions, 122 deletions
diff --git a/src/main.c b/src/main.c
index c4ec5ea..93ac007 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);
+}