Merge branch 'main' into main

This commit is contained in:
Noel Berry 2021-01-05 20:46:09 -08:00 committed by GitHub
commit cc5f137fa6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 44 additions and 14 deletions

3
content/map/readme.md Normal file
View File

@ -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!

View File

@ -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.

View File

@ -0,0 +1 @@
The tilesets are stored in the [Aseprite](https://www.aseprite.org/) format, and you'll need Aseprite to edit them.

@ -1 +1 @@
Subproject commit 63466dc2ea6c2affbdd84a696f592796b98d0b3d
Subproject commit a1267c738c1d046b3f7872508b511c820af37fae

View File

@ -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;
}

View File

@ -1,7 +1,5 @@
#pragma once
#include <blah.h>
#include <memory>
#include <vector>
#include "../world.h"
using namespace Blah;
@ -45,7 +43,7 @@ namespace TL
int columns;
int rows;
int tile_size;
std::vector<bool> cells;
Vector<bool> cells;
};
Shape m_shape = Shape::None;

View File

@ -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 { };
}

View File

@ -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();

View File

@ -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:

View File

@ -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<Orb>())
hit->entity()->destroy();
}

View File

@ -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

View File

@ -1,8 +1,6 @@
#pragma once
#include "../world.h"
#include <blah.h>
#include <memory>
#include <vector>
using namespace Blah;
@ -24,7 +22,7 @@ namespace TL
void render(Batch& batch) override;
private:
std::vector<Subtexture> m_grid;
Vector<Subtexture> m_grid;
int m_tile_width = 0;
int m_tile_height = 0;
int m_columns = 0;

View File

@ -6,6 +6,8 @@ using namespace Blah;
namespace TL
{
// Factory to create game objects
namespace Factory
{
Entity* player(World* world, Point position);

View File

@ -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;

View File

@ -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;