From 75533e1a350cdf1e93bdb34450762eb4458b2a79 Mon Sep 17 00:00:00 2001 From: John Westhoff Date: Sun, 2 Oct 2022 22:35:24 -0700 Subject: [PATCH 1/3] Add error for version mismatch --- Makefile | 5 ++--- src/core/demo.c | 8 ++++++-- src/ui/gui.c | 2 +- src/ui/gui.h | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index cb8e88b..0d896cb 100644 --- a/Makefile +++ b/Makefile @@ -13,8 +13,7 @@ CC = gcc LINKS =-lncurses -lpanel COMMON_FLAGS =-g -Wall -pedantic -Wextra -Werror \ -Wmissing-prototypes -Wstrict-prototypes $(INCLUDE) -CC_FLAGS =-std=c89 $(COMMON_FLAGS) $(INCLUDE)\ - -D__NEED_USLEEP__ +CC_FLAGS =-std=c89 $(COMMON_FLAGS) $(INCLUDE) $(EXTRA_FLAGS) ID = uncrustify ID_FLAGS =-c uncrustify.cfg @@ -43,4 +42,4 @@ lint: $(SOURCES:.c=.c~uncrust) $(HEADERS:.h=.h~uncrust) # Allow you to get a valid build without the -std=c89 standard # (for local development) cheat: CC_FLAGS = $(COMMON_FLAGS) $(INCLUDE) -cheat: $(EXEC) \ No newline at end of file +cheat: $(EXEC) diff --git a/src/core/demo.c b/src/core/demo.c index 1b885d1..1417b98 100644 --- a/src/core/demo.c +++ b/src/core/demo.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "demo.h" #include "args.h" @@ -12,7 +13,7 @@ static FILE* write_to = 0; static int demo_speed = 300; -#ifdef __NEED_USLEEP__ +#ifndef __HAS_USLEEP__ void usleep(long); /* needed because headers are big sad */ #endif @@ -38,7 +39,10 @@ static void demo_read_header() unsigned long s; fread(&demo_version, sizeof(demo_version), 1, read_from); fread(&s, sizeof(s), 1, read_from); - /* TODO: fail if demo version is wrong */ + if (demo_version != DEMO_VERSION) { + fprintf(stderr, "File demo version (%d) does not match application version (%d)!\n", demo_version, DEMO_VERSION); + exit(1); + } set_seed(s); } diff --git a/src/ui/gui.c b/src/ui/gui.c index f1d9d36..4a60769 100644 --- a/src/ui/gui.c +++ b/src/ui/gui.c @@ -183,7 +183,7 @@ void set_scroll(int scroll) } void print_in_window(WINDOW * win, int starty, int startx, int width, - char *string, chtype color, bool mid) + char *string, chtype color, int mid) { int length; int x; diff --git a/src/ui/gui.h b/src/ui/gui.h index 33b70e9..33b36af 100644 --- a/src/ui/gui.h +++ b/src/ui/gui.h @@ -11,7 +11,7 @@ void init_wins(WINDOW ** wins, struct winsize w); void win_show(WINDOW * win); void print_in_window(WINDOW * win, int starty, int startx, int width, - char *string, chtype color, bool mid); + char *string, chtype color, int mid); void print_stats(struct player *p, WINDOW * wins2, int floor_tick); void print_action(void); void add_action(char *s); From 836546d2faea473517e398f434109d297b10d9d5 Mon Sep 17 00:00:00 2001 From: John Westhoff Date: Tue, 4 Oct 2022 23:54:42 -0700 Subject: [PATCH 2/3] Halloween detection --- src/core/controls.h | 2 ++ src/core/demo.c | 10 ++++++++++ src/core/demo.h | 2 +- src/core/main.c | 21 ++++++++++++++++++--- src/core/main.h | 3 +++ src/logic/enemy_rulebook.c | 25 +++++++++++++------------ 6 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/core/controls.h b/src/core/controls.h index 663e7d8..a3052a6 100644 --- a/src/core/controls.h +++ b/src/core/controls.h @@ -6,6 +6,8 @@ #define KEY_F(n) (KEY_F0 + (n)) #endif +#define COMMAND_CHAR 17 + /* Normal movements */ #define KEY_MOVE_N 'j' #define KEY_MOVE_N_BABBY 0x102 diff --git a/src/core/demo.c b/src/core/demo.c index 1417b98..1cdcbfe 100644 --- a/src/core/demo.c +++ b/src/core/demo.c @@ -4,6 +4,8 @@ #include #include "demo.h" #include "args.h" +#include "controls.h" +#include "main.h" static void demo_write_header(void); static void demo_read_header(void); @@ -36,6 +38,7 @@ int demo_next(void) static void demo_read_header() { int demo_version; + int halloween; unsigned long s; fread(&demo_version, sizeof(demo_version), 1, read_from); fread(&s, sizeof(s), 1, read_from); @@ -44,6 +47,9 @@ static void demo_read_header() exit(1); } set_seed(s); + fread(&halloween, sizeof(halloween), 1, read_from); + fread(&halloween, sizeof(halloween), 1, read_from); + set_halloween(halloween); } @@ -51,8 +57,12 @@ static void demo_write_header(void) { unsigned long s = get_seed(); int demo_version = DEMO_VERSION; + int command_char = COMMAND_CHAR; + int one = is_halloween(); fwrite(&demo_version, sizeof(demo_version), 1, write_to); fwrite(&s, sizeof(s), 1, write_to); + fwrite(&command_char, sizeof(command_char), 1, write_to); + fwrite(&one, sizeof(one), 1, write_to); } void demo_start(int mode, char* fname) diff --git a/src/core/demo.h b/src/core/demo.h index 1989caa..b35cdd2 100644 --- a/src/core/demo.h +++ b/src/core/demo.h @@ -7,7 +7,7 @@ void demo_header(void); #define DEMO_NONE 0 #define DEMO_REPLAY 1 #define DEMO_RECORD 2 -#define DEMO_VERSION 0 +#define DEMO_VERSION 1 #define DEMO_DEFAULT_FILE ".demo.hag" /* TODO: do we need a demo_close? */ #endif diff --git a/src/core/main.c b/src/core/main.c index b8529b1..1ea4a53 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -6,7 +6,9 @@ #include #include #include +#include +#include "main.h" #include "demo.h" #include "args.h" #include "player.h" @@ -21,12 +23,12 @@ #include "enemy.h" #include "gui.h" #include "key.h" -#include "main.h" #define W 60 #define H 13 int tick = 0; +int halloween = 0; @@ -51,6 +53,11 @@ int main(int argc, char **argv) enemy_t *at; WINDOW *my_wins[3]; PANEL *my_panels[3]; + time_t cur_time; + struct tm *tm; + cur_time = time(NULL); + tm = localtime(&cur_time); + halloween = tm->tm_mon == 9 && tm->tm_mday == 31; parse_args(argc, argv); floor_down(); @@ -60,8 +67,6 @@ int main(int argc, char **argv) /* https://stackoverflow.com/questions/1022957/getting-terminal-width-in-c */ ioctl(0, TIOCGWINSZ, &w); - - /* Initialize curses */ initscr(); cbreak(); @@ -335,3 +340,13 @@ void player_attacks(player_t *player, enemy_t *at) } } } + +int is_halloween(void) +{ + return halloween; +} + +void set_halloween(int h) +{ + halloween = h; +} diff --git a/src/core/main.h b/src/core/main.h index dc4fb0a..9913bd0 100644 --- a/src/core/main.h +++ b/src/core/main.h @@ -1,4 +1,7 @@ #ifndef MAIN_H +#include "player.h" extern int tick; void player_attacks(player_t *player, enemy_t *at); +int is_halloween(void); +void set_halloween(int h); #endif diff --git a/src/logic/enemy_rulebook.c b/src/logic/enemy_rulebook.c index ec20d54..3876a9b 100644 --- a/src/logic/enemy_rulebook.c +++ b/src/logic/enemy_rulebook.c @@ -18,9 +18,10 @@ int snek = 0; void generate_enemies() { called = 1; + book_length = 0; /* rat */ - rulebook[book_length].name = "rat"; + rulebook[book_length].name = is_halloween()?"spooky rat":"rat"; rulebook[book_length].pic = 'r' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 30; rulebook[book_length].base_sight_range = 10; @@ -33,7 +34,7 @@ void generate_enemies() book_length++; /* kobold */ - rulebook[book_length].name = "kobold"; + rulebook[book_length].name = is_halloween()?"spooky kobold":"kobold"; rulebook[book_length].pic = 'k' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 50; rulebook[book_length].base_sight_range = 15; @@ -46,7 +47,7 @@ void generate_enemies() book_length++; /* goblin */ - rulebook[book_length].name = "goblin"; + rulebook[book_length].name = is_halloween()?"spooky goblin":"goblin"; rulebook[book_length].pic = 'g' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 50; rulebook[book_length].base_sight_range = 15; @@ -59,7 +60,7 @@ void generate_enemies() book_length++; /* snake */ - rulebook[book_length].name = "snek"; + rulebook[book_length].name = is_halloween()?"spooky snek":"snek"; rulebook[book_length].pic = 's' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 50; rulebook[book_length].base_sight_range = 15; @@ -73,7 +74,7 @@ void generate_enemies() book_length++; /* slime */ - rulebook[book_length].name = "slime"; + rulebook[book_length].name = is_halloween()?"spooky slime":"slime"; rulebook[book_length].pic = 'm' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 75; rulebook[book_length].base_sight_range = 15; @@ -86,7 +87,7 @@ void generate_enemies() book_length++; /* orc */ - rulebook[book_length].name = "orc"; + rulebook[book_length].name = is_halloween()?"spooky orc":"orc"; rulebook[book_length].pic = 'o' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 75; rulebook[book_length].base_sight_range = 15; @@ -99,7 +100,7 @@ void generate_enemies() book_length++; /* wolf */ - rulebook[book_length].name = "wolf"; + rulebook[book_length].name = is_halloween()?"spooky wolf":"wolf"; rulebook[book_length].pic = 'w' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 50; rulebook[book_length].base_sight_range = 15; @@ -112,7 +113,7 @@ void generate_enemies() book_length++; /* imp */ - rulebook[book_length].name = "imp"; + rulebook[book_length].name = is_halloween()?"spooky imp":"imp"; rulebook[book_length].pic = 'i' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 75; rulebook[book_length].base_sight_range = 15; @@ -125,7 +126,7 @@ void generate_enemies() book_length++; /* griffin */ - rulebook[book_length].name = "griffin"; + rulebook[book_length].name = is_halloween()?"spooky griffin":"griffin"; rulebook[book_length].pic = 'G' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 100; rulebook[book_length].base_sight_range = 20; @@ -138,7 +139,7 @@ void generate_enemies() book_length++; /* grue */ - rulebook[book_length].name = "grue"; + rulebook[book_length].name = is_halloween()?"spooky grue":"grue"; rulebook[book_length].pic = 'U' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 60; rulebook[book_length].base_sight_range = 20; @@ -151,7 +152,7 @@ void generate_enemies() book_length++; /* fake hag */ - rulebook[book_length].name = "Hag"; + rulebook[book_length].name = is_halloween()?"Halloween Hag":"Hag"; rulebook[book_length].pic = 'H' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 1; rulebook[book_length].base_sight_range = 0; @@ -165,7 +166,7 @@ void generate_enemies() book_length++; /* hag */ - rulebook[book_length].name = "Hag"; + rulebook[book_length].name = is_halloween()?"Halloween Hag":"Hag"; rulebook[book_length].pic = 'H' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 30; rulebook[book_length].base_sight_range = 0; From 55baed5d986c4e65af8dd3aba4b9d353f6dcc3ae Mon Sep 17 00:00:00 2001 From: John Westhoff Date: Tue, 4 Oct 2022 23:58:19 -0700 Subject: [PATCH 3/3] Fix linting --- src/logic/enemy_rulebook.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/logic/enemy_rulebook.c b/src/logic/enemy_rulebook.c index 3876a9b..6b28442 100644 --- a/src/logic/enemy_rulebook.c +++ b/src/logic/enemy_rulebook.c @@ -21,7 +21,7 @@ void generate_enemies() book_length = 0; /* rat */ - rulebook[book_length].name = is_halloween()?"spooky rat":"rat"; + rulebook[book_length].name = is_halloween() ? "spooky rat" : "rat"; rulebook[book_length].pic = 'r' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 30; rulebook[book_length].base_sight_range = 10; @@ -34,7 +34,7 @@ void generate_enemies() book_length++; /* kobold */ - rulebook[book_length].name = is_halloween()?"spooky kobold":"kobold"; + rulebook[book_length].name = is_halloween() ? "spooky kobold" : "kobold"; rulebook[book_length].pic = 'k' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 50; rulebook[book_length].base_sight_range = 15; @@ -47,7 +47,7 @@ void generate_enemies() book_length++; /* goblin */ - rulebook[book_length].name = is_halloween()?"spooky goblin":"goblin"; + rulebook[book_length].name = is_halloween() ? "spooky goblin" : "goblin"; rulebook[book_length].pic = 'g' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 50; rulebook[book_length].base_sight_range = 15; @@ -60,7 +60,7 @@ void generate_enemies() book_length++; /* snake */ - rulebook[book_length].name = is_halloween()?"spooky snek":"snek"; + rulebook[book_length].name = is_halloween() ? "spooky snek" : "snek"; rulebook[book_length].pic = 's' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 50; rulebook[book_length].base_sight_range = 15; @@ -74,7 +74,7 @@ void generate_enemies() book_length++; /* slime */ - rulebook[book_length].name = is_halloween()?"spooky slime":"slime"; + rulebook[book_length].name = is_halloween() ? "spooky slime" : "slime"; rulebook[book_length].pic = 'm' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 75; rulebook[book_length].base_sight_range = 15; @@ -87,7 +87,7 @@ void generate_enemies() book_length++; /* orc */ - rulebook[book_length].name = is_halloween()?"spooky orc":"orc"; + rulebook[book_length].name = is_halloween() ? "spooky orc" : "orc"; rulebook[book_length].pic = 'o' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 75; rulebook[book_length].base_sight_range = 15; @@ -100,7 +100,7 @@ void generate_enemies() book_length++; /* wolf */ - rulebook[book_length].name = is_halloween()?"spooky wolf":"wolf"; + rulebook[book_length].name = is_halloween() ? "spooky wolf" : "wolf"; rulebook[book_length].pic = 'w' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 50; rulebook[book_length].base_sight_range = 15; @@ -113,7 +113,7 @@ void generate_enemies() book_length++; /* imp */ - rulebook[book_length].name = is_halloween()?"spooky imp":"imp"; + rulebook[book_length].name = is_halloween() ? "spooky imp" : "imp"; rulebook[book_length].pic = 'i' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 75; rulebook[book_length].base_sight_range = 15; @@ -126,7 +126,7 @@ void generate_enemies() book_length++; /* griffin */ - rulebook[book_length].name = is_halloween()?"spooky griffin":"griffin"; + rulebook[book_length].name = is_halloween() ? "spooky griffin" : "griffin"; rulebook[book_length].pic = 'G' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 100; rulebook[book_length].base_sight_range = 20; @@ -139,7 +139,7 @@ void generate_enemies() book_length++; /* grue */ - rulebook[book_length].name = is_halloween()?"spooky grue":"grue"; + rulebook[book_length].name = is_halloween() ? "spooky grue" : "grue"; rulebook[book_length].pic = 'U' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 60; rulebook[book_length].base_sight_range = 20; @@ -152,7 +152,7 @@ void generate_enemies() book_length++; /* fake hag */ - rulebook[book_length].name = is_halloween()?"Halloween Hag":"Hag"; + rulebook[book_length].name = is_halloween() ? "Halloween Hag" : "Hag"; rulebook[book_length].pic = 'H' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 1; rulebook[book_length].base_sight_range = 0; @@ -166,7 +166,7 @@ void generate_enemies() book_length++; /* hag */ - rulebook[book_length].name = is_halloween()?"Halloween Hag":"Hag"; + rulebook[book_length].name = is_halloween() ? "Halloween Hag" : "Hag"; rulebook[book_length].pic = 'H' | A_BOLD | COLORS_RED; rulebook[book_length].base_hp = 30; rulebook[book_length].base_sight_range = 0;