diff --git a/content/map/readme.md b/content/map/readme.md new file mode 100644 index 0000000..909ffb3 --- /dev/null +++ b/content/map/readme.md @@ -0,0 +1,3 @@ +Due to making this game under heavy time constraints, I opted not to make or use a level editor. Instead, each object is assigned a color and I used a generic paint tool to design the levels. + +Under normal circumstances, I would argue against this method and instead use something like Ogmo Editor or Tiled. It's really hard to remember what object is what color! \ No newline at end of file diff --git a/content/sprites/readme.md b/content/sprites/readme.md new file mode 100644 index 0000000..1dbf2ab --- /dev/null +++ b/content/sprites/readme.md @@ -0,0 +1,5 @@ +The sprites are stored in the [Aseprite](https://www.aseprite.org/) format, and you'll need Aseprite to edit them. + +A few other notes: + - Animations are loaded automatically using Aseprite's `Tag` feature. Each tag is a unique animation + - Sprite Origin points use Aseprite's hidden `Slice` feature, which can be used with Shift+C. You can draw slices and give them a pivot point, which we're using to set the origin point of the sprite. \ No newline at end of file diff --git a/content/tilesets/readme.md b/content/tilesets/readme.md new file mode 100644 index 0000000..7ee2e6a --- /dev/null +++ b/content/tilesets/readme.md @@ -0,0 +1 @@ +The tilesets are stored in the [Aseprite](https://www.aseprite.org/) format, and you'll need Aseprite to edit them. \ No newline at end of file diff --git a/libs/blah b/libs/blah index 63466dc..a1267c7 160000 --- a/libs/blah +++ b/libs/blah @@ -1 +1 @@ -Subproject commit 63466dc2ea6c2affbdd84a696f592796b98d0b3d +Subproject commit a1267c738c1d046b3f7872508b511c820af37fae diff --git a/src/components/collider.cpp b/src/components/collider.cpp index 9ca7ef1..d4693bb 100644 --- a/src/components/collider.cpp +++ b/src/components/collider.cpp @@ -23,8 +23,7 @@ Collider Collider::make_grid(int tile_size, int columns, int rows) collider.m_grid.tile_size = tile_size; collider.m_grid.columns = columns; collider.m_grid.rows = rows; - collider.m_grid.cells.resize(columns * rows); - + collider.m_grid.cells.expand(columns * rows); return collider; } diff --git a/src/components/collider.h b/src/components/collider.h index 64b97a5..3c50f00 100644 --- a/src/components/collider.h +++ b/src/components/collider.h @@ -1,7 +1,5 @@ #pragma once #include -#include -#include #include "../world.h" using namespace Blah; @@ -45,7 +43,7 @@ namespace TL int columns; int rows; int tile_size; - std::vector cells; + Vector cells; }; Shape m_shape = Shape::None; diff --git a/src/components/enemy.h b/src/components/enemy.h index 23c8ff1..6ddd546 100644 --- a/src/components/enemy.h +++ b/src/components/enemy.h @@ -3,8 +3,9 @@ namespace TL { - class Enemy : public Component - { - - }; + // I just needed a way to track whether any enemies were still + // in the scene or not, so Locked Doors could open. The easiest + // way was to add an Enemy component, and check if there are any + // in the scene. + class Enemy : public Component { }; } \ No newline at end of file diff --git a/src/components/ghost_frog.h b/src/components/ghost_frog.h index ead3b84..6f97c0c 100644 --- a/src/components/ghost_frog.h +++ b/src/components/ghost_frog.h @@ -21,9 +21,18 @@ namespace TL static constexpr int st_reflect = 5; static constexpr int st_dead_state = 6; + // health during our first phase static constexpr int max_health_1 = 10; + + // health during our second phase static constexpr int max_health_2 = 3; + + // current health value (assigned to phase 1 health to start) int health = max_health_1; + + // phase 0 or 1 + // 0 = running along the ground and slicing + // 1 = flying around in the air shooting orbs int phase = 0; GhostFrog(); diff --git a/src/components/hurtable.h b/src/components/hurtable.h index 947c20f..d983e69 100644 --- a/src/components/hurtable.h +++ b/src/components/hurtable.h @@ -8,6 +8,9 @@ using namespace Blah; namespace TL { + // Automatically checks if the provided collider ever overlaps + // with something in the `hurt_by` mask. Makes it easy for enemies + // to check if they were hit by `Mask::player_attack` class Hurtable : public Component { public: diff --git a/src/components/player.cpp b/src/components/player.cpp index c2b6872..a70546c 100644 --- a/src/components/player.cpp +++ b/src/components/player.cpp @@ -244,6 +244,10 @@ void Player::update() // hack: // destroy orb + // ideally we would have an "attack" component that the orb could + // subscribe to, and delete itself when it hits the player. since + // the orb currently has no way to know if it hit the player, we + // have to add this ugly hack! if (hit->get()) hit->entity()->destroy(); } diff --git a/src/components/tilemap.cpp b/src/components/tilemap.cpp index 1bea3cb..7231fa1 100644 --- a/src/components/tilemap.cpp +++ b/src/components/tilemap.cpp @@ -12,7 +12,7 @@ Tilemap::Tilemap(int tile_width, int tile_height, int columns, int rows) m_tile_height = tile_height; m_columns = columns; m_rows = rows; - m_grid.resize(columns * rows); + m_grid.expand(columns * rows); } int Tilemap::tile_width() const diff --git a/src/components/tilemap.h b/src/components/tilemap.h index a83aaa6..94629ee 100644 --- a/src/components/tilemap.h +++ b/src/components/tilemap.h @@ -1,8 +1,6 @@ #pragma once #include "../world.h" #include -#include -#include using namespace Blah; @@ -24,7 +22,7 @@ namespace TL void render(Batch& batch) override; private: - std::vector m_grid; + Vector m_grid; int m_tile_width = 0; int m_tile_height = 0; int m_columns = 0; diff --git a/src/factory.h b/src/factory.h index 2bf4807..6016120 100644 --- a/src/factory.h +++ b/src/factory.h @@ -6,6 +6,8 @@ using namespace Blah; namespace TL { + // Factory to create game objects + namespace Factory { Entity* player(World* world, Point position); diff --git a/src/masks.h b/src/masks.h index 30d6220..e6cdfd2 100644 --- a/src/masks.h +++ b/src/masks.h @@ -5,6 +5,8 @@ namespace TL { struct Mask { + // bitfield masks for collision types + static constexpr uint32_t solid = 1 << 0; static constexpr uint32_t jumpthru = 1 << 1; static constexpr uint32_t player_attack = 1 << 2; diff --git a/src/world.h b/src/world.h index 834a5c0..8229eb7 100644 --- a/src/world.h +++ b/src/world.h @@ -111,6 +111,11 @@ namespace TL public: static constexpr int max_component_types = 256; + // NOTE: + // I tossed this reference here at the very end of making the game, + // just so that the boss could tell the game to shake the screen. + // Ideally I think there should be a Camera component that handles + // that instead. Game* game; World() = default;