[PSDK] Faire un écran titre en évent-making

6 Réponses • 823 Vues

Bonjour,

Un débutant m’a posé la question de comment faire un écran-titre en évent-making sur PSDK, et je me dis : quitte à lui expliquer, autant partager la procédure à tout le monde.

Je tiens qu’à préciser que c’est Eurons qui a ouvert la voie à ce sujet (il a été le premier à l’implémenter sur son fan-game). Je le remercie donc pour m’avoir montré le point de départ.


Étape 1 : Créer la map sur RPG Maker XP

Réservez-vous sur RMXP une map vide dédiée à l’affichage de l’écran-titre.
Ne mettez pas de BGM et notez bien l’ID de votre map.




Étape 2 : le script

Créez un script Ruby dans votre dossier /scripts (je l’ai nommé “00100 Scene Title.rb”) ayant le contenu suivant :

# The title screen scene
class Scene_Title
  # @return [Integer] ID of the map to display as intro movie (0 = no intro)
  remove_const :INTRO_MOVIE_MAP_ID
  INTRO_MOVIE_MAP_ID = 11 #Mettre le numéro de votre map qui va servir d’intro
  # Init the title display part
  def init_title
  end

  # Play the title display part
  def play_title
    if $game_variables[27] == 2 # Va servir pour boucler l’intro une fois la musique finie
      Audio.bgm_stop
      return
    end
    @loop = false
  end
end


Étape 3 : Les ressources nécessaires

Maintenant, que le script est prêt, il vous faut :
• Votre fond d’écran titre au format 320×240, 640×480 ou 1280×960
• Votre image « Start push » au même format
Copiez ces images du dossier \graphics\Titles vers \graphics\Pictures et notez bien leur nom.


Étape 4 : l’évent-making

Pour faire un écran-titre qui a exactement les mêmes caractéristiques que celui d’origine de PSDK, vous aurez besoin de 2 évents et 2 variables.
Inutile de réserver des interrupteurs ou variables spécifiquement pour cette map : étant donné que vous êtes dans la scène de l’écran-titre, tout ceci sera réinitialisé en cas de reset du jeu ou de chargement d’une partie.

L’évent principal comportera deux onglets, tout deux en Processus parallèle.



Onglet 1 :

Commande de BGM => Titre et volume selon votre convenance. Si je l’appelle dans cet évent et non en paramètre de carte, c’est volontaire : cela évite que la musique ne se lance avec une demi-seconde d’avance alors que la map est encore noire.
Menu principal : désactiver => Important, car PSDK autoriserait l’accès au menu durant cette séquence.
Afficher image n°50 : black (opacité : 255) => Permet de faire un fondu
Animation : le héros [vide] => (Facultatif) Force PSDK à regénérer les animations RMXP pour cette session de jeu. (Évitera un freeze de 2 secondes en jeu.)
Afficher image n°1 : titlescreen => Le background de votre écran-titre. S’il est HD (640×480 ou 1280×960), mettez 50% ou 25% respectivement dans les paramètres de zoom. Dans ce cas, il apparaitra net sur votre jeu si vous jouez en ×2.
Afficher image n°2 : start push (opacité : 0) => Le message « appuyer sur start » ou équivalent. S’il est HD (640×480 ou 1280×960), mettez 50% ou 25% respectivement dans les paramètres de zoom. Notez qu’il est en opacité 0, car on le fera clignoter avec un autre évent.
Déplacer image n°50 : black (opacité : 0, 10 frames) => Permet de faire un fondu
Attendre : 10 frames => Temps d’attente durant le fondu.
Effacer image n°50 => On n’en a plus besoin maintenant qu’elle est à 0 d’opacité.
Activer interrupteur local [A] => Toutes ces commandes devant s’exécuter qu’une fois, on passe à l’onglet suivant.



Onglet 2 (Processus parallèle sur interrupteur local A activé) :

Condition scriptée : Input.trigger?(:A) or Input.trigger?(:X) or Mouse.trigger?(:left) => La suite sera exécutée si la touche A, X ou le clic gauche souris est enclenché.
Arrêter BGM : 1 seconde => permet de stopper la musique de l’écran-titre
Commande scriptée audio => (Facultatif) Là, je fais jouer le cri du Pokémon de mon jeu, à la manière des jeux officiels. Vous pouvez mettre n’importe quel bruitage ici.
Variable 27 = 1 => Sert de signal à l’autre évent (cf étape suivante) pour qu’il arrête de s’exécuter.
Attendre : 15 frames => Pour laisser le temps au cri du Pokémon de se jouer. (Note : La transition vers la scène suivante prendra 30 frames quoi qu’il arrive. Ce 15 correspond donc à 45 frames en réalité.)
Menu principal : activer => Pour redonner la main au joueur
Retourner à l’écran titre => Exécuté ici, PSDK va l’interpréter comme une demande d’ouvrir la scène de l’écran-titre vanilla (et non de reset le jeu). Comme le script a effacé le contenu de l’écran-titre vanilla, PSDK passera directement au menu principal.

Note : inutile de faire effacer les images n°1 et 2, car PSDK les effacera automatiquement au changement de scène. De plus, cela permet d’avoir une transition en fondu (sans écran noir) vers le menu principal.


Étape 5 : l’animation du « Press start » et la boucle de la musique

Onglet toujours en Processus parallèle (qui fonctionnera donc comme une boucle). Le second onglet est un onglet vide et ne s’active que si la Variable 27 vaut 1 ou plus.



Variable 26 += 1 => Sert de compteur de frames
Condition scriptée : gv[26]%100 == 0 (avec « Exécuter autre chose si la condition est fausse ») => La partie « si vrai » sera exécutée si le compteur de frames (variable 26) est un multiple de 100 (modulo 100), soit toutes les 100 frames.
Déplacer image n°2 : start push (opacité : 0, 1 frame) => Efface temporairement l’image de Start Push.
Condition scriptée et imbriquée dans le « sinon » : gv[26]%50 == 0 => Sera exécutée si le compteur de frames est un multiple de 50 (modulo 50), mais pas un multiple de 100 (à cause de la condition précédente). Cela sera donc exécuté tous les 100 frames avec un déphasage de 50 frames.
Déplacer image n°2 : start push (opacité : 255, 1 frame) => Affiche temporairement l’image de Start Push. On obtient ainsi son clignotement comme dans l’écran-titre vanilla.
Condition scriptée : Audio.bgm_position > Scene_Title::TITLE_BGM_LENGTH => Permettra au jeu de reboot automatiquement comme dans l’écran-titre vanilla s’il détecte que la musique de l’écran-titre arrive à la fin.
Variable 27 = 2 => Mettre la valeur à 2 va servir de signal sur le script vanilla pour lui dire qu’il devra reboot le jeu et non aller au menu principal.
Retourner à l’écran titre => Même effet que dans l’autre évent.

Voilà, vous avez un écran-titre similaire à celui d’origine de PSDK, la possibilité d’utiliser des images HD en plus.


Bonus : aller plus loin

Grâce à votre map dédiée, vous pouvez ne pas vous contenter que d’un écran-titre, mais aussi mettre des spashscreens, des animations ou une cinématique d’intro façon jeu officiel. Les seules limites seront vos compétences en évent-making et vos ressources graphiques.

Aussi, en utilisant la commande script équivalente à celle d’évent-making « afficher une image », il est possible d’utiliser des alias pour par exemple changer l’image en fonction de la langue, d’une variable ou même déporter dans des sous-dossiers de Pictures l’image à afficher.

Voici un exemple pour l’image de Push-Start en HD positionnée dans un sous-dossier « Title ». Dans ce cas-là, l’image devra se nommer « start push 480p_EN », « start push 480p_FR », ou « start push 480p_ES » en fonction des langues disponibles pour votre jeu.

lang = (GamePlay::Save.load&.options&.language || 'en')
lang = 'en' unless RPG::Cache.title_exist?("start#{lang}")
num= 2
img = "Title/start push 480p_#{lang}"
ori = 0 #(0:Coin,1:Centre)
x = 0.0
y = 0.0
zx= 50.0
zy= 50.0
opa = 0.0
blend=0 #(0:Normal/1:Addition/2:Soustraction)
$game_screen.pictures[num].show(img, ori, x, y , zx, zy, opa, blend)

« Modifié: 17 juillet 2020, 19:30:11 par Amras Anárion »

Tuto Script PSDK Tuto Making

Super bien présenté ton tutoriel
Bravo ! Ça risque de me servir, et même beaucoup !
"La vie, c'est comme une bicyclette, il faut avancer pour ne pas perdre l'équilibre" -Albert Einstein

SirMalo

Graphiste

Merci pour le partage de ce tuto très clair :)

Mud'

Graphiste

Merci d'avoir fait ce tuto ! :)
Humain mais Gobou.
Doublure officielle de Gobou.

eaven yaro

Mappeur

Super bien fait comme tuto!
Hâte d'utiliser tout ça ^^
Tuto parfait !
Ça va beaucoup m'aider, merci  :)
Une vie qui n'évolue pas, ne vaut pas la peine d'être vécue.

There was an error while thanking
Thanking...