Imladris production
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Imladris production

Le forum français de création de cartes et de mods pour Bataille pour la Terre du Milieu
 
AccueilRechercherDernières imagesS'enregistrerConnexion
Le deal à ne pas rater :
Cartes Pokémon 151 : où trouver le coffret Collection Alakazam-ex ?
Voir le deal

 

 La création de pouvoir

Aller en bas 
AuteurMessage
cdd59554
Admin
cdd59554


Nombre de messages : 7235
Age : 31
Location : J'aime les abricots
Add-On : Oui
Date d'inscription : 16/01/2008

La création de pouvoir Empty
MessageSujet: La création de pouvoir   La création de pouvoir Icon_minitimeSam 26 Juil - 13:31

La création de pouvoirs


Ce tuto va vous permettre d'apprendre à créer un nouveau pouvoir spécial de A à Z pour le mettre à une unité.
Normalement à la fin du tuto si vous avez tout comprit vous pourrez créer n'importe quel type de pouvoir allant du simple maître d'arme jusqu'à la boule de feu géante qui fait une grosse explosion et qui fait apparaitre le balrog quand elle explose avec 10 grosses tornades autour de lui (sisi je vous jure Twisted Evil ).
Si vous avez des questions, des remarques ou des suggestions d'améliorations n'hésitez pas à nous les faire partager dans la discution prevu à cet effet.
Avant d'entrer dans le vif du sujet, une petite introduction pour bien comprendre...

I / Les choses nécessaires à la création d'un pouvoir :

il y en a beaucoup (je ne vais pas vous le cacher) et en fait ca regroupe au moins la moitié de l'ini en voici une liste qui fera l'objet des differents chapitres du tuto :
- Il faut tout d'abord un SpecialPower qui est véritablement le pilier du pouvoir car c'est grâce à lui que l'on donne le temps de rechargement par exemple.
- Il faut aussi un ou plusieurs modules dans l'Object à qui vous mettez ce pouvoir qui se chargeront de regrouper la plupart des effets du pouvoirs et bien souvent pour faire correspondre le pouvoir à une animation (meme si pour ça il y a d'autres techniques ).
- On peut aussi utiliser un CommandButton si vous voulez que le pouvoir soit visible dans le palantir, mais il n'est pas obligatoire si c'est un pouvoir passif, le seul hic c'est que le joueur ne pourra pas deviner l'existance du pouvoir. Et qui dit CommandButton dit aussi CommandSet , c'est la liste de tout les CommandButton d'un Object.
- Ensuite il faut un Upgrade si vous voulez que le pouvoir se débloque a un autre niveau que le niveau 1, et il faudra integrer l'Upgrade dans l'ExperienceLevel de l'Object.
- Puis si vous vouler des effets spéciaux il faudra ajouter une FXList qui regroupe des effets visuels, sonores et certains effets de caméra (comme les secousses).
- Pour les modifications de la caractéristique d'un Object (que ce soit bonus ou malus) il faudra ajouter un AttributeModifier.
- Pour tout les dégats infligé il faudra utiliser un Weapon.
- Pour toutes les invocations ou la plupart des créations d'objets il faudra utiliser un ObjectCreationList (j'abregerai OCL ).
- Il faut souvent aussi des autres Object (par exemple pour les projectiles ou simplement pour les OCL).

Bien sur vous ne serez pas obliger de mettre tout ca (sauf si vous voulez faire la boule de feu qui invoque le balrog plus 10 tornades Smile ).

A / Faire un pouvoir dans l'ini pour faire un mod :

Dans l'ini il faudra respecter un minimum les différents fichiers car leur chargement se fait dans un ordre bien précit (pour faire en sorte de charger les CommandButton avant le CommandSet par exemple si l'ordi chargeait d'abord le commandSet il verait plein de commandButton mais comme ils n'auraient pas encore été chargé l'ordi vous aurait affiché un joli game crash).
Si vous etes curieux allez voir l'ordre de chargement dans subsystemlegend.ini .
Tout ca pour dire qu'il faut respecter les fichiers mais si vous avez du mal a vous y retrouver dans 10 fichiers différents vous pouvez tout mettre dans le meme fichier de l'object à condition de respecter l'ordre (évoqué dans la partie du map.ini), néanmoins c'est déconseillé si vous voulez faire un gros mod car ça devient vite le bazar.
Liste des fichiers dans lesquels il faut placer :
- les SpecialPower : dans specialpower.ini ( ou createaherospecialpowers.ini pour les héros créés )
- les Upgrade : dans upgrade.ini ( ou createaheroupgrades.inc pour les héros créés )
- les ExperienceLevel : dans experiencelevels.ini sauf pour les héros crées où c'est experiencelevels_createahero.inc
- les Object : n'importe où dans data\ini\object\... (vous pouvez aussi créer vos propres dossiers et fichier dedans)
- les modules de pouvoirs : à placer dans l'Object qui va utiliser le pouvoir (ou dans createaheropowers.inc pour les héros créés)
- les CommandButton : dans commandbutton.ini
- les CommandSet : dans commandset.ini
- les AttributeModifier : dans attributemodifier.ini
- les OCL : dans objectcreationlist.ini
- les Weapon : dans weapon.ini
- les FXParticleSystem : dans fxparticlesystem.ini
- les FXList : dans fxlist.ini
- les AudioEvent : dans voice.ini ou dans soundeffects.ini (si possible les voix dans voice et les sons ou bruitage dans soundeffect mais si vous vous tromper ca n'a aucune conséquences sur le jeu, il faut juste que les sons soient dans un des 2)
- les MappedImage : dans n'importe où dans data\ini\mappedimages\aptimages\... et si possible dans le fichier qui vous semble le plus logique (mais de toute facon ca n'influe pas sur le jeu si vous vous tromper de fichier, seulement sur la lisibilité de votre ini chéri), vous pouvez meme créer un nouveau fichier qui contient vos nouvelle images de bouton.

Je le redit vous ne serez pas obliger de tout utiliser car la plupart seront deja créés.
Tout les termes seront bien sur définit par la suite.
Voila ça paraissait quand même évident mais au moins c'est dit !

B / Faire un pouvoir dans le map.ini pour une carte :

Le probleme du map.ini c'est qu'il n'y à qu'un seul fichier et donc il faut tout mettre dedans et comme je l'ai dit précédemment si vous ne respectez pas un ordre assez précit ca risque de foiré (mais pas tout le temps bizarrement scratch ).
Aussi certains aspects du modding sont assez limité car soit le jeu ne prend pas en compte certaines modifications, soit le jeu vous empeche de les créer comme c'est le cas pour les modification ou création de CommandButton : le changement ou l'apparition de l'image n'est pas prit en compte, pour les AudioEvent autrement dit les sons il est impossible d'en crée ou de les modifier, l'ExperienceLevel n'est que très peu modifiable juste le necéssaire pour ajouter des upgrades (pas la peine d'essayer de changer les points d'experience requis sauf si vous aimez les game crash bien entendu ok! notez quand même que j'ai trouvé une astuce pour pouvoir modifier les points d'expérience indirectement mais en tout cas impossible de créer de nouveaux expérienceLevel ), pour tout le reste vous pouvez modifier/créer à volonté (enfin à quelques autres exceptions près).
L'autre probleme, c'est qu'on est obliger de se servir dans les textures ou les models et animations du jeu et il n'y a pas moyen en importer d'autres que vous avez créé par exemple.
Enfin dans le map.ini on ne crée pas et on ne modifie pas un module comme va et vient sinon le jeu vous sortira un game crash . Ca a été déjà dit et je le redit :
- pour supprimer un module il faut utiliser :
Code:
RemoveModule NomDuModuleASupprimer

- pour ajouter un module il faut utiliser :
Code:
AddModule

; copier normalement le module à ajouter.

End ; End supplémentaire (à ne pas oublier) à cause du AddModule

- pour remplacer un module il faut utiliser :
Code:
ReplaceModule NomDuModuleARemplacer

; copier le module qui remplacera l'autre

