Update (7/13): Preliminary t-shirt designs with the new Zetawar logo have been posted here.
Zetawar is a web based tactical strategy game similar to Weewar and Elite Command. In it players control armies of units (soldiers, tanks, etc.) on a map of hexagonal tiles. Each player takes turns building new units and moving, attacking, and capturing bases with their existing units. When only one player's bases and units remain, that player wins. If this campaign succeeds Zetawar will also have a programmable AI interface and support for custom maps, units, terrain, and rules.
Brief factual descriptions aren’t that compelling though, so please...
Earlier this year I decided to play a round of Weewar (an online turn based strategy game) with my wife. I hadn't played it in a while, but I enjoyed it in the past and wanted to play something turn based since our schedules didn't allow much time for gaming together. Sadly, I discovered EA had shut it down. I also found a similar game, Elite Command, that had been discontinued as well. While I don't think it's reasonable to expect EA or the author of Elite Command to keep these games running indefinitely for what is no doubt a relatively small group of people, it does seem like a shame that the fans of these games couldn't somehow keep them running themselves.
Thus the idea for Zetawar was born. Zetawar attempts to solve this problem by being open source and simple to host. If the need ever arises, it will be easy for the player community to take over and keep it running. Also, as a side effect of this, it will be easy for anyone to run their own copy of Zetawar.
It's almost impossible to write a game without trying to add your own favorite features, so Zetawar has a few goals beyond just being an open source, simple to host, Weewar-like game.
Customization — Unit stats, terrain effects, tilesets, and some game rules in Zetawar will be modifiable by players. This will enable everyone to help improve Zetawar and should keep the game interesting for a long time.
ClojureScript — Zetawar is written in ClojureScript because it provides the best combination of enjoyment and productivity of any programming language I've used. By making Zetawar open source, I hope to encourage more people to try ClojureScript and provide a useful example code base to the ClojureScript community.
- Rules based on Weewar and Elite Command
- Units — infantry, grenadier, mortar, ranger, humvee, tank
- Multiplayer — up to 4 players; hot seat (local) and play by email/chat using URL sharing
- Custom maps
- Custom single player scenarios
- Fully customizable rules, unit and terrain stats, and tileset
- Programmable AI
- App server free design (simple to host)
- Completely open source ClojureScript code base
- Game logic decoupled from user interface (implement your own interface!)
- Source code documentation and test suite
Why You Should Care
Hopefully you want to play the game, but depending on your interests here are few more reasons you might want to consider supporting the project:
- You get an online strategy game you can invest time and energy in without fear of it being shut down or disappearing.
- In-depth customizability means Zetawar should stay fresh and interesting for a long time.
- The ability to change tilesets, unit and terrain stats, and rules means you can use Zetawar to prototype similar strategy games without writing any code!
- Interested in programming your own browser game in a functional language? The Zetawar code base can be a source of inspiration and ideas!
- Exploring the code base is a great way to learn more about ClojureScript, Reagent, DataScript, and Posh.
- The programmable AI interface can form the basis for meetup hack sessions and training curriculum projects.
- The separation between application and game logic allows you to write your own UI. Don't like Reagent? Want to learn Om.next, Rum, or React Native? Write your own Zetawar interface!
- The programmable AI interface can be used for class assignments and programming contests.
- Unlike many online AI contest platforms, the code is 100% open source. If you find issues, you have the ability to debug and fix them yourself.
- Zetawar is a fun game in its own right. This can help engage students who have difficulty finding less human-friendly AI competition environments interesting.
Note: Terrains and units are shamelessly borrowed from Elite Command (Copyright Chris Vincent CC BY 4.0, used with permission). Rather than innovating in this area I am using a proven game design to reduce risk and help bootstrap the project. The customizability of Zetawar (discussed below) should provide more than enough room to add novelty as the game matures.
As mentioned above, one of Zetawar's goals is customizability. This will be accomplished by providing a data format that describes game rules, unit stats, and terrain effects. When starting a new game, players will be able to provide a file specifying the rules and settings for that game. Below are the planned customization options.
Game Rules — max unit health, enable/disable ability to move through friendly units, enable/disable attack bonuses (flanking, etc.)
Units — name, description, cost to build unit, movement points, ability to capture, attack range, armor type, armor amount, image, terrain movement costs, terrain attack and defense bonuses, attack strength
Terrain - name, image, unit movement costs, unit attack and defense bonuses
Note: Terrain bonuses are included as part of the unit definition. They are listed twice above (under units and terrain) to emphasize that all aspects of the terrain can be customized.
For those interested in the code, it's worth explaining a bit about its structure. Zetawar is written in ClojureScript and roughly follows the re-frame pattern. The UI is rendered by Reagent and is mostly a pure function of the application state stored in a DataScript DB. The Posh library is used to link Reagent to DataScript and is responsible for rerunning queries when relevant data has changed. State transitions are handled by callback functions that execute transactions against the DataScript DB. The event handlers are a slight deviation from the re-frame pattern. They are not pure functions and they are called directly rather than dispatched through a central dispatcher. Their impurity is necessary because Posh functions as a listener on the DataScript DB and therefore needs updates to happen via calls to transact. The lack of central dispatching is mostly a matter of expedience (i.e. technical debt) and will likely change in the future.
: I use component local state occasionally.
I’ve made great progress on the prototype, but there’s still a lot to do. In order to implement the features I’ve described above I need to focus on Zetawar development for 3 to 6 months. However, I don’t have the budget to do that myself. I need your help to fund my time working on it so that Zetawar can become a full featured game!
Also, this adorable bunny will starve if you don't support the project:
Ok, that won't really happen, but he is super cute. I bet you're glad you scrolled down far enough to see him.
The features I’ve outlined above are what I consider to be the minimum requirements for Zetawar to become a healthy open source project, but there’s a lot more I’d like to do given more time. If I raise more than my initial funding goal, I will implement more features.
$20,000 — More land units
- Sniper, artillery, heavy tank
- Medic (can heal other units)
$25,000 — Air units
- Mobile flak (anti air)
- Gunship, fighter, bomber
$30,000 — Sea units
- Transport (can transport other units across water)
- Destroyer, cruiser
$35,000 — Roads and bridges
- Support for roads and bridges in map definitions
- Engineer (can build roads and bridges)
Note: In order to be confident that I can deliver what I am promising, these goals are intentionally conservative.
I mentioned this in the units section, but I am repeating it here for emphasis. I want to give full credit for the basic game design to Weewar and Elite Command. In particular I want to thank Chris Vincent for releasing the source code to Elite Command. Although Elite Command does not have the easy to host design that Zetawar aspires to, it has been an invaluable reference in terms of gameplay. Reusing the graphical assets from it has also saved a huge amount of time and allowed me to make progress much more quickly than would otherwise have been possible.
Frequently Asked Questions
How will multiplayer work? — For local games, players will simply take turns on the same device. For games over the network, the game state will be encoded in a URL that can be passed to the next player at the end of each turn. Notifications will be supported so that players do not have to literally copy and paste URLs.
Isn't $15,000 kind of a small amount for the length of time you're planning on working on Zetawar? — Yes, good observation. I really want Zetawar to exist, so I'm partly self funding. Rest assured that $15,000 really is enough to allow me to focus on it for the allotted time.
I want to give you more than a dollar, but I don’t want to have my name listed anywhere. Can I do that? — Yep, definitely. You can either choose the $1 reward and enter a different amount or you can choose one of the other levels and indicate on the follow up survey that you would prefer that your name not be listed.
Why are the t-shirts so expensive? — This is essentially a one person project. Time I spend on t-shirt reward fulfillment is time I'm not spending working on Zetawar. I need to make sure it's worth it to fulfill those rewards. Consider it a perk. They're more collectible that way!
The rewards all say they'll be delivered in July, August, or September. Does that mean that's when the game will be done? — No, those dates are just for the rewards. I'm hoping to reach feature completion for the game (not including stretch goals) by sometime in October.
Risks and challenges
Since I already have a working prototype, I have high confidence in my ability to complete the project. The prototype demonstrates the design works, and open sourcing it should be a straightforward task. The primary risk is that I have underestimated the time needed to complete the remaining planned features. To mitigate this I will be releasing features as they're developed. Even if I have been overly optimistic in my estimates, Zetawar should still have many of the planned features implemented before I am forced to reduce the amount of time I dedicate to it. Also, whether or not I have estimated correctly, I intend to implement all planned features. However, if I am forced to reduce the time I spend on Zetawar due to inaccurate estimation, it will take longer to implement those features.Learn about accountability on Kickstarter
- (30 days)