{"id":13681894,"url":"https://github.com/gilmore606/ure","last_synced_at":"2025-04-30T06:33:08.098Z","repository":{"id":67763330,"uuid":"138251172","full_name":"gilmore606/ure","owner":"gilmore606","description":"the unRogueEngine","archived":false,"fork":false,"pushed_at":"2018-10-07T20:29:45.000Z","size":38742,"stargazers_count":123,"open_issues_count":33,"forks_count":12,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-08-02T13:33:07.817Z","etag":null,"topics":["engine","game-development","game-engine","gamedev","roguelike","roguelike-game","roguelikedev"],"latest_commit_sha":null,"homepage":"","language":"Java","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/gilmore606.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":"ROADMAP.md","authors":null}},"created_at":"2018-06-22T03:39:54.000Z","updated_at":"2024-07-18T12:48:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"74ffb533-63dd-4d40-85d3-00b4b12ee8eb","html_url":"https://github.com/gilmore606/ure","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilmore606%2Fure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilmore606%2Fure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilmore606%2Fure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilmore606%2Fure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gilmore606","download_url":"https://codeload.github.com/gilmore606/ure/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224201775,"owners_count":17272642,"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","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":["engine","game-development","game-engine","gamedev","roguelike","roguelike-game","roguelikedev"],"created_at":"2024-08-02T13:01:37.484Z","updated_at":"2025-04-30T06:33:08.092Z","avatar_url":"https://github.com/gilmore606.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"# URE - the unRogueEngine\r\n\r\nUnRogue Engine is a Java library for making roguelike games.\r\n\r\n![ure thumbnail](https://raw.githubusercontent.com/gilmore606/ure/master/thumb1.png)\r\n\r\nURE is a class library of smart classes which work together to create a typical\r\nroguelike game environment based on 2D cell grids, turn-based action, and procedural\r\ncontent.  It can emulate all the conventions of a normal single player roguelike such\r\nas Nethack, but is not limited to these conventions.  Users can use URE simply as a\r\ndisplay layer, as a full world abstraction manager, or take full advantage of its\r\nobject library and use a conventional roguelike as an immediate jumping-off point\r\nto create from.\r\n\r\n![ure gif](https://raw.githubusercontent.com/gilmore606/ure/master/ure-water.gif)\r\n## Features\r\n\r\nURE is built for flexibility -- you should be able to use as few or as many of its features\r\nas you need.  Its base classes are extendable and configurable to achieve almost any\r\nroguelike game you can imagine.\r\n\r\n- Realtime lighting and visibility with full color blending and illumination for\r\nhundreds of lightsources in a scene\r\n- OpenGL rendering layer with no AWT/swing elements, for cross platform high performance\r\n- Visual particle system\r\n- 60fps animation of lights, terrain, and entities\r\n- Included truetype and pixel CP437-capable monospace fonts, or use any truetype font\r\n- Complete game loop with action-time system and NPC turn management\r\n- Full input handling, key buffering, mappable keybindings, mouse support\r\n- Persist game areas to disk and restore them seamlessly for a persistent world\r\n- JSON support for defining all types of game entities\r\n- Many level generator algorithms included as generic methods to mix and match for your\r\nown custom level generators\r\n- A* pathfinding available to actor entities or for general problem solving\r\n- Simplex and Perlin noise\r\n- A complete gameworld model incorporating things, actor NPCs, terrain, and more\r\n- Cartographer system for centrally defining a world structure, regions, and area links\r\n- UI elements such as a scroll panel, status panels, input widgets, lens panel, and more\r\n- Built for flexibility -- mix and match URE classes, extend and replace with your own\r\n\r\n![ure gif](https://raw.githubusercontent.com/gilmore606/ure/master/thumb3.gif)\r\n## Planned features\r\n\r\n- Drop-in replacement renderer modules to allow graphical tile rendering, isometric views, or\r\nother visualizations without changing the underlying game\r\n- Complex NPC AI, conversation trees, shops, quest-givers, and other rich NPC features\r\n- Status effects\r\n- Object materials and composition\r\n- Environmental effects such as liquid flow, smoke/vapors, and their interactions\r\n\r\n\r\n(see the [Roadmap](ROADMAP.md) for more details on planned features.)\r\n\r\n## Why Java?\r\n\r\nThe decision to implement URE into Java was not made lightly.  We recognize that there are more popular\r\nlanguages for roguelike and indie game development, such as Python, Lua, Unity/C#, etc.  However\r\nwe feel that Java provides several advantages for roguelike development in particular.\r\n\r\n- \u003cB\u003eRobust object model.\u003c/B\u003e  The data model of a simulation-style game maps well to a robust inheritance/interface model such as Java's.\r\nJava capabilities such as reflection allow us to dynamically support user-created classes.\r\n- \u003cB\u003eCross platform.\u003c/B\u003e Although a Java app requires a JVM, this can be bundled easily into platform-specific distros to support all major targets.\r\n- \u003cB\u003ePerformance.\u003c/B\u003e Roguelikes often use CPU-intensive algorithms.  Java implementations can be\r\nsignificantly faster than their Python or other interpreted-language equivalent.\r\n- \u003cB\u003eType-safety.\u003c/B\u003e More accessible languages like Python tend to be weakly typed.  While this allows\r\nmore rapid prototyping and a looser style, it can make maintenance of a large interacting system (such as a\r\nroguelike world state) problematic and brittle.  Java's strong typing helps to keep things on the rails.\r\n- \u003cB\u003eTools support.\u003c/B\u003e Working in Java gives us access to professional strength IDEs such as IntelliJ and their\r\nplugins and build systems.\r\n- \u003cB\u003eA path to Scala.\u003c/B\u003e We wanted the option, for ourselves and for users, to incorporate Scala in addition\r\nto vanilla Java code in order to leverage modern functional programming techniques.  This allowed us to mainly\r\nsupport a well-known language (Java) while still providing a path to a functional language (since Scala is a superset\r\nof Java), rather than writing natively in a newer less-known functional language.\r\n- \u003cB\u003eFuture non-Java support.\u003c/B\u003e Not only Scala, but Kotlin (or any other JVM-based language) should also be able to import and use URE unmodified.  We have hopes of\r\nbuilding an API frontend for Python and possibly Lua as well.\r\n\r\n## Getting Started\r\n\r\nSee [the HOWTO](HOWTO.md) to get started on a URE project.\r\n\r\nIf you're excited about URE and would like to start trying it out in its early state, we would welcome your feedback\r\nand be happy to work with you to get features implemented to help you achieve your roguelike dream.\r\n\r\n\r\n## API Documentation\r\n\r\nsee [JavaDoc](https://gilmore606.github.io/ure)\r\n\r\n## Contributing to URE\r\n\r\nURE is an open source community project and the maintainers welcome contributions from\r\nthe community.  We aim to provide a comprehensive library of useful game objects and\r\nfunctionality covering as wide a variety of use cases as possible.  If you've made a\r\ngenerally useful Thing, Behavior, Action, Terrain, or other entity type, ping us with your\r\nbranch and we'd be happy to consider merging it back.\r\n\r\n\r\n\r\n## Projects made with URE\r\n\r\nHopefully someday there will be links here to actual games.\r\n\r\n## Built With\r\n- [IntelliJ](https://www.jetbrains.com/idea/) A mighty nice IDE.\r\n- [Gradle](https://gradle.org/) Build automation and dependency management.\r\n- [Jackson](https://github.com/FasterXML/jackson) JSON serializing for object persistence.\r\n- [Reflections](http://static.javadoc.io/org.reflections/reflections/0.9.10/org/reflections/Reflections.html) Dynamic class detection.\r\n- [LWJGL](https://www.lwjgl.org/) Low level OpenGL access.\r\n- [JOML](https://github.com/JOML-CI/JOML) Low level OpenGL math.\r\n- [Dagger](http://square.github.io/dagger/) Dependency injection.  Pretty handy for game projects and lazy devs!\r\n- [Guava](https://github.com/google/guava) Provides a lightweight global event bus.\r\n- [RexPaint](http://www.gridsagegames.com/rexpaint/) URE imports and renders Rexpaint .xp files for splash screens, sprites, terrain decorations, etc.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgilmore606%2Fure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgilmore606%2Fure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgilmore606%2Fure/lists"}