SlideShare a Scribd company logo
1 of 99
Download to read offline
Echtzeit Browsergames
         Michael P. Jung <me@bikeshedder.com>




Thursday, 1. November 2012 [W]
Kapitel 0 – Michael P. Jung
         whoami




Thursday, 1. November 2012 [W]
Michael P. Jung
         Software Engineer und Designer


               Softwareentwickler
               C, C++, Python, Java (uvm.)        me@bikeshedder.com
               Linux Benutzer
               seit 1994

               Python Entwickler
               seit Python 2.3, ~2003

               Django Entwickler
               seit magic-removal branch, ~2006

               Brettspielefan

Thursday, 1. November 2012 [W]
http://terreon.de/
                     Software und Design




               Gegründet: 2000
               Echtzeit Client-Server-Anwendungen
               E-Commerce
               App-Developers (HTML5)
               Game Developers




Thursday, 1. November 2012 [W]
http://pyrox.eu/
                                 Hosting Experts
                                                   @pyrox_eu



               Gegründet: 2008
               Python Shared Hosting
               Individuelle Hostinglösungen
               “The next big thing” (ETA 2013)




Thursday, 1. November 2012 [W]
Kapitel 1 – Konzept
         Von der Idee zum Spiel




Thursday, 1. November 2012 [W]
Foto von doom.wikia.com
    Fotograf: Janzidreg




Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Kapitel 2 – Technik
         von async bis zmq




Thursday, 1. November 2012 [W]
Anatomie
         Was gehört zu einem Browsergame?




Thursday, 1. November 2012 [W]
Client                    Spielinhalte
                                 Browser                      Waffen

                      JavaScript Applikation                 Gegner

                                                            Missionen
                                 Server
                                                           Achievements
             Game server              Hub Server
                                                         Grafiken       GFX
                                           MoM
               Datenbank              Message oriented
                                        Middleware       Musik     Sounds


Thursday, 1. November 2012 [W]
Technologie Stack (Server)
               Python 2.7                        PostgreSQL
               http://python.org/                http://www.postgresql.org/

               Django                            RabbitMQ
               http://www.djangoproject.com/     http://www.rabbitmq.com/

               Django Socialauth                 Mushroom
               https://github.com/omab/django-   https://bitbucket.org/terreon/
               social-auth                       mushroom

               gevent                            Sync Models
               http://gevent.org/                https://bitbucket.org/terreon/sync-
                                                 models (noch nicht released)




Thursday, 1. November 2012 [W]
Technologie Stack (Client)
               JQuery                           Sync Models
               http://jquery.com/               https://bitbucket.org/terreon/sync-
                                                models (noch nicht released)
               Knockout
               http://knockoutjs.com/           Compass
                                                http://compass-style.org/
               Sugar
               http://sugarjs.com/

               Mushroom
               https://bitbucket.org/terreon/
               mushroom




Thursday, 1. November 2012 [W]
Architektur

                                 static.kodexgame.com
                                                        Database
                                   kodexgame.com
                   Browser
                                 hub.kodexgame.com
                                                         MoM
                                 gNNN.kodexgame.com



Thursday, 1. November 2012 [W]
Opoge Pusher
         Nette Idee, aber leider etwas umständlich...




Thursday, 1. November 2012 [W]
Opoge Pusher

               Publish-Subscribe Dienst
               Keine Permissions
               Senden von Nachrichten und Steuern der Subscribe
               ausschließlich über Kontrollkanal
               https://bitbucket.org/bikeshedder/opoge-pusher/




Thursday, 1. November 2012 [W]
Deployment

                                             Browser




                           Web Applikation             Opoge Pusher




Thursday, 1. November 2012 [W]
Ablauf
            Browser                               WebApp                    Pusher

                                     Login                 session.create

                                 Pusher Session

                                     Login

                                                           session.push

                                     Data




