Solarus Wiki

A wiki for the Solarus engine community

Outils pour utilisateurs

Outils du site


fr:upgrade_from_1.0_to_1.1

Mettre à jour votre quête de Solarus 1.0 vers Solarus 1.1

Solarus 1.1 apporte de nouvelles fonctionnalités (séparateurs, sol glacé et bien d'autres), des tas de nouvelles fonctions dans l'API Lua (changement de la vitesse du héros, de nouvelles callback pour les sprites…), et améliore le format de certains fichiers de données (sprites et project_db.dat). Elle enlève aussi certains contenus qui étaient codés en dur : notamment les boîtes de dialogue et les menus de game-over, qui sont désormais scriptés en Lua.

Dans cette page, nous allons nous pencher sur les incompatibilités. Visitez l'annonce de Solarus 1.1 ou le changelog pour connaître les nouvelles fonctionnalités.

Mettre à jour les fichiers de données

Les fichiers de données autres que les scripts peuvent être mis à jour automatiquement par l'éditeur. Ouvrez votre quête avec Solarus Quest Editor 1.1 et une boîte de dialogue vous demandera de lancer la mise à jour.

En cas de problèmes, n'hésitez pas à solliciter notre aide sur les forums de Solarus.

Notez que l'opération peut aussi être réalisée depuis la ligne de commande, en lançant le script update_quest.lua dans le dossier tools du dépôt git (en fait l'éditeur appelle ce script en interne).

Les principaux changement dans les fichiers de données sont les sprites et le fichier listant les ressources de la quête (project_db.dat) dont les formats ont changé pour avoir une syntaxe plus lisible. En dehors de ça, le fichier listant les langues (languages.dat) a été enlevé car il était redondant. D'autres fichiers contiennent de nouvelles valeurs optionnelles, mais ne requièrent aucun changement.

Mettre à jour les scripts Lua

Mettre à jour le code Lua vers Solarus 1.1 n'est pas immédiat car certains éléments intégrés de base (la boîte de dialogue, le menu de game-over, les salles sombres) doivent être réimplémentés en Lua. Vous allez donc avoir un peu de travail (désolé). Heureusement, ce contenu a été réimplémenté pour Zelda Mystery of Solarus DX, donc vous pouvez réutiliser ce travail.

Dialogues

Le système de boîte de dialogue est désormais scripté en Lua, le rendant complètement personnalisable. Si vous ne faites rien, il y a une boîte de dialogue minimale par défaut intégré qui s'affichera.

Visitez l'API Lua Solarus pour plus de détails à propos du nouveau système de boîte de dialogue.

Vous pouvez réutiliser et adapter la Boîte de dialogue Lua de Zelda Mystery of Solarus DX, qui est un équivalent en Lua de l'ancien système de boîte de dialogue. Pour cela, appelez le script avec la variable game comme paramètre : sol.main.load_file(“chemin/vers/dialog_box.lua”)(game). Puis appelez game:initialize_dialog_box() quand la partie commence et game:quit_dialog_box() quand la partie s'arrête.

