{"id":15599576,"url":"https://github.com/hypercubed/ifecs","last_synced_at":"2025-07-22T20:34:19.942Z","repository":{"id":66193281,"uuid":"380824334","full_name":"Hypercubed/ifecs","owner":"Hypercubed","description":null,"archived":false,"fork":false,"pushed_at":"2021-07-05T16:05:42.000Z","size":81,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-12T13:57:56.379Z","etag":null,"topics":["ecs","fiction","if","interactive","interactive-fiction"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hypercubed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-27T19:41:15.000Z","updated_at":"2024-03-26T00:17:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"24d0c018-731a-46a3-abe7-eb5647d338cd","html_url":"https://github.com/Hypercubed/ifecs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Hypercubed/ifecs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hypercubed%2Fifecs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hypercubed%2Fifecs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hypercubed%2Fifecs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hypercubed%2Fifecs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hypercubed","download_url":"https://codeload.github.com/Hypercubed/ifecs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hypercubed%2Fifecs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266567640,"owners_count":23949391,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ecs","fiction","if","interactive","interactive-fiction"],"created_at":"2024-10-03T02:00:24.245Z","updated_at":"2025-07-22T20:34:19.911Z","avatar_url":"https://github.com/Hypercubed.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IFECS\n\n[![asciicast](https://asciinema.org/a/ZjlyPLikXN9y8ORx7sUjbrjvz.svg)](https://asciinema.org/a/ZjlyPLikXN9y8ORx7sUjbrjvz)\n\n## Introduction\n\nIFECS is a framework for building and playing interactive fiction (IF) games\nusing TypeScript (TS).\n\n## Goals\n\nThe overall goal of IFECS is to focus on developer experience. Both the\ndevelopment tools and game itself are written in the same language with a DSL\ndesigned for IF games.\n\n## Concepts\n\nIFECS consists of two levels. At it's core IFECS has a small and easy-to-use\nentity-component-system (ECS) engine. IFECS also includes a library of modules\nthat turn this agnostic ECS engine into a interface fiction game engine.\n\n## Getting Started\n\n_TBR_\n\n### The ECS in IFECS\n\nECS is an pattern commonly used in game development. An ECS engine prefers\ncomposition over inheritance to allow for greater flexibility when defining\nentities. IFECS breaks the traditional ECS rules in several ways in order to\nbetter enable the goal of improved developer experience.\n\n**Engine** - The engine is the orchestrator of the game world. It handles the\norganization of entities, systems and modules. It starts and stops the game.\n\n**Entity** - An entity is an object within the game. In typical ECS frameworks\nentities are amorphous object which contain no data and no logic and act simply\nas a container of components. While this is mostly true for IFECS entities,\nIFECS uses JavaScript classes as entity families. These entity families are used\nas blueprints for creating entities, an archetypes for queries and as a facade\nfor easy interaction with components.\n\n**Component** - A component is a piece of data attached to an entity. In IFECS\nwe allow some function to be used as components. In a more traditional ECS\nsystem these functions would be encapsulated in systems. (TBD: data components,\ntags, functions)\n\n**System** - Systems are logic bricks. Systems run in a defined sequence each\nturn to progress the story.\n\n**Modules** - Modules are blocks (classes) that encapsulate entities,\ncomponents, and systems. Modules are loaded into the engine to provide the\nengine some game capabilities. Every game will require at least one module. Each\nmodule can specify other modules as required to build up the required behavior.\nThe IF portions of IFECS are encapsulated in various modules.\n\n### The IF in IFECS\n\nVarious modules are provided to turn the generic ECS engine into a IF framework.\n\n**if.module** - This is the core of the IF framework. It includes an action\nsystem, rules system, and an output (rendering) system. The action system,\ndiscussed in detail later, is used to define the game vocabulary.\n\n### Creating a Game\n\n_TBR_\n\n## Acknowledgments\n\nIFECS would not be possible without the inspiration following of the following :\n\n- [Gamefic](https://github.com/castwide/gamefic)\n- [Alan Interactive Fiction Language](https://www.alanif.se/)\n- [Inform 7](http://inform7.com/)\n- [Rule-Based Programming in Interactive\n  Fiction](https://eblong.com/zarf/essays/rule-based-if/)\n- [Tick-Knock](https://github.com/mayakwd/tick-knock)\n- [Flecs](https://github.com/SanderMertens/flecs)\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for\ndetails\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhypercubed%2Fifecs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhypercubed%2Fifecs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhypercubed%2Fifecs/lists"}