Thursday, 1. November 2012 [W]
Pro und Contra

               Einfach zu verwenden
               Kompatibel mit beliebigen Programmiersprachen
               Sessions müssen doppelt verwaltet werden
               Session-Pinning notwendig




Thursday, 1. November 2012 [W]
Mushroom
         Realtime web messaging




Thursday, 1. November 2012 [W]
Designziele
               Kein vollwertiger Dienst
               sondern ein Framework
               Eingebautes RPC
               Unterstützung von
               Message Queues




Thursday, 1. November 2012 [W]
Architektur

                                          Server



                    Call         Long polling   WebSocket    SSE*


                                          Client


                                                            *Server-sent events
Thursday, 1. November 2012 [W]
Mushroom Server (1/2)

         class GameServer(object):

                def __init__(self, listener):
                  self.server = mushroom.Server(listener,
                        mushroom.MethodDispatcher(self, ‘rpc_’))
                  self.mom = mushroom.messaging.Client(
                        settings.BROKER_URL,
                        exchange, queue,
                        mushroom.MethodDispatcher(self, ‘mom_’))


Thursday, 1. November 2012 [W]
Mushroom Server (2/2)

         class ChatServer(object):

                (...)

                def mom_message(self, request):
                  self.server.sessions.notify(‘message’, request.data)

                def rpc_message(self, request):
                  self.mom.notify(‘message’, request.data)


Thursday, 1. November 2012 [W]
Mushroom Client
         var client = new mushroom.Client({
             url: SERVER_URL
         });
         client.method.method(function(request) {
             console.log(request.data);
         });
         function sendMessage(text) {
             client.notify(‘message’, { text: text })
         }

Thursday, 1. November 2012 [W]
Download



               https://bitbucket.org/terreon/mushroom/




Thursday, 1. November 2012 [W]
Sync-Models
         Synchronisierte Objektgraphen




Thursday, 1. November 2012 [W]
Grundidee                                 Server


               Objektgraphen synchronisieren
               Änderungen vom von Server zum
               Client pushen (z.B. via Mushroom)      Push!!!11one
               Jedes Objekt erhält eine
               eindeutige Objekt ID
               Sobald ein Objekt Teil des Graphs
               wird werden Änderungen
               automatisch übertragen.                Client


Thursday, 1. November 2012 [W]
Zutaten


               Django (optional)
               “Simple JavaScript Inheritance” by John Resig
               KnockoutJS




Thursday, 1. November 2012 [W]
Beispiel Graph
                                 Server   Client




                                 Root     Root
                                  [0]      [0]




Thursday, 1. November 2012 [W]
Beispiel Graph
                                 Server   Client




                                 Root     Root
                                  [0]      [0]


                                   X




Thursday, 1. November 2012 [W]
Beispiel Graph
                                 Server   Client




                                 Root     Root
                                  [0]      [0]


                                   X
                                  [1]



Thursday, 1. November 2012 [W]
Beispiel Graph
                                 Server          Client




                                 Root            Root
                                  [0]             [0]


                                   X      push     X
                                  [1]             [1]



Thursday, 1. November 2012 [W]
Server

         from kodex.sync import models

         class BulletinBoard(models.RootModel):
            messages = models.ReferenceListField()

         class Message(models.Model):
            user = models.ReferenceField()
            text = models.StringField()

Thursday, 1. November 2012 [W]
Server
         from kodex.sync import server

         class Server(server.SyncServer):

                 def __init__(self):
                   self.root = BulletinBoard()

                 def post(message):
                   self.root.messages.append(message)

