From 9e26003200fb4a2f024e36b66fb86d1c254af131 Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Tue, 25 May 2021 13:24:48 +0200 Subject: [PATCH] re-organization : last commit --- CMakeLists.txt | 58 +++++++ Plague.g1a | Bin 0 -> 41984 bytes README.md | 88 +++++++++++ assets-fx/bground.png | Bin 0 -> 11163 bytes assets-fx/converters.py | 24 +++ assets-fx/fxconv-metadata.txt | 13 ++ assets-fx/icon.png | Bin 0 -> 1375 bytes assets-fx/mutations.png | Bin 0 -> 4858 bytes assets-fx/mutations_table/abilities_1.txt | 4 + assets-fx/mutations_table/abilities_2.txt | 4 + assets-fx/mutations_table/abilities_3.txt | 4 + assets-fx/mutations_table/fxconv-metadata.txt | 3 + assets-fx/mutations_table/symptoms_1.txt | 4 + assets-fx/mutations_table/symptoms_2.txt | 4 + assets-fx/mutations_table/symptoms_3.txt | 4 + assets-fx/mutations_table/transmissions_1.txt | 4 + assets-fx/mutations_table/transmissions_2.txt | 4 + assets-fx/mutations_table/transmissions_3.txt | 4 + assets-fx/piece.png | Bin 0 -> 629 bytes assets-fx/pieces.png | Bin 0 -> 8760 bytes assets-fx/plague.png | Bin 0 -> 1604 bytes assets-fx/planes.png | Bin 0 -> 677 bytes assets-fx/title.png | Bin 0 -> 3894 bytes src/core.c | 112 +++++++++++++ src/core.h | 79 ++++++++++ src/display_engine.c | 147 ++++++++++++++++++ src/display_engine.h | 16 ++ src/main.c | 125 +++++++++++++++ 28 files changed, 701 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 Plague.g1a create mode 100644 README.md create mode 100644 assets-fx/bground.png create mode 100644 assets-fx/converters.py create mode 100644 assets-fx/fxconv-metadata.txt create mode 100644 assets-fx/icon.png create mode 100644 assets-fx/mutations.png create mode 100644 assets-fx/mutations_table/abilities_1.txt create mode 100644 assets-fx/mutations_table/abilities_2.txt create mode 100644 assets-fx/mutations_table/abilities_3.txt create mode 100644 assets-fx/mutations_table/fxconv-metadata.txt create mode 100644 assets-fx/mutations_table/symptoms_1.txt create mode 100644 assets-fx/mutations_table/symptoms_2.txt create mode 100644 assets-fx/mutations_table/symptoms_3.txt create mode 100644 assets-fx/mutations_table/transmissions_1.txt create mode 100644 assets-fx/mutations_table/transmissions_2.txt create mode 100644 assets-fx/mutations_table/transmissions_3.txt create mode 100644 assets-fx/piece.png create mode 100644 assets-fx/pieces.png create mode 100644 assets-fx/plague.png create mode 100644 assets-fx/planes.png create mode 100644 assets-fx/title.png create mode 100644 src/core.c create mode 100644 src/core.h create mode 100644 src/display_engine.c create mode 100644 src/display_engine.h create mode 100644 src/main.c diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..b6f3adf --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,58 @@ +# Configure with [fxsdk build-fx] or [fxsdk build-cg], which provide the +# toolchain file and module path of the fxSDK + +cmake_minimum_required(VERSION 3.18) +project(Plague) + +include(GenerateG1A) +include(GenerateG3A) +include(Fxconv) +find_package(Gint 2.1 REQUIRED) + +set(SOURCES + src/main.c + src/core.c + src/display_engine.c + # ... +) +# Shared assets, fx-9860G-only assets and fx-CG-50-only assets +set(ASSETS + # ... +) +set(ASSETS_fx + assets-fx/plague.png + assets-fx/planes.png + assets-fx/bground.png + assets-fx/mutations.png + assets-fx/piece.png + assets-fx/title.png + assets-fx/mutations_table/abilities_1.txt + assets-fx/mutations_table/abilities_2.txt + assets-fx/mutations_table/abilities_3.txt + assets-fx/mutations_table/symptoms_1.txt + assets-fx/mutations_table/symptoms_2.txt + assets-fx/mutations_table/symptoms_3.txt + assets-fx/mutations_table/transmissions_1.txt + assets-fx/mutations_table/transmissions_2.txt + assets-fx/mutations_table/transmissions_3.txt + # ... +) +set(ASSETS_cg + assets-cg/example.png + # ... +) + +fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA) +fxconv_declare_converters(assets-fx/converters.py) + +add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}}) +target_compile_options(myaddin PRIVATE -Wall -Wextra -Os) +target_link_libraries(myaddin Gint::Gint) + +if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G) + generate_g1a(TARGET myaddin OUTPUT "Plague.g1a" + NAME "Plague" ICON assets-fx/icon.png) +elseif("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50) + generate_g3a(TARGET myaddin OUTPUT "MyAddin.g3a" + NAME "MyAddin" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png) +endif() diff --git a/Plague.g1a b/Plague.g1a new file mode 100644 index 0000000000000000000000000000000000000000..42200be9a633550358f2eefe29fedcc31cc7bc40 GIT binary patch literal 41984 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..c3a1686 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# Plague inc + +## Présentation + +De l'Anglais 'Plague' virus, ou peste et 'inc' diminutif de 'incorporated' peut être traduit par coopérative ou entreprise. Vous voila donc plongé dans 'L'Entreprise du Virus' un nom digne de 1984 : 'Le Ministère des Virus et de la Régulation Démographique' Ça nous fait un superbe acronyme : MVRD. J'aurais pu rajouter 'Et de la Santé Publique' on tape dans du très haut niveau là : MVRDESP aussi… Les Humains sont tellement fragiles, protégeons-les ! La plus grande menace pour l'Homme étant l'Homme, faites une bonne action : jouez à ce jeu ! + +Plague inc est donc 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… + +## 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 : + - [OPTN] permet d'afficher / cacher la barre en dessous du monde qui vous affiche vos points ADN et la barre de recherche des humains. + - [VARS] permet de passer au gros du jeu : les mutations. Ce menu vous affiche vos points ADN, mais aussi les mutations sélectionnées ainsi que vos point de contagion, de sévérité, et de létalité. Dans ce menu, vous pouvez modifier tout cela. + - [x^2] permet d'accéder au menu statistique qui vous affiche les stats sur les humains. La barre symbolise la popuation totale : donc la somme de toute les barre doit donné une seule barre entière. + +De manière générale, si vous êtes perdu, [EXIT] vous ramènera toujours sur la mappemonde. + +Dans le menu des mutations, vous pouvez modifier vos caractéristiques via les touches F1 à F6 comme suit : + - [F1] sert à changer les symptômes de votre maladie + - [F3] sert à changer les capacités d'adaptation de votre maladie + - [F5] sert à modifier les moyens de transmission de votre maladie + - [F6] sert à revenir au menu principal avec la mappemonde + +## Mutations + +Dans ce jeu, vous aurez le choix entre plusieurs mutations pour faire le plus de dégât possible parmis les humains ! Comme dans le jeu d'origine, celles-ci sont divisées en 3 catégories : Symptômes, Capacités, et Transmissions. + +Toutes les mutations ont plusieurs spécificités : + - Contagion qui détermine la proportion de personnes infectées + - Sévérité touche la recherche, on peut la comprendre de la manière suivante : si la sévérité est élevée, la maladie est grave, elle entraine par conséquent une recherche active de la part des Humains. Néanmoins, votre compteur de points ADN, augmente plus vite… + - Létalité détermine le taux de mortalité parmi les infectés… Une létalité élevée fera de votre maladie une veritable machine à tuer, mais cela vous dévoile au grand jour et accèlere la recherche ! + - ADN, du nom de la molècule qui compose le code génétique. Ici, rien à voir, les points ADN vous permettent d'acheter des mutations. + - Changement : certaines mutations par leur nature ralentissent la recherche, c'est ce ralentissement qui est symbolysé par changement. Concrétement, plus une maladie a de *changement* plus elle ralentit la recherche… + +### Symptômes + +Comme son nom l'indique, votre maladie aussi puissante soit-elle n'est pas invisible : elle présente certains symptômes qui ont leurs spécificités. Bien entendu, les symptômes présentés dans ce jeu font partie du jeu d'origines et leurs spécificités sont proches. + +|Nom|Coût ADN|Pt de contagion|Pt de sévérité|Pt de létalité|Changement| +|:---:|:---:|:---:|:---:|:---:|:---:| +|nausée|2|1|1|0|0,5 +|vomissement|4|3|2|0|0,5 +|tumeurs|15|4|2|5|1 +|pneumonie|4|2|2|0|0,5 +|toux|3|2|1|0|0,5 +|arrêt total des organes|30|0|20|25|2 +|folie|20|6|15|0|2 +|paranoïa|5|0|4|0|1 +|lésions|10|5|4|0|0,5 +|hémorragie|20|5|15|15|0,5 +|plaies|3|2|1|0|0,5 +|infections|17|6|7|6|0,5 +|immunodéficience|12|2|6|4|1 +|inflammation|5|2|2|2|0,5 + +### Capacités + +En mutant, votre maladie peut acquérir des capacités. Ces capacités lui permettent de mieux apréhender un milieu ou une situation, ainsi la capacité *Résistance au froid* donne un suplément de vigueur à votre virus dans les pays froid. Cela se traduit par une augmentation plus ou moins forte de la contagion dans ces régions du monde… + +|Nom|Pt de contagion|Pt de sévérité|Pt de létalité|Coût ADN| +|:---:|:---:|:---:|:---:|:---:| +|résistance au froid|+4|||10 +|résistance au chand|+7|||15 +|résistance à l'environnement|+10|||30 +|résistance aux médicaments||+2|+0,5|15 +|résistance génétique||+5|+1|25 +|mutation accélérée||+8|+2|30 + +### 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érestiques intéressantes qui lui permettront de coloniser le monde entier ! ;) + +|Nom|Pt de contagion|Coût ADN| +|:---:|:---:|:---:| +|air Nv 1|+2|9 +|air Nv 2|+5|15 +|air Nv 3|+8|20 +|air et eau|+10|30 +|eau Nv 1|+2|9 +|eau Nv 2|+3|12 +|eau Nv 3|+9|25 +|oiseau Nv 1|+3|12 +|oiseau Nv 2|+5|18 +|animaux Nv 1|+2|10 +|animaux Nv 2|+6|16 +|sang Nv 1|+1|8 +|sang Nv 2|+4|14 +|sang Nv 3|+9|20 diff --git a/assets-fx/bground.png b/assets-fx/bground.png new file mode 100644 index 0000000000000000000000000000000000000000..a50e413c4807589c20d02b86335207c443d3e6bf GIT binary patch literal 11163 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

