Discussion in 'WIP and Development Status' started by Stealth2800, Jan 13, 2014.
Is this api in a working state yet?
cant wait for it to be done. Im usually good at figuring something out but im completely incapable of making a minigame that will start and end with multiple teams.
I'm now working with a server and I will be developing this for the minigames on that server. That should hopefully speed up progress a bit.
For this kind of thing to succeed and become useful, you need to consider all of the existing, well-established minigame plugins. For them to join along, it has to be possible to implement support for this framework very easily, and it has to be non-intrusive, so they can function without it as well. I've been thinking about unified minigame frameworks since the first time someone said "I can join arenas while in <other minigame>" on the MobArena IRC channel, but the biggest problem I found is making it vague enough that any type of minigame can easily hook in, and still specific enough that it provides some sort of usefulness instead of just "implement these interfaces all over the place, but you still have to do everything yourself". Generic interfaces for full control, abstract half-implementations for a starting point, and full implementations for easy compositional design to create new games just from what is in the framework. You'll likely need to cover all three (like how e.g. Swing does it).
A few thoughts on the problem of finding boundaries:
A game does not necessarily have to be endable. Consider a classic free-for-all battle where you respawn 30 seconds after dying, and the game never really ends. Players can join and leave as they please without repercussions (aside from perhaps losing their session score).
Games do not necessarily have to have regions. With Minecraft being an open "infinite" world, it is only natural to want to make types of games that exploit this. For example, consider a minigame in a world of its own, where the goal is to be the first person to build full diamond armor. It might not be feasible to create a region of 1000 x 1000 blocks - maybe more space is required.
Some minigames have the notion of a pre-game phase (e.g. picking classes in the lobby in MobArena), which perhaps should not be counted as the game having started.
Concurrent sessions for a particular minigame should be possible (e.g. multiple arenas in MobArena), so "this minigame has started" might not be appropriate when it is still possible for other sessions to run concurrently.
I'm not saying you haven't given any thought to any of these problems, but I want to make sure it's up there. I'd love to see a unified framework for minigames so I don't have to make silly hacks like disabling certain commands in the arenas, but there is no way I'm rewriting MobArena to dependon it to even work, just like it doesn't depend on Vault for permissions, but uses it when it is available.
garbagemule Thank you for your input! I will most likely be taking many of your suggestions into consideration as I continue writing the library. One of my main goals when I first had the idea to create this was to think about how existing minigames could easily be compatible with this library without having to rewrite much.
I will most likely be rewriting a major portion of the library as a result, as I feel it is too structured for minigames to use at the moment.
Can I use Gamegine now?
Will be enabled java-docs?
Summer break has started for me. Time to get this done.
mr_snake302 It's not quite ready yet, although Javadocs are available now, so you'll be able to use them once the library is ready. http://ci.stealthyone.com/job/GamegineAPI/javadoc/
I just updated the main post with some new information.
Added a link to my Jenkins server
Updated the status
Added some more information to the bottom of the 'Concept' section
Things are now moving at a reasonable pace. We're getting closer and closer to a usable library.
Exactly. I've worked on a lot of different engines so I can do the process of making a minigame easier, but I eventually ended up copying/pasting the classes into the projects and modifying it (such as the SkySG on the Sky Network).
There's a lot more than what garbagemule said that you need to apply to this. Run through a lot of popular (unique) minigames and think, can my engine handle that. If you need any help with anything, feel free to ask. It's pretty hard to make a universal engine, as all of these games are different.
Ultimate_n00b I'm taking it from a slightly different approach now.
The main goal of Gamegine now is compatibility between multiple game plugins on a single server. What I'm doing for that is creating a system that keeps track of the games that players are in. Game plugins will let Gamegine know when a player joins a game running under it. Then, it's up to other game plugins to check with Gamegine to make sure that players aren't already in other games prior to adding them.
The side goal of Gamegine is offering a library for creating games, like I originally planned. I'm creating very simple interfaces and then implementing more classes based on those. As a result you'll be able to choose the level of development you want to use when creating a game using Gamegine. Like garbagemule stated in his post,
Currently, the compatibility portion IS implemented. However, I plan on adding a command blocking system before I actual release a version of Gamegine officially.
Some base game creation classes in the library are also complete, although there still are a few more I need to add before the library itself is ready.
Thanks for your input, it's greatly appreciated and always welcome.
I completely forgot about this thread. In the meantime, I've started the Arcade project with slipcor. Arcade's purpose is nothing more than a Vault'esque common interface for minigame and minigame-aware plugins, and it's being made with "dependency hell" in mind, i.e. it's possible for minigame plugins to "join" the Arcade project without modifying their own source code and without adding Arcade as a project dependency (assuming they have join/leave events implemented already), by simply submitting a pull request with the proper listeners. The awareness part has to be implemented on the plugin-side of things, though. The true force of Arcade is the microscopic footprint and the UNIX mindset of "doing one small job, but doing it well". Perhaps it's not a bad idea to split the responsibilities and just have Gamegine utilize Arcade?
If you want any extra help in the project just ask.
garbagemule Hm, I may do that. I'll probably make both ways compatible though:
Compatibility via Arcade
Compatibility via implementing the 'Game' class from Gamegine.
The post above yours stealth was suppose to be for you as well =P (Thought I tagged both of you)
MCForger Ah okay, I'll let you know if I do.
There was a very good point in a comment on the Arcade project page; use metadata for checking if a player is currently in a minigame instead of a dedicated plugin. I think it's a good idea, but it has a few issues as well (check my response). Feel free to engage in the discussion in the comments; I feel like it might be a more appropriate place to have that kind of discussion, since it's a little off-topic for this thread - my apologies.
garbagemule Hm, sounds interesting. I don't have access to the project though - it says it's under moderation.
Hah, more information required and an incorrect category. Should be back up now
You should get a bukkit dev page once beta/alpha is ready.
The Fancy Whale http://dev.bukkit.org/bukkit-plugins/gamegine/ The BukkitDev page exists. I'll update it once beta/alpha is ready, of course.
I've also been making a 'Game API', and added Map Switching. (Such as the Mineplex or Overcast Network)
I think it was a little easier to do, since you didn't have to save a million variables for an Arena, just save the list of Maps that are in the Arena. All the maps are also unloaded until they are played on, meaning no saving broken blocks or denying block manipulation all together. This would also allow for a more fluid movement from game to game. Instead of kicking all the players out when a game ends, teleport them to the lobby, unload the previous map, load the next map, tp them there. It really gets rid of a lot of problems, and works with any game.
TL;DR: Map Switchers are cool.
Stealth2800 Whats the current state?
Onlineids I had a burst of inspiration recently and got a bunch of work done. It's nearly in a working state although it won't have much pre-developed code in the library part of the project when I release the first alpha build.
I recently wrote some documentation but there's still a lot more to be written. You can see what exists so far at https://github.com/Gamegine/GamegineAPI/wiki
Stealth2800 When im back off holiday I woulx love to write lots of code for you to speed process up, anything on your todo list I could do?
bwfcwalshy Currently, it's really up to me to get the structure of the library done. Once that happens, you can contribute code to make that structure come to life.
I'm working on another plugin to quickly save/load/regenerate large chunks of terrain without causing the lag that WorldEdit does. It would be ideal to save and load stadiums for your plugin (obviously not quite as fast as doing a copy of another world, but better than most)
mythbusterma Awesome! I may look into using that for arena regeneration then.
Separate names with a comma.