Thursday, 1. November 2012 [W]
Client

         bb.Client = kodex.sync.Client.extend({
            post: function(text) {
              this.request(‘post’, { text: text })
            }
         })

         var client = new bb.Client();
         $(‘#bb’).koApplyBindings(client);

Thursday, 1. November 2012 [W]
Client
         <div id=”bb”>
            <ul class=”messages” data-bind=”
               foreach: root().messages”>
                <li>
                    <span class=”user” data-bind=”
                      text: user”></span>:
                   <span class=”text” data-bind=”
                      text: user”></span>
                </li>
            </ul>
         </div>
Thursday, 1. November 2012 [W]
{
                “0”: {                            Protokoll
                   “class”: “bb.BulletinBoard”,
                                                   (Snapshot)
                   “messages*”: [1]
                },
                “1”: {
                   “class”: “bb.Message”,
                   “user*”: 2,
                   “text”: “Was rockt?”
                },
                “2”: {
                   “class”: “auth.User”,
                   “username”: “bikeshedder”
                }
         }
Thursday, 1. November 2012 [W]
{
                 “0”: {                       Protokoll
                    “messages*”: [2, 4]          (Update)
                 },
                 “4”: {
                    “class”: “bb.Message”,
                    “user*”: 5,
                    “text”: “PYCON DE 2012”
                 },
                 “5”: {
                    “class”: “auth.User”,
                    “username”: “solid”
                 }
         }
Thursday, 1. November 2012 [W]
Protokoll
                                          (Delete)
         {
                 “0”: {
                    “messages*”: [4]
                 },
                 “1”: null,
                 “2”: null
         }




Thursday, 1. November 2012 [W]
Kapitel 3 – Hosting
         Wie hoste ich ein System dieser Art?




Thursday, 1. November 2012 [W]
Google Appengine

               Asynchrone Kommunikation mit dem Client nur über
               die Channel API möglich.
               Stateful Services umständlich
               Verhältnismäßig teuer
               Wartungsfrei
               Lokale Entwicklung eingeschränkt



Thursday, 1. November 2012 [W]
Heroku

               Beliebt unter Entwicklern
               Serverstandort nur in USA
               Push-Dienst muss zusätzlich gebucht werden (z.B.
               Pusher oder PubNub)
               Lokale Entwicklung eingeschränkt




Thursday, 1. November 2012 [W]
Eigene Server
         virtuell oder physikalisch




               Server müssen gewartet werden
               Maximale Flexibilität
               Software läuft sowohl lokal als auch remote
               Kein Vendor Lock-in




Thursday, 1. November 2012 [W]
Kapitel 4 – Marketing
         Publisher, Social Marketing, P2P Propaganda




Thursday, 1. November 2012 [W]
Publisher




                                 }
               7 Games
               BigPoint
               Gameforge         Keine Resonanz
               Frogster
               ...




Thursday, 1. November 2012 [W]
Social-Networks

               Facebook
               http://kodexgame.com/facebook/
               Google+
               http://kodexgame.com/google+/
               Twitter
               http://kodexgame.com/twitter/




Thursday, 1. November 2012 [W]
P2P Propaganda



               Registrierung für Closed-Beta
               http://kodexgame.com/beta/




Thursday, 1. November 2012 [W]
Kapitel 5 – Geld verdienen
         Bezahlmodelle und -systeme




Thursday, 1. November 2012 [W]
Zahlungsmodelle
         Abo, Free to play, Premium Items,...




Thursday, 1. November 2012 [W]
Abo (Subscription)

               World of Warcraft hatte zeitweise bis zu 12 Millionen
               Abonnenten.
               Neue “Stammspiele” lassen sich schwer etablieren.
               Für kleinere Indie- oder Casualgames kein brauchbares
               Zahlungsmodell.




Thursday, 1. November 2012 [W]
Free to play

               Große Teile des Spiels sind spielbar aber bestimmte
               Inhalte und/oder die Spielzeit sind eingeschränkt.
               Premium Items können gegen Geld gekauft werden.
               Die Anzahl der Spielzüge ist begrenzt und kann durch
               Einsatz von Geld wieder aufgefüllt werden.




Thursday, 1. November 2012 [W]
Pay what you want



               Spieler bestimmen selbst was Sie für das Spiel
               bezahlen wollen.




