Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

[SCRIPT] Comment modifier le script d'une zone de rencontre aléatoire ?

Répondre
Avatar du membre
DrAzTiK
Ours des cavernes
Messages : 1180
Enregistré le : ven. 19 sept. 2003, 03:20
Localisation : Bordeaux
Contact :
Statut : Hors ligne

[SCRIPT] Comment modifier le script d'une zone de rencontre aléatoire ?

.

Message par DrAzTiK »

Yop :)

Voici le script de la zone AR0041. C'est une map de rencontre aléatoire à la campagne.

Je voudrais ajouter mon combat juste après le 1er. (donc quand on arrive sur cette map pour la 2e fois). Quelle serait la meilleure solution pour moi ?

A terme j'aimerai que le combat se déroule sur une map perso mais pour l'instant j'aimerai bien tester comme cela. ( étant donné que créer et intégrer des maps persos semble bien difficile .)

voilàa voilu

Code : Tout sélectionner

IF
    OnCreation()
    Global("RandomEncounters","GLOBAL",0)
    GlobalLT("Chapter","GLOBAL",4)
THEN
    RESPONSE #100
        SetGlobal("RandomEncounters","GLOBAL",1)
        CreateCreature("RESUNA",[488.558],10) // Suna Seni
        CreateCreature("REELDAR",[500.454],10) // Eldarin
        CreateCreature("REFIGH01",[552.476],10) // Esclavagiste
        CreateCreature("REMAGE01",[427.548],10) // Magicien esclavagiste
        CreateCreature("RECLER01",[525.591],10) // Esclavagiste
        CreateCreature("RETHIE01",[585.542],10) // Esclavagiste
END

IF
    OnCreation()
    Global("RandomEncounters","GLOBAL",1)
    GlobalLT("Chapter","GLOBAL",4)
THEN
    RESPONSE #100
        SetGlobal("RandomEncounters","GLOBAL",2)
        CreateCreature("RENFELD",[208.591],2) // Renfeld
        CreateCreature("RETHUG01",[222.664],8) // Thug
        CreateCreature("RETHUG02",[261.619],6) // Mage - Magicien
        CreateCreature("RETHUG03",[268.567],4) // Thug
        CreateCreature("RETHUG04",[301.613],14) // Thug
END

IF
    OnCreation()
    Global("RandomEncounters","GLOBAL",2)
    GlobalLT("Chapter","GLOBAL",4)
THEN
    RESPONSE #100
        SetGlobal("RandomEncounters","GLOBAL",3)
        CreateCreature("ORC05",[488.558],10) // Orog
        CreateCreature("ORC05",[500.454],10) // Orog
        CreateCreature("ORC05",[552.476],10) // Orog
        CreateCreature("ORC05",[427.548],10) // Orog
        CreateCreature("REFIGH01",[525.591],10) // Esclavagiste
        CreateCreature("REFIGH01",[585.542],10) // Esclavagiste
        CreateCreature("ORC05",[589.542],10) // Orog
        CreateCreature("ORC05",[592.542],10) // Orog
END

IF
    OnCreation()
    Global("RandomEncounters","GLOBAL",3)
    GlobalGT("Chapter","GLOBAL",4)
THEN
    RESPONSE #100
        SetGlobal("RandomEncounters","GLOBAL",4)
        CreateCreature("RERAK01",[488.558],10) // Vadrouilleur
        CreateCreature("RERAK02",[500.454],10) // Vadrouilleur
        CreateCreature("RERAK03",[552.476],10) // Vadrouilleur
        CreateCreature("RERAK04",[427.548],10) // Vadrouilleur
        CreateCreature("RERAK05",[525.591],10) // Vadrouilleur
        CreateCreature("RERAK06",[585.542],10) // Vadrouilleur
END

IF
    OnCreation()
THEN
    RESPONSE #100
        CreateCreature("REBAND01",[488.558],10) // Bandit
        CreateCreature("REBAND02",[500.454],10) // Bandit
        CreateCreature("REBAND03",[552.476],10) // Bandit
        CreateCreature("REBAND04",[427.548],10) // Bandit
        CreateCreature("REBAND05",[525.591],10) // Bandit
END
Faites comme moi, jouez FP :cool:

Mon Mod : BuTcHeRY

