←

JEU VIDEO

LEVEL 1 « SENSIBILISATION »

Difficultés spécifiques

Performances

CPU vs. mémoire

  • Précalculer et mettre en mémoire
  • Garder compressé et calculer à la demande
  • Tester pour constater le goulot d'étranglement, optimiser là où nécessaire.

Object pooling

  • Allocation mémoire (new) TRÈS couteux pour le processeur
  • Mémoire > CPU
  • Pré-allouer l'espace mémoire pour toutes les entités de la scène
    => En Créant un tableau qui contient les références des objets
  • Piocher dans le tableau une entité quand besoin d'une nouvelle
  • Reset et Remettre dans le tableau une entité plus utilisée

Exploiter les capacités matériel

    Le GPU est construit pour gérer efficacement :
    • Les traitements parralèles de fonctions mathématiques simples (ex: opérations matricielles)
    • La manipulation des textures
    • Des algorithmes compilés, les shaders
    • Un shader peut être utilisé pour du rendu (vertex shaders et fragment shaders)
    • Un shader peut être utilisé pour autre chose que du rendu (compute shaders)

Exploiter les capacités matériel

Le CPU est construit pour gérer efficacement :
  • Les opérations logiques séquentielles
  • Des algorithmes compilés et dynamiques (scripts)

Texture compression

Une problématique spécifique = une solution spécifique

Le multi-plateforme

Une seule base de code, plusieurs platformes

  • Environnement de dev
  • Android
  • iOS
  • Linux
  • Windows
  • Mac
  • VR / AR (Samsung Gear VR, SteamVR, GoogleVR, Oculus Rift, Playstation VR Hololens)
  • Web (WebGL, Canvas, Flash)
  • AIR
  • PS4
  • PSVita
  • XBOX One
  • Wii U
  • 3DS
  • Switch
  • etc.

MAIS, Des capacités matériels différentes

  • Controlleurs
    Clavier, Souris, Gamepad, Joysticks, Ecran(s) tactile(s), Gyroscope, Acceleromètres, GPS, Caméras
  • Capacités réseaux
    hors ligne, connecté, TCP uniquement, local uniquement, web uniquement
  • Puissance de calcul
    CPU, GPU, mémoire vidéo, mémoire vive, capacité disue dur
  • Architecture matériel et logicielle
    x86, x64, ARM, OpenGL, DirectX, version du langage de shader, ...
  • Langages d'exécution différents
    Assembleur (Cf. architecture matériel), JavaScript, Java, Python, Lua, Flash, PHP
  • Conception
    double écran, simple écran, VR, AR, capteurs, design contrôleur

Astuces

  • Utiliser des instructions de compilation conditionnelle:
    #if UNITY_EDITOR
    using UnityEditor;
    #endif
  • S'appuyer sur des bibliothèques universelles ou multi-plateformes
  • Découpler le moteur de jeu et le backend de rendu
    • Exemple: moteur en développement par @jeremyfaivre à La Gamerie
    • backend = ensemble de classes, implémentation interchangeable à la compilation via haxe
    • Des adapteurs pour intégrer des backends avec des signatures différentes et bénéficier du compilateur
    • backend audio, graphique (textes, shaders, extures)
    • libs spécifiques non reliées au moter pour réseau et physique
    • backend headless, peut servir à des tests et pour un serveur dédié
    • Objectif : futur proof, multi-platforme, avoir la main

Internationalisation (i18n), Localisation, Traduction

  • L’internationalisation est la conception et le développement d’un produit, d’une application ou d’un contenu de document qui permet une localisation facile pour les publics ciblés de culture, région et langue différentes. (Définition du W3C)
  • Parmi d'autres choses, i18n nécessite le support de plusieurs…

Accessibilité

D'après Mark Brown : What Makes Celeste's Assist Mode Special | Game Maker's Toolkit
  • 1. Les concepteurs devraient pouvoir imposer une vision unique au joueur s'ils le souhaitent
  • 2. Les joueurs devraient pouvoir jouer aux jeux comme ils veulent
    • Handicap
    • N'est pas très bon
    • Est plus intéressé par l'histoire
    • Une phase du jeu ne leur plait pas du tout
  • => Être clair sur l'expérience de jeu prévue
  • => Être clair sur les options qui altèrent l'expérience prévue
  • => Permettre à tout le monde de jouer (Assist mode, ex: Celest, Mario Odyssey)

Triche

Cheat code

ex: konami code.
Initialement pour tester le jeu en tant que dev, mais aussi bonus pour le joueur
=> choisir les cheats qu'on implémente.

Accès mémoire vive direct via éditeur hexa décimal

Permet de contourner toute logique accessible côté client
=> obfuscation, logiciels anti-triche, chiffrement, validation serveur.

Proxy

Permet de modifier les messages reçus ou envoyés au serveur
=> logiciels anti-triche, chiffrement, validation serveur.

Désassembler le programme

Permet de modifier le code assembleur du programme
=> logiciels anti-triche, obfuscation.

Bot

Permet de simuler des inputs automatiquement (gold farmer, aimbot)
=> Conception qui exclu le farm ou la compétition, logiciels anti-triche.

Altérer le rendu

Permet de visualiser des informations cachées (wallhack, extra sensorial perception)
=> logiciels anti-triche.

Exploit

Trouver un bug avantageux par le test
=> log report, logiciels anti-triche, patch.

Collusion

2 joueurs s'allient au détriment d'un 3eme
=> par conception, contrôle communautaire.

L'important

  • C'est une course sans fin (les hackers redoubleront toujours d'ingéniosité)
  • Protéger l'expérience du joueur (par conception, protections techniques, contrôle communautaire)
  • Le tricheur doit comprendre qu'il n'est pas dans l'expérience de jeu prévue
Références :

Piratage

En tant que développeur

  • Voir les versions pirates commes des concurrents
    Version commerciale Version piratée
    Payant Gratuite
    DRM ? Pas de DRM
    Distribution ? En ligne à haut débit
    Serveurs de jeux ? -
    Points fidelité avec l'achat ? -
    Compte en ligne
    avec bonus réguliers ?
    -

En tant que consommateur

  • Question d'éthique
  • Si le jeu n'est pas disponible autrement (Cf. fansub)
  • Si le jeu n'est plus distribué
  • Sinon ! Si le jeu mérite votre temps, il a besoin de votre argent.
Référence : Piracy - How Can the Game Industry Stop Illegal Downloads? - Extra Credits