l3#Dt=j-^@uQXRW5eXk{BI$;BiOOao( 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 literal 0 HcmV?d00001 diff --git a/assets-fx/converters.py b/assets-fx/converters.py new file mode 100644 index 0000000..91227c7 --- /dev/null +++ b/assets-fx/converters.py @@ -0,0 +1,24 @@ +import fxconv + + +def convert(input_name, output, params, target): + if params["custom-type"] == "mutation-table": + convert_mt(map, input_name, output, params, target) + return 0 + else: + return 1 + + +def convert_mt(input_name, output, params, target): + with open(input_name, "r") as file: + # Extract informations + lines = file.read().splitlines() + mutation_matrix = [i.split(" | ") for i in lines] + + # Encode information into bytes + data = bytes() + for i in enumerate(mutation_matrix): + for j in enumerate(i): + mutation += fxconv.u32(int(j)) + + fxconv.elf(data, output, "_" + params["name"], **target) diff --git a/assets-fx/fxconv-metadata.txt b/assets-fx/fxconv-metadata.txt new file mode 100644 index 0000000..f5f6e06 --- /dev/null +++ b/assets-fx/fxconv-metadata.txt @@ -0,0 +1,13 @@ +*.png: + type: bopti-image + name_regex: (.*)\.png img_\1 + +plague.png: + type: font + name: font_plague + charset: print + grid.size: 5x5 + grid.padding: 1 + proportional: True + + diff --git a/assets-fx/icon.png b/assets-fx/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e323f42c84c8940468319651b76c2f7999524468 GIT binary patch literal 1375 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 literal 0 HcmV?d00001 diff --git a/assets-fx/mutations_table/abilities_1.txt b/assets-fx/mutations_table/abilities_1.txt new file mode 100644 index 0000000..216307f --- /dev/null +++ b/assets-fx/mutations_table/abilities_1.txt @@ -0,0 +1,4 @@ +1 | 0 | 0 | 0 | 6 | 0 | 0 | 0 +7 | 7 | 0 | 7 | 0 | 0 | 0 | 0 +0 | 0 | 0 | 0 | 7 | 0 | 0 | 0 +0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 diff --git a/assets-fx/mutations_table/abilities_2.txt b/assets-fx/mutations_table/abilities_2.txt new file mode 100644 index 0000000..d2f497b --- /dev/null +++ b/assets-fx/mutations_table/abilities_2.txt @@ -0,0 +1,4 @@ +1 | 0 | 0 | 0 | 6 | 0 | 0 | 0 +2 | 7 | 0 | 3 | 0 | 0 | 0 | 0 +0 | 0 | 0 | 0 | 7 | 0 | 0 | 0 +0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 \ No newline at end of file diff --git a/assets-fx/mutations_table/abilities_3.txt b/assets-fx/mutations_table/abilities_3.txt new file mode 100644 index 0000000..91de132 --- /dev/null +++ b/assets-fx/mutations_table/abilities_3.txt @@ -0,0 +1,4 @@ +1 | 0 | 0 | 0 | 6 | 0 | 0 | 0 +2 | 5 | 0 | 3 | 0 | 0 | 0 | 0 +0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 +0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 \ No newline at end of file diff --git a/assets-fx/mutations_table/fxconv-metadata.txt b/assets-fx/mutations_table/fxconv-metadata.txt new file mode 100644 index 0000000..2cc3c63 --- /dev/null +++ b/assets-fx/mutations_table/fxconv-metadata.txt @@ -0,0 +1,3 @@ +*.txt: + custom-type: mutation-table + name_regex: (.*)\.txt mt_\1 \ No newline at end of file diff --git a/assets-fx/mutations_table/symptoms_1.txt b/assets-fx/mutations_table/symptoms_1.txt new file mode 100644 index 0000000..b906523 --- /dev/null +++ b/assets-fx/mutations_table/symptoms_1.txt @@ -0,0 +1,4 @@ +1 | 15 | 15 | 15 | 3 | 0 | 0 | 0 +0 | 0 | 15 | 15 | 0 | 0 | 0 | 0 +0 | 0 | 15 | 0 | 15 | 0 | 0 | 0 +0 | 10 | 15 | 6 | 15 | 15 | 0 | 0 \ No newline at end of file diff --git a/assets-fx/mutations_table/symptoms_2.txt b/assets-fx/mutations_table/symptoms_2.txt new file mode 100644 index 0000000..09b0da5 --- /dev/null +++ b/assets-fx/mutations_table/symptoms_2.txt @@ -0,0 +1,4 @@ +1 | 2 | 15 | 4 | 3 | 0 | 0 | 0 +0 | 0 | 15 | 15 | 0 | 0 | 0 | 0 +0 | 0 | 15 | 0 | 15 | 0 | 0 | 0 +0 | 10 | 7 | 6 | 9 | 15 | 0 | 0 \ No newline at end of file diff --git a/assets-fx/mutations_table/symptoms_3.txt b/assets-fx/mutations_table/symptoms_3.txt new file mode 100644 index 0000000..b7a0a65 --- /dev/null +++ b/assets-fx/mutations_table/symptoms_3.txt @@ -0,0 +1,4 @@ +1 | 2 | 5 | 4 | 3 | 0 | 0 | 0 +0 | 0 | 14 | 13 | 0 | 0 | 0 | 0 +0 | 0 | 8 | 0 | 12 | 0 | 0 | 0 +0 | 10 | 7 | 6 | 9 | 11 | 0 | 0 \ No newline at end of file diff --git a/assets-fx/mutations_table/transmissions_1.txt b/assets-fx/mutations_table/transmissions_1.txt new file mode 100644 index 0000000..0fde8a8 --- /dev/null +++ b/assets-fx/mutations_table/transmissions_1.txt @@ -0,0 +1,4 @@ +1 | 14 | 14 | 0 | 14 | 5 | 0 | 0 +0 | 0 | 0 | 14 | 0 | 0 | 0 | 11 +9 | 14 | 0 | 0 | 0 | 0 | 0 | 14 +0 | 0 | 0 | 7 | 14 | 0 | 0 | 14 \ No newline at end of file diff --git a/assets-fx/mutations_table/transmissions_2.txt b/assets-fx/mutations_table/transmissions_2.txt new file mode 100644 index 0000000..ed42e81 --- /dev/null +++ b/assets-fx/mutations_table/transmissions_2.txt @@ -0,0 +1,4 @@ +1 | 2 | 14 | 0 | 6 | 5 | 0 | 0 +0 | 0 | 0 | 14 | 0 | 0 | 0 | 11 +9 | 10 | 0 | 0 | 0 | 0 | 0 | 12 +0 | 0 | 0 | 7 | 8 | 0 | 0 | 14 \ No newline at end of file diff --git a/assets-fx/mutations_table/transmissions_3.txt b/assets-fx/mutations_table/transmissions_3.txt new file mode 100644 index 0000000..eee8275 --- /dev/null +++ b/assets-fx/mutations_table/transmissions_3.txt @@ -0,0 +1,4 @@ +1 | 2 | 3 | 0 | 6 | 5 | 0 | 0 +0 | 0 | 0 | 4 | 0 | 0 | 0 | 11 +9 | 10 | 0 | 0 | 0 | 0 | 0 | 12 +0 | 0 | 0 | 7 | 8 | 0 | 0 | 13 \ No newline at end of file diff --git a/assets-fx/piece.png b/assets-fx/piece.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c2a63c06a1d2a4f5ef91d346b770476030ad1b GIT binary patch literal 629 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 S#y!dUv8Nydk}j46`~Mf4Fx{8{ literal 0 HcmV?d00001 diff --git a/assets-fx/plague.png b/assets-fx/plague.png new file mode 100644 index 0000000000000000000000000000000000000000..6c25191589e47f73b0d3ab983da6774b14e5a107 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/assets-fx/planes.png b/assets-fx/planes.png new file mode 100644 index 0000000000000000000000000000000000000000..fae3c21925ca0e6cdcee66c30f80bf9a6c42486c GIT binary patch literal 677 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 Ef@o*aaR2}S literal 0 HcmV?d00001 diff --git a/src/core.c b/src/core.c new file mode 100644 index 0000000..e66e00b --- /dev/null +++ b/src/core.c @@ -0,0 +1,112 @@ +#include + +#include "core.h" +#include "display_engine.h" + + +void next_frame(struct game *current_game) +{ + for (int i = 0; current_game->planes[i]; i++) + { + switch(current_game->planes[i]->direction) + { + case 1: + current_game->planes[i]->y -= 1; + break; + case 2: + current_game->planes[i]->x += 1; + break; + case 3: + current_game->planes[i]->y += 1; + break; + case 4: + current_game->planes[i]->x -= 1; + break; + } + if (current_game->planes[i]->x == current_game->planes[i]->dest_x && current_game->planes[i]->y == current_game->planes[i]->dest_y) + { + // Set the new destination + current_game->planes[i]->dest_x = current_game->planes[i]->depa_x; + current_game->planes[i]->dest_y = current_game->planes[i]->depa_y; + + // Set the new departure + current_game->planes[i]->depa_x = current_game->planes[i]->x; + current_game->planes[i]->depa_y = current_game->planes[i]->y; + + // Set the new direction + int new_dir = (current_game->planes[i]->direction + 2) % 4; + if (!new_dir) new_dir = 4; + current_game->planes[i]->direction = new_dir; + } + } + current_game->time += ENGINE_TICK; +} + + +int get_inputs(const int background, int *mutation_menu) +{ + int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; + int timeout = 1; + + key_event_t ev = getkey_opt(opt, &timeout); + if(ev.type == KEYEV_NONE) return background; + + int key = ev.key; + + if (key == KEY_OPTN && (background == 1 || background == 2)) return (background % 2) + 1; + if (key == KEY_VARS) return 3; + if (key == KEY_SQUARE) return 6; + + if (key == KEY_EXIT) + { + if (background == 5) return 3; + if (background != 1 && background != 2) return 1; + if (background == 1) return -1; + } + + if (background == 3) + { + switch (key) + { + // Symptoms + case KEY_F1: + *mutation_menu = 1; + return 5; + break; + + // Abilities + case KEY_F3: + *mutation_menu = 2; + return 5; + break; + + // Transmission + case KEY_F5: + *mutation_menu = 3; + return 5; + break; + + // Return to the main menu + case KEY_F6: + *mutation_menu = 0; + return 1; + break; + } + } + + return background; +} + + +void manage_mutation(struct game *current_game, const int mutation_menu) +{ + int key = 0, end = 0; + int cursor_x = 1, cursor_y = 1; + while (!end) + { + display_mutation(current_game, mutation_menu, cursor_x, cursor_y); + key = getkey().key; + + if (key == KEY_EXIT) end = 1; + } +} diff --git a/src/core.h b/src/core.h new file mode 100644 index 0000000..5e09a34 --- /dev/null +++ b/src/core.h @@ -0,0 +1,79 @@ +#ifndef _PLAGUE_CORE_H +#define _PLAGUE_CORE_H + + +// Duration for internal clock +#define ENGINE_TICK 50 + +// Number of planes on screen +#define NB_PLANES 5 + +// Number of humans +#define TOTAL_POP 10000000000 + + +// game : all statistics of the current game +struct game +{ + // Disease parameters + int contagion, severity, lethality; + + // DNA points + int dna; + + // Mutations counts and sprite selected + int abilities, symptoms, transmissions; + int abilities_sel, symptoms_sel, transmissions_sel; + + // Research data + int research, limit; + + // Infectious pattern parameters + long long int healthy, infected, dead, cured; + + // Time + int time; + + // Planes + struct plane *planes[NB_PLANES + 1]; +}; + + +// plane : information about planes +struct plane +{ + // Plane's coordinates + int x, y; + + // Plane's direction + int direction; + + // Coordinates of the plane's destination + int dest_x, dest_y; + + //Coordinates of the plane's departure + int depa_x, depa_y; + +}; + + +// mutation : contain the map of the mutation available +struct mutation_table +{ + // Data of the map + int data[4][8]; +}; + + +// get_inputs : detect and manage inputs +int get_inputs(const int background, int *mutation_menu); + + +// next_frame : compute the plane's positions +void next_frame(struct game *current_game); + + +// manage_mutation : an independant sub-programm which allow to select, buy and see the mutations. +void manage_mutation(struct game *current_game, const int mutation_menu); + +#endif /* _PLAGUE_CORE_H */ \ No newline at end of file diff --git a/src/display_engine.c b/src/display_engine.c new file mode 100644 index 0000000..4d4ac48 --- /dev/null +++ b/src/display_engine.c @@ -0,0 +1,147 @@ +#include + +#include "core.h" +#include "display_engine.h" + + +void display_background(const int background) +{ + extern const bopti_image_t img_bground; + dsubimage(0, 0, &img_bground, 0, 65 * (background - 1), 128, 64, DIMAGE_NONE); +} + + +void display_foreground(const int background, const struct game *current_game) +{ + extern const bopti_image_t img_mutations; + extern const bopti_image_t img_planes; + GUNUSED int length; + + switch (background) + { + case 1: + for (int i = 0; current_game->planes[i]; i++) + { + 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); + } + break; + case 2: + for (int i = 0; current_game->planes[i]; i++) + { + if (current_game->planes[i]->y + 8 < 53) 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); + } + + int length = 74 * current_game->research / current_game->limit; + dprint(9, 58, C_BLACK, "%d", current_game->dna); + + dline(51, 60, 51 + length, 60, C_BLACK); + dline(51, 59, 51 + length, 59, C_BLACK); + break; + + case 3: + dprint(102, 37, C_BLACK, "%d", current_game->dna); + + length = 67 * current_game->contagion / 26; + dline(57, 48, 57 + length, 48, C_BLACK); + dline(57, 49, 57 + length, 49, C_BLACK); + + length = 67 * current_game->severity / 20; + dline(57, 54, 57 + length, 54, C_BLACK); + dline(57, 55, 57 + length, 55, C_BLACK); + + length = 67 * current_game->lethality / 33; + dline(57, 60, 57 + length, 60, C_BLACK); + dline(57, 61, 57 + length, 61, C_BLACK); + + if (current_game->symptoms_sel) dsubimage(5, 15, &img_mutations, 0, 16 * (current_game->symptoms_sel - 1), 15, 15, 0); + if (current_game->abilities_sel) dsubimage(35, 15, &img_mutations, 16, 16 * (current_game->abilities_sel - 1), 15, 15, 0); + if (current_game->transmissions_sel) dsubimage(65, 15, &img_mutations, 32, 16 * (current_game->transmissions_sel - 1), 15, 15, 0); + break; + + case 6: + length = 63 * current_game->healthy/ TOTAL_POP; + dline(61, 31, 61 + length, 31, C_BLACK); + dline(61, 32, 61 + length, 32, C_BLACK); + + length = 63 * current_game->infected / TOTAL_POP; + dline(61, 39, 61 + length, 39, C_BLACK); + dline(61, 40, 61 + length, 40, C_BLACK); + + length = 63 * current_game->dead / TOTAL_POP; + dline(61, 47, 61 + length, 47, C_BLACK); + dline(61, 48, 61 + length, 48, C_BLACK); + + length = 63 * current_game->cured / TOTAL_POP; + dline(61, 55, 61 + length, 55, C_BLACK); + dline(61, 56, 61 + length, 56, C_BLACK); + break; + } +} + + +void display_mutation(const struct game *current_game, const int mutation_menu, const int cursor_x, const int cursor_y) +{ + extern const bopti_image_t img_mutations; + extern bopti_image_t img_piece; + + // Load symptoms + extern struct mutation_table mt_symptoms_1; + extern struct mutation_table mt_symptoms_2; + extern struct mutation_table mt_symptoms_3; + + // Load abilities + extern struct mutation_table mt_abilities_1; + extern struct mutation_table mt_abilities_2; + extern struct mutation_table mt_abilities_3; + + // Load transmissions + extern struct mutation_table mt_transmissions_1; + extern struct mutation_table mt_transmissions_2; + extern struct mutation_table mt_transmissions_3; + + int table[4][8]; + if (mutation_menu == 1) + { + if (current_game->symptoms < 4) init_mat(8, 4, table, mt_symptoms_1.data); + else if (current_game->symptoms < 8) init_mat(8, 4, table, mt_symptoms_2.data); + else init_mat(8, 4, table, mt_symptoms_3.data); + } + + if (mutation_menu == 2) + { + if (current_game->abilities < 2) init_mat(8, 4, table, mt_abilities_1.data); + else if (current_game->abilities < 4) init_mat(8, 4, table, mt_abilities_2.data); + else init_mat(8, 4, table, mt_abilities_3.data); + } + + if (mutation_menu == 3) + { + if (current_game->transmissions < 5) init_mat(8, 4, table, mt_transmissions_1.data); + else if (current_game->transmissions < 10) init_mat(8, 4, table, mt_transmissions_2.data); + else init_mat(8, 4, table, mt_transmissions_3.data); + } + + dclear(C_WHITE); + for (int i = 0 ; i < 4 ; i++) + { + for (int j = 0 ; j < 8; j++) + { + if (table[i][j]) dsubimage(i*16, j*16, &img_mutations, 16 * (mutation_menu - 1), 0, 16 * (table[i][j] - 1), 15, 15); + } + } + dimage(16 * (cursor_x - 1), 16 * (cursor_y - 1), &img_piece); + dupdate(); + +} + + +void init_mat(int x, int y, int dest[][x], int src[][x]) +{ + for (int i = 0 ; i < x ; i++) + { + for (int j = 0 ; j < y ; j++) + { + dest[j][i] = src[j][i]; + } + } +} diff --git a/src/display_engine.h b/src/display_engine.h new file mode 100644 index 0000000..6ab6315 --- /dev/null +++ b/src/display_engine.h @@ -0,0 +1,16 @@ +#ifndef _PLAGUE_DISPLAY_ENGINE_H +#define _PLAGUE_DISPLAY_ENGINE_H + +// display_background : display the background +void display_background(const int background); + +// display_foreground : display the foreground, planes, statistics +void display_foreground(const int background, const struct game *current_game); + +// display_mutation : display the mutation selection screen +void display_mutation(const struct game *current_game, const int mutation_menu, const int cursor_x, const int cursor_y); + +// init_mat : copy src into dest +void init_mat(int x, int y, int dest[][x], int src[][x]); + +#endif /* _PLAGUE_DISPLAY_ENGINE_H */ \ No newline at end of file diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..abb3ba2 --- /dev/null +++ b/src/main.c @@ -0,0 +1,125 @@ +/* + Name : Plague + Version : - dev - + Last modification : 24 May 2021 +*/ + +#include +#include +#include +#include + +#include "core.h" +#include "display_engine.h" + + +// title_screen : display the title screen +static void title_screen(void); + +// main_loop : display background, foreground and manage inputs +void main_loop(struct game *current_game); + +// callback_timer : basic timer +int callback_tick(volatile int *tick); + + +int main(void) +{ + extern font_t font_plague; + dfont(&font_plague); + + title_screen(); + + struct plane plane_1 = {22, 20, 2, 84, 20, 22, 20}; + struct plane plane_2 = {34, 20, 3, 34, 44, 34, 20}; + struct plane plane_3 = {68, 44, 1, 68, 20, 68, 44}; + struct plane plane_4 = {104, 20, 3, 104, 50, 104, 20}; + struct plane plane_5 = {68, 44, 4, 34, 44, 68, 44}; + + GUNUSED struct game current_game = + { + .contagion = 0, + .severity = 0, + .lethality = 0, + + .dna = 0, + + .abilities = 1, .abilities_sel = 0, + .symptoms = 1, .symptoms_sel = 0, + .transmissions = 1, .transmissions_sel = 0, + + .research = 0, + .limit = 100, + + .healthy = TOTAL_POP - 1, + .infected = 1, + .dead = 0, + + .time = 0, + + .planes = {&plane_1, &plane_2, &plane_3, &plane_4, &plane_5, NULL} + }; + + main_loop(¤t_game); + + return 1; +} + + +static void title_screen(void) +{ + extern bopti_image_t img_title; + + dclear(C_WHITE); + dimage(0, 0, &img_title); + + dupdate(); + getkey(); +} + + +void main_loop(struct game *current_game) +{ + int background = 1, mutation_menu = 0; + int end = 0; + + static volatile int tick = 1; + int t = timer_configure(TIMER_ANY, ENGINE_TICK*1000, GINT_CALL(callback_tick, &tick)); + if (t >= 0) timer_start(t); + + while (!end) + { + // Real-time clock system + while (!tick) sleep(); + tick = 0; + + // Update the screen + dclear(C_WHITE); + display_background(background); + display_foreground(background, current_game); + dupdate(); + + // Compute the motion of planes + next_frame(current_game); + + // Get inputs from the keyboard and manage it + background = get_inputs(background, &mutation_menu); + + // Special actions : quit and manage mutations + if (background == -1) end = 1; + if (background == 5) + { + manage_mutation(current_game, mutation_menu); + background = 3; + } + } + + if (t >= 0) timer_stop(t); +} + + +int callback_tick(volatile int *tick) +{ + *tick = 1; + return TIMER_CONTINUE; +}