]> git.lizzy.rs Git - dungeon_game.git/commitdiff
Add sword
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 13 Jun 2021 18:44:45 +0000 (20:44 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 13 Jun 2021 18:44:45 +0000 (20:44 +0200)
plugins/sword/Makefile [new file with mode: 0644]
plugins/sword/dependencies.txt [new file with mode: 0644]
plugins/sword/sword.c [new file with mode: 0644]

diff --git a/plugins/sword/Makefile b/plugins/sword/Makefile
new file mode 100644 (file)
index 0000000..ee28952
--- /dev/null
@@ -0,0 +1,4 @@
+plugins/sword/sword.so: plugins/sword/sword.c plugins/game/game.h plugins/movement/movement.h plugins/inventory/inventory.h
+       cc -g -shared -fpic -o plugins/sword/sword.so plugins/sword/sword.c
+
+PLUGINS := ${PLUGINS} plugins/sword/sword.so
diff --git a/plugins/sword/dependencies.txt b/plugins/sword/dependencies.txt
new file mode 100644 (file)
index 0000000..b19003b
--- /dev/null
@@ -0,0 +1,3 @@
+game
+movement
+inventory
diff --git a/plugins/sword/sword.c b/plugins/sword/sword.c
new file mode 100644 (file)
index 0000000..f399150
--- /dev/null
@@ -0,0 +1,59 @@
+#include <stdlib.h>
+#include <stddef.h>
+#include "../game/game.h"
+#include "../movement/movement.h"
+#include "../inventory/inventory.h"
+
+static bool use_broken_sword(struct itemstack *stack)
+{
+       (void) stack;
+
+       return true;
+}
+
+static struct item broken_sword = {
+       .name = "Broken Sword",
+       .stackable = false,
+
+       .on_use = &use_broken_sword,
+       .on_destroy = NULL,
+       .on_create = NULL,
+};
+
+static bool use_sword(struct itemstack *stack)
+{
+       int x, y;
+       x = player.x;
+       y = player.y;
+
+       dir_to_xy(last_player_move, &x, &y);
+
+       struct entity *entity = entity_collision_map[x][y];
+
+       if (entity) {
+               add_health(entity, -1);
+
+               if (rand() % 100 == 0)
+                       stack->item = &broken_sword;
+       }
+
+       return false;
+}
+
+static struct item sword = {
+       .name = "Sword",
+       .stackable = false,
+
+       .on_use = &use_sword,
+       .on_destroy = NULL,
+       .on_create = NULL,
+};
+
+__attribute__((constructor)) static void init()
+{
+       inventory_add(&player_inventory, (struct itemstack) {
+               .item = &sword,
+               .count = 1,
+               .meta = NULL,
+       });
+}