End ; End supplémentaire (à ne pas oublier) à cause du ReplaceModule
(remplacer un module ca revient en fait à faire RemoveModule suivit d'un AddModule)

Je rappelle qu'un module entier ça commence à Behavior ou Draw ou Body et ca se termine au End correspondant (car dans les modules Draw surtout il y a plein d'autres paragraphes qui necéssitent des End a l'intérieur même du module).
Par la suite du tuto, je ne mettrai pas les AddModule ou ReplaceModule (c'est à vous de les ajouter en fonction de vos besoins).

Pour l'ordre à respecter vous faites comme vous voulez à condition de ne pas appeller quelque chose qui n'as pas encore été définit avant.
Voici un ordre tout à fait acceptable pour un pouvoir que vous referiez de A à Z :

- Upgrade
- FXParticleSystem
- FXList
- AttributeModifier
- Object qui sont invoqués
- OCL
- ExperienceLevel
- Object qui sont utilisés en temps que projectiles pour le weapon
- Weapon
- SpecialPower
- MappedImage
- CommandButton
- CommandSet
- Object qui bénéficie du pouvoir avec les modules

C'est juste un exemple (vous n'êtes pas obligé de le suivre à la lettre surtout que bien souvent la plupart sont déja créés).

Bien passons maintenant aux choses sérieuses...



Dernière édition par cdd59554 le Mer 14 Jan - 19:16, édité 1 fois
Revenir en haut Aller en bas
cdd59554
Admin
cdd59554


Nombre de messages : 7235
Age : 31
Location : J'aime les abricots
Add-On : Oui
Date d'inscription : 16/01/2008

La création de pouvoir Empty
MessageSujet: Re: La création de pouvoir   La création de pouvoir Icon_minitimeSam 26 Juil - 13:34

II / Créer un pouvoir :

Comme je l'ai dit il faut beaucoup de chose pour faire un pouvoir et chacune a son importance dans la réalisation, alors ne perdons pas une seule seconde car je doit tout vous présenter:

A / Le SpecialPower :

Il va se charger entre autre de definir le type de pouvoir en général, de choisir le temps de rechargement du pouvoir, choisir la taille du curseur, le filtre d'objet sur lequel le pouvoir peut etre lancé, le son lorsque le pouvoir est lancé, etc...

Donc voila comment on le crée :
Code:
SpecialPower NomDuSpecialPower

; ici on met toutes les options

End
Voilà un SpecialPower plutot vide, comme c'est écrit maintenant il faut le remplir avec quelques options que voici :
  • Enum = ???
    Ce truc sert juste à dire au jeu de quel type de pouvoir il s'agit, si vous ne le mettez pas votre pouvoir risque de ne pas fonctionner, il est donc quasi-obligatoire. Il suffit donc de juste mettre cette ligne en remplacant ??? par l'un des termes suivant :

    • SPECIAL_AT_VISIBLE_OBJECT si il faut viser une cible pour votre pouvoir (ex : attaque faucon, lame de morgul).
    • SPECIAL_GENERAL_TARGETLESS si il n'y a pas besoin de viser de cible en particulier (ex : mot de mort, restoration, maitre d'arme, tremblement de terre).

    Logiquement avec ces 2 la vous pouvez faire pratiquement tout ce que vous voulez car il en existe des centaines mais bon en voila d'autres (juste au cas ou ):

    • SPECIAL_ARROW_STORM pour tout ce qui est pluie de flèche (normalement ca devrait aussi fonctionner avec SPECIAL_GENERAL_TARGETLESS mais ça reste à vérifier).
    • SPECIAL_SUMMON_ALLIES pour des invocations (meme si SPECIAL_GENERAL_TARGETLESS convient parfaitement).
    • SPECIAL_TOGGLE_MOUNTED pour monter ou descendre d'une monture (ça peut aussi bien être sur un cheval que sur une monture aillée par exemple) et encore une fois mettre SPECIAL_GENERAL_TARGETLESS à la place ne pose aucun problème car il n'y a pas besoin de viser de cible pour monter à cheval ( sauf si vous vous amusez à faire un pouvoir où il faut viser un cheval pour monter dessus...).

    Tout ca pour dire que la plupart des Enum que vous verez dans les SpecialPower de l'ini sont généralement remplaçable par SPECIAL_GENERAL_TARGETLESS ou SPECIAL_AT_VISIBLE_OBJECT.


  • ReloadTime = ???
    Ca sert juste a dire le temps de rechargement du pouvoir en millisecondes, (ex: mettez ReloadTime = 300000 pour un rechargement en 5 minutes ) si vous ne mettez pas cette ligne le jeu fait comme si vous aviez mis un rechargement de environ 1 seconde.


  • RadiusCursorRadius = ???
    Ca c'est la taille du rayon du curseur avec une image quand vous faite une invocation ou un pouvoir dans une zone par exemple, par contre ça n'a aucun effet sur le pouvoir, c'est juste la taille du curseur quant ç l'image elle est choisie dans le commandButton. Je vous conseille le faire correspondre un minimum avec la taille de l'invocation où avec la zone des dégat.
    Pour vous faire une idée : RadiusCursorRadius = 300 c'est la taille du tremblement de terre


  • InitiateAtLocationSound = ???
    Ca c'est pour jouer un son à l'endroit où vous avez placé le curseur quand le pouvoir se déchenche mais seulement pour les curseurs de zone (quand vous avez utilisé RadiusCursorRadius)
    A la place de ??? vous mettez un AudioEvent (ex : InitiateAtLocationSound = ThunderStrikesStereo ca va jouer le son d'un éclair au milieu de la zone quand le pouvoir sera lancé)
    Remarque : Il y a d'autres façons d'integrer un son dans votre pouvoir ( et le mettre dans le SpecialPower n'est pas une obligation).


  • InitiateSound = ???
    Cette fois ca lance un son pile quand le pouvoir se déclenche mais sur le lanceur, donc celui la fonctionne normalement dans tout les cas.
    Pareil qu'avant, vous mettez un AudioEvent à la place de ???


  • Flags = ??? ??? ???
    Cette option permet d'ajouter des flags (drapeaux en anglais) au SpecialPower en particulier pour les pouvoirs qui doivent etre placé quelque part (donc généralement avec RadiusCursorRadius, mais pas toujours).
    Comprenez le dans le sens d'options supplémentaires. Chaque flag est séparé par un espace (c'est pour ça que j'ai mis plusieurs ??? séparés et vous verrez cela souvent)
    Vous pouvez en mettre un ou plusieurs, en voici une liste des principaux:

    • WATER_OK pour autoriser à lancer le pouvoir dans l'eau.
    • LIMIT_DISTANCE pour empêchêr de lancer le pouvoir trop loin du lanceur (ça évite de placer le pouvoir à l'autre bout de la carte) il faudra ajouter une options supplémentaire après (MaxCastRange).
    • NO_FORBIDDEN_OBJECTS pour empêcher de lancer le pouvoir quand le pouvoir veut etre lancé pret d'un certain type d'Object (pour éviter d'invoquer en plein milieu d'un batiment par exemple), il faudra ajouter 2 options supplémentaires si vous utilisez ce flag (ForbiddenObjectFilter et ForbiddenObjectRange).
    • NEEDS_OBJECT_FILTER pour empêcher de lancer un pouvoir si il n'y a pas un certain type d'unité dans la zone, il faudra ajouté une option ensuite (ObjectFilter)
      Voila c'est tout pour les principaux flags.


  • ObjectFilter = ???
    Ca sert quand vous avez mis SPECIAL_AT_VISIBLE_OBJECT (ou un autre similaire) à déterminer les types de cibles sur lesquelles le pouvoir est utilisable si une cible ne correspond pas la souris ne tranformera symbole d'interdiction et vous ne pourrez évidemment pas lancer le pouvoir (imaginez vous déployer des tours de siege sur un soldat ça n'aurait aucun sens donc c'est pour cela qu'il y a ça).
    Par contre si vous avez mis SPECIAL_GENERAL_TARGETLESS (ou un équivalent) il faut au minimum une unité du filtre pour que le pouvoir soit activable sinon l'image du curseur restera rouge (exemple : pour éviter d'utiliser le pouvoir industrie dans le vide il faut au moins un batiment de ressource allié dans la zone). De plus vous devez avoir mis NEEDS_OBJECT_FILTER dans les flags pour que ça fonctionne dans une zone.
    A la place de ??? il vous suffit de mettre les types Object souhaité en les désignant par leur KindOf (Rappel : le KindOf est une ligne que tout les Object ont et qui définit certaines caractéristiques de l'Object) ou en mettant directement leur nom d'Object.
    Donc soit vous partez de tout les Object du jeu en mettant ALL , soit vous ne partez de rien en mettant NONE ou ANY et vous ajoutez des Object avec +TRUCDUKINDOF ou +NomDeLobjet et vous retirez des Object en mettant -TRUCDUKINDOF ou -NomDeLobjet .
    Vous pouvez aussi mettre ENEMIES et/ou ALLIES à la fin ou après le ALL[/color]/[color=green]NONE/ANY pour filtrer aussi des unités alliés ou ennemies (il y a aussi un filtre des unités ennemis/neutres/alliés dans le commandButton donc ce n'est pas grave si vous ne le mettez pas la même si il vaut mieux).
    Exemple :
    vous ne pourez utiliser que le pouvoir que sur l'infantrie ennemie :
    Code:
    ObjectFilter = ANY ENEMIES +INFANTRY

    vous ne pourrez utiliser le pouvoir à condition d'avoir n'importe quelle unité ou bâtiment allié (donc vous meme ou des unités de vos amis) :
    Code:
    ObjectFilter = ALL ALLIES
    vous ne pouvez utiliser le pouvoir que si vous visez que le Balrog
    Code:
    ObjectFilter = NONE +MordorBalrog

    vous ne pouvez viser que n'importe quel troll ou Rogash, sans prendre en compte ceux qui sont invoqué :
    Code:
    ObjectFilter = ANY +TROLL +AngmarRogash -SUMMONED

    Bon je pence que vous avez comprit maintenant.


  • MaxCastRange = ???
    C'est la distance maximale où le pouvoir est utilisable autour du lanceur au delà de cette distance le curseur sera une interdiction (si vous devez viser un object) ou alors il deviendra rouge (si c'est une zone)
    C'est en fait la portée du pouvoir.
    N'oubliez pas d'ajouter le flag LIMIT_DISTANCE si vous utilisez cette option.


  • ForbiddenObjectFilter = ???
  • ForbiddenObjectRange = ???
    Ces 2 options vont toujours ensemble et pour les utiliser il faut mettre le flag NO_FORBIDDEN_OBJECTS.
    ForbiddenObjectFilter c'est la liste des Object (de la même manière que ObjectFilter) qui empeche d'utiliser le pouvoir si ils sont dans la zone dont la taille est définie par ForbiddenObjectRange.
    Généralement il vaut mieux mettre la meme taille que RadiusCursorRadius à ForbiddenObjectRange si vous faites un pouvoir dans une zone.
    Exemple qui empeche d'utiliser le pouvoir si un bâtiment se trouve dans un rayon de 100 autour de l'épicentre du pouvoir:
    Code:
     ForbiddenObjectFilter = ANY +STRUCTURE
     ForbiddenObjectRange = 100

C'est à peu près tout pour le SpecialPower



Bon maintenant quelques exemples de SpecialPower complets ne feront pas de mal :

- Exemple d'un pouvoir qui se rechargerait en 1 minute et ou il faudrait viser une unité de cavalerie alliée, quand le pouvoir se serait déclenché on entendrait un cri de cheval :
Code:
SpecialPower SpecialPowerNumero1
   Enum = SPECIAL_AT_VISIBLE_OBJECT
   ReloadTime = 60000
   ObjectFilter = ANY +CAVALRY ALLIES
   InitiateSound = HorseWhinny
End

- Exemple d'un pouvoir qui se rechargerai en 1m30 où il faudrait viser une zone avec un curseur de rayon 100, pour utiliser le pouvoir il faudrait que le curseur soit a moins de 200 en distance de l'unité qui lance le pouvoir,qu'il y ai au moins 1 bataillon ennemi, mais qu'il n'y aie aucun batiment ni aucun héro dans la zone du curseur, et quand le pouvoir serait lancé on entendrait un cri de nazgul :
Code:
SpecialPower SpecialPowerNumero2
  Enum = SPECIAL_GENERAL_TARGETLESS
  ReloadTime = 90000
  RadiusCursorRadius = 100.0
  InitiateAtLocationSound = NazgulScreech
  Flags = LIMIT_DISTANCE NO_FORBIDDEN_OBJECTS NEEDS_OBJECT_FILTER
  MaxCastRange = 200
  ObjectFilter = ANY ENEMIES +HORDE
  ForbiddenObjectFilter = ANY +STRUCTURE +HERO
  ForbiddenObjectRange = 100.0
End

Vous voyez c'est simple comme bonjour il suffit d'ajouter bêtement toutes les options qu'on veut.

Revenir en haut Aller en bas
cdd59554
Admin
cdd59554


Nombre de messages : 7235
Age : 31
Location : J'aime les abricots
Add-On : Oui
Date d'inscription : 16/01/2008

La création de pouvoir Empty
MessageSujet: Re: La création de pouvoir   La création de pouvoir Icon_minitimeSam 26 Juil - 15:10

B / L'Upgrade et l'ExperienceLevel :

1/ L'Upgrade

Une Upgrade c'est en fait une amélioration, mais en fait c'est une amélioration qui ne fait rien toute seule car il faut l'associer à une unité via un module, en particulier pour nous les Upgrade vont servir à débloquer un pouvoir à un certain niveau par exemple.
Pour nous il n'y aura pas grand chose à mettre pour créer une Upgrade meme si il existe des dizaines d'options généralement on pourra se contenter de ça :
Code:
Upgrade NomDeLupgrade
   Type = OBJECT
End
En fait on crée juste l'Upgrade qui sera attribué à un Object.

Maintenant que l'Upgrade est crée il faut l'ajouter à l'ExperienceLevel.

2 / L'ExperienceLevel :

Pour un type d'Object donné il y a un ExperienceLevel par niveau donc si votre guerrier doit atteindre le niveau 10 il y aura 10 ExperienceLevel différent rien que pour lui.
Entre autre l'ExperienceLevel sert à definir le nombre de points d'expérience requis pour monter en niveau, le nombre de point d'experience gagné par l'ennemi quand il tue votre Object, les bonus de santé et de dégats, les effets speciaux quand votre Object gagne un niveau et bien sur les Upgrade gagné par l'Object quand il monte en niveau.
(Il y a encore d'autre choses mais c'est un peu, non pas hors sujet, mais hors tuto donc je ne les développerai pas.)

Voila comment on crée un ExperienceLevel :

Code:
ExperienceLevel NomDuExperienceLevel

;mettre ici toute les caractéristiques du niveau
   
End

Voici une liste des principales caractéristiques à mettre :
  • TargetNames = ??? ??? ???
    Ca sert à dire quels sont les Object qui sont affecté par cet ExperienceLevel. Il suffit de Remplacer les ??? par le nom de l'Object, si il y en a plusieurs vous pouvez les séparer par un espace.

  • Rank = ???
    C'est le numéro du niveau tout simplement.

  • RequiredExperience = ???
    C'est le nombre de points d'expérience requis pour atteindre ce niveau, plus le chiffre est élevé et plus il faudra tuer d'ennemis pour monter en niveau (pour le premier niveau mettez RequiredExperience = 1).

  • ExperienceAward = ???
    C'est le nombre de points d'expérience que gagne l'unité ennemi quand elle détruira votre Object à ce niveau.

  • Upgrades = ??? ??? ???
    C'est toutes les Upgrade gagnées par l'Object quand il atteind ce niveau, bien sur si il y en a plusieurs, vous séparez les noms d'Upgrade par un espace.
    (c'est surtout pour cette ligne que j'ai parlé des ExperienceLevel, le reste c'est un peu hors tuto mais ca pourra vous servir.)

  • AttributeModifiers = ??? ??? ???
    C'est tout les AttributeModifier qui s'appliquent à l'Object quand il gagne ce niveau (rappel : les AttributeModifier peuvent modifier n'importe quelle caractéristiques d'un Object), par exemple il peut ajouter de la vie et de l'attaque en plus quand l'Object gagne un niveau et bien d'autres choses encore que l'on vera dans le chapitre exclusivement dédié aux AttributeModifier.
    En tout cas vous pouvez faire gagner un ou plusieurs AttributeModifier par niveau. Si il y en a plusieurs , il suffit de séparer les noms par des espaces (comme d'hab).

  • LevelUpFx = FX: ???
    C'est les effets speciaux quand l'Object gagne un niveau. n'oubliez pas d'écrire FX: avant d'écrire le nom d'un FXList (exemple : LevelUpFX = FX:GandalfLevelUp1FX c'est le FX de tout les héro qui gagne un niveau).
    (les FX seront spécialement traités dans un futur chapitre pour créer les effets spéciaux les plus fous.)

  • LevelUpOCL = ???
    Ca n'est pas trop utilisé mais ça peut être bien quand même, ça permet de activer un OCL (un truc pour créer ou invoquer des Object) pile sur votre unité quand elle gagne un niveau. Pour ça il faut écrire le nom de l'OCL voulu.
    (Les OCL seront eux aussi étudiés dans un futur chapitre pour pouvoir faire apparaitre se que vous voulez comme vous le voulez).



Exemple : Dans cet exemple je donne aussi un Upgrade au niveau 1 car ca permettra de mieux gérer pour notre Object par la suite, car n'oubliez pas que les Upgrade vont servir à débloquer des pouvoirs dans notre cas.
Soit à un Object qu'on appelle Mon Object, il fait gagner 40 points d'XP au premier niveau et 60 au second quand il est tué, il a besoin de 200 points d'XP pour aller au niveau 2, de meme quand il arrive au niveau 2 il obtient le bonus de dégat et points de vie des héros normaux avec le meme FX de base, pour le fun un bataillon de soldat du gondor sera aussi invoqué en même temps à coté de lui.
Code:
Upgrade Upgrade_Niveau1
   Type = OBJECT
End

Upgrade Upgrade_Niveau2
   Type = OBJECT
End

ExperienceLevel ExpLevelDuNiveau1
   TargetNames = MonObject
   Rank = 1
   RequiredExperience = 1
   ExperienceAward = 40
   Upgrades = Upgrade_Niveau1
End

ExperienceLevel ExpLevelDuNiveau2
   TargetNames = MonObject
   Rank = 2
   RequiredExperience = 200
   ExperienceAward = 60
   Upgrades = Upgrade_Niveau2
   AttributeModifiers = HeroLevelUpDamage1
   LevelUpFx    = FX:GandalfLevelUp1FX
   LevelUpOCL = OCL_CreateAHeroHotWSpawnAllies_Level1
End

Bon la MonObject n'aurait que le niveau 2 au maximum mais après il suffit d'en ajouter des nouveaux...
Et puis on imagine que MonObject aura un pouvoir de débloqué au niveau1 grâce à l'Upgrade Upgrade_Niveau1 (meme si c'est pas obligatoire l'upgrade au 1er niveau) et qu'il en aura un autre débloqué au niveau 2 grâce à l'Upgrade Upgrade_Niveau2

Donc voila pour les Upgrade, passons maintenant au CommandButton...

Revenir en haut Aller en bas
cdd59554
Admin
cdd59554


Nombre de messages : 7235
Age : 31
Location : J'aime les abricots
Add-On : Oui
Date d'inscription : 16/01/2008

La création de pouvoir Empty
MessageSujet: Re: La création de pouvoir   La création de pouvoir Icon_minitimeMer 30 Juil - 12:12

C / Le CommandButton, les ButtonImages et le CommandSet :

1/ Le ButtonImage :

C'est simplement la petite image qui apparaîtra dans le palantir ou autour de l'objet pour le bouton, c'est une MappedImage (je ne fait que recopier les nom qu'on leur a donné) dans l'ini on les trouve dans data\ini\mappedimages\aptimages\... mais vous pourrez toujours chercher une image la dedans vous ne trouverez rien.
En fait une MappedImage est chargée de découper un morceau sur une plus grosse image qui regroupe plusieurs images et textures collée les unes aux autres. Vous trouverez les images dans les fichiers Textures.big , qui regroupe aussi toute les textures, vous pouvez les regarder si vous voulez.
Le bleu de fond n'est pas prit en compte dans l'image car il faut découper des carré (ou des rectangles) en fait c'est une couleur invisible pour le jeu.
En fin de compte voila comment on crée (ou on modifie) une MappedImage :
Code:

;Il faut d'abord le nom de l'image
  MappedImage ???
;Ensuite il faut le nom de la texture ou vous l'avez trouvée
  Texture = ???.tga
;Puis il faut la largeur et la hauteur de la texture
  TextureWidth = ???
  TextureHeight = ???
;Enfin il faut donner les coordonées pour le découpage
;dans l'ordre : gauche, haut, droite et bas
  Coords = Left:??? Top:??? Right:??? Bottom:???
  Status = NONE
End
Un petit exemple quand meme : c'est l'image du saut de gimli (qui existe deja, j'ai fait un copier-coller)
Code:
MappedImage HSGimliLeap
  Texture = HeroUI_032.tga
  TextureWidth = 256
  TextureHeight = 256
  Coords = Left:192 Top:128 Right:256 Bottom:192
  Status = NONE
End

Vous vous dites surement que c'est compliquer mais si vous voulez ajouter des images pour votre mod il faudra passer par la. Sinon la plupart des boutons d'image sont deja découpés il vous suffit de retrouver de nom du MappedImage correspondant.

2/ Le CommandButton :

C'est le bouton du pouvoir qui sera dans le palantir ou/et autour de l'Object à l'ecran
Il contiendra la plupart des options pour le bouton pour savoir ce qui se passera au moment ou vous cliquez dessus (comme déclencher le pouvoir ca serait pas mal).

Donc pour commencer voila comment on crée le CommandButton de pouvoir :

Code:
CommandButton NomDuCommandButton

; ici ajouter toute les caractéristiques du CommandButton

End

Voila maintenant on va faire comme c'est écrit on va ajouter des choses a notre bouton:
  • Command = ???
    Ca sert a savoir quel type de CommandButton il s'agit. La plupart du temps on mettra SPECIAL_POWER pour des pouvoirs mais pour certains pouvoirs ca ne suffit pas. C'est le cas des changements d'arme ou on mettra TOGGLE_WEAPONSET , meme si il est possible aussi de les faire avec SPECIAL_POWER. Pour certains pouvoir on pourrait utiliser FIRE_WEAPON pour utiliser un Weapon particulier pour l'attaque, mais on peut aussi le faire avec SPECIAL_POWER alors je ne le détaillerai pas. Par contre si vous voulez faire un pouvoir comme jet d'huile, vous avez du remarquer que le bouton changeait (la premiere fois on verse de l'huile, et la 2eme fois on met le feu) en fait le pouvoir utilise 2 CommandButton différents et pour ca il faut mettre SPECIAL_POWER_TOGGLE, ce qui nécessitera d'ajouter une caractéristique en plus au 1er CommandButton pour choisir le 2eme CommandButton (ToggleButtonName)


  • SpecialPower = ???
    Alors c'est surement la ligne a ne pas oublier car c'est la qu'il faut mettre le nom du SpecialPower (à la place des ??? bien entendu)


  • Options = ??? ??? ???
    Une ligne incontournable pour la plupart des pouvoir, ca ressemble un peu a la liste de flags des SpecialPower sauf que la c'est pour le bouton, donc il vous suffit d'ajouter les options les unes a coté des autres en les séparant par un espace si il y en a plusieurs (si vous n'avez pas besoin d'options du tout vous n'avez pas besoin de mettre cette ligne)
    Voici une liste des principales options pour les pouvoirs :
    • NONPRESSABLE si le bouton ne doit pas etre pressé (pour les capacités passives en fait)
    • OK_FOR_MULTI_SELECT OK_FOR_MULTI_EXECUTE c'est 2 options en fait, j'ai remarqué qu'elle étaient souvent mise ensemble alors on va faire pareil, ca sert a que si vous avez plusieurs Object du meme type de selectioné et que vous cliquez sur le bouton du pouvoir tout le monde utilisera le pouvoir, si vous ne mettez pas ces options un seul Object utilisera le pouvoir alors que tout le monde sera sélectionné.
    • MOUNTED_ONLY le pouvoir n'est utilisable que si l'Object est sur une monture (cheval ou tout autre chose).
    • UNMOUNTED_ONLY le pouvoir est utilisable que si l'Object n'est pas sur sa monture (donc si il est a pied).
    • NEED_TARGET_ENEMY_OBJECT vous devez viser une unité ennemi pour utiliser le pouvoir
    • NEED_TARGET_NEUTRAL_OBJECT vous devez visez une unité neutre pour utiliser le pouvoir
    • NEED_TARGET_ALLY_OBJECT vous devez viser une unité alliée pour utiliser le pouvoir
      (rappellez vous je vous avez dit que de mettre le filtre du SpecialPower n'était pas suffisant en fait le filtre du SpecialPower et celui la s'additionnent en quelque sorte mais il faut rester cohérent jusqu'au bout, si vous mettez par exemple ObjectFilter = ALL ALLIES dans le SpecialPower et que ici vous mettez seulement NEED_TARGET_ENEMY_OBJECT vous ne pourrez viser personne car une unités ne peut pas etre en meme temps amie et ennemie a la fois. Aussi la différence entre les 2 c'est que celui du CommandButton est obligatoire si vous devez visez un Object)
    • NEED_TARGET_POS vous devez viser une zone pour utiliser le pouvoir
    • CONTEXTMODE_COMMAND je sais pas encore vraiment a quoi ca sert la ferme mais des fois un pouvoir ne fonctionne pas et avec cette option il fonctionne.
    • NEED_UPGRADE il faut un Upgrade pour débloquer le pouvoir, il faudra ajouter une caractéristique en plus au bouton (NeededUpgrade)
    • TOGGLE_IMAGE_ON_WEAPONSET ca sert a changer l'image quand on cliquera sur le bouton, pour ca il y aura 2 images (ButtonImage) et si nécessaire 2 sons ( UnitSpecificSound), c'est surtout utilisé pour le switch d'arme ou pour monter/descendre, vous pouvez aussi mettre 2 fois la meme image mais 2 sons différents...
    • HIDE_WHILE_DISABLED ca sert à cacher le pouvoir quand il est déasactivé , pour les boutons autour de l'objet a l'écran, les boutons disparaissent et le cercle formé par les boutons est plus petit par contre c'est à éviter pour les boutons du palantir car ca laisse un trou et donc il y aura un emplacement noir.


  • ButtonImage = ??? ???
    C'est l'image du bouton, le jeu attend le nom d'un ou deux MappedImage (2 si vous avez mis l'option TOGGLE_IMAGE_ON_WEAPONSET et 1 seul si vous n'avez rien mis)
Revenir en haut Aller en bas
cdd59554
Admin
cdd59554


Nombre de messages : 7235
Age : 31
Location : J'aime les abricots
Add-On : Oui
Date d'inscription : 16/01/2008

La création de pouvoir Empty
MessageSujet: Re: La création de pouvoir   La création de pouvoir Icon_minitimeDim 10 Aoû - 11:09

2/ Le CommandButton (suite) :
  • RadiusCursorType = ???
    C'est L'image du curseur pour lancer un pouvoir dans une zone, vous devez mettre le nom d'un RadiusCursorTemplate dont vous trouverez la liste dans ingameui.ini (rien ne vous empeche de créer vos propres curseur) , n'oubliez pas que la taille a deja été choisie a dans le SpecialPower (avec l'option RadiusCursorRadius)


  • CursorName = ???
    C'est l'image du curseur quand vous devez viser une unité particuliere et que le pouvoir peut etre lancé. Vous devez mettre le nom d'un MouseCursor dont la liste se trouve dans mouse.ini, encore une fois vous pouvez aussi créer vos propres pointeurs de souris (dans le jeu c'est en général CursorName = Bombard ,c'est la petite étoile bleue)


  • InvalidCursorName = ???
    C'est l'image du curseur quand vous devez viser une unité particuliere mais quand le pouvoir ne peut pas etre lancé (car vous ne visez pas la bonne cible qui est interdite par les filtres par exemple). Encore une fois il faut mettre le nom d'un MouseCursor ( en général c'est InvalidCursorName = GenericInvalid , c'est le petit pointeur d'interdiction)


  • ButtonBorderType = ???
    Je sais pas vraiment a quoi ca sert la ferme (si vous le savez dites le), les valeurs possibles sont : ACTION, SYSTEM, UPGRADE, NONE et BUILD (mais de toute facon je sais pas a quoi ca sert No , car je n'ai vu aucun changement en changeant la valeur...)


  • UnitSpecificSound = ??? ???
    C'est le son de l'unité qui sera joué quand vous utiliserez le pouvoir, vous devez mettre le nom d'un AudioEvent (ou 2 si vous avez mis l'option TOGGLE_IMAGE_ON_WEAPONSET)


  • TextLabel = ???
    C'est le titre qui apparaitra dans l'infobulle du pouvoir (si vous ne mettez rien vous risquez d'avoir un MISSING:" à la place)
    Si vous voulez mettre un texte perso, soit vous etes dans l'ini et il faudra ajouter le texte dans lotr.csf normalement contenu dans le fichier French.big (dans le dossier lang). Le plus simple reste quand meme de mettre des textes deja existant dans le jeu
    Si vous etes dans un map.ini c'est beaucoup plus simple il vous suffit de mettre les nouveaux textes dans un fichier map.str


  • DescriptLabel = ???
    C'est le texte qui apparaitra en dessous du titre celui la n'est pas obligatoire (je veut juste dire que vous n'aurez pas de MISSING:" si ne le mettez pas), mais on risque de ne pas beaucoup comprendre à quoi sert le pouvoir sinon.


  • NeededUpgrade = ???
    Il suffit de mettre de nom de l'Upgrade qu'il faut obtenir pour pouvoir utiliser ce pouvoir. N'oubliez pas d'ajouter NEED_UPGRADE dans les options


  • InPalantir = ???
    Il suffit de mettre Yes ou No, pour savoir si le bouton doit apparaitre dans le palantir (par exemple si vous mettez InPalantir = Yes , le bouton apparaitra dans le palantir si il y a encore de la place bien sur)


  • Radial = ???
    La encore il suffit de mettre Yes ou No, si vous voulez que le bouton soit visible autour de l'Object à l'écran comme pour les batiments par exemple ( Sachez qu'en mettant DOZER dans le KindOf de l'objet tout les boutons qui devaient etre en Radial autour de l'Object se placent sur la droite de l'écran comme pour les batisseurs).


  • AutoAbility = ???
    Mettez Yes ou No pour dire si c'est un pouvoir qui peut etre utilisé tout seul par l'ordinateur. (si vous mettez Yes vous devrez mettre des modules en plus dans l'Object pour déterminer les conditions d'utilisation automatique du pouvoir)
    (Petit rappel : pour activer l'utilisation automatique d'un pouvoir il faut faire un clic droit sur le bouton du pouvoir, si ca fonctionne bien il devrait briller autour).


  • FlagsUsedForToggle = ???
    C'est le flag qui va se déactiver ou s'activer quand vous appuyerez sur le bouton.N'oubliez pas de mettre TOGGLE_IMAGE_ON_WEAPONSET dans les options et de mettre une 2eme image dans ButtonImage si vous utilisez cette commande.
    (exemple : FlagsUsedForToggle = MOUNTED ca va activer/désactiver le flag MOUNTED généralement pour mettre l'Object a cheval ou non ; un autre exemple : FlagsUsedForToggle = WEAPONSET_TOGGLE_1 c'est normalement pour switcher entre 2 WeaponSet (arc et épée par exemple), remarquez que vous pourrez utiliser ca dans le module Draw de l'Object pour choisir le model et les animations en fonction de si le flag est activé ou non. Vous pourrez aussi utiliser le flag pour choisir le WeaponSet dans l'Object, etc... )
    Apres ca va permettre d'activer ou désactiver certains pouvoir si l'Object est a cheval ou a pied, a l'arc ou a l'épée, etc...


  • WeaponSlot = ???
    Vous ne l'utiliserez presque jamais car on peut choisir le weapon dans les modules de l'Object et c'est mieux. Sinon ca permet de dire quel Weapon utiliser pour l'attaque mais il ne faut pas mettre directement le nom du Weapon, seulement si c'est le Weapon Principal ou Secondaire ou tertiaire et etc... qu'il faut débloquer. Pour savoir lequel c'est, il faut regarder dans le WeaponSet de l'Object est donc mettre soit PRIMARY , SECONDARY , TERTIARY , etc... (par exemple : WeaponSlot = SECONDARY ca va utiliser le 2eme Weapon du WeaponSet actuellement activé en fonction des flags ce qui fait que pour le meme bouton le pouvoir peut avoir des effets totalement différents selon que l'unité est à l'arc ou à l'épée par exemple)


  • DisableOnModelCondition = ???
    Il suffit de mettre un état de l'Object pour lequel le pouvoir est déactivé (par exemple DisableOnModelCondition = MOVING tant que votre Objet bouge le pouvoir sera inutilisable).


  • EnableOnModelCondition = ???
    Pareil sauf qu'il faut que le model soit sur cet état pour que le pouvoir soit utilisable (par exemple : EnableOnModelCondition = REALLYDAMAGED le pouvoir ne sera utilisable que quand votre Object sera presque mort (a condition bien sur d'avoir dit dans le module de vie a combien de vie votre object est considéré comme très endommagé)
    Vous avez du remarqué par exemple que de mettre Options = MOUNTED_ONLY c'est la meme chose que de mettre EnableOnModelCondition = MOUNTED )


  • ToggleButtonName = ???
    C'est a mettre si vous avez utilisé Command = SPECIAL_POWER_TOGGLE , ca sert a échanger ce CommandButton avec celui que vous mettrez a la place des ??? quand vous aurez pressé une fois le bouton, quand l'autre bouton aura lui aussi été pressé le 1er reviendra bien sur il faudra attendre qu'il se recharge pour le réutiliser.

Bon il existe encore des dizaines d'autre mais on ne les utilise pas beaucoup pour les pouvoirs.

Avec tout cas vous avez de quoi faire le bouton que voulez pour le pouvoir de vos rêves mais un CommandButton ne sert à rien tout seul (comme toute chose d'ailleurs) car il faut l'integrer au CommandSet.

3/ Le CommandSet

Le CommandSet c'est simplement la liste de tout les CommandButton d'un Object.
Voila comment on crée un CommandSet :

Code:
CommandSet NomDuCommandSet

1 = NomDu1erCommandButton
2 = NomDu2emeCommandButton
3 = NomDu3emeCommandButton
; etc...

End
Bon a mon avis c'est pas compliqué a comprendre, il suffit de mettre la place du bouton dans le CommandSet puis = suivi du nom du CommandButton.
Les 6 premiers boutons doivent etres réservé pour les place dans le palantir, le reste c'est bon pour le Radial ou les boutons invisibles

Pour attribuer un CommandSet à un Object il suffit de rajouter cette ligne à l'Object :

Code:
CommandSet = NomDuCommandSet

Voila c'est tout !

Revenir en haut Aller en bas
cdd59554
Admin
cdd59554


Nombre de messages : 7235
Age : 31
Location : J'aime les abricots
Add-On : Oui
Date d'inscription : 16/01/2008

La création de pouvoir Empty
MessageSujet: Re: La création de pouvoir   La création de pouvoir Icon_minitimeDim 10 Aoû - 11:10

D / Les modules dans l'Object :

J'espere que vous vous rapellez ce que c'est qu'un module :
Code:
Draw = TypeDeModule NomDuModule
   ;plein d'options
End
ou
Code:
Body = TypeDeModule NomDuModule
   ;plein d'options
End
ou
Code:
Behavior = TypeDeModule NomDuModule
   ;plein d'options
End
ou d'autres encore qu'on ne vera probablement pas dans ce tuto...

Je vais rapidement vous expliquer les 2 premiers Draw et Body comme ils sont moins important dans la création des pouvoirs mais ils ont leur role à jouer et on s'attardera sur le dernier, Behavior qui est le plus important.

  • Le premier Module Draw (en anglais ça veut dire dessiner) est comme son nom l'indique comment l'Object va apparaître à l'écran.
    Le principal type de module Draw que vous rencontrerez est W3DScriptedModelDraw qui sert à indiquer le model et les animation de l'Object ainsi que les FX à jouer selon ses états qui changent tout le temps (quand il marche, quand il attaque, quand il est sélectionné, quand il utilise un pouvoir, etc... ).
    Je ne vais pas vous expliquer comment fonctionne ce module (il faudrait un tuto complet), mais juste vous mettre ce que vous pourrez utiliser pour faire un pouvoir :

    Code:
    Draw = W3DScriptedModelDraw NomDuModule

    ModelConditionState = ??? ; mettre l'état de l'object
       ParticleSysBone = ??? ??? FollowBone:Yes ; des FX sur le model
       ; d'abord mettre le nom du bone (os) du squellette
       ; puis un FXParticleSystem qui va le suivre
    End

    AnimationState = ??? ??? ??? ; mettre un ou plusieur états de l'Object
       Animation
          AnimationName = ??? ; l'animation à jouer
          AnimationMode = ??? ; ONCE (une fois) ou LOOP (en boucle)
       End
       EnteringStateFX = ??? ;  FXList a joué en meme temps que l'animation
    End

    End ; du module


    Voila, le premier "paragraphe" sert normalement à déterminer le model mais nous on fait pas des models, on fait des pouvoirs et qui dit pouvoir dit forcement FX donc on se sert de ca pour determiner le FX qui va suivre un os (bone en anglais) du squellette lorsque le model sera dans un certains état.
    Pour la ligne :
    Code:
    ParticleSysBone = ??? ??? FollowBone:Yes
    Il faut mettre tout d'abord le nom de l'os (pour le trouver ya pas 50 solutions il faut regarder si ils ne sont pas deja donné, sinon il faut ouvrir avec un logiciel de modélisation le fichier_skl en général c'est le squellette qui contient tout le nom de tout les os, vous pouvez aussi ouvrir ce fichier avec le blocnote et normalement vous devriez reperer les noms facilement car c'est les seuls trucs a peu pres lisibles) ensuite mettez le nom d'un FXParticleSystem puis vous mettez FollowBone:Yes pour dire que le fx suive l'os, c'est utile pour faire des épées en feu ou de la lumiere au bout des batons magiques, etc...

    Le 2eme paragraphe sert véritablement à choisir l'animation en fonction de l'état de l'Object . AnimationName sert a determiner l'animation qui va etre jouer. AnimationMode sert a dire si l'animation doit etre jouée 1 seule fois avec ONCE (le plus courant) ou alors si elle est jouée en boucle avec LOOP (plus rare). Enfin EnteringStateFX va servir a jouer un FXList quand l'Object sera dans un certain état.

  • Le 2eme module est Body, il sert a déterminer la vie d'un Object.
    Là, il y a 3 types de modules à voir (mais il y en a d'autres modules Body que je ne détaillerai pas là car on en parlera dans un autre chapitre plus approprié), en fonction du type d'Object que vous avez vous devrez choisir entre l'un des 3 :

    Code:
    Body = ActiveBody NomDuModule
    ; quelques options
    End
    Ce type de module est utilisé pour les unités normales qui peuvent etre tuées.

    Code:
    Body = RespawnBody NomDuModule
    ; quelques options
    End
    Ce type là est utilisé pour les unités destinées à être réappelées à la forteresse, c'est a dire pour les héros généralement. Ensuite il faudra ajouter un autre module pour la résurection mais ça, ça n'a vraiment pas sa place dans le tuto ( pour info le module c'est Behavior = RespawnUpdate )

    Code:
    Body = StructureBody NomDuModule
    ; quelques options
    End
    Enfin celui la est pour les batiments ou les structures destructibles.

    Voila quelques options que vous pouvez ajouter :

    MaxHealth = ???
    Bon ca c'est plutot facile, vous mettez la santé du héro quand elle est à 100% à la place de mes ???.

    MaxHealthDamaged = ???
    La c'est le nombre de points de vie à partir duquel l'Object passe en l'état DAMAGED

    MaxHealthReallyDamaged = ???
    C'est le nombre de points de vie à partir duquel l'object est en l'état REALLYDAMAGED

    Ces 3 options là sont vraiment les seules "utiles" pour le tuto car grace à ca vous pourrez débloquer des pouvoirs ou des effets spéciaux en fonction de la santé de l'Object (mais sachez qu'il y a plein d'autres options à mettre dans le Body).

  • Passons maintenant aux modules Behavior (en anglais ca veut dire attitude/comportement) et ca va etre la partie la plus longue car il y a des dizaines (j'aurai tendence à dire une centaine) de types de modules Behavior différents mais seuls quelques un d'entre eux vont servir à faire des pouvoirs :
    Donc tout d'abord nous veront les modules qui servent pour les pouvoirs ensuite nous veront d'autres modules qui pourraient s'avérer utiles.
    Comme on va en voir un certain nombre je ne ferait pas d'exemple a part pour chaque module sauf si c'est vraiment nécessaire, de toute facon je ferait un récapitulatif de modules a la fin
    Quand il y a une option dont les effets sont douteux je le mettrai (du style : "je ne sais pas a quoi ca sert si vous savez prévenez moi... Smile " ).
Revenir en haut Aller en bas
cdd59554
Admin
cdd59554


Nombre de messages : 7235
Age : 31
Location : J'aime les abricots
Add-On : Oui
Date d'inscription : 16/01/2008

La création de pouvoir Empty
MessageSujet: Re: La création de pouvoir   La création de pouvoir Icon_minitimeJeu 21 Aoû - 10:25

1/ Les modules pour les pouvoirs : type SpecialPower

C'est des modules pour faire les pouvoir dont le nom fini souvent par SpecialPower au pire il est forcement dans le nom (c'est pour ca que je les appelle comme ça :) ). Si vous en mettez 1 par pouvoir ca va mais des que vous en avez mis plus que 2 de la liste ci dessous le jeu prendra en compte le premier module qu'il rencontrera et laissera tomber les autres pour éviter ca il faudra ajouter un autre module pour activer tout les modules SpecialPower en meme temps. Ce fameux module ActivateModuleSpecialPower est détaillé dans la partie 2/

Voici une liste de module assez utilisés avec des options qui leur conviennent, sachez que la liste des options n'est pas forcément complete, tout comme celle des différents modules :

a- SpecialPowerModule

Peut etre l'un des plus important dans la création d'un pouvoir car il y est très souvent vous comprendrez pourquoi en voyant a quoi il sert avec toute les options possibles :

Code:
Behavior = SpecialPowerModule NomDuModule
; Options
End

Voila les options acceptées :

  • SpecialPowerTemplate = ???
    C'est le nom du SpecialPower utilisé.

  • StartsPaused = ???
    Il faut mettre la valeur Yes ou No. Normalement il faut mettre Yes pour un pouvoir bloqué par une Upgrade et No pour un pouvoir disponible au départ.

  • UpdateModuleStartsAttack = ???
    Il faut mettre la valeur Yes ou No. Apparemment il faut mettre Yes si vous voulez utiliser un module supplementaire de type Update sinon mettez No.

  • InitiateSound = ???
    Mettez un AudioEvent qui doit etre joué quand l'Object commence à utiliser son pouvoir.

  • TriggerFX = ???
    Mettez ici le nom d'un FXList qui sera joué quand le pouvoir commence à etre utiliser.

  • SetModelCondition = ModelConditionState:???
    Cette option sert a déterminer un état que prend l'Object quand il utilise le pouvoir, ce qui est utile pour lui mettre une animation si vous n'avez pas d'autre choix.

  • SetModelConditionTime = ???
    Cette option va de paire avec la précédente car elle sert a déterminer pendant combien de temps l'Object restera dans cet état en secondes.
    par exemple :
    Code:
    SetModelCondition = ModelConditionState:USER_3
    SetModelConditionTime = 5.5
    L'Object sera dans l'état USER_3 pendant 5 secondes et demi. C'est utile pour jouer l'animation ou choisir le model que vous voulez dans le Draw !

  • DisableDuringAnimDuration = ???
    Utilité encore un peu floue, il faut mettre la valeur Yes ou No. Dans le doute ne mettez pas cette option.

  • AttributeModifier = ???
    C'est bien sur le nom du ModifierList en question

  • AntiCategory = ??? ??? ???
    Cette option attend une ou plusieures catégories de ModifierList qui seront remplacée par le ModifierList qui est donné dans l'option AttributeModifier, sans cette option la (AntiCategory) si un autre ModifierList est deja actif il le restera et l'AttributeModifier que vous mettrez viendra s'ajouter aux bonus/malus deja présents.

  • AttributeModifierRange = ???
    C'est le rayon dans lequel l'AttributeModifier sera envoyé.

  • AttributeModifierAffects = ???
    Vous mettez ici une liste des Object qui sont affecté par l'AttributeModifier (pour faire les listes d'objet je vous laisse soin d'aller regarder comment on fait dans le II/A/ comme dans l'option ObjectFilter)

  • AttributeModifierAffectsSelf = ???
    Mettez Yes ou No pour savoir si l'AttributeModifier affecte le lanceur ou pas.

  • AffectAllies = ???
    Choisissez entre Yes ou No si vous avez mis ALLIES dans la liste d'Object pour savoir si le ModifierList d'AttributeModifier affecte aussi vos alliés (Yes) ou seulement vos unités (No).

  • TargetEnemy = ???
    Pour savoir si le ModifierList affecte les ennemis. Choisissez entre Yes ou No.

b- PlayerHealSpecialPower
Ca sert simplement a soigner des Object dans une zone ce module :

Code:
Behavior = PlayerHealSpecialPower NomDuModule
; Options
End
Voici les options que vous pouvez mettre :
  • SpecialPowerTemplate = ???
    C'est le nom du SpecialPower utilisé bien sur.

  • StartsPaused = ???
    Utilité encore un peu floue, il faut mettre la valeur Yes ou No . Il me semble comme je l'ai deja dit que c'est pour savoir si le pouvoir est débloqué au niveau 1 avec No ou alors si il faut une Upgrade pour débloquer avec Yes.

  • HealAffects = ??? ??? ???
    Ce sont les types d'unités qui sont affecté par le soin, mais attention c'est différent des autres listes car il faut mettre seulement des trucs du kindOf séparé par un espace ( par exemple HealAffects = INFANTRY CAVALRY HERO DOZER MONSTER )

  • HealAsPercent = ???
    Choississez entre Yes ou No , Yes pour choissir un pourcentage de vie restorée, No pour choissir le nomvre de points de vie restorée avec l'option HealAmount.

  • HealAmount = ???
    C'est le pourcentage de vie restorée si vous avez mis Yes à HealAsPercent , (par exemple si vous mettez 0.5 ca soignera la moitié de la vie, si vous mettez 1 ca soigne tout la vie, 0.25 le quart de la vie, etc... vous avez comprit je pence) , ou alors le nombre de points de vie restorés si vous aviez mis No

  • HealRadius = ???
    C'est simplement le rayon dans lequel les unités sont soignées.

  • HealFX = ???
    Il suffit de mettre le nom du FXList qui sera joué sur les unités soignées (par exemple HealFX = FX_AragornAthelas pour l'effet d'athelas)

  • HealOCL = ???
    C'est un OCL qui sera activé pile au centre de la zone d'effet du soin, utile si vous voulez faire revivre une unité dans les bataillons proches comme dans le pouvoir du bien par exemple il faudrai mettre HealOCL = OCL_HealSpellHordeReplenishPing et ca fait revivre 1 gars par bataillon.

  • InitiateSound = ???
    Mettez un AudioEvent qui doit etre joué au centre de la zone de soin.

  • TriggerFX = ???
    Encore une fois c'est nom d'un FXList qui sera joué pour l'effet du soin au milieu de la zone.


c- OCLSpecialPower
C'est le module typique pour faire des invocations d'Object :

Code:
Behavior = OCLSpecialPower NomDuModule
; Options
End

Voila les options que vous pouvez mettre :

  • SpecialPowerTemplate = ???
    C'est le nom du SpecialPower.

  • OCL = ???
    C'est le nom de l'OCL à faire apparaitre.

  • CreateLocation = ???
    Vous avez le choix entre plusieurs valeurs mais seules 2 sont les plus utilisées :
    • CREATE_AT_LOCATION, si vous avez désigné une zone ou une cible pour le pouvoir, l'ocl apparaitra au milieu de cette zone ou sur cette cible
    • USE_OWNER_OBJECT, l'ocl aparaitra sur l'objet qui a lancé le pouvoir

  • TriggerFX = ???
    Comme précédemment c'est le nom de la FXList à faire jouer au centre de la zone ou apparaitra l'OCL.

  • StartsPaused = ???
    Comme dit précédemment, mettez Yes si il faut une Upgrade pour débloquer le pouvoir, sinon mettez No

  • UseDistanceFromCommandCenter = ???
    Enfin un parametre inédit :) , il est assez peu utilisé mais il peu etre utile quand meme : mettez Yes si l'invocation doit ce faire à un certaine distance d'un Object possédant COMMANDCENTER dans leur KindOf (un forteresse en faire ;) ). Sinon mettez No ou ne mettez tout simplement pas la ligne. Si vous avez mis Yes il faudra donner la distance avec DistanceFromCommandCenter.

  • DistanceFromCommandCenter = ???
    Ce Parametre va avec le précédent : c'est tout simplement la distance maximale à partir de laquelle l'invocation devient inutilisable : si vous visez une zone trop éloignée d'un Object qui a COMMANDCENTER dans son KindOf, le curseur deviendra rouge.


  • SetModelCondition = ModelConditionState:???
    On revient dans les options que l'on a déjà vu : celle ci sert a déterminer un état que prend l'Object quand il utilise le pouvoir, ce qui est utile pour lui mettre une animation, modifer son model ou attacher des ParticleSystem au model.

  • SetModelConditionTime = ???
    C'est la durée en seconde pendant laquelle le model reste dans l'état donné par SetModelCondition

  • DisableDuringAnimDuration = ???
    Comme je l'ai déjà dit avant, il faut mettre la valeur Yes ou No. Mais comme son utilité est un peu obscure je vous conseille de ne pas la mettre. De toute facon c'est pour les animations donc ca ne modifiera pas les effets du pouvoir.

  • AttributeModifierWeatherBased = ???
    Grâce à ce parametre et les 2 qui suivent vous allez pouvoir modifier la météo pendant l'invocation. Donc mettez Yes si vous voulez changer le temps, sinon mettez No et dans ce cas vous n'etes pas obligé de mettre ce parametre, ni les 2 suivants.

  • WeatherDuration = ???
    C'est juste la durée en millisecondes du changement de la météo

  • ChangeWeather = ???
    C'est dans ce parametre que l'on choisit le type de météo, vous avez le choix entre :
    • SUNNY : temps ensoleillé comme le pouvoir perce-nuage
    • RAINY : temps pluvieux comme la pluie du pouvoir d'isengard
    • CLOUDY : temps nuageux (sombre) comme le pouvoir du mordor



Bon vous avez comprit le principal je pence, j'ai détaillé les principaux mais il existe d'autre modules de type SpecialPower mais qui sont très spécifiques pour un pouvoir donc c'est rare de les utiliser mais je vous met quand meme les noms, et si vous voulez connaitre les parametres, il vous suffit de faire une recherche générale du nom du module dans l'ini tout simplement.

d- LevelGrantSpecialPower
C'est le module pour faire gagner de l'experience aux unités comme faveur royale

e- CurseSpecialPower
Un qui peut etre bien sympa c'est pour décharger les compteurs des pouvoirs de l'ennemi comme le pouvoir du roi sorcier

f- DominateEnemySpecialPower
Pour convertir des ennemis on peut utiliser ce module




Il y a encore d'autres modules de type SpecialPower mais a vrai dire il ne sont guerre très utiles pour les pouvoirs...

Comme on ne peut utiliser que un seul module de ces types comment peut on faire pour en utiliser plusieurs a la fois ? La réponce est simple : il faut un module pour les activer tous en meme temps, ce module se nomme ActivateModuleSpecialPower et je vais le détailler car il très utile !
Revenir en haut Aller en bas
cdd59554
Admin
cdd59554


Nombre de messages : 7235
Age : 31
Location : J'aime les abricots
Add-On : Oui
Date d'inscription : 16/01/2008

La création de pouvoir Empty
MessageSujet: Re: La création de pouvoir   La création de pouvoir Icon_minitimeSam 16 Mai - 23:36

2/ Un module très utile : ActivateModuleSpecialPower

Ce module est en effet très utile, je vais vous donner un exemple tout simple d'utilisation : vous voulez faire un pouvoir qui invoque des unités et qui soigne en meme temps les alliés d'une zone via les modules OCLSpecialPower et PlayerHealSpecialPower seulement vous pouvez toujours essayer de mettre les 2 modules à la suite, seul l'un d'eux (le premier normalement) sera pris en compte mais pas le deuxieme donc soit votre pouvoir soignera des unités soit il invoquera des unité mais pas les 2 en meme temps. C'est la que le module ActivateModuleSpecialPower entre en jeu : il permet activer les 2 modules en meme temps.
Bien sur il ne se limite pas à 2 modules mais à plusieurs. En plus on pourra aussi l'utiliser pour activer plusieurs modules de type Update (la encore c'est moi qui les appelle comme ça) qui eux aussi ont le probleme de s'activer un à la fois.
Il faudra donc mettre en premier ce module et ensuite les modules qu'il active mais pas l'inverse.
Voici le module qui est comme tout les autres :

Code:
Behavior = ActivateModuleSpecialPower NomDuModule
; Options
End
Et voila les options à mettre :
  • SpecialPowerTemplate = ???
    Comme d'habitude c'est le nom du SpecialPower.

  • StartAbilityRange = ???
    Pas obligatoire, c'est la distance à partir de laquelle le pouvoir est utilisable, par exemple si vous visez une zone votre unité se rapprochera de la cible de cette distance avant d'utiliser le pouvoir.

  • TriggerSpecialPower = ??? ???
    C'est l'option la plus importante du module car avec on active les autres modules. Vous pouvez la mettre autant de fois qu'il y a de modules à activer. Comme vous le voyez, vous pouvez mettre 2 valeurs, dont la premiere est obligatoire et la deuxième est facultative.
    D'abord les premiers ??? vous mettez le nom des modules c'est à dire que par exemple : pour le module Behavior = PlayerHealSpecialPower ModuleDeSoin vous mettriez TriggerSpecialPower = ModuleDeSoin
    Pour deuxiemes ??? vous avez 3 possibilités : TARGETPOS, OBJECTPOS, ou ne rien mettre du tout car ils sont facultatifs en effet c'est dans le cas ou le module à activer n'utilise pas de zone ou de cible (comme un attribute modifier sur un objet lui-meme ou un switch d'arme,etc...). Si le module utilise une zone ou une cible (comme un soin de zone, une invocation, un weapon, etc...) il faudra mettre l'une des 2 valeurs :
    • TARGETPOS si le module doit s'activer avec comme position la cible.
    • OBJECTPOS si le module doit s'activer avec comme position le lanceur du pouvoir.
    • ou alors ne rien mettre du tout comme expliqué plus haut.


Et bien c'est tout pour les principaux parametres, il y en a encore plein d'autre mais on les a déjà vu plus haut (ou alors on va bientôt les voir plus bas Wink ).
Pour des cas concrets d'utilisation vous pouvez aller voir dain (dain.ini) avec son pouvoir rage du guerrier ou les sorciers d'angmar (angmarnecromancerbanner.ini) qui utilise plusieur fois se module.




3/ Les autres modules pour les pouvoirs : type Update
Faudra attendre destroy
Revenir en haut Aller en bas
Contenu sponsorisé





La création de pouvoir Empty
MessageSujet: Re: La création de pouvoir   La création de pouvoir Icon_minitime

Revenir en haut Aller en bas
 
La création de pouvoir
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Vos pouvoir(en création/pensées) et vos codes
» plus de pouvoir
» Recherche d'un pouvoir
» Pouvoir Flèches
» pouvoir a d'autres

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Imladris production :: Ini codes et .str :: Tutoriaux-
Sauter vers: