Bad Mars? More Like Awfully Mars.
Steady progress coming along for the game. Not many visible changes, however there have been a lot of backend changes.
You can't tell, because it looks the same. However the site has moved to a fresh new VPS! I've migrated all of my personal services, and the site is now running inside docker containers on Centos 7. Firewalld is a huge improvement for making it easy to lock zones down and easily forward ports. Rather than install packages like crazy, the webserver (still nodejs) and database (still mongo) are just now in docker containers. Now it's easier to test them locally and perform backups, and all while keeping the server relatively clean.
New FFXIV Market Crafter
FFXIVMC is in the process of being re-made in go on appengine. So far all the hard bits are done, however i have not made the new version public on github. Currently It's now a bit tricky to get the FFIXVapp plugin working, at least on windows 10. Writing a stand-alone network scraper for ffxivmc might be reasonable, but then I'd have to deal with Windows and WIndows networking. Yuck.
The new FFXIVMC is much faster and more robust, this time around. It even has unit and API tests, so I might be less inclined to break it. So far, all the hard parts are working, so then I just need to finish up writing the code to actually calculate the most profitable items to craft, and it will be feature complete with the old version (and less likely to crash)
A lot of under the hood changes to BadMars. There are still a couple of bugs with unit movement that are making the server freeze, and fixing that is the current task. Fixing the bug that's making one of the services freeze will fix the issue, however the server will need to get a few tweaks to handle partial lockups more gracefully when a few specific units are bugged out. Also, right now first login is kind of slow, when the server hunts for a spawn point.
I've been experimenting with a few ways to handle orchestrating the several services that make up the backend. With a little bit more work and tidying up, it should work fine on a regular docker host or on Kubernetes. However for now i want to focus on a simple master Go program to handle starting up the server and an admin dashboard, and an additional Go slave program to make it easy to manage multiple physical servers running the game.
The UI recently was rebuilt in React, and along the way, chat was added. Now you can yell at people as you send tanks to attack them (crucial game feature). A display for the factory build queue was also added.
The next few tasks will involve wrapping up the core gameplay, with bug fixes and performance improvements, along with some graphics updates. As things stabilize, The next task will be to add more units and work on balancing. Fast scouts, long range artillery, air units and naval units will all be coming. Moving unit definitions out of a fixed config and into the database, and adding a dashboard for editing unit stats on the fly will make balancing much more thrilling. The client can already handle having new unit metadata pushed to it on the fly. After a little bit more refactoring, the game should be totally fine with having new units and graphics added to the game while it's running, without interrupting users.
A lot of progress has been made on BadMars! I've been hard at work testing updates on my super-secret dev server, taking feedback from a few RTS players.
Now, for some background on Badmars. A long time ago, the genre of MMORTS had a few big names. Some of these games that i got to play were Beyond Protocol, Boundless Planet, and Ballerium. Don't bother to dissappoint yourself by googling them, as only Beyond Protocol still exists as an open-source fan revival named After Protocol. My favorite from those days was Boundless Planet, as it was fairly vanilla but very unique as a large 'persistent' mmorts. There are a number of changes to make to the RTS formula to fit MMORTS. One of the more interesting changes is forcing units to carry resources, and have a limited supply range around them, instead of having a global resource pool.
My goals with BadMars is to try my own take at an MMORTS. I've already reached a few of the first goals, which include planet generation, unit pathfinding, and multiplayer. However an RTS isn't going to be fun if it isn't balanced. There is more progress to be made, however the process of making and testing changes is fairly quick. All unit balancing is configured in a units.json file, which is watched by the server. Any changes are automatically loaded and broadcast to all users. Updates to the server and client code aren't quite as smooth, but not too bad. The world state is saved back on mongo, and the server can be killed and restart very quickly. Which makes it nice for use with supervisor, as it's very easy to see code changes in production quickly. Currently I am using browserify to build a single js file for the client, with gulp watching for client gode changes. This works for now, however I would like to get some cooler features like hot reload for both client and server.
Work on the HUD has begun. So far I've been using react to create all the fancy interactive HUD elements like buttons and unit info widgets. Overlayed over the ThreeJS panel is a canvas panel for drawing 2D HUD elements like the square when dragging to select, and maybe elements like the minimap in the future.
The iron deposit model in the game has had an upgrade, and now looks like a white mineral deposit. I even 3D printed out a copy of it. It barely took any time to model, add to the game, and have the 3D print made. The lack of time invested might show, however that's programmer art for you.
Unit combat has received some improvements. A new damage effect has been added, that displays a simple transparent grey sphere when a unit is taking damage. Tanks now have a sound effect for when they shoot, however the shooting sound location is a little bit buggy at the moment.
The selection box was an interesting problem to tackle. My first approach was to use ThreeJS's frustum object to find all objects within the 3D region projected out from the camera, however 3D math isn't my strong suite. Luckily one of my friends helped me with a better solution. I already had the vectors for each corner of the 'click and drag' selection square, and it was easy to get the vector from the camera to each unit in the area. Then it was just a matter of some simple math to see which objects were within the selection square.
There is now a super-awesome analytics system that was built from scratch by one of my friends. Excluding horrible failures, all bugs and errors will be logged so i can work on fixing them.
I've started working on the building system, which steals some ideas from Factorio. Most RTS games revolve around lots of micro-management, like selecting what builder unit to use and where to tell them to build something. Now, it's hard to imagine a futuristic RTS where units can't be intelligent on their own. How can you have an automated factory pumping out tanks, yet you have to find where your builders went just to tell them to build somewhere? That's why i'm going with the Factorio "building ghost" idea. The player will just place down a ghost, and the units will figure things out on their own. Transports will load up with resources and start moving them to the build site, and the nearest builder will make it's way over to begin construction. The player could even take a snapshot of a base as a blueprint to produce many cookie-cutter bases, as long as they have enough resources and the ability to get resources to the build location.Here is a teaser screenshot:
A lot of progress has been made, however there is still a lot more to do. Pretty much everything done so far could use some TLC and a bit of a rewrite, however the first step is to make it work. Once it works, then i can make it fast, and iterate on making it better. The next few features to add will be finishing unit construction, adding fog of war, and adding chat. However there will still be a lot more work beyond that. Currently the server sends the entire game world to the client, however it should only send chunks that the player can see, and only send units that should be visible to the player. Pathfinding on the server also needs a lot of work, however is functional for now. It needs some improvement for finding situations where it needs to 'give up' like when the user tells a unit to move to an inaccessible location. The A* pathfinding system also currently halts the simulation tick, and should probably be re-worked into an asynchronous generator function to reduce lag, since pathfinding isn't immediately critical. In fact the entire unit simulation system on the server needs a bit of a re-write now that the actions that a unit needs to decide have been fleshed out. There are a lot of decisions that need to be made by units with each tick, and values on a unit that have to be updated every tick.
Badmars is now updated with basic A* pathfinding. Most of the recent work has been in refactoring a lot of code, mainly separating out the navigational logic and simplifying how tiles are handled. Progress is progress! All changes can be found on github.Planet Viewer
I spent the weekend working on some updates for badmars. So far it has a fully working planet generator, and some of the basics in for navigation with obstacles like cliffs and water. I just got unit selection and movement working, however it ignores terrain currently.
You can place tanks, and select them with left click. once a tank is selected, you can right click to tell it to move. Saving maps is currently restricted to admins.Planet Viewer
The Minecraft server is still online at mine.japura.net on the default port 25565.
We also now have Wurm Unlimited and Space Engineers servers! they are both whitelisted servers, so please contact me on steam (Monofuel) if you want to join. Both games have a fun sandbox environment, and i just want to make sure we don't get any troublemakers that I don't know. However if I do know you, then feel free to make trouble.
Most of the website is now working! Here's a quick rundown of things that i'm still working on
- Dynmap is missing some features. I need to dig through and fix a few paths that i broke from moving things
- Webchat with the game server via IRC is missing from the site, and I'm not sure if we need it since it wasn't used very often
- The whole profile system in general needs some polishing. Logging in at the moment only gives features for admins
- A new server status indicator is in the works, it will use my nagios server and update status in real-time for what game servers are up
My current goals are to improve the look and feel of the website, and polish up the blogging system. My goal is to allow some players the ability to make blog posts to the site, with images and videos. I can flag some of the cooler posts to be shown on the front page, so that I'm not the only one who can add cool content to the site. The previous Octopress system was really nice, however i want more input from users into what is shown on the website.
I've finally made a tutorial video for the server!
All the game servers will be going through a migration to a different location. They will be down for a few hours, and will be back up again at mine.japura.net.