Thursday, 1. November 2012 [W]
Werbefinanziert


               Kann große Teile der Spielatmosphäre zerstören
               Spieler können gegen ein Entgelt die Werbung
               entfernen lassen.




Thursday, 1. November 2012 [W]
Sponsored



               ... schön wär’s.




Thursday, 1. November 2012 [W]
Zahlungsmodell – Fazit
               Free to play ist Pflicht.
               Spielbalance sollte nicht darunter leiden.
               Unkritisch:
                     Spielzeit einschränken
                     Spielinhalte verkaufen
                     optische Individualisierung



Thursday, 1. November 2012 [W]
Bezahlsysteme
         PayPal, Amazon FPS, Google Checkout,
         Paymill, VirtualPiggy, Premium SMS,...




Thursday, 1. November 2012 [W]
Bezahlsysteme (1/4)

               PayPal: 0,35 € + 1,9% (non-EU teurer)
               PayPal Micropayment: 10 Cent + 10%
               Google Checkout: 0,20 £ + 3,4% (gestaffelt bis 1,4%)
               Amazon FPS (>10 $): 0,30 $ + 2,9%
               Amazon FPS (> 0,05 $): 0,05 $ + 5%
               Amazon FPS (<0,05 $): 20%
               ClickandBuy: 0,35 € + ~4%



Thursday, 1. November 2012 [W]
Bezahlsysteme (2/4)
                     Paymill: 0,28 € + 2,95%
                     VISA und MasterCard
                     https://www.paymill.de/
                     Fortumo: 45% – 60%
                     Premium SMS
                     http://fortumo.com/
                     Sofortüberweisung: 0,25 € + 0,9%
                     ...mit Abo (4,90 €/Monat): 0,10 € + 0,85%



Thursday, 1. November 2012 [W]
Bezahlsysteme (3/4)

                     VirtualPiggy
                     Payment Lösung für Kinder und Jugendliche
                     http://virtualpiggy.com/
                     Pay by Call
                     T-Pay wurde 2010 eingestellt
                     DaoPay: Gebühren nicht öffentlich
                     paysafecard: 15% - 17%



Thursday, 1. November 2012 [W]
Bezahlsysteme (4/4)



               Publisher bzw. Platform




Thursday, 1. November 2012 [W]
Kapitel 6 – Lessons learned
         Oooops...




Thursday, 1. November 2012 [W]
Lektion 1: Releases
         “When it’s done” = Flexible Releaseplanung




Thursday, 1. November 2012 [W]
Releases

               Closed Beta – 1. April 2012
               Closed Beta – 4. Juni 2012 (DjangoCon Europe)
               Closed Beta – 15. August 2012 (gamescom)
               Closed Beta – 30. Oktober 2012 (PYCON DE)
               Closed Beta – 1. Januar 2013 (*sigh*)




Thursday, 1. November 2012 [W]
Lektion 2: Jugendschutz
         Unterhaltungssoftware Selbstkontrolle




Thursday, 1. November 2012 [W]
Jugendschutz

               Nur Spiele, die auf einem Speichermedium vertrieben
               werden müssen von der USK geprüft werden.
               Browsergames können optional geprüft werden.
               Einmalige Prüfung: 300 EUR
               Jahresmitgliedschaft: 3.000 EUR + Prüfgremium + X
               Jugendschutzlabel empfehlenswert:
               /age-de.xml im Root-Verzeichnis der Domain ablegen



Thursday, 1. November 2012 [W]
Lektion 3: Kein IE
         Internet Explorer? Nein Danke!




Thursday, 1. November 2012 [W]
Kein Internet Explorer

               Verwendung von Chrome Frames:
               https://developers.google.com/chrome/chrome-frame/

               Akzeptanz für Spiele mit Browser-Plugins ist merklich
               gestiegen. Chrome Frame ist in wenigen Minuten
               installiert und sofort einsatzbereit.
               Anwender mit Internet Explorer und ohne Chrome
               Frame werden ignoriert.



