cocos2d-x authors & contributors (ordered by the join in time) Core Developers: Ricardo Quesada XiaoMing Zhang (Minggo) JianHua Chen (James) Zhe Wang (Walzer) Qingkui Hu (samuele3hu) Huabing Xu (dabingnn) Bo Yu (boyu0) Wenhai Lin(Dhilan007) Developers: Rolando Abarca Javascript Binding and testjs Squallium Added ccFPSImages entity as linked resource on linux eclipse project setting. Added CocosDenshion dependency to libextension project for eclipse project of linux. longlene Improve android project creation script simpliplant Hardware keyboard support liuyq CCTextureAtlas::updateQuad modify for the memcpy hot spot. frranck adding norwegian language varlucian fix the bug that OnEnterTransitionDidFinish was called twice when a node is added in onEnter. carlomorgantinizynga CCLabelTTF supports for shadow and stroke Adding CCLabelTTF::createWithFontDefinition. New label support. James Gregory (j4m3z0r, Zynga) Maintainer of Emscripten port. Initial Emscripten port. Use browser font rendering instead of FreeType. Add destructor to CCGLBufferedNode. Asynchronous Image loading for Emscripten DarraghCoy Fix a potential crash SimpleAudioEngineOpenSL::playEffect Fix some bugs with Set class Add ccDrawSolidCircle Add Rect::unionWithRect Fix a memory leak in Set::removeAllObjects. silverscania Pass correct parameter to glPixelStorei when creating a texture FlagellumDei Center the window correctly on windows ggggamer fixed memory leak of preloadEffect on windows CodeSnooker Added Method to create a CCMenuItemToggle from a CCArray with a target selector wagaf-d Move ccpX functions to CCPoint methods and operators sergey-shambir Added CC_DISABLE_COPY macro Added __attribute__(__format__()) for CCLog and CCString Refactoring network extension and fixing unlikely memory leaks. Adding PUT/DELETE methods for CCHttpRequest. Adding project part for QtCreator. Implemented pitch, pan and gain. Using SDL backend instead of glfw for Linux. savdalion Added example for russian language in TestCpp Added const modifier for classes CCArray, CCObject Deprecated method fixes rodrigogolive Fix broke linux build kdejongh Fix for spaces at the beginning of wrapped lines on Android martell use tinyxml2 to replace libxml2 Added Mingw-crt Support without breaking VS SDK CMake support for windows. Added support for x64 target of windows. Added Dutch Language support. Added clang support for Windows. mchinen fix emulator issue for OpenGL ES 2.0 on Android Fix missing protocol method warning for iOS 6.0 addition DenizPiri use CCLOG to implement print() function in LUA nickveri nickkwalee added some missing function for setting integer shader uniforms in CCGLProgram biteforest fix cc scale9 sprite bug Jimmy Sambuo fix the bug that SimpleAudioEngine::playEffect() and playBackgroundMusic() play twice on linux DarraghCoy fix for loading custom fonts on iOS when referenced from a CCB file Fix CCUserDefault.cpp compiling on Android. Fixing CCFileUtils 'createXXXXWithContentsOfFile' path lookup issue. Add CCDirector::popToSceneStackLevel(int level). Fixing a bug that custom font can't be loaded correctly if using full path of filename on android. Waiter fix an error that OpenSLEngine can't load resources from SD card add CCRemoveSelf action Fixing a bug that CCLabelTTF setString crash on android. billy1380 make CCLens3d support concave effect. Adding 64bit target for Mac project. benjamesward add Portuguese and Arabic language support Fixed linebreaks on Mac OSX Victor K(fnz) fix memory leak of CCTextureCache::addImageAsync() on iOS tks2shimizu add CCFloat, CCDouble and CCBool Add append function for String class Adding String::componentsSeparatedByString function for splitting string. chenium fix a bug that CCRenderTexture can not work when coming to foreground on Android 9re(Taro Kobayashi) add Japanese language support mingulov improve the speed of accessing to files from apk sburavtsov fix for correct unscheduling and instance destruction of extensions/network/HttpClient.cpp wenbin wang add error handler when read image data using libjpeg add korean language support fix getDeviceModel bug in android CocosDenshion Horcruxes fix the bug that CCArray::createWithContentsOfFile() may not read file data on iOS Hu Kaiou contribute the new version of libcurl to support both armv7 & armv7s on iOS fix some memory leak ByungChoi modify linux makefiles to fix compiling errors edbartley update MSVS and MAC projects to use project-relative path CCControl* should not respond to touches if the control is not visible Some improvements for CCScrollView and CCTableView. Touch priority can't be set to the value specified by a call to CCMenu::setTouchPriority(int). CCTableView crashes if a CCTableViewDelegate is not provided. Fixing a bug that _realOpacity isn't assigned in CCLayerColor::initWithColor. CCScrollView TouchPriority Fix Add encrypted PVR.CCZ support to ZipUtils + Tests Fix for broken of ccArrayGetIndexOfObject after merging this commit(076f38c). Weeds (Andre Rudlaff) Used fontconfig to enhance font rendering on linux. Fixed a bug about missing horizontal alignment for Custom TTF fonts on linux. Fixed a bug that the truetype fonts from resource directory can't be found on linux. Fixed the size calculations for true type fonts (especially for italic fonts). Added a very simple greedy line break algorithmfor true type labels. Fixed font rendering crash for certain fonts on linux. Fixed potential crash in CCScheduler::removeHashElement. Fixed potential crash in CCSaxParser. Added kResolutionFixedHeight and kResolutionFixedWidth resolution policy. Use pthread mutex and condition variable instead of pthred semaphore to load image asynchronizely. Fixed crash in HttpClient request on 64Bit. Nat Weiss (iphonegamekit.com) author of Mac port add TMX polygon parsing Properly resets the tile's Y flipping XiaoLong Zhang (Chukong Inc) Mike McGary (Zynga) Di Wu (Zynga China) CCBReader and cpp reflection mechanic Angus Comrie contributes cocos2d-x port of CCControlExtension. Yannick Loriot author of CCControlExtension in cocos2d-iphone. Surith Thekkiam (folecr, Zynga) contribute for Android module building Simpler, correct handling of spritesheet sources for CCScale9Sprite. Clean up linked libraries for android. JavaScript debugger improved and bugfixed. Fix flags for debugger server socket. Fix flags for debugger server socket. When user has built with JS Debugger support ScriptingCore will handle necessary runtime changes. Nicolas Gramlich (nicolasgramlich, Zynga) fixed CCDirector to use CCLabelBMFont instead of CCLabelTTF added CCBReader (CCBI format) Added cleanup and reset methods to ScriptingCore. Fixed a bug in ScriptingCore::evalString not setting the outval. Updated .classpath of Android project to latest ADT 22 build tool compatibility. Rohan Kuruvilla (rohankuruvilla, Zynga) Improvements to JS Bindings. Synchronizing CCBReader to version 5. Adding OpenGL Bindings to Javascript. Fixing a bug that nested ccb-files are not positioned correctly. Fixing a bug that crash when loading valid project. Jianfeng Zou (NetDragon Inc) contributes CCListView and CCTextureWatcher. dducharme author of blackberry port ImperialPenguin Added TTF support for blackberry port. HuaXu Cai (Kongzhong Corporation) author of linux port ciaranj add a build file that correctly generates LuaCocos2d.cpp add a lua template add particle systems to lua bindings use ant to generate LuaCocos2d.cpp and lua projects Marat Yakupov (moadib) Adds ability of simulating android enter/resume background on win32 Adds ability of simulating android back/menu key on win32 Adds support for multiple background music sources to CocosDenshion for Blackberry Eli Yukelzon (reflog) add a helper method to draw filled polygons improvements to CCUserDefaults ZhuoShi Shun contribute the lua binding of CocosDenshion Jirka Fajfr Chris Calm authors of CCTexturePVR RuiXiang Zhou (NetDragon) XiDi Peng (NetDragon) AiYu Ye (NetDragon) authors of lua binding Max Aksenov author and maintainer of Airplay port Giovanni Zito Francis Styck authors of Marmalade port Mat Hopwood( Marmalade official engineer ) Marmalade support for gles20 branch Carlos Sessa implement the accelerometer module for Android port James Chen(dumganhar) author of Bada port Erawppa implement CCNotificationCenter YuLei Liao(dualface) contribute the factor of lua binding jreitman fix the bug of asynchronous loading resources for iOS Nat Weiss minor enhancements to the Cocos2D-X codebase and Android build scripts Qingyun Huang (greathqy) implement CCHttpRequest donaldalanmorrison fix some warnings and memory leaks Yinghui Peng(mustime) use OpenSL ES to play effects add TestLua sample Dongyang Cai(John-cdy) add automatically test tools Sergey Vikhirev(BorMor) Remove retina specific methods and logic. johnangel OpenGL framebuffer access violation fix. Enable Windows XP support in Visual Studio 2012 Update 1. Peter Farkas (fape) contributes Marmalade port for gles20 branch add Hungarian language support fixed compilation errors after adding support of webp image format. Tomoaki Shimizu (tks2shimizu) Adding randomObject to CCDictionary. Igor Zavorotkin (ivzave) Adding lua support for linux platform. Jozef Prídavok (jpridavok) Adding CCEditBox implementation for Mac OSX. tiantian20007 Fixing a crash for call runAnimation() in CCBAnimationManagerDelegate::completedAnimationSequenceNamed. Fixing a bug that CCControl's touch priority is not set correctly; m_nDefaultTouchPriority is never used. Fixing a syntax error for RENDER_IN_SUBPIXEL macro. Implement CCDictionary::writeToFile(). Fixing a bug that unused spriteframes also need to be removed when purgeCachedData. Adding a method to get duration of timeline for CCBAnimationManager class, it's easy for getting duration of animation in JSB. xyhl515 Fixed a bug that CCControlSwitch::setOn(isOn,false) doesn't work. Adds VS2012 Express template installing support. Fixing a logical error in CCDrawNode::drawPolygon. Fixing a bug that Jsb function getCPBody return type is not right. DarraghCoy Fix for unaligned memory access crash in CCBReader::readFloat(). Sergej Tatarincev (SevInf) Making ScriptingCore.cpp compiled fine with C++11 on iOS. Using shared NodeLoaderLibrary in CCBReader bindings. CCEditBox iOS enchantments/bugfixes. Support variable cell sizes in CCTableView. ThePickleMan Adding 'rotationIsDir' property to ParticleSystem. DrawNode supports to draw triangle, quad bezier, cubic bezier. Jianghua (jxhgzs) Adding an additional transform for CCNode. giginet Fix CCRepeat#create is recieved bad argument on Lua binding. neokim Adds 'setFont' and 'setAnchorPoint' to CCEditBox. Workaround for some problems due to UITextField of CCEditBoxImplIOS is attached as a view above OpenGL view. Sam Clegg (sbc100) Author of Native Client port. Refactor linux build system and fix many warnings. Fixing a bug where missing packages would cause the script to exit on linux. Adding 'make run' target for linux projects. Stripping newlines from log message and fixing linux library location. Fixing a bug that CCPhysicsSprite was overriding only some of the getPosition methods. Adding a macro USE_BOX2D to check whether to enable Box2D for linux and nacl port. Adding Travis build support for linux and NaCl. Logging assert messages to the console. Renaming CCScriptSupport::executeAssert to CCScriptSupport::handleAssert. Adding Native Client support for develop branch (cocos2d-x 3.0) and some warnings fixes. Cleanup travis build scripts. Refactoring emscripten building script. Peter Young (young40) Implements setVisible() for CCEditBox. Fixing a bug that event will not be sent to server when paramMap parameter of logEvent function is nil in plugin-x. csy1988525 Fixing a bug about display result is wrong when invoking CCControlButton:: setHighlighted. fixed a bug when button's parent is hided, the button still can responce to clicked event. Asad ur Rehman (AsadR) Adding CCNotificationCenter::removeAllObservers(CCObject *target). jedy Fix of CCNode.h's document with doxygen 1.8.3 can't be generated. whitegfx Implementation of kEditBoxInputFlagSensitive setting for CCEditBoxImplIOS. Zecken (gelldur) Fixing a profiling compilation error in CCParticleBatchNode. Fixing linking errors for TestCPP with libcurl on linux. Fixing a bug that crash was triggered if there is not `textureFileName`section in particle plist file. flamingo (flaming0) Null pointer check in order to prevent crashes. Updating spine-runtime to EsotericSoftware/spine-runtimes@5f90386. rtissera (Romain TISSERAND) Adding missing JNIEXPORT / JNICALL declarations. Fix iOS 4.3 JPEG loading issue. Yodesoft Improving font rendering performance for linux platform. Reducing function call in nativeInitBitmapDC to improve performance. Refactoring writable path to "/.config/" for linux platform. sjchao Fixing a display bug when a scrollView nested in another scrollView. Éloi Rivard (azmeuk) Linux OpenAL support. Added some guards to prevent Eclipse to compile twice the same class. Linux Eclipse projects updates Refactored emscripten-build.sh, it's no longer need to be edited to make emscripten work. Creation of CCDeprecated-ext.h Use of a single emscripten HTML template file. Added some guards in fileutils. Fixed a bug in emscripten file utils. Added emscripten keyboard support Clang support for Linux. Multiple emscripten template support. Emscripten multiple resolutions support. Toplevel Makefile refactoring. Ignored files generated by cmake. Added GLFW include path for Fedora. Linux javascript bindings support. elmiro Correction of passed buffer size to readlink and verification of result return by readlink. harikrishnar (Hari Krishna) Wrong logic in CCArray::initWithObjects. Fixing a bug that button should not get respond if its parent is invisable. rogerzanoni Fixing a linking error that libpthread and libGL libraries need to be linked on linux. Fixing a compiling error of [-Werror=array-bounds] when compiling Box2dTestBed. zhanghaojie Fixing a bug that anchorPoint property of CCScale9Sprite doesn't work in CCBReader. MarkEHenderson (Mark Henderson) Fixing of variable initialization in SpriteBatchNode. akira-cn Adding response for back and menu keypad event for Android. lgb (Oleg) Fixing a compilation error for BlackBerry PlayBook. Comparing float number by using epsilon and absolute difference. jotel (Jaroslaw Lewandowski) Fixing a bug that wrong type of argument signature is used in setAccelerometerIntervalJNI function. Fix for broken of ccArrayGetIndexOfObject after merging this commit(076f38c). Explicitly initialising CCAcceleration structure. Add support to save/retrieve CCData into/from CCUserDefault. Text Shadows fix Solving 'black screen' on android. MarcelBloemendaal Adding secureTextEntry property to CCTextFieldTTF. brawsome Adding new macro CCB_MEMBERVARIABLEASSIGNER_GLUE_WEAK to CCBMemberVariableAssigner.h. Adding CCLOG before original path is returned in CCFileUtils::fullPathForFileName to aid in debugging. Optmization to ccArrayGetIndexOfObject. sunzhuoshi Adding support for javascript bytecode. Fixing bad js constant names. ptekchand (Pranav Tekchand) Supporting negative node scales for CCScrollView. coolengineer (Hojin Choi) Refactoring callback selector for HttpResponse. djh- Fixing a bug that displayed color of CCDrawNode is incorrect when VAO is disabled. acai (beingstudio) Fix of null pointer access in CCBAnimationManager::getRunningSequenceName. metalgit92 Adding const qualification to some CCNode's getters Clarinexus Fixing a bug that setColor and setOpacity of CCControlButton and CCScale9Sprite are broken. Xander84 Fixing a bug in CCBValue::getByteValue. smshuja Fixing a bug that pointQueryFirst returns invalid Shape when a shape is not found in JSB. Fixing a bug that New PivotJoint can't access 4 parameters like in html5 version. Fixing a bug that Pivotjoint constructor and pointQueryFirst in Space class will return false instead of invalid shape object. Carsten Sandtner (casarock) Adding XMLHttpRequest support for JSB. Lee, Jae-Hong (pyrasis) Maintainer of tizen port. localStorageGetItem crashes when column text is NULL. fix image bug on Android lumendes Updating spine-runtime to EsotericSoftware/spine-runtimes@5f90386. sunxiaoyu Refactoring CCEditBox to add UITextField only when keyboard was opened, remove it when keyboard was closed. edwardzhou (Edward Zhou) Correcting the type detecting order for Lua CCBProxy::getNodeTypeName. Casting variables to their own type, and print warning info if no corresponding lua callback function instead of crash. fix of WebSocket url parse error for 'ws://domain.com/websocket' pattern. Fixed a bug that Websocket doesn't support send/receive data which larger than 4096 bytes. musikov Fixing a bug that missing precision when getting strokeColor and fontFillColor hawkwood (Justin Hawkwood) Fixing a bug that EditBox doesn't show any text if it's initialized with text. wtyqm (zhang peng) Fixing a bug that ccbRootPath wasn't passed to sub ccb nodes. smilingpoplar (YangLe) Fixing a bug that CCScale9Sprite doesn't support rotated spriteframe in atlas. xxuejie Add namespace prefix to selector macros hannon235 (Chris) Fixing a bug that the submenu of ExtensionTest in TestCpp can't scroll. Implements a socket.io client extension and adds a test case. pktangyue Fixing a bug that CCScale9Sprite::setInsetLeft/XXX can't work for rotated sprite frame. Fixing a bug that Color and Opacity of Scale9Sprite will not be changed when it's added to NodeRGBA and run with FadeIn/Out actions. Adding *.xccheckout to gitignore. jllust Fixing a bug that CCLabelBMFont crashes in glDrawElements of CCTextureAtlas::drawNumberOfQuads sometimes. Sam Gross (colesbury) Ignoring formatting specifiers in JavaScript log messages. Make bindings-generator supports to bind std::function argument. James Munro (jdmunro) Added JSB support for ccpDistanceSQ. Rafael (rafaelx) A warning fix of AL_INVALID_NAME and AL_INVALID_OPERATION in SimpleAudioEngineOpenAL.cpp. metalbass Fixing an issue that sigslot::_connection_base# (from 0 to 8) don't have virtual destructors. thp Port Cocos2D-X to Qt 5 Nako Sung (nakosung) Fixing a bug that wrong logic when pass an empty std::vector to WebSocket::init. Exposing cc.RemoveSelf to JS. exposed AssetsManager to javascript and added multiple-assetsManager support dotsquid Fixed the crash caused by improper deletion of VBOs and VAO in ParticleSystemQuad. maciekczwa Fixing a bug that stroke color with channel color values other than 255 doesn't take effect on android. zcgit a potential bug fix in Layer::init. gkosciolek Fixing a bug that observers with the same target and name but different sender are the same observer in NotificationCenter. xbruce Fixing a bug that crash appears when extending cc.ScrollView in JS. Fixing a bug that cc.registerTargettedDelegate doesn't support pure js object as its target. elwinarens (Elwin Arens) Minor spelling changes in description of CCScene.h signmotion (Andrey Syrokomsky) Fixed some compiling-warnings (MSVC2012). michaelcontento [Android] use onWindowFocusChanged(bool) instead of onResume()/onPause() Prevent nullptr access in AssetsManager [Android] re-introduce Cocos2dxHelper.runOnGLThread(Runnable) [Android] added EGL_RENDERABLE_TYPE to OpenGL attributes Android: add xlargeScreens="true" to supports-screens Trigger onKeyReleased only after the key has been released. Makes Colors are now comparable and explicit convertible bmanGH Used gl caching functions in TexturePVR::createGLTexture() Configuration of VAO in runtime Added setUniformLocationWithMatrix2fv, setUniformLocationWithMatrix3fv mothed into GLProgram class Fixed a bug that object which isn't in Vector would also be released when invoking Vector::eraseObject. Fixed a bug that Timer::cancel always call Director::getInstance()->getScheduler() even in another Scheduler. metadao make create_project.py more pythonic and fix some typoes timothyqiu Project creator: use absolute path for json config files Documentation fixes A better way to locate project creator rablwupei Fixed a memory leak in ScriptingCore::runScript() Fixed a memory leak in Spine. Added support of passing array to cc.Sequence.create and cc.Spawn.create. Fixed a bug that sys.localStorage.getItem() does not support non-ascii string. Fixed a memory leak in XMLHttpRequest. Fixed a bug that wrong convention to jsval in cccolor4f_to_jsval and cccolor3b_to_jsval. Keita Obo (ktaobo) Avoid unnecessary object duplication for Scale9Sprite. jimmystar Fixed a bug that cc.Scheduler.schedule(target, func) without repeat argument couldn't repeat schedule forever on device. XiaoLongHan (kpkhxlgy0) Fixed a bug that outside of keyboard can't be responded to close keyboard when using EditBox. lettas A fix for multi-platform template. HoGarfield (garfield_ho) Fixed a bug that CCBReader can't play sequence automatically in JSB. Could not set next animation in CCBAnimationCompleted callback. Fixed missing to add JSAutoCompartment when invoking JS functions from C++. CCBReader: To set anchor point to 0,0 when created by loader. Potential crash when websocket connection closes. lite3 Fixed a bug that Node's anchor point was changed after being added to ScrollView. superrad Clear NoSuchMethodError Exception when JniHelper fails to find methodID Nite Luo (darkdukey) Added Mouse Support For Desktop Platforms. ledyba Fixed a bug that EventListeners can't be removed sometimes. Fixed a bug that the data size has to be specified when parsing XML using TinyXML. Closed X display after getting DPI on Linux. Luis Parravicini (luisparravicini) Fixed typos in create_project.py. xhcnb Device::setAccelerometerEnabled needs to be invoked before adding ACC listener. Fixed a bug that it will get wrong custom properties when use different count custom properties in CocosBuilder. bopohaa Fixed a bug that Webp test crashes. lajos FontTest isn't rendered correctly with custom TTF font on Mac platform. hulefei Added gui namespace before SEL_TouchEvent. zhiqiangxu Fixed a logic error in ControlUtils::RectUnion. Fixed an issue that there is an useless conversion in ScrollView::onTouchBegan. Deleted several lines of useless code in ScrollView::deaccelerateScrolling. Fixed that ScrollView should implement ActionTweenDelegate. yinkaile (2youyouo2) Maintainer of Armature Bone Animation. dmurtagh Fixed a bug that UserDefault::getDoubleForKey() doesn't pass default value to Java. seobyeongky Updates spine runtime. Fixed a potential bug in Data's copy constructor. luocker Fix a bug that string itself is also modified in `String::componentsSeparatedByString`. omersaeed Fix a bug that game will crash if connection breaks during download using AssetManager. SBKarr AngelCode binary file format support for LabelBMFont. zarelaky OpenAL context isn't destroyed correctly on mac and ios. kicktheken (Kenneth Chan) Fixed a bug that the setBlendFunc method of some classes wasn't exposed to LUA. andyque Fixed a bug that missing to check self assignment of Vector, Map, Value and String. Fixed a bug that move assignment operator doesn't clear previous content bug. Fixed the compile error of Map's getRandomObject. daltomi Fixed a typo in Director class. Removed an unnecessary boolean flag in CCFontAtlasCache.cpp. Used 'cbegin/cend', 'const std::string' where it's reasonable. v1ctor ControlSlider supports to set selected thumb sprite. ControlButton supports to set scale ratio of touchdown state akof1314 TestCpp works by using CMake and mingw on Windows. Pisces000221 Corrected a few mistakes in the README file of project-creator. Corrected a mistake in README. Fixed a bug that a string which only contains CJK characters can't make a line-break when it's needed. hbbalfred Fixed a bug that crash if file doesn't exist when using FileUtils::getStringFromFile. Fixed a bug that cc.BuilderReader.load( path, null, parentSize ); was not allowed. liang8305 Use multiple processes according the number of cores to build android project pandamicro Exposed SAXParser to JS, it is used for parsing XML in JS. hanjukim Fixed a bug that color and opacity settings were not applied when invoking Label::alignText. bagobor Fixed a memory leak in AssetsManager::uncompress. Code format fix and small optimizations in cocostudio/CCActionNode.cpp. ucchen Exposed the missing data structures of Spine to JS. justmao945 Corrected the definition of CMake variables. maksqwe Fixed string size check in BitmapDC::utf8ToUtf16 on win32 and assert condition in TriggerMng. wefiends s3tc compressed textures with no mipmaps fail to be loaded. floatinghotpot Fixed a bug that no callback is invoked when websocket connection fails Linghui Updated README of template: fix wrong platform java path. seemk Fixed crash if invoking Director::end() on WINDOWS. odedsh Fixed a bug that loading custom fonts from ttf file fails on windows. Wilhansen Fixed a bug that spine::Skeleton would not be updated after re-adding to scene. Retired Core Developers: WenSheng Yang Author of windows port, CCTextField, Designer of CCApplication/CCEGLView/platform structure. He's working together with 2dx core team but leading FishingJoy game Bin Zhang core-team member but put himself in FishingJoy game since 2012. RongHong Huang (flyingpaper) Author of cocos2d-xna and spent all his time on wp7. Cocos2d-x can not grow so fast without the active community. Thanks to all developers who report & trace bugs, discuss the engine usage in forum & QQ groups! Special thanks to Ricardo Quesada for giving us lots of guidances & suggestions.