From 88ed4a8b50fe25aea169139bd6890725e92950a3 Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sat, 2 May 2020 15:39:20 +0200 Subject: [PATCH 1/5] Adding a mage that give you the fireball upgrade --- CMakeLists.txt | 2 +- Makefile | 3 ++- assets/sprites/npc/mage.png | Bin 0 -> 1633 bytes include/setup.h | 2 ++ prefabs/game.gcprefab | 19 +++++++++++++++++++ src/game_loader.c | 1 + src/npc/mage.c | 27 +++++++++++++++++++++++++++ 7 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 assets/sprites/npc/mage.png create mode 100644 src/npc/mage.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 955f4ab..c77b92e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -298,7 +298,7 @@ add_executable(my_rpg include/components/attack_component.h src/systems/combat_methods.c src/combat/attacks.c - src/player_utilities.c include/player_utilities.h src/systems/inventory.c include/systems/inventory.h src/systems/game_over.c include/systems/game_over.h src/npc/mia.c lib/gamacon/src/scene/scene_constructor.c src/npc/fisherman.c src/npc/lumberjack.c src/npc/smith.c) + src/player_utilities.c include/player_utilities.h src/systems/inventory.c include/systems/inventory.h src/systems/game_over.c include/systems/game_over.h src/npc/mia.c lib/gamacon/src/scene/scene_constructor.c src/npc/fisherman.c src/npc/lumberjack.c src/npc/smith.c src/npc/mage.c) add_compile_options(-W -Wall -Wextra -Wshadow) diff --git a/Makefile b/Makefile index 13f6036..63174cd 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,8 @@ SRC = src/main.c \ src/npc/mia.c \ src/npc/fisherman.c \ src/npc/lumberjack.c \ - src/npc/smith.c + src/npc/smith.c \ + src/npc/mage.c OBJ = $(SRC:%.c=%.o) diff --git a/assets/sprites/npc/mage.png b/assets/sprites/npc/mage.png new file mode 100644 index 0000000000000000000000000000000000000000..3befece96890efb27a4d38cfaeda4cbb3d23b1d4 GIT binary patch literal 1633 zcmV-n2A=teP)G~~ z=Q#j8JP%oB9(IrbAS)FRIxQz%MLvvORk{TQ1t=&eERwpISwZB6cJj4`*VoqoH6Z`m zu=@J?D{d@dJOFo1JvbyuSUE#QHH9!0Fmh!8004ECVK_A_HCDID04$tpSUg_<001X+ zQchC<|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0|NmKpC{h3b1yV^w zK~#90?O9=Sn>rALA`&nXwu4CA3Mq>1*Z=<$-<`k-mhN0R&CL7oqM3&2-tHb?Y^~2l z@xNYW`89&_N5vGF28;mUij;5-7=b7@-kMj-041h}k|0@HvIh_ZYD6#s}EJ}ZE} z|jDy%-nxdyaABB1&{9OR$*tU#)5 z4=@z^?KRFeco+1k(Uvgk$p#mr?R`cmzA{p|M(T#qmN0tn9OG){Cr15ejpCR2B2bFD zsVXtTS3bR`??%BV?o2%vvlC@>c`l@k@Wm*4gu_EkJV&UI@#!p`XPhj}coE@Y?TUiL zW%BMXb_~9U6=Ms&{2^;3{=Gi8!rlePvP$#FU4pXu0Wqjfwq~{gCkT5p=7mf?E5QBq z5#c6}&kF>?LOiv3d`=+h2aG_Qb~9u)pan}%Xu7T)a`>!3AgY`3`Q?z=fDynIY&OF< z{`{2~(R@x&VC-o02+L&h89^v?T5AGk_?!R=oiP;5@i_s03hLwncs?hPN={bR`3#92%cvfKVYS06n5Wrq*^_U6}2dCs_OJzoFi4GtzTGwv`?k%*4 zoxn(Idn5(U7-z{dvgvaqdkJ)BJt3H2(MB$LjsiTvU8RiNbfS&GDJ~%W#2Hz}$ioA3 zB8(>IX(Ny4N*Y=6j3$4dk@6sj?;gNlw4<_xRB7KLywkidh*R31&&6(+#3NKd>73$$ zOq6aUof|3WJ0N}a!f(@GAh>+L&u+j71O_3DLP>#XzzA@dQlf?^kPSG2fd7ksaDGuG z(;B(~EtsbkPkNqTAZ4kf-81r$_!(fy@y4T7by)wf` z@`UIDrx+T5bY+Ao3k4PgtI>in3ijFGZ}o3ym0D#O+^~-p8$?+Px&^_}`e<5%8@9vE zKgPX1h6cm1HiAP6Rmtj3yi7KExwPktUkT*pQD%BWr0Ri}@%SE20tRns|O> z!!r~cL7EP)&&ei(D7*wL${5EBhJTSj&PGv#IR(LM?|m{P!pp_WNajbFvp|!~j{x^X zKtf!~q(cz`lBe+R`O$yA#4_7~^>+dc3-vtW$!ov~!tmlD{bh&ca{~NrXPNKh@mWC| ze%pCWq8Z0$1uaGwX#NoWBFFK0!Ps@pk{5IMtYA32JdcgWipb%!f&rq-I1ZaAPqBPf zU~sgfn>J1h9G?{w@HJj{1kCX{0d8)lqhOBD35r2eb9A213TkO58Gkb0;0HnSQvfUo z1d}6hu8iD6U{AgKR-O+P926WdwN{6HNMmVTpPx?Dsn`id&!0=Y2s>kg!C(JCTf~ f*#1*PqL0$QD8Rci+mCge00000NkvXXu0mjfPi5u9 literal 0 HcmV?d00001 diff --git a/include/setup.h b/include/setup.h index c2955e5..323cba9 100644 --- a/include/setup.h +++ b/include/setup.h @@ -84,5 +84,7 @@ gc_vector2 pos, enum gc_mousekeys key); bool smith_chest(gc_engine *engine, gc_entity *entity, \ gc_vector2 pos, enum gc_mousekeys key); +void mage_give(gc_engine *engine); + void load_data(gc_scene *scene, const gc_data *datas); extern const struct gc_data game_data[]; \ No newline at end of file diff --git a/prefabs/game.gcprefab b/prefabs/game.gcprefab index 5e9110d..692f7e7 100644 --- a/prefabs/game.gcprefab +++ b/prefabs/game.gcprefab @@ -153,6 +153,7 @@ + @@ -361,6 +362,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/game_loader.c b/src/game_loader.c index 13217b6..14b7bcb 100644 --- a/src/game_loader.c +++ b/src/game_loader.c @@ -63,6 +63,7 @@ const struct gc_data game_data[] = { {"dialog_callback", "fisherman_chest", &fisherman_chest, NULL}, {"input", "lumberjack_yes", &lumberjack_yes, NULL}, {"dialog_callback", "smith_chest", &smith_chest, NULL}, + {"dialog_callback", "mage_give", &mage_give, NULL}, {NULL, NULL, NULL, NULL} }; diff --git a/src/npc/mage.c b/src/npc/mage.c new file mode 100644 index 0000000..6c42ec9 --- /dev/null +++ b/src/npc/mage.c @@ -0,0 +1,27 @@ +/* +** EPITECH PROJECT, 2020 +** my_rpg +** File description: +** mage.c +*/ + +#include "components/dialog_holder.h" +#include "components/player_component.h" +#include "engine.h" + +void mage_give(gc_engine *engine) +{ + struct dialog_holder *dialog = dialog_get_current(engine); + gc_entity *player = engine->scene->get_entity(engine->scene, 50); + struct player_component *inv; + + if (!player) + return; + inv = GETCMP(player, player_component); + if (!inv) + return; + if (!inv->inventory_upgrades[1]) + dialog_add_line(dialog, "", "You got the fireball upgrade!", NULL); + dialog->text[4] = NULL; + inv->inventory_upgrades[1] = true; +} \ No newline at end of file From 18297a2e4c787c37952c2e745e58cd6a561ca1fc Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sat, 2 May 2020 17:26:36 +0200 Subject: [PATCH 2/5] Adding a boss --- CMakeLists.txt | 2 +- Makefile | 3 +- assets/sprites/t-rex.png | Bin 0 -> 18325 bytes include/components/dialog_holder.h | 1 + include/setup.h | 5 ++- prefabs/boss.gcprefab | 15 ++++++++ prefabs/combat.gcprefab | 1 + prefabs/enemies/t-rex.gcprefab | 17 +++++++++ prefabs/game.gcprefab | 2 ++ src/combat/boss.c | 55 +++++++++++++++++++++++++++++ src/components/dialog_holder.c | 5 +++ src/game_loader.c | 3 +- src/npc/fisherman.c | 3 +- src/npc/lumberjack.c | 2 ++ src/npc/mage.c | 4 ++- src/npc/smith.c | 2 ++ src/systems/dialog_methods.c | 6 ++-- 17 files changed, 117 insertions(+), 9 deletions(-) create mode 100644 assets/sprites/t-rex.png create mode 100644 prefabs/boss.gcprefab create mode 100644 prefabs/enemies/t-rex.gcprefab create mode 100644 src/combat/boss.c diff --git a/CMakeLists.txt b/CMakeLists.txt index c77b92e..7447c49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -298,7 +298,7 @@ add_executable(my_rpg include/components/attack_component.h src/systems/combat_methods.c src/combat/attacks.c - src/player_utilities.c include/player_utilities.h src/systems/inventory.c include/systems/inventory.h src/systems/game_over.c include/systems/game_over.h src/npc/mia.c lib/gamacon/src/scene/scene_constructor.c src/npc/fisherman.c src/npc/lumberjack.c src/npc/smith.c src/npc/mage.c) + src/player_utilities.c include/player_utilities.h src/systems/inventory.c include/systems/inventory.h src/systems/game_over.c include/systems/game_over.h src/npc/mia.c lib/gamacon/src/scene/scene_constructor.c src/npc/fisherman.c src/npc/lumberjack.c src/npc/smith.c src/npc/mage.c src/combat/boss.c) add_compile_options(-W -Wall -Wextra -Wshadow) diff --git a/Makefile b/Makefile index 63174cd..99de421 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,8 @@ SRC = src/main.c \ src/npc/fisherman.c \ src/npc/lumberjack.c \ src/npc/smith.c \ - src/npc/mage.c + src/npc/mage.c \ + src/combat/boss.c OBJ = $(SRC:%.c=%.o) diff --git a/assets/sprites/t-rex.png b/assets/sprites/t-rex.png new file mode 100644 index 0000000000000000000000000000000000000000..9d1c1a83d1910dfe528f7ad9ce0a89fbd55e4713 GIT binary patch literal 18325 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 GgeCw~I|U~I literal 0 HcmV?d00001 diff --git a/include/components/dialog_holder.h b/include/components/dialog_holder.h index bf050ae..0984130 100644 --- a/include/components/dialog_holder.h +++ b/include/components/dialog_holder.h @@ -29,6 +29,7 @@ struct dialog_holder { bool single_usage; bool has_seen; struct tile *tile; + void (*close_callback)(gc_engine *engine); }; const struct dialog_holder dialog_holder; diff --git a/include/setup.h b/include/setup.h index 323cba9..3fe696b 100644 --- a/include/setup.h +++ b/include/setup.h @@ -87,4 +87,7 @@ gc_vector2 pos, enum gc_mousekeys key); void mage_give(gc_engine *engine); void load_data(gc_scene *scene, const gc_data *datas); -extern const struct gc_data game_data[]; \ No newline at end of file +extern const struct gc_data game_data[]; + +void check_for_boss(gc_engine *engine); +void boss_start(gc_engine *engine); \ No newline at end of file diff --git a/prefabs/boss.gcprefab b/prefabs/boss.gcprefab new file mode 100644 index 0000000..fff04b7 --- /dev/null +++ b/prefabs/boss.gcprefab @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/prefabs/combat.gcprefab b/prefabs/combat.gcprefab index b476e46..a6188e7 100644 --- a/prefabs/combat.gcprefab +++ b/prefabs/combat.gcprefab @@ -22,6 +22,7 @@ + diff --git a/prefabs/enemies/t-rex.gcprefab b/prefabs/enemies/t-rex.gcprefab new file mode 100644 index 0000000..e0b8164 --- /dev/null +++ b/prefabs/enemies/t-rex.gcprefab @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/prefabs/game.gcprefab b/prefabs/game.gcprefab index 17664b5..6595355 100644 --- a/prefabs/game.gcprefab +++ b/prefabs/game.gcprefab @@ -156,8 +156,10 @@ + + diff --git a/src/combat/boss.c b/src/combat/boss.c new file mode 100644 index 0000000..642f79b --- /dev/null +++ b/src/combat/boss.c @@ -0,0 +1,55 @@ +/* +** EPITECH PROJECT, 2020 +** my_rpg +** File description: +** boss.c +*/ + +#include +#include +#include "engine.h" +#include "prefab.h" +#include "components/dialog_holder.h" +#include "my.h" + +void spawn_boss(gc_engine *engine) +{ + struct dialog_holder *dialog = dialog_get_current(engine); + + if (prefab_load(engine, "prefabs/boss.gcprefab") < 0) { + my_printf("Couldn't load the boss prefab.\n"); + return; + } + if (!dialog) + return; + dialog_add_line(dialog, NULL, "...", NULL); + dialog_add_line(dialog, NULL, "Wait...", NULL); + dialog_add_line(dialog, NULL, "...", NULL); + dialog_add_line(dialog, NULL, "HELP US!!", NULL); + dialog_add_line(dialog, NULL, "A T-REX APPEARED IN THE\n\ +CENTER OF THE VILLAGE", NULL); + dialog_add_line(dialog, NULL, "AHHHHHHHHHHHHHhh", NULL); + dialog_add_line(dialog, NULL, "AHHHHHHHHhhhh", NULL); + dialog_add_line(dialog, NULL, "HELPPPP", NULL); +} + +void check_for_boss(gc_engine *engine) +{ + gc_entity *player = engine->scene->get_entity(engine->scene, 50); + struct player_component *inv; + + if (!player) + return; + inv = GETCMP(player, player_component); + if (!inv->inventory_upgrades[0] + || !inv->inventory_upgrades[1] + || !inv->inventory_upgrades[2] + || !inv->inventory_upgrades[3]) + return; + spawn_boss(engine); +} + +void boss_start(gc_engine *engine) +{ + combat_start(engine, "t-rex"); +} diff --git a/src/components/dialog_holder.c b/src/components/dialog_holder.c index a3b20c1..380357a 100644 --- a/src/components/dialog_holder.c +++ b/src/components/dialog_holder.c @@ -107,6 +107,7 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) int x = xml_getintprop(n, "x"); int y = xml_getintprop(n, "y"); char *texture = xml_gettmpstring(n, "tile_texture", NULL); + char *cbk = xml_gettempprop(n, "close_callback"); cmp->single_usage = xml_getbool(n, "single_usage", false); cmp->text = malloc(sizeof(struct dialog_line *) * (count + 1)); @@ -116,6 +117,10 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) for (int i = 0; n; n = n->next, i++) cmp->text[i] = dialog_parse_text(scene, n); cmp->text[count] = NULL; + if (cbk) + cmp->close_callback = scene->get_data(scene, "close_callback", cbk); + else + cmp->close_callback = NULL; setup_tile_interactions(cmp, scene, (gc_vector2i){x, y}, texture); } diff --git a/src/game_loader.c b/src/game_loader.c index 14b7bcb..f8fc95b 100644 --- a/src/game_loader.c +++ b/src/game_loader.c @@ -64,6 +64,7 @@ const struct gc_data game_data[] = { {"input", "lumberjack_yes", &lumberjack_yes, NULL}, {"dialog_callback", "smith_chest", &smith_chest, NULL}, {"dialog_callback", "mage_give", &mage_give, NULL}, + {"close_callback", "boss_start", &boss_start, NULL}, {NULL, NULL, NULL, NULL} }; @@ -91,7 +92,7 @@ const struct gc_data attacks[] = { {"attack", "Spinning roots", &enemy_attack, NULL}, {"attack", "Hypnosis", &enemy_attack, NULL}, {"attack", "Water gun", &enemy_attack, NULL}, - {NULL, NULL, NULL, NULL} + {NULL, NULL, NULL, NULL} }; void load_data(gc_scene *scene, const gc_data *datas) diff --git a/src/npc/fisherman.c b/src/npc/fisherman.c index ebf3805..4e17381 100644 --- a/src/npc/fisherman.c +++ b/src/npc/fisherman.c @@ -9,7 +9,7 @@ #include "systems/game_manager_system.h" #include "components/player_component.h" #include "engine.h" - +#include "setup.h" void fisherman_setup(gc_engine *engine) { @@ -58,5 +58,6 @@ gc_vector2 pos, enum gc_mousekeys key) else dialog_add_line(dialog, "", "You found the water jet upgrade!", NULL); inv->inventory_upgrades[1] = true; + check_for_boss(engine); return (true); } \ No newline at end of file diff --git a/src/npc/lumberjack.c b/src/npc/lumberjack.c index 8105dfb..28ae0f0 100644 --- a/src/npc/lumberjack.c +++ b/src/npc/lumberjack.c @@ -8,6 +8,7 @@ #include #include #include "engine.h" +#include "setup.h" void lumberjack_delete(gc_engine *engine) { @@ -30,5 +31,6 @@ gc_vector2 pos, enum gc_mousekeys key) inv->inventory_upgrades[2] = true; di = dialog_add_line(dialog, "", "You gained the uppercut upgrade!", NULL); di->callback = &lumberjack_delete; + check_for_boss(engine); return (true); } \ No newline at end of file diff --git a/src/npc/mage.c b/src/npc/mage.c index 6c42ec9..c8d0c35 100644 --- a/src/npc/mage.c +++ b/src/npc/mage.c @@ -8,6 +8,7 @@ #include "components/dialog_holder.h" #include "components/player_component.h" #include "engine.h" +#include "setup.h" void mage_give(gc_engine *engine) { @@ -22,6 +23,7 @@ void mage_give(gc_engine *engine) return; if (!inv->inventory_upgrades[1]) dialog_add_line(dialog, "", "You got the fireball upgrade!", NULL); + inv->inventory_upgrades[0] = true; + check_for_boss(engine); dialog->text[4] = NULL; - inv->inventory_upgrades[1] = true; } \ No newline at end of file diff --git a/src/npc/smith.c b/src/npc/smith.c index 1ae9c2e..f2dbe61 100644 --- a/src/npc/smith.c +++ b/src/npc/smith.c @@ -8,6 +8,7 @@ #include "components/player_component.h" #include "components/dialog_holder.h" #include "engine.h" +#include "setup.h" bool smith_chest(gc_engine *engine, gc_entity *entity, \ gc_vector2 pos, enum gc_mousekeys key) @@ -27,5 +28,6 @@ gc_vector2 pos, enum gc_mousekeys key) else dialog_add_line(dialog, NULL, "You found the shield upgrade!", NULL); inv->inventory_upgrades[3] = true; + check_for_boss(engine); return (true); } \ No newline at end of file diff --git a/src/systems/dialog_methods.c b/src/systems/dialog_methods.c index 94d3121..8650713 100644 --- a/src/systems/dialog_methods.c +++ b/src/systems/dialog_methods.c @@ -108,9 +108,7 @@ void dialog_next(gc_engine *engine) gc_entity *entity = scene->get_entity(scene, 50); gc_entity *holder_name; - if (!entity) - return; - if (this->dialog_id == -1 && !load_dialog(this, engine, entity)) + if (!entity || this->dialog_id == -1 && !load_dialog(this, engine, entity)) return; if (this->input_id >= 0) run_input_func(this, engine); @@ -124,4 +122,6 @@ holder_name, engine) && handle_input(engine, this))) this->dialog_id = -1; controllable_set_can_move(scene, true); engine->trigger_event(engine, "dialog_ended"); + if (this->current_dialog->close_callback) + this->current_dialog->close_callback(engine); } From 57c2c3eb452e209f4ab3f574098b85152b2258ac Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sat, 2 May 2020 17:44:47 +0200 Subject: [PATCH 3/5] Using real enemies name --- CMakeLists.txt | 1 - include/components/attack_component.h | 1 + prefabs/enemies/bee.gcprefab | 3 +- prefabs/enemies/evil_seed.gcprefab | 3 +- prefabs/enemies/flower.gcprefab | 3 +- prefabs/enemies/mushroom.gcprefab | 3 +- prefabs/enemies/shrump.gcprefab | 3 +- prefabs/enemies/t-rex.gcprefab | 5 ++- prefabs/enemies/turnipor.gcprefab | 3 +- src/components/attack_component.c | 2 ++ src/components/combat_holder.c | 50 --------------------------- src/game_loader.c | 1 - src/systems/combat_manager.c | 2 +- src/systems/combat_methods.c | 2 +- 14 files changed, 13 insertions(+), 69 deletions(-) delete mode 100644 src/components/combat_holder.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 7447c49..a662ddd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -291,7 +291,6 @@ add_executable(my_rpg include/components/player_component.h src/enemy_dataloader.c include/enemy.h - src/components/combat_holder.c include/components/combat_holder.h src/components/dialog_methods.c src/components/attack_component.c diff --git a/include/components/attack_component.h b/include/components/attack_component.h index c44bb9a..de3ee16 100644 --- a/include/components/attack_component.h +++ b/include/components/attack_component.h @@ -21,6 +21,7 @@ typedef struct attack_holder { struct attack_component { gc_component base; attack_holder *attacks; + char *name; }; extern const struct attack_component attack_component; diff --git a/prefabs/enemies/bee.gcprefab b/prefabs/enemies/bee.gcprefab index 4eaacb2..44e8ea1 100644 --- a/prefabs/enemies/bee.gcprefab +++ b/prefabs/enemies/bee.gcprefab @@ -8,8 +8,7 @@ - - + diff --git a/prefabs/enemies/evil_seed.gcprefab b/prefabs/enemies/evil_seed.gcprefab index eb2621d..f4d015b 100644 --- a/prefabs/enemies/evil_seed.gcprefab +++ b/prefabs/enemies/evil_seed.gcprefab @@ -8,8 +8,7 @@ - - + diff --git a/prefabs/enemies/flower.gcprefab b/prefabs/enemies/flower.gcprefab index 6c69b74..5db8f34 100644 --- a/prefabs/enemies/flower.gcprefab +++ b/prefabs/enemies/flower.gcprefab @@ -8,8 +8,7 @@ - - + diff --git a/prefabs/enemies/mushroom.gcprefab b/prefabs/enemies/mushroom.gcprefab index 1983f17..dced40a 100644 --- a/prefabs/enemies/mushroom.gcprefab +++ b/prefabs/enemies/mushroom.gcprefab @@ -8,8 +8,7 @@ - - + diff --git a/prefabs/enemies/shrump.gcprefab b/prefabs/enemies/shrump.gcprefab index e25ea1d..a54e1e4 100644 --- a/prefabs/enemies/shrump.gcprefab +++ b/prefabs/enemies/shrump.gcprefab @@ -8,8 +8,7 @@ - - + diff --git a/prefabs/enemies/t-rex.gcprefab b/prefabs/enemies/t-rex.gcprefab index e0b8164..30357a3 100644 --- a/prefabs/enemies/t-rex.gcprefab +++ b/prefabs/enemies/t-rex.gcprefab @@ -2,14 +2,13 @@ - + - - + diff --git a/prefabs/enemies/turnipor.gcprefab b/prefabs/enemies/turnipor.gcprefab index 97e487c..7f36f45 100644 --- a/prefabs/enemies/turnipor.gcprefab +++ b/prefabs/enemies/turnipor.gcprefab @@ -8,8 +8,7 @@ - - + diff --git a/src/components/attack_component.c b/src/components/attack_component.c index 75cba7f..c2dda3d 100644 --- a/src/components/attack_component.c +++ b/src/components/attack_component.c @@ -14,6 +14,7 @@ static void ctr(void *component, va_list args) struct attack_component *cmp = (struct attack_component *)component; cmp->attacks = va_arg(args, attack_holder *); + cmp->name = va_arg(args, char *); } static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) @@ -22,6 +23,7 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) int i = 0; char *name; + cmp->name = xml_getproperty(n, "name"); cmp->attacks = malloc(sizeof(attack_holder) * xml_getchildcount(n)); if (!cmp->attacks) return; diff --git a/src/components/combat_holder.c b/src/components/combat_holder.c deleted file mode 100644 index 70aecd6..0000000 --- a/src/components/combat_holder.c +++ /dev/null @@ -1,50 +0,0 @@ -/* -** EPITECH PROJECT, 2020 -** my_rpg -** File description: -** combat_holder.c -*/ - -#include "engine.h" -#include "components/combat_holder.h" - -static void ctr(void *component, va_list args) -{ - struct combat_holder *cmp = component; - - cmp->name = va_arg(args, char *); -} - -static void fdctr(gc_entity *entity, gc_scene *scene, \ -void *component, node *n) -{ - struct combat_holder *cmp = component; - - cmp->name = xml_getproperty(n, "name"); -} - -static void dtr(void *component) -{ - (void)component; -} - -static char *serialize(void *component) -{ - (void)component; - return (NULL); -} - -const struct combat_holder combat_holder = { - base: { - name: "combat_holder", - size: sizeof(struct combat_holder), - dependencies: (char *[]){ - NULL - }, - ctr: &ctr, - fdctr: &fdctr, - dtr: &dtr, - serialize: &serialize, - destroy: &component_destroy - } -}; \ No newline at end of file diff --git a/src/game_loader.c b/src/game_loader.c index f8fc95b..9819b12 100644 --- a/src/game_loader.c +++ b/src/game_loader.c @@ -143,7 +143,6 @@ int register_customcmps(gc_engine *engine, bool map_editor) engine->add_component(engine, &xp_component); engine->add_component(engine, &player_component); engine->add_component(engine, &attack_component); - engine->add_component(engine, &combat_holder); engine->add_system(engine, new_system(&combat_manager, engine)); engine->add_component(engine, &health_component); engine->finish_physics(engine); diff --git a/src/systems/combat_manager.c b/src/systems/combat_manager.c index 4a2e172..161a2e5 100644 --- a/src/systems/combat_manager.c +++ b/src/systems/combat_manager.c @@ -101,7 +101,7 @@ static void dtr(void *system, gc_engine *engine) const struct combat_manager combat_manager = { base: { name: "combat_manager", - component_name: "combat_holder", + component_name: "attack_component", size: sizeof(struct combat_manager), ctr: &ctr, dtr: &dtr, diff --git a/src/systems/combat_methods.c b/src/systems/combat_methods.c index b031ccc..649a49c 100644 --- a/src/systems/combat_methods.c +++ b/src/systems/combat_methods.c @@ -156,7 +156,7 @@ gc_scene *scene, gc_engine *engine) return; } this->next_enemy_attack = &enemy_attack->attacks[random() % count]; - snprintf(str, 150, "%s uses attack %s.", "The bee", \ + snprintf(str, 150, "%s uses %s.", enemy_attack->name, \ this->next_enemy_attack->name); if ((line = dialog_add_line(dialog, NULL, str, NULL))) line->callback = &defend_callback; From 3e4688f9a208886c6d5971310e23e8bdd16166de Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sat, 2 May 2020 20:56:24 +0200 Subject: [PATCH 4/5] Fixing the random segfault and adding attacks to the boss --- CMakeLists.txt | 16 ++++++++++- include/components/combat_holder.h | 1 - prefabs/combat.gcprefab | 1 + src/components/attack_component.c | 2 +- src/components/combat_holder.c | 44 ++++++++++++++++++++++++++++++ src/game_loader.c | 2 ++ src/systems/combat_manager.c | 6 ++-- 7 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 src/components/combat_holder.c diff --git a/CMakeLists.txt b/CMakeLists.txt index a662ddd..2f38807 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -297,7 +297,21 @@ add_executable(my_rpg include/components/attack_component.h src/systems/combat_methods.c src/combat/attacks.c - src/player_utilities.c include/player_utilities.h src/systems/inventory.c include/systems/inventory.h src/systems/game_over.c include/systems/game_over.h src/npc/mia.c lib/gamacon/src/scene/scene_constructor.c src/npc/fisherman.c src/npc/lumberjack.c src/npc/smith.c src/npc/mage.c src/combat/boss.c) + src/player_utilities.c + include/player_utilities.h + src/systems/inventory.c + include/systems/inventory.h + src/systems/game_over.c + include/systems/game_over.h + src/npc/mia.c + lib/gamacon/src/scene/scene_constructor.c + src/npc/fisherman.c + src/npc/lumberjack.c + src/npc/smith.c + src/npc/mage.c + src/combat/boss.c + src/components/combat_holder.c +) add_compile_options(-W -Wall -Wextra -Wshadow) diff --git a/include/components/combat_holder.h b/include/components/combat_holder.h index 4c50978..9d4f5f7 100644 --- a/include/components/combat_holder.h +++ b/include/components/combat_holder.h @@ -14,7 +14,6 @@ struct combat_holder { gc_component base; - char *name; }; extern const struct combat_holder combat_holder; diff --git a/prefabs/combat.gcprefab b/prefabs/combat.gcprefab index a6188e7..5d0c1e6 100644 --- a/prefabs/combat.gcprefab +++ b/prefabs/combat.gcprefab @@ -58,6 +58,7 @@ + diff --git a/src/components/attack_component.c b/src/components/attack_component.c index c2dda3d..23aa28e 100644 --- a/src/components/attack_component.c +++ b/src/components/attack_component.c @@ -24,7 +24,7 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) char *name; cmp->name = xml_getproperty(n, "name"); - cmp->attacks = malloc(sizeof(attack_holder) * xml_getchildcount(n)); + cmp->attacks = malloc(sizeof(attack_holder) * (xml_getchildcount(n) + 1)); if (!cmp->attacks) return; for (n = n->child; n; n = n->next) { diff --git a/src/components/combat_holder.c b/src/components/combat_holder.c new file mode 100644 index 0000000..e242bdf --- /dev/null +++ b/src/components/combat_holder.c @@ -0,0 +1,44 @@ +/* +** EPITECH PROJECT, 2020 +** my_rpg +** File description: +** combat_holder.c +*/ + +#include "engine.h" +#include "components/combat_holder.h" + +static void ctr(void *component, va_list args) +{ +} + +static void fdctr(gc_entity *entity, gc_scene *scene, \ +void *component, node *n) +{ +} + +static void dtr(void *component) +{ + (void)component; +} + +static char *serialize(void *component) +{ + (void)component; + return (NULL); +} + +const struct combat_holder combat_holder = { + base: { + name: "combat_holder", + size: sizeof(struct combat_holder), + dependencies: (char *[]){ + NULL + }, + ctr: &ctr, + fdctr: &fdctr, + dtr: &dtr, + serialize: &serialize, + destroy: &component_destroy + } +}; \ No newline at end of file diff --git a/src/game_loader.c b/src/game_loader.c index 9819b12..583ff38 100644 --- a/src/game_loader.c +++ b/src/game_loader.c @@ -92,6 +92,7 @@ const struct gc_data attacks[] = { {"attack", "Spinning roots", &enemy_attack, NULL}, {"attack", "Hypnosis", &enemy_attack, NULL}, {"attack", "Water gun", &enemy_attack, NULL}, + {"attack", "Charge", &enemy_attack, NULL}, {NULL, NULL, NULL, NULL} }; @@ -143,6 +144,7 @@ int register_customcmps(gc_engine *engine, bool map_editor) engine->add_component(engine, &xp_component); engine->add_component(engine, &player_component); engine->add_component(engine, &attack_component); + engine->add_component(engine, &combat_holder); engine->add_system(engine, new_system(&combat_manager, engine)); engine->add_component(engine, &health_component); engine->finish_physics(engine); diff --git a/src/systems/combat_manager.c b/src/systems/combat_manager.c index 161a2e5..e45f75c 100644 --- a/src/systems/combat_manager.c +++ b/src/systems/combat_manager.c @@ -94,14 +94,16 @@ static void dtr(void *system, gc_engine *engine) struct combat_manager *this = system; engine->remove_event_listener(engine, "entity_moved", &entity_moved); - if (this->game_scene) + if (this->game_scene) { scene_destroy(this->game_scene); + this->game_scene = NULL; + } } const struct combat_manager combat_manager = { base: { name: "combat_manager", - component_name: "attack_component", + component_name: "combat_holder", size: sizeof(struct combat_manager), ctr: &ctr, dtr: &dtr, From 752f5d6c8b4ad7ca9910a66e1af797eca65b6f3d Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sat, 2 May 2020 23:54:22 +0200 Subject: [PATCH 5/5] Adding a victory screen and allowing replayability --- CMakeLists.txt | 4 ++-- lib/gamacon | 2 +- prefabs/game_over.gcprefab | 14 +++++++------- prefabs/win.gcprefab | 6 ++++++ src/{systems => }/game_over.c | 2 ++ src/{systems => }/inventory.c | 0 src/main_menu.c | 20 ++++++++++++-------- src/systems/combat_manager.c | 11 +++++++---- 8 files changed, 37 insertions(+), 22 deletions(-) create mode 100644 prefabs/win.gcprefab rename src/{systems => }/game_over.c (90%) rename src/{systems => }/inventory.c (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f38807..7c05e64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -299,9 +299,9 @@ add_executable(my_rpg src/combat/attacks.c src/player_utilities.c include/player_utilities.h - src/systems/inventory.c + src/inventory.c include/systems/inventory.h - src/systems/game_over.c + src/game_over.c include/systems/game_over.h src/npc/mia.c lib/gamacon/src/scene/scene_constructor.c diff --git a/lib/gamacon b/lib/gamacon index 956ff64..6d10f5d 160000 --- a/lib/gamacon +++ b/lib/gamacon @@ -1 +1 @@ -Subproject commit 956ff64646f6a92fddc22a169db935ca99b8b808 +Subproject commit 6d10f5d03d6cdfd4831bb9c5b0e4b5982349071d diff --git a/prefabs/game_over.gcprefab b/prefabs/game_over.gcprefab index fbe3ed3..6ddeb51 100644 --- a/prefabs/game_over.gcprefab +++ b/prefabs/game_over.gcprefab @@ -3,11 +3,11 @@ - - - -