Partagez
Aller en bas
Blockade
Blockade
Membre

Nombre de messages : 194
Age : 27
Distinction : aucune
Date d'inscription : 06/09/2008

Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste. Empty Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste.

le Lun 2 Aoû 2010 - 11:33
Bonjour/bonsoir !
Alors je vais vous expliquer un peu le fonctionnement du SBS, et vous montrer ses possibilités qui sont presque infinie. J'aurais pu faire un script qui va faire ce que je vous décrit dans le tuto (le lancer de bombe), mais il faut peut-être qu'un jour vous apprenez à vous servir un peu du SBS quand vous l'utilisez !
Donc pour ce tutoriel, vous avez besoin d'aucune connaissance en RGSS2 juste un peu de logique et de la bonne foi.
Nous allons voir comment faire pour que le héros lance une bombe ou un autre objet sur un ennemi/allié en affichant l'icone de l'objet par soucis de réalisme. Comme dans Somnia Memorias en fait si vous y avez déjà joué (bouh la vilaine pub de merde en plein milieu).

Le tuto se sépare en deux parties. La première est générale elle explique comment les animations du SBS marchent. La deuxième met en pratique ce qu'on viens d'apprendre (ce n'est pas l'exemple le plus facile qu'ont puisse avoir je dirais même qu'il est plutôt pas facile pour commencer mais plusieurs membres ont demandé comment le faire et je n'ai pas d'autre idées donc ca sera ca =))

Prérequis :
- La version du SBS (ATB ou non) 3.4 minimum (des fonctions essentielles pour ce tuto sont apparues dans la 3.4)
Vous pouvez télécharger la dernière version ici : http://www.mediafire.com/?rkjmnwztzw4
- Votre tête
- RPG Maker VX
- Ne pas dire "lo­l c en script jy ariveré jamai md­r §§", tout le monde peut le faire et de plus vous n'aurez rien à scripter je vous donne le code.

Vous êtes prêt ? C'est parti !



Alors premièrement, vous ouvrez votre projet et l'éditeur de script. Ensuite cliquez sur le script "[SBS] Battler Configuration" si vous avez pas changé le nom. Vous devriez avoir ca sur votre écran :

Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste. 8133455573100_tuto1

Ce script contient toute les données relative aux animations de combat, c'est à dire que c'est lui qui va gérer le déplacement des héros, l'affichage d'animation etc... Tout quoi ! Donc si vous aimez pas comment les héros sautent en fin de combat vous pouvez modifier la séquence exécutée par exemple ! Ce script est divisé en 3 grandes parties.
La partie ANIME qui va contenir les actions une par une, comme par exemple un mouvement de héros, un affichage d'image, un affichage d'animation etc.. Cette partie, toute seule, ne sert à rien c'est pourquoi il y a une deuxième partie la partie ACTION. Je ne vais pas s'attarder sur la partie ANIME car il y a plus de 15 types d'actions différentes, et qu'elle sont bien expliqués sur le script. Donc pour comprendre chaque actions jetez un coup d'oeil aux commentaires du script =)

La partie ACTION va elle combiner les différentes actions pour créer une séquence. Une séquence va en fait mettre à la suite plusieurs actions et les exécuter.
Prenons une séquence au hasard et regardons un peu ce qu'il en est :

Une séquence est composée de trois parties.
Note du scripteur : Les séquences sont en fait des hash qui contiennent un array, qui contient des strings : "xxx" => ["yy","zz"],

Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste. 21325732963425_squence
La premiére partie nous sera utile plus tard, c'est en fait le nom de la séquence. Les parties entourées sont des choses à ne PAS oublier lors de la création d'une séquence, ca peut paraitre inutile, mais sans ces petits trucs ca ne marchera pas.
Imaginons que vous voulez créer votre séquence votre code de base sera le suivant :
Code:
"SKILL_USE" => [],
Voila vous avez créé votre premiére séquence nommée SKILL_USE.

Question du public : Euh, on est obligé d'écrire les noms des séquence ou actions en MAJUSCULES ?
En fait, non. Mais par convention on le fait, donc libre à vous de faire comme vous voulez.

Elle va contenir les actions de la partie ANIME. Sur notre séquence on va analyser vite fait ce qu'elle fait.
Je rappelle que cette séquence gère un lancement de sort normal (tel que feu par exemple). Vous l'avez en tête ? Parfait. (sinon essayez de lancer n'importe quel sort basique de la démo)
Alors le SBS va lire les actions dans l'ordre. Premièrement : "STEP_FORWARD" qui indique que le héros actuel va faire un petit pas en avant (si vous voulez les détails allez voir l'action dans la partie ANIME). Puis "STAND_POSE" va immobiliser le lanceur, en fait ca va lui éviter de marcher dans le vide, etc...
Donc on va pas s'attarder sur les actions, normalement vous avez compris comment se déroule une séquence..

En gros une séquence contient une suite d'actions qu'il va exécuter.

Si vous avez pas compris on va prendre un autre exemple qui vous parlera plus. Imaginons que vous êtes dans votre chambre et vous voulez aller jusqu'à votre cuisine et préparer une glace et revenir dans votre chambre. Pour se faire il vous faudra 3 actions "marcher jusqu'à la cuisine","préparer une glace","revenir au lieu de départ". Mais ces actions indépendantes ne servent à rien, puisque vous aurez pas le résultat attendu (avoir une glace dans votre chambre). Vous allez alors les combiner pour avoir le résultat attendu. En mettant à la suite "marcher jusqu'à la cuisine","préparer une glace","revenir au lieu de départ" vous aurez une glace dans votre chambre ! Le SBS marche pareil, une suite d'actions organisées pour créer une séquence qui déboulera sur une animation de combat.

Si vous avez toujours des questions n'hésitez pas à les poser !

Question du public : T'a pas l'impression d'avoir oublié une partie ? Tu nous à parlé de 3 parties principales au début, la j'en vois que deux !!!
Et surtout comment le SBS va savoir comment QUAND il faut exécuter la séquence ?

Patience, ca arrive Wink

Donc en fait la troisième partie, que je vais nommer EXECUTION sert à déterminer quand la séquence va être exécutée, à l'utilisation d'un sort ou à la victoire du combat par exemple.
Regardons par exemple autour de la ligne 1358 ce morceau de code :
Code:
  #--------------------------------------------------------------------------
  # ++ Actor Victory Action Sequence
  #--------------------------------------------------------------------------
  # Define Action Sequence key used when an Actor at the end of a
  # victorious battle.
  def win
    case @actor_id
    when 1
      return "VICTORY"
    end
    # Default Action Sequence for all unassigned Actor IDs.
    return "VICTORY"
  end
Cette méthode est appelée à la victoire d'un combat. Si le héros à pour ID 1, il va exécuter la séquence VICTORY. Et en dessous c'est la séquence par défaut !

Question du public : Mais c'est les même ~~ C'est quoi ton bordel ?!
Oui, ici c'est les même. Mais imaginons, vous voulez que un héros qui à pour ID 5 et un autre qui à pour ID 54 exécutent une séquence que vous avez créé : "VICTORY_BLASE" qui consiste on va dire à ce que le héros reste sur place et n'effectue pas le saut de victoire car il est trop lourd ou que c'est un dépressif..
Il suffira de mettre :
Code:
  #--------------------------------------------------------------------------
  # ++ Actor Victory Action Sequence
  #--------------------------------------------------------------------------
  # Define Action Sequence key used when an Actor at the end of a
  # victorious battle.
  def win
    case @actor_id
    when 1
      return "VICTORY"
    when 5,54
      return "VICTORY_BLASE"
    end
    # Default Action Sequence for all unassigned Actor IDs.
    return "VICTORY"
  end

Si l'ID du héros est 5 ou 54 il va exécuter la séquence VICTORY_BLASE et pour les autres "VICTORY".
Pour savoir ou aller, cherchez le nom de la class :
Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste. 3266580229308_classitem
Je fait un petit tableau pour savoir ou vous pouvez aller chercher :
Nom de la classLes méthodes ont un impact sur..
class Game_Actor < Game_Battler Les héros
class Game_Enemy < Game_Battler Les ennemis
class State Les altérations d'état
class Weapons Les armes
class Skills Les sorts
class Item Les objets

Pour les 3 dernières, elles continent toutes la méthode base_action c'est celle ci qui sera utile si vous voulez assigner une séquence spéciale à une attaque avec une arme précise, un sort ou un objet.
Elle est construite de cette façon :
Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste. 17132715967059_skill

Après il existe différentes méthodes qui influent à différents endroits, mais c'est dans les commentaires donc pas de panique tout est très bien expliqué. Si vous avez un doute postez en dessous =)


Voila, c'est terminé pour la partie générale du fonctionnement ! J'ai fait une petite image qui résume ce que je viens d'expliquer avec le début et la fin de chaque partie (ANIME, ACTION, EXECUTION) :
Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste. 17951883102153_tuto234
On crée d'abord nos actions, dans la partie ANIME que l'ont va organiser grâce au séquences dans la partie ACTION, puis que l'ont va appeler à des moments précis dans la partie EXECUTION.

Normalement, en vous entrainant et si vous comprenez un minimum l'anglais vous pouvez faire vos propres animations de combat basique ! (j'ai bien réussi à le faire avec que la moitié de traduit en anglais, toute seule et je connaissais rien en RGSS2 donc pourquoi vous y arriverez pas ? Wink)
Si j'ai le courage je ferais quelques tutos, mais la vous avez la base de comment fonctionne le SBS (si j'ai bien expliqué xD)


Alors maintenant passons à notre exemple : Créer une animation de bombe réaliste.
On à vu que y'avait 3 parties : la partie ANIME, ACTION et EXECUTION. On va réfléchir sur les deux premières en même temps puis passer à la troisième !

Création de la séquence :

Donc on va faire une séquence qui permet de lancer une bombe et de voir l'icône !

La premiére étape et de voir les actions que nous allons utiliser. On va dire dans cet exemple qu'on veut que le héros avance, lance la bombe et retourne à son point de départ.
Après un bref coup d'oeil aux actions déjà existantes pour faire le héros avancer il suffit d'utiliser l'actions "STEP_FORWARD" (la même action que pour les sorts) et pour revenir à sa place il suffit d'utiliser "RESET"
(Vous avez de la chance car toutes les actions sur les séquences de base sont expliquées !).
Nommons notre séquence "BOMBE".
Alors pour l'instant notre code à placer dans la deuxième partie est (essayez de trouver)
Spoiler:
Code:
"BOMBE" => ["STEP_FORWARD","RESET"],

Avec ca, le héros avancera puis retournera à ca position initiale. Donc maintenant on veut juste lancer la bombe. Pour cela on regarde la séquence déjà existante de l'animation "jetter son arme".
On trouve ca :
Code:
  # "THROW_WEAPON" - An Action Sequence that demonstrates the function to
  #                  'throw' a weapon sprite at an enemy.
  "THROW_WEAPON"          => ["STEP_FORWARD","WPN_SWING_V","absorb1","STAND_POSE",
                          "START_WEAPON_THROW","12","WEAPON_DAMAGE","Can Collapse",
                          "END_WEAPON_THROW","RESET"],
Les titres sont assez clair, on va voir ce que fait "START_WEAPON_THROW", c'est lui qui va faire diriger l'arme du héros à l'ennemi.
On va voir dans la partie ANIME et on trouve ca :
Code:
  # Type - always "m_a"
  # ID - 1~999: Database Animation ID
  #          0: No database animation used.
  # Object - Animation's target. [0=Target] [1=Enemy's Area]
  #                              [2=Party's Area] [4=Self]
  # Pass -  [0: Animation stops when it reaches the Object.]
  #        [1: Animation passes through the Object and continues.]
  # Time - Total travel time of animation from starting to end point.  Larger
  #        values slow down travel speed.  This value also determines the length
  #        of time the animation will display on screen.  It is possible for
  #        animations to get cut short before it completes.  Increase this value
  #        to ensure that animations don't get cut short.
  # Arc - Trajectory - Positive values produce a low arc.
  #                    Negative values produce a high arc.
  #                    [0: No Arc]
  # Xp - X Pitch - Adjusts the initial X coordinate of the animation.
  #                Enemy calculation will be automatically inverted.
  # Yp - Y Pitch - Adjusts the initial Y coordinate of the animation.
  # Start - Defines origin of animation movement.
  #              [0=Self] [1=Target] [2=No Movement]
  # Z-axis - true: Animation will be over the battler sprite.
  #          false: Animation will be behind battler sprite.
  # Flying Graphic Angle - Insert only "Flying Graphic Angle" and
  #                        "Flying Graphic Skill Angle" ANIME keys.
  #                        For no weapon sprite, use "".
 
  # ANIME Key                        Type  ID Object Pass Time Arc  Xp Yp Start Z FlyGraphicAngle
  "START_WEAPON_THROW"  => ["m_a",  1,  0,  0,  18, -24,  0,  0,  0,false,"WPN_ROTATION"],

ANIME Key correspond au nom de l'actions.
Type ne changera jamais c'est pour identifier le type d'action. Ici c'est le déplacement/positionnement d'animation ou d'objet.
l'ID est l'ID de l'animation à jouer
Object : Sert à déterminer ce que l'animation ou l'objet va avoir pour cible ici c'est 0 c'est à dire la cible
Pass : L'animation ou l'objet s'arrête ou continue quand il à atteint la cible, ici il vaut 0 donc il s'arrête
Time : C'est le temps que va mettre l'animation ou l'objet d'aller au point de départ à la cible. Plus cette valeur est elevée, plus le trajet sera long.
Arc : Si c'est différent de 0 la trajectoire va avoir un effet courbé
Xp/Yp : Les valeurs de décalage en ordonnée et en abscisse des coordonnées initiales de l'animation/objet
Start : D'ou l'animation ou l'objet part. Si l'animation ou l'objet est fixe il faut mettre 2. Si elle part de la cible 1, et 0 s'il il part du lanceur
Z : Décide si l'animation ou l'objet est au dessus ou en dessous du battler.

FlyGraphicAngle : La partie la plus intéressante si vous laissez "" il n'y aura pas d'icône sur le terrain et cette actions servira à afficher une animation en déplacement (boule de feu par exemple) ou bien une animation centrée sur les ennemis). Si par contre elle contient le nom d'une autre action elle affichera un objet qui se déplace.

Avec cette action une animation moche s'effectura sur votre objet c'est pourquoi vous allez créer en dessous une nouvelle action :
Code:
"BOMBE_LANCEE"  => ["m_a",  0,  0,  0,  18, -24,  0,  0,  0,false,"WPN_ROTATION"]
En fait on remplace juste l'ID par 0 pour lui dire qu'on utilise pas d'animation, aussi vous pourrez modifier à votre guise les autres paramètres. N'hésitez surtout pas à modifier des valeurs pour voir leur effets !

Donc voyons voir ce que va contenir WPN_ROTATION. Il suffit de descendre un peu et on trouve :

Code:
  # Start - Starting angle in degrees (0-360)
  # End - Ending angle in degrees. (0-360)
  # Time - Duration, in frames, of a single rotation.  Rotation will continue
  #        until the animation is complete.
 
  # ANIME Key          Start  Angle  Time
  "WPN_ROTATION"    => [  0, 360,  8],
Cette actions sert à déterminer comment l'objet va tourner. Il va partir de l'angle défini au début : 0 puis arriver à 360 en 8 frames. Puis l'animation se répète jusqu'à que l'objet atteigne sa cible. Donc on va utiliser ici BOMBE_LANCEE, mais vous pouvez le modifier à votre guise maintenant =) Encore une fois n'hésitez surtout pas à modifier des valeurs pour voir leur effets !
Le mieux c'est d'avoir un son quand on lance l'objet donc on va utiliser celui déjà configuré dans le script qui correspond parfaitement.
Allez voir l'action "absorb1" pour plus de détails.

Donc maintenant on à dans notre séquence :
Code:
"BOMBE" => ["STEP_FORWARD","absorb1","BOMBE_LANCEE","RESET"],
Maintenant faut lui dire de jouer l'animation et d'afficher les dégâts, et ca sera fini pour le paramétrage de la séquence.
Donc on voit que dans toute les animations on retrouve ce fameux : "DAMAGE_ANIM_WAIT". C'est lui qui va afficher l'animation et les dégâts et surtout attendre que l'animation aie fini de s'afficher pour continuer la séquence. Allez voir du coté des actions pour voir comment ca marche !
Maintenant on à ca :
Code:
"BOMBE" => ["STEP_FORWARD","absorb1","BOMBE_LANCEE","DAMAGE_ANIM_WAIT","RESET"],

On à presque fini notre séquence ! En effet la il va lancer la bombe et afficher les dégâts et l'animation tout de suite0. De plus à chaque fois que vous utilisez une séquence qui comprend un affichage de dégâts il faut impérativement qu'elle se finisse par : "Can Collapse" sans ca le sort ou l'objet ou l'attaque ne pourra pas tuer la cible même si les HP arrivent à 0.

Pour faire attendre un certain nombre de frames c'est pas compliqué suffit de mettre votre nombre entre guillemets et c'est bon !

Code:
"BOMBE" => ["STEP_FORWARD","absorb1","BOMBE_LANCEE","12","DAMAGE_ANIM_WAIT","Can Collapse","RESET"],

Question du public : STOP ! Comment on peut savoir le nombre de frames a attendre ?!
Vous ne pouvez pas ! Faudra faire ca au feeling c'est à vous de tester pour voir quel nombre correspond le mieux (vous inquiétez pas c'est assez rapide généralement)


Choisir quand exécuter la séquence crée : EXECUTION
Donc on va voir dans la troisième partie et cherchez ce bout de code :
Code:
class Item
 #--------------------------------------------------------------------------
 # ++ Item ID Sequence Assignment
 #--------------------------------------------------------------------------
  # Assign an Item ID from the Database to execute a defined Action Sequence.
  # Only Action Sequence keys can be assigned.  ANIME keys cannot
  # be directly assigned here.
  #
  # Notetag: <action: key>
  def base_action
    case @id
    when 1 # Item ID
      return "ITEM_USE" # Action Sequence Key
    end
    # Default Action Sequence for unassigned Item IDs.
    return "ITEM_USE"
  end
On retrouve notre fameuse méthode base_action
Elle marche de la même facon que celle qu'on à déjà vu donc imaginons que les objets 25 et 26 sont des bombes. Le code sera : ( vous pouvez trouver !)

Spoiler:
Code:
class Item
 #--------------------------------------------------------------------------
 # ++ Item ID Sequence Assignment
 #--------------------------------------------------------------------------
  # Assign an Item ID from the Database to execute a defined Action Sequence.
  # Only Action Sequence keys can be assigned.  ANIME keys cannot
  # be directly assigned here.
  #
  # Notetag: <action: key>
  def base_action
    case @id
    when 1 # Item ID
      return "ITEM_USE" # Action Sequence Key
  when 25,26
      return "BOMBE"
    end
    # Default Action Sequence for unassigned Item IDs.
    return "ITEM_USE"
  end

Et voila vous avez votre animation de bombe !

