Version 0.8.0 du moteur.
|
@ -0,0 +1,50 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Programme de la caméra, sert a avoir un rectangle et de pouvoir //
|
||||
// la gérer correctement en fonction de la taille de la map... etc... //
|
||||
// //
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CAMERA_HPP
|
||||
#define CAMERA_HPP
|
||||
|
||||
#include <SDL2/SDL.h> // SDL_Rect
|
||||
#include "Game.hpp" // Game::...
|
||||
#include "TileMap.hpp" // TileMap::...
|
||||
|
||||
struct Camera {
|
||||
Camera(int xpos, int ypos, int width, int height)
|
||||
{
|
||||
camR.x = xpos;
|
||||
camR.y = ypos;
|
||||
camR.w = width;
|
||||
camR.h = height;
|
||||
}
|
||||
|
||||
Camera(int xpos, int ypos, int width, int height, int z) : zoom(z)
|
||||
{
|
||||
camR.x = xpos;
|
||||
camR.y = ypos;
|
||||
camR.w = width;
|
||||
camR.h = height;
|
||||
}
|
||||
|
||||
// Verifie si la caméra ne dépasse pas de la map
|
||||
void update()
|
||||
{
|
||||
if(camR.x < 0) camR.x = 0;
|
||||
if(camR.y < 0) camR.y = 0;
|
||||
if(camR.x > Game::tileMap.worldWidth - camR.w) camR.x = Game::tileMap.worldWidth - camR.w;
|
||||
if(camR.y > Game::tileMap.worldHeight - camR.h) camR.y = Game::tileMap.worldHeight - camR.h;
|
||||
}
|
||||
|
||||
SDL_Rect camR;
|
||||
int zoom; // TODO Zoom pas encore pris en charge
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,54 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Programme des channels, sert au entitée pour avoir //
|
||||
// un channel de discution, comme un interrupteur qui vas mettre son état //
|
||||
// dans un channel, ou une porte qui vas lire dans un channel pour savoir //
|
||||
// elle doit s'ouvrir ou non. //
|
||||
// //
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CHANNELMANAGER_HPP
|
||||
#define CHANNELMANAGER_HPP
|
||||
|
||||
#include <unordered_map> // unordered_map
|
||||
|
||||
using std::unordered_map;
|
||||
|
||||
class ChannelManager {
|
||||
public:
|
||||
// Setter
|
||||
void setChannel(int channelID, bool value)
|
||||
{
|
||||
channels[channelID] = value;
|
||||
}
|
||||
|
||||
// Getter
|
||||
bool getChannel(int channelID) const
|
||||
{
|
||||
auto it = channels.find(channelID);
|
||||
return it != channels.end() ? it->second : false;
|
||||
}
|
||||
|
||||
bool areChannelsInState(const unordered_map<int, bool> &states)
|
||||
{
|
||||
for(const auto &state : states)
|
||||
{
|
||||
if(getChannel(state.first) != state.second)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
unordered_map<int, bool> channels;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,39 @@
|
|||
# Main
|
||||
main.cpp
|
||||
|
||||
# Game
|
||||
Game.cpp
|
||||
|
||||
# Texture manager
|
||||
TextureManager.cpp
|
||||
|
||||
# Map manager
|
||||
MapManager.cpp
|
||||
|
||||
# TileMap
|
||||
TileMap.cpp
|
||||
|
||||
# SDL
|
||||
$(sdl2-config --cflags --libs)
|
||||
-lSDL2_image
|
||||
|
||||
# Std version
|
||||
-std=c++20
|
||||
|
||||
# Warnings
|
||||
-Wall
|
||||
-Wextra
|
||||
-Wpedantic
|
||||
-Wshadow
|
||||
-Wconversion
|
||||
-Wfloat-equal
|
||||
-Wformat=2
|
||||
-Wnull-dereference
|
||||
-Woverloaded-virtual
|
||||
|
||||
# Debug
|
||||
-DDEBUG_MODE
|
||||
-g
|
||||
|
||||
# Release
|
||||
#-O2
|
|
@ -0,0 +1,113 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
///////////////////////////////////////////////////////
|
||||
// //
|
||||
// Système d'animation pour l'ECS, peut controller //
|
||||
// tout ce qui est en rapport avec des animations. //
|
||||
// //
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
#ifndef ANIMATION_HPP
|
||||
#define ANIMATION_HPP
|
||||
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include "ECS.hpp"
|
||||
#include "../Game.hpp"
|
||||
#include "SpriteComponent.hpp"
|
||||
|
||||
using std::string, std::reverse, std::vector;
|
||||
|
||||
class AnimationSystem : public Component {
|
||||
public:
|
||||
AnimationSystem() = default;
|
||||
AnimationSystem(int nbF, int currentF, int frameD, bool playAnim) : playAnimation(playAnim), frameDelay(frameD), currentFrame(currentF), m_nbFrames(nbF)
|
||||
{}
|
||||
|
||||
void init() override
|
||||
{
|
||||
m_sprite = &entity->getComponent<SpriteComponent>();
|
||||
|
||||
m_createFramesClips();
|
||||
}
|
||||
|
||||
void update() override
|
||||
{
|
||||
if(playAnimation)
|
||||
{
|
||||
m_frameTimer++;
|
||||
|
||||
if(m_frameTimer >= frameDelay)
|
||||
{
|
||||
m_frameTimer = 0;
|
||||
|
||||
if(reverse)
|
||||
{
|
||||
currentFrame = m_nbFrames - 1 - (m_nbFrames - 1 - currentFrame + 1) % m_nbFrames;
|
||||
if(!loop && !currentFrame) playAnimation = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentFrame = (currentFrame + 1) % m_nbFrames;
|
||||
if(!loop && currentFrame == m_nbFrames - 1) playAnimation = false;
|
||||
}
|
||||
}
|
||||
|
||||
m_sprite->setSrcRect(m_frames[currentFrame]);
|
||||
}
|
||||
}
|
||||
|
||||
void changeAnimation(const string &path, int nbF)
|
||||
{
|
||||
currentFrame = 0;
|
||||
|
||||
m_sprite->setTexture(path);
|
||||
m_nbFrames = nbF;
|
||||
m_createFramesClips();
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void changeAnimation(const string &path, int nbF, int frameD)
|
||||
{
|
||||
changeAnimation(path, nbF);
|
||||
|
||||
frameDelay = frameD;
|
||||
}
|
||||
|
||||
bool playAnimation {true};
|
||||
bool loop {true};
|
||||
bool reverse {false};
|
||||
|
||||
int frameDelay {0};
|
||||
int currentFrame {0};
|
||||
|
||||
private:
|
||||
void m_createFramesClips()
|
||||
{
|
||||
m_frames.clear();
|
||||
|
||||
for (int framePos {0}; framePos < m_nbFrames; framePos++) {
|
||||
SDL_Rect frame;
|
||||
|
||||
frame.x = framePos * m_sprite->getSrcRect().w;
|
||||
frame.y = 0;
|
||||
frame.w = m_sprite->getSrcRect().w;
|
||||
frame.h = m_sprite->getSrcRect().h;
|
||||
|
||||
m_frames.push_back(frame);
|
||||
}
|
||||
}
|
||||
|
||||
SpriteComponent *m_sprite;
|
||||
vector<SDL_Rect> m_frames;
|
||||
|
||||
int m_nbFrames {1};
|
||||
int m_frameTimer {0};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
/////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Inclure facilement tout les definition des composant. //
|
||||
// //
|
||||
/////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef COMPONENTS_HPP
|
||||
#define COMPONENTS_HPP
|
||||
|
||||
#include "AnimationSystem.hpp"
|
||||
#include "Door.hpp"
|
||||
#include "ECS.hpp"
|
||||
#include "HitboxComponent.hpp"
|
||||
#include "InteractableComponent.hpp"
|
||||
#include "InventoryComponent.hpp"
|
||||
#include "Lever.hpp"
|
||||
#include "Lock.hpp"
|
||||
#include "PlayerSystem.hpp"
|
||||
#include "SpriteComponent.hpp"
|
||||
#include "TransformComponent.hpp"
|
||||
|
||||
#endif
|
|
@ -0,0 +1,70 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
//////////////////////////////////
|
||||
// //
|
||||
// Composant pour les portes. //
|
||||
// //
|
||||
//////////////////////////////////
|
||||
|
||||
#ifndef DOOR_HPP
|
||||
#define DOOR_HPP
|
||||
|
||||
#include <unordered_map>
|
||||
#include "AnimationSystem.hpp"
|
||||
#include "ECS.hpp"
|
||||
#include "HitboxComponent.hpp"
|
||||
|
||||
using std::unordered_map;
|
||||
|
||||
class Door : public Component {
|
||||
public:
|
||||
Door(unordered_map<int, bool> states) : m_states(states)
|
||||
{}
|
||||
|
||||
void init() override
|
||||
{
|
||||
m_animation = &entity->getComponent<AnimationSystem>();
|
||||
m_hitbox = &entity->getComponent<HitboxComponent>();
|
||||
m_animation->loop = false;
|
||||
}
|
||||
|
||||
void update() override
|
||||
{
|
||||
if(Game::entityManager.getChannelManager().areChannelsInState(m_states))
|
||||
{
|
||||
if(!m_isDoorOpen)
|
||||
{
|
||||
m_animation->reverse = false;
|
||||
m_animation->playAnimation = true;
|
||||
|
||||
m_isDoorOpen = true;
|
||||
}
|
||||
}
|
||||
else if(m_isDoorOpen)
|
||||
{
|
||||
m_animation->reverse = true;
|
||||
m_animation->playAnimation = true;
|
||||
m_hitbox->hitboxActivated = true;
|
||||
|
||||
m_isDoorOpen = false;
|
||||
}
|
||||
|
||||
if(!m_animation->playAnimation)
|
||||
{
|
||||
m_hitbox->hitboxActivated = !m_isDoorOpen;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
AnimationSystem *m_animation;
|
||||
HitboxComponent *m_hitbox;
|
||||
|
||||
unordered_map<int, bool> m_states;
|
||||
|
||||
bool m_isDoorOpen {false};
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,203 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////
|
||||
// //
|
||||
// Definition de l'ECS. //
|
||||
// //
|
||||
////////////////////////////
|
||||
|
||||
#ifndef ECS_HPP
|
||||
#define ECS_HPP
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <bitset>
|
||||
#include <stdexcept>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include "../ChannelManager.hpp"
|
||||
|
||||
using std::bitset, std::array, std::vector, std::unique_ptr, std::make_unique, std::move, std::forward, std::runtime_error, std::sort;
|
||||
|
||||
class Component;
|
||||
class Entity;
|
||||
|
||||
using ComponentID = std::size_t;
|
||||
|
||||
inline ComponentID getComponentTypeID()
|
||||
{
|
||||
static ComponentID lastID = 0;
|
||||
return lastID++;
|
||||
}
|
||||
|
||||
template<typename T> inline ComponentID getComponentTypeID() noexcept
|
||||
{
|
||||
static ComponentID typeID = getComponentTypeID();
|
||||
return typeID;
|
||||
}
|
||||
|
||||
constexpr std::size_t maxComponents = 32;
|
||||
|
||||
using ComponentBitSet = bitset<maxComponents>;
|
||||
using ComponentArray = array<Component*, maxComponents>;
|
||||
|
||||
class Component {
|
||||
public:
|
||||
Entity *entity;
|
||||
|
||||
virtual void init() {}
|
||||
virtual void update() {}
|
||||
virtual void draw() {}
|
||||
|
||||
virtual ~Component() {}
|
||||
};
|
||||
|
||||
class Entity {
|
||||
public:
|
||||
void update()
|
||||
{
|
||||
for(auto &c : m_components) c->update();
|
||||
}
|
||||
|
||||
void draw()
|
||||
{
|
||||
for(auto &c : m_components) c->draw();
|
||||
}
|
||||
|
||||
bool isActive() const { return m_active; }
|
||||
void destroy() { m_active = false; }
|
||||
|
||||
template <typename T, typename... TArgs>
|
||||
T& addComponent(TArgs&&... args)
|
||||
{
|
||||
if(hasComponent<T>())
|
||||
{
|
||||
throw runtime_error("Vous ne pouvez pas mettre deux fois le même composant dans la même entité.\n");
|
||||
}
|
||||
|
||||
// Creation d'un pointeur du type donné avec les arguments necessaires
|
||||
T *c(new T(forward<TArgs>(args)...));
|
||||
// On donne au composant une reference de l'entitée
|
||||
c->entity = this;
|
||||
|
||||
// Création d'un unique_ptr et ajout du composant dans le vecteur et array associé
|
||||
unique_ptr<Component> uPtr {c};
|
||||
m_components.emplace_back(move(uPtr));
|
||||
|
||||
m_componentArray[getComponentTypeID<T>()] = c;
|
||||
m_componentBitSet[getComponentTypeID<T>()] = true;
|
||||
|
||||
// Initialisation du composant
|
||||
c->init();
|
||||
|
||||
return *c;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool hasComponent() const {
|
||||
// Vérifier d'abord si un type exact est présent
|
||||
ComponentID id = getComponentTypeID<T>();
|
||||
if (m_componentBitSet[id]) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Si non, vérifier dynamiquement tous les composants pour un type dérivé
|
||||
for (const auto& c : m_components) {
|
||||
if (dynamic_cast<T*>(c.get())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T& getComponent() const {
|
||||
// Vérification rapide via le BitSet et l'accès direct au composant via l'array
|
||||
ComponentID id = getComponentTypeID<T>();
|
||||
if (m_componentBitSet[id]) {
|
||||
return *static_cast<T*>(m_componentArray[id]);
|
||||
}
|
||||
|
||||
// Vérification polymorphique avec dynamic_cast
|
||||
for (const auto& c : m_components) {
|
||||
if (T* t = dynamic_cast<T*>(c.get())) {
|
||||
return *t;
|
||||
}
|
||||
}
|
||||
throw runtime_error("Composant non trouvé.\n");
|
||||
}
|
||||
|
||||
int draw_priority;
|
||||
|
||||
private:
|
||||
bool m_active {true};
|
||||
|
||||
vector<unique_ptr<Component>> m_components;
|
||||
|
||||
ComponentArray m_componentArray;
|
||||
ComponentBitSet m_componentBitSet;
|
||||
};
|
||||
|
||||
class Manager {
|
||||
public:
|
||||
void update()
|
||||
{
|
||||
for(auto &e : m_entities) e->update();
|
||||
}
|
||||
|
||||
void draw()
|
||||
{
|
||||
vector<int> drawOrder(m_entities.size());
|
||||
|
||||
for(int i {0}; i < static_cast<int>(m_entities.size()); i++) drawOrder[i] = i;
|
||||
|
||||
sort(drawOrder.begin(), drawOrder.end(), [this](const int &a, const int &b) {
|
||||
return m_entities.at(a)->draw_priority < m_entities.at(b)->draw_priority;
|
||||
});
|
||||
|
||||
for(int i {0}; i < static_cast<int>(m_entities.size()); i++)
|
||||
{
|
||||
m_entities[drawOrder[i]]->draw();
|
||||
}
|
||||
}
|
||||
|
||||
void refresh()
|
||||
{
|
||||
m_entities.erase(std::remove_if(m_entities.begin(), m_entities.end(),
|
||||
[](const unique_ptr<Entity> &mEntity) {
|
||||
return !mEntity->isActive();
|
||||
}),
|
||||
m_entities.end());
|
||||
}
|
||||
|
||||
Entity &addEntity()
|
||||
{
|
||||
Entity *e = new Entity();
|
||||
unique_ptr<Entity> uPtr{e};
|
||||
m_entities.emplace_back(move(uPtr));
|
||||
return *e;
|
||||
}
|
||||
|
||||
std::size_t getNumberOfEntity() const
|
||||
{
|
||||
return m_entities.size();
|
||||
}
|
||||
|
||||
void erase(std::size_t index)
|
||||
{
|
||||
m_entities.at(index).get()->destroy();
|
||||
}
|
||||
|
||||
vector<unique_ptr<Entity>> &getEntities() { return m_entities; }
|
||||
ChannelManager &getChannelManager() { return m_channelManager; }
|
||||
|
||||
private:
|
||||
vector<unique_ptr<Entity>> m_entities;
|
||||
ChannelManager m_channelManager;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,66 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Composant hitbox, contient toutes les données //
|
||||
// necessaires pour gérer les collision efficacement. //
|
||||
// //
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef HITBOX_HPP
|
||||
#define HITBOX_HPP
|
||||
|
||||
#include "ECS.hpp"
|
||||
#include "TransformComponent.hpp"
|
||||
#include "../Vector2D.hpp"
|
||||
|
||||
#ifdef DEBUG_MODE
|
||||
#include "../Game.hpp"
|
||||
#endif
|
||||
|
||||
class HitboxComponent : public Component {
|
||||
public:
|
||||
HitboxComponent() = default;
|
||||
|
||||
HitboxComponent(Vector2D<float> sc, Vector2D<float> pos) : position(pos), scale(sc)
|
||||
{}
|
||||
|
||||
void init() override
|
||||
{
|
||||
m_transform = &entity->getComponent<TransformComponent>();
|
||||
}
|
||||
|
||||
void update() override
|
||||
{
|
||||
hitboxR.w = static_cast<int>(static_cast<float>(m_transform->dimension.x * m_transform->scale) * scale.x);
|
||||
hitboxR.h = static_cast<int>(static_cast<float>(m_transform->dimension.y * m_transform->scale) * scale.y);
|
||||
hitboxR.x = static_cast<int>(m_transform->position.x + static_cast<float>(m_transform->dimension.x * m_transform->scale - hitboxR.w) * position.x);
|
||||
hitboxR.y = static_cast<int>(m_transform->position.y + static_cast<float>(m_transform->dimension.y * m_transform->scale - hitboxR.h) * position.y);
|
||||
}
|
||||
|
||||
#ifdef DEBUG_MODE
|
||||
void draw() override
|
||||
{
|
||||
if(hitboxActivated)
|
||||
{
|
||||
SDL_SetRenderDrawColor(Game::renderer, 20, 200, 18, 255);
|
||||
SDL_RenderDrawRect(Game::renderer, &hitboxR);
|
||||
SDL_SetRenderDrawColor(Game::renderer, 20, 20, 18, 255);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Vector2D<float> position{Vector2D<float>(1.0f, 1.0f)}; // Dans l'entitée (0 -> 1) 0=>tout a gauche de l'entitée, 1=>tout a droite et pareil pour le Y
|
||||
Vector2D<float> scale{Vector2D<float>(1.0f, 1.0f)}; // Par rapport à la taille initiale (0 -> 1)
|
||||
SDL_Rect hitboxR;
|
||||
|
||||
bool hitboxActivated {true};
|
||||
|
||||
private:
|
||||
TransformComponent *m_transform;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,21 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Classe de base pour tout les composant interactifs. //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef INTERACTABLE_HPP
|
||||
#define INTERACTABLE_HPP
|
||||
|
||||
#include "ECS.hpp"
|
||||
|
||||
struct InteractableComponent : public Component {
|
||||
virtual void interact() = 0;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,55 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Composant d'inventaire, sert pour les coffre, PNJ, ou MOB. //
|
||||
// //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef INVENTORY_HPP
|
||||
#define INVENTORY_HPP
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include "ECS.hpp"
|
||||
#include "../IP/IP.hpp"
|
||||
|
||||
using std::vector, std::unique_ptr, std::move;
|
||||
|
||||
class InventoryComponent : public Component {
|
||||
public:
|
||||
InventoryComponent() = default;
|
||||
InventoryComponent(vector<unique_ptr<Item>> items) : m_items(move(items))
|
||||
{}
|
||||
|
||||
Item &addItem()
|
||||
{
|
||||
Item *i = new Item();
|
||||
unique_ptr<Item> uPtr{i};
|
||||
m_items.emplace_back(move(uPtr));
|
||||
return *i;
|
||||
}
|
||||
|
||||
std::size_t getNumberOfItem()
|
||||
{
|
||||
return m_items.size();
|
||||
}
|
||||
|
||||
void erase(std::size_t index)
|
||||
{
|
||||
if (index < m_items.size())
|
||||
{
|
||||
m_items.erase(m_items.begin() + index);
|
||||
}
|
||||
}
|
||||
|
||||
vector<unique_ptr<Item>> &getItems() { return m_items; }
|
||||
|
||||
private:
|
||||
vector<unique_ptr<Item>> m_items;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,67 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// //
|
||||
// Composant interactif, ici pour les levier. //
|
||||
// //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
#ifndef LEVER_HPP
|
||||
#define LEVER_HPP
|
||||
|
||||
#include "AnimationSystem.hpp"
|
||||
#include "InteractableComponent.hpp"
|
||||
#include "../Game.hpp"
|
||||
|
||||
class Lever : public InteractableComponent {
|
||||
public:
|
||||
Lever(int channel) : m_channel(channel)
|
||||
{}
|
||||
|
||||
void init() override
|
||||
{
|
||||
m_animation = &entity->getComponent<AnimationSystem>();
|
||||
m_animation->loop = false;
|
||||
}
|
||||
|
||||
void update() override
|
||||
{
|
||||
if(!m_animation->playAnimation)
|
||||
{
|
||||
Game::entityManager.getChannelManager().setChannel(m_channel, m_leverOn);
|
||||
}
|
||||
}
|
||||
|
||||
void interact() override
|
||||
{
|
||||
if(!m_animation->playAnimation)
|
||||
{
|
||||
if(m_leverOn)
|
||||
{
|
||||
m_animation->reverse = true;
|
||||
m_animation->playAnimation = true;
|
||||
|
||||
m_leverOn = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_animation->reverse = false;
|
||||
m_animation->playAnimation = true;
|
||||
|
||||
m_leverOn = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
int m_channel;
|
||||
|
||||
AnimationSystem *m_animation;
|
||||
|
||||
bool m_leverOn {false};
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,55 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// //
|
||||
// Composant interactif, ici pour les serrures. //
|
||||
// //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
#ifndef LOCK_HPP
|
||||
#define LOCK_HPP
|
||||
|
||||
#include "AnimationSystem.hpp"
|
||||
#include "InteractableComponent.hpp"
|
||||
#include "../Game.hpp"
|
||||
|
||||
class Lock : public InteractableComponent {
|
||||
public:
|
||||
Lock(int channel) : m_channel(channel)
|
||||
{}
|
||||
|
||||
void init() override
|
||||
{
|
||||
m_animation = &entity->getComponent<AnimationSystem>();
|
||||
m_animation->loop = false;
|
||||
}
|
||||
|
||||
void update() override
|
||||
{
|
||||
if(!m_animation->playAnimation && m_lockInteracted)
|
||||
{
|
||||
Game::entityManager.getChannelManager().setChannel(m_channel, true);
|
||||
}
|
||||
}
|
||||
|
||||
void interact() override
|
||||
{
|
||||
if(!m_animation->playAnimation && !m_lockInteracted)
|
||||
{
|
||||
m_animation->playAnimation = true;
|
||||
m_lockInteracted = true;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
int m_channel;
|
||||
|
||||
AnimationSystem *m_animation;
|
||||
|
||||
bool m_lockInteracted {false};
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,277 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////////////////////
|
||||
// //
|
||||
// Système pour le joueur, gère tout ce //
|
||||
// qui est necessaire pour le joueur. //
|
||||
// //
|
||||
////////////////////////////////////////////
|
||||
|
||||
#ifndef PLAYER_HPP
|
||||
#define PLAYER_HPP
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <vector>
|
||||
#include "AnimationSystem.hpp"
|
||||
#include "ECS.hpp"
|
||||
#include "InteractableComponent.hpp"
|
||||
#include "SpriteComponent.hpp"
|
||||
#include "TransformComponent.hpp"
|
||||
#include "../Camera.hpp"
|
||||
#include "../Events.hpp"
|
||||
#include "../Game.hpp"
|
||||
#include "../TileMap.hpp"
|
||||
#include "../Vector2D.hpp"
|
||||
|
||||
using std::lerp, std::abs, std::vector, std::sort;
|
||||
|
||||
constexpr const float EPSILON = 1e-6f; // Tolérance
|
||||
|
||||
class PlayerSystem : public Component {
|
||||
public:
|
||||
void init() override
|
||||
{
|
||||
m_transform = &entity->getComponent<TransformComponent>();
|
||||
m_sprite = &entity->getComponent<SpriteComponent>();
|
||||
m_hitbox = &entity->getComponent<HitboxComponent>();
|
||||
m_animation = &entity->getComponent<AnimationSystem>();
|
||||
}
|
||||
|
||||
void update() override
|
||||
{
|
||||
m_getInputs();
|
||||
m_handleHitboxes();
|
||||
m_adjustVelocity();
|
||||
m_setStateAndAnimation();
|
||||
m_setFlip();
|
||||
m_setCamera();
|
||||
m_checkInteractions();
|
||||
}
|
||||
|
||||
#ifdef DEBUG_MODE
|
||||
void draw() override
|
||||
{
|
||||
SDL_SetRenderDrawColor(Game::renderer, 200, 20, 18, 255);
|
||||
|
||||
for(auto it {Game::entityManager.getEntities().begin() + 1}; it < Game::entityManager.getEntities().end(); it++)
|
||||
{
|
||||
if(it->get()->hasComponent<InteractableComponent>())
|
||||
{
|
||||
SDL_Rect interactableR;
|
||||
|
||||
if(it->get()->hasComponent<HitboxComponent>())
|
||||
{
|
||||
interactableR = it->get()->getComponent<HitboxComponent>().hitboxR;
|
||||
}
|
||||
else
|
||||
{
|
||||
interactableR.x = static_cast<int>(it->get()->getComponent<TransformComponent>().position.x);
|
||||
interactableR.y = static_cast<int>(it->get()->getComponent<TransformComponent>().position.y);
|
||||
interactableR.w = it->get()->getComponent<TransformComponent>().dimension.x * it->get()->getComponent<TransformComponent>().scale;
|
||||
interactableR.h = it->get()->getComponent<TransformComponent>().dimension.y * it->get()->getComponent<TransformComponent>().scale;
|
||||
}
|
||||
|
||||
interactableR.x -= m_interactionRange;
|
||||
interactableR.y -= m_interactionRange;
|
||||
interactableR.w += (m_interactionRange * 2);
|
||||
interactableR.h += (m_interactionRange * 2);
|
||||
|
||||
SDL_RenderDrawRect(Game::renderer, &interactableR);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_Rect futureHitboxR = m_hitbox->hitboxR;
|
||||
futureHitboxR.x += static_cast<int>(m_transform->velocity.x * static_cast<float>(m_transform->speed));
|
||||
futureHitboxR.y += static_cast<int>(m_transform->velocity.y * static_cast<float>(m_transform->speed));
|
||||
|
||||
SDL_RenderDrawRect(Game::renderer, &futureHitboxR);
|
||||
|
||||
SDL_SetRenderDrawColor(Game::renderer, 20, 20, 18, 255);
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
void m_getInputs()
|
||||
{
|
||||
m_transform->velocity.x = Game::events.keys[SDL_SCANCODE_A] * -1 + Game::events.keys[SDL_SCANCODE_D] * 1;
|
||||
m_transform->velocity.y = Game::events.keys[SDL_SCANCODE_W] * -1 + Game::events.keys[SDL_SCANCODE_S] * 1;
|
||||
}
|
||||
|
||||
void m_handleHitboxes()
|
||||
{
|
||||
for(int i {0}; i < 2; i++)
|
||||
{
|
||||
SDL_Rect futureHitboxR = m_hitbox->hitboxR;
|
||||
if(i == 0) futureHitboxR.x += static_cast<int>(m_transform->velocity.x * static_cast<float>(m_transform->speed));
|
||||
if(i == 1) futureHitboxR.y += static_cast<int>(m_transform->velocity.y * static_cast<float>(m_transform->speed));
|
||||
|
||||
SDL_Rect hitboxTilesR;
|
||||
hitboxTilesR.x = futureHitboxR.x / (TILE_SIZE * TILEMAP_SCALE);
|
||||
hitboxTilesR.y = futureHitboxR.y / (TILE_SIZE * TILEMAP_SCALE);
|
||||
hitboxTilesR.w = (futureHitboxR.w + futureHitboxR.x) / (TILE_SIZE * TILEMAP_SCALE);
|
||||
hitboxTilesR.h = (futureHitboxR.h + futureHitboxR.y) / (TILE_SIZE * TILEMAP_SCALE);
|
||||
|
||||
vector<int> touchedHitboxes {};
|
||||
|
||||
for(int tileY = hitboxTilesR.y; tileY <= hitboxTilesR.h; tileY++)
|
||||
{
|
||||
for(int tileX = hitboxTilesR.x; tileX <= hitboxTilesR.w; tileX++)
|
||||
{
|
||||
touchedHitboxes.emplace_back(Game::tileMap.hitboxes[tileX + tileY * Game::tileMap.tileMapWidth]);
|
||||
}
|
||||
}
|
||||
|
||||
sort(touchedHitboxes.begin(), touchedHitboxes.end());
|
||||
|
||||
for(const auto &touchedHitbox : touchedHitboxes)
|
||||
{
|
||||
if(touchedHitbox == 1)
|
||||
{
|
||||
if(i == 0) m_transform->velocity.x = 0;
|
||||
if(i == 1) m_transform->velocity.y = 0;
|
||||
break;
|
||||
}
|
||||
else if(touchedHitbox != 0)
|
||||
{
|
||||
Game::tileMap.LoadNextMap(touchedHitbox);
|
||||
m_transform->position = Game::tileMap.getPlayerInitPos();
|
||||
|
||||
Game::camera.camR.x = static_cast<int>(m_transform->position.x - static_cast<float>(Game::camera.camR.w / 2 - m_transform->dimension.x * m_transform->scale / 2));
|
||||
Game::camera.camR.y = static_cast<int>(m_transform->position.y - static_cast<float>(Game::camera.camR.h / 2 - m_transform->dimension.y * m_transform->scale / 2));
|
||||
|
||||
playerState = State::None;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for(auto it {Game::entityManager.getEntities().begin() + 1}; it < Game::entityManager.getEntities().end(); it++)
|
||||
{
|
||||
if(it->get()->hasComponent<HitboxComponent>())
|
||||
{
|
||||
if(it->get()->getComponent<HitboxComponent>().hitboxActivated)
|
||||
{
|
||||
if(SDL_HasIntersection(&futureHitboxR, &it->get()->getComponent<HitboxComponent>().hitboxR))
|
||||
{
|
||||
if(i == 0) m_transform->velocity.x = 0;
|
||||
if(i == 1) m_transform->velocity.y = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void m_adjustVelocity()
|
||||
{
|
||||
if(isNotZero(m_transform->velocity.x) && isNotZero(m_transform->velocity.y))
|
||||
{
|
||||
m_transform->velocity.x *= 0.707106781186548f;
|
||||
m_transform->velocity.y *= 0.707106781186548f;
|
||||
}
|
||||
}
|
||||
|
||||
void m_setStateAndAnimation()
|
||||
{
|
||||
if((isNotZero(m_transform->velocity.x) || isNotZero(m_transform->velocity.y)) && playerState != State::Running)
|
||||
{
|
||||
playerState = State::Running;
|
||||
m_animation->changeAnimation("ressources/heroes/knight/run-sheet.png", 6, 10);
|
||||
}
|
||||
else if(!(isNotZero(m_transform->velocity.x) || isNotZero(m_transform->velocity.y)) && playerState != State::Idle)
|
||||
{
|
||||
playerState = State::Idle;
|
||||
m_animation->changeAnimation("ressources/heroes/knight/idle-sheet.png", 4, 15);
|
||||
}
|
||||
}
|
||||
|
||||
void m_setFlip()
|
||||
{
|
||||
if(m_transform->velocity.x < 0.0f)
|
||||
m_sprite->flipSprite = true;
|
||||
if(m_transform->velocity.x > 0.0f)
|
||||
m_sprite->flipSprite = false;
|
||||
}
|
||||
|
||||
void m_setCamera()
|
||||
{
|
||||
float targetX = m_transform->position.x - static_cast<float>(Game::camera.camR.w / 2 - m_transform->dimension.x * m_transform->scale / 2);
|
||||
float targetY = m_transform->position.y - static_cast<float>(Game::camera.camR.h / 2 - m_transform->dimension.y * m_transform->scale / 2);
|
||||
|
||||
float smoothingFactor {0.08f};
|
||||
|
||||
if(playerState == State::Running) smoothingFactor = 0.12f;
|
||||
|
||||
Game::camera.camR.x = static_cast<int>(lerp(Game::camera.camR.x, targetX, smoothingFactor));
|
||||
Game::camera.camR.y = static_cast<int>(lerp(Game::camera.camR.y, targetY, smoothingFactor));
|
||||
}
|
||||
|
||||
void m_checkInteractions()
|
||||
{
|
||||
if(Game::events.keys[SDL_SCANCODE_E])
|
||||
{
|
||||
for(auto it {Game::entityManager.getEntities().begin() + 1}; it < Game::entityManager.getEntities().end(); it++)
|
||||
{
|
||||
if(it->get()->hasComponent<InteractableComponent>())
|
||||
{
|
||||
SDL_Rect interactableR;
|
||||
|
||||
if(it->get()->hasComponent<HitboxComponent>())
|
||||
{
|
||||
interactableR = it->get()->getComponent<HitboxComponent>().hitboxR;
|
||||
}
|
||||
else
|
||||
{
|
||||
interactableR.x = static_cast<int>(it->get()->getComponent<TransformComponent>().position.x);
|
||||
interactableR.y = static_cast<int>(it->get()->getComponent<TransformComponent>().position.y);
|
||||
interactableR.w = it->get()->getComponent<TransformComponent>().dimension.x * it->get()->getComponent<TransformComponent>().scale;
|
||||
interactableR.h = it->get()->getComponent<TransformComponent>().dimension.y * it->get()->getComponent<TransformComponent>().scale;
|
||||
}
|
||||
|
||||
if(m_isInRange(interactableR))
|
||||
{
|
||||
it->get()->getComponent<InteractableComponent>().interact();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool m_isInRange(const SDL_Rect &entityR)
|
||||
{
|
||||
SDL_Rect intersectR {entityR};
|
||||
|
||||
intersectR.x -= m_interactionRange;
|
||||
intersectR.y -= m_interactionRange;
|
||||
intersectR.w += (m_interactionRange * 2);
|
||||
intersectR.h += (m_interactionRange * 2);
|
||||
|
||||
return SDL_HasIntersection(&m_hitbox->hitboxR, &intersectR);
|
||||
}
|
||||
|
||||
inline bool isNotZero(float value)
|
||||
{
|
||||
return abs(value) > EPSILON;
|
||||
}
|
||||
|
||||
enum class State {
|
||||
None,
|
||||
Idle,
|
||||
Running
|
||||
};
|
||||
|
||||
TransformComponent *m_transform;
|
||||
SpriteComponent *m_sprite;
|
||||
HitboxComponent *m_hitbox;
|
||||
AnimationSystem *m_animation;
|
||||
|
||||
int m_interactionRange {10};
|
||||
|
||||
State playerState {State::None};
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,76 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////////////////////
|
||||
// //
|
||||
// Composant sprite, gère ce qu'il faut //
|
||||
// pour afficher le sprite. //
|
||||
// //
|
||||
////////////////////////////////////////////
|
||||
|
||||
#ifndef SPRITE_HPP
|
||||
#define SPRITE_HPP
|
||||
|
||||
#include <string>
|
||||
#include "ECS.hpp"
|
||||
#include "TransformComponent.hpp"
|
||||
#include "../Game.hpp"
|
||||
#include "../TextureManager.hpp"
|
||||
|
||||
using std::string;
|
||||
|
||||
class SpriteComponent : public Component {
|
||||
public:
|
||||
SpriteComponent(const string &path)
|
||||
{
|
||||
setTexture(path);
|
||||
}
|
||||
|
||||
void init() override
|
||||
{
|
||||
m_transform = &entity->getComponent<TransformComponent>();
|
||||
|
||||
m_srcR.x = m_srcR.y = 0;
|
||||
m_srcR.w = m_transform->dimension.x;
|
||||
m_srcR.h = m_transform->dimension.y;
|
||||
}
|
||||
|
||||
void update() override
|
||||
{
|
||||
m_dstR.x = static_cast<int>(m_transform->position.x);
|
||||
m_dstR.y = static_cast<int>(m_transform->position.y);
|
||||
m_dstR.w = m_transform->dimension.x * m_transform->scale;
|
||||
m_dstR.h = m_transform->dimension.y * m_transform->scale;
|
||||
}
|
||||
|
||||
void draw() override
|
||||
{
|
||||
Game::textureManager.Draw(m_texture, m_srcR, m_dstR, flipSprite);
|
||||
}
|
||||
|
||||
void setTexture(const string &path)
|
||||
{
|
||||
m_texture = Game::textureManager.LoadTexture(path);
|
||||
}
|
||||
|
||||
SDL_Rect getSrcRect()
|
||||
{
|
||||
return m_srcR;
|
||||
}
|
||||
|
||||
void setSrcRect(SDL_Rect srcR)
|
||||
{
|
||||
m_srcR = srcR;
|
||||
}
|
||||
|
||||
bool flipSprite {false};
|
||||
|
||||
private:
|
||||
TransformComponent *m_transform;
|
||||
SDL_Texture *m_texture;
|
||||
SDL_Rect m_srcR, m_dstR;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,49 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// //
|
||||
// Composant de transformation, sert a donner //
|
||||
// une position, dimension, etc... à une entitée. //
|
||||
// //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
#ifndef TRANSFORM_HPP
|
||||
#define TRANSFORM_HPP
|
||||
|
||||
#include "ECS.hpp"
|
||||
#include "../Vector2D.hpp"
|
||||
|
||||
struct TransformComponent : public Component {
|
||||
TransformComponent()
|
||||
{
|
||||
position.zero();
|
||||
}
|
||||
|
||||
TransformComponent(Vector2D<float> pos, Vector2D<int> dim, int sc, int spd) : position(pos), speed(spd), dimension(dim), scale(sc)
|
||||
{}
|
||||
|
||||
void init() override
|
||||
{
|
||||
velocity.zero();
|
||||
}
|
||||
|
||||
void update() override
|
||||
{
|
||||
position += (velocity * static_cast<float>(speed));
|
||||
|
||||
entity->draw_priority = static_cast<int>(position.y + static_cast<float>(dimension.y * scale));
|
||||
}
|
||||
|
||||
Vector2D<float> position;
|
||||
|
||||
Vector2D<float> velocity;
|
||||
int speed {1};
|
||||
|
||||
Vector2D<int> dimension {32, 32};
|
||||
int scale {1};
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,19 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Programme des évènement, sert a avoir une class dédiée au évènements. //
|
||||
// //
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef EVENTS_HPP
|
||||
#define EVENTS_HPP
|
||||
|
||||
struct Events {
|
||||
bool keys[SDL_NUM_SCANCODES]; // touches du clavier en direct
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,154 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
/////////////////////////////////////
|
||||
// //
|
||||
// Definition de la classe Game. //
|
||||
// //
|
||||
/////////////////////////////////////
|
||||
|
||||
#include <iostream> // cerr
|
||||
#include <SDL2/SDL_image.h> // IMG_Init, IMG_GetError
|
||||
#include <stdexcept> // runtime_error
|
||||
#include "Camera.hpp" // Camera::
|
||||
#include "ECS/Components.hpp" // ECS and Components definition
|
||||
#include "Events.hpp" // Events::
|
||||
#include "Game.hpp" // Game declaration
|
||||
#include "IP/Properties.hpp" // Item definition
|
||||
#include "MapManager.hpp" // MapManager::
|
||||
#include "TextureManager.hpp" // TextureManager::
|
||||
#include "TileMap.hpp" // TileMap::
|
||||
|
||||
using std::cerr, std::runtime_error;
|
||||
|
||||
SDL_Renderer *Game::renderer;
|
||||
SDL_Texture *Game::textureRenderer;
|
||||
Events Game::events;
|
||||
TextureManager Game::textureManager;
|
||||
Camera Game::camera {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
||||
TileMap Game::tileMap;
|
||||
MapManager Game::mapManager;
|
||||
Manager Game::entityManager;
|
||||
|
||||
Entity &player(Game::entityManager.addEntity());
|
||||
|
||||
Game::~Game()
|
||||
{
|
||||
if(renderer != NULL) SDL_DestroyRenderer(renderer);
|
||||
if(m_window != NULL) SDL_DestroyWindow(m_window);
|
||||
|
||||
SDL_Quit();
|
||||
|
||||
cerr << "Game cleaned.\n";
|
||||
}
|
||||
|
||||
bool Game::Init()
|
||||
{
|
||||
if(SDL_Init(SDL_INIT_EVERYTHING) != 0)
|
||||
{
|
||||
cerr << "Erreur SDL_Init : " << SDL_GetError() << '\n';
|
||||
throw runtime_error("Impossible d'initialiser SDL2.\n");
|
||||
}
|
||||
cerr << "SDL initialised successfully.\n";
|
||||
|
||||
if(IMG_Init(IMG_INIT_PNG) == 0)
|
||||
{
|
||||
cerr << "Erreur IMG_Init : " << IMG_GetError() << '\n';
|
||||
throw runtime_error("Impossible d'initialiser IMG.\n");
|
||||
}
|
||||
cerr << "IMG initialised successfully.\n";
|
||||
|
||||
m_window = SDL_CreateWindow(WINDOW_TITLE, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
|
||||
if(m_window == NULL)
|
||||
{
|
||||
cerr << "Erreur SDL_CreateWindow : " << SDL_GetError() << '\n';
|
||||
throw runtime_error("Impossible d'initialiser la fenêtre.\n");
|
||||
}
|
||||
cerr << "Window created successfully.\n";
|
||||
|
||||
renderer = SDL_CreateRenderer(m_window, -1, 0);
|
||||
if(renderer == NULL)
|
||||
{
|
||||
cerr << "Erreur SDL_CreateRenderer : " << SDL_GetError() << '\n';
|
||||
throw runtime_error("Impossible d'initialiser le renderer.\n");
|
||||
}
|
||||
cerr << "Renderer created successfully\n\n";
|
||||
|
||||
tileMap.LoadTileset("ressources/tileset/tileset.png");
|
||||
|
||||
tileMap.LoadTileMap("ressources/maps/dungeon entry.json");
|
||||
|
||||
TransformComponent *p_transform = &player.addComponent<TransformComponent>(tileMap.getPlayerInitPos(), Vector2D<int>(32, 32), 2, 3);
|
||||
player.addComponent<SpriteComponent>("ressources/heroes/knight/idle-sheet.png");
|
||||
player.addComponent<HitboxComponent>(Vector2D<float>(0.81f, 0.41f), Vector2D<float>(0.5f, 1.0f));
|
||||
InventoryComponent *p_inventory = &player.addComponent<InventoryComponent>();
|
||||
|
||||
player.addComponent<AnimationSystem>();
|
||||
player.addComponent<PlayerSystem>();
|
||||
|
||||
camera.camR.x = static_cast<int>(p_transform->position.x - static_cast<float>(camera.camR.w / 2 - p_transform->dimension.x * p_transform->scale / 2));
|
||||
camera.camR.y = static_cast<int>(p_transform->position.y - static_cast<float>(camera.camR.h / 2 - p_transform->dimension.y * p_transform->scale / 2));
|
||||
|
||||
Item &item(p_inventory->addItem());
|
||||
|
||||
item.addProperty<NameProperty>("Prout");
|
||||
|
||||
m_isRunning = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Game::HandleEvents()
|
||||
{
|
||||
SDL_Event event;
|
||||
while(SDL_PollEvent(&event))
|
||||
{
|
||||
if(event.type == SDL_QUIT)
|
||||
m_isRunning = false;
|
||||
|
||||
else if(event.type == SDL_KEYDOWN && event.key.repeat == 0)
|
||||
events.keys[event.key.keysym.scancode] = true;
|
||||
|
||||
else if(event.type == SDL_KEYUP)
|
||||
events.keys[event.key.keysym.scancode] = false;
|
||||
}
|
||||
}
|
||||
|
||||
void Game::Update()
|
||||
{
|
||||
entityManager.refresh();
|
||||
|
||||
entityManager.update();
|
||||
|
||||
camera.update();
|
||||
}
|
||||
|
||||
void Game::Render()
|
||||
{
|
||||
// Dessin sur une texture intermediaire
|
||||
SDL_SetRenderTarget(renderer, textureRenderer);
|
||||
|
||||
SDL_SetRenderDrawColor(renderer, 20, 20, 18, 255);
|
||||
SDL_RenderClear(renderer);
|
||||
|
||||
tileMap.draw(1);
|
||||
tileMap.draw(2);
|
||||
|
||||
entityManager.draw();
|
||||
|
||||
tileMap.draw(3);
|
||||
|
||||
// Affichage sur la fenêtre avec la caméra
|
||||
SDL_SetRenderTarget(renderer, NULL);
|
||||
|
||||
SDL_RenderCopy(renderer, textureRenderer, &camera.camR, NULL);
|
||||
|
||||
SDL_RenderPresent(renderer);
|
||||
}
|
||||
|
||||
bool Game::Running()
|
||||
{
|
||||
return m_isRunning;
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Declaration de la classe Game, gère toutes les données du jeu //
|
||||
// et l'execution de chaque morceau de la boucle pricipale. //
|
||||
// //
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef GAME_HPP
|
||||
#define GAME_HPP
|
||||
|
||||
#include <SDL2/SDL.h> // SDL_Renderer, SDL_texture, SDL_Window
|
||||
|
||||
#define WINDOW_WIDTH 640
|
||||
#define WINDOW_HEIGHT 640
|
||||
|
||||
#define WINDOW_TITLE "2D Engine !"
|
||||
|
||||
class Events;
|
||||
class TextureManager;
|
||||
class Camera;
|
||||
class TileMap;
|
||||
class MapManager;
|
||||
class Manager;
|
||||
|
||||
class Game {
|
||||
public:
|
||||
Game() = default;
|
||||
~Game();
|
||||
|
||||
bool Init();
|
||||
|
||||
bool Running();
|
||||
|
||||
void HandleEvents();
|
||||
void Update();
|
||||
void Render();
|
||||
|
||||
static SDL_Renderer *renderer;
|
||||
static SDL_Texture *textureRenderer;
|
||||
static Events events;
|
||||
static TextureManager textureManager;
|
||||
static Camera camera;
|
||||
static TileMap tileMap;
|
||||
static MapManager mapManager;
|
||||
static Manager entityManager;
|
||||
|
||||
private:
|
||||
SDL_Window *m_window;
|
||||
bool m_isRunning {false};
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,127 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
//////////////////////////////////////
|
||||
// //
|
||||
// Definition de l'Item Property. //
|
||||
// //
|
||||
//////////////////////////////////////
|
||||
|
||||
#ifndef ITEMPROPERTY_HPP
|
||||
#define ITEMPROPERTY_HPP
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <bitset>
|
||||
#include <stdexcept>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
using std::bitset, std::array, std::vector, std::unique_ptr, std::make_unique, std::move, std::forward, std::runtime_error, std::sort;
|
||||
|
||||
class Property;
|
||||
class Item;
|
||||
|
||||
using PropertyID = std::size_t;
|
||||
|
||||
inline PropertyID getPropertyTypeID()
|
||||
{
|
||||
static PropertyID lastID = 0;
|
||||
return lastID++;
|
||||
}
|
||||
|
||||
template<typename T> inline PropertyID getPropertyTypeID() noexcept
|
||||
{
|
||||
static PropertyID typeID = getPropertyTypeID();
|
||||
return typeID;
|
||||
}
|
||||
|
||||
constexpr std::size_t maxProperties = 32;
|
||||
|
||||
using PropertyBitSet = bitset<maxProperties>;
|
||||
using PropertyArray = array<Property*, maxProperties>;
|
||||
|
||||
class Property {
|
||||
public:
|
||||
Item *item;
|
||||
|
||||
virtual void init() {}
|
||||
|
||||
virtual ~Property() {}
|
||||
};
|
||||
|
||||
class Item {
|
||||
public:
|
||||
template <typename T, typename... TArgs>
|
||||
T& addProperty(TArgs&&... args)
|
||||
{
|
||||
if(hasProperty<T>())
|
||||
{
|
||||
throw runtime_error("Vous ne pouvez pas mettre deux fois la même propriétée dans le même item.\n");
|
||||
}
|
||||
|
||||
// Creation d'un pointeur du type donné avec les arguments necessaires
|
||||
T *p(new T(forward<TArgs>(args)...));
|
||||
// On donne au composant une reference de l'entitée
|
||||
p->item = this;
|
||||
|
||||
// Création d'un unique_ptr et ajout du composant dans le vecteur et array associé
|
||||
unique_ptr<Property> uPtr {p};
|
||||
properties.emplace_back(move(uPtr));
|
||||
|
||||
propertyArray[getPropertyTypeID<T>()] = p;
|
||||
propertyBitSet[getPropertyTypeID<T>()] = true;
|
||||
|
||||
// Initialisation du composant
|
||||
p->init();
|
||||
|
||||
return *p;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool hasProperty() const {
|
||||
// Vérifier d'abord si un type exact est présent
|
||||
PropertyID id = getPropertyTypeID<T>();
|
||||
if (propertyBitSet[id]) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Si non, vérifier dynamiquement tous les composants pour un type dérivé
|
||||
for (const auto& p : properties) {
|
||||
if (dynamic_cast<T*>(p.get())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T& getProperty() const {
|
||||
// Vérification rapide via le BitSet et l'accès direct au composant via l'array
|
||||
PropertyID id = getPropertyTypeID<T>();
|
||||
if (propertyBitSet[id]) {
|
||||
return *static_cast<T*>(propertyArray[id]);
|
||||
}
|
||||
|
||||
// Vérification polymorphique avec dynamic_cast
|
||||
for (const auto& p : properties) {
|
||||
if (T* t = dynamic_cast<T*>(p.get())) {
|
||||
return *t;
|
||||
}
|
||||
}
|
||||
throw runtime_error("Propriété non trouvé.\n");
|
||||
}
|
||||
|
||||
private:
|
||||
bool active {true};
|
||||
|
||||
vector<unique_ptr<Property>> properties;
|
||||
|
||||
PropertyArray propertyArray;
|
||||
PropertyBitSet propertyBitSet;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,34 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
///////////////////////////////////////////////////////
|
||||
// //
|
||||
// Propriété de nom, sert a l'item d'avoir un nom. //
|
||||
// //
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
#ifndef NAME_HPP
|
||||
#define NAME_HPP
|
||||
|
||||
#include <string>
|
||||
#include "IP.hpp"
|
||||
|
||||
using std::string;
|
||||
|
||||
class NameProperty : public Property {
|
||||
public:
|
||||
NameProperty(const string &name) : m_name(name)
|
||||
{}
|
||||
|
||||
string &getName()
|
||||
{
|
||||
return m_name;
|
||||
}
|
||||
|
||||
private:
|
||||
string m_name;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,19 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Programme de la caméra, sert a avoir un rectangle et de pouvoir //
|
||||
// la gérer correctement en fonction de la taille de la map... etc... //
|
||||
// //
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef PROPERTIES_HPP
|
||||
#define PROPERTIES_HPP
|
||||
|
||||
#include "IP.hpp"
|
||||
#include "NameProperty.hpp"
|
||||
|
||||
#endif
|
|
@ -0,0 +1,71 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
///////////////////////////////////////////
|
||||
// //
|
||||
// Definition de la classe MapManager. //
|
||||
// //
|
||||
///////////////////////////////////////////
|
||||
|
||||
#include <fstream> // ifstream
|
||||
#include <iostream> // cerr
|
||||
#include <stdexcept> // exception, runtime_error
|
||||
#include "MapManager.hpp" // MapManager definition
|
||||
|
||||
using std::ifstream, std::cerr, std::runtime_error, std::exception, std::make_unique;
|
||||
|
||||
json *MapManager::LoadMap(const string &path)
|
||||
{
|
||||
// Si la map est déja chargée, on la renvoie
|
||||
auto it = m_maps.find(path);
|
||||
|
||||
if (it != m_maps.end())
|
||||
return it->second.get();
|
||||
|
||||
// Sinon on charge le fichier
|
||||
ifstream mapFile {path};
|
||||
if(!mapFile)
|
||||
{
|
||||
cerr << "Erreur : Impossible d'ouvrir le fichier \"" << path << "\".\n";
|
||||
throw runtime_error("Impossible d'ouvrir le fichier.\n");
|
||||
}
|
||||
|
||||
// Puis on créé notre mapData et on la charge depuis le fichier
|
||||
json mapData;
|
||||
|
||||
try
|
||||
{
|
||||
mapData = json::parse(mapFile);
|
||||
}
|
||||
catch (exception const &e)
|
||||
{
|
||||
cerr << "Erreur : " << e.what() << std::endl;
|
||||
mapFile.close();
|
||||
throw runtime_error("Impossible de lire correctement le fichier.\n");
|
||||
}
|
||||
|
||||
mapFile.close();
|
||||
|
||||
// On ajoute la mapData dans la memoire
|
||||
m_maps.emplace(path, make_unique<json>(mapData));
|
||||
|
||||
// Puis on la renvoie
|
||||
it = m_maps.find(path);
|
||||
|
||||
if(it != m_maps.end())
|
||||
return it->second.get();
|
||||
|
||||
throw runtime_error("Impossible de trouver la map dans l'unordered_map.\n");
|
||||
}
|
||||
|
||||
void MapManager::Erase(const string &path)
|
||||
{
|
||||
m_maps.erase(path);
|
||||
}
|
||||
|
||||
void MapManager::Clear()
|
||||
{
|
||||
m_maps.clear();
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Declaration de la classe MapManager, elle sert a charger des //
|
||||
// map dans la memoire pour eviter de les recharger tout le temps. //
|
||||
// //
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef MAPMANAGER_HPP
|
||||
#define MAPMANAGER_HPP
|
||||
|
||||
#include <memory> // unique_ptr
|
||||
#include <string> // string
|
||||
#include <unordered_map> // unordered_map
|
||||
#include "nlohmann/json.hpp" // json::
|
||||
|
||||
using std::string, std::unordered_map, std::unique_ptr;
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
class MapManager {
|
||||
public:
|
||||
json *LoadMap(const string &); // Renvoie une map depuis l'unordered_map ou charge depuis le disque puis renvoie la map
|
||||
|
||||
void Erase(const string &); // Efface dans l'unordered_map la map correspondante
|
||||
void Clear(); // Clear tout l'unordered_map
|
||||
|
||||
private:
|
||||
using json_ptr = unique_ptr<json>;
|
||||
unordered_map<string, json_ptr> m_maps;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,63 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
///////////////////////////////////////////////
|
||||
// //
|
||||
// Definition de la classe TextureManager. //
|
||||
// //
|
||||
///////////////////////////////////////////////
|
||||
|
||||
#include <iostream>
|
||||
#include <SDL2/SDL_image.h>
|
||||
#include <stdexcept>
|
||||
#include "Game.hpp"
|
||||
#include "TextureManager.hpp"
|
||||
|
||||
using std::string, std::cerr, std::runtime_error;
|
||||
|
||||
SDL_Texture *TextureManager::LoadTexture(const string &path)
|
||||
{
|
||||
auto it = m_textures.find(path);
|
||||
|
||||
if (it != m_textures.end())
|
||||
return it->second.get();
|
||||
|
||||
SDL_Surface *tmpSurface = IMG_Load(path.c_str());
|
||||
if (!tmpSurface) {
|
||||
cerr << "Erreur IMG_Load : " << IMG_GetError() << '\n';
|
||||
throw runtime_error("Impossible de charger la texture depuis la memoire.\n");
|
||||
}
|
||||
|
||||
SDL_Texture *texture = SDL_CreateTextureFromSurface(Game::renderer, tmpSurface);
|
||||
SDL_FreeSurface(tmpSurface);
|
||||
|
||||
if (!texture) {
|
||||
cerr << "Erreur SDL_CreateTextureFromSurface : " << SDL_GetError() << '\n';
|
||||
throw runtime_error("Impossible de convertir la surface en texture.\n");
|
||||
}
|
||||
|
||||
m_textures.emplace(path, texture_ptr(texture, &SDL_DestroyTexture));
|
||||
|
||||
it = m_textures.find(path);
|
||||
|
||||
if(it != m_textures.end())
|
||||
return it->second.get();
|
||||
|
||||
|
||||
throw runtime_error("Impossible de trouver la texture dans l'unordered_map.\n");
|
||||
}
|
||||
|
||||
void TextureManager::Draw(SDL_Texture *texture, SDL_Rect srcR, SDL_Rect dstR, bool flip)
|
||||
{
|
||||
SDL_RendererFlip flipRender {SDL_FLIP_NONE};
|
||||
|
||||
if(flip) flipRender = SDL_FLIP_HORIZONTAL;
|
||||
|
||||
if(SDL_RenderCopyEx(Game::renderer, texture, &srcR, &dstR, 0, NULL, flipRender) != 0)
|
||||
{
|
||||
cerr << "Erreur SDL_RenderCopy : " << SDL_GetError() << '\n';
|
||||
throw runtime_error("Impossible de dessiner la texture.\n");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Declaration de la classe TextureManager, elle sert a charger des //
|
||||
// texture dans la memoire pour eviter de les recharger tout le temps. //
|
||||
// //
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef TEXTURE_MANAGER_HPP
|
||||
#define TEXTURE_MANAGER_HPP
|
||||
|
||||
#include <memory>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
using std::string, std::unique_ptr, std::unordered_map;
|
||||
|
||||
class TextureManager {
|
||||
public:
|
||||
SDL_Texture *LoadTexture(const string &); // Renvoie une texture depuis l'unordered_map ou charge depuis le disque puis renvoie la texture
|
||||
void Draw(SDL_Texture *, SDL_Rect, SDL_Rect, bool); // Dessine la texture passé sur l'écran
|
||||
|
||||
void Erase(const string &); // Efface dans l'unordered_map la texture correspondante
|
||||
void Clear(); // Clear tout l'unordered_map
|
||||
|
||||
private:
|
||||
using texture_ptr = unique_ptr<SDL_Texture, decltype(&SDL_DestroyTexture)>;
|
||||
|
||||
unordered_map<string, texture_ptr> m_textures;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,241 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////////////////
|
||||
// //
|
||||
// Definition de la classe TileMap. //
|
||||
// //
|
||||
////////////////////////////////////////
|
||||
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include "Camera.hpp"
|
||||
#include "Game.hpp"
|
||||
#include "MapManager.hpp"
|
||||
#include "nlohmann/json.hpp"
|
||||
#include "TextureManager.hpp"
|
||||
#include "TileMap.hpp"
|
||||
#include "Vector2D.hpp"
|
||||
#include "ECS/Components.hpp"
|
||||
|
||||
using std::string, std::exception, std::vector, std::cerr, std::runtime_error;
|
||||
using json = nlohmann::json;
|
||||
|
||||
void TileMap::LoadTileMap(const string &path)
|
||||
{
|
||||
json *mapData;
|
||||
|
||||
mapData = Game::mapManager.LoadMap(path);
|
||||
|
||||
tileMapWidth = mapData->at("TileMapWidth").get<int>();
|
||||
tileMapHeight = mapData->at("TileMapHeight").get<int>();
|
||||
|
||||
worldWidth = tileMapWidth * TILE_SIZE * TILEMAP_SCALE;
|
||||
worldHeight = tileMapHeight * TILE_SIZE * TILEMAP_SCALE;
|
||||
|
||||
m_tilesLayer1.clear();
|
||||
m_tilesLayer2.clear();
|
||||
m_tilesLayer3.clear();
|
||||
|
||||
hitboxes.clear();
|
||||
|
||||
m_tilesLayer1.resize(tileMapWidth * tileMapHeight);
|
||||
m_tilesLayer2.resize(tileMapWidth * tileMapHeight);
|
||||
m_tilesLayer3.resize(tileMapWidth * tileMapHeight);
|
||||
|
||||
hitboxes.resize(tileMapWidth * tileMapHeight);
|
||||
|
||||
string layers[] {"Layer 1","Layer 2","Layer 3", "Hitboxes"};
|
||||
|
||||
for(const string &layer : layers)
|
||||
{
|
||||
for(int y {0}; y < tileMapHeight; y++)
|
||||
{
|
||||
for(int x {0}; x < tileMapWidth; x++)
|
||||
{
|
||||
TileID tileID {mapData->at(layer).at(y).at(x)};
|
||||
|
||||
if(layer == "Layer 1")
|
||||
{
|
||||
m_tilesLayer1[x + y * tileMapWidth] = tileID;
|
||||
}
|
||||
else if(layer == "Layer 2")
|
||||
{
|
||||
m_tilesLayer2[x + y * tileMapWidth] = tileID;
|
||||
}
|
||||
else if(layer == "Layer 3")
|
||||
{
|
||||
m_tilesLayer3[x + y * tileMapWidth] = tileID;
|
||||
}
|
||||
else if(layer == "Hitboxes")
|
||||
{
|
||||
hitboxes[x + y * tileMapWidth] = tileID;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(mapData->contains("PlayerInitPos"))
|
||||
{
|
||||
m_playerInitPos.x = mapData->at("PlayerInitPos").at("x").get<float>() * TILE_SIZE * TILEMAP_SCALE;
|
||||
m_playerInitPos.y = mapData->at("PlayerInitPos").at("y").get<float>() * TILE_SIZE * TILEMAP_SCALE;
|
||||
}
|
||||
|
||||
m_nextMaps.clear();
|
||||
|
||||
for(auto it {mapData->at("NextMaps").begin()}; it < mapData->at("NextMaps").end(); it++)
|
||||
{
|
||||
NextMap nextMap;
|
||||
nextMap.path = it->at("Path").get<string>();
|
||||
nextMap.playerInitPos.x = it->at("PlayerInitPos").at("x").get<float>();
|
||||
nextMap.playerInitPos.y = it->at("PlayerInitPos").at("y").get<float>();
|
||||
|
||||
m_nextMaps.emplace(it->at("Number").get<int>(), nextMap);
|
||||
}
|
||||
|
||||
std::size_t numberOfEntity {Game::entityManager.getNumberOfEntity()};
|
||||
|
||||
for(std::size_t i {1}; i < numberOfEntity; i++) Game::entityManager.erase(i);
|
||||
|
||||
if(mapData->contains("Entities"))
|
||||
{
|
||||
for(auto it {mapData->at("Entities").begin()}; it < mapData->at("Entities").end(); it++)
|
||||
{
|
||||
Entity &e(Game::entityManager.addEntity());
|
||||
|
||||
for(auto component {it->begin()}; component < it->end(); component++)
|
||||
{
|
||||
if(component->at("Type").get<string>() == "TransformComponent")
|
||||
{
|
||||
Vector2D<float> pos {Vector2D<float>(component->at("Position").at("x").get<float>(), component->at("Position").at("y").get<float>())};
|
||||
Vector2D<float> dim {Vector2D<float>(component->at("Dimension").at("x").get<float>(), component->at("Dimension").at("y").get<float>())};
|
||||
|
||||
pos = pos * TILE_SIZE * TILEMAP_SCALE;
|
||||
|
||||
e.addComponent<TransformComponent>(pos, dim, component->at("Scale").get<int>(), component->at("Speed").get<int>());
|
||||
}
|
||||
else if(component->at("Type").get<string>() == "SpriteComponent")
|
||||
{
|
||||
e.addComponent<SpriteComponent>(component->at("Path").get<string>());
|
||||
}
|
||||
else if(component->at("Type").get<string>() == "AnimationSystem")
|
||||
{
|
||||
int nbFrames {component->at("NbFrames").get<int>()};
|
||||
int currentFrame {component->at("CurrentFrame").get<int>()};
|
||||
int frameDelay {component->at("FrameDelay").get<int>()};
|
||||
bool playAnimation {component->at("PlayAnimation").get<bool>()};
|
||||
|
||||
e.addComponent<AnimationSystem>(nbFrames, currentFrame, frameDelay, playAnimation);
|
||||
}
|
||||
else if(component->at("Type").get<string>() == "HitboxComponent")
|
||||
{
|
||||
Vector2D<float> sc {Vector2D<float>(component->at("Scale").at("x").get<float>(), component->at("Scale").at("y").get<float>())};
|
||||
Vector2D<float> pos {Vector2D<float>(component->at("Position").at("x").get<float>(), component->at("Position").at("y").get<float>())};
|
||||
|
||||
e.addComponent<HitboxComponent>(sc, pos);
|
||||
}
|
||||
else if(component->at("Type").get<string>() == "Lever")
|
||||
{
|
||||
e.addComponent<Lever>(component->at("Channel").get<int>());
|
||||
}
|
||||
else if(component->at("Type").get<string>() == "Lock")
|
||||
{
|
||||
e.addComponent<Lock>(component->at("Channel").get<int>());
|
||||
}
|
||||
else if(component->at("Type").get<string>() == "Door")
|
||||
{
|
||||
unordered_map<int, bool> states {};
|
||||
|
||||
for(auto state {component->at("States").begin()}; state < component->at("States").end(); state++)
|
||||
states[state->at("Channel").get<int>()] = state->at("State").get<bool>();
|
||||
|
||||
e.addComponent<Door>(states);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Game::textureRenderer = SDL_CreateTexture(Game::renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, worldWidth, worldHeight);
|
||||
if(Game::textureRenderer == NULL)
|
||||
{
|
||||
cerr << "Erreur SDL_CreateTexture : " << SDL_GetError() << '\n';
|
||||
throw runtime_error("Impossible de creer la texture de rendu.\n");
|
||||
}
|
||||
}
|
||||
|
||||
void TileMap::LoadNextMap(int nextMapNumber)
|
||||
{
|
||||
NextMap nextMap = m_nextMaps.at(nextMapNumber);
|
||||
|
||||
LoadTileMap(nextMap.path);
|
||||
|
||||
m_playerInitPos = nextMap.playerInitPos * TILE_SIZE * TILEMAP_SCALE;
|
||||
}
|
||||
|
||||
void TileMap::LoadTileset(const string &path)
|
||||
{
|
||||
m_tileset = Game::textureManager.LoadTexture(path);
|
||||
|
||||
SDL_QueryTexture(m_tileset, nullptr, nullptr, &m_tilesetWidth, &m_tilesetHeight);
|
||||
|
||||
m_tilesetWidth /= TILE_SIZE;
|
||||
m_tilesetHeight /= TILE_SIZE;
|
||||
}
|
||||
|
||||
void TileMap::draw(int layer)
|
||||
{
|
||||
if(layer == 1)
|
||||
{
|
||||
m_draw(m_tilesLayer1);
|
||||
}
|
||||
else if(layer == 2)
|
||||
{
|
||||
m_draw(m_tilesLayer2);
|
||||
}
|
||||
else if(layer == 3)
|
||||
{
|
||||
m_draw(m_tilesLayer3);
|
||||
}
|
||||
else
|
||||
{
|
||||
cerr << "Erreur : La tileMap " << layer << " n'est pas prise en charge.\n";
|
||||
throw runtime_error("Impossible de dessiner la tileMap.\n");
|
||||
}
|
||||
}
|
||||
|
||||
void TileMap::m_draw(const vector<TileID> &tiles)
|
||||
{
|
||||
SDL_Rect visibleTilesR;
|
||||
visibleTilesR.x = Game::camera.camR.x / (TILE_SIZE * TILEMAP_SCALE);
|
||||
visibleTilesR.y = Game::camera.camR.y / (TILE_SIZE * TILEMAP_SCALE);
|
||||
visibleTilesR.w = (Game::camera.camR.w + Game::camera.camR.x) / (TILE_SIZE * TILEMAP_SCALE);
|
||||
visibleTilesR.h = (Game::camera.camR.h + Game::camera.camR.y) / (TILE_SIZE * TILEMAP_SCALE);
|
||||
|
||||
for(int tileY {visibleTilesR.y}; tileY <= visibleTilesR.h; tileY++)
|
||||
{
|
||||
for(int tileX {visibleTilesR.x}; tileX <= visibleTilesR.w; tileX++)
|
||||
{
|
||||
const TileID tile = tiles[tileX + tileY * tileMapWidth] - 1;
|
||||
|
||||
if(tile)
|
||||
{
|
||||
SDL_Rect srcR {(tile % m_tilesetWidth) * TILE_SIZE, (tile / m_tilesetWidth) * TILE_SIZE, TILE_SIZE, TILE_SIZE};
|
||||
SDL_Rect dstR {tileX * TILE_SIZE * TILEMAP_SCALE, tileY * TILE_SIZE * TILEMAP_SCALE, TILE_SIZE * TILEMAP_SCALE, TILE_SIZE * TILEMAP_SCALE};
|
||||
|
||||
Game::textureManager.Draw(m_tileset, srcR, dstR, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vector2D<float> TileMap::getPlayerInitPos()
|
||||
{
|
||||
return m_playerInitPos;
|
||||
}
|
||||
|
||||
TileMap::~TileMap()
|
||||
{
|
||||
if(Game::textureRenderer != NULL) SDL_DestroyTexture(Game::textureRenderer);
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Declaration de la classe TileMap, elle sert a charger tout ce //
|
||||
// qui est en rapport avec une map. (tileMap, entités, hitbox, etc...) //
|
||||
// //
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef MAP_HPP
|
||||
#define MAP_HPP
|
||||
|
||||
#include <SDL2/SDL.h>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#include "Vector2D.hpp"
|
||||
|
||||
#define TILE_SIZE 16
|
||||
#define TILEMAP_SCALE 2
|
||||
|
||||
using std::string, std::vector, std::unordered_map;
|
||||
|
||||
using TileID = int;
|
||||
|
||||
struct NextMap {
|
||||
string path;
|
||||
Vector2D<float> playerInitPos;
|
||||
};
|
||||
|
||||
class TileMap {
|
||||
public:
|
||||
TileMap() = default;
|
||||
~TileMap();
|
||||
|
||||
void LoadTileMap(const string &);
|
||||
void LoadNextMap(int);
|
||||
void LoadTileset(const string &);
|
||||
void draw(int);
|
||||
|
||||
Vector2D<float> getPlayerInitPos();
|
||||
|
||||
int tileMapWidth, tileMapHeight;
|
||||
int worldWidth, worldHeight;
|
||||
|
||||
vector<int> hitboxes;
|
||||
|
||||
private:
|
||||
void m_draw(const vector<TileID> &);
|
||||
|
||||
vector<TileID> m_tilesLayer1;
|
||||
vector<TileID> m_tilesLayer2;
|
||||
vector<TileID> m_tilesLayer3;
|
||||
|
||||
int m_tilesetWidth, m_tilesetHeight;
|
||||
SDL_Texture *m_tileset;
|
||||
|
||||
Vector2D<float> m_playerInitPos;
|
||||
|
||||
unordered_map<int, NextMap> m_nextMaps;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,51 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// Vector2D et une classe template qui est similaire a SDL_Point. //
|
||||
// //
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef VECTOR2D_HPP
|
||||
#define VECTOR2D_HPP
|
||||
|
||||
#include <iosfwd>
|
||||
|
||||
template<typename T>
|
||||
struct Vector2D {
|
||||
T x;
|
||||
T y;
|
||||
|
||||
Vector2D();
|
||||
Vector2D(T, T);
|
||||
template <typename U>
|
||||
Vector2D(const Vector2D<U>&);
|
||||
|
||||
Vector2D<T> &operator+=(const Vector2D<T> &) noexcept;
|
||||
Vector2D<T> &operator-=(const Vector2D<T> &) noexcept;
|
||||
Vector2D<T> &operator*=(const Vector2D<T> &) noexcept;
|
||||
Vector2D<T> &operator/=(const Vector2D<T> &) noexcept;
|
||||
|
||||
Vector2D<T> operator*(const T &) noexcept;
|
||||
Vector2D<T> operator/(const T &) noexcept;
|
||||
Vector2D<T> &zero() noexcept;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> operator+(const Vector2D<T> &, const Vector2D<T> &);
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> operator-(const Vector2D<T> &, const Vector2D<T> &);
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> operator*(const Vector2D<T> &, const Vector2D<T> &);
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> operator/(const Vector2D<T> &, const Vector2D<T> &);
|
||||
|
||||
#include "Vector2D.tpp"
|
||||
|
||||
#endif
|
|
@ -0,0 +1,103 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
/////////////////////////////////////////
|
||||
// //
|
||||
// Definition de la classe Vector2D. //
|
||||
// //
|
||||
/////////////////////////////////////////
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T>::Vector2D() : x(static_cast<T>(0)), y(static_cast<T>(0))
|
||||
{}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T>::Vector2D(T xInit, T yInit) : x(xInit), y(yInit)
|
||||
{}
|
||||
|
||||
template <typename T> template<typename U>
|
||||
Vector2D<T>::Vector2D(const Vector2D<U>& vec) : x(static_cast<T>(vec.x)), y(static_cast<T>(vec.y))
|
||||
{}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> &Vector2D<T>::operator+=(const Vector2D<T> &vec) noexcept
|
||||
{
|
||||
x += vec.x;
|
||||
y += vec.y;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> &Vector2D<T>::operator-=(const Vector2D<T> &vec) noexcept
|
||||
{
|
||||
x -= vec.x;
|
||||
y -= vec.y;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> &Vector2D<T>::operator*=(const Vector2D<T> &vec) noexcept
|
||||
{
|
||||
x *= vec.x;
|
||||
y *= vec.y;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> &Vector2D<T>::operator/=(const Vector2D<T> &vec) noexcept
|
||||
{
|
||||
x /= vec.x;
|
||||
y /= vec.y;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> Vector2D<T>::operator*(const T &i) noexcept
|
||||
{
|
||||
return Vector2D<T>(x * i, y * i);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> Vector2D<T>::operator/(const T &i) noexcept
|
||||
{
|
||||
return Vector2D<T>(x / i, y / i);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> &Vector2D<T>::zero() noexcept
|
||||
{
|
||||
x = static_cast<T>(0);
|
||||
y = static_cast<T>(0);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> operator+(const Vector2D<T> &v1, const Vector2D<T> &v2)
|
||||
{
|
||||
return Vector2D<T>(v1.x + v2.x, v1.y + v2.y);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> operator-(const Vector2D<T> &v1, const Vector2D<T> &v2)
|
||||
{
|
||||
return Vector2D<T>(v1.x - v2.x, v1.y - v2.y);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> operator*(const Vector2D<T> &v1, const Vector2D<T> &v2)
|
||||
{
|
||||
return Vector2D<T>(v1.x * v2.x, v1.y * v2.y);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Vector2D<T> operator/(const Vector2D<T> &v1, const Vector2D<T> &v2)
|
||||
{
|
||||
return Vector2D<T>(v1.x / v2.x, v1.y / v2.y);
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/********************\
|
||||
| Copyright 2024, |
|
||||
| Ulysse Cura |
|
||||
\********************/
|
||||
|
||||
////////////////////////////////////////
|
||||
// //
|
||||
// Main, gère la boucle principale. //
|
||||
// //
|
||||
////////////////////////////////////////
|
||||
|
||||
#include <iostream> // cerr
|
||||
#include <stdexcept> // exception
|
||||
#include "Game.hpp" // Game definition
|
||||
|
||||
using std::cerr, std::exception;
|
||||
|
||||
Game *game {nullptr};
|
||||
|
||||
int main()
|
||||
{
|
||||
// Pour limiter les FPS
|
||||
const int FPS {60};
|
||||
const float FRAME_DELAY {1000.0f / FPS};
|
||||
|
||||
Uint32 frameStart;
|
||||
int frameTime;
|
||||
|
||||
game = new Game();
|
||||
|
||||
try
|
||||
{
|
||||
game->Init();
|
||||
}
|
||||
catch(exception const &e)
|
||||
{
|
||||
cerr << e.what();
|
||||
delete game;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
while(game->Running())
|
||||
{
|
||||
frameStart = SDL_GetTicks();
|
||||
|
||||
game->HandleEvents();
|
||||
try
|
||||
{
|
||||
game->Update();
|
||||
}
|
||||
catch(exception const &e)
|
||||
{
|
||||
cerr << e.what();
|
||||
delete game;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
game->Render();
|
||||
|
||||
frameTime = SDL_GetTicks() - frameStart;
|
||||
|
||||
if(static_cast<float>(frameTime) < FRAME_DELAY)
|
||||
{
|
||||
SDL_Delay(static_cast<Uint32>(FRAME_DELAY - static_cast<float>(frameTime)));
|
||||
}
|
||||
#ifdef DEBUG_MODE
|
||||
else
|
||||
{
|
||||
cerr << 1000 / frameTime << " FPS\n";
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
delete game;
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<map version="1.10" tiledversion="1.11.0" orientation="orthogonal" renderorder="right-down" width="22" height="21" tilewidth="16" tileheight="16" infinite="0" nextlayerid="4" nextobjectid="1">
|
||||
<editorsettings>
|
||||
<export target="../../maps/dungeon entry prout.json" format="json"/>
|
||||
</editorsettings>
|
||||
<tileset firstgid="1" source="../../tileset/tileset.tsx"/>
|
||||
<layer id="1" name="Calque de Tuiles 1" width="22" height="21">
|
||||
<data encoding="csv">
|
||||
297,306,306,306,306,297,306,297,297,306,297,306,297,408,306,306,278,297,278,306,278,297,
|
||||
278,278,278,297,692,306,306,306,306,297,278,297,297,417,306,278,297,306,278,630,278,297,
|
||||
306,297,278,278,306,278,278,297,297,278,278,306,278,297,297,278,297,306,297,306,306,306,
|
||||
278,278,278,278,306,297,297,306,297,297,297,278,297,306,297,297,306,297,306,306,278,297,
|
||||
306,297,306,278,297,297,297,306,278,306,278,297,306,297,278,306,278,297,297,306,297,297,
|
||||
297,278,274,282,306,297,297,297,306,297,297,306,306,297,297,278,278,297,274,282,297,297,
|
||||
306,278,273,274,278,278,306,302,310,309,1,1,310,309,299,306,278,297,274,274,278,306,
|
||||
297,278,274,282,297,297,302,311,319,318,322,323,319,318,308,310,299,278,283,273,306,278,
|
||||
297,297,274,274,302,310,311,320,328,327,331,332,328,327,317,319,308,299,273,273,297,278,
|
||||
306,297,283,273,285,319,320,329,306,306,306,306,306,297,326,328,317,280,282,283,297,306,
|
||||
278,278,283,273,285,329,324,278,297,297,306,306,306,297,297,315,326,280,283,274,306,306,
|
||||
306,278,274,274,285,297,306,306,297,306,315,297,278,306,306,278,297,280,274,282,278,278,
|
||||
278,278,274,273,285,278,297,306,306,297,306,306,278,306,297,306,306,280,274,273,278,278,
|
||||
278,599,283,273,275,306,297,297,278,306,278,306,278,297,333,306,278,272,282,283,297,297,
|
||||
607,608,609,274,283,1,278,306,324,278,297,364,365,366,278,297,278,282,274,283,278,306,
|
||||
306,297,273,438,439,274,274,306,306,278,306,373,374,375,272,273,283,659,660,274,297,278,
|
||||
278,297,306,278,278,306,278,306,306,364,365,365,366,278,306,278,306,412,306,278,278,278,
|
||||
306,278,278,297,297,297,297,278,278,373,374,374,375,297,306,306,278,297,306,306,306,306,
|
||||
278,278,306,297,306,306,278,278,297,373,374,374,375,306,306,297,278,278,278,297,278,278,
|
||||
278,297,278,306,306,278,278,278,278,382,363,374,379,366,278,297,278,278,306,297,278,297,
|
||||
297,306,297,278,278,278,278,278,297,306,373,374,374,375,297,306,297,306,278,297,306,278
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="2" name="Calque de Tuiles 2" width="22" height="21">
|
||||
<data encoding="csv">
|
||||
620,621,1,682,683,684,1,640,641,1,1,406,407,646,452,453,1,619,620,621,1,1,
|
||||
629,630,1,691,409,693,1,649,650,1,1,415,416,655,461,462,1,628,629,397,398,1,
|
||||
569,570,571,1,418,419,1,658,659,1,1,424,425,664,470,471,1,421,422,406,407,408,
|
||||
578,579,580,1,427,428,1,667,668,1,1,433,434,435,479,480,1,430,431,415,416,417,
|
||||
587,588,589,1,1,437,1,1,677,1,1,442,443,1,488,489,1,439,440,424,425,426,
|
||||
596,597,598,1,1,1,1,1,1,1,1,1,1,1,1,1,1,508,509,510,511,512,
|
||||
605,606,607,1,1,1,1,1,1,1,1,1,1,1,1,1,1,457,518,519,520,521,
|
||||
614,615,616,1,1,464,1,1,1,1,1,1,1,1,1,1,1,1,407,408,529,629,
|
||||
1,1,585,558,1,1,1,1,1,515,1,1,516,1,1,1,1,1,416,417,538,1,
|
||||
1,1,1,1,1,1,638,639,1,1,1,1,1,1,533,1,1,1,425,546,547,1,
|
||||
1,644,645,646,1,532,647,648,1,1,1,1,1,1,515,1,1,1,434,1,1,1,
|
||||
1,653,654,655,1,1,534,1,1,1,1,1,1,1,1,1,1,1,586,587,588,589,
|
||||
1,662,663,664,1,1,514,1,714,1,1,1,1,1,1,525,514,1,595,596,597,598,
|
||||
670,418,419,420,1,276,1,1,1,1,1,1,697,1,1,1,640,641,642,605,606,607,
|
||||
1,427,428,429,567,275,265,266,1,516,1,1,1,1,271,264,649,650,651,614,615,616,
|
||||
1,436,493,494,1,440,460,461,264,265,265,265,264,264,400,401,402,403,404,662,662,663,
|
||||
1,1,502,503,1,1,469,470,471,1,1,1,1,1,409,410,411,404,669,1,671,672,
|
||||
1,1,511,512,570,571,572,573,480,1,1,715,1,1,418,419,420,413,678,1,680,681,
|
||||
1,1,520,521,579,580,581,582,583,1,1,1,1,1,427,428,429,422,687,1,689,690,
|
||||
1,1,529,530,588,589,590,591,592,1,1,1,1,1,1,1,1,431,1,1,1,1,
|
||||
1,1,538,1,597,598,599,600,1,1,1,1,1,1,1,1,1,440,1,1,1,1
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="3" name="Calque de Tuiles 3" width="22" height="21">
|
||||
<data encoding="csv">
|
||||
551,552,553,554,400,401,402,403,404,642,643,644,645,451,400,401,402,403,404,388,389,390,
|
||||
560,561,562,563,564,410,411,412,413,651,652,653,654,460,409,410,411,412,473,474,475,399,
|
||||
474,475,0,572,573,574,420,421,422,660,661,662,663,469,418,419,420,481,482,483,484,485,
|
||||
483,484,485,581,582,583,429,430,431,669,670,671,672,478,427,428,429,490,491,492,493,494,
|
||||
492,493,494,590,591,592,438,439,440,678,679,680,681,487,436,437,438,499,500,501,502,503,
|
||||
501,502,503,599,600,446,447,448,686,687,688,689,690,496,497,498,447,388,389,390,610,611,
|
||||
510,511,512,608,609,455,456,457,1,1,313,314,1,505,506,455,456,397,398,399,619,620,
|
||||
519,520,521,617,618,464,465,466,1,1,1,1,1,1,1,464,465,406,550,551,552,553,
|
||||
625,626,627,1,1,1,1,1,1,1,1,1,1,1,1,1,1,415,559,560,561,562,
|
||||
634,635,636,637,1,1,1,1,1,1,1,1,1,1,1,1,1,424,568,569,570,571,
|
||||
643,391,392,393,394,395,1,1,1,1,1,1,1,1,391,1,1,433,577,578,579,580,
|
||||
652,400,401,402,403,404,1,1,1,1,1,1,1,1,1,1,622,623,624,625,626,1,
|
||||
661,409,410,411,412,413,1,1,1,1,1,1,1,1,1,1,631,632,633,634,635,636,
|
||||
473,474,475,476,421,422,1,1,1,1,1,1,1,1,1,1,640,641,1,643,644,645,
|
||||
482,483,484,485,430,431,451,452,453,1,1,1,1,1,1,392,393,394,1,652,653,654,
|
||||
491,492,1,551,552,553,554,555,462,1,1,1,1,1,392,393,394,472,473,474,475,476,
|
||||
500,501,559,560,561,562,563,564,565,1,1,1,1,400,401,402,403,481,482,483,484,485,
|
||||
509,510,568,569,472,473,474,475,574,1,1,1,1,409,410,411,412,490,491,492,493,494,
|
||||
518,519,577,578,481,482,483,484,485,1,1,1,1,418,419,420,421,499,500,501,502,503,
|
||||
527,528,586,587,490,491,492,493,494,1,1,1,1,427,428,429,430,508,509,510,511,512,
|
||||
536,537,595,596,499,500,501,502,503,1,1,1,1,436,437,438,439,517,518,519,520,521
|
||||
</data>
|
||||
</layer>
|
||||
</map>
|
|
@ -0,0 +1,118 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<map version="1.10" tiledversion="1.11.0" orientation="orthogonal" renderorder="right-down" width="51" height="33" tilewidth="16" tileheight="16" infinite="0" nextlayerid="4" nextobjectid="1">
|
||||
<editorsettings>
|
||||
<export target="../../maps/map 1.tmj" format="json"/>
|
||||
</editorsettings>
|
||||
<tileset firstgid="1" source="../../tileset/tileset.tsx"/>
|
||||
<layer id="1" name="Calque de Tuiles 1" width="51" height="33">
|
||||
<data encoding="csv">
|
||||
19,31,31,31,31,31,31,31,31,31,31,31,31,20,1,1,1,1,1,19,31,31,163,165,31,31,20,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
28,3,2,2,2,2,2,2,2,2,2,2,4,29,1,1,1,1,1,28,3,2,163,165,2,4,29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
28,12,11,11,11,11,95,95,11,11,11,11,13,29,1,1,1,1,1,28,12,11,163,165,11,13,29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
28,154,155,155,155,130,131,131,132,155,155,155,156,29,1,1,1,1,1,28,154,155,167,166,155,156,29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
28,163,164,164,164,139,140,140,141,164,164,164,165,29,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,19,31,31,31,31,31,31,31,31,31,31,31,31,31,20,
|
||||
28,163,164,181,182,148,149,149,150,164,164,164,165,29,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,28,3,2,2,2,2,2,2,2,2,2,2,2,4,29,
|
||||
28,163,164,190,191,164,164,164,164,183,164,164,165,29,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,28,12,11,11,11,11,11,11,11,11,11,11,11,13,29,
|
||||
28,163,164,164,164,193,164,164,164,164,193,164,165,29,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,28,154,155,155,155,155,155,155,155,155,155,155,155,156,29,
|
||||
28,172,173,173,173,173,158,157,173,173,173,173,174,29,1,1,1,1,1,28,163,164,164,164,193,165,29,1,1,1,1,1,1,1,1,1,28,163,164,164,164,164,164,164,164,164,164,164,164,165,29,
|
||||
37,22,22,22,359,46,163,165,46,377,22,22,22,38,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,28,172,173,173,173,173,173,173,173,158,157,173,173,174,29,
|
||||
1,1,1,1,28,3,163,165,4,29,1,1,1,1,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,52,46,46,46,46,46,46,46,46,163,165,46,46,46,44,
|
||||
1,1,1,1,28,12,163,165,13,29,1,1,1,1,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,28,3,2,2,2,2,2,2,2,163,165,2,2,4,29,
|
||||
1,1,1,1,28,154,167,166,156,29,1,1,1,1,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,28,12,11,11,11,11,11,11,11,163,165,11,11,13,29,
|
||||
1,1,1,1,28,163,164,164,165,30,31,31,31,31,31,31,31,31,31,32,163,164,164,164,164,165,30,31,31,31,31,31,31,31,31,31,32,154,155,155,155,155,155,155,155,167,166,155,155,156,29,
|
||||
1,1,1,1,28,163,164,164,165,6,2,2,2,2,2,2,2,2,2,7,163,164,164,164,164,165,6,2,2,2,2,2,2,2,2,2,7,163,164,164,157,173,173,173,173,173,173,173,173,174,29,
|
||||
1,1,1,1,28,163,164,164,165,15,11,11,11,11,11,11,10,11,11,16,163,164,164,164,164,165,15,11,11,11,11,11,11,11,11,11,16,163,164,164,165,21,22,22,22,22,22,22,22,22,38,
|
||||
1,1,1,1,28,163,164,164,166,155,155,155,155,155,155,155,155,155,155,155,167,164,164,164,164,166,155,155,155,155,155,155,155,155,155,155,155,167,164,164,165,30,31,31,31,31,31,31,31,31,20,
|
||||
1,1,1,1,28,172,173,173,173,173,173,173,173,173,173,173,173,173,173,173,158,183,164,164,164,157,173,173,173,173,173,173,173,173,173,173,173,158,164,164,165,6,2,2,2,2,2,2,2,4,29,
|
||||
1,1,1,1,37,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,163,164,164,164,164,165,21,22,22,22,22,22,22,22,22,22,23,163,164,164,165,15,11,11,10,11,11,11,11,13,29,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,28,163,164,183,166,155,155,155,155,155,155,155,155,156,29,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,28,172,173,173,173,173,173,173,173,173,173,173,173,174,29,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,37,22,22,22,22,22,22,22,22,22,22,22,22,22,38,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,28,163,164,164,164,164,165,29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,19,31,31,31,31,31,32,163,164,164,164,164,165,30,31,31,31,31,31,20,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,19,31,31,31,31,31,360,3,2,2,2,2,7,163,164,164,164,164,165,6,2,2,2,2,4,386,31,31,31,31,31,20,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,28,3,2,2,2,4,33,12,11,11,11,11,16,163,164,164,164,164,165,15,11,11,11,11,13,33,2,2,2,2,4,29,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,28,12,11,11,11,13,234,154,155,155,155,155,155,167,164,164,164,164,166,155,155,155,155,155,156,234,11,11,10,11,13,29,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,28,154,155,155,155,156,243,163,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,165,243,154,155,155,155,156,29,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,28,163,164,192,193,166,155,167,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,166,155,167,164,164,164,165,29,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,28,172,173,173,173,173,173,173,173,173,173,173,173,173,173,158,157,173,173,173,173,173,173,173,173,173,173,173,173,173,174,29,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,37,22,22,22,22,22,22,22,22,22,22,22,22,22,22,1,1,22,22,22,22,22,22,22,22,22,22,22,22,22,22,38,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="2" name="Calque de Tuiles 2" width="51" height="33">
|
||||
<data encoding="csv">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,65,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,73,74,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,161,162,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,64,65,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,73,74,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,65,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,73,74,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,701,1,1,701,698,1,1,188,189,1,1,698,701,1,1,701,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,710,1,1,710,707,1,1,188,189,1,1,707,710,1,1,710,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,252,1,1,1,1,1,1,1,1,188,189,1,1,1,1,1,1,1,1,252,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,197,198,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="3" name="Calque de Tuiles 3" width="51" height="33">
|
||||
<data encoding="csv">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,55,56,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,341,342,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,395,396,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,341,342,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,395,396,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,341,342,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,350,351,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</data>
|
||||
</layer>
|
||||
</map>
|
|
@ -0,0 +1,341 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<map version="1.10" tiledversion="1.11.0" orientation="orthogonal" renderorder="left-up" width="30" height="20" tilewidth="16" tileheight="16" infinite="1" nextlayerid="8" nextobjectid="1">
|
||||
<tileset firstgid="1" source="../../tileset/tileset.tsx"/>
|
||||
<tileset firstgid="793" source="../../../../../../snap/tiled/4555/Props.tsx"/>
|
||||
<layer id="5" name="Calque de Tuiles 1" width="30" height="20">
|
||||
<data encoding="csv">
|
||||
<chunk x="-32" y="0" width="16" height="16">
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,19,31,31,31,31,31,31,31,
|
||||
9,9,9,9,9,9,9,9,28,3,2,2,2,2,2,2,
|
||||
9,9,9,9,9,9,9,9,28,12,11,11,11,11,11,11,
|
||||
9,9,9,9,9,9,9,9,28,154,155,155,155,155,155,155,
|
||||
9,9,9,9,9,9,9,9,28,163,157,173,173,173,173,173,
|
||||
9,9,9,9,9,9,9,9,28,163,165,21,22,22,22,22,
|
||||
9,9,9,9,9,9,9,9,28,163,165,29,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,28,163,165,29,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,28,163,165,29,9,9,9,9
|
||||
</chunk>
|
||||
<chunk x="-16" y="0" width="16" height="16">
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
19,9,9,20,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
28,9,9,29,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
32,9,9,30,31,31,31,31,31,31,31,31,31,31,31,31,
|
||||
7,154,156,6,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
16,163,165,15,11,11,11,11,11,11,11,11,11,11,11,11,
|
||||
155,167,166,155,155,155,155,155,155,155,155,155,155,155,155,155,
|
||||
173,173,173,173,173,173,173,173,173,173,158,157,173,173,173,173,
|
||||
22,22,22,22,22,22,22,22,22,23,163,165,21,22,22,22,
|
||||
9,9,9,9,9,9,9,9,9,28,163,165,29,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,28,163,165,29,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,28,159,160,29,9,9,9
|
||||
</chunk>
|
||||
<chunk x="0" y="0" width="16" height="16">
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
31,31,31,31,31,20,9,9,9,9,9,9,9,9,9,9,
|
||||
2,2,2,2,4,29,9,9,9,9,9,9,9,9,9,9,
|
||||
11,11,11,11,13,29,9,9,9,9,9,9,9,9,9,9,
|
||||
155,155,155,155,156,29,9,9,9,9,9,9,9,9,9,9,
|
||||
173,173,173,173,174,29,9,9,9,9,9,9,9,9,9,9,
|
||||
22,22,22,22,22,38,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9
|
||||
</chunk>
|
||||
<chunk x="-32" y="16" width="16" height="16">
|
||||
9,9,9,9,9,9,9,9,28,163,165,29,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,28,163,165,29,9,9,9,9,
|
||||
9,9,9,19,31,31,31,31,32,164,164,30,31,31,31,31,
|
||||
9,9,9,28,3,2,2,2,7,1,1,6,2,2,2,2,
|
||||
9,9,9,28,12,11,11,11,16,1,1,15,11,11,11,11,
|
||||
9,9,9,28,199,200,200,200,200,200,200,200,200,200,200,201,
|
||||
9,9,9,28,208,209,209,236,209,209,209,209,209,209,209,210,
|
||||
9,9,9,28,208,209,209,209,209,209,236,209,236,209,209,210,
|
||||
9,9,9,28,208,209,209,209,209,209,209,209,209,209,209,210,
|
||||
9,9,9,28,208,209,236,209,209,209,209,209,236,209,209,210,
|
||||
9,9,9,28,217,218,218,218,218,218,218,218,218,218,218,219,
|
||||
9,9,9,37,22,22,22,22,22,22,22,22,22,22,22,22,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9
|
||||
</chunk>
|
||||
<chunk x="-16" y="16" width="16" height="16">
|
||||
9,9,9,9,9,9,9,9,9,28,168,169,29,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,28,154,156,29,9,9,9,
|
||||
43,31,31,31,31,31,31,31,31,32,163,165,30,31,31,31,
|
||||
47,3,2,2,2,2,2,2,2,7,163,165,6,2,2,2,
|
||||
47,12,11,11,11,11,11,11,11,16,163,165,15,11,11,11,
|
||||
47,154,155,155,155,155,155,155,155,155,167,166,155,155,155,155,
|
||||
47,163,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
|
||||
47,163,164,164,164,164,164,164,164,164,39,40,164,164,164,164,
|
||||
47,163,164,164,164,164,164,164,164,164,48,49,164,164,164,164,
|
||||
47,163,164,164,164,164,164,164,164,164,6,7,164,164,164,164,
|
||||
47,172,173,173,173,158,164,164,164,164,15,16,164,164,164,164,
|
||||
53,22,22,22,23,163,164,164,164,164,164,164,164,164,164,164,
|
||||
9,9,9,9,28,172,173,173,173,173,173,173,173,173,173,173,
|
||||
9,9,9,9,37,22,22,22,22,22,9,9,22,22,22,22,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9
|
||||
</chunk>
|
||||
<chunk x="0" y="16" width="16" height="16">
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
31,31,31,31,31,20,9,9,9,9,9,9,9,9,9,9,
|
||||
2,2,2,2,4,386,31,31,31,31,20,9,9,9,9,9,
|
||||
11,11,11,11,13,234,3,2,2,4,29,9,9,9,9,9,
|
||||
155,155,155,155,156,243,12,11,11,13,29,9,9,9,9,9,
|
||||
164,164,164,164,164,173,155,155,155,156,29,9,9,9,9,9,
|
||||
164,164,164,164,165,25,173,173,173,174,29,9,9,9,9,9,
|
||||
164,164,164,164,165,368,22,22,22,22,38,9,9,9,9,9,
|
||||
164,164,164,164,165,29,9,9,9,9,9,9,9,9,9,9,
|
||||
157,173,173,173,174,29,9,9,9,9,9,9,9,9,9,9,
|
||||
165,21,22,22,22,38,9,9,9,9,9,9,9,9,9,9,
|
||||
174,29,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
22,38,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
|
||||
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9
|
||||
</chunk>
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="6" name="Calque de Tuiles 2" width="30" height="20">
|
||||
<data encoding="csv">
|
||||
<chunk x="-32" y="0" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,10,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
<chunk x="-16" y="0" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,31,31,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,834,835,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,859,860,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,10,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
<chunk x="0" y="0" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,57,58,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,66,67,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,75,76,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
969,207,206,242,207,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,254,1,216,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
<chunk x="-32" y="16" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,350,351,1,1,1,1,1,
|
||||
1,1,1,1,773,774,0,0,1,834,835,1,773,774,773,774,
|
||||
1,1,1,1,782,783,751,752,753,859,860,1,782,783,782,783,
|
||||
1,1,1,1,791,792,760,761,762,1,1,1,791,792,791,792,
|
||||
1,1,1,1,1,771,772,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,780,781,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,789,790,1,754,755,755,756,1,754,756,1,
|
||||
1,1,1,1,1,1,1,1,763,764,764,765,1,763,765,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
<chunk x="-16" y="16" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,701,1,1,1,701,1,1,1,1,1,1,701,1,
|
||||
1,10,1,710,1,1,1,710,1,1,1,1,1,1,710,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
<chunk x="0" y="16" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,701,1,1,1,1,57,58,1,1,1,1,1,1,1,
|
||||
1,1,710,1,1,1,1,66,67,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,75,76,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,252,260,256,260,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,261,1,1,994,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,794,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,819,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="7" name="Calque de Tuiles 3" width="30" height="20">
|
||||
<data encoding="csv">
|
||||
<chunk x="-32" y="0" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
<chunk x="-16" y="0" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,809,810,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,963,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,988,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
<chunk x="0" y="0" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
<chunk x="-32" y="16" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,341,342,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,387,809,810,369,1,1,1,1,
|
||||
1,1,1,1,1,1,0,0,1,1,0,1,0,0,0,0,
|
||||
1,1,1,1,924,929,882,928,1,1,0,1,929,930,930,931,
|
||||
1,1,1,1,0,929,0,0,1,1,1,991,932,932,929,814,
|
||||
1,1,1,1,1,911,1,1,1,1,1,1,1,1,1,839,
|
||||
1,1,1,1,1,1,825,1,848,849,1,1,1,850,851,1,
|
||||
1,1,1,1,1,1,1,1,873,874,881,1,1,875,876,1,
|
||||
1,1,1,1,917,1,1,1,1,738,1,1,1,1,1,1,
|
||||
1,1,1,1,942,991,1,1,1,747,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
<chunk x="-16" y="16" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,183,1,
|
||||
1,1,1,1,1,1,181,182,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,190,191,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,193,1,
|
||||
1,1,1,1,1,1,1,1,1,1,341,342,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,350,351,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
<chunk x="0" y="16" width="16" height="16">
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
</chunk>
|
||||
</data>
|
||||
</layer>
|
||||
</map>
|
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.5 KiB |
|
@ -0,0 +1,118 @@
|
|||
{
|
||||
"TileMapWidth": 22,
|
||||
"TileMapHeight": 21,
|
||||
|
||||
"Layer 1": [
|
||||
[297, 306, 306, 306, 306, 297, 306, 297, 297, 306, 297, 306, 297, 408, 306, 306, 278, 297, 278, 306, 278, 297],
|
||||
[278, 278, 278, 297, 692, 306, 306, 306, 306, 297, 278, 297, 297, 417, 306, 278, 297, 306, 278, 630, 278, 297],
|
||||
[306, 297, 278, 278, 306, 278, 278, 297, 297, 278, 278, 306, 278, 297, 297, 278, 297, 306, 297, 306, 306, 306],
|
||||
[278, 278, 278, 278, 306, 297, 297, 306, 297, 297, 297, 278, 297, 306, 297, 297, 306, 297, 306, 306, 278, 297],
|
||||
[306, 297, 306, 278, 297, 297, 297, 306, 278, 306, 278, 297, 306, 297, 278, 306, 278, 297, 297, 306, 297, 297],
|
||||
[297, 278, 274, 282, 306, 297, 297, 297, 306, 297, 297, 306, 306, 297, 297, 278, 278, 297, 274, 282, 297, 297],
|
||||
[306, 278, 273, 274, 278, 278, 306, 302, 310, 309, 330, 330, 310, 309, 299, 306, 278, 297, 274, 274, 278, 306],
|
||||
[297, 278, 274, 282, 297, 297, 302, 311, 319, 318, 322, 323, 319, 318, 308, 310, 299, 278, 283, 273, 306, 278],
|
||||
[297, 297, 274, 274, 302, 310, 311, 320, 328, 327, 331, 332, 328, 327, 317, 319, 308, 299, 273, 273, 297, 278],
|
||||
[306, 297, 283, 273, 285, 319, 320, 329, 306, 306, 306, 306, 306, 297, 326, 328, 317, 280, 282, 283, 297, 306],
|
||||
[278, 278, 283, 273, 285, 329, 324, 278, 297, 297, 306, 306, 306, 297, 297, 315, 326, 280, 283, 274, 306, 306],
|
||||
[306, 278, 274, 274, 285, 297, 306, 306, 297, 306, 315, 297, 278, 306, 306, 278, 297, 280, 274, 282, 278, 278],
|
||||
[278, 278, 274, 273, 285, 278, 297, 306, 306, 297, 306, 306, 278, 306, 297, 306, 306, 280, 274, 273, 278, 278],
|
||||
[278, 599, 283, 273, 275, 306, 297, 297, 278, 306, 278, 306, 278, 297, 333, 306, 278, 272, 282, 283, 297, 297],
|
||||
[607, 608, 609, 274, 283, 1, 278, 306, 324, 278, 297, 364, 365, 366, 278, 297, 274, 282, 274, 283, 278, 306],
|
||||
[306, 297, 273, 438, 439, 274, 274, 306, 306, 278, 306, 373, 374, 375, 272, 273, 283, 659, 660, 274, 297, 278],
|
||||
[278, 297, 306, 278, 278, 306, 278, 306, 306, 364, 365, 365, 366, 278, 306, 278, 306, 412, 306, 278, 278, 278],
|
||||
[306, 278, 278, 297, 297, 297, 297, 278, 278, 373, 374, 374, 375, 297, 306, 306, 278, 297, 306, 306, 306, 306],
|
||||
[278, 278, 306, 297, 306, 306, 278, 278, 297, 373, 374, 374, 375, 306, 306, 297, 278, 278, 278, 297, 278, 278],
|
||||
[278, 297, 278, 306, 306, 278, 278, 278, 278, 382, 363, 374, 379, 366, 278, 297, 278, 278, 306, 297, 278, 297],
|
||||
[297, 306, 297, 278, 278, 278, 278, 278, 297, 306, 373, 374, 374, 375, 297, 306, 297, 306, 278, 297, 306, 278]
|
||||
],
|
||||
|
||||
"Layer 2": [
|
||||
[620, 621, 1, 682, 683, 684, 1, 640, 641, 1, 1, 406, 407, 646, 452, 453, 1, 619, 620, 621, 1, 1],
|
||||
[629, 630, 1, 691, 409, 693, 1, 649, 650, 1, 1, 415, 416, 655, 461, 462, 1, 628, 629, 397, 398, 1],
|
||||
[569, 570, 571, 1, 418, 419, 1, 658, 659, 1, 1, 424, 425, 664, 470, 471, 1, 421, 422, 406, 407, 408],
|
||||
[578, 579, 580, 1, 427, 428, 1, 667, 668, 1, 1, 433, 434, 435, 479, 480, 1, 430, 431, 415, 416, 417],
|
||||
[587, 588, 589, 1, 1, 437, 1, 1, 677, 1, 1, 442, 443, 1, 488, 489, 1, 439, 440, 424, 425, 426],
|
||||
[596, 597, 598, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 508, 509, 510, 511, 512],
|
||||
[605, 606, 607, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 457, 518, 519, 520, 521],
|
||||
[614, 615, 616, 1, 1, 464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 407, 408, 529, 629],
|
||||
[1, 1, 585, 558, 1, 1, 1, 1, 1, 515, 1, 1, 516, 1, 1, 1, 1, 1, 416, 417, 538, 1],
|
||||
[1, 1, 1, 1, 1, 1, 638, 639, 1, 1, 1, 1, 1, 1, 533, 1, 1, 1, 425, 546, 547, 1],
|
||||
[1, 644, 645, 646, 1, 532, 647, 648, 1, 1, 1, 1, 1, 1, 515, 1, 1, 1, 434, 1, 1, 1],
|
||||
[1, 653, 654, 655, 1, 1, 534, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 586, 587, 588, 589],
|
||||
[1, 662, 663, 664, 1, 1, 514, 1, 714, 1, 1, 1, 1, 1, 1, 525, 514, 1, 595, 596, 597, 598],
|
||||
[670, 418, 419, 420, 1, 276, 1, 1, 1, 1, 1, 1, 697, 1, 1, 1, 640, 641, 642, 605, 606, 607],
|
||||
[1, 427, 428, 429, 567, 275, 265, 266, 1, 516, 1, 1, 1, 1, 271, 264, 649, 650, 651, 614, 615, 616],
|
||||
[1, 436, 493, 494, 1, 440, 460, 461, 264, 265, 265, 265, 264, 264, 400, 401, 402, 403, 404, 662, 662, 663],
|
||||
[1, 1, 502, 503, 1, 1, 469, 470, 471, 1, 1, 1, 1, 1, 409, 410, 411, 404, 669, 1, 671, 672],
|
||||
[1, 1, 511, 512, 570, 571, 572, 573, 480, 1, 1, 715, 1, 1, 418, 419, 420, 413, 678, 1, 680, 681],
|
||||
[1, 1, 520, 521, 579, 580, 581, 582, 583, 1, 1, 1, 1, 1, 427, 428, 429, 422, 687, 1, 689, 690],
|
||||
[1, 1, 529, 530, 588, 589, 590, 591, 592, 1, 1, 1, 1, 1, 1, 1, 1, 431, 1, 1, 1, 1],
|
||||
[1, 1, 538, 1, 597, 598, 599, 600, 1, 1, 1, 1, 1, 1, 1, 1, 1, 440, 1, 1, 1, 1]
|
||||
],
|
||||
|
||||
"Layer 3": [
|
||||
[551, 552, 553, 554, 400, 401, 402, 403, 404, 642, 643, 644, 645, 451, 400, 401, 402, 403, 404, 388, 389, 390],
|
||||
[560, 561, 562, 563, 564, 410, 411, 412, 413, 651, 652, 653, 654, 460, 409, 410, 411, 412, 473, 474, 475, 399],
|
||||
[474, 475, 0, 572, 573, 574, 420, 421, 422, 660, 661, 662, 663, 469, 418, 419, 420, 481, 482, 483, 484, 485],
|
||||
[483, 484, 485, 581, 582, 583, 429, 430, 431, 669, 670, 671, 672, 478, 427, 428, 429, 490, 491, 492, 493, 494],
|
||||
[492, 493, 494, 590, 591, 592, 438, 439, 440, 678, 679, 680, 681, 487, 436, 437, 438, 499, 500, 501, 502, 503],
|
||||
[501, 502, 503, 599, 600, 446, 447, 448, 686, 687, 688, 689, 690, 496, 497, 498, 447, 388, 389, 390, 610, 611],
|
||||
[510, 511, 512, 608, 609, 455, 456, 457, 1, 1, 313, 314, 1, 505, 506, 455, 456, 397, 398, 399, 619, 620],
|
||||
[519, 520, 521, 617, 618, 464, 465, 466, 1, 1, 1, 1, 1, 1, 1, 464, 465, 406, 550, 551, 552, 553],
|
||||
[625, 626, 627, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 415, 559, 560, 561, 562],
|
||||
[634, 635, 636, 637, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 424, 568, 569, 570, 571],
|
||||
[643, 391, 392, 393, 394, 1, 1, 1, 1, 1, 1, 1, 1, 1, 391, 1, 1, 433, 577, 578, 579, 580],
|
||||
[652, 400, 401, 402, 403, 404, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 622, 623, 624, 625, 626, 1],
|
||||
[661, 409, 410, 411, 412, 413, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 631, 632, 633, 634, 635, 636],
|
||||
[473, 474, 475, 476, 421, 422, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 640, 641, 1, 643, 644, 645],
|
||||
[482, 483, 484, 485, 430, 431, 451, 452, 453, 1, 1, 1, 1, 1, 1, 392, 393, 394, 1, 652, 653, 654],
|
||||
[491, 492, 1, 551, 552, 553, 554, 555, 462, 1, 1, 1, 1, 1, 392, 393, 394, 472, 473, 474, 475, 476],
|
||||
[500, 501, 559, 560, 561, 562, 563, 564, 565, 1, 1, 1, 1, 400, 401, 402, 403, 481, 482, 483, 484, 485],
|
||||
[509, 510, 568, 569, 472, 473, 474, 475, 574, 1, 1, 1, 1, 409, 410, 411, 412, 490, 491, 492, 493, 494],
|
||||
[518, 519, 577, 578, 481, 482, 483, 484, 485, 1, 1, 1, 1, 418, 419, 420, 421, 499, 500, 501, 502, 503],
|
||||
[527, 528, 586, 587, 490, 491, 492, 493, 494, 1, 1, 1, 1, 427, 428, 429, 430, 508, 509, 510, 511, 512],
|
||||
[536, 537, 595, 596, 499, 500, 501, 502, 503, 1, 1, 1, 1, 436, 437, 438, 439, 517, 518, 519, 520, 521]
|
||||
],
|
||||
|
||||
"Hitboxes": [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
],
|
||||
|
||||
"NextMaps": [
|
||||
{
|
||||
"Number": 2,
|
||||
|
||||
"Path": "ressources/maps/map dungeon 1.json",
|
||||
|
||||
"PlayerInitPos": {
|
||||
"x": 22,
|
||||
"y": 30
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
"PlayerInitPos": {
|
||||
"x": 10,
|
||||
"y": 11
|
||||
}
|
||||
}
|
|
@ -0,0 +1,434 @@
|
|||
{
|
||||
"TileMapWidth": 51,
|
||||
"TileMapHeight": 33,
|
||||
|
||||
"Layer 1": [
|
||||
[19, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 20, 1, 1, 1, 1, 1, 19, 31, 31, 163, 165, 31, 31, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[28, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 29, 1, 1, 1, 1, 1, 28, 3, 2, 163, 165, 2, 4, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[28, 12, 11, 11, 11, 11, 95, 95, 11, 11, 11, 11, 13, 29, 1, 1, 1, 1, 1, 28, 12, 11, 163, 165, 11, 13, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[28, 154, 155, 155, 155, 130, 131, 131, 132, 155, 155, 155, 156, 29, 1, 1, 1, 1, 1, 28, 154, 155, 167, 166, 155, 156, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[28, 163, 164, 164, 164, 139, 140, 140, 141, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 20],
|
||||
[28, 163, 164, 181, 182, 148, 149, 149, 150, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 29],
|
||||
[28, 163, 164, 190, 191, 164, 164, 164, 164, 183, 164, 164, 165, 29, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 29],
|
||||
[28, 163, 164, 164, 164, 193, 164, 164, 164, 164, 193, 164, 165, 29, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 29],
|
||||
[28, 172, 173, 173, 173, 173, 158, 157, 173, 173, 173, 173, 174, 29, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 193, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 29],
|
||||
[37, 22, 22, 22, 359, 46, 163, 165, 46, 377, 22, 22, 22, 38, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 172, 173, 173, 173, 173, 173, 173, 173, 158, 157, 173, 173, 174, 29],
|
||||
[1, 1, 1, 1, 28, 3, 163, 165, 4, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 46, 46, 46, 46, 46, 46, 46, 46, 163, 165, 46, 46, 46, 44],
|
||||
[1, 1, 1, 1, 28, 12, 163, 165, 13, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 3, 2, 2, 2, 2, 2, 2, 2, 163, 165, 2, 2, 4, 29],
|
||||
[1, 1, 1, 1, 28, 154, 167, 166, 156, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 12, 11, 11, 11, 11, 11, 11, 11, 163, 165, 11, 11, 13, 29],
|
||||
[1, 1, 1, 1, 28, 163, 164, 164, 165, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 163, 164, 164, 164, 164, 165, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 154, 155, 155, 155, 155, 155, 155, 155, 167, 166, 155, 155, 156, 29],
|
||||
[1, 1, 1, 1, 28, 163, 164, 164, 165, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 163, 164, 164, 164, 164, 165, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 163, 164, 164, 157, 173, 173, 173, 173, 173, 173, 173, 173, 174, 29],
|
||||
[1, 1, 1, 1, 28, 163, 164, 164, 165, 15, 11, 11, 11, 11, 11, 11, 10, 11, 11, 16, 163, 164, 164, 164, 164, 165, 15, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16, 163, 164, 164, 165, 21, 22, 22, 22, 22, 22, 22, 22, 22, 38],
|
||||
[1, 1, 1, 1, 28, 163, 164, 164, 166, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 167, 164, 164, 164, 164, 166, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 167, 164, 164, 165, 30, 31, 31, 31, 31, 31, 31, 31, 31, 20],
|
||||
[1, 1, 1, 1, 28, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 158, 183, 164, 164, 164, 157, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 158, 164, 164, 165, 6, 2, 2, 2, 2, 2, 2, 2, 4, 29],
|
||||
[1, 1, 1, 1, 37, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 163, 164, 164, 164, 164, 165, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 163, 164, 164, 165, 15, 11, 11, 10, 11, 11, 11, 11, 13, 29],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 183, 166, 155, 155, 155, 155, 155, 155, 155, 155, 156, 29],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 29],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 38],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 31, 31, 31, 31, 31, 32, 163, 164, 164, 164, 164, 165, 30, 31, 31, 31, 31, 31, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 19, 31, 31, 31, 31, 31, 360, 3, 2, 2, 2, 2, 7, 163, 164, 164, 164, 164, 165, 6, 2, 2, 2, 2, 4, 386, 31, 31, 31, 31, 31, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 28, 3, 2, 2, 2, 4, 33, 12, 11, 11, 11, 11, 16, 163, 164, 164, 164, 164, 165, 15, 11, 11, 11, 11, 13, 33, 2, 2, 2, 2, 4, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 28, 12, 11, 11, 11, 13, 234, 154, 155, 155, 155, 155, 155, 167, 164, 164, 164, 164, 166, 155, 155, 155, 155, 155, 156, 234, 11, 11, 10, 11, 13, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 28, 154, 155, 155, 155, 156, 243, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 243, 154, 155, 155, 155, 156, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 192, 193, 166, 155, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, 155, 167, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 28, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 158, 157, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 37, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 1, 1, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||
],
|
||||
|
||||
"Layer 2": [
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 161, 162, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 64, 65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 73, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 65, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 74, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 701, 1, 1, 701, 698, 1, 1, 188, 189, 1, 1, 698, 701, 1, 1, 701, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 710, 1, 1, 710, 707, 1, 1, 188, 189, 1, 1, 707, 710, 1, 1, 710, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 252, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 252, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 197, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||
],
|
||||
|
||||
"Layer 3": [
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 55, 56, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 341, 342, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 395, 396, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 341, 342, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 395, 396, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 341, 342, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 350, 351, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||
],
|
||||
|
||||
"Hitboxes": [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
|
||||
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0],
|
||||
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0],
|
||||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0],
|
||||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
|
||||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
],
|
||||
|
||||
"NextMaps": [
|
||||
{
|
||||
"Number": 2,
|
||||
|
||||
"Path": "ressources/maps/dungeon entry.json",
|
||||
|
||||
"PlayerInitPos": {
|
||||
"x": 10,
|
||||
"y": 7
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
"Entities": [
|
||||
[
|
||||
{
|
||||
"Type": "TransformComponent",
|
||||
|
||||
"Position": {
|
||||
"x": 47,
|
||||
"y": 12
|
||||
},
|
||||
|
||||
"Dimension": {
|
||||
"x": 48,
|
||||
"y": 32
|
||||
},
|
||||
|
||||
"Scale": 2,
|
||||
|
||||
"Speed": 0
|
||||
},
|
||||
{
|
||||
"Type": "SpriteComponent",
|
||||
|
||||
"Path": "ressources/props/lever.png"
|
||||
},
|
||||
{
|
||||
"Type": "AnimationSystem",
|
||||
|
||||
"NbFrames": 3,
|
||||
|
||||
"CurrentFrame": 0,
|
||||
|
||||
"FrameDelay": 10,
|
||||
|
||||
"PlayAnimation": false
|
||||
},
|
||||
{
|
||||
"Type": "HitboxComponent",
|
||||
|
||||
"Scale": {
|
||||
"x": 0.33333,
|
||||
"y": 0.21875
|
||||
},
|
||||
|
||||
"Position": {
|
||||
"x": 0.5,
|
||||
"y": 0.82
|
||||
}
|
||||
},
|
||||
{
|
||||
"Type": "Lever",
|
||||
|
||||
"Channel": 0
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"Type": "TransformComponent",
|
||||
|
||||
"Position": {
|
||||
"x": 47,
|
||||
"y": 18
|
||||
},
|
||||
|
||||
"Dimension": {
|
||||
"x": 48,
|
||||
"y": 32
|
||||
},
|
||||
|
||||
"Scale": 2,
|
||||
|
||||
"Speed": 0
|
||||
},
|
||||
{
|
||||
"Type": "SpriteComponent",
|
||||
|
||||
"Path": "ressources/props/lever.png"
|
||||
},
|
||||
{
|
||||
"Type": "AnimationSystem",
|
||||
|
||||
"NbFrames": 3,
|
||||
|
||||
"CurrentFrame": 0,
|
||||
|
||||
"FrameDelay": 10,
|
||||
|
||||
"PlayAnimation": false
|
||||
},
|
||||
{
|
||||
"Type": "HitboxComponent",
|
||||
|
||||
"Scale": {
|
||||
"x": 0.33333,
|
||||
"y": 0.21875
|
||||
},
|
||||
|
||||
"Position": {
|
||||
"x": 0.5,
|
||||
"y": 0.82
|
||||
}
|
||||
},
|
||||
{
|
||||
"Type": "Lever",
|
||||
|
||||
"Channel": 1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"Type": "TransformComponent",
|
||||
|
||||
"Position": {
|
||||
"x": 23,
|
||||
"y": 1
|
||||
},
|
||||
|
||||
"Dimension": {
|
||||
"x": 16,
|
||||
"y": 32
|
||||
},
|
||||
|
||||
"Scale": 2,
|
||||
|
||||
"Speed": 0
|
||||
},
|
||||
{
|
||||
"Type": "SpriteComponent",
|
||||
|
||||
"Path": "ressources/props/lock.png"
|
||||
},
|
||||
{
|
||||
"Type": "AnimationSystem",
|
||||
|
||||
"NbFrames": 7,
|
||||
|
||||
"CurrentFrame": 0,
|
||||
|
||||
"FrameDelay": 8,
|
||||
|
||||
"PlayAnimation": false
|
||||
},
|
||||
{
|
||||
"Type": "Lock",
|
||||
|
||||
"Channel": 2
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"Type": "TransformComponent",
|
||||
|
||||
"Position": {
|
||||
"x": 45,
|
||||
"y": 10
|
||||
},
|
||||
|
||||
"Dimension": {
|
||||
"x": 32,
|
||||
"y": 48
|
||||
},
|
||||
|
||||
"Scale": 2,
|
||||
|
||||
"Speed": 0
|
||||
},
|
||||
{
|
||||
"Type": "SpriteComponent",
|
||||
|
||||
"Path": "ressources/props/barred door 2.png"
|
||||
},
|
||||
{
|
||||
"Type": "AnimationSystem",
|
||||
|
||||
"NbFrames": 8,
|
||||
|
||||
"CurrentFrame": 0,
|
||||
|
||||
"FrameDelay": 3,
|
||||
|
||||
"PlayAnimation": false
|
||||
},
|
||||
{
|
||||
"Type": "HitboxComponent",
|
||||
|
||||
"Scale": {
|
||||
"x": 1,
|
||||
"y": 0.6666666666666
|
||||
},
|
||||
|
||||
"Position": {
|
||||
"x": 0,
|
||||
"y": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"Type": "Door",
|
||||
|
||||
"States": [
|
||||
{
|
||||
"Channel": 0,
|
||||
"State": false
|
||||
},
|
||||
{
|
||||
"Channel": 1,
|
||||
"State": true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"Type": "TransformComponent",
|
||||
|
||||
"Position": {
|
||||
"x": 6,
|
||||
"y": 9
|
||||
},
|
||||
|
||||
"Dimension": {
|
||||
"x": 32,
|
||||
"y": 48
|
||||
},
|
||||
|
||||
"Scale": 2,
|
||||
|
||||
"Speed": 0
|
||||
},
|
||||
{
|
||||
"Type": "SpriteComponent",
|
||||
|
||||
"Path": "ressources/props/barred door 2.png"
|
||||
},
|
||||
{
|
||||
"Type": "AnimationSystem",
|
||||
|
||||
"NbFrames": 8,
|
||||
|
||||
"CurrentFrame": 0,
|
||||
|
||||
"FrameDelay": 3,
|
||||
|
||||
"PlayAnimation": false
|
||||
},
|
||||
{
|
||||
"Type": "HitboxComponent",
|
||||
|
||||
"Scale": {
|
||||
"x": 1,
|
||||
"y": 0.6666666666666
|
||||
},
|
||||
|
||||
"Position": {
|
||||
"x": 0,
|
||||
"y": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"Type": "Door",
|
||||
|
||||
"States": [
|
||||
{
|
||||
"Channel": 0,
|
||||
"State": true
|
||||
},
|
||||
{
|
||||
"Channel": 1,
|
||||
"State": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 8.4 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 480 B |
After Width: | Height: | Size: 928 B |
After Width: | Height: | Size: 241 B |
After Width: | Height: | Size: 1004 B |
After Width: | Height: | Size: 621 B |
After Width: | Height: | Size: 670 B |
After Width: | Height: | Size: 526 B |
After Width: | Height: | Size: 519 B |
After Width: | Height: | Size: 698 B |
After Width: | Height: | Size: 503 B |
After Width: | Height: | Size: 526 B |
After Width: | Height: | Size: 68 KiB |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tileset version="1.10" tiledversion="1.11.0" name="tileset" tilewidth="16" tileheight="16" tilecount="1053" columns="9">
|
||||
<image source="tileset.png" width="144" height="1408"/>
|
||||
</tileset>
|
After Width: | Height: | Size: 7.1 KiB |
After Width: | Height: | Size: 793 B |
After Width: | Height: | Size: 6.3 KiB |