Détrompe-toi, Condor. Depuis l'arrivée de Mafia World Editor (cherchez sur Google, il doit bien rester un site actif où le télécharger), c'est franchement facile. Je l'utilisais justement pour ça et pour supprimer des collisions. Par contre il ne permet pas de modifier les scripts donc il faut ouvrir le
Scene2.bin avec cet éditeur, y rajouter les armatures qu'on veut, puis le fermer et le réouvrir avec un éditeur de scripts. Moi j'utilise SCn2 Tractor de zibob32, difficilement trouvable depuis la disparition de certains sites russes (j'ai pu le trouver dans Google sur ce qui semble être le successeur du site russe « Palermo Club » mais à télécharger à vos risques et périls). Très utile pour supprimer en masse des plaquils, des armatures et des acteurs.
catala a écrit:
Q1. Comment fait on marcher la commande emit_particle au niveau de la bouche d'un mec ?
Q2. Comment scripter un mec qui ouvre son paquet, va fumer, puis fume pendant 2 minutes, écrase sa clope, attend 3 minutes et reprend son paquet, et surtout comment faire apparaître ledit paquet de clope quand celui ci le sort ?
Q3. Peut-on faire apparaître des personnages comme ça, d'un coup ?
Je vais répondre à ces questions par un script général. J'espère que tu pourras le comprendre (du moins son principe) en lisant les commentaires. Personnellement, j'ai appris ce que je sais des scripts comme ça, principalement avec les exemples de Condor. S'il y a un soucis, n'hésite pas à demander.
Le script ne fera pas exactement ce que tu veux (à toi de chercher les animations). Il contient aussi des notions qui pourront te servir par la suite (événements, par exemple) et que j'utilise ici pour faire un petit rappel des notions de script.
Quand on manipule des acteurs humains (des ennemis, par exemple) dans Mafia, il est pratique et souvent nécessaire d'utiliser deux scripts :
- Le script de l'acteur humain qui contiendra les actions que cet acteur devra effectuer. Ces actions seront disposées en blocs de lignes entre lesquels tu sauteras pour que l'acteur réalise une séquence d'actions.
- Un script de contrôle (« Other » dans BScriptView) depuis lequel tu guideras le passage d'un bloc à l'autre dans le script de l'humain.
Voir les scripts détaillés ci-après. Ce que tu dois chercher dedans pour répondre à tes questions :
Q1. C'est du cou que doit sortir la fumée.
Q2. Pour faire apparaître et disparaître une armature (le paquet, la cigarette), c'est avec la commande Frm_SetOn.
Q3. Si tu utilises les scripts ci-dessous et que tu places l'armature de l'acteur humain aux coordonnées voulues, il sera activé puis rendu visible (il « apparaîtra » à ces coordonnées).
Code:
// Script de l'acteur humain « Ennemi » :
// L'ennemi est aveugle (il ne voit pas ses ennemis et ne les attaque donc pas).
Enemy_Vidim 0
Dim_Act 1
// Déclaration de l'acteur courant (« Ennemi »).
FindActor 0
Dim_Frm 2
// Déclaration du cou de l'armature (modèle) de l'acteur « Ennemi ».
FindFrame 0, "Ennemi.Neck"
// Déclaration de l'armature de la cigarette à placer dans la main de « Ennemi ». Dans Mafia World Editor, après avoir créé l'armature, tu dois changer certains paramètres :
// - Armature-mère (« Parent ») : Ennemi.r_hand
// - Position 1 (x ; y ; z) : 0.057577 ; -0.052022 ; 0.055207 (c'est la position par rapport au centre de l'armature-mère).
// - Rotation (x ; y ; z) : -105.449585 ; -124.73806 ; 54.173775
// - Position 2 : la même que la position 1 de l'armature « Ennemi ».
// - Modèle : 2cigaro.i3d
FindFrame 1, "Cigarette"
Dim_Flt 1
// L'armature de l'acteur courant (« Ennemi ») est invisible (donc tu ne vois pas l'ennemi dans le jeu).
Frm_SetOn -1, 0
// Désactivation de l'acteur courant (à activer depuis le script de contrôle).
Act_SetState -1, Inactive
// Après activation, l'armature de l'acteur courant (« Ennemi ») devient visible.
Frm_SetOn -1, 1
// L'ennemi s'en fume une. La seule façon de sortir des accolades (qui contient une boucle infinie) est d'utiliser un événement (voir plus bas) qui brise les accolades ("Down" indique de continuer le script en-dessous des accolades).
{ Down
Label BFAFumante
Enemy_PlayAnim "KurakLoop.i3d"
Wait 5000
Enemy_PlayAnim "KurakPotahnuti.i3d", 0
Let Flt[0] = Flt[0] - 83
Wait Flt[0]
// La fumée sort de la bouche (enfin... elle part du cou).
EmitParticle 0, 25
GoTo BFAFumante
}
// La cigarette disparait (il suffit de rendre son armature invisible).
Frm_SetOn 1, 0
Enemy_StopAnim
// À la sortie des accolades, l'ennemi devient agressif (il voit ses ennemis).
Enemy_Vidim 1
// Boucle fermée d'attente (infinie). C'est la fin du script et ça évite de lire l'événement plus bas.
Label BFA
Wait 86400000
GoTo BFA
// Événement permettant de sortir des accolades. Il est enclenché depuis le script de contrôle. Au passage on efface la mémoire de l'acteur courant et on le force à suivre les nouvelles instructions qu'on lui donne dans la suite du script. C'est utile quand l'ennemi passe d'une action à l'autre, par exemple d'un état agressif (Enemy_Vidim 1) à neutre (Enemy_Vidim 0). Sans ça, l'acteur reste parfois bloqué dans son ancienne action.
Event 1
Enemy_BrainWash
Enemy_ActionsClear
Enemy_ForceScript 0
Event_Use_CB 1
Return
Code:
// Script de contrôle :
Dim_Act 1
FindActor 0, "Ennemi"
// Active l'ennemi et le rend visible (voir le script de l'ennemi pour ce dernier point).
Act_SetState 0, Active
// Arrête de fumer et devient agressif.
SetEvent 0, 1, -1
catala a écrit:
Comment lier proprement à un perso un objet [...] ?
Il te faut deux armatures identiques de la trompette : une dans la main de l'acteur humain (comme avec la cigarette ci-dessus) et une dans l'environnement (armature-mère : Primary sector ; aux coordonnées que tu choisis). Puis tu dois jouer avec les animations et la commande
Frm_SetOn pour faire disparaître l'armature de l'environnement et faire apparaître celle dans la main au moment où le personnage empoigne la trompette dans l'animation.
catala a écrit:
Peut-on les faire se battre entre eux ?
Pour que deux ennemis se battent entre eux, ils doivent avoir des IA différentes, ce que tu ne peux pas modifier avec BSV (enfin si mais c'est pas pratique). DC||ED le fait mais il n'est pas stable, tu risques de corrompre tes fichiers
Scene2.bin. Avec SCn2 Tractor, tu peux modifier les « Settings » d'un acteur humain (onglet dans le fenêtre des scripts).
Une IA (ou comportement) de 16 est un ennemi classique. Il se bat contre le joueur et tes partenaires (Paulie, Sam, etc.) avec une IA de 2. Donc dans ce cas, tu as d'un côté des ennemis, de l'autre des amis. Si tu veux des ennemis des deux côtés, alors c'est 16 et 32 (justiciers). Le problème c'est qu'ils attaquent en priorité le joueur avant de s'entretuer (sauf si le joueur ne dégaine pas d'arme et reste pacifique). Pour plus de détails,voir le
tableau de Condor.
Condor a écrit:
Mais en parlant d'accolades, c'est une bonne idée que de prévoir que, à la mort du personnage, celui-ci perde l'objet des mains avec la commande Create_PhysicalObject ou un truc du genre (de souvenir).
Si l'objet a comme armature-mère la main du personnage (ou n'importe quelle partie du corps), alors un objet dynamique est créé automatiquement lors de la mort du type.