So, I hadn't meant to let it slip quite yet that I'm in the early stages of working on a CC-like game which will eventually (hopefully on the scale of a few months) become an open source community project. I mean, we're talking very early stages. So far I can read in CC1 levelsets and convert them into an in-memory format. And there's a sweet random number generator. That's not much. That being said, however, I've spent thousands of hours working on stuff like this (Puzzle Studio in particular), and I'm pretty confident that this project will go somewhere.
The project is unnamed so far. Every name so far doesn't seem to fit. It's not Super Tile World or Tile World 3 because Tile World is an emulation of Chip's Challenge, and this project has no intent of emulating a ruleset, but rather inventing a new one based on the best parts of old engines. It's not JBone's Challenge because I want this to be a community effort, and JBone's Challenge is really a different game I want to write (and which may eventually be branched from this). So it's just The Project or The Unity Project for now, name suggestions welcome.
Is the Unity Project open source?
The Unity Project is meant to be a community effort. I intend to release all of the C# code under an open source license of some sort, probably either the MIT or a Creative Commons license.
HOWEVER, I have a set of criteria (Phase 1) that I want the project to meet before I open source it:
- The game has a new experimental ruleset which has received positive feedback from a large number of community members, particularly from the optimizer crowd.
- The game can open and play any Lynx-compatible CC1 levelset.
- All official levels in CCLP1, CCLXP2, CCLP3, and CCLP4 are solvable or at least are expected to be solvable (I'm certainly not going to solve all of them!) in the new ruleset. Depending on the engine it may be possible to apply an algorithm to the public TWS files to generate replays in the new engine, and then manually test the levels where that strategy doesn't work.
- The game uses a forward-thinking internal level format for things like button connections, global toggle state, level size, viewing window, controls, etc. which is expected to accommodate most of the CC2 gameplay. (I would like to be able to open CC2 files and use many of the elements, but I have no intention of ensuring that all CC2 levels are solvable under the new engine.
The game has a robust testing framework.
- Unit tests for single elements (e.g. assert Player.testEnter(Wall) == false)
- Integration tests for as many gameplay situations as we can think of (e.g. make a 3x3 level with force floors, assert that after input "URDL" the player is on square X).
- Replay tests for a significant number of CCLP levels (e.g. if I apply this series of inputs to this level, gamestate == WIN_LEVEL).
Why the emphasis on backwards compatibility?
Lots of reasons!
Might sound silly, but here's one of the biggest for me:
- We don't have to design a level editor until we get the core gameplay down!!!
This is HUGE! I've probably started a half-dozen CC clones in my life, and none of them got very far. Part of the reason is I didn't become a software engineer until 2 years ago. But time and time again the part that I've gotten bogged down on is how to create a freaking editor and save and load my files. If we start by loading DAT files, we have tons of gameplay testing right out of the box.
- We don't have to decide on a save file format yet.
- Tons of world-class content available immediately for new people.
Maximize engagement from existing community members.
- Level designers stay connected to their creations
- Familiarity of existing levels and gameplay.
- Spending time on CCLP5 submissions vs working on this doesn't have to be either/or.
- Best chance of moving future community level pack design efforts away from the two-ruleset tyranny.
- By setting clear definitions about what features the core gameplay must support, it allows the project to begin on a strong software engineering foundation, with a clear initial direction.
How can I help during Phase 1?
- Get involved in the discussions. I'm going to have a lot of questions about things like boosting, spring step, trap behavior, etc. I'm trying to take the best parts of MS but I haven't spent a lot of time playing it.
- Even though the code isn't open source I do intend to share parts of it that I'm working on for feedback.
- Start learning C#. Unity tutorials will help a little bit, but I'm really just using Unity for the easy graphics and the cross platform support.
- Make animated game artwork!
- Make sound effects!
- Start designing the new features and tiles you want to implement. It's one thing to say we want lasers, it's another to specify what they will do and exactly how they should interact with other tiles.
- Playtest and aggressively look for bugs (as soon as there is something to playtest).
- Keep asking for progress and showing support. This is 100x more likely to happen if the community stays enthusiastic!