Skip to content
Matias Forbord edited this page Jun 26, 2020 · 3 revisions

Provided here are a list of larger features that we feel would be good to see in CodeCombat. They range from beginner-level all the way up to crazy compiler stuff, take your pick. To try most of these projects you'll need a basic understanding of CoffeeScript (JavaScript with a more Python/Ruby-like syntax). You'll be working with over 400 other contributors in order to create the best coding game ever created!

Steps to Contribute

  1. Get your development environment set up.
  2. To get a great feel for the project, make a small pull request or two.
  3. You should also sign up as an Archmage, follow our forum, and watch this GitHub repository.
  4. Play through some of our existing levels to get a feel for the game.
  5. Read through some of the articles on our Archmage wiki to better understand the code.
  6. Talk to us about the project you want to build.

Project Ideas

  1. Make Aether Transpiler More Friendly
  2. Build More Levels
  3. Create More Items, Heroes, and Special Abilities
  4. Improve Treema (JSON editor)
  5. Build Automated Level Testing Harness
  6. Add More Programming Languages
  7. Improve iPad App Performance
  8. Upgrade the Level Editor
  9. Organize Multilingual Audio Recordings
  10. Improve Game Physics
  11. Add WebRTC Voice/Video Chat to Multiplayer
  12. Add Responsive Sound / Music
  13. Create Developer Tools Window
  14. Build Massively Multiplayer Sandbox Play
  15. Your Own Idea
Make Aether Transpiler More Friendly

Throughout the process of parsing, transforming, compiling, and running user-submitted code in the game world, there are hundreds of different types of info, warning, and error messages that can result. Most of these were designed for experienced programmers, like Expected an identifier and instead saw '}'. That doesn't help anyone learn to code if they don't know what an identifier is! Our Aether transpiler can rewrite, anticipate, and friendly-ify all possible error messages, but each type of problem needs to be thought out and made more understandable to beginners. In addition to coming up with friendly error messages, you'll need to write a lot of abstract syntax tree traversals to find the problems before they become runtime errors.

Expected results: Aether's info/warning/error messages are beginner-friendly so that CodeCombat players can understand what's going wrong with their code instead of concluding that this programming stuff doesn't make sense.

Knowledge prerequisite: Good programming fundamentals, good writing skills, and some knowledge of CoffeeScript or JavaScript.

Difficulty: Medium. Most of the error messages will be simple string replacements with perhaps some interpolation, but some will require some really smart parser alterations.

Build More Levels

Want to make CodeCombat levels to teach regular expressions? Math? Physics? Recursion? Advanced RTS AI micro skills? Want to make super-hard dungeon crawl series? Want to do a level progression with your own game mechanics ideas? CodeCombat's level editor is yours to command! It's an extraordinarily powerful, drag-and-drop, live-programmable editor inspired by the StarCraft II Galaxy Editor, and you can use it to build just about anything. All Artisans share Systems and Components, so the building blocks you create to enable custom logic in your levels will be available in everyone else's levels and vice versa.

Expected results: Dozens of fun, playable, polished levels that fit into CodeCombat's existing campaigns.

Knowledge prerequisite: An interest in game design, and basic programming knowledge. You don't need to know any programming to use the level editor, but presumably you're trying to teach some programming, so you need to know at least what you're teaching. It will also help to know JavaScript / CoffeeScript if you want to write custom Components and Systems, which will be needed if your levels are significantly different than existing CodeCombat levels.

Difficulty: Medium. Although the coding is easy, it takes a lot of thought to make good levels, so expect to iterate a lot on each level.

Create More Items, Heroes, Enemies, and Special Abilities

We have hundreds of items (swords and watches and rings, oh my!) and a dozen heroes done or on the way, but as we build more and more advanced levels, we can introduce many more items, heroes, enemies, and special abilities tied to those items, enemies, and heroes. Want to make a plan for what cool items and heroes to add, figure out the game balance for them, tell our illustrator what to draw, and code up the new skills? Then you can make lightsabers, portal guns, mirror shields, flying giants, or whatever you want! The game is your playground as you create powerful new Thangs that our elite players will die for.

Expected results: Hundreds fun, novel, and balanced items, enemies, heroes, or abilities that fit into CodeCombat's existing campaign progression.

Knowledge prerequisite: An interest in game design, and basic programming knowledge. You don't need to know any programming to use the Thang editor, but if you want to add special abilities, you'll need to know enough to at least copy other abilities we've already done. It will help to know CoffeeScript for this.

Difficulty: Medium. Although the coding is easy, good game design takes a lot of thought and some basic mathematical modeling to ensure balance.

Treema is a jQuery plugin that builds interfaces for editing large, complex, well-defined JSON data. It runs on tv4, which implements JSON-Schema validation. We use it for our Level, Article, and Thang editors, and it's generally useful in any project which wants to generate UIs for JSON data. It works pretty well, but there are a bunch of refactorings and improvements and upgrades that'll make it really shine, not just in CodeCombat, but in many other projects which need to deal with JSON.

Expected results: Treema will be polished to a gleaming shine and take over all online JSON editors.

Knowledge prerequisite: Basic web development knowledge and CoffeeScript or JavaScript.

Difficulty: Medium. Treema's code is small, but very meta, so you'll need to be able to understand some complicated schema-schemas.

Build Automated Level Testing Harness

As we get more and more levels, it becomes harder to make changes to the game engine while still making sure that we don't break the balance on any of the levels. A good solution for this will be to make an automated level testing harness where we can test game engine changes against all past levels to make sure that failing solutions still fail, successful solutions still succeed, etc. Then we'll be able to improve the game engine with much more confidence, as well as have a quick way to see which levels are having problems with their intended solutions. This would have a web front-end but probably mostly run on the server using our headless level simulator.

Expected results: CodeCombat has automated testing for its levels the way it has automated unit testing for its code.

Knowledge prerequisite: Basic web development knowledge. We use CoffeeScript, Jade, and Sass, but those are easy to pick up if you know JavaScript, HTML, and CSS.

Difficulty: Medium. The front-end will be easy, but the server code will be pretty involved, so it's a good opportunity to learn more about Node.js.

The Aether transpiler currently parses and transpiles JavaScript, Python, CoffeeScript, Lua, Clojure, and Io code into safe, yielding, instrumented JavaScript that can be integrated into the CodeCombat game engine and other projects. If you want to see CodeCombat players play in Ruby, C, Swift, or whatever language you think you can pull off, then you'd need to write or adapt an in-browser parser for that language to the Mozilla Parser abstract syntax tree format.

Expected results: Players can play all CodeCombat levels in the new language.

Knowledge prerequisite: Basic understanding of parsers. Familiarity with the language you're trying to add. CoffeeScript or JavaScript will help, but they're easy to pick up.

Difficulty: Harder the further away from JavaScript the language is. Something like TypeScript or Roy would be easy, whereas languages like Haskell or Ruby would be hard, and some static languages like C++ would be very hard.

Improve iPad App Performance

CodeCombat is a web app written with cross-platform HTML5 in mind from the start, and we developed a complete iPad app which wraps it in Apple's new, fast WKWebView. Unfortunately, it's still too slow and uses too much memory, so we can't release it. If you like optimizing performance, here's a challenge for you!

Expected results: Players can have fun playing CodeCombat on iPad.

Knowledge prerequisite: Advanced web development optimization. We use CoffeeScript, Jade, and Sass, but those are easy to pick up if you know JavaScript, HTML, and CSS. It may also help to know Swift and iOS development. And you'll need a Mac and an iPad 3+ to test with.

Difficulty: Hard. Our current efforts get it running slowly with occasional memory crashes on iPad 3 and almost smooth enough with rare memory crashes on iPad Air. We need it to be solid and smooth on iPad 3 and up, so we'll have to pull out all the stops to optimize our JS, reduce memory usage, and bundle native resources.

Upgrade the Level Editor

The level editor is really cool: drag-and-drop, completely configurable, and even live-programmable from within the editor itself. It's a powerful tool, but the user interface is always a challenge; the learning curve is too steep right now. You could do usability testing, improve the design, polish the rough edges, add missing features, write documentation, and generally make it easier to use such that anyone can figure it out and make their own levels.

Expected results: CodeCombat's level editor should be easier to use than it is now.

Knowledge prerequisite: Basic web development knowledge. We use CoffeeScript, Jade, and Sass, but those are easy to pick up if you know JavaScript, HTML, and CSS.

Difficulty: Easy. You can watch people try to make levels, see where they get stuck, and tweak the design until they stop getting stuck there.

Organize Multilingual Audio Recordings

We've built internationalization and localization tools allowing translation of almost all of CodeCombat's text (pretty much except for the names of the player's API methods themselves), but we still have some voiceover from the heroes that is only in English. We could organize our Diplomats to record this dialogue for us in their own languages so that even younger international players can understand it (since often they want to hear, not read, the instructions, plus having flavor sound bytes in your own language is always cool). This wouldn't take much coding, although if you can code, there is some to do to be able to use the sound files in game and visualize the recording completion coverage progress. But mostly it'll take patience and communication with all of our Diplomats to get the recordings done. Alternatively, if your coding is strong, you could build an HTML5-based speech recorder node for Treema that would allow anyone to record their language's audio from their browser, normalize the audio and remove noise using the web audio APIs, and upload it to our server in mp3 and ogg.

Expected results: CodeCombat's voiceover and hero flavor audio can be localized.

Knowledge prerequisite: Either good communication skills or good coding skills with a focus on JavaScript and web audio APIs.

Difficulty: Medium. Don't underestimate the difficulty of recording good audio and coordinating with dozens of contributors.

Improve Game Physics

CodeCombat uses a 2D physics engine with Box2D for collision detection, and we've written some basic position / velocity / acceleration stuff and locomotion dynamics, but there's so much more physics that could be done, enabling more physics-based gameplay and levels. Imagine coding the laser targeting system to solve reflection-based puzzle levels in CodeCombat, or levels where you adjust your thrust to guide your rocket. You could make that happen. Plus, we can always make it more performant, like by implementing quadtrees.

Expected results: CodeCombat should have a general physics system that enables lots of emergent physics-based gameplay while still being performant.

Knowledge prerequisite: Physics (mechanics) and proficiency with algorithms. Knowledge of CoffeeScript or JavaScript helpful.

Difficulty: Medium. The basics of the physics system are all there, so it's more about handling more mechanics and improving performance.

Add WebRTC Voice/Video Chat to Multiplayer

In CodeCombat's real-time cooperative and eventually competitive multiplayer, it's nice to be able to chat textually with other players, but it'd be even cooler to hook up voice and even video chat using the new WebRTC protocols. No more learning to code alone! You'd research and pick a high-level WebRTC library, integrate it into CodeCombat's multiplayer mode, and possibly figure out how to deal with trolls.

Expected results: Players can talk to each other and even see each other if desired.

Knowledge prerequisite: Basic web development knowledge. We use CoffeeScript, Jade, and Sass, but those are easy to pick up if you know JavaScript, HTML, and CSS.

Difficulty: Easy–WebRTC libraries do most of the work for you.

Add Responsive Sound / Music

We have some great music and sound effects, but they don't do enough to add to the immersion, since the sound and music that plays is often not adapting to what's going on in the game. Doing some smart music switches and possibly audio processing in the browser could go a long way toward adding to the fun. There's some really good audio APIs that would be great to put through their paces.

Expected results: CodeCombat's music and sound would adapt to the game environment for an immersive game experience.

Knowledge prerequisite: Basic programming knowledge and an interest in game design. Knowledge of CoffeeScript or JavaScript helpful.

Difficulty: Medium. In addition to figuring out the audio processing stuff, it's going to require a good design sense to figure out what music and sounds should play when and how they should be processed.

One thing that would make it much easier for Archmages to contribute to the CodeCombat code would be a way for them to see what's going on with the site as they're on it. Anywhere on the site, the developer could click a button or press a shortcut and open a Developer Tools like interface in a separate window which includes:

  1. Current view and subviews. They could be clicked to highlight what element that view represents. Show the module path for each one.
  2. Current instances of other classes and models and collections in existence.
  3. Events, subscriptions and keyboard shortcuts currently active, and what they call.
  4. Active log of events, subscriptions and keyboard shortcuts as they happen.
  5. Regular updating of all these as they change.

This could be used to:

  1. Edify an Archmage on what is going on with a given view. See what files are involved and how they're involved and how they communicate with one another.
  2. Debug issues involving tearing down objects and views and investigating memory leaks.

This could be created as its own open source project for all other Backbone-powered sites to use as well. We may want to build off of Backbone debugger extensions for Chrome and Firefox.

Expected results: It'll be easy for developers to find the code that's active in the app.

Knowledge prerequisite: Basic web development knowledge. We use CoffeeScript, Jade, and Sass, but those are easy to pick up if you know JavaScript, HTML, and CSS. Familiarity with Backbone helpful.

Difficulty: Easy. All of the info should be present in the Backbone view hierarchy at any time, so designing and implementing the UI will be most of the work.

Build Massively Multiplayer Sandbox Play

CodeCombat currently simulates a level from beginning to end every time the code changes and replaces the past, present, and future with the new results for a live-coding experience. This limits the size of the game levels that we can run, though. It would be fascinating to experiment with a persistent game world in which players' code changes didn't change the past. We could support huge levels with many players in open sandbox play, like Minecraft but actually programming the algorithms instead of executing them with zillions of pickaxe strikes. You would create a new game mode where the synchronous multiplayer (which already works) doesn't result in history replacement, then see how big you could make it and experiment with game design to find a sandbox environment that's really fun.

Expected results: CodeCombat should support a massive, persistent game world mode for sandbox play.

Knowledge prerequisite: Good programming fundamentals, some knowledge of CoffeeScript or JavaScript, and an interest in game design.

Difficulty: Very hard.

Your Own Idea

Want to do something else, or some combination or remix of ideas from this list? Just talk to us and let's figure out how to do it! These ideas are just starting points; really, we want you to work on what you're passionate about doing and confident that you can pull off. Whatever it is, just keep in mind that the more players it can help, the better.

Expected results: Your brilliant idea is implemented in CodeCombat. A choir of angels rejoices.

Knowledge prerequisite: Whatever the idea is, just make sure you know enough to get started, and we can help you learn the rest along the way.

Difficulty: Up to you!

Clone this wiki locally