Je veux faire un jeu moddable. Comment cela affecte-t-il mon choix de langage de programmation? [fermé]


26

J'ai commencé à créer de petits jeux en Java et j'envisage d'apprendre le C # pour un projet plus important. J'aimerais beaucoup faire un jeu moddable, mais quelqu'un m'a dit que je dois m'en tenir à Java si je veux que le jeu soit moddable, bien que je ne comprenne pas pourquoi.

Alors, quelles caractéristiques du langage de programmation rendent un langage plus adapté aux jeux modifiables?


3
Si vous voulez créer un jeu modifiable, PhysicsFS peut être une bibliothèque très utile à connaître. (Cela n'a rien à voir avec la physique, ne vous laissez pas tromper par le nom. :))
Paul Manta

10
"mais quelqu'un m'a dit que je devais m'en tenir à Java si je veux que le jeu soit modifiable" C'est d'ailleurs BS.
Ray Dey

Réponses:


18

Cela dépend de la façon dont vous souhaitez concevoir votre système de mod. J'en explorerai deux.

SDK

Très probablement, vous aurez besoin que vos moddeurs utilisent le même langage que vous, et chargent les mods via la réflexion (ou similaire, selon la langue de votre choix). Cela vous limitera évidemment aux langages qui peuvent faire une liaison tardive - et il y en a beaucoup qui peuvent le faire (même C peut faire une liaison tardive avec une astuce intelligente LoadLibrary). Vous pourriez même faire du méta-modding, où un mod pourrait héberger d'autres mods (par exemple des mods scriptés).

Le premier problème avec cette approche est de cacher l'état interne. En prenant C # par exemple, un modder pourrait simplement utiliser la réflexion pour accéder aux membres privés, C peut également le faire (bien que plus d'efforts soient nécessaires).

Le deuxième problème est l'hébergement. Les gens n'aiment pas vraiment le code étranger exécuté sur leur système sans bac à sable en place. Dans le pire des cas, vous pourriez écrire un mod qui configure une boîte de départ; s'il était installé chez un FAI, cela pourrait nuire gravement à sa réputation.

Scripting

Les moddeurs utiliseraient un langage tel que Lua pour créer des mods. Vous auriez soit besoin d'un langage qui pourrait invoquer du code natif (pour interfacer avec Lua); ou vous devrez écrire votre propre langage de script dans la langue de votre choix.

Le premier problème ici est que la plupart des langages de script sont interprétés, ce qui peut ne pas être acceptable pour les systèmes en temps réel (bien que, voir LuaJIT); comme les jeux.

Ironiquement, le deuxième problème existe toujours ici; en prenant Lua comme exemple, j'ai été extrêmement déçu de voir que les fonctions de `` décorticage '' sont incluses dans la bibliothèque principale / par défaut - ce qui le rend entièrement inutile en tant qu'environnement bac à sable (sans beaucoup d'efforts, de chance et de maintenance), il est difficile de dépeindre à quel point je suis en colère à ce sujet, mais j'espère vraiment qu'ils buvaient des cocktails forts lorsqu'ils ont inclus ces anti-fonctionnalités . Vous pouvez évidemment facilement éviter cela si vous utilisez votre propre langage (voir: UnrealScript).

Enfin, le coût de l'interaction avec un moteur de script peut être prohibitif - en prenant à nouveau l'exemple de Lua, combiné avec C #: C # a un surdébit substantiel lors de l'appel de fonctions natives (via P / Invoke) et Lua est une API assez `` bavarde ''. Cela pourrait entraîner des problèmes si la façon dont vous concevez le `` SDK de script '' nécessite beaucoup de discussions entre votre langage principal et votre langage de script (notez que C n'a pas vraiment ce problème). Encore une fois, vous pouvez éviter cela en écrivant votre propre langage de script (et dans le cas de C # le compilant en MSIL) et en l'exécutant de la manière la plus rapide sous votre environnement [virtuel].

Étant donné que le script s'exécute essentiellement sur un système complètement différent de votre code principal, vous pouvez contrôler entièrement l'accès à l'état interne (à moins qu'ils ne fassent des choses fantaisistes avec les fonctions shell mentionnées précédemment).

Conclusion

J'ai un peu dépassé le sujet, cependant, ce que vous pouvez essentiellement tirer de ce mur de texte, c'est que vous devriez pouvoir faire un jeu moddable dans n'importe quelle langue (j'oserais dire que vous le pouvez ) - mais dans certaines langues peut conduire à plus de travail. Suis-je un peu anal à propos de la sécurité? Oui, vous devriez l'être aussi en ce qui concerne le code utilisateur.


Dans le premier scénario que vous avez décrit, vous parlez de l'utilisateur qui programme réellement sa propre bibliothèque dynamique et la branche sur le jeu? J'ai déjà vu cela utilisé dans des bibliothèques (par exemple une bibliothèque audio pour ajouter de nouveaux codecs, etc.) mais, peut-être parce que je n'ai jamais trop étudié le modding, je n'ai jamais rencontré un cas comme celui-ci pour un jeu. Je suis curieux à ce sujet (car il semble vraiment difficile pour l'utilisateur de savoir comment faire et je considère généralement que les mods sont accessibles) alors connaissez-vous un exemple? La plupart du temps, je vois des outils spécialisés, tels que des éditeurs mondiaux avec un peu de script utilisé.
David Gouveia

1
@DavidGouveia Je crois qu'au moins une version du moteur Paradox utilisé pour Europa Universalis (et des jeux équivalents pour différentes périodes de temps) a pris en charge une forme de correction binaire (bien que cela ait pu être en ayant le moddeur corrige la source et recompile l'une des les DLL de jeux au lieu d'avoir un support SDK approprié) en plus du mod le plus couramment utilisé en modifiant une implémentation de fichier de données.
Dan Neely

2
@DavidGouveia voir: Moteur source; ou même des plugins Winamp. Je pense que Quake fonctionne même comme ça. J'ai remarqué que vous utilisez C #; donc vous voudrez peut-être regarder dans MEF (Managed Extensibility Framework): exposez une interface, chargez-la via la réflexion et Bob est votre oncle.
Jonathan Dickinson

@JonathanDickinson Oh, je ne savais pas que le moteur Source fonctionnait sous ce modèle. J'ai toujours imaginé un ensemble d'outils comme l'ensemble de construction The Elder's Scrolls. Merci pour l'info (j'avais une idée de comment cela fonctionnait, je pensais juste que cela pourrait être trop compliqué à utiliser par le modeur général). Et j'ai vraiment ri de la "partie de ton oncle bob" . :-)
David Gouveia

1
Re Lua: Ces gars-là ont un Lua en bac à sable adapté à une utilisation dans un logiciel wiki (et suffisamment stable pour que Wikipedia anglais l'utilise). Je suis sûr que vous pouvez l'adapter à vos besoins, mais certaines parties de l'extension sont sous GPL, alors consultez votre avocat.
Kevin

16

Je dirais que le langage n'est pas vraiment un facteur décisif ici, c'est vraiment à quel point vous êtes flexible et piloté par les données pour créer votre jeu qui le définit.

Chaque jeu fonctionne sur un ensemble de données (par exemple, tout, depuis les niveaux, les maillages, les configurations, les éléments). La différence entre un jeu normal et un jeu modifiable est que ce dernier fournit des outils qui permettent à l'utilisateur de modifier les données existantes (ou d'ajouter ses propres données). Quelle que soit la langue que vous choisissez, essayez simplement de rendre votre jeu aussi axé sur les données que possible et évitez de coder en dur le contenu du jeu. Pratiquement n'importe quelle langue que vous choisiriez peut lire les données du disque, ce qui est la plupart de ce dont vous avez besoin.

Il est également à mi-chemin si vous créez simplement les outils pour votre usage personnel (par exemple, votre propre éditeur de niveau), puis les perfectionnez et les partagez avec vos utilisateurs. L' éditeur de niveau Super Meat Boy était à peu près cela, une version améliorée de l'outil utilisé pendant le développement du jeu.

Et selon le type de jeu, vous souhaiterez peut-être autoriser les utilisateurs à scripter certains comportements du jeu. Dans ce cas, vous devriez envisager d'incorporer un langage de script dans votre jeu depuis le début (soit le vôtre, soit un langage existant comme Lua ou Python qui sont des choix populaires). Cela relève également de la catégorie de la conception basée sur les données. Si vous décidez d'utiliser un langage de script existant, il peut être utile de vérifier si le langage de programmation de votre choix possède des liaisons pour ce langage de script (généralement sous la forme de bibliothèques tierces).


5

La langue que vous choisissez ne détermine pas vraiment à quel point un jeu est modifiable, la façon dont vous utilisez la langue est plus importante.

Si la plupart de votre jeu est basé sur des données (c'est-à-dire que les données du jeu sont définies dans un fichier qui est lu à partir de votre code), le jeu peut être très modifiable. Cela peut être fait dans presque toutes les langues. L'utilisation d'un langage de script facilite également la modification d'un jeu.

Cependant, cela ne signifie pas automatiquement que le fait de ne pas utiliser ces éléments rend impossible la modification d'un jeu. Minecraft par exemple n'est pas du tout un jeu très moddable, mais il existe de très bons décompilateurs disponibles pour Java et une très grande communauté pour Minecraft, donc de nombreux outils ont été créés pour rendre Minecraft moddable (divers modloaders, Bukkit). Avec ces outils, il est possible de modifier Minecraft (mais ils sont probablement techniquement illégaux dans certains pays).

Le meilleur conseil que je puisse vous donner est d'utiliser les outils que vous souhaitez que les moddeurs utilisent; Si vous définissez un PNJ à partir d'un fichier, il peut être modifié, si vous le cas particulier dans le code, il ne peut probablement pas l'être.


1

Java est parfaitement adapté à l'écriture d'un jeu modifiable.

Cela dit, la meilleure façon de rendre un jeu modifiable est généralement d'adopter un langage dynamique qui peut être intégré dans l'application plus large et utilisé pour les scripts. Vous voulez généralement un langage dynamique, car il s'agit de pouvoir interagir avec le code au moment de l'exécution, sans passer par un cycle complet de compilation / génération / test.

Quelques choix de langues dynamiques à considérer:

  • Groovy - un excellent langage dynamique de type Java qui peut être intégré dans de plus grands programmes Java.
  • Clojure - un Lisp puissant et dynamique pour la JVM. Il peut être difficile pour certains moddeurs de se faire une idée, mais c'est un langage exceptionnellement puissant et peut être intégré très facilement. Je ne l'ai pas encore utilisé pour le modding du jeu, mais pas de raison.
  • Lua - un langage de script de jeu très populaire. Je crois qu'il existe des versions pour la JVM que vous pouvez utiliser à partir de Java (bien que je ne les ai pas essayées moi-même)
  • JavaScript - disponible sur la JVM via Rhino . Un choix assez solide pour les scripts de jeu car beaucoup de gens connaissent JavaScript, et le modèle d'objet prototype s'adapte très bien aux mods de jeu.

-2

Il existe un moyen plus simple de le faire en java bien que ce soit un peu bâclé. Tout ce que vous avez à faire est de prendre les fichiers dot java dans un dossier puis de mettre ce fichier batch avec le dossier, nommez-le Run:

javac /src/.java Java / src /

Remarque: vous pouvez ajouter autant de classes que vous le souhaitez. Remarque: Dans la dernière ligne, assurez-vous de ne PAS mettre d'extensions alias .java, .exe, .bat, ect.

Cela va simplement recompiler le code chaque fois que le jeu est exécuté, donc si la source du jeu est modifiée, il le compilera puis exécutera le nouveau jeu compilé ... Malheureusement, vous ne pouvez pas ajouter de mods d'autres personnes dans le jeu.


Jacob Je ne pense pas que vous ayez compris la question, veuillez lire les réponses et voir si cela vous aide à comprendre ce qui a été discuté ici.
vikki
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.