Chief Posted June 27, 2018 Author Share Posted June 27, 2018 ```markdown __ _ ____ ____ ____ ____ || // // \\ // \\ // \\ // \\ || // // // // // // //___// ||// // // // // // // |// \\__// // \\__// \\__// // \\__//```**Extensible/Modular, Event-Driven, Multiplayer, Entity/Component/System-Powered JavaScript Game Engine**https://github.com/cyclonic-games/vorge---#### **What is it exactly?**The tagline says it all, if not too much. Vorge is built to be focused around ECS and event-driven programming. With WebSockets for networking, and WebGL for rendering, Vorge is fast and powerful enough for most projects (especially for 4:3 2D online RPGs).---#### **What are the features?**Before I list them out, it's important to understand how Vorge works. The basic idea is to create a high-throughput application scaffolding that allows for several ways of customization. Vorge ships with some basic, common functionality in the shape of **Modules**, **Libraries**, and **Plugins**, but Vorge itself is just designed to handle data flow and communication between moving parts (including client <-> server).##### **Modules**Vorge modules are essentially core blocks of logic that make up the majority of the internal logic of the engine. Modules allow you to replace existing modules or create entirely new ones that add unique functionality.##### **Libraries**With an Entity/Component/System architecture, managing all of these objects can become difficult. Libraries in Vorge consist of prebuilt entities, components, and systems that you can reference in your modules, other libraries, or plugins.##### **Plugins**These are simple; want to run some code when the game is instantiated. This allows you to subscribe to events, swap modules, communicate with the server, among many other things.---#### **But seriously, what are the features?**High-ish throughput networking via WebSocketsHigh-ish performance graphics via WebGL100% Web compatible, meaning completely cross-platformEvent Driven; hook into the engine's event system and react to engine internalsEntity/Component/System -- look it up, it's all the rageFlexible customization toolkitGit-based package managementOpen Source & 100% FreeTBD---#### **But does it have pets system?**The basic functionality that vorge ships with is enough to get a simple online RPG up and running. I will be working on my own game while I polish up the engine, and all of the modules, libraries, and plugins that I develop for my game I will release as open source for you to use in your games. This means that yes, if someone writes you the plugin, Vorge can support a pets system, and so much more.##### **Future Planned Features**- Particles (render beautiful particles)- Electron (run your game as a desktop app)- Offline (make a single player game)- Discord (integrate with discord and its api)- Web-based administration panel for the server- TBD---#### **Does it come with editors?**Yes, it will! I want to bake the engine and server out, work on the git-based package management, then jump right into developing the editors/creation suite. It will also be JavaScript and probably run on Electron.##### **Future Planned Features**- TBD---#### **Screenshots**None yet. I know.Vorge is actually decently far along in production, but the focus has been lower level internals. There's not a whole lot to show, visually, but you should check out the github: https://github.com/cyclonic-games Link to comment Share on other sites More sharing options...
SolidLink Posted June 27, 2018 Share Posted June 27, 2018 Great post Chief, Really looking forward to the progress on this engine! Link to comment Share on other sites More sharing options...
Chief Posted June 30, 2018 Author Share Posted June 30, 2018 I just want to show off some code here. The following is an example of a plugin. It's called "common" and ships with the engine to help you get up and running without the included boilerplate.```javascriptconst Plugin = require('../../core/Plugin');const Gamepad = require('./devices/Gamepad');const Keyboard = require('./devices/Keyboard');const Mouse = require('./devices/Mouse');const fragment = require('./shaders/default/fragment');const vertex = require('./shaders/default/vertex');const authorize = require('./tasks/authorize');const handshake = require('./tasks/handshake');const spawn = require('./tasks/spawn');module.exports = new Plugin('common', game => { game.devices.install(new Gamepad('gamepad')); game.devices.install(new Keyboard('keyboard')); game.devices.install(new Mouse('mouse')); game.tasks.subscribe('handshake').forEach(method => handshake.apply(game, method.arguments)); game.tasks.subscribe('authorize').forEach(method => authorize.apply(game, method.arguments)); game.tasks.subscribe('spawn').forEach(method => spawn.apply(game, method.arguments)); game.viewport.subscribe('mount').forEach(() => { game.renderer.bind('default', [ fragment, vertex ]); });});```It should be pretty simple to follow; it registers input devices, subscribes to tasks from the server, and then binds the webgl context to a "default" program (pair of shaders).I'll be posting other snippets of code here and there to show off the API. Link to comment Share on other sites More sharing options...
SolidLink Posted June 30, 2018 Share Posted June 30, 2018 Looks good chief. Really like the progress on this, can't wait to see more :) Link to comment Share on other sites More sharing options...
Chief Posted June 30, 2018 Author Share Posted June 30, 2018 Just updating some of the readme with planned features: [Does it come with editors?](https://github.com/cyclonic-games/vorge/blob/master/readme.md#does-it-come-with-editors)---#### **Does it come with editors?**Yes, it will! I want to bake the engine and server out, work on the git-based package management, then jump right into developing the editors/creation suite. It will also be JavaScript and probably run on Electron.##### **Future Planned Features**- Extensions (Make your own tools!)- Tile Map Editor- Quest Editor- Entity Editor- Script Editor- UI Designer- Deployment Manager (CI/CD)- TBD Link to comment Share on other sites More sharing options...
SolidLink Posted June 30, 2018 Share Posted June 30, 2018 Looks good chief, I'm hyped for the screenshots promised Link to comment Share on other sites More sharing options...
Chief Posted July 1, 2018 Author Share Posted July 1, 2018 Been working hard on the engine. Below you can find a code snippet that shows off the "common" plugin. This plugin does a lot of the setup and boilerplate to make your job a lot easier. It's an update from my previous code paste.```javascriptconst Plugin = require('../../core/Plugin');const Gamepad = require('./devices/Gamepad');const Keyboard = require('./devices/Keyboard');const Mouse = require('./devices/Mouse');const fragment = require('./shaders/default/fragment');const vertex = require('./shaders/default/vertex');const amend = require('./tasks/amend');const authorize = require('./tasks/authorize');const handshake = require('./tasks/handshake');const pong = require('./tasks/pong');const spawn = require('./tasks/spawn');const utilities = require('./utilities');module.exports = new Plugin('common', game => { const std = game.libraries.use('std'); game.devices.install(new Gamepad('gamepad')); game.devices.install(new Keyboard('keyboard')); game.devices.install(new Mouse('mouse')); game.tasks.subscribe('handshake').forEach(method => handshake.apply(game, method.arguments)); game.tasks.subscribe('pong').forEach(method => pong.apply(game, method.arguments)); game.tasks.subscribe('authorize').forEach(method => authorize.apply(game, method.arguments)); game.tasks.subscribe('spawn').forEach(method => spawn.apply(game, method.arguments)); game.tasks.subscribe('amend').forEach(method => amend.apply(game, method.arguments)); game.viewport.subscribe('mount').forEach(() => { game.renderer.bind('default', [ fragment, vertex ]); }); game.loop.subscribe('update').forEach(() => { std.systems.move.run(game.initializer.heap.entities.get(game.world.player), game); for (const id of game.world.entities) { std.systems.move.run(game.initializer.heap.entities.get(id), game); } }); game.loop.subscribe('draw').forEach(() => { game.renderer.clear(); utilities.fill(game.renderer.webgl); for (const id of game.world.entities) { std.systems.render2d.run(game.initializer.heap.entities.get(id), game); } std.systems.render2d.run(game.initializer.heap.entities.get(game.world.player), game); });});```Below now you can find a really stupid looking screenshot, but it helps to show off that the WebSocket networking and the WebGL renderer are both working nicely together when there are multiple players.![](https://i.imgur.com/PmVh47S.png)The FPS meter in chrome (top right) bugs out, but the engine gets ~60FPS (max in-browser) Link to comment Share on other sites More sharing options...
SolidLink Posted July 1, 2018 Share Posted July 1, 2018 You're code looks simple and easy to understand, your screenshot also looks nice. I really like the character design. Keep it up! Link to comment Share on other sites More sharing options...
Chief Posted July 2, 2018 Author Share Posted July 2, 2018 Extremely early shot of the editor application, just to show progress. The actual UI will definitely change as I go.![](https://media.discordapp.net/attachments/282274126888960000/463458480095887362/uiuiuiui.PNG?width=841&height=660) Link to comment Share on other sites More sharing options...
SolidLink Posted July 3, 2018 Share Posted July 3, 2018 reminds me of VSCode's UI, but it looks great! Link to comment Share on other sites More sharing options...
Chief Posted July 3, 2018 Author Share Posted July 3, 2018 ![](https://cdn.discordapp.com/attachments/355751891663060992/463556212672167938/uiuiuiui.PNG) Link to comment Share on other sites More sharing options...
SolidLink Posted July 3, 2018 Share Posted July 3, 2018 Good job <3 You should make a roadmap Link to comment Share on other sites More sharing options...
Chief Posted July 4, 2018 Author Share Posted July 4, 2018 ![alt text](https://cdn.discordapp.com/attachments/282274126888960000/463886457162039307/uiuiui.PNG) Link to comment Share on other sites More sharing options...
Chief Posted July 5, 2018 Author Share Posted July 5, 2018 ![alt text](https://cdn.discordapp.com/attachments/457542797013024781/464259478301442048/uiuiui.PNG) Link to comment Share on other sites More sharing options...
SolidLink Posted July 5, 2018 Share Posted July 5, 2018 nice intersect mod there pal u owe me $100 a ball Link to comment Share on other sites More sharing options...
Chief Posted July 6, 2018 Author Share Posted July 6, 2018 ![alt text](https://media.discordapp.net/attachments/337995840280985610/464600278919020544/uiuiui.PNG?width=970&height=660) Link to comment Share on other sites More sharing options...
Chief Posted July 6, 2018 Author Share Posted July 6, 2018 Eclipse 2.0![](https://cdn.discordapp.com/attachments/170045736090730496/464552946508627988/ohdamn.PNG) Link to comment Share on other sites More sharing options...
Chief Posted July 20, 2018 Author Share Posted July 20, 2018 Took a break for my mental health, but I worked on the script editor today.![](https://cdn.discordapp.com/attachments/282274126888960000/469679709253271562/script-editor.PNG) Link to comment Share on other sites More sharing options...
Chief Posted July 20, 2018 Author Share Posted July 20, 2018 Working on the 2D tile mapper today![](https://cdn.discordapp.com/attachments/355751891663060992/469904108912902144/uiuiui.PNG) Link to comment Share on other sites More sharing options...
GeneralAwesome Posted July 20, 2018 Share Posted July 20, 2018 Looks nice. I like how sleek you've made the interface. Are chunks essentially the same as maps? With Realms being a collection of maps which stitch together seamlessly? Link to comment Share on other sites More sharing options...
Chief Posted July 20, 2018 Author Share Posted July 20, 2018 Yup, that's exactly what they are. I'm glad it was obvious. Link to comment Share on other sites More sharing options...
Chief Posted July 28, 2018 Author Share Posted July 28, 2018 Working on the asset manager/file explorer![](https://cdn.discordapp.com/attachments/282274126888960000/472840015144026113/explorer.PNG) Link to comment Share on other sites More sharing options...
Chief Posted July 29, 2018 Author Share Posted July 29, 2018 ![](https://cdn.discordapp.com/attachments/170045736090730496/473201213165404161/ui-designer.png) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now