[ZS Engine] Créer de nouveaux objets

Démarré par MetalZelda, 25 Avril 2013 à 15:35

0 Membres et 1 Invité sur ce sujet

25 Avril 2013 à 15:35 Dernière édition: 25 Avril 2013 à 15:49 par MetalZelda
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 ^^


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 ^^

25 Avril 2013 à 15:59 #3 Dernière édition: 28 Avril 2013 à 11:54 par Christopho
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 ?
Chaîne Twitch : diffusion en direct de sessions de développement de Solarus, de création de jeux, de parties de jeux vidéo.
Chaîne YouTube : replays des diffusions en direct, tutos Solarus
Compte Twitter : pour être au courant des nouveautés
Chat Discord : pour discuter en direct avec la communauté Solarus

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 ^^

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.

25 Avril 2013 à 16:29 #6 Dernière édition: 25 Avril 2013 à 16:31 par Christopho
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...
Chaîne Twitch : diffusion en direct de sessions de développement de Solarus, de création de jeux, de parties de jeux vidéo.
Chaîne YouTube : replays des diffusions en direct, tutos Solarus
Compte Twitter : pour être au courant des nouveautés
Chat Discord : pour discuter en direct avec la communauté Solarus

25 Avril 2013 à 16:31 #7 Dernière édition: 25 Avril 2013 à 16:32 par MetalZelda
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 ^^)

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 . :)

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.
Chaîne Twitch : diffusion en direct de sessions de développement de Solarus, de création de jeux, de parties de jeux vidéo.
Chaîne YouTube : replays des diffusions en direct, tutos Solarus
Compte Twitter : pour être au courant des nouveautés
Chat Discord : pour discuter en direct avec la communauté Solarus

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 ?

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.
Chaîne Twitch : diffusion en direct de sessions de développement de Solarus, de création de jeux, de parties de jeux vidéo.
Chaîne YouTube : replays des diffusions en direct, tutos Solarus
Compte Twitter : pour être au courant des nouveautés
Chat Discord : pour discuter en direct avec la communauté Solarus