L'API des boîtes de dialogue Lua a été changée pour s'adapter au comportement personnalisé des boîtes de dialogue.

  • map:is_dialog_enabled() doit être remplacé par game:is_dialog_enabled().
  • map:start_dialog() doit être remplacé par game:start_dialog().
  • map:draw_dialog_box() n'existe plus.
  • map:set_dialog_style() et map:set_dialog_position() n'existent plus. Libre à vous d'implémenter des fonctionnalités similaires si vous en avez besoin (le script dialog_box.lua donné ci-dessus les implémente pour imiter le vieux système de boîte de dialogue - voir les commentaires à l'intérieur).
  • map:set_dialog_variable() a été supprimé. A la place, utilisez le second paramètre (optionnel) de game:start_dialog() pour passer n'importe quelle valeur à la boîte de dialogue.

Remark

Le script de boîte de dialogue de Zelda Mystery of Solarus DX (ZSDX) appelle plusieurs fois une fonction game:set_custom_command_effect(), qui n'existe que dans l'affichage des icônes (HUD) de ZSDX. (Cette fonction est définie dans hud/hud.lua et sert à mettre à jour l'icône d'action et l'icône d'attaque pendant un dialogue.) Si votre quête utilise le même HUD que ZSDX, cela fonctionnera. Sinon, vous pouvez commenter ces appels pour éviter d'appeler une fonction qui n'existe pas.

Le moteur n'intègre plus de menu de game-over par défaut, vous pouvez en créer un en Lua si vous le souhaitez. Si vous ne faites rien, le moteur redémarre automatiquement la partie quand la vie du joueur atteint zéro.

Visitez l'API Lua Solarus pour plus de détails à propos du nouveau système de game-over.

Vous pouvez réutiliser et adapter le Lua menu game-over de Zelda Mystery of Solarus DX, qui est un équivalent en Lua du vieuw menu de game-over intégré. Pour ce faire, appelez le script avec la variable game en paramètre : sol.main.load_file(“chemin/vers/game_over.lua”)(game).

La seule incompatibilité est que la capacité “get_back_from_death” n'existe plus quand vous appelez game:get_ability(), game:has_ability() et game:set_ability(). C'était utilisé pour faire en sorte qu'une fée sauve le héros durant le menu game-over, mais maintenant vous pouvez le faire directement en Lua.

Le script du flacon de Zelda Mystery of Solarus DX a été grandement simplifié depuis que la capacité “get_back_from_death” a été enlevée. Si vous utilisez le même script de flacon, vous pourriez être intéressé.

Salles sombres

map:get_light() et map:set_light() permettaient de faire des salles sombres avec Solarus 1.0. Cette fonctionnalité intégrée était très spécifique et très facile à faire en Lua pur, donc elle a été enlevée.

Vous pouvez réutiliser et adapter le système de salles sombres de Zelda Mystery of Solarus DX, qui est un équivalent Lua de l'ancien système intégré. Lisez les commentaires au début du script pour savoir comment l'utiliser sur vos maps devant être sombres. Si vous n'avez jamais utilisé map:get_light() ou map:set_light(), vous n'avez pas besoin de ce script.

Autres changements

  • map:get_entities(prefix) retourne maintenant un itérateur à la place d'un tableau.

Cette fonction permet d'avoir la liste des entités de la map dont le nom commence avec le préfixe indiqué. Dans tous vos scripts, lorsque vous faisiez

for i, entity in ipairs(map:get_entities(“some_prefix”)) do

faites maintenant

for entity in map:get_entities(“some_prefix”) do

ce qui est plus naturel. Malheureusement, l'ancienne syntaxe n'est plus valable, donc vous devez faire le changement dans votre code.

  • game:set_pause_enabled() a été remplacé par game:set_pause_allowed() afin de rester cohérent avec les autres utilisations du mot “enabled” dans l'API.
  • enemy:create_enemy() prend maintenant une table comme paramètre, comme map:create_enemy(). Vous devez mettre à jour vos appels à cette méthode.
  • sol.language.get_default_language() a été enlevé. Cette fonction était inutile et potentiellement trompeuse.
  • sol.main.is_debug_enabled() a été enlevé. Vous décidez vous-même si vous voulez mettre du code de debug ou non (la constante de compilation SOLARUS_DEBUG_KEYS du moteur a été enlevée aussi).
  • Si vous faites un coffre vide, le moteur ne fait rien de plus par défaut. Avant, il montrait un dialogue _empty_chest et jouait le son wrong. Définissez l'évènement your_chest:on_empty() pour faire ce que vous voulez.

Obtenir de l'aide

Nous pouvons vous aider si vous avez des questions ou si vous rencontrez des problèmes pour mettre à jour votre jeu vers Solarus 1.1.

fr/upgrade_from_1.0_to_1.1.txt · Dernière modification: 2018/12/22 14:14 (modification externe)