Forum Solarus-Games francophone

Jeux amateurs => Aide & support => Discussion démarrée par: MetalZelda le 25 Avril 2013 à 15:35

Titre: [ZS Engine] Créer de nouveaux objets
Posté par: MetalZelda le 25 Avril 2013 à 15:35
Salut la companie !

Tout est dans le titre, j'aimerais savoir comment créer un objet (comme le marteau ...) et les rendres fonctionnels dans la map (interraction objet/entitée) ...

J'aimerais savoir si quelqu'un a essayé de reimporté certains objets de Zelda 3T dans le moteur Solarus ^^

Et j'aimerais savoir comment faire un style de "fog effect" ... Un effet de nuage défilant comme RPG Maker le fait ^^
Titre: Re : [ZS Engine] Créer de nouveaux objets
Posté par: Helmasaur le 25 Avril 2013 à 15:43
Faudra implémenter ça en C++ non ?
Titre: Re : Re : [ZS Engine] Créer de nouveaux objets
Posté par: MetalZelda le 25 Avril 2013 à 15:48
Citation de: Helmasaur le 25 Avril 2013 à 15:43
Faudra implémenter ça en C++ non ?

Je pense qu'une retranscription LUA devrait suffire à moin que les objets sont fait en C ...
J'attends la réponse de Chris ^^
Titre: Re : [ZS Engine] Créer de nouveaux objets
Posté par: Christopho le 25 Avril 2013 à 15:59
Les objets (equipment items)  sont tous codés en Lua, ils font partie de la quête et pas du moteur.
Pour créer un objet, il faut :
- Le déclarer dans la liste des ressources dans project_db.dat (bientôt on pourra faire cette étape depuis l'éditeur) : dans l'éditeur, clic droit sur "Items" dans l'arborescence de la quête puis "New item".
- Lui créer une animation dans le sprite sprites/entities/items.dat (utilisée pour représenter ce trésor sur la map). Le nom de l'animation doit être l'id de l'item.
- Créer le dialogue qui s'affiche quand on trouve l'objet.
- Créer le script de l'objet dans items/id_de_ton_item.lua. Voir http://www.solarus-games.org/doc/1.0.0/lua_api_item.html
Voilà pour ce que le moteur impose.

Dans zsdx, si je fais apparaître l'item dans l'inventaire, je dois aussi faire un dialogue de description de l'objet, qui s'affiche dans l'inventaire quand on appuie sur action avec cet item sélectionné.
Donc voilà pour ce qu'il y a à faire.

Maintenant, pour coder le marteau en Lua, je pense qu'il manque encore des choses dans l'API à l'heure actuelle. On ne peut pas encore faire des entités custom comme le marteau ou les plots. Ce serait pratique si on pouvait le faire, comme ça il y aurait juste à tester la collision des deux. C'est prévu pour une prochaine release du moteur. En attendant, on peut sûrement se débrouiller provisoirement : les plots seraient des NPC, et si on utilise le marteau quand on les touche, ils s'enlèvent. Ça c'est facile à faire pour commencer, et ça te permettra de te familiariser avec l'API.

Il faut aussi que je rajoute dans l'API Lua la possibilité d'afficher sur le héros une animation de sprites custom (comme le marteau dans ton cas).

Pour la pelle (puisque Binbin me demande), il suffit de créer un dynamic tile à l'endroit où elle est utilisée (coordonnées arrondies au carré de 16 pixels près), accompagné d'un objet ramassable (pickable) aléatoirement choisi. Il faut aussi un moyen de pouvoir décider quelles parties de la map sont creusables ou non. Dans un premier temps, on peut simplement décider que tous les tiles non obstacles sont creusables.

Concernant le fog effect, ça rejoint l'autre topic sur les effets graphiques qui s'affichent au-dessus de la map. À moins que tu parles d'un décor qui défile au fond ?
Titre: Re : Re : [ZS Engine] Créer de nouveaux objets
Posté par: MetalZelda le 25 Avril 2013 à 16:15
Citation de: Christopho le 25 Avril 2013 à 15:59
Les objets (equipment items)  sont tous codés en Lua, ils font partie de la quête et pas du moteur.
Pour créer un objet, il faut :
- Le déclarer dans la liste des ressources dans project_db.dat (bientôt on pourra faire cette étape depuis l'éditeur)
- Lui créer une animation dans le sprite sprites/entities/items.dat (utilisée pour représenter ce trésor sur la map)
- Créer le dialogue qui s'affiche quand on trouve l'objet
- Créer le script de l'objet dans items/id_de_ton_item.lua. Voir http://www.solarus-games.org/doc/1.0.0/lua_api_item.html
Voilà pour ce que le moteur impose.

Dans zsdx, si je fais apparaître l'item dans l'inventaire, je dois aussi faire un dialogue de description de l'objet, qui s'affiche dans l'inventaire quand on appuie sur action avec cet item sélectionné.
Donc voilà pour ce qu'il y a à faire.

Maintenant, pour coder le marteau en Lua, je pense qu'il manque encore des choses dans l'API à l'heure actuelle. On ne peut pas encore faire des entités custom comme le marteau ou les plots. Ce serait pratique si on pouvait le faire, comme ça il y aurait juste à tester la collision des deux. C'est prévu pour une prochaine release du moteur. En attendant, on peut sûrement se débrouiller provisoirement : les plots seraient des NPC, et si on utilise le marteau quand on les touche, ils s'enlèvent. Ça c'est facile à faire pour commencer, et ça te permettra de te familiariser avec l'API.

Il faut aussi que je rajoute dans l'API Lua la possibilité d'afficher sur le héros une animation de sprites custom (comme le marteau dans ton cas).

Pour la pelle (puisque Binbin me demande), il suffit de créer un dynamic tile à l'endroit où elle est utilisée (coordonnées arrondies au carré de 16 pixels près), accompagné d'un objet ramassable (pickable) aléatoirement choisi. Il faut aussi un moyen de pouvoir décider quelles parties de la map sont creusables ou non. Dans un premier temps, on peut simplement décider que tous les tiles non obstacles sont creusables.

Concernant le fog effect, ça rejoint l'autre topic sur les effets graphiques qui s'affichent au-dessus de la map. À moins que tu parles d'un décor qui défile au fond ?

Merci de cette réponse détaillée ^_^, je vais donc tenter de créer les Fleches de feu,glace,Lumière, le marteau, la baguette de feu/glace peut être l'Ocarina ainsi que peut être le feu de din.

Pour ce qui est du fog effect, c'est la répétition d'une image qui défile en diagonale faisant penser que des nuages bougent dans le monde exterieur/dans un endroit spécifique ^^
Titre: Re : [ZS Engine] Créer de nouveaux objets
Posté par: binbin le 25 Avril 2013 à 16:19
Très intéressant comme topic. Pour la pelle c'est un peu ce que je voyais. Ce qui me gêne la dedans c'est la manière de configurer chaque Tile pour lui dire toi tu es creusable. Dans la même réflexion chaque endroit creuse doit pouvoir nous donner de manière aléatoire un trésor ou un trésor spécifique .
Il faut au moins spécifier que la terre et le sable sont creusable en fait.
Titre: Re : [ZS Engine] Créer de nouveaux objets
Posté par: Christopho le 25 Avril 2013 à 16:29
Pour les trésors avec la pelle c'est très simple. Tu codes dans ton script les coordonnées des cases où il y a un trésor fixe (genre un fragment de cœur) et le trésor correspondant. Si on tombe sur cette case, on crée le trésor, sinon on crée un trésor aléatoire (possiblement vide).

Pour spécifier ce qui est creusable, comme je disais c'est pas évident. Une première version est de dire que tout ce qui est terrain traversable normal sur une map extérieure est creusable. Et ça c'est facile.
Je ne recommande pas du tout de spécifier des tiles individuels, ce serait beaucoup trop long à faire sur chaque map...
Titre: Re : Re : [ZS Engine] Créer de nouveaux objets
Posté par: MetalZelda le 25 Avril 2013 à 16:31
Citation de: Binbin le 25 Avril 2013 à 16:19
Très intéressant comme topic. Pour la pelle c'est un peu ce que je voyais. Ce qui me gêne la dedans c'est la manière de configurer chaque Tile pour lui dire toi tu es creusable. Dans la même réflexion chaque endroit creuse doit pouvoir nous donner de manière aléatoire un trésor ou un trésor spécifique .
Il faut au moins spécifier que la terre et le sable sont creusable en fait.

C'est surtout sur sa que je me documante, c'est sur l'interraction dans une map entre l'item et l'evenement ^^
Puis je me vois mal creuser dans un arbre ou dans l'eau xD

Je me demandais aussi pour le fog effect, si y'avais plus simple a faire, comme le pseudo voile pour faire le système jour-nuit puis les animées en x et y (mouvement diagonal quoi ^^)
Titre: Re : [ZS Engine] Créer de nouveaux objets
Posté par: binbin le 25 Avril 2013 à 16:34
J'y ais pense. Mais veut dire potentiellement qu'on pourra creuser sur de la pierre et c'est pas non plus voulu.
Bref , cette partie la est chiante je pense .
Déjà on pourrait dire que les tiles creusable d' sont seulement sur une map extérieure . :)
Titre: Re : [ZS Engine] Créer de nouveaux objets
Posté par: Christopho le 25 Avril 2013 à 16:53
On pourra affiner en interdisant/permettant de creuser dans des tile patterns bien précis. C'est même automatisable, j'ai une petite idée de comment faire (en re-parsant le fichier de la map à la recherche de ces tiles).
La seule à faire à la main sera de regarder dans le tileset quels sont les tiles que l'on veut autoriser (ou interdire, à voir quel est le plus rapide des deux).

Mais dans un premier temps, commençons simple : les cases traversables des maps extérieures.
Titre: Re : [ZS Engine] Créer de nouveaux objets
Posté par: Armitage1982 le 15 Août 2013 à 21:56
Bonjour  :)

Je suis assez intéressé par le sujet, car je crois qu'il s'agit là d'un élément clé pour la réalisation d'un jeu original à l'aide de Solarus.

Dans une des dernières news, j'ai lu que Solarus 1.1 pouvait maintenant détecter le type de sol et les objets dynamiques avec précision. J'imagine que cela devrait grandement facilité la création d'objet comme la pelle, le marteau ou un sortilège magique ?
Titre: Re : [ZS Engine] Créer de nouveaux objets
Posté par: Christopho le 16 Août 2013 à 09:14
Oui, avec Solarus 1.1 tu pourras faire une pelle sans problème. Pour le marteau, il faudra attendre les entités custom (Solarus 1.2 je pense) pour le faire correctement.