From 5b3b26ba7d03a910ca86c5c06c45dd4f717e787f Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Fri, 4 Jun 2021 16:32:37 +0200 Subject: [PATCH] Fix humans count and improve the game mecanics --- Plague.g1a | Bin 67124 -> 67156 bytes README.md | 16 ++++++++++++++-- assets-fx/bground.png | Bin 19054 -> 19289 bytes old assets/convert_world.py | 10 ++++------ src/core.c | 12 +++--------- src/core.h | 5 +++-- src/display_engine.c | 2 +- src/epidemic_engine.c | 23 +++++++++++++++++------ src/main.c | 6 +++--- src/mutation_engine.c | 17 +++++++++++------ src/mutation_engine.h | 2 +- 11 files changed, 57 insertions(+), 36 deletions(-) diff --git a/Plague.g1a b/Plague.g1a index 48881a2e3544e34b2f0024c9ff2ca979dcf1523b..ea62317d562bf66c9e6006308341a90d2c51becb 100644 GIT binary patch delta 6411 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 diff --git a/README.md b/README.md index 9b68803..09ff5d9 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,22 @@ +# Plague + +## Généralités + +### Présentation + Plague inc est un jeu de stratégie où le but est de réduire l'humanité à néant… Simple ? Non ! Il vous faudra manipuler avec dextérité et prudence un virus pour anéantir des humains qui ne sont pas super collaboratifs… Pire, ces petits rigolos veulent sauver leurs peaux et recherchent activement un remède à ce mystérieux virus inconnu ! +Vous commencez la partie en Asie Centrale. + ### Licence La totalité du projet est soumise à la licence GNU General Public Licence v3.0. +### To do list + + - Ajouter *in-game* des information sur chaque mutation + - Corriger le calcul avec les statistiques des humains + ## Contrôles Lancez le jeu, et pressez n'importe quelle touche pour passer l'écran principal. Une fois sur l'écran représentant la Terre, plusieurs choix s'offrent à vous : @@ -38,5 +51,4 @@ En mutant, votre maladie peut acquérir des capacités. Ces capacités lui perme ### Moyens de transmissions -Votre maladie aura tout le loisir de changer ses moyens de transmission ! Plus ou moins efficaces ceux-ci permettent à votre maladie d'accéder à des caractéristiques intéressantes qui lui permettront de coloniser le monde entier ! - +Votre maladie aura tout le loisir de changer ses moyens de transmission ! Plus ou moins efficaces ceux-ci permettent à votre maladie d'accéder à des caractéristiques intéressantes qui lui permettront de coloniser le monde entier ! \ No newline at end of file diff --git a/assets-fx/bground.png b/assets-fx/bground.png index fa6f7c358f08180f69bf940b009ee41eace2ed79..83b496d0e6c05dda94fcc413f4d786c88d31df8c 100644 GIT binary patch delta 10351 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 Z3Kac&N}Su2?1BIQ002ovPDHLkV1jas5~KhC diff --git a/old assets/convert_world.py b/old assets/convert_world.py index 094f5d1..2764dfe 100644 --- a/old assets/convert_world.py +++ b/old assets/convert_world.py @@ -14,12 +14,11 @@ def show(): img = Image.open("world.png") data = np.array(img) - rslt = "" + count = 0 for index, line in enumerate(data): for pxl in line: - rslt += f"{analyse(index, pxl)}" - rslt += "\n" - print(rslt) + if analyse(index, pxl) == 0: count += 1 + print(count) def get_tabular(): @@ -35,5 +34,4 @@ def get_tabular(): rslt += "\n};" print(rslt) - -get_tabular() +show() diff --git a/src/core.c b/src/core.c index a9bb46b..8c0a73e 100644 --- a/src/core.c +++ b/src/core.c @@ -48,8 +48,6 @@ void next_frame(struct game *current_game) // Infect the plane if (current_game->grid.data[current_game->planes[i]->x + current_game->planes[i]->y * current_game->grid.width] == 1 && current_game->mutations_selected[2] == 4) current_game->planes[i]->is_infected = 1; - - } } @@ -64,16 +62,12 @@ void next_frame(struct game *current_game) // Update the game current_game->dna = current_game->dna + 1 + floor(current_game->severity / 25); if (current_game->dna > 30) current_game->dna = 30; - if (current_game->research < current_game->limit) current_game->research += current_game->priority; + current_game->research += current_game->priority; + if (current_game->research > current_game->limit) current_game->research = current_game->limit; + epidemic_simulation(current_game); // Check the end of the game - if (current_game->research >= current_game->limit) - { - const char *msg[5] = {"Vous avez", "perdu.", "", "", ""}; - message(msg); - current_game->research = 0; - } if (!current_game->humans[1]) { if (current_game->humans[0] != 0) diff --git a/src/core.h b/src/core.h index 704bf20..9332e3d 100644 --- a/src/core.h +++ b/src/core.h @@ -3,8 +3,6 @@ #include - - // Duration for internal clock (ms) #define ENGINE_TICK 50 #define CURSOR_TICK 150 @@ -16,6 +14,9 @@ // Number of planes on screen #define NB_PLANES 5 +// Number of non-infectable cases +#define BLANK_CASES 5382 + struct grid { // 64, 128 diff --git a/src/display_engine.c b/src/display_engine.c index 7d89692..6cc5fd6 100644 --- a/src/display_engine.c +++ b/src/display_engine.c @@ -90,7 +90,7 @@ void display_foreground(const int background, const struct game *current_game, c case 6: for (int i = 0; i < 4; i ++) { - length = 63 * current_game->humans[i] / (current_game->grid.width * current_game->grid.height); + length = 63 * current_game->humans[i] / ((current_game->grid.width * current_game->grid.height) - BLANK_CASES); dline(61, i*8 + 31, 61 + length, i*8 + 31, C_BLACK); dline(61, i*8 + 32, 61 + length, i*8 + 32, C_BLACK); } diff --git a/src/epidemic_engine.c b/src/epidemic_engine.c index b504ed3..26f8ad4 100644 --- a/src/epidemic_engine.c +++ b/src/epidemic_engine.c @@ -32,6 +32,8 @@ bool bernoulli(const int p) void epidemic_simulation(struct game *current_game) { + extern const uint8_t world[64][128]; + srand(current_game->total_time); // Create a copy of the epidemic grid @@ -54,8 +56,11 @@ void epidemic_simulation(struct game *current_game) if (can_become_infected(current_game->grid, current_game->mutations_selected, i, j) && bernoulli(current_game->contagion)) { current_grid[i + j * current_game->grid.width] = 1; - current_game->humans[0] --; - current_game->humans[1] ++; + if (world[j][i]) + { + current_game->humans[0] --; + current_game->humans[1] ++; + } } break; @@ -66,16 +71,22 @@ void epidemic_simulation(struct game *current_game) if (bernoulli(healed_rate)) { current_grid[i + j * current_game->grid.width] = 2; - current_game->humans[1] --; - current_game->humans[2] ++; + if (world[j][i]) + { + current_game->humans[1] --; + current_game->humans[2] ++; + } } // Become dead else if (bernoulli(current_game->lethality)) { current_grid[i + j * current_game->grid.width] = 3; - current_game->humans[1] --; - current_game->humans[3] ++; + if (world[j][i]) + { + current_game->humans[1] --; + current_game->humans[3] ++; + } } break; } diff --git a/src/main.c b/src/main.c index 307b01a..8adeb4b 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,6 @@ /* Project name ......: Plague - Version ...........: 1.2 + Version ...........: 1.2.1 Last modification .: 4 June 2021 code and assets provided with licence : @@ -70,7 +70,7 @@ int main(void) current_game.grid.data = calloc(current_game.grid.width * current_game.grid.height, sizeof(uint8_t)); current_game.grid.data[95 + 20 * current_game.grid.width] = 1; - current_game.humans[0] = (current_game.grid.width * current_game.grid.height) - 1; + current_game.humans[0] = (current_game.grid.width * current_game.grid.height) - 1 - BLANK_CASES; read_save(¤t_game); @@ -130,7 +130,7 @@ static void title_screen(void) void main_loop(struct game *current_game) { - int background = 1, mutation_menu = 0; + int background = 1, mutation_menu = 4; int end = 0; static volatile int tick = 1; diff --git a/src/mutation_engine.c b/src/mutation_engine.c index 658c14f..d8eecf7 100644 --- a/src/mutation_engine.c +++ b/src/mutation_engine.c @@ -80,10 +80,13 @@ void mutation_select(struct game *current_game, const int mutation_menu) end = mutation_buy(current_game, c, mutation_menu, table); } - if (key == KEY_LEFT && c.x > 0) c.x = (c.x - 1) % 8; - if (key == KEY_RIGHT && c.x < 7) c.x = (c.x + 1) % 8; - if (key == KEY_UP && c.y > 0) c.y = (c.y - 1) % 4; - if (key == KEY_DOWN && c.y < 3) c.y = (c.y + 1) % 4; + if (key == KEY_LEFT) c.x = c.x - 1; + if (key == KEY_RIGHT) c.x = (c.x + 1) % 8; + if (key == KEY_UP) c.y = c.y - 1; + if (key == KEY_DOWN) c.y = (c.y + 1) % 4; + + if (c.x < 0) c.x = 7; + if (c.y < 0) c.y = 3; } if (t >= 0) timer_stop(t); } @@ -125,7 +128,7 @@ int mutation_buy(struct game *current_game, const struct cursor c, const int mut // Update update_disease(current_game); - current_game->priority += ceil((mutation_data->severity + mutation_data->lethality)/10); + current_game->priority += ceil((mutation_data->severity + mutation_data->lethality)/8); const char *msg[5] = {"mutation", "achetee", "", "", ""}; message(msg); } @@ -160,8 +163,10 @@ void update_disease(struct game *current_game) current_game->severity = symptom->severity + ability->severity + transmission->severity; current_game->lethality = symptom->lethality + ability->lethality + transmission->lethality; - // research parameters + // research parameter current_game->limit = RESEARCH_LIMIT + symptom->changement + ability->changement + transmission->changement; + if (current_game->research > current_game->limit) current_game->research = current_game->limit; + } diff --git a/src/mutation_engine.h b/src/mutation_engine.h index b8d22d1..f41a68b 100644 --- a/src/mutation_engine.h +++ b/src/mutation_engine.h @@ -5,7 +5,7 @@ #include "display_engine.h" // Basic limit research -#define RESEARCH_LIMIT 100 +#define RESEARCH_LIMIT 200 // mutation_table : contain the map of the mutation available struct mutation_table