Question du public : Euh j'ai testé ton code et tout, mais il affiche l'arme pas la bombe.. WTF ?
Ah il reste une petite étape dans cette création d'animation. Par défaut si on lui indique rien le SBS prend en compte l'icone de l'arme.
Juste en dessous vous avez :
Code:
#--------------------------------------------------------------------------
 # ++ Item Flying Graphic Settings
 #--------------------------------------------------------------------------
 # Allows use of a seperate throwing weapon graphic besides the one assigned
 # from Iconset.png.
 #
 # Flying Graphics can only be utilized through use of Moving Animation
 # hashes.
 #
 # return "001-Weapon01" <- Weapon image file name.  If "", none is used.
 #                          File must be in the .Graphics/Characters folder
 #                          of your project.
 #
 # Notetag: <flygraphic: key>
  def flying_graphic
    case @id
    when 1
      return ""
    end
    # Default throwing skill graphic for unassigned Weapon IDs.
    return ""
  end
end
Si on à nos deux bombes qui ont pour ID 25 et 26 il faut mettre :
Code:
#--------------------------------------------------------------------------
 # ++ Item Flying Graphic Settings
 #--------------------------------------------------------------------------
 # Allows use of a seperate throwing weapon graphic besides the one assigned
 # from Iconset.png.
 #
 # Flying Graphics can only be utilized through use of Moving Animation
 # hashes.
 #
 # return "001-Weapon01" <- Weapon image file name.  If "", none is used.
 #                          File must be in the .Graphics/Characters folder
 #                          of your project.
 #
 # Notetag: <flygraphic: key>
  def flying_graphic
    case @id
    when 1
      return ""
    when 25,26
      return "icon"
    end
    # Default throwing skill graphic for unassigned Weapon IDs.
    return ""
  end
end

Si vous mettez "icon", ca retournera l'icone dans la BBD. Si vous voulez utiliser un fichier à part il suffit de le mettre dans le dossier Graphics/Characters de votre jeu et d'indiquer le nom dans le script. Et voila ca marche vous avez votre animation que vous pouvez attribuer à n'importe quel objet/sort/arme =)

J'espére que vous avez compris comment marchais le SBS et ses animations. Et que j'ai été assez claire, si vous avec des questions sur les animations n'hésitez pas à les poser !
Coco'
Coco'
Staffeux retraité

Nombre de messages : 6577
Age : 26
Localisation : Nord/Douai
Distinction : EL DICTATOR COCO'
Coco-Dieu en puissance

Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste. Magikarpe Grand gourou suppléant de la secte des MAGIKARP
Leader charismatique des 2beStaffieux

N°1 du forum
Président, vice-présidents et membres honoraires de la cour suprême du forum
Président de l'association des grosses distinctions CMB
Date d'inscription : 02/07/2008
https://www.rpgmakervx-fr.com

Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste. Empty Re: Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste.

le Lun 2 Aoû 2010 - 19:14
Ouah, sympa (et énorme) le tuto' :O

Bravo et merci Blocky' :p
Dudu'
Dudu'
Staffeux retraité

Nombre de messages : 2060
Age : 28
Distinction : Apprenti KGB-boy en avenir
[Coco' Smile]
Hamsterphile de service ^^
[Balby' le Fake]
Grand prof de la MA
[Skillo]
Ce grand programmateur, mon coeur, ma vie ! [Hamu']
Date d'inscription : 22/06/2009

Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste. Empty Re: Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste.

le Lun 2 Aoû 2010 - 22:35
sublime tuto
bien jouer merci (pour les autre perso je l'utilise pas le sbs^^)
j'imagine meme pas le temps que tu as du passé à le faire ce tuto
Blockade
Blockade
Membre

Nombre de messages : 194
Age : 27
Distinction : aucune
Date d'inscription : 06/09/2008

Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste. Empty Re: Introduction à la création d'animation de SBS : Créer une animation de bombe réaliste.

le Lun 2 Aoû 2010 - 22:40
j'imagine meme pas le temps que tu as du passé à le faire ce tuto
3 heures d'affilé + 30 minutes pour la relecture xD Mais bon ca me plaisais de faire ca, et j'espére que les gens vont comprendre un peu mieux comment utiliser le script qui est dans 90 % des projets !
Peut être que prochainement, en complément de celui la, je ferais un tuto sur comment placer ces animations sur le terrain et décaler l'affichage des dégâts et l'animation (genre on joue l'animation, puis au plein milieu de l'anim des dégâts..)
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum