Sujet n°9598
Posté par Ku'rei le 14 Avr - 11:10 (2011)
Titre : Faire des ponts
Bonjour tout le monde,
Je vous propose aujourd'hui d'apprendre à créer des ponts réalistes en Event-making uniquement. Cela étant d'une relative complexité, je pense que ce tuto n'est pas fait pour les débutants.
De ce tuto vous pourrez retirer une méthode pour créer des ponts personnels dans votre jeu, je ne fais ici qu'expliquer au mieux la méthode à partir d'un exemple, à vous de la comprendre.

Les ponts au-dessus de la terre ferme


1ère Etape : Mapper

Mappez votre map, comme à votre habitude en mettant vos ponts là où vous le souhaitez, comme dans ma map :


Ensuite, supprimez les morceaux où la map sous le pont est passable, ai-je omis de dire qu'il faut que les tiles correspondant aux pont soient tous entièrement passables ?

Donc, cela :
Si sous le pont on a ça :


alors il faudra mettre :


Au final, on aura donc :


Cette manipulation aura pour finalité de faciliter la construction du pont.

2ème Etape : La notion d'altitude

Je n'ai pas encore défini ce qu'est un pont réaliste, quand peut-on dire qu'un pont est réaliste dans un jeu vidéo ? Je ne me risquerais pas à rapprocher jeux vidéo et réalité mais si on peut passer sous un pont (être visiblement en dessous) et au-dessus (de la même façon) alors on peut dire qu'un pont est réaliste. Cependant, dans RPG maker, il n'y a pas d'altitude pseudo-physique. Si le héros monte un escalier, le logiciel n'aura pas détecter qu'il vient d'effectuer un dénivelé de 1m (ou plus). Cela peut tout changer car cela définira si le joueur passe sous ou sur le pont (graphiquement et pseudo-physiquement).



Si le joueur se trouve dans la zone verte, c'est qu'il est à une altitude de 2 par rapport à la zone bleu : il a monté 2 escaliers. Réciproquement, l'altitude de la zone bleu par rapport à la zone verte est de -2. Ainsi, tout dépend du référentiel choisi, c'est pourquoi je vous conseil de toujours choisir la zone la plus base comme référentiel afin de ne pas vous perdre dans les signes.
Note: Pour mon projet, je redéfini l'altitude à chaque fois que je rentre dans une map.

Comment définir l'altitude ? Et pourquoi pas simplement une variable ? Hé ! Oui ! Une variable que l'on incrémenterait ou décrémenterait quand l'on monterait un escalier, que l'on modifierait à chaque map selon l'endroit par lequel est rentré le héros ?
Bien, choisissez cette variable, moi je l’appellerais ALTITUDE dans mes évents.

Vous n'avez toujours pas compris ce qu'est l'atitude ?
Voyez ce schéma :



Vous avez compris ? Alors passons à la suite.

2ème Etape : Gestion de l'altitude

Pour gérer l'altitude il faut savoir à quelles zones de la map le joueur est à telle ou telle altitude, dans ma map on les reconnait facilement. C'est juste logique.
Voici donc les plateaux (zone à altitude égales) de ma map :



Note : faire une image des plateaux permet aussi de repérer les erreurs de mapping de votre map (au niveau organisation des rochers), par exemple j'ai du reprendre ma map 3 fois.

Une fois que l'on a bien en tête les plateaux, on peu regarder où sont les changements d'altitude : ici il n'y à que les escaliers mais on peut imaginer une pente glissante comme dans les jeu officiels (qui fait perdre deux niveau d'altitude au joueur).

¤ L’évènement escalier : il doit incrémenter l'altitude de 1 quand le héros monte, et la décrémenter de 1 quand le héros descend. En théorie c'est simple, mais si le joueur décide d’arrêter le héros sur l'escalier puis de repartir dans l'autre sens ça devient tout de suite plus compliqué --' Dommage pour les maker.
Faire un escalier gérant l'altitude n'étant pas le but de ce tuto je vous laisserais faire ça vous-même.
Il y a deux type d'escalier dans ma map : les verticaux (Nord-Sud) et les horizontaux (Est-Ouest).

Dans la couche Events, placer sur l'escalier l'évent suivant correspondant :



Oui bon les escaliers sont automatiques mais bon ... Ils sont difficiles à gérer, il peut trés facilement y avoir des bugs, je vous recommanderais donc te tester tout vos escaliers avant de râler après le pont. Aussi, préférez faire faire 2 pas aux héros dans un évent plutôt que d'empliler les escalier.

¤ Gestion spéciales :
Vous avez sans doute remarquez qu'il y a deux entrées de caverne sur ma map. Chacune téléportant vers l'autres, il faut modifier l'altitude, en effet si le joueur prend celle du bas en premier, il aura une altitude de 1 (car il aura monté un escalier) et arrivera dans l'autre grotte avec une altitude de 1, comme il va descendre de deux escalier il va atteindre l'altitude de -1 ... Il faut donc dans l'évent de téléportation modifier l'altitude et la mettre à 2, réciproquement dans l'évent de téléportation de la grotte du haut il faut mettre l'altitude à 1.


3ème Etape : Le pont

Je vais maintenant vous expliquer comment faire le pont en lui-même, c'est sans doute la partie la plus compliquée alors soyez attentifs.

- 1 - Canaliser

Principe : Visualisez un passage-à-niveaux, entre train et voiture. Si le train passe, les voitures sont bloquées. Si les voitures passent alors le train de passe pas (en supposant que ça se passe comme ça). C'est pareil pour notre pont, sur un pont horizontal, si le héros est en bas alors il pourra passer verticalement et pas horizontalement ; inversement, si le héros est en haut, il pourra passer horizontalement et pas verticalement.

En image :



Il va donc nous falloir gérer tout ceci, il y a évidement des dizaines de façon de faire. Par exemple, on pourra interdire l'appuie de la touche haut si le héros est sur le pont et sur la ligne de dessus du pont, puis interdire l'appuie de la touche bas si il est sur la ligne du bas. De même si le héros est sous le pont,... Ce serait interminable et rempli de bug... On peut aussi imaginer un script mais ce ne serait plus de l'évent-making.

Il faut donc canaliser les voies de passages avec des bloqueurs : je vous conseille de prendre cette ressource et de la placer dans les characters de votre jeu :


- Oui c'est vide, c'est juste pour bloquer le héros - Enregister ce vide dans vos characters, point c'est tout -

Ah oui, j'allais oublier. Prenez ces deux ressources, elles vous permettront d'afficher vos ponts sur la couche event :

Pont horizontal

Pont vertical
(Ces Chara pourront être mis à jour selon l'avancement du tutoriel)

C'est compliqué alors je vais procédé par étape.

A-Canalisation horizontale :
Occupons-nous du passage par le haut, la ligne droite entre les deux bords de la mini-vallée.
Le moyen le plus facile d’empêcher le héros de passer sur RMXP est un évent.
Il y deux évènements bloqueurs :

L'évènement BLOQUEUR/NON-AFFICHEUR:
Il faut une première page vide, car l'évènement ne devra pas bloquer le héros quand il sera sous le pont.
Il faut une seconde page ayant pour apparence le bloqueur (que j'ai donné juste au-dessus), qui aura une direction fixe, cette page sera active si et seulement si l'altitude du héros est supérieur ou égale à celle du pont.
Il faut aussi une troisième page vide (par sécurité) avec une unique condition : l'altitude du héros est supérieure ou égale à l'altitude du pont + 1.

Ce qui nous donne l'évènement suivant :


Qui est à placer selon le schéma suivant (sur la ligne rouge) :


On remarque un léger problème avec l'escalier, cela pourrait poser un gros problème mais pas cette fois car il fait la transition entre l'altitude 0 et l'altitude 1, il suffit donc de copier-coller la page de l'escalier normal dans la page 1 du bloqueur.

Notez que ma map est mal faite car la plupart de mes bloqueurs ne servent à rien... On verra donc leur utilité plus tard --'

L'évènement BLOQUEUR/AFFICHEUR :
Je ne vais pas refaire le détails mais voici sa fiche :

-NOTE : La troisième page est là pour respecter la méthode de construction du pont mais pourra être utile si un deuxième pont vient se superposer à celui-ci -

Cet évent permet d'afficher le pont et de gérer son affichage. Si le héros est dessous le pont est au dessus sinon c'est le héros qui est au-dessus (on verra plus tard). Il est à placer selon la ligne violette du schéma suivant (ailleurs, le pont est déjà affiché et les mur se chargent de bloquer le joueur) :



B-Canalisation verticale :
Nous avons fini de canaliser le joueur horizontalement, il faut maintenant le canaliser verticalement.
Il va falloir créer de nouveaux bloqueurs, de chaque côtés du pont :
Ils devront être actifs seulement quand le joueur sera à une altitude inférieure à celle du pont.

Cette fois ce sont les mêmes des deux côtés, ils sont à placer selon les lignes vertes du schéma suivant :



Voilà, le héros sera canalisé quand il sera sous le pont.

- 2 - Entrées et sortie du pont
Il nous reste deux choses à faire, gérer les entrées et les sorties du héros sur le pont, et créer d'autre bloqueurs conditionnels (on verra après).
Il n'y qu'une seule direction d'entrée et de sortie sur le pont mais de sens de passage : Droite->Gauche ou Gauche->Droite.
A l'entrée/sortie gauche du pont il faut mettre l'évènement suivant :


A placer selon la ligne jaune du schéma suivant :


La deuxième entrée/sortie, celle de droite possède la même structure d'évènement que celle de gauche mais la deuxième page devient :


A placer selon la ligne Orange du schéma suivant :


- 3 - Finaliser le pont
La dernière partie, enfin. On a tous remarquer qu'il y avait des arbres et des rochers sous le pont avant de supprimer les centres des ponts :


Ils sont bien sûr sensé bloquer le héros, mais en mettant un morceau de pont passable par-dessus on a éludé le blocage du héros par le tronc de l'arbre ou par le morceau de rocher. Il est hors de question de les remettre tel quel par évent, il y sont déjà, on aura donc juste à créer un nouvel évènement à copier/coller sur les différent tiles blocants, voici cet évent ; en trois pages comme d'habtitude :


C'est sans doute l'évent le plus simple de ce tutoriel, placez les là où il faut, ici selon les ronds bleus :



Manque-t-il quelque chose ? On dirait que non. On a donc le schéma complet du pont horizontal. Ca y est c'est fait, voici donc le rendu final (désolé je n'ai pas fait de vidéo).




Pour les ponts verticaux, c'est le même principe (j’abrégerais peut-être un autre tuto plus tard).

Les ponts au-dessus de l'eau


Et me revoilà, j'ai eu le temps de mettre au point la possibilité de faire des ponts au-dessus de l'eau ! Cela peut paraître facile mais je vous rappel ce qui arrive lorsque l'on s'approche d'un tile marqué du tag terrain 7 : on bloque ! Mais pourquoi ? Je suis sur mon pont bien au-dessus de l'eau moi ? Visuellement oui, mais pour le jeu le tag du terrain où est le joueur est bien le numéro 7 donc le joueur est, pour RMXP, littéralement dans l'eau et sur le pont en même temps.

Il faut remédier à cela, ce n'est pas compliqué mais j'ai du abandonner l'event-making durant un bref instant et jeter un coup d'oeil à la ligne 101 du script Game_Map de Krosk (celui qui est le plus en bas dans la liste des scripts). On y voit le passage gérant l'appel de l'évènement commun : SURF.
Et bien remplacez ce passage ci :
Code:
    # Surf
    if self_event != nil
      if $game_map.terrain_tag(x, y) == 7 and self_event.terrain_tag != 7
        return false
      end
      if $game_map.terrain_tag(x, y) != 7 and self_event.terrain_tag == 7
        if self_event.type == Game_Player
          # Retour au skin normal
          $game_temp.common_event_id = POKEMON_S::Skill_Info.map_use(POKEMON_S::Skill_Info.id("SURF")
        end
        return false
      end
    end

Par celui-là :
Code:
    # Surf
    if self_event != nil
      if $game_map.terrain_tag(x, y) == 7 and self_event.terrain_tag != 7
        if $on_bridge
          return true
        else
          return false
        end
      end
      if $game_map.terrain_tag(x, y) != 7 and self_event.terrain_tag == 7
        if self_event.type == Game_Player
          if $on_bridge != true
            # Retour au skin normal
            $game_temp.common_event_id = POKEMON_S::Skill_Info.map_use(POKEMON_S::Skill_Info.id("SURF"))
          else
            return true
          end
        end
        return false
      end
    end

Et vous pourrez créer vos ponts au-dessus de l'eau.

Moyennant d'activer la variable globale $on_bridge dans les events d'entrées et de sorties. Essayez de le faire vous-même.

Vous n'y arrivez pas ? Ou vous ne comprenez pas ce que je vous demande de faire ? Bien et bien vous vous souvenez des évents d'entrées et de sorties du pont ? Et bien voici comment doivent-ils être (ou juste la deuxième page, la seule qui à changée) si le pont est au-dessus de l'eau :
Entrée/Sortie Gauche :


Entrée/Sortie Droite :

Ne vous fiez pas aux nom de mes évents ils ne sont pas valides.

Ensuite, il y a une deuxième chose qui change : les bloqueur de l'altitude inférieure au pont (en vert dans le schéma suivant)


Oh, ce n'est pas une grosse modification mais elle est capitale, il suffit de changer leurs nom et de les appeler (respectez la case et chaque caractère) "BLOQUEUR_PONT".

Une modification de l'évènement commun SURF est à faire, dans le screen suivant j'ai encadré en rouge la condition à ajouter, elle doit regrouper tout ce qu'il y a en bleu (dessous) :


Son utilité ? laissez l'évènement comme il était avant et essayer de bloquer le personnage sur le bloqueur verticale ... Vous verrez que l'on peut passer à travers le pont et grimper de étages d''un coup.


Un dernier point, pour éviter les bugs graphiques du genre :

Quand le héros passe sous le pont, je vous conseille vivement de placer des Bloqueur/afficheur sur toute la ligne d'event sous les tiles du pont. Ainsi, je vous présente le schéma basique d'un pont au-dessus de l'eau :


Bon making à toutes et à tous !

Posté par Speed le 14 Avr - 17:05 (2011)
J'avoue que j'avais une idée assez simple en tête pour faire des ponts, mais là, ton système de variables d'altitude est assez intelligent !
De surcroit, c'est très bien expliqué, bien imagé, et surtout bien écrit.

Je t'encourage sérieusement à faire la suite, ça sera utile à une grande majorité du forum. Chapeau !

Posté par Ku'rei le 14 Avr - 20:00 (2011)
Merci Imbécile heureux
J'ai fais un petit ajout vite fait à la fin, pour faire les ponts au-dessus de l'eau.
Prochaine étape : le dédale de pont :twisted:

Posté par Raude le 14 Avr - 20:24 (2011)
Yop Kureiji,
Comme ton tuto est très bien expliqué et vraiment bien fait.
Tu obtiens 1200 Points Contribution. Je t'encourage donc à continuer. Clin d'œil foireux
Bravo à toi.

Posté par Noty! le 19 Avr - 18:56 (2011)
Waw, c'est un superbe tuto qui risque de me servir.
Très bien expliqué et imagé, je te félicite!

Posté par quenti77 le 20 Avr - 09:17 (2011)
Franchement j'ai adoré ton tutoriel. Il est bien expliqué et bien imagé. J'attend avec impatience le dédale de pont.
Petite question : quel tileset à tu utilisé ?

Posté par Kevindu49 le 20 Avr - 11:28 (2011)
merci beaucoup moi qui avait des probleme pour passer sur les pont c'est régler graçe à toi :rondoudah:

Posté par Ku'rei le 21 Avr - 19:00 (2011)
Déjà, merci à tous Imbécile heureux Je suis content qu'il vous plaise.

quenti77 a écrit:
Franchement j'ai adoré ton tutoriel. Il est bien expliqué et bien imagé. J'attend avec impatience le dédale de pont.

Et bien, je pense que le dédale de pont n'est pas pour maintenant car je rencontre beaucoup de problème dans sa réalisation --' C'est plus compliqué que je ne le pensais, désolé.

quenti77 a écrit:
Petite question : quel tileset à tu utilisé ?

C'est mon tileset neige perso Clin d'œil foireux

Posté par quenti77 le 21 Avr - 21:07 (2011)
Ah ok daccord merci de te réponse.

Posté par Dark_Ray le 11 Juil - 11:38 (2011)
Compliqué pour faire des ponts avec ce tuto alors qu'il y a nettement plus simple  :?




Il suffit d'un interrupteur et de plusieurs évènement et le tour est joué !
Je veux bien l'écrire si ça intéresse quelqu'un (étant donné que j'ai déjà appliquer ce système dans ma version et qu'il marche du tonnerre Clin d'œil foireux )

Posté par Ku'rei le 11 Juil - 12:17 (2011)
Je sais bien qu'il y a plus simple Imbécile heureux Mais c'est moins flex, on peut difficilement intégré la gestion d'un brouillard (plus on est haut moins on voit le bas) : l'altitude; et d'autre encore. Mais je pense que la technique constant à utiliser des interrupteurs plutôt que l'altitude peut en intéressé certains Imbécile heureux 
Je rajoute que ce tuto est fait pour les event-maker... Personnellement je gère tout les données de mes map par script Imbécile heureux

Posté par Dark_Ray le 11 Juil - 16:27 (2011)
Bon dans ce cas je ferais un petit tuto pour les ponts avec interrupteurs Clin d'œil foireux

Je me doute que ce système est plus flexibles pour combiner différents paramètres ^^'
Mais étant moyen dans les scripts, etc ... (et pensant ne pas être le seul) je me dit qu'une manière plus facile pour faire des ponts peut en intéresser plus d'un Imbécile heureux


Bon je m'y met le plus vite possible :p

Posté par Captain Relevant le 11 Juil - 21:14 (2011)
Très très bon tuto Kureiji Clin d'œil foireux
Par contre, lors de l'étape ci :



Le héros est forcément masculin.

Mis à part ça, ce tuto m'a bien servi!

EDIT : Dommage qu'il ne soit pas compatible avec le follow_me :/

Posté par Ku'rei le 14 Juil - 13:06 (2011)
 
Citation:
 Le héros est forcément masculin
C'est à toi de gérer l'apparance Clin d'œil foireux


J'ai fais ce tuto sans aucun autre script que ceux de PSP4G+ donc pas avec le follow_me mais je pense que ça devrait pas pauser de problèmes pour l'adapter.


@doc emmett : pour le pont au-dessus de l'eau tu es obligé de passer par le script Clin d'œil foireux

Posté par Dark_Ray le 17 Juil - 14:56 (2011)
Non !
ça marche sans scripts avec ma méthode (si elle est bien appliquée --' )
Dès que possible je fais une vidéo ! Comme ça y aura la preuve visuelle Clin d'œil foireux

Posté par Ku'rei le 17 Juil - 18:39 (2011)
Va falloir que j'arrête de faire de parler sans tester moi --' Ensuite, j'ai du loupé quelque chose mais dans les script de Krosk, si le terrain 
porte le tag no7 et que le héros n'est pas en train de surfer, la case n'est pas passable... C'est ce que j'ai vu en faisant ce tuto.

Posté par Pαlвσlѕку le 17 Juil - 19:31 (2011)
En effet c'est le cas.
Le tag terrain numéro 7 n'est praticable qu'avec Surf.

Posté par Dark_Ray le 17 Juil - 21:34 (2011)
J'ai réussi à résoudre ce problème avec mon pont !
Il faut que j'édite mon sujet ... mais en tout cas c'est opérationnel à 100 %
Clin d'œil foireux