Thursday, 1. November 2012 [W]
Lektion 4: NIH
         Not invented here




Thursday, 1. November 2012 [W]
Not invented here

               Opoge Pusher
               Dependency Injection
               JavaScript Bundler
               ...




Thursday, 1. November 2012 [W]
Kapitel 7 – KODEX
         Join the intergalactic scavenger hunt.




Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Thursday, 1. November 2012 [W]
Michael P. Jung <me@bikeshedder.com>




                                     KODEX beta sign-up:
                                 http://kodexgame.com/beta/
Thursday, 1. November 2012 [W]

More Related Content

PYCON DE 2012 - Echtzeit browsergames

  • 1. Echtzeit Browsergames Michael P. Jung <me@bikeshedder.com> Thursday, 1. November 2012 [W]
  • 2. Kapitel 0 – Michael P. Jung whoami Thursday, 1. November 2012 [W]
  • 3. Michael P. Jung Software Engineer und Designer Softwareentwickler C, C++, Python, Java (uvm.) me@bikeshedder.com Linux Benutzer seit 1994 Python Entwickler seit Python 2.3, ~2003 Django Entwickler seit magic-removal branch, ~2006 Brettspielefan Thursday, 1. November 2012 [W]
  • 4. http://terreon.de/ Software und Design Gegründet: 2000 Echtzeit Client-Server-Anwendungen E-Commerce App-Developers (HTML5) Game Developers Thursday, 1. November 2012 [W]
  • 5. http://pyrox.eu/ Hosting Experts @pyrox_eu Gegründet: 2008 Python Shared Hosting Individuelle Hostinglösungen “The next big thing” (ETA 2013) Thursday, 1. November 2012 [W]
  • 6. Kapitel 1 – Konzept Von der Idee zum Spiel Thursday, 1. November 2012 [W]
  • 7. Foto von doom.wikia.com Fotograf: Janzidreg Thursday, 1. November 2012 [W]
  • 19. Kapitel 2 – Technik von async bis zmq Thursday, 1. November 2012 [W]
  • 20. Anatomie Was gehört zu einem Browsergame? Thursday, 1. November 2012 [W]
  • 21. Client Spielinhalte Browser Waffen JavaScript Applikation Gegner Missionen Server Achievements Game server Hub Server Grafiken GFX MoM Datenbank Message oriented Middleware Musik Sounds Thursday, 1. November 2012 [W]
  • 22. Technologie Stack (Server) Python 2.7 PostgreSQL http://python.org/ http://www.postgresql.org/ Django RabbitMQ http://www.djangoproject.com/ http://www.rabbitmq.com/ Django Socialauth Mushroom https://github.com/omab/django- https://bitbucket.org/terreon/ social-auth mushroom gevent Sync Models http://gevent.org/ https://bitbucket.org/terreon/sync- models (noch nicht released) Thursday, 1. November 2012 [W]
  • 23. Technologie Stack (Client) JQuery Sync Models http://jquery.com/ https://bitbucket.org/terreon/sync- models (noch nicht released) Knockout http://knockoutjs.com/ Compass http://compass-style.org/ Sugar http://sugarjs.com/ Mushroom https://bitbucket.org/terreon/ mushroom Thursday, 1. November 2012 [W]
  • 24. Architektur static.kodexgame.com Database kodexgame.com Browser hub.kodexgame.com MoM gNNN.kodexgame.com Thursday, 1. November 2012 [W]
  • 25. Opoge Pusher Nette Idee, aber leider etwas umständlich... Thursday, 1. November 2012 [W]
  • 26. Opoge Pusher Publish-Subscribe Dienst Keine Permissions Senden von Nachrichten und Steuern der Subscribe ausschließlich über Kontrollkanal https://bitbucket.org/bikeshedder/opoge-pusher/ Thursday, 1. November 2012 [W]
  • 27. Deployment Browser Web Applikation Opoge Pusher Thursday, 1. November 2012 [W]
  • 28. Ablauf Browser WebApp Pusher Login session.create Pusher Session Login session.push Data Thursday, 1. November 2012 [W]
  • 29. Pro und Contra Einfach zu verwenden Kompatibel mit beliebigen Programmiersprachen Sessions müssen doppelt verwaltet werden Session-Pinning notwendig Thursday, 1. November 2012 [W]
  • 30. Mushroom Realtime web messaging Thursday, 1. November 2012 [W]
  • 31. Designziele Kein vollwertiger Dienst sondern ein Framework Eingebautes RPC Unterstützung von Message Queues Thursday, 1. November 2012 [W]
  • 32. Architektur Server Call Long polling WebSocket SSE* Client *Server-sent events Thursday, 1. November 2012 [W]
  • 33. Mushroom Server (1/2) class GameServer(object): def __init__(self, listener): self.server = mushroom.Server(listener, mushroom.MethodDispatcher(self, ‘rpc_’)) self.mom = mushroom.messaging.Client( settings.BROKER_URL, exchange, queue, mushroom.MethodDispatcher(self, ‘mom_’)) Thursday, 1. November 2012 [W]
  • 34. Mushroom Server (2/2) class ChatServer(object): (...) def mom_message(self, request): self.server.sessions.notify(‘message’, request.data) def rpc_message(self, request): self.mom.notify(‘message’, request.data) Thursday, 1. November 2012 [W]
  • 35. Mushroom Client var client = new mushroom.Client({ url: SERVER_URL }); client.method.method(function(request) { console.log(request.data); }); function sendMessage(text) { client.notify(‘message’, { text: text }) } Thursday, 1. November 2012 [W]
  • 36. Download https://bitbucket.org/terreon/mushroom/ Thursday, 1. November 2012 [W]
  • 37. Sync-Models Synchronisierte Objektgraphen Thursday, 1. November 2012 [W]
  • 38. Grundidee Server Objektgraphen synchronisieren Änderungen vom von Server zum Client pushen (z.B. via Mushroom) Push!!!11one Jedes Objekt erhält eine eindeutige Objekt ID Sobald ein Objekt Teil des Graphs wird werden Änderungen automatisch übertragen. Client Thursday, 1. November 2012 [W]
  • 39. Zutaten Django (optional) “Simple JavaScript Inheritance” by John Resig KnockoutJS Thursday, 1. November 2012 [W]
  • 40. Beispiel Graph Server Client Root Root [0] [0] Thursday, 1. November 2012 [W]
  • 41. Beispiel Graph Server Client Root Root [0] [0] X Thursday, 1. November 2012 [W]
  • 42. Beispiel Graph Server Client Root Root [0] [0] X [1] Thursday, 1. November 2012 [W]
  • 43. Beispiel Graph Server Client Root Root [0] [0] X push X [1] [1] Thursday, 1. November 2012 [W]
  • 44. Server from kodex.sync import models class BulletinBoard(models.RootModel): messages = models.ReferenceListField() class Message(models.Model): user = models.ReferenceField() text = models.StringField() Thursday, 1. November 2012 [W]
  • 45. Server from kodex.sync import server class Server(server.SyncServer): def __init__(self): self.root = BulletinBoard() def post(message): self.root.messages.append(message) Thursday, 1. November 2012 [W]
  • 46. Client bb.Client = kodex.sync.Client.extend({ post: function(text) { this.request(‘post’, { text: text }) } }) var client = new bb.Client(); $(‘#bb’).koApplyBindings(client); Thursday, 1. November 2012 [W]
  • 47. Client <div id=”bb”> <ul class=”messages” data-bind=” foreach: root().messages”> <li> <span class=”user” data-bind=” text: user”></span>: <span class=”text” data-bind=” text: user”></span> </li> </ul> </div> Thursday, 1. November 2012 [W]
  • 48. { “0”: { Protokoll “class”: “bb.BulletinBoard”, (Snapshot) “messages*”: [1] }, “1”: { “class”: “bb.Message”, “user*”: 2, “text”: “Was rockt?” }, “2”: { “class”: “auth.User”, “username”: “bikeshedder” } } Thursday, 1. November 2012 [W]
  • 49. { “0”: { Protokoll “messages*”: [2, 4] (Update) }, “4”: { “class”: “bb.Message”, “user*”: 5, “text”: “PYCON DE 2012” }, “5”: { “class”: “auth.User”, “username”: “solid” } } Thursday, 1. November 2012 [W]
  • 50. Protokoll (Delete) { “0”: { “messages*”: [4] }, “1”: null, “2”: null } Thursday, 1. November 2012 [W]
  • 51. Kapitel 3 – Hosting Wie hoste ich ein System dieser Art? Thursday, 1. November 2012 [W]
  • 52. Google Appengine Asynchrone Kommunikation mit dem Client nur über die Channel API möglich. Stateful Services umständlich Verhältnismäßig teuer Wartungsfrei Lokale Entwicklung eingeschränkt Thursday, 1. November 2012 [W]
  • 53. Heroku Beliebt unter Entwicklern Serverstandort nur in USA Push-Dienst muss zusätzlich gebucht werden (z.B. Pusher oder PubNub) Lokale Entwicklung eingeschränkt Thursday, 1. November 2012 [W]
  • 54. Eigene Server virtuell oder physikalisch Server müssen gewartet werden Maximale Flexibilität Software läuft sowohl lokal als auch remote Kein Vendor Lock-in Thursday, 1. November 2012 [W]
  • 55. Kapitel 4 – Marketing Publisher, Social Marketing, P2P Propaganda Thursday, 1. November 2012 [W]
  • 56. Publisher } 7 Games BigPoint Gameforge Keine Resonanz Frogster ... Thursday, 1. November 2012 [W]
  • 57. Social-Networks Facebook http://kodexgame.com/facebook/ Google+ http://kodexgame.com/google+/ Twitter http://kodexgame.com/twitter/ Thursday, 1. November 2012 [W]
  • 58. P2P Propaganda Registrierung für Closed-Beta http://kodexgame.com/beta/ Thursday, 1. November 2012 [W]
  • 59. Kapitel 5 – Geld verdienen Bezahlmodelle und -systeme Thursday, 1. November 2012 [W]
  • 60. Zahlungsmodelle Abo, Free to play, Premium Items,... Thursday, 1. November 2012 [W]
  • 61. Abo (Subscription) World of Warcraft hatte zeitweise bis zu 12 Millionen Abonnenten. Neue “Stammspiele” lassen sich schwer etablieren. Für kleinere Indie- oder Casualgames kein brauchbares Zahlungsmodell. Thursday, 1. November 2012 [W]
  • 62. Free to play Große Teile des Spiels sind spielbar aber bestimmte Inhalte und/oder die Spielzeit sind eingeschränkt. Premium Items können gegen Geld gekauft werden. Die Anzahl der Spielzüge ist begrenzt und kann durch Einsatz von Geld wieder aufgefüllt werden. Thursday, 1. November 2012 [W]
  • 63. Pay what you want Spieler bestimmen selbst was Sie für das Spiel bezahlen wollen. Thursday, 1. November 2012 [W]
  • 64. Werbefinanziert Kann große Teile der Spielatmosphäre zerstören Spieler können gegen ein Entgelt die Werbung entfernen lassen. Thursday, 1. November 2012 [W]
  • 65. Sponsored ... schön wär’s. Thursday, 1. November 2012 [W]
  • 66. Zahlungsmodell – Fazit Free to play ist Pflicht. Spielbalance sollte nicht darunter leiden. Unkritisch: Spielzeit einschränken Spielinhalte verkaufen optische Individualisierung Thursday, 1. November 2012 [W]
  • 67. Bezahlsysteme PayPal, Amazon FPS, Google Checkout, Paymill, VirtualPiggy, Premium SMS,... Thursday, 1. November 2012 [W]
  • 68. Bezahlsysteme (1/4) PayPal: 0,35 € + 1,9% (non-EU teurer) PayPal Micropayment: 10 Cent + 10% Google Checkout: 0,20 £ + 3,4% (gestaffelt bis 1,4%) Amazon FPS (>10 $): 0,30 $ + 2,9% Amazon FPS (> 0,05 $): 0,05 $ + 5% Amazon FPS (<0,05 $): 20% ClickandBuy: 0,35 € + ~4% Thursday, 1. November 2012 [W]
  • 69. Bezahlsysteme (2/4) Paymill: 0,28 € + 2,95% VISA und MasterCard https://www.paymill.de/ Fortumo: 45% – 60% Premium SMS http://fortumo.com/ Sofortüberweisung: 0,25 € + 0,9% ...mit Abo (4,90 €/Monat): 0,10 € + 0,85% Thursday, 1. November 2012 [W]
  • 70. Bezahlsysteme (3/4) VirtualPiggy Payment Lösung für Kinder und Jugendliche http://virtualpiggy.com/ Pay by Call T-Pay wurde 2010 eingestellt DaoPay: Gebühren nicht öffentlich paysafecard: 15% - 17% Thursday, 1. November 2012 [W]
  • 71. Bezahlsysteme (4/4) Publisher bzw. Platform Thursday, 1. November 2012 [W]
  • 72. Kapitel 6 – Lessons learned Oooops... Thursday, 1. November 2012 [W]
  • 73. Lektion 1: Releases “When it’s done” = Flexible Releaseplanung Thursday, 1. November 2012 [W]
  • 74. Releases Closed Beta – 1. April 2012 Closed Beta – 4. Juni 2012 (DjangoCon Europe) Closed Beta – 15. August 2012 (gamescom) Closed Beta – 30. Oktober 2012 (PYCON DE) Closed Beta – 1. Januar 2013 (*sigh*) Thursday, 1. November 2012 [W]
  • 75. Lektion 2: Jugendschutz Unterhaltungssoftware Selbstkontrolle Thursday, 1. November 2012 [W]
  • 76. Jugendschutz Nur Spiele, die auf einem Speichermedium vertrieben werden müssen von der USK geprüft werden. Browsergames können optional geprüft werden. Einmalige Prüfung: 300 EUR Jahresmitgliedschaft: 3.000 EUR + Prüfgremium + X Jugendschutzlabel empfehlenswert: /age-de.xml im Root-Verzeichnis der Domain ablegen Thursday, 1. November 2012 [W]
  • 77. Lektion 3: Kein IE Internet Explorer? Nein Danke! Thursday, 1. November 2012 [W]
  • 78. Kein Internet Explorer Verwendung von Chrome Frames: https://developers.google.com/chrome/chrome-frame/ Akzeptanz für Spiele mit Browser-Plugins ist merklich gestiegen. Chrome Frame ist in wenigen Minuten installiert und sofort einsatzbereit. Anwender mit Internet Explorer und ohne Chrome Frame werden ignoriert. Thursday, 1. November 2012 [W]
  • 79. Lektion 4: NIH Not invented here Thursday, 1. November 2012 [W]
  • 80. Not invented here Opoge Pusher Dependency Injection JavaScript Bundler ... Thursday, 1. November 2012 [W]
  • 81. Kapitel 7 – KODEX Join the intergalactic scavenger hunt. Thursday, 1. November 2012 [W]
  • 99. Michael P. Jung <me@bikeshedder.com> KODEX beta sign-up: http://kodexgame.com/beta/ Thursday, 1. November 2012 [W]