In February 2008, at Los Cocos, Córdoba, Argentina, we started the “Los Cocos” Python game engine. We later renamed it Cocos2d. The idea was to create a game engine for the games we were creating for PyWeek.
We started the game engine with Lucio Torre, Daniel Moisset, Rayentray Tappa, and I, with the help of Alejandro Cura and other members of PyAr.
We announced a beta (or was it alpha?) version in a lightning talk at PyCon Chicago in March 2008.
In July 2008, Lucio and I went to Euro Python to present Cocos2d (was it v0.3?).
In addition, Lucio and I presented Cocos2d at PyCon Ar 2008 and 2009.
In 2010 Claudio Canepa became the new Cocos2d developer/maintainer.
Somewhere around the beginning of 2008, Apple announced that the iPhone would have a store. Apple would only take 30% of the revenue (back then, carriers were taking around 90%). Furthermore, the iPhone was powered by OpenGL ES and the OS was UNIX based.
Also, around that time, I wanted to create commercial games. I had previously considered the Web (Flash) and feature phones (J2ME) as possible markets. But after Apple’s announcement, I decided to develop games exclusively for iPhone.
I needed a game engine for my iPhone games, so I re-wrote Cocos2d in Objective-C. The high level design remained the same, but I had to make substantial changes to make it work on the iPhone… and that is how “cocos2d-iphone” was born. The first cocos2d-iphone version (v0.1) was released in June 2008.
In March 2008, I applied to get my iPhone Developers license, and finally got it in July 2008 (it took me 4 months to get one, whereas today you can get one in a few minutes). It was not possible to publish games on the iPhone App without a license. While waiting for my license, I did some contract work, developing some games for 3rd parties using cocos2d-iphone.
Having gotten my iPhone Developers license, I created my first (and only) game for the iPhone: Sapus Tongue. However, I realized that creating commercial games was not that fun for me; neither did I find it easy. Since cocos2d-iphone was already popular, I decided to work full time on it. The reason I could do this is that I was actually making a living by selling two commercial tools for cocos2d-iphone: LevelSVG: a sort of editor + physics on top of cocos2d, and Sapus Tongue source code.
At the beginning of 2009 there were already more than 100 games using cocos2d-iphone. The first one to reach #1 at the iPhone App Store was Stick Wars.
After that, many other cocos2d-iphone games reached #1. And most of the time, there was at least one cocos2d-iphone game in the Top #10. I believe this was the case from 2009 until the end of 2011.
Not only games were created with cocos2d-iphone, but also animated books, photo applications, and more. Some cocos2d-iphone games and applications were featured at WWDC 2010. Even games that Apple proudly announced as “built using Apple libraries”, were actually built with cocos2d-iphone.
Many cocos2d-iphone forks/ports/bindings were created as well, such as:
- At least two Java ports: cocos2d-android and cocos2d-android-1
- A C++ port: Cocos2d-x
- Three C# ports: CocosNet, Cocos2d-XNA, CocosSharp
- A Go port: Gocos2d
- Python bindings (bindings for cocos2d-iphone and for cocos2d-x) and Python port (a new port based on cocos2d-iphone, and not on the original Cocos2d)
- Ruby bindings: ShinyCocos and support for RubyMotion
In July 2011, after working on cocos2d-iphone for more than 3 years, and with the help of the community, I released cocos2d-iphone v1.0. Some stats: ~140 contributors, ~2600 commits and 63 internal releases.
The community was very healthy, with many people helping each other, opening bug reports, sending pull requests, suggesting features, etc. The ecosystem around cocos2d-iphone was also very healthy: many cocos2d-iphone books were published, and many editors/tools (both commercial and free/open source) supported cocos2d-iphone, many job positions were looking for cocos2d-iphone developers.
In May 2011, I joined Zynga. At Zynga we used cocos2d-iphone for some iOS games. To port them to Android, some of them were rewritten using AndEngine, and others were ported using AppPortable‘s Objective-C/UIKit stack.
In 2012, Android was already very strong. I wanted to support Android natively (and other platforms as well). I had three options:
- Stop working on cocos2d-iphone, and work on Cocos2d-x (the C++ fork)
- Keep developing cocos2d-iphone, and use 3rd party commercial Objective-C stack (like StellaSDK, NoodleCake or AppPortable) to port cocos2d-iphone to Android
- Keep developing cocos2d-iphone, and develop an open source Objective-C stack to port cocos2d-iphone to Android.
I didn’t want to depend on 3rd party commercial tools, and I didn’t have the time to write my own Objective-C stack, and Cococs2d-x was already popular. So I decided to help the Cocos2d-x team. We started using Cocos2d-x at Zynga as well.
At Zynga, with the help of the Cocos2d-x team, we created a very attractive tooling:
- Cocos2d-x and cocos2d-iphone were feature compatible. The API was almost the same (of course, one in C++ and one in Objective-C)
- Scenes exported by CocosBuilder were supported both by cocos2d-iphone and Cocos2d-x.
The only drawback was that keeping feature-compatibility between Cocos2d-x and cocos2d-iphone was expensive: we had to write the features twice. And also CocosBuilder was built on top of cocos2d-iphone which meant it was only available for Mac (no Windows version), and also required writing the features twice. Supporting Windows was important for many Cocos2d-x users.
I kept developing cocos2d-iphone until June 2013, and then I passed the torch to Lars Birkemose (who in 2016 passed it again to Andrei Volodin). In August 2013 I joined Chukong.
Note: Chukong, the company behind Cocos2d-x and Cocos Studio, is a Chinese company with its headquarters in Beijing. Cocos Studio was developed at Beijing. Cocos2d-x is being developed in Xiamen (south of China), and I joined their California office were we did a bit of everything.
Cocos2d-x was started by Zhe Wang in July 2010. It was a clone of cocos2d-iphone, but coded in C++ instead of Objective-C. His goal was to create an SDK to facilitate porting cocos2d-iphone games to the uPhone (a phone project that was later cancelled). In order to facilitate the porting, Cocos2d-x included all the Objective-C patterns that were found in cocos2d-iphone. Somewhere in 2012 (or was it 2011?) the Cocos2d-x team joined Chukong.
Chukong had the resources, the willing, and the position to make Cocos2d-x a world class game engine / tooling. Cocos2d-x, back in 2013, had about between 70%~80% of the Chinese market share.
At Chukong, we started by designing Cocos2d-x v3, which included the removal of Objective-C patterns from its code, the use of modern C++ APIs, the update of the renderer (Nite), the addition of 3d features (Tony and Harrison) and the writing of a Programmers Guide (Jason).
But the most important thing was the editor: We needed one. Chukong had invested a lot of resources in Cocos Studio. It had many features, but its UX wasn’t appealing for the US/Western market, and it was Windows only.
So, in the US office, we (Justin, Nite and Kai) started working from scratch on an editor for Cocos2d-x both for the Chinese and US/Western markets (something similar to CocosBuilder, but built on top of Cocos2d-x and compatible with Windows and Mac. Qt was used for this).
Unfortunately the new editor was cancelled. As hard as we tried to improve Cocos Studio’s UX, it failed to attract the US/Western market.
Other projects were cancelled as well, such as Cocos2d-HTML5 v4, Cocos2d-x v4 renderer + HAL, Cocos2d-x launcher, Cocos IDE. Even Cocos Studio got cancelled.
Cancelling projects, specially when they are almost ready, can be frustrating. But our main challenge was finding a good business model. We tried different things, but we couldn’t find a good one.
In hindsight, this is what I think we should have done:
- Work on just one editor: the Qt editor that was supposed to be the Cocos Studio replacement.
- Offer services within the editor: SDKBOX, and other services.
- Focus: Only work on casual/mid-core features (no VR or other distracting features). Try to be the best ones in that category.
After working 9 years on Cocos2d, and due to the development of recent events, the time has come for me to work on something else. What should I do next? Some people say that the future is IoT, others say it is Machine Learning, while the rest say it is VR/AR. They are all wrong: The future is the Commodore 64. See you soon.