From b9656013b02242f99f7974dbfaeac6cfd6a47fd0 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Wed, 6 Aug 2025 12:15:21 -0400 Subject: [PATCH] Now have dead bodies working but need art for it. --- assets/devices.json | 14 +++++++++++++- assets/map_tiles.json | 26 ++++++++++++++++---------- assets/map_tiles.png | Bin 9292 -> 9544 bytes systems.cpp | 28 ++++++++++++---------------- 4 files changed, 41 insertions(+), 27 deletions(-) diff --git a/assets/devices.json b/assets/devices.json index 2bf5533..1ab700a 100644 --- a/assets/devices.json +++ b/assets/devices.json @@ -7,7 +7,7 @@ "inventory_count": 0, "randomized": false, "components": [ - {"_type": "Tile", "display": 10949, + {"_type": "Tile", "display": 6105, "foreground": "devices/fg:stairs_down", "background": "devices/bg:stairs_down" }, @@ -75,5 +75,17 @@ {"_type": "Sprite", "name": "grave_stone", "width": 256, "height": 256, "scale": 1.0}, {"_type": "Sound", "attack": "pickup", "death": "blank"} ] + }, + "DEAD_BODY": { + "id": "DEAD_BODY", + "name": "Something Dead", + "description": "You can't loot this, weirdo.", + "components": [ + {"_type": "Tile", "display": 42613, + "foreground": "devices/fg:grave_stone", + "background": "devices/bg:grave_stone" + }, + {"_type": "Sprite", "name": "dubious_combination", "width": 256, "height": 256, "scale": 1.0} + ] } } diff --git a/assets/map_tiles.json b/assets/map_tiles.json index 7a8adb0..ad01672 100644 --- a/assets/map_tiles.json +++ b/assets/map_tiles.json @@ -67,62 +67,68 @@ }, { "centered": true, - "display": 8687, + "display": 42613, "x": 64, "y": 64 }, { "centered": true, - "display": 10949, + "display": 8687, "x": 128, "y": 64 }, { "centered": true, - "display": 8793, + "display": 6105, "x": 192, "y": 64 }, { "centered": true, - "display": 95, + "display": 8793, "x": 256, "y": 64 }, { "centered": true, - "display": 1898, + "display": 95, "x": 320, "y": 64 }, { "centered": true, - "display": 42586, + "display": 1898, "x": 384, "y": 64 }, { "centered": true, - "display": 2189, + "display": 42586, "x": 448, "y": 64 }, { "centered": true, - "display": 10733, + "display": 2189, "x": 512, "y": 64 }, { "centered": true, - "display": 2220, + "display": 10733, "x": 576, "y": 64 }, { "centered": true, - "display": 1218, + "display": 2220, "x": 0, "y": 128 + }, + { + "centered": true, + "display": 1218, + "x": 64, + "y": 128 } ] diff --git a/assets/map_tiles.png b/assets/map_tiles.png index 5c958abf00f6f5c1ab14be329dd33d6bca443dbe..2270f940aad4fb787e570a2cfdef09be5e160def 100644 GIT binary patch delta 4359 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 int inventory_count = Random::uniform(0, 3); + auto loot_entity = world.entity(); if(inventory_count > 0) { - // do a clone of the things we need, like Position - auto junk_entity = world.entity(); - + // this means the entity dropped loot, so make a lootable tombstone ritual::JunkPile pile; auto& junk = config.rituals["junk"]; @@ -164,23 +163,20 @@ void System::distribute_loot(GameLevel &level, Position target_pos) { } auto entity_data = config.devices["GRAVE_STONE"]; - components::configure_entity(world, junk_entity, entity_data["components"]); - world.set(junk_entity, pile); + components::configure_entity(world, loot_entity, entity_data["components"]); + world.set(loot_entity, pile); // BUG: inventory_count here isn't really used to remove it - world.set(junk_entity, {inventory_count, entity_data}); + world.set(loot_entity, {inventory_count, entity_data}); - set_position(world, *level.collision, junk_entity, target_pos); + set_position(world, *level.collision, loot_entity, target_pos); - level.world->send(Events::GUI::ENTITY_SPAWN, junk_entity, {}); + level.world->send(Events::GUI::ENTITY_SPAWN, loot_entity, {}); } else { - dbc::log("DEAD BODY NOT IMPLEMENTED, for now just removing enemy"); - // BUG: should maybe add a component to the world for "dead thing no loot" that - // has no collision or goes away after some kind of animation - // Something like: - // auto entity_data = config.devices["DEAD_BODY"]; - // components::configure_entity(world, ent, entity_data["components"]); - // then give it a collision device that makes it go away and make a sound - // or maybe you can walk over dead bodies and they make a noise + // this creates a dead body on the ground + auto entity_data = config.devices["DEAD_BODY"]; + components::configure_entity(world, loot_entity, entity_data["components"]); + set_position(world, *level.collision, loot_entity, target_pos); + level.world->send(Events::GUI::ENTITY_SPAWN, loot_entity, {}); } }