From 21f5ad03dde5f52b6aa39570c672a363c0bcd5bc Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Sun, 30 May 2021 21:33:32 +0200 Subject: [PATCH] Bases of the epidemic engine --- CMakeLists.txt | 1 + Plague.g1a | Bin 48108 -> 50600 bytes assets-fx/bground.png | Bin 5113 -> 18592 bytes assets-fx/plague.png | Bin 1604 -> 18053 bytes src/core.c | 3 +++ src/core.h | 4 ++-- src/display_engine.c | 9 +++++---- src/display_engine.h | 2 +- src/epidemic_engine.c | 19 +++++++++++++++++++ src/epidemic_engine.h | 10 ++++++++++ src/main.c | 4 +++- src/mutation_engine.c | 7 ++++++- src/mutation_engine.h | 4 +++- 13 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 src/epidemic_engine.c create mode 100644 src/epidemic_engine.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 294350e..a37a897 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ set(SOURCES src/display_engine.c src/mutation_engine.c src/mutation_data.c + src/epidemic_engine.c # ... ) # Shared assets, fx-9860G-only assets and fx-CG-50-only assets diff --git a/Plague.g1a b/Plague.g1a index aaaa1f417ee3502fe8c6ab1284af71503812a5fb..5e3df4abf519c68203cfe81760680fa0662aaaf8 100644 GIT binary patch delta 7176 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 Rt8N@>==Tt*pS5U9H!K`#hR}wDR&_q@88~@ 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 Br;-2w literal 1604 zcmZuw3sBTW7++E3&=@>LWlT-EzYiQxFcYf-Q4eGlk;oEGWKJrS#}X+%I7tD)P*Cs_ zFii=AQbSQZZ*dfS9UkC74v{CYJSIki(SYn!&}rHhoN++fnce;NKi{{%$G87|{(j4C zMok)p5VFBOssORah&e|#Qmm2BS{o4>j{JSsc!?wLpS*wL;>7y~V~kP?0E7^Xu_Q?h zA&L+nL=eIVNup}VC&mz^2mld+Fhlu3k4O2Q0kN~{K6#l$|6s(}Tl|Ev zI@iL;h@^VC%h*33T}icCg(?qU*uNvla{Puwon~!xK%+}lfHLw@RQ;n|_}k%eY1zSz ztJ~jau9^DkhVciJyrSzIRE24(6?>BHI&GY$p2-S`2s=5iYU$xzylQ@PgUi~PXK!0B z2>a^0UzOXOQx})-R8f1^?vVCHruxffh5Iq%;;i)=a#ko;6l>aY9wfPE(uSbL4rguKq=! zZqw{>R(gB;VQc-?-_I{NmbqZM!?NPpzPD17XmQnMq34*mV3c8=Y4zEn4ivc1E_XUlw0U)JPxHF z_wCf*+G1xihn?QilX$eXz9xI_?C>)s?^G6Tn6=Ks`nT=LmFnJrgtyE&mT~87-Qx=! z;pvFU`@cDza5B5YzUhufjpmaZEj#`*??UV4n46^WxeA8r>CcI-vRZ z--_*u(qTR8nq|h&kh%k&4WZix6WSi+mK5f7^!*dq%THCb HRFm`{A5RDj diff --git a/src/core.c b/src/core.c index d7f884c..c526a40 100644 --- a/src/core.c +++ b/src/core.c @@ -48,6 +48,9 @@ void next_frame(struct game *current_game) if (current_game->dna <= 100) current_game->dna += 1; current_game->time = 0; + current_game->research += current_game->priority; + // if (current_game->research > current_game->limit) ; game over + // Epidemic propagation simulation to add here } } diff --git a/src/core.h b/src/core.h index d3eca8b..cd3f2dc 100644 --- a/src/core.h +++ b/src/core.h @@ -6,7 +6,7 @@ #define CURSOR_TICK 150 #define DNA_ANIMATION_TICK 150 -// The duration for DNA points and infectious model (ms) +// Duration for DNA points and infectious model (ms) #define LIMIT_TICK 10000 // Number of planes on screen @@ -27,7 +27,7 @@ struct game int mutations_bought[3][14]; // Research data - int research, limit; + int research, limit, priority; // Time int time; diff --git a/src/display_engine.c b/src/display_engine.c index 93379da..e9ee567 100644 --- a/src/display_engine.c +++ b/src/display_engine.c @@ -83,12 +83,13 @@ void display_mutation(const int table[4][8], const struct cursor c, const int mu } -void display_mutation_buy(const struct cursor c, const int mutation_menu, const int table[4][8], const int button_selected) +void display_mutation_buy(const struct cursor c, const int mutation_menu, const int table[4][8], const int button_selected, const struct game *current_game) { extern const bopti_image_t img_mutations; const int id = table[c.y][c.x]; struct mutation *mutation_data = get_mutation_data(mutation_menu, id); + struct mutation *mutation_sel = get_mutation_data(mutation_menu, current_game->mutations_selected[mutation_menu]); dclear(C_WHITE); @@ -97,9 +98,9 @@ void display_mutation_buy(const struct cursor c, const int mutation_menu, const dprint(47, 25, C_BLACK, mutation_data->name); dprint(81, 33, C_BLACK, "%d", mutation_data->dna); - dprint(81, 41, C_BLACK, "%d", mutation_data->contagion); - dprint(81, 49, C_BLACK, "%d", mutation_data->lethality); - dprint(81, 57, C_BLACK, "%d", mutation_data->severity); + dprint(81, 41, C_BLACK, "%d (%d)", mutation_data->contagion, mutation_data->contagion - mutation_sel->contagion); + dprint(81, 49, C_BLACK, "%d (%d)", mutation_data->severity, mutation_data->severity - mutation_sel->severity); + dprint(81, 57, C_BLACK, "%d (%d)", mutation_data->lethality, mutation_data->lethality - mutation_sel->lethality); if (button_selected) drect(81, 2, 123, 8, C_INVERT); else drect(81, 12, 123, 18, C_INVERT); diff --git a/src/display_engine.h b/src/display_engine.h index 6942f3c..916e4f8 100644 --- a/src/display_engine.h +++ b/src/display_engine.h @@ -13,7 +13,7 @@ void display_foreground(const int background, const struct game *current_game); void display_mutation(const int table[4][8], const struct cursor c, const int mutation_menu); // mutation_selected : display the mutation's informations screen -void display_mutation_buy(const struct cursor c, const int mutation_menu, const int table[4][8], const int button_selected); +void display_mutation_buy(const struct cursor c, const int mutation_menu, const int table[4][8], const int button_selected, const struct game *current_game); // output_error : display text and message background void display_message(const char *msg[5]); diff --git a/src/epidemic_engine.c b/src/epidemic_engine.c new file mode 100644 index 0000000..4caaf25 --- /dev/null +++ b/src/epidemic_engine.c @@ -0,0 +1,19 @@ +#include "epidemic_engine.h" + +int * count(const int epidemic_grid[10][20], int counter[4]) +{ + for (int i = 0; i < 10; i ++) + { + for (int j = 0; j < 20; j ++) + { + counter[epidemic_grid[i][j]] ++; + } + } + return counter; +} + +int can_become_infected(const int epidemic_grid[10][20], const int i, const int j) +{ + + return 0; +} \ No newline at end of file diff --git a/src/epidemic_engine.h b/src/epidemic_engine.h new file mode 100644 index 0000000..132d939 --- /dev/null +++ b/src/epidemic_engine.h @@ -0,0 +1,10 @@ +#ifndef _EPIDEMIC_ENGINE_H +#define _EPIDEMIC_ENGINE_H + +// count : return an int *counter[4] of the form {healthy, infected, healed, dead} +int * count(const int epidemic_grid[10][20], int counter[4]); + +// can_become_infected : return 0 if the case (i, j) isn't infectable, 1 else +int can_become_infected(const int epidemic_grid[10][20], const int i, const int j); + +#endif /* _EPIDEMIC_ENGINE_H */ \ No newline at end of file diff --git a/src/main.c b/src/main.c index 2f9dbae..6e58790 100644 --- a/src/main.c +++ b/src/main.c @@ -15,6 +15,7 @@ #include "core.h" #include "display_engine.h" #include "mutation_engine.h" +#include "epidemic_engine.h" // title_screen : display the title screen @@ -51,7 +52,8 @@ int main(void) .mutations_bought = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, .research = 0, - .limit = 100, + .limit = RESEARCH_LIMIT, + .priority = 0, .time = 0, diff --git a/src/mutation_engine.c b/src/mutation_engine.c index ed14116..8b0931a 100644 --- a/src/mutation_engine.c +++ b/src/mutation_engine.c @@ -96,7 +96,7 @@ int mutation_buy(struct game *current_game, const struct cursor c, const int mut while (1) { - display_mutation_buy(c, mutation_menu, table, button_selected); + display_mutation_buy(c, mutation_menu, table, button_selected, current_game); key = getkey().key; if (key == KEY_DOWN || key == KEY_UP) button_selected = (button_selected + 1) % 2; @@ -149,9 +149,14 @@ void update_disease(struct game *current_game) struct mutation *ability = get_mutation_data(2, current_game->mutations_selected[1]); struct mutation *transmission = get_mutation_data(3, current_game->mutations_selected[2]); + // disease parameters current_game->contagion = symptom->contagion + ability->contagion + transmission->contagion; current_game->severity = symptom->severity + ability->severity + transmission->severity; current_game->lethality = symptom->lethality + ability->lethality + transmission->lethality; + + // research parameters + current_game->limit = RESEARCH_LIMIT + symptom->changement + ability->changement + transmission->changement; + current_game->priority = floor((symptom->severity + ability->severity + transmission->severity) / 10); } diff --git a/src/mutation_engine.h b/src/mutation_engine.h index 206ba50..b8d22d1 100644 --- a/src/mutation_engine.h +++ b/src/mutation_engine.h @@ -4,6 +4,9 @@ #include "core.h" #include "display_engine.h" +// Basic limit research +#define RESEARCH_LIMIT 100 + // mutation_table : contain the map of the mutation available struct mutation_table { @@ -39,5 +42,4 @@ struct mutation * get_mutation_data(const int mutation_menu, const int id); // init_mat : copy src into dest (for int) void init_mat(int x, int y, int dest[][x], int src[][x]); - #endif /* _MUTATION_ENGINE_H */ \ No newline at end of file