From c13439cd6bfca12a78d839e49ab6e2df54c557f4 Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Sat, 5 Jun 2021 13:38:03 +0200 Subject: [PATCH 1/5] Improve the title screen --- Plague.g1a | Bin 69676 -> 69776 bytes src/main.c | 19 ++++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Plague.g1a b/Plague.g1a index 39d689d1df594ad311d9cfbd6cfd9f2f2e28c284..60e4d8fa4684d05c2de4fd835237b3d125d4942b 100644 GIT binary patch delta 5796 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 Rgw|ekFQosf^NKC}{{R5x{CWTY delta 5701 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 Y{Bt8HUT%G7(b+%0!2iL}OQ-Vx0vjLhv;Y7A diff --git a/src/main.c b/src/main.c index 59cfc0e..44ba069 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,6 @@ /* Project name ......: Plague - Version ...........: 1.3.2 + Version ...........: 1.3.3 Last modification .: 4 June 2021 code and assets provided with licence : @@ -19,6 +19,8 @@ #include "mutation_engine.h" #include "save.h" +const char *VERSION = "1.3.3"; + // title_screen : display the title screen static void title_screen(void); @@ -95,9 +97,16 @@ static void title_screen(void) dupdate(); sleep_ms(250); - dsubimage(0, 0, &img_title, 0, 0, 128, 64, DIMAGE_NONE); - dupdate(); - sleep_ms(500); + for (int i = 64; i > 32; i --) + { + dclear(C_BLACK); + dsubimage(0, 0, &img_title, 0, 0, 128, 64, DIMAGE_NONE); + dprint_opt(16, i, C_WHITE, C_BLACK, 0, 0, "VERSION %s", VERSION, -1); + dupdate(); + sleep_ms(75); + } + sleep_ms(1000); + for (int frame = 0; frame < 5; frame ++) { @@ -111,7 +120,7 @@ static void title_screen(void) dclear(C_BLACK); dsubimage(0, 0, &img_title, 0, 65, 128, 64, DIMAGE_NONE); dupdate(); - sleep_ms(500); + sleep_ms(1000); for (int i = 0; i < 5; i ++) { From 6e2fae86496ab3c3ea84b111d91109e6fe2f588d Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Sat, 5 Jun 2021 14:39:48 +0200 Subject: [PATCH 2/5] Animated DNA in main screen --- Plague.g1a | Bin 69776 -> 69008 bytes assets-fx/bground.png | Bin 5922 -> 15246 bytes assets-fx/dna.png | Bin 9750 -> 808 bytes src/core.c | 10 ++++++---- src/core.h | 2 +- src/display_engine.c | 11 ++++++++--- src/display_engine.h | 2 +- src/epidemic_engine.c | 8 +++++++- src/main.c | 17 ++++++----------- 9 files changed, 29 insertions(+), 21 deletions(-) diff --git a/Plague.g1a b/Plague.g1a index 60e4d8fa4684d05c2de4fd835237b3d125d4942b..0a4f243644afe7e52dfdc641974a56962bd08e6d 100644 GIT binary patch delta 7650 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 delta 8499 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 W!8}!);n#8ha*A6*n*Z#J-~V4}Ga{G( diff --git a/assets-fx/bground.png b/assets-fx/bground.png index 37e9f89cf766fe9ddcc3c965394ea07a5aa9bc3e..a5187b29e2fcfe883f76004d45af33808c22b957 100644 GIT binary patch literal 15246 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

1#~yXK1Aa3Qgk;c_C>2MYgtWUVOKG_ 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 z z-#FVisAmQ8cyijkP*O6utno)g;x#Trd21A2D_n+p4YW>>usc@iP+uWja|Cu_X_ey0 z)3{4gJbeHs0F?}YGXOwGpnxI3V!(eR`fY@?0igdfLcpw95hj9D@JHp?yVFpGdwT}` p-cQ&-`DW6u`y99k+>iGFG3D?KA@&$erLq%7)LD4Si{{WEqMjikF delta 5865 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 diff --git a/assets-fx/dna.png b/assets-fx/dna.png index 07127be892581f1b528da5bc2c768a57464d3427..02cffb0c6811d91c807d31dcf08908c21f41b6dd 100644 GIT binary patch literal 808 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 Wwa#nIUldNa`Rd9#O63Yx!T$rvk*Ku* diff --git a/src/core.c b/src/core.c index ae92f7a..c70e6bc 100644 --- a/src/core.c +++ b/src/core.c @@ -9,7 +9,7 @@ #include "display_engine.h" -int next_frame(struct game *current_game) +int next_frame(struct game *current_game, int *dna_animation) { for (int i = 0; current_game->planes[i]; i++) { @@ -54,9 +54,12 @@ int next_frame(struct game *current_game) int limit_tick = LIMIT_TICK; if (current_game->boost) limit_tick = floor(LIMIT_TICK / 10); + current_game->time += ENGINE_TICK; current_game->total_time += ENGINE_TICK; + if (!(current_game->time % 150)) *dna_animation = (*dna_animation + 1) % 16; + if (current_game->time > limit_tick) { // Reset internal clock @@ -158,7 +161,7 @@ void message(char *msg) { display_message(msg); - int key = 0, frame = 1; + int key = 0, frame = 0; static volatile int tick = 1; int t = timer_configure(TIMER_ANY, DNA_ANIMATION_TICK*1000, GINT_CALL(callback_tick, &tick)); @@ -172,8 +175,7 @@ void message(char *msg) key = rtc_key(); display_dna_animation(frame); - frame = (frame + 1) % 24; - if (!frame) frame = 24; + frame = (frame + 1) % 16; } if (t >= 0) timer_stop(t); diff --git a/src/core.h b/src/core.h index a1de721..cd72f77 100644 --- a/src/core.h +++ b/src/core.h @@ -90,7 +90,7 @@ struct cursor int get_inputs(const int background, int *mutation_menu, int *boost); // next_frame : compute the plane's positions -int next_frame(struct game *current_game); +int next_frame(struct game *current_game, int *dna_animation); // rtc_key : get the key with RTC system int rtc_key(void); diff --git a/src/display_engine.c b/src/display_engine.c index 12b7978..c267d96 100644 --- a/src/display_engine.c +++ b/src/display_engine.c @@ -12,10 +12,11 @@ void display_background(const int background) } -void display_foreground(const int background, const struct game *current_game, const int mutation_menu) +void display_foreground(const int background, const struct game *current_game, const int mutation_menu, const int dna_animation) { extern const bopti_image_t img_mutations; extern const bopti_image_t img_planes; + extern const bopti_image_t img_dna; extern const uint8_t world[64][128]; GUNUSED int length; @@ -57,6 +58,9 @@ void display_foreground(const int background, const struct game *current_game, c if (current_game->planes[i]->y + 8 < 57) dsubimage(current_game->planes[i]->x - 4, current_game->planes[i]->y - 4, &img_planes, 0, 8 * (current_game->planes[i]->direction - 1), 8, 8, DIMAGE_NONE); } + // Animated DNA + dsubimage(1, 51, &img_dna, dna_animation * 8, 0, 7, 12, DIMAGE_NONE); + // Status bottom bar int length = 73 * current_game->research / current_game->limit; dprint(9, 58, C_BLACK, "%d", current_game->dna); @@ -196,9 +200,10 @@ void display_message(char *msg) void display_dna_animation(const int frame) { - extern bopti_image_t img_dna; + extern const bopti_image_t img_dna; - dsubimage(114, 29, &img_dna, 11 * (frame - 1), 0, 11, 32, DIMAGE_NONE); + dsubimage(2, 3, &img_dna, 8 * frame, 0, 7, 12, DIMAGE_NONE); + dsubimage(42, 3, &img_dna, 8 * ((frame + 2) % 16), 0, 7, 12, DIMAGE_NONE); dupdate(); } diff --git a/src/display_engine.h b/src/display_engine.h index a9c314e..5ac0dee 100644 --- a/src/display_engine.h +++ b/src/display_engine.h @@ -7,7 +7,7 @@ void display_background(const int background); // display_foreground : display the foreground, planes, statistics -void display_foreground(const int background, const struct game *current_game, const int mutation_menu); +void display_foreground(const int background, const struct game *current_game, const int mutation_menu, const int dna_animation); // display_mutation : display the mutation selection screen void display_mutation(const int table[4][8], const struct cursor c, const int mutation_menu); diff --git a/src/epidemic_engine.c b/src/epidemic_engine.c index e3762ea..5615b17 100644 --- a/src/epidemic_engine.c +++ b/src/epidemic_engine.c @@ -42,7 +42,7 @@ void epidemic_simulation(struct game *current_game) init_tab(current_game->grid.width * current_game->grid.height, current_grid, current_game->grid.data); int healed_rate = 0; - if (current_game->research == current_game->limit) healed_rate = rand() % 26; + if (current_game->research == current_game->limit) healed_rate = rand() % 11; // Make the epidemic grid evolove for (int i = 0; i < current_game->grid.width; i ++) @@ -97,6 +97,12 @@ void epidemic_simulation(struct game *current_game) } init_tab(current_game->grid.width * current_game->grid.height, current_game->grid.data, current_grid); free(current_grid); + + for (int i = 0; i < 4; i ++) + { + if (current_game->humans[i] < 0) current_game->humans[i] = 0; + else if (current_game->humans[i] > (current_game->grid.width * current_game->grid.height) - BLANK_CASES) current_game->humans[i] = (current_game->grid.width * current_game->grid.height) - BLANK_CASES; + } } diff --git a/src/main.c b/src/main.c index 44ba069..a04c32f 100644 --- a/src/main.c +++ b/src/main.c @@ -97,14 +97,9 @@ static void title_screen(void) dupdate(); sleep_ms(250); - for (int i = 64; i > 32; i --) - { - dclear(C_BLACK); - dsubimage(0, 0, &img_title, 0, 0, 128, 64, DIMAGE_NONE); - dprint_opt(16, i, C_WHITE, C_BLACK, 0, 0, "VERSION %s", VERSION, -1); - dupdate(); - sleep_ms(75); - } + dsubimage(0, 0, &img_title, 0, 0, 128, 64, DIMAGE_NONE); + dprint_opt(32, 29, C_WHITE, C_BLACK, 0, 0, "VERSION %s", VERSION, -1); + dupdate(); sleep_ms(1000); @@ -141,7 +136,7 @@ static void title_screen(void) int main_loop(struct game *current_game) { int background = 1, mutation_menu = 4; - int end = 0, to_save = 1; + int end = 0, to_save = 1, dna_animation = 0; static volatile int tick = 1; int t = timer_configure(TIMER_ANY, ENGINE_TICK*1000, GINT_CALL(callback_tick, &tick)); @@ -156,11 +151,11 @@ int main_loop(struct game *current_game) // Update the screen dclear(C_WHITE); display_background(background); - display_foreground(background, current_game, mutation_menu); + display_foreground(background, current_game, mutation_menu, dna_animation); dupdate(); // Compute the motion of planes, DNA points and infectious model - to_save = next_frame(current_game); + to_save = next_frame(current_game, &dna_animation); if (!to_save) end = 1; // Get inputs from the keyboard and manage it From 591630c6e1c775214b23b02678d6318b3d263e0a Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Sat, 5 Jun 2021 18:29:37 +0200 Subject: [PATCH 3/5] Add compatility code for G35+E II --- Plague.g1a | Bin 69008 -> 69072 bytes src/main.c | 7 ++++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Plague.g1a b/Plague.g1a index 0a4f243644afe7e52dfdc641974a56962bd08e6d..70aace225d3d8503e9d69ba771982468fca98d37 100644 GIT binary patch delta 5203 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 AMgRZ+ delta 5112 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 CO;_{) diff --git a/src/main.c b/src/main.c index a04c32f..71e2a5d 100644 --- a/src/main.c +++ b/src/main.c @@ -13,6 +13,7 @@ #include #include #include +#include #include "core.h" #include "display_engine.h" @@ -74,12 +75,12 @@ int main(void) current_game.grid.data[95 + 20 * current_game.grid.width] = 1; current_game.humans[0] = (current_game.grid.width * current_game.grid.height) - 1 - BLANK_CASES; - read_save(¤t_game); + gint_world_switch(GINT_CALL(read_save, (void *)¤t_game)); int to_save = main_loop(¤t_game); - if (to_save) write_save(¤t_game); - else delete_save(); + if (to_save) gint_world_switch(GINT_CALL(write_save, (void *)¤t_game)); + else gint_world_switch(GINT_CALL(delete_save)); // Free memory free(current_game.grid.data); From c560c9d17f9a86bd694e1c85b096fe545e2673bd Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Sat, 5 Jun 2021 20:13:17 +0200 Subject: [PATCH 4/5] Fix bugs on save --- Plague.g1a | Bin 69072 -> 69072 bytes src/main.c | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plague.g1a b/Plague.g1a index 70aace225d3d8503e9d69ba771982468fca98d37..313e51765728242e8123fe61e1da8b54d7a2d3fd 100644 GIT binary patch delta 856 zcmYk2ZAepL6vxlGcgC*Q%Gu1N)?Rd*!?!2x#Se-bL~n|Y&y66Ml z)Ja_pV|6diewT2ApOAZSTRfMK;83eAS~CO+GzZN_G`oNL z!WZ9&M?Ig^N<1nk(Gq`R!01+e(-!>%DWVpCA~3YP=Z;LZ`zZZ(Kqc;<8o*L6fKWnJhZWnkOT$Tm<5=Zc78@D%zEm-)1b9SnHvWBnA6L*teqIT5Ra(G3X(=6ef=yyeAT?QiDl|Qm^P1M)DmodhR>wi$9 zriN=66jKeG*%%WyPj~FXs90%fLJaa!?=$K}ytT(LID6}}gch+qx+I}Vyc+LBDwf+z LIt+{Wo%r=%iM$$U delta 866 zcmYjPT}V@582;XKjl>^6SeVNlnQi zWsay;V$|eIdWX6{xs-nGa3-Yf6`OSd zK{cS19p?izZML)NGwIXmzVxZ|$uv=V)5Ce8{OYi(_l|X>+)6^M4u@Ve>&EAZOj0;B zU?Nl#*Jx!up_Oq$TSf_a;UTnjhS0-Rgw_NJEs}8R2`%YBpdd=9Tu5kJ4WZ>#d@;`{ zz!WoS#&lDJN(iodN$7r5R(g3%vld{MEz08#1anq~oR!eLxMHQ5B~;&@wc}F-T>zb| zs&L#I>F)0CAvB0zwW7$@NvQb(p(fnTjKYcqTxE$b6|NOvf$NK(0xYno_9;j_sA~lI z*h+*ViN#9Zg2X0P-A1TM|4P`3kZzRFO-q;xrw&_?@w|g8=yBD5&H;3@bgsDD3t3Yc zhj#v}YzQ3L%24#TvRsZbtVVeWwl^H{d$A;UJu zgO=AqmTVaz)Zu5n)`S1OJ+lV#{C{LEwh+o@Y}Mdr8hfK0Y0P9YsA%UNyHS8JKj)Yh zxohLk0+{9XJ3fdIXNLNp*lT&ic?j~6hWP@B^UFBwNV^V?$Puxsg{0%d;BNG4s diff --git a/src/main.c b/src/main.c index 71e2a5d..463a69d 100644 --- a/src/main.c +++ b/src/main.c @@ -157,7 +157,7 @@ int main_loop(struct game *current_game) // Compute the motion of planes, DNA points and infectious model to_save = next_frame(current_game, &dna_animation); - if (!to_save) end = 1; + if (!to_save) return 0; // Get inputs from the keyboard and manage it background = get_inputs(background, &mutation_menu, ¤t_game->boost); @@ -172,6 +172,6 @@ int main_loop(struct game *current_game) } if (t >= 0) timer_stop(t); - return to_save; + return 1; } From fd30be40334992a2e22946983c91b0d6e147b62b Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Sat, 5 Jun 2021 20:20:10 +0200 Subject: [PATCH 5/5] Minor change on title screen and add version --- src/main.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/main.c b/src/main.c index 463a69d..6fe7651 100644 --- a/src/main.c +++ b/src/main.c @@ -116,15 +116,7 @@ static void title_screen(void) dclear(C_BLACK); dsubimage(0, 0, &img_title, 0, 65, 128, 64, DIMAGE_NONE); dupdate(); - sleep_ms(1000); - - for (int i = 0; i < 5; i ++) - { - dclear(C_BLACK); - dsubimage(0, 0, &img_title, 0, ((i % 2) + 1) * 65, 128, 64, DIMAGE_NONE); - dupdate(); - sleep_ms(250); - } + sleep_ms(750); dclear(C_BLACK); dsubimage(0, 0, &img_title, 0, 130, 128, 64, DIMAGE_NONE);