Ma châine Youtube
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Si tu veux remplacer le deuxième combat, il te suffit de remplacer ces lignes :
CreateCreature("RENFELD",[208.591],2) // Renfeld
CreateCreature("RETHUG01",[222.664],8) // Thug
CreateCreature("RETHUG02",[261.619],6) // Mage - Magicien
CreateCreature("RETHUG03",[268.567],4) // Thug
CreateCreature("RETHUG04",[301.613],14) // Thug
par ce que tu veux.

La variable "RandomEncounters" sert à compter la série puisqu'elle vaut 0 au début (toute variable pas encore initialisée a cette valeur), puis elle est mise à 1 avant le premier combat, puis à 2, ... par les suivants.
Une fois que tu as passé le chapitre 3, comme aucun test n'est satisfait, c'est le dernier bloc, celui des bandits, qui sera toujours utilisé.

Enfin bon, remplacer Renfeld, c'est une grosse bêtise, car c'est lui qui lance la quête avec les ménestrels. Bref, il faudrait au moins que tu le laisses, même si tu remplaces les autres, de façon à ne pas casser toute cette série de quêtes.

Créer une nouvelle zone de rencontre aléatoire, cela nécessite de créer un nouveau fichier ARE (ce n'est pas bien compliqué), éventuellement avec un graphisme différent (là ça se complique). Et enfin lui associer un nouveau script de zone du même genre que celui-là, avec ses propres variables (en principe, sinon ça peut perturber le comportement des autres zones, bien qu'ici la variable soit partagée entre la ville et la campagne).
Mais le souci, c'est qu'il faut déclarer une zone de rencontre aléatoire dans la carte du monde, plus précisément dans les transitions entre zones. Voir cette référence, plus particulièrement la partie des "Area Link". On affecte la zone nouvelle (le nom du fichier ARE) en tant que "Random encounter area 1", et on indique le pourcentage de probabilité de rencontre dans "Random encounter probability" à moins de 100 à moins que tu ne veuilles forcer la rencontre (type Drizzt en quittant la sortie des Tréfonds Obscurs).
Le souci de la modification de la carte, c'est qu'elle n'est prise en compte que si tu recommences une partie. Car sinon le fichier WMP employé par le jeu est celui qu'il a enregistré dans le répertoire de sauvegarde. Donc, à moins de modifier le fichier WMP directement dans un répertoire de sauvegarde, et de repartir de cette sauvegarde-là, il n'y a pas moyen de tester ta modification en cours de partie.
Avatar du membre
DrAzTiK
Ours des cavernes
Messages : 1180
Enregistré le : ven. 19 sept. 2003, 03:20
Localisation : Bordeaux
Contact :
Statut : Hors ligne
.

Message par DrAzTiK »

Je ne veux surtout pas supprimer Renfeld ou même les autres combats. J'aimerai toucher le moins possible au jeux original justement pour éviter ce genre de pb. (d’où mon désir de la nouvelle map).

En attendant j'aimerai tester de placer ma rencontre entre 2 variables de combat mais sans supprimer ces combats.

Et en fait je voudrais le placer après les orogs

Code : Tout sélectionner

IF
    OnCreation()
    Global("RandomEncounters","GLOBAL",2)
    GlobalLT("Chapter","GLOBAL",4)
THEN
    RESPONSE #100
        SetGlobal("RandomEncounters","GLOBAL",3)
        CreateCreature("ORC05",[488.558],10) // Orog
        CreateCreature("ORC05",[500.454],10) // Orog
        CreateCreature("ORC05",[552.476],10) // Orog
        CreateCreature("ORC05",[427.548],10) // Orog
        CreateCreature("REFIGH01",[525.591],10) // Esclavagiste
        CreateCreature("REFIGH01",[585.542],10) // Esclavagiste
        CreateCreature("ORC05",[589.542],10) // Orog
        CreateCreature("ORC05",[592.542],10) // Orog
END
Mais étant donné que les variables sont déjà en place, comment faire ?

ps : au cas ou cela ne se verrait pas, je maitrise que très peu weidu :p
Faites comme moi, jouez FP :cool:

Mon Mod : BuTcHeRY

Ma châine Youtube
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Ceci n'a strictement rien à voir avec WeiDU mais avec le langage des scripts. Il existe de nombreux tutorials sur les scripts. Celui de SimDingo fait office de référence. Malheureusement les images liées manquent. Cette version un peu moins complète les a, par contre.

