Who am I

 Nguyen Huu Phuoc, Team Leader at
  Gameloft HAN studio
 Love to exchange knowledge and passion.
  Had several seminars and trainings in
  Hanoi-Aptech, GameLoft, Universities.
Agenda
 Gameloft Introduction
 Gameloft’s approach to Multi-Platform
  development
 Tips, tricks and examples
 Questions and Answers
Gameloft: Leading developer and publisher

                Founded in 1999,
    to develop from mobiles & smart phones
      to cross-platform digital distribution




    Iphone, Ipod,                           Android
        Ipad


               Mobile
                                   Console
Gameloft: Leading developer and publisher




  Presence in over 80 countries

Agreements with over 200 carriers

  ~400,000 games sold per day
Gameloft: Leading developer and publisher




Production studios in 12 countries

      5125 talented people
Gameloft Vietnam is The BIGGEST Gameloft Studio
                   Worldwide
     The BIGGEST 1700 talented staffWorldwide
          More than Gameloft Studio
      More than 1000 talented staff
Gameloft keeps on growing fast in Vietnam




SAI 1                 SAI 2               DAD                  HAN
e-Town 2 Building -   18A Cong Hoa, Tan   74 Bach Dang, Hai    3rd&4th floor –
7Fl., 364 Cong        Binh Dist., HCMC    Chau Dist., Danang   Lilama 10
Hoa, Tan Binh         Since Aug-2008      City                 Le Van Luong, Hanoi
Dist., HCMC                               Since Mar-2010       Since June-2011
Gameloft HAN Studio
 Asphalt 6
 Kingdom and Lords
 Fantasy Town
 Dungeon Hunter 3
 Amazing Spiderman
Multi-platform to
Gameloft’s approach
development
Our games are running on
 iOS
 Android
 PS3
 Windows Phone 7
 bada
 WebOS
 Java embed
 ….
Our games are running on
 iOS
 Android
 PS3
 Windows Phone 7
 bada
 WebOS
 Java embed
…
How could we accomplished that?
How could we accomplished that?
Different codebases for each platform?
Different codebases for each platform?
Yes.
Different codebases for each platform?
Yes. And No 
Windows Game




                Platform                                  Platform
Platform-         API                     Platform-         API
 specific       Wrapper                    specific       Wrapper
Features                                  Features

            Platform-                                 Platform-
             specific                                  specific
               UI                                        UI




  Android Game                            iOS Game
Windows Game



Built with C++, contains almost everything:
                  UI Design
                 Game-Logic
              Game Rendering
                   Sound
                 Multiplayer
                      …
Windows Game


Android Game                           iOS Game


             Platform                         Platform
               API                              API
             Wrapper                          Wrapper



•Android NDK                     •C++ auto-compat
•Java wrapper: Activity,         •UIWindow, UIViewController,
View, Intent, Receiver
                                 UIView, UIApplicationDelegat
                                 e
Windows Game


 Android Game                                  iOS Game


                  Platform                              Platform
    Platform-       API                     Platform-     API
     specific     Wrapper                    specific   Wrapper
    Features                                Features



•Advertising                        •iAd
•In-App Billing                     •In-App Purchase
•Beam                               •Music Player
Windows Game


Android Game                                  iOS Game


                 Platform                                  Platform
 Platform-         API                     Platform-         API
  specific       Wrapper                    specific       Wrapper
 Features                                  Features

             Platform-                                 Platform-
              specific                                  specific
                UI                                        UI


 •Push Notification toggle         •iOS is normally the role-
 •Kindle Fire Volume               model
 •Color Correction
Windows Game




                Platform                                  Platform
Platform-         API                     Platform-         API
 specific       Wrapper                    specific       Wrapper
Features                                  Features

            Platform-                                 Platform-
             specific                                  specific
               UI                                        UI




  Android Game                            iOS Game
Advantages of Porting
 Big common code base: less bugs,
  less maintainance effort, less human
  resource
 Only the things that really platform-
  specific are needed to be separated
How?
We built:
 Our own 3D engines and libraries
  (Networking, Sound, UI, Debugger…)
  which already support multi-platform
 Online System to centralize the
  services: User profiles, Billing, Data
  downloading, Multi player….
 Core Packages for general features in
  each platform
Tips and tricks
 Try to build your game without a real device
  first
 Graphics: Use OpenGL ES 2.0
 Don’t hard-code. Do things explicitly. Have
  separated Configuration files.
 Prepare your data wisely
 Preprocessing is not only for C++
 Keep an abstract macros/classes/library of
  code that using platform-specific API or
  behave differently on each platform
