Journal de bord

Journal de bord

Par Swing Swing Submarine Blog créé le 08/01/10 Mis à jour le 05/04/15 à 22h03

Ajouter aux favoris
Signaler
Blocks That Matter

Salut tout le monde !

Aujourd'hui on ne va pas encore revenir sur les ventes hebdomadaires de "Blocks That Matter" mais plutôt... Quoi ? Vous les voulez vraiment ? Bon ok, mais rapidement alors, et juste après on parle (enfin !) des versions Windows/Mac/Linux.

Attention, ça va être un peu technique, mais je l'espère quand même un peu intéressant.

 

> Couverture média

E3 oblige, BTM s'est fait discret sur la toile cette semaine. Mais est-ce que vous avez vu Rayman Origins, From Dust, Journey, Sound Shapes et PixelJunk : Side Scroller ? Voilà des titres plutôt rafraichissants au milieu de tout ces "Modern War Shooter" fps.

 

> Ventes

Bien, à présent voici l'état des ventes depuis la semaine dernière.

Comme vous le pouvez le voir, le jeu s'est massivement vendu en France et...presque pas ailleurs. Cela s'explique par un manque flagrant de couverture par des sites étrangers.

Il semble que nous ayons donc des difficultés à trouver notre public au Royaume-Uni et aux Etats-Unis. Peut-être avec la sortie PC ?

Vous y êtes habitués maintenant, voici donc les chiffres, jour après jour, au format "ventes/téléchargements (taux de conversion)".

- j23 (6/3/2011) : 61/ 280 (21.7%)
- j24 (6/4/2011) : 86 / 251 (34.2%)
- j25 (6/5/2011) : 99 / 285 (34.7%)
- j26 (6/6/2011) : 47 / 171 (27.4%)
- j27 (6/7/2011) : 33 / 83 (39.7%)
- j28 (6/8/2011) : 33 / 86 (38.3%)
- j29 (6/9/2011) : 28 / 77 (36.3%)
- j30 (6/10/2011) : 27 / 89 (30.3%)
- j31 (6/11/2011) : 37 / 93 (39.7%)
- j32 (6/12/2011) :39 / 84 (46.4%)

- total: 244 / 683 (35.7%)

- global: 1850 / 9558 (19.3%)

Et une jolie courbe pour illustrer l'évolution des ventes depuis le premier jour :

1.850 ventes en un mois, c'est pas mal...mais toujours pas suffisant pour manger. C'est pourquoi les versions PC sont vitales pour le futur de Swing Swing Submarine. On est en tout cas bien loin des 251.355 ventes de FortressCraft :]

 

> Du côté des joueurs

Encore merci à tous ceux qui, parmi vous, nous ont envoyés un mail ou deux pour nous dire que vous aviez terminé le jeu et surtout pour nous dire ce que vous en avez pensé. c'est toujours un plaisir d'avoir des retours de joueurs.

Nous avons également reçu plusieurs messages provenant de joueurs impatients ou qui pensaient que les versions PC étaient déjà disponibles. Impossible pour l'instant d'avancer une date précise (même si cest pour bientôt), par contre on peut tout à fait vous dire où nous sommes du portage !

 

> A propos du portage de "Blocks That Matter"

Comme vous le savez, BTM est disponible sur Xbox Live Indie Games, ce qui signifie qu'il a été développé en utilisant le language C# (on dit aussi C-sharp) et le framework Xna. Xna est un framework qui ne tourne que sur Xbox et sur Windows, et nécessite également le framework .NET 4.0 qui est ni plus ni moins qu'une technologie Microsoft.

En gros, on aurait tout à fait pu proposer le jeu sur Windows dès le jour de sa sortie Xbox, mais comme il nous semble important de ne pas laisser les utilisateurs Mac et Linux sur le carreau, nous avons entamé le portage du jeu afin de proposer une version "universelle" sur ordinateurs.

Il nous a bien évidemment fallu faire des choix. Au final, j'ai retenu deux solutions, et vous allez voir laquelle donne les meilleurs résultats sur les 3 plateformes.

 

>> La méthode "facile"

Plusieurs amis développeurs (Garry, Marc et Elisée) m'ont parlé de "Mono Game".

>>> Presentation

Mono Game est un portage multi-plateforme du framework Xna qui utilise Mono.

Mais alors, c'est quoi Mono (rapidement) ?

Mono est une implémentation multi-plateforme du framework .NET (incluant les compilateurs). Cela signifie que si vous programmez en utilisant Mono, vous écrirez exactement le même code que si vous utilisiez le framework .NET lui-même...mais que votre code tournera sur les plateformes supportées par Mono.

Mono n'est qu'un "portage" (plus précisément une implémentation) du framework .NET, il n'inclut pas la couche du framework Xna qui permet de gérer l'affichage (accéléré matériellement) ou encore l'audio, la gestion des manettes, etc.
Afin de gérer de telles fonctionnalités, Mono Game s'appuie sur une autre librairie (encore une!) : OpenTK. OpenTK permet a Mono (ou .NET) d'accéder à des librairies (encores d'autres !) comme OpenGL (rendu) ou OpenAL (son) alors que ces librairies sont écrites dans un autre language (le C).

 

>>> Pourquoi est-ce la méthode "facile" ?

Vu le dernier paragraphe compliqué, vous vous demandez sûrement en quoi tout cela semble facile puisque cette méthode implique de nombreux frameworks et librairies !

En fait, l'intérêt de ces librairies est qu'elles vous permettent de conserver votre code C# déjà existant. En théorie, tout ce que vous avez à faire c'est de compiler avec ces librairies, la syntaxe du code restera la même. Plutôt cool, non ?

 

>>> Ce que j'ai obtenu avec Mono Game jusqu'à présent

Il ne m'a fallu qu'un petit week-end pour porter le jeu avec Mono Game. J'ai apporté quelques modifications à la librairie de Mono Game (qui est open source) afin de réussir à faire tourner Blocks That Matter car la librairie ne prend pas en charge la lecture et le chargement des fichiers XML, ni les contrôles claviers (seulement le support écran tactile pour iPhone/Android...que nous n'utilisons pas).

Il n'y a pas encore de support audio dans Mono Game, vous devez donc tout écrire vous-même en utilisant OpenTK (grâce à l'encapsulation d'OpenAL) et faire aussi quelques implémentations de classes Xna.

Comme le son n'est pas crucial dans un premier test, j'ai dédidé d'essayer sans trop m'en préoccuper, et voilà ce que j'ai obtenu après plusieurs heures de travail :

 

Le rendu est un peu saccadé et ça n'est pas dû qu'à la capture Fraps. Même sans Fraps, j'obtiens des chutes de framerate (le jeu met largement plus de 33ms pour rendre une image, et le framerate est très variable. Pour info, un jeu à 60FPS met 16ms pour rendre une image).

Il faudrait que je fouille un peu plus pour voir où se situe le goulot d'étranglement...peut-être dans Mono Game...ou simplement dans Mono.

Je ne pense pas que ce soit dans le code du jeu puisque le jeu tourne parfaitement avec l'implémentation Xna/C#/.NET, même sur mon Mac Mini (sous Windows).

 

>>> Les + de Mono Game

- Facile de maintenir toutes les versions (console, Win, Mac, Linux) puisqu'il sagit d'une même code à la base

- Pas besoin d'ajouter beaucoup de code pour faire tourner le jeu avec Mono Game

- Pas vraiment un portage, plutôt une "émulation"

 

>>> Les - de Mono Game

- De très mauvaises performances pour le moment

- Pas facile à déployer sous Linux (trop de dépendances)

- Pas vraiment un portage, plutôt une "émulation" (oui c'est aussi un -)

 

>> La méthode "difficile"

Enfin difficile, disons que ce n'est pas la plus difficile de toutes. Elle consiste à porter le code du jeu en Java, ainsi qu'un équivalent du framework Xna et des fonctionnalités utiles au jeu apportées par le framework .NET.

 

>>> Présentation

 

Java est un language de programmation qui a la particularité d'être pensé pour faciliter le déploiement multiplateforme puisqu'il s'appuie sur des Machines Virtuelles pour exécuter du "bytecode".

Bien que Java ne soit à la base pas fait pour afficher des éléments accélérés en hardware (matériel, avec une carte 3D), ni pour jouer des effets audio complexes, une feature spéciale permet à Java d'utiliser des librairies C ou C++. En effet, avec JNI quelques librairies comme OpenGL (rendu) et OpenAL (audio) peuvent être encapsulées et manipulées depuis du code JAVA.

C'est ce que j'ai utilisé à travers une librairie appellée LWJGL. Cette librairie facilite la création de pas mal de choses (créer une fenêtre, un contexte Open GL, etc...) et englobe des librairies orientées "jeux" bien utiles.

 

>>> Pourquoi est-ce la méthode "difficile" ?

C'est la méthode "difficile" principalement parce que vous devez réécrire du code (parfois beaucoup), Java et C# ne fonctionnent pas de la même façon. Heureusement, les deux languages ont quand même des similarités : ils utilisent tous les deux un système de gestion de mémoire et sont orientés Objet (vous allez le voir en image plus loin).

C# étant la réponse de Microsoft à Java, les deux languages partagent le même ADN et il n'est pas rare de voir de troublantes similarités entre les classes de Java et de .NET.

Voici une fonction qui dit si un "upgrader" (les grosses boites grises dans le jeu) peuvent ou non s'ouvrir quand le joueur collecte un nouveau bloc. A gauche la version Java, à droite l'originale en C#.

Les deux codes sont très similaires, et ça l'est parfois encore plus (bon parfois moins aussi).

 

>>> Ce que j'ai obtenu avec Java jusqu'à présent

Toutes les cinématiques et tous les niveaux se chargent. Les contrôles (claviers et gamepad) sont pris en charge, les sons ne sont pas encore implémentés. Voici ce que j'ai obtenu après 2 ou 3 semaines de travail :

 

Comme vous pouvez le voir, le framerate est bien meilleur ici que sur le portage Mono Game (même machine, même outil de capture, même durée).

Bien sûr, il reste encore des choses qui sont un peu cassées (comme la police de caractères et la position de l'oeil du Tetrobot, le pauvre). Comme pour la version Mono Game, je n'ai pas encore implémenté les sons (bien qu'une partie du code soit déjà portée).

 

>>> Les + de Java

- Les performances sont là pour un petit jeu comme le nôtre

- Parfois très proche du C# en terme de syntaxe

- Une applet in browser envisageable (pour une démo ? Pour de la promotion ?)

- Déploiement sur plusieurs plateformes avec les mêmes performances (voir les images ci-dessous)

 

>>> Les - de Java

- Et parfois c'est quand même très éloigné du C# en terme de syntaxe

- Obligation de réécrie (et parfois copier/coller ou adapter) beaucoup de code

 

>> Et la méthode "super difficile" ?

Hé bien ça aurait été de réécrire entièrement le jeu en C++, ce qui est bien plus long que de réécrire en Java puisque C# et C++ n'ont pas grand-chose en commun (si ce n'est que ce sont deux languages orientés Objet).

 

>> Les prochaines étapes du portage

Je pense que je vais concentrer mes efforts sur la version Java puisque c'est celle qui offre les meilleures performances et qui nous simplifie le déploiement sur Win/Mac/Linux.

La prochaine étape pour moi est de faire fonctionner les sons. Puis de corriger quelques bugs ici et là, remplacer la police de caractères et faire quelques optimisations Java (et il y a de quoi faire, mes souvenirs de Java sont un peu rouillé par moments, mais j'ai mon Mojo).
 Et reste aussi à implémenter les nouvelles fonctionnalités promises avec les versions PC. Oui, c'est beaucoup de travail ! Mais d'un autre côté, vous méritez, joueurs PC, une version décente du jeu vous aussi !

On aura d'ailleurs sûrement besoin de volontaires pour lancer une application de test sur vos machines, on en a déjà quelques'uns mais on lancera bientôt un nouvel appel via un post dédié !

 

A la prochaine !

Des bisous.

 

Guillaume

Ajouter à mes favoris Commenter (32)

Commentaires

Swing Swing Submarine
Signaler
Swing Swing Submarine
La plupart du temps, si on est silencieux c'est qu'on travaille.
Mais je vais quand même écrire un petit truc aujourd'hui :)

William
Mortipoil
Signaler
Mortipoil
Encore une interview intéressante de William (décidément) :

http://www.01net.com...ce-sur-console/

Z'avez rien à nous dire sur vos projets à compter du mois de Juillet (hormis partir manger des noix de coco aux Bahamas bien évidemment) ? :)
Mortipoil
Signaler
Mortipoil
Ah, et je me reconnecte petit à petit avec l'actu vidéoludique et je suis en train d'écouter l'interview de William sur GK. Très intéressant.
L'émission a-t'elle boosté les ventes?
Et qu'est devenu le studio Mekensleep? J'avais beaucoup aimé Soul Bubbles, mais il s'est très mal vendu je crois.

Sinon les lasagnes étaient très bonnes.
Mortipoil
Signaler
Mortipoil
What's up pussycat?
D'après Major Nelson BTM ne fait pas partie du clasement des meilleures ventes XBLIG, donc j'imagine que les nouvelles ventes doivent se comptabiliser uniquement en dizaines ou centaines de téléchargements?

Comment avance le portage du jeu?

Et quelle est votre stratégie pour les prochains mois, au vu des ventes sur Xbox? Un nouveau jeu en préparation? Du portage de BTM uniquement pour réduire au maximum les frais en attendant de plus grosses rentrées d'argent?

Qu'est-ce que vous vous faites de bon à manger ce soir? Que de questions qui méritent des réponses pour les petits curieux que nous sommes :)

Bientôt midi chez moi, mon lunch consiste en un tupperware de lasagnes maison préparées par ma femme hier soir (et qui sont pratiquement aussi bonnes que les miennes :)).
Swing Swing Submarine
Signaler
Swing Swing Submarine
Merci hollowhell :)

On te rajoute à la liste des MacUsers :]

Guillaume
hollowhell
Signaler
hollowhell
J'achète sur mac en day one. Vous savez tout mon soutien ;) Et si y'a besoin d'un test sous mac os x, je suis là.
Swing Swing Submarine
Signaler
Swing Swing Submarine
Salut Enimal :)

Oki je note, on vous tiens au courant quand on est ready to test !

Guillaume
Enimal
Signaler
Enimal
Moi aussi moi aussi, si je peux vous aider ce sera avec plaisir. J'ai windows et linux, je serais donc un double testeur.
Swing Swing Submarine
Signaler
Swing Swing Submarine
Hehe, ça roule pour la glaise :]

Et pour le portable aussi ! Je te rajoute à la liste des volontaire, même si on fera un post dédié pour un appel à vos les joueurs fous guedins (I'm so 90' dans mon langage, ça fait peur).
J'espère que BTM tournera... si t'arrive à faire tourner Crysis 3 :]

A plus l'ami :]

Guillaume
Mortipoil
Signaler
Mortipoil
Tant pis Guillaume, on modèlera ensemble dans la glaise de nos petites mains de potiers un monde idéal avec des palmiers, de l'amour et de l'eau fraîche, et cette utopie se fera sur xbox bien entendu :)

Je suis bien évidemment volontaire pour tester les performances de BTM sur mon Netbook du futur tout fraîchement acheté (mais attention il a des performances qui déboitent avec un tout nouveau proc AMD et du décodage en 1080p, attention ça ne rigole pas, Crysis 3 peut trembler dans son slip en DirectX15).
Swing Swing Submarine
Signaler
Swing Swing Submarine
Hehe Mortipoil is BACK :), donc Salut Mortipoil !

Merci pour ton commentaire :] Malgré un post qui, il faut bien l'avouer, est un peu trop brouillon et technique. Je voulais faire des schéma mais le temps passé dessus aurait été bien allongé. La prochaine fois... quand j'aurais un peu plus de temps !

Pour les ventes, je sais pas, en France grâce à vous ça se passe pas trop mal. Et malgré la "rechute" des ventes, on est pas très loin dans le classement FR des ventes (genre meilleures ventes de la semaine), on peut donc en conclure que le XBLIG n'est pas une machine à vendre (à part des cas particuliers, genre FortressCraft).

Là on a 2 copains français qui ont sorti leur jeu XBLIG la semaine dernière (The Great Paper Adventure et QuadSmash), on va bien voir si il nous parle de ventes sur la 1ère semaine, histoire de pouvoir comparer.

Bon je retourne à mon portage !

Bisous en retour :)

Et From Dust c'est pour bientôt vu qu'ils ont eu le Summer Of Arcade (hehe, c'était le suspens ces derniers temps et ils l'ont su pas très longtemps avant l'E3). Du coup je voulais le prendre sur PS3... mais je crois que je vais pas pouvoir attendre :-/

Guillaume
Mortipoil
Signaler
Mortipoil
Je vais me coucher moins ignare ce soir, c'était très intéressant ce survol des techniques de programmation :)
Mais pourquoi le jeu ne se vend-il pas alors qu'il est excellent? C'est rageant.
En espérant que les faibles ventes ne soient dues qu'à la plateforme XBLIG et qu'une meilleure visibilité soit possible sur les autres plateformes.

Je vous fais des bisous (en attendant impatiemment From Dust).
Swing Swing Submarine
Signaler
Swing Swing Submarine
Salut David !

Merci pour ton soutien, on n'hésitera pas à te contacter pour quelques conseils !
Merci encore.

Guillaume
David Jeuvideo
Signaler
David Jeuvideo
Encore un super post.
Bon courage à vous!
Je sais que ce n'est vraiment pas évident.
Si vous avez besoin de quelques conseils, faites moi signe ;-)
Swing Swing Submarine
Signaler
Swing Swing Submarine
@Fred Saint Roc : Bonjour ! C'est le service Xbox Live Indie Games tout entier qui demande à rester connecté en permanence, pas le jeu. On ne peut donc malheureusement rien y faire. Les versions PC ne demanderont bien évidemment pas de rester connecté.

William
Fred Saint Roc
Signaler
Fred Saint Roc
Bonjour à l'équipe de SSS et bravo pour votre diabolique petit jeu.

J'ai cependant un reproche à vous faire, on ne peut pas y jouer si on est pas connecté au live. C'est un problème pour moi car je travaille en déplacement, j'amène ma xbox partout mais je n'ai pas internet 90% du temps et donc je ne peux pas profiter de BTM ;'(

Si vous avez le temps de répondre sur le pourquoi de cette injustice merci d'avance.
Swing Swing Submarine
Signaler
Swing Swing Submarine
Hehe je vois une autre question poindre en même temps que j'écris !

@TinyToony:

Bonne question ! Pour le moment je dirais que je peux pas trop me prononcer parce que j'ai pas encore intégrer le son. Mais les performances sont pas trop mal en Java.
J'aurais tendance à dire qu'à machine équivalente, Xna dans sa version native doit prendre le dessus, mais ça devrait être perceptibles que sur les machines à très faible configuration.
Il faut dire que le code Java peut être en parti interprété, alors que C# est Just In Time compilé et donc exécuté. Mais en même temps les machines virtuelles Java sont aussi capable de compiler et exécuter du code (je pense que les parties "cruciales" du code sont Just In Time compilée).
Y'a quelques années, j'aurais dis que C# gagnerait toujours niveau performances face à Java, maintenant j'aurais du mal à l'affirmer.

Guillaume
Swing Swing Submarine
Signaler
Swing Swing Submarine
Woha, merci pour tout vos messages, et merci pour ceux qui ont apportés des réponses à leurs compères :)

Je vais tenter de répondre à quelques-uns moi aussi :

@Oxydam:
Je pense qu'on pourra faire ça, un post de "comment être diffuser sur Steam", ou le cas échéant "comment ne pas être diffusé sur Steam". Mais y'a des choses à dire, parce qu'il n'y a pas qu'une manière de faire. Je note, j'en parle à William, en espérant qu'on puisse un jour témoigner plus que présenter des faits théoriques :]

@tous les playtesteurs: je vous rajoute dans notre liste, on re-fera un post pour ça, mais je vous note d'ors et déjà !

@hairaz:
L'encapsulation, c'est tout à fait ce que tu décris oui !
Dans l'article il est utilisé avec l'encapsulation d'OpenGL et d'OpenAL parce qu'en fait, dans OpenTK tu a par exemple une classe GL qui encapsule tous les appels C en OpenGL. Donc en fait tu ne vois pas ce qui se passe dans la classe GL. Exemple :
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

Clear est une méthode statique de la classe GL... mais tu ne vois pas les "vraies" appels à OpenGL, tu ne sais pas comment ça marche, c'est une sorte de boite noire.
En fait la class GL t'auras créé un context OpenGL, et appelle dans ce cas ce code OpenGL:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

Bon là l'exemple est 'simple' parce qu'une ligne d'OpenTK 'encapsule' une ligne d'OpenGL, mais y'a des cas (notamment création de texture ou autre) qui peuvent encapsuler bien plus.

Là le terme d'encapsulation, c'est dans le sens 'boite noire', donc quelque part c'est bien le même concept que tu cites, à savoir que toi utilisateur de la classe GL, tu ne sais pas ce qu'il se passe à l'intérieur (et tu veux pas le savoir :)).

@Cold Hand et @Zokho:
Désolé amis Suisse et Belges, mais malheureusement la distribution du service ne dépend pas de nous. On aurait adoré être potentiellement sur chaque Xbox reliée au Live, mais la législation dans certains Pays fait que Microsoft n'est pas autorisé à diffusé du contenu non classifié :( Peut être que ça changera avec le temps (espérons)

Merci à tous les autres, je poursuivrais les réponses demain. Là j'ai les yeux qui piquent :]

++
Guillaume
TinyToony
Signaler
TinyToony
Article très intéressant, comme d'habitude :)

Petite question:

Sous Windows, les performances du jeu sont-elles meilleures avec la version XNA qu'avec la version LWJGL ou cette dernière est équivalente ?

Bon portage !
hairaz
Signaler
hairaz
Article passionnant, comme d'habitude, mes faibles notions vacillent souvent :)
Mais par contre, l'encapsulation, on m'avait dit que c'était le fait que "Tous les attributs d'une classe doivent être privés", et je ne comprends pas trop dans quel sens il est utilisé dans l'article ...

(Et bonne idée, Mayto, ne rien lâcher sur les playtests, la lutte continuera !)
ni4vU4g
Signaler
ni4vU4g
Très intéressant !
Et c'est clair que quand on développe une application que l'on veut faire tourner sur les 3 gros systèmes d'exploitations, le plus simple, et de tout coder en Java dès le début. Mais la xenon ne connait pas le java malheureusement...
Et encore, vous ne faites pas de portage sur Play :D

Sinon, je suis volontaire pour les tests également !! :)
Mayto
Signaler
Mayto
Excellent article !

Et, je suis volontaire pour des tests si nécessaire :)
Oxydam
Signaler
Oxydam
@Cold Hand : Ce n'est pas de la faute de Swing Swing si le jeu n'est pas dispo en Suisse. En effet, Microsoft ne met pas à disposition des joueurs suisses la chaîne Indie Games où est publié Blocks That Matter.

@SwingSwing : Pourrai t'on avoir un post expliquant comment être diffusé sur Steam ?
Zokho
Signaler
Zokho
Merci pour l'article, très intéressant. Dommage aussi qu'il ne soit pas sur le XBL belge, j'aurais bien voulu le tester pour mon site également. :(
Jeuxvideo Import
Signaler
Jeuxvideo Import
Oxydam & Lushlife : vu le bien qui est dit du titre ça devrait pas être si compliqué d'être sur Steam. En plus le jeu ne doit pas être très lourd donc il ne va pas prendre beaucoup de place sur les serveurs. Moi je suis optimiste, si un jour il arrive sur Steam je l'achète !

Édito

Grâce à ce mini-devblog en français, vous pourrez suivre l'activité de notre minuscule studio de développement indépendant Swing Swing Submarine.

Nous sommes une petite équipe d'hommes et de chats passionnés qui souhaitent partager de nouvelles expériences interactives avec les joueurs du monde entier, et ceux de Gameblog en font bien évidemment partie !

--------------------------------------------------------

Quelques liens utiles :

> Site officiel <

> Twitter <

> Facebook <

Archives

Favoris