Rien ne t'empêche d'insérer ton combat au milieu des autres en modifiant le test de valeur de "RandomEncounters" de ceux qui suivent celui après lequel tu veux ajouter le tien. Puisque maintenant tu veux insérer ton combat en quatrième, après les Orogs qui sont le troisième, il te suffirait de tester la valeur 4 et non plus 3 pour le combat des vadrouilleurs et d'utiliser le test sur la valeur 3 pour déclencher le tien.
Rien de plus simple en modifiant le script avec Near Infinity. Il te faudra insérer ton bloc, qui réutilisera le test actuel pour déclencher le combat des vadrouilleurs, juste après le bloc concernant les Orogs. Par ailleurs, tu feras bien passer la variable à 5 dans le bloc des vadrouilleurs, pour éviter qu'il ne se répète à l'infini (ce qui serait le cas si tu laissais la valeur à 4 dans le SetGlobal du bloc des vadrouilleurs).
Pour tester l'efficacité de ton script ainsi modifié, rien ne vaut la modification directe avec Near Infinity.

A vrai dire, coder des modifications de lignes existantes avec WeiDU est loin d'être simple, mais tout à fait possible. Des patchs comme le BG2 Fixpack de Gibberlins Three sont obligés de le faire. A côté la modification avec Near Infinity est très simple. Je te conseille donc de tester ton script modifié en faisant la modification à la main avec Near Infinity. Une fois qu'il fonctionnera (probablement pas du premier coup), tu pourras te poser la question de l'utilisation de WeiDU pour effectuer la modification du script de façon automatique. Mais chaque chose en son temps.

Le recours à une nouvelle zone n'est pas du tout plus simple. Il faudrait modifier la carte du monde, comme je l'ai déjà indiqué. Faire ça avec WeiDU est loin d'être simple. Tu peux t'amuser à regarder le fichier TP2 de Stone of Askavar, par exemple, pour avoir une idée de la complexité de l'ajout d'une zone (mais ce qu'il fait, ajouter une zone "normale", est tout de même bien plus compliqué que la modification d'une transition).
En tout cas, faire ça de façon "propre", c'est à dire compatible avec les autres mods susceptibles de modifier la carte, est autrement plus compliqué qu'un simple WRITE_quelquechose à un offset donné.
A contrario, tu pourras te servir de Tactics comme exemple pour la modification de ce même script AR0041.BCS dans le composant "Gebhard Blucher's Random City Encounters". Tu verras que ce n'est pas forcément si compliqué que ça, même si dans ton cas il y aurait deux blocs à remplacer et non un seul.
Avatar du membre
DrAzTiK
Ours des cavernes
Messages : 1180
Enregistré le : ven. 19 sept. 2003, 03:20
Localisation : Bordeaux
Contact :
Statut : Hors ligne
.

Message par DrAzTiK »

Merçi beaucoup, je vais potasser tout ça un maximum avant de revenir t'embêter à nouveau :p
Faites comme moi, jouez FP :cool:

Mon Mod : BuTcHeRY

Ma châine Youtube
Avatar du membre
DrAzTiK
Ours des cavernes
Messages : 1180
Enregistré le : ven. 19 sept. 2003, 03:20
Localisation : Bordeaux
Contact :
Statut : Hors ligne
.

Message par DrAzTiK »

Re Isaya :)

Bon j'ai testé la manip avec near infinity et ça marche. (bon c'était pas trop dur)

Donc ma question suivante serait : comment patcher ça dans le jeux ?

J'ai look le tp2 de tactics et j'ai vu ça :

Code : Tout sélectionner

BEGIN @4021
UNINSTALL ~SETUP-SOLAUFEIN.TP2~ 1
AT_INTERACTIVE_EXIT ~VIEW tactics2\README-Tactics.txt~

COPY_EXISTING ~ar0042.bcs~ ~override/ar0042.bcs~
REPLACE_BCS_BLOCK ~tactics2/krwild/oldrand.baf~
    ~tactics2/krwild/newrand.baf~
COPY_EXISTING ~ar0043.bcs~ ~override/ar0043.bcs~
REPLACE_BCS_BLOCK ~tactics2/krwild/oldrand.baf~
    ~tactics2/krwild/newrand.baf~
COPY_EXISTING ~ar0044.bcs~ ~override/ar0044.bcs~
REPLACE_BCS_BLOCK ~tactics2/krwild/oldrand.baf~
    ~tactics2/krwild/newrand.baf~
Est ce que REPLACE_BCS_BLOCK supprime tout les blocs existant pour les remplacer par ceux de tactics ? Si c'est le cas, c'est une action qui ne m'intéresse pas du tout. A moins que je ne me trompe ?

Est ce que la solution de la map perso (qui pourrait très bien être la même map que AR0043 mais renommée et avec mon propre script) n'est pas meilleure pour assurer une compatibilité avec les autres mods ? (tactics modifie le script de ces zones mais aussi SCS II, et ce sont des mods quand même téléchargés par beaucoup de monde).

J'ai lu ce tuto que je comprends à 80%.

Est ce que modifier les area links est moins dangereux. Modifier un area link = écraser le link existant mais j'ai l'impression que de nombreux area link ne sont pas programmés pour des rencontres aléatoires.

Bon y a un ou 2 trucs que j'ai pas compris à propos des area links mais j'en parlerai plus tard :)
Faites comme moi, jouez FP :cool:

Mon Mod : BuTcHeRY

Ma châine Youtube
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

DrAzTiK a écrit :Bon j'ai testé la manip avec near infinity et ça marche. (bon c'était pas trop dur)
C'est bien pour ça que je t'incitais à le faire, avant de te prendre la tête avec le patch.
DrAzTiK a écrit :Est ce que REPLACE_BCS_BLOCK supprime tout les blocs existant pour les remplaçer par ceux de tactics ? Si c'est le cas, c'est une action qui ne m'intéresse pas du tout. A moins que je ne me trompe ?
Le bloc auquel je faisais référence (parce qu'il utilise le même script de zone) est celui-ci :
COPY_EXISTING ~ar0041.bcs~ ~override/ar0041.bcs~
REPLACE_BCS_BLOCK ~tactics2/gbrand/scripts/oldrand.baf~
~tactics2/gbrand/scripts/newrand.baf~
Les noms et les mots ont leur importance. L'instruction permet, comme son nom l'indique, de remplacer un bloc, pas le fichier complet. Et la syntaxe est des plus simples, et bien expliquée dans la documentation :
REPLACE_BCS_BLOCK oldFile newFile
If the current file is a BCS file, the segment of it corresponding to oldFile is replaced with the contents of newFile. oldFile and newFile may be BCS or BAF files. If they are BAF files they will not get the benefit of AUTO_TRA.
Si tu regardes le contenu des fichiers gbrand/scripts/oldrand.baf (que tu devrais reconnaître sans peine) et gbrand/scripts/newrand.baf, tu ne pourras pas manquer de déduire comment ça marche. Si tu as encore des doutes, installe Tactics et constate l'effet sur le fichier AR0041.BCS. Je pourrais passer des heures à essayer de l'expliquer sans que ce soit aussi clair.
Fais attention à un point particulier : le bloc existant (old) est remplacé par le tien (new), à condition que WeiDU trouve dans le fichier BCS tel qu'il est actuellement le bloc tel que tu le lui as indiqué dans "old". Bref, si quelqu'un a déjà fait disparaître le bloc ou l'a modifié, le replace échouera et ton bloc ne sera pas installé !
DrAzTiK a écrit :Est ce que la solution de la map perso (qui pourrait très bien être la même map que AR0043 mais renommée et avec mon propre script) n'est pas meilleure pour assurer une compatibilité avec les autres mods ? (tactics modifie le script de ces zones mais aussi SCS II, et ce sont des mods quand même téléchargés par beaucoup de monde).
Non, ça dépend d'autres facteurs. Tel que le fait que tu veuilles ajouter ta rencontre sur un liaison entre zones qui dispose déjà d'une rencontre aléatoire. Les mods que tu cites en ajoutent peut-être eux-mêmes.
DrAzTiK a écrit :J'ai lu ce tuto que je comprends à 80% :
BG2: Creating Forced Encounters - The Gibberlings Three Forums

Est ce que modifier les area links est moins dangereux. Modifier un area link = écraser le link éxistant mais j'ai l'impression que de nombreux area link ne sont pas programmés pour des rencontres aléatoires.
Moins dangereux que quoi ?
Le tutorial ne fait que modifier les rencontres des liaisons existantes, il ne crée pas de nouvelles liaisons et ne modifie pas non plus les zones reliées.

Pour le coup, on ne fait pas d'omelette sans casser d'oeufs. Soit tu veux ajouter une rencontre entre deux zones où il n'y en a pas, auquel cas tu fais comme le tutorial (rien ne t'empêche de pointer une zone de rencontre existante et non une nouvelle), soit tu veux ajouter une rencontre là où il y en a déjà, auquel cas, il sera plus prudent de patcher le script de la zone en question. Peut-être est-il possible d'ajouter une nouvelle zone de rencontre aléatoire en deuxième position, mais comme la probabilité est commune pour la liaison, la façon dont le jeu va en tenir compte est loin d'être claire.
DrAzTiK a écrit :Bon y a un ou 2 trucs que j'ai pas compris à propos des area links mais j'en parlerai plus tard :)
As-tu étudié la documentation du format WMP sur IESDP ?
Tu peux aussi jeter un coup d'oeil aux fichiers et XNEWAREA.2DA (ajout de la Tour de garde) et XL3000.2DA (liaisons des autres zones vers la Tour de garde) qui sont assez représentatifs des données nécessaires pour ajouter une zone sur la carte et la relier aux autres. Ce mécanisme n'est pas réutilisable tel quel par des mods mais le contenu des fichiers donne une bonne indication des paramètres nécessaires.