Examples –
Defines/Configuration
    #ifdef OS_ANDROID
       #define KEYCODE_BACK (4)
       #define KEYCODE_UP (19)
       #define KEYCODE_DOWN (20)
       #define KEYCODE_LEFT (21)
       #define KEYCODE_RIGHT (22)
    #elif defined(WIN32)
       #define KEYCODE_BACK (27)
       #define KEYCODE_UP (38)
       #define KEYCODE_DOWN (40)
       #define KEYCODE_LEFT (37)
       #define KEYCODE_RIGHT (39)
    #endif
Examples – simple macro
  #define PLATFORM_WIN32 1
  #define PLATFORM_ANDROID 2
  #define CONFIG_PLATFORM PLATFORM_WIN32
  #if CONFIG_PLATFORM==PLATFORM_ANDROID
    #include <android/log.h>
    #define Log(...)
       __android_log_print(ANDROID_LOG_INFO,
    “GLGame",__VA_ARGS__)
  #elif CONFIG_PLATFORM==PLATFORM_WIN32
    #define Log(...)
       printf(__VA_ARGS__);printf("n")
  #else
    #define Log(...)
  #endif
Examples – Abstract Library
class TouchScreenBase { ... }
class TouchScreenMobile : public TouchScreenBase
{ ... }
class TouchScreenWin32 : public TouchScreenBase
{ ... }
#ifdef OS_ANDROID
  typedef TouchScreen TouchScreenMobile
#elif defined(WIN32)
  typedef TouchScreen TouchScreenWin32
#endif

//Usage: Just use TouchScreen Class
Examples – Abstract Library (2)
class   TouchScreenBase { ... }
class   TouchScreenMobile : public TouchScreenBase
{ ...   }
class   TouchScreenWin32 : public TouchScreenBase
{ ...   }

//Usage: Cast to TouchScreenBase Class
#ifdef OS_ANDROID
   TouchScreenBase* TS = new TouchScreenMobile()
#elif defined(WIN32)
   TouchScreenBase* TS = new TouchScreenWin32()
#endif
Multi-platform support
plan ahead, not fix later
Questions and Answers
Thanks for your attention! Contact me:
phuoc.nguyenhuu2@gameloft.com

2012, the awakening of the Vietnamese Game Development - Presentation multi platform development- Mr. Nguyen Huu Phuoc. Gameloft

  • 2.
    Who am I Nguyen Huu Phuoc, Team Leader at Gameloft HAN studio  Love to exchange knowledge and passion. Had several seminars and trainings in Hanoi-Aptech, GameLoft, Universities.
  • 3.
    Agenda  Gameloft Introduction Gameloft’s approach to Multi-Platform development  Tips, tricks and examples  Questions and Answers
  • 4.
    Gameloft: Leading developerand publisher Founded in 1999, to develop from mobiles & smart phones to cross-platform digital distribution Iphone, Ipod, Android Ipad Mobile Console
  • 5.
    Gameloft: Leading developerand publisher Presence in over 80 countries Agreements with over 200 carriers ~400,000 games sold per day
  • 6.
    Gameloft: Leading developerand publisher Production studios in 12 countries 5125 talented people
  • 7.
    Gameloft Vietnam isThe BIGGEST Gameloft Studio Worldwide The BIGGEST 1700 talented staffWorldwide More than Gameloft Studio More than 1000 talented staff
  • 8.
    Gameloft keeps ongrowing fast in Vietnam SAI 1 SAI 2 DAD HAN e-Town 2 Building - 18A Cong Hoa, Tan 74 Bach Dang, Hai 3rd&4th floor – 7Fl., 364 Cong Binh Dist., HCMC Chau Dist., Danang Lilama 10 Hoa, Tan Binh Since Aug-2008 City Le Van Luong, Hanoi Dist., HCMC Since Mar-2010 Since June-2011
  • 9.
    Gameloft HAN Studio Asphalt 6  Kingdom and Lords  Fantasy Town  Dungeon Hunter 3  Amazing Spiderman
  • 11.
  • 12.
    Our games arerunning on  iOS  Android  PS3  Windows Phone 7  bada  WebOS  Java embed  ….
  • 13.
    Our games arerunning on  iOS  Android  PS3  Windows Phone 7  bada  WebOS  Java embed …
  • 14.
    How could weaccomplished that?
  • 15.
    How could weaccomplished that? Different codebases for each platform?
  • 16.
    Different codebases foreach platform? Yes.
  • 17.
    Different codebases foreach platform? Yes. And No 
  • 18.
    Windows Game Platform Platform Platform- API Platform- API specific Wrapper specific Wrapper Features Features Platform- Platform- specific specific UI UI Android Game iOS Game
  • 19.
    Windows Game Built withC++, contains almost everything: UI Design Game-Logic Game Rendering Sound Multiplayer …
  • 20.
    Windows Game Android Game iOS Game Platform Platform API API Wrapper Wrapper •Android NDK •C++ auto-compat •Java wrapper: Activity, •UIWindow, UIViewController, View, Intent, Receiver UIView, UIApplicationDelegat e
  • 21.
    Windows Game AndroidGame iOS Game Platform Platform Platform- API Platform- API specific Wrapper specific Wrapper Features Features •Advertising •iAd •In-App Billing •In-App Purchase •Beam •Music Player
  • 22.
    Windows Game Android Game iOS Game Platform Platform Platform- API Platform- API specific Wrapper specific Wrapper Features Features Platform- Platform- specific specific UI UI •Push Notification toggle •iOS is normally the role- •Kindle Fire Volume model •Color Correction
  • 23.
    Windows Game Platform Platform Platform- API Platform- API specific Wrapper specific Wrapper Features Features Platform- Platform- specific specific UI UI Android Game iOS Game
  • 24.
    Advantages of Porting Big common code base: less bugs, less maintainance effort, less human resource  Only the things that really platform- specific are needed to be separated
  • 25.
    How? We built:  Ourown 3D engines and libraries (Networking, Sound, UI, Debugger…) which already support multi-platform  Online System to centralize the services: User profiles, Billing, Data downloading, Multi player….  Core Packages for general features in each platform
  • 26.
    Tips and tricks Try to build your game without a real device first  Graphics: Use OpenGL ES 2.0  Don’t hard-code. Do things explicitly. Have separated Configuration files.  Prepare your data wisely  Preprocessing is not only for C++  Keep an abstract macros/classes/library of code that using platform-specific API or behave differently on each platform
  • 27.
    Examples – Defines/Configuration #ifdef OS_ANDROID #define KEYCODE_BACK (4) #define KEYCODE_UP (19) #define KEYCODE_DOWN (20) #define KEYCODE_LEFT (21) #define KEYCODE_RIGHT (22) #elif defined(WIN32) #define KEYCODE_BACK (27) #define KEYCODE_UP (38) #define KEYCODE_DOWN (40) #define KEYCODE_LEFT (37) #define KEYCODE_RIGHT (39) #endif
  • 28.
    Examples – simplemacro #define PLATFORM_WIN32 1 #define PLATFORM_ANDROID 2 #define CONFIG_PLATFORM PLATFORM_WIN32 #if CONFIG_PLATFORM==PLATFORM_ANDROID #include <android/log.h> #define Log(...) __android_log_print(ANDROID_LOG_INFO, “GLGame",__VA_ARGS__) #elif CONFIG_PLATFORM==PLATFORM_WIN32 #define Log(...) printf(__VA_ARGS__);printf("n") #else #define Log(...) #endif
  • 29.
    Examples – AbstractLibrary class TouchScreenBase { ... } class TouchScreenMobile : public TouchScreenBase { ... } class TouchScreenWin32 : public TouchScreenBase { ... } #ifdef OS_ANDROID typedef TouchScreen TouchScreenMobile #elif defined(WIN32) typedef TouchScreen TouchScreenWin32 #endif //Usage: Just use TouchScreen Class
  • 30.
    Examples – AbstractLibrary (2) class TouchScreenBase { ... } class TouchScreenMobile : public TouchScreenBase { ... } class TouchScreenWin32 : public TouchScreenBase { ... } //Usage: Cast to TouchScreenBase Class #ifdef OS_ANDROID TouchScreenBase* TS = new TouchScreenMobile() #elif defined(WIN32) TouchScreenBase* TS = new TouchScreenWin32() #endif
  • 31.
  • 32.
    Questions and Answers Thanksfor your attention! Contact me: phuoc.nguyenhuu2@gameloft.com

Editor's Notes

  • #5 Development from mobiles &amp; smart phones… Gameloft supports over 1200 handsets
  • #27 hard-code? getDataFolder()explicitly? global char c; -&gt; c = -1 on Windows but 255 on GCC. cast from char* to int* -&gt; crash on Android.Standardize the data to suit the target platforms. VD: Ảnh nén PVRTC (trên iPhone và 1 số máy Android) thì phải vuông, ảnh phải là POT, ảnh nén ETC thì phải chia hết cho 4….KeyCode
  • #28 http://developer.sonymobile.com/wp/2011/02/13/xperia-play-game-keys/