#pragma once // Creature species, loaded from assets/creatures/roster.json (written by // tools/build_roster.py from the company list). #include #include #include namespace bs { enum class Rarity : uint8_t { Common = 0, Uncommon, Rare, Legendary }; enum class Habitat : uint8_t { Grass = 0, Water, Both }; struct Species { uint16_t id = 0; std::string slug, name, domain, type, type2, body; Rarity rarity = Rarity::Common; Habitat habitat = Habitat::Grass; float catchRate = 0.5f, fleeRate = 0.1f; uint32_t mainColor = 0x888888, accentColor = 0xcccccc; std::string sprite; // relative to assets/creatures/ int anchorRow = 63; bool retired = false; // company left the list: id and catches stay valid, it no longer spawns }; class Roster { public: bool load(const std::string& path, std::string* error = nullptr); size_t size() const { return species_.size(); } const Species* get(uint16_t id) const { return id < species_.size() ? &species_[id] : nullptr; } const std::vector& all() const { return species_; } private: std::vector species_; }; const char* rarityName(Rarity r); // Display color of a type (for UI chips). uint32_t typeColor(const std::string& type); } // namespace bs