En tout cas, comme l'indique quelqu'un dans le sujet du tutorial, il faut bien garder à l'esprit que la carte du monde est stockée dans les sauvegardes. Donc il faut impérativement recommencer complètement une partie pour observer des modifications sur la carte du monde, quelle qu'en soit la nature !
A contrario, modifier un script existant garantit une prise en compte immédiate, comme tu as déjà pu le constater.
Avatar du membre
DrAzTiK
Ours des cavernes
Messages : 1180
Enregistré le : ven. 19 sept. 2003, 03:20
Localisation : Bordeaux
Contact :
Statut : Hors ligne
.

Message par DrAzTiK »

COPY_EXISTING ~ar0041.bcs~ ~override/ar0041.bcs~
REPLACE_BCS_BLOCK ~tactics2/gbrand/scripts/oldrand.baf~
~tactics2/gbrand/scripts/newrand.baf~
Finalement cette commande écrase les fichiers au lieu de les patcher non ? (enfin ça les patch dans un certains sens mais seulement après avoir tout écrasé).

Si j'ai bien compris la commande , elle me sera peut être utile par la suite mais en l'occurence, c'est vraiment pas bien dans ce cas là. Il y a impossibilité de connaitre les blocs exact du script de ces AREA pour chaque joueur. Certains vont avoir un installation original, d'autres vont installé tactics, d'autres SCSII (et le composant de ce mod est encore pire car les blocs doivent beaucoup moduler selon l'installation des autres composants de SCSII).

Finalement cette commande écrase les fichiers au lieu de les patcher non ? (enfin ça les patch dans un certains sens mais seulement après avoir tout écrasé).


C'est pour ça que je dis que créer une zone de rencontre entre 2 zones ou le jeux original n'en prévoit pas et ou les composants de tactics et SCS II n'en prévoient pas non plus est beaucoup plus sur non ? (je parle en vu d'une futur hypothétique compatibilité entre mod)


Pour programmer une rencontre aléatoire sur une map perso :

Je vais dans near infinity , wordlmap.WMP, Edit, map entry0, edit
==> j'atterris une sur page avec tous les 13 champs, 24 area entry et les tous les area links.

Déjà je comprends pas que dans les 13 champs :
Map: WORLDMAP.MOS
Width: 1470
Height: 700
Unknown: 02 00 00 00 h
Name: Promenade de Waukyne
Unknown: 07 00 00 00 h
Unknown: 07 00 00 00 h
# area entries: 25
Area entries offset: c8 h
Area link entries offset: 1838 h
# area link entries: 451
Map icons: MAPICONS.BAM.

Pourquoi c'est la promenade de waukine qui est toujours inscrit a name ?

Et pour aller droit au but, c'est quoi un entry et c'est quoi un link ?

Je lis : each exit from the area has an Area Link

Il y a combien d'exit par area ?
As-tu étudié la documentation du format WMP sur IESDP ?
Oui mais j'ai pas l'impression que ce site aide beaucoup les profanes... perso pour le moment j'ai du mal a en retirer quelque chose :(
Faites comme moi, jouez FP :cool:

Mon Mod : BuTcHeRY

Ma châine Youtube
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

DrAzTiK a écrit :Finalement cette commande écrase les fichiers au lieu de les patcher non ? (enfin ça les patch dans un certains sens mais seulement après avoir tout écrasé).
Non, elle n'écrase rien, elle remplace old par new. C'est à toi d'être intelligent pour que le remplacement ne devienne pas un écrasement.
Dans un traitement de texte, quand je fais un remplacement de "mot" par "nom", j'écrase bien "mot". Mais si je dis de remplacer par "mot nom", je me suis contenté d'ajouter "nom" et j'ai utilisé "mot" pour fixer l'endroit après lequel je voulais ajouter "nom".
Avec les scripts et les patchs WeiDU, c'est pareil.
DrAzTiK a écrit :Si j'ai bien compris la commande , elle me sera peut être utile par la suite mais en l'occurence, c'est vraiment pas bien dans ce cas là. Il y a impossibilité de connaitre les blocs exact du script de ces AREA pour chaque joueur. Certains vont avoir un installation original, d'autres vont installé tactics, d'autres SCSII (et le composant de ce mod est encore pire car les blocs doivent beaucoup moduler selon l'installation des autres composants de SCSII).

C'est pour ça que je dis que créer une zone de rencontre entre 2 zones ou le jeux original n'en prévoit pas et ou les composants de tactics et SCS II n'en prévoient pas non plus est beaucoup plus sur non ? (je parle en vu d'une futur hypothétique compatibilité entre mod)
C'est exactement le même problème : comment seras-tu sûr qu'un autre mod ne va pas chercher lui-aussi à modifier une liaison entre zones particulière (qu'il avait vu libre dans une configuration quelconque de mods) pour caser sa rencontre à lui, et comme par hasard la même que toi ?

Tant que tu ne fais pas cette modification sur une liaison vers ou depuis une zone toute nouvelle sur la carte, ajoutée par ton propre mod, tu ne peux pas être certain qu'il ne va pas y avoir un conflit avec un autre mod.

A contrario, avec un script tel que AR0041.BCS, tu pourras toujours t'en sortir. A moins qu'un mod ne s'amuse à casser toute la séquence de quête des ménestrels, il est obligé de respecter le deuxième combat. Tu peux donc t'appuyer sur la valeur de la variable "RandomEncounters", à 2 après la rencontre.
Les patchs utilisant EXTEND_TOP et EXTEND_BOTTOM sont fiables à 100 %, c'est à dire que ton code sera systématiquement ajouté. Dans le cas de ce script, ajouter à la fin est une impasse : le dernier bloc actuel est toujours actif si aucun autre test ne réussit, donc tout code ajouté après ne sera jamais atteint.
Ajouter au début d'un script est une lourde responsabilité : en cas de défaut dans le ou les blocs ajoutés, tu peux foutre en l'air toute la suite du script ! Par conséquent, sauf dans des cas particuliers comme ce script, où ajouter à la fin n'est pas une option, il vaut mieux éviter d'utiliser EXTEND_TOP.

Ici, ton bloc ajouté au début pourrait être :

Code : Tout sélectionner

IF
    OnCreation()
    // Mettre 1 pour avant le combat où Renfeld est trouvé, 2 pour juste après, etc
    Global("RandomEncounters","GLOBAL",1)
    Global("MaVariableAMoi","GLOBAL",0)
    GlobalLT("Chapter","GLOBAL",4)
THEN
    RESPONSE #100
        SetGlobal("MaVariableAMoi","GLOBAL",1)
        // Surtout ne pas modifier "RandomEncounters" pour qu'elle reste à 1 ou 2 ou autre, selon ton choix
        // Mes méchants à moi
        CreateCreature("MONSTRE1",[222.664],8)
        CreateCreature("MONSTRE2",[280.664],8)
        ...
END
Bref, je préserve la séquence existante en utilisant une variable personnelle pour tracer le fait que mon combat ait eu lieu. Et j'utilise la valeur particulière de la séquence existante pour choisir où exactement je veux que mon combat intervienne dans la séquence.
Si tu as des conditions supplémentaires ou en moins par rapport au test que tu reprends, autrement dit si tu ne reprends pas à l'identique un test existant en ajoutant juste ton ou tes tests de variable en plus, tu risques de devoir ajouter plusieurs blocs avec des conditions adaptées. C'est en particulier le cas si tu veux avoir des OU dans ta logique de déclenchement.
Suggestion : faire au plus simple pour éviter d'avoir quelque chose qui ne fonctionne pas dans des cas particuliers.
DrAzTiK a écrit :Pourquoi c'est la promenade de waukine qui est toujours inscrit a name ?
Parce que.
Désolé, mais il n'y a rien à expliquer : le format WMP prévoit qu'il y ait ici une référence au nom de la carte. Dans un jeu mono-carte comme BG ou BG II, il y a un nom d'une zone quelconque, selon ce qu'a décidé le concepteur. Je doute que ce nom apparaisse dans le jeu. C'est sûr que s'il avait pointé sur le texte qui dit "Carte du monde" et qui sert sur l'écran du même nom, ce serait plus simple à comprendre.
Dans Icewind Dale, qui a deux fichiers WM mono-carte, que le jeu peut alterner (le jeu et l'extension), chaque carte a pour cette position un nom pertinent, "Val de Bise" ou "Heart of Winter". Je ne sais même pas si ce nom apparaît quelque part dans le jeu.
Dans Icewind Dale II, qui a un fichier WMP comportant 3 cartes (3 Map Entries), chacune a son nom. J'ignore également si le jeu en fait quelque chose.
DrAzTiK a écrit :Et pour aller droit au but, c'est quoi un entry et c'est quoi un link ?
Une "Entry", c'est une zone qui apparaît sur la carte : c'est pour ça qu'elle pointe sur un xxx.ARE et qu'elle a au moins un flag qui dit si elle est visible ou pas dès le début.
Un "Link", c'est ce qui définit comme on peut se rendre d'une zone à un autre, et en combien de temps. Une liaison part toujours de la zone sélectionnée et permet d'aller à la zone dont l'indice dans la table est indiqué en tant que "Target area entry". Bref la valeur 2 pointe sur l'"Area entry 2", soit la troisième de la table (classique début à 0 de l'indice en informatique). La liaison permet aussi d'indiquer sur quel point de la zone on arrive (via un nom de "Entrance" parmi ceux définis dans le fichier ARE de destination).
DrAzTiK a écrit :Je lis : each exit from the area has an Area Link

Il y a combien d'exit par area ?
C'est toi qui décide (ou plutôt le concepteur de la carte l'a fait). Il y a des sorties possibles aux 4 points cardinaux. Mais cette possibilité était surtout utilisée dans BG pour le passage de zone de proche en proche, alors que dans BG II c'est plutôt une question de logique, sans impact réel. Il peut y avoir plusieurs destinations possibles depuis chaque point cardinal. Par exemple, les portes de la ville d'Athkatla mènent à tous les autres lieux du jeu, à peu de choses près.
Comme la carte du monde est géré comme un logiciel de guidage GPS gère le réseau de routes, il suffit qu'il y ait au moins un point central comme Paris (les portes de la ville) pour qu'on puisse se rendre de Nantes (Franc-Marché) à Gap (Umar), quitte à devoir se taper plusieurs correspondances (dans le jeu, cela revient à ajouter les temps de parcours des différents petits trajets).
DrAzTiK a écrit :Oui mais j'ai pas l'impression que ce site aide beaucoup les profanes... perso pour le moment j'ai du mal a en retirer quelque chose :(
C'est malheureusement vrai de tout document de référence : sans manuel d'utilisation, c'est inexploitable. A la différence que tu as des outils de visualisation des fichiers du jeu (d'ailleurs basés sur cette référence) pour commencer à se faire une idée de la façon dont c'est utilisé.
C'est exactement comme les "docs" de certains logiciels qui ne sont que la juxtaposition des écrans d'aide pour chaque écran du logiciel. Ou comme la description de la syntaxe des fichiers D et TP2 dans la doc WeiDU. On n'imagine pas pouvoir apprendre à en faire quelque chose, et pourtant on ne peut rien faire qui sorte de l'ordinaire (les tutoriels de la doc WeiDU, par exemple) sans se référer à ces parties référence du document.
C'est de tout même déjà mieux que se contenter du simple affichage de la carte par Near Infinity.

Bonne continuation.
Répondre

Retourner vers « Scripts »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité