Comment emballez-vous les ressources, dans un jeu quand vous en avez trop?

10

J'ai récemment fait un clone de base de Space Invaders, en C ++, en utilisant le framework Allegro 5. Après avoir terminé, j'ai réalisé que j'avais environ 10 sprites et 13 Mo de DLL; certains joueurs n'avaient même pas les DLL mingW, ce qui rendait le jeu très déroutant.

Comment puis-je regrouper toutes mes ressources de manière à pouvoir facilement ajouter et supprimer des données à mon jeu, et pour réduire la taille prise par la ressource, en les plaçant essentiellement au même endroit? J'utilise des blocs de code.

Bugster
la source
1
Comment comprenez-vous le terme ressources? Des éléments tels que des images, des sons, ... ou incluez-vous des DLL dans ce terme?
Christian Ivicevic
Je préférerais que je puisse également installer des DLL car j'en ai beaucoup.
Bugster
Ma première idée serait de trouver une bibliothèque appropriée comme (assez obsolète ...) zziplibpour stocker tous mes actifs habituels dans un fichier zip, puis les charger dans mon jeu via un pipeline de contenu personnalisé pour le moteur. Ce que vous recherchez au départ, c'est un moyen de charger des fichiers à partir d'un fichier zip dans la mémoire pour pouvoir les utiliser dans votre jeu. En ce qui concerne les DLL, c'est assez difficile car elles doivent généralement être dans le même répertoire que l'exécutable ou le répertoire Windowsou System32qui n'est PAS recommandé! Que diriez-vous d'une archive SFX à extraire TEMPet à exécuter à partir de là?
Christian Ivicevic
3
Vous demandez comment utiliser un programme d'installation? Parce que les DLL ne sont pas des ressources.
Nicol Bolas

Réponses:

13

Il semble que vous soyez confronté à deux défis: la distribution et le conditionnement des actifs.

Distribution

Emballez votre application entière dans des répertoires comme bon vous semble, puis placez le répertoire de niveau supérieur dans un fichier .zip. Distribuez ce fichier .zip. Lorsque vos utilisateurs extraient le zip, ils auront un dossier avec tout ce dont ils ont besoin prêt à exécuter le jeu.

Comment placez-vous vos fichiers?

  • Vos fichiers .dll doivent généralement se trouver dans le même répertoire que l'exécutable (il y a des exceptions, mais pour des raisons de simplicité ...)
  • Vos ressources (images, audio) peuvent être où vous le souhaitez, mais si vous les déplacez en référence à votre exécutable, vous devrez modifier votre code de chargement des ressources pour en tenir compte.

Je fais habituellement quelque chose comme ça:

Le répertoire MyGame \ // de niveau supérieur contient l'intégralité du programme
  bin \ // dlls aller ici avec l'exe compilé
  res \ // répertoire des ressources de jeu de niveau supérieur
    la musique\
    effets sonores\   
    voix\
  cfg \ // fichiers de configuration par défaut (les configurations utilisateur vont dans le répertoire utilisateur)
  MyGame.lnk // raccourci vers exe compilé

Conditionnement des actifs

Vous pouvez utiliser une sorte de bibliothèque de compression (zlib, lzo) pour compresser toutes vos ressources de jeu (le répertoire res \ ci-dessus) dans un seul fichier. Ensuite, vous devez utiliser la même bibliothèque de compression pour extraire le contenu de vos ressources, en temps réel, afin de charger vos ressources dans votre jeu.

Que se passe-t-il alors lorsque vous souhaitez patcher vos actifs? Ensuite, vous devez soit: compiler un tout nouveau fichier d'actifs et le distribuer à vos utilisateurs (afin qu'ils téléchargent essentiellement ce qu'ils ont déjà, plus la poignée d'ajouts), ou vous devez créer un programme de mise à jour (un autre programme à maintenir ) et gérer le fait que les choses peuvent mal tourner et que votre fichier d'actif sera corrompu ...

Honnêtement, ce n'est pas vraiment trivial de faire fonctionner ça et je ne vois pas le résultat dans votre situation. Un simple répertoire devrait suffire pour encapsuler vos 10 sprites et il est beaucoup plus facile d'ajouter et de patcher des choses: il suffit de les télécharger dans le bon répertoire et c'est fait.

Construire un installateur

Cela suppose que vous ciblez Windows ... une fois que vous avez ci-dessus, vous pouvez travailler à la création d'un programme d'installation pour votre jeu. J'éviterais à tout prix les méthodes ClickOnce prises en charge par Visual Studio. Ce n'est pas votre programme d'installation Windows typique et est livré avec son propre ensemble de bizarreries.

Jetez un œil à cette question sur StackOverflow - elle contient un ensemble de liens utiles vers les packages d'installation que vous pouvez utiliser. De nos jours, beaucoup de gens semblent aimer WiX . Je ne l'ai jamais utilisé moi-même. De plus, AdvancedInstaller et InnoSetup sont tous deux des choix populaires.

Chiffrer
la source
1
Merci pour cette réponse, j'ai maintenant une idée de base sur la façon de distribuer mon jeu.
Bugster
1
N'utilisez pas WiX. Cela vous blessera la tête et tuera votre famille.
Ray Dey
1
Il existe une autre option - il peut y avoir plus d'un ensemble d'actifs. Quelque chose comme "resources.pak, patch1.pak, patch1337.pak, .." serait alors un moyen de stocker les données de patch. Il ne serait pas nécessaire de modifier le package d'origine, il suffit de rendre le moteur capable de détecter et de commander des packages de correctifs.
snake5
0

Vous pourrez peut-être lier statiquement certaines bibliothèques au lieu d'inclure les DLL. Si et comment est différent pour chaque bibliothèque.

Matthew R
la source
-1

Vous pouvez utiliser un logiciel comme Enigma pour emballer vos fichiers et les enregistrer dans un seul .dat. Vous devrez changer le dossier de votre lanceur.

Dev
la source