{-# OPTIONS_GHC -Wno-unused-imports #-} module Mischief ( -- * What is Mischief? -- $whatis -- * Our Values -- $values -- * \"AI\" Disclaimer -- $ai -- * What do I Need to Know? -- $know -- * Setting up -- $setup -- * Where to Start -- $howtouse -- * Libraries -- $libs -- * Community -- $community -- * Contributing -- $contributing ) where import Mischief.ECS import Prelude () -- $whatis -- Mischief is a free, open-source, ECS Game Engine written in Haskell. It is a unique blend of -- data-oriented design and functional programming. -- $values -- Mischief is all about creativity and human expression and having fun. Is is a celebration of programming, -- art, and the creation of unique games and projects. -- -- It is not an engine meant to fit everyone, to be the "best game engine ever" or to make money. It is -- a project born of passion for data-oriented design, functional programming, and the art of crafting video games. -- -- You can read more about our values [here](https://codeberg.org/mischief/mischief/src/commit/321bfb3058b91f985c5149d88cb93618ae104c7f/Values.md). -- $ai -- Mischief uses no \"generative AI\" (in code or otherwise) and strives to be a space that fosters creativity and wholesome human interaction. -- $know -- You should generally be able to read through the official books and understand most logic without needing to have written Haskell before. -- However, you'll have a way better time if you have at least a basic knowledge of Haskell syntax, so it is recommended that you first follow a beginner -- tutorial for Haskell if you are not familiar with the language. -- -- The official books try not to assume any prior knowledge of ECS or game engines in general. -- $setup -- In order to use Mischief, you'll first need to install @GHC@ and @cabal@. We recommend doing so through the [ghcup](https://www.haskell.org/ghcup/) installer. -- -- After you have set up a project, add @mischief-ecs@ under @build-depends@ in you @.cabal@ file. -- -- We recommend using @GHC2024@ as the language standard (set in your @.cabal@ file). -- -- == Language Extensions -- We generally recommend using the following language extensions in a Mischief project: -- -- @ -- DeriveAnyClass -- DuplicateRecordFields -- NoFieldSelectors -- DerivingStrategies -- OverloadedRecordDot -- MultiWayIf -- OverloadedStrings -- QuasiQuotes -- TypeFamilyDependencies -- ImportQualifiedPost -- @ -- -- @QuasiQuotes@ and @OverloadedStrings@ are especially important because some Mischief features are not available without them (namely quasi-queries and logging). -- The rest of the extensions are optional. -- -- You can paste these extensions in the @default-extensions@ field of your @.cabal@ file. -- -- == Text -- Mischief uses @Text@ instead of @String@ where possible, including in its logging system. -- -- You'll often see functions from @Data.Text@ being used, such as @T.show@, so it's recommended to add @text@ as a dependency to your project and to qualify it when you want to use it: -- -- @ -- import "Data.Text" qualified as T -- @ -- $howtouse -- Mischief is made up of a fully decentralized ecosystem of libraries built on top of [mischief-ecs]("Mischief.ECS"). -- -- Most of the them are indeed made by the same people who also make the core ECS. But plugging libraries in and out is highly encouraged -- and one of the main focuses of the engine. So feel free to experiment with various libs to find what suits your game, or even make your own -- plugins to share with others! -- -- To get started, check out the [startup guide]("Mischief.ECS.Tutorial.Introduction.Startup") from the [Learn You an ECS for Great Mischief!]("Mischief.ECS") book. You can -- also click on each of the links in the next section to see their documentation / book and learn to use them! You don't need to read any one book to completion before moving on, -- feel free to switch between them depending on what you wish to learn about. -- -- If you want to skip ahead past the introductory stuff and get a feel for what Mischief can do, check out the [Rendering Book]("Mischief.Render"). -- -- Note that this library that you're reading right now, @mischief@, isn't meant to be added as a dependency or to be used directly. -- It exists just for centralizing documentation and helping keep the version of each library in check. -- $libs -- This is a list of the current libraries that exist within the ecosystem: -- -- * [mischief-ecs]("Mischief.ECS"). The core ECS library. -- * [mischief-assets]("Mischief.Assets"). Load and play with assets. -- * [mischief-input]("Mischief.Input"). Read input from the player. -- * [mischief-math]("Mischief.Math"). Transforms and algebra. -- * [mischief-render]("Mischief.Render"). Render stuff and write shaders. -- -- Feel free to open an issue or PR in the [official repo](https://codeberg.org/mischief/mischief) if you want your library to be added to this list. -- The [\"AI\" policy](https://codeberg.org/mischief/mischief/src/branch/main/AI_Policy.md) applies. -- $community -- You can keep in touch with the maintainers and the rest of the community by joining the official [discord server](https://discord.gg/WcpPqrwpuk). -- $contributing -- You can contribute to the official Mischief repository by opening issues to request features or report bugs. PRs may also be accepeted.