Affichage des résultats 1 à 7 sur 7

Discussion: [WeiDU] Recherche un algorithme pour modifier le fichier WED

  1. #1
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 419

    Werewolf [WeiDU] Recherche un algorithme pour modifier le fichier WED

    Je suis en train d'écrire une fonction WeiDU qui ajoute automatiquement une porte dans une carte existante.

    Le code modifiant le fichier ARE fonctionne parfaitement. En revanche, celui modifiant le fichier WED n'est pas encore au point. En fait, il fonctionne parfaitement, sauf une partie que j'ai mis du temps à identifier.

    Le fichier wed contient les informations sur les overlays, les portes, les polygones et.... les wallgroups.
    Chaque carte est découpée en wallgroups de 640 x 480 pixels regroupant les index des polygones compris dans cette surface. Lorsque j'ajoute un polygone pour la porte ouverte, je dois mettre à jour l'index des wallgroups. Et c'est là que ça se complique.

    Comme un bon dessin vaut mieux que de longs discours :


    Les numéros représentent les wallgroups, les lettres des polygones.

    Si j'ajoute le polygone A dans le fichier WED, il me suffit de lire sa bounding box pour pouvoir l'insérer dans le wallgroup 4 et réindexer le fichier.
    En revanche, ça se complique pour trouver un algorithme calculant automatiquement que le polygone B doit être ajouté aux wallgroups 1, 4 et 7 ; et le polygone C aux wallgroups 0,1, 4, 5 et 7.

    Pour info, je connais les bornes gauche, droite, haute et basse de chaque wallgroup et de chaque polygone.

    Si quelqu'un a une idée, ça me permettrait de gagner un temps fou.
    Dernière modification par Freddy_Gwendo ; 10/04/2018 à 22h51. Motif: correction des "lettres" pour les polygones !
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  2. #2
    Date d'inscription
    mars 2010
    Localisation
    Paris
    Messages 
    1 254
    Freddy, tu réfléchis trop.

    Pourquoi vouloir créer des portes en auto dans une carte. Pour connaitre ses coordonnées, il faut bien ouvrir la carte, la regarder et déterminer ses points?

    En auto sans voir la carte avant? Je ne comprends pas tout. (je ne réflechis p.e pas assez MDR).


    Code:
    "Les numéros représentent les wallgroups, les chiffres des polygones."
    Cherchez l'erreur (je te charrie un peu) mais sur le coup j'ai bloqué 2 sec.

    Pour l'algorithme, ça s'écrit mais ensuite il faut l'utiliser dans une langage. Tu as lequel à dispo? Weidu sait faire des boucles et tester des coordonnées? Déterminer le nb de WallGroup dans la carte et les parcourir?

    Pour moi, il faut tester la coordonnée de chaque point de ton polygone par rapport à chaque zone de ton WALLGROUP pour déterminer si il en fait partie. On s'arrête lorsqu'on a trouvé son WallGroup et on passe au point suivant.

    Wallgroup 1
    X=0 -> 640
    Y=0 -> 480

    Wallgroup 2
    X=641 -> 1280
    Y=481 -> 960

    Si j'ai un point avec la coordonnée, [200 - 95]:
    0< Xpoint < 640
    0< Ypoint < 481

    J'ai statué sur ce point, il est dans le WG 1. Je passe au point suivant.


    Dans ton dessin, tu as matérialisé les bornes? (j'ignore qu'il y en avait et à quoi elles servent) Sinon tes WallGroup n'ont pas la même taille.


    Cocrane

  3. #3
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 419
    Le but du jeu est d'ajouter des portes dans une carte du jeu tout en préservant la compatibilité du mod, donc patchage du fichier wed.

    Je sais déterminer l'aire de chaque wallgroup et la comparer avec la bounding box d'un polygone pour déterminer s'il doit être ajouté à ce wallgroup. Le problème concerne les polygones situés à cheval sur plusieurs wallgroups : il faut impérativement les renseigner dans chaque wallgroup concerné. C'est facile visuellement, mais ça devient l'enfer pour prévoir tous les cas de figure avec WeiDU...

    PS : J'ai volontairement réduit la taille de certains wallgroups car une image 1920x1920 passe moyennement sur le fofo. Et j'ai corrigé l'erreur de frappe.
    Dernière modification par Freddy_Gwendo ; 10/04/2018 à 22h54.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  4. #4
    Date d'inscription
    juillet 2003
    Localisation
    Plaisir
    Messages 
    6 990
    Cocrane, je pense que ta comparaison de coordonnées sera trop basique si tu la limites aux coordonnées des segments des polygones (je n'ai pas su déterminer si ton point de coordonnées [200, -95] est forcément une des extrémités du polygone). Il faudrait travailler sur les intersections de surface ou au moins parcourir les segments pour voir au dessus de quels wallgroups ils passent. Par exemple, si le point en haut à gauche du polygone C était un peu plus à gauche, le polygone recouvrirait aussi légèrement le wallgroup 3 sans qu'aucune extrémité du polygone ne s'y trouve.

    Question bête, Freddy : sais-tu si cela pose un problème si tu déclares qu'un polygone couvre un wallgroup alors qu'il n'y a pas d'intersection ?
    Dans le cas contraire, tu prends les coordonnées maximum dans les 4 directions (rectangle englobant ton polygone) et tu considères tous les wallgroups couverts. Ainsi le polygone C couvrait tous les wallgroups de ton extrait.
    Peu disponible
    Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
    Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !

  5. #5
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 419
    Malheureusement, je ne pense pas que ça fonctionnerait.
    En effet, mon problème est que le polygone de porte ouverte ne fonctionne pas (ne rend pas les créatures transparentes) s'il n'est pas renseigné dans le(s) wallgroup(s) concernés par son aire. C'est comme ça que je me suis aperçu qu'il manquait quelque chose à mon code.
    Problème qui ne se pose pas quand on ajoute le polygone avec DLTCEP (ce dernier recalcule le tout en sauvegardant).

    J'ai pensé utiliser le centre du polygone en plus des coordonnées de la bounding box, mais je crains que ça ne couvre pas tous les cas de figure.
    Dernière modification par Freddy_Gwendo ; 10/04/2018 à 23h15.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  6. #6
    Date d'inscription
    mars 2010
    Localisation
    Paris
    Messages 
    1 254
    Ok pour l'explication. Même si pour moi à un moment donné, le joueur doit faire un choix. A vouloir installer tous les mods de la terre, il finit par avoir des pb. C'est déjà une méga charge de temps et d'énergie pour un moddeur de faire une histoire et de la coder. Dc perso, je fais le mini sur ce point.

    Pour en revenir à ton pb. Oui effectivement si sur la droite passant entre 2 points du polygone, tu as plusieurs WallGroup à traverser, c'est plus chiant à gérer.


    J'écris à chaud
    1-
    Tu fais plein de points pour minimiser le risque sachant qu'une porte, ca reste de taille raisonnable par rapport à un wallgroup. (ça me semble le plus simple). Mais ça va pas te plaire. Car tu veux un script qui gère tous les cas. :-p

    2-
    Quand tu passes d'un indice de wallgroup "1 à 3" pour 2 points qui se suivent c'est que fatalement le 2 est impacté. Il faut gérer l'horizontale et la verticale plus les diagonales. Ca me semble être une usine à gaz. :-)

    3-
    Pour une carte, on a finalement des lignes et des colonnes de Wallgroup = tableau. J'ignore si tu peux avoir moyen d'avoir l'équivalent de ce quadrillage.
    Entre deux points, on est soit sur la même ligne. Soit sur la ligne du dessus ou du dessous. Si ce n'est pas le cas, il y a des Wallgroup impactés non identifiés.

    4-
    En gros, savoir pour chaque Wallgroup par quel autre wallgroup il est entouré. Si le 2nd WallGroup n'en fait pas parti alors c'est qu'il faut le déduire.

    5-
    Déduire la trajectoire de chaque droite entre 2 points de tes polygones (ca me fait penser aux équations du lycée) et ajouter des points réguliers pour les tester ensuite.


    Si j'ai d'autres idées farfelues, promis je reviens hanter ton post. :



    Cocrane qui n'a pas envie de modder ce soir.

  7. #7
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 419
    Des nouvelles du front : Pour chaque wallgroup, je vérifie que la bounding box de tous les polygones est contenue dans l'aire du wallgroup.

    1. Si oui, j'intègre les polygones au wallgroup concerné.
    2. Sinon, je lis chaque segment de chaque polygone et intègre les polygones aux wallgroups quand nécessaire.

    Ça couvre entre 95 et 98 % des cas sur une dizaine de cartes testées.

    Comme WeiDU ne sait pas lire les fractions, c'est compliqué de calculer la trajectoire d'un segment... Du coup, je cale pour les cas restants à traiter.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

Discussions similaires

  1. [SONS] Besoin d'aide pour modifier un fichier son (wav ou mp3)
    Par Freddy_Gwendo dans le forum Sons et musiques
    Réponses: 7
    Dernier message: 12/06/2017, 20h12
  2. [CRE] Quels outils utiliser pour modifier un fichier .CRE ?
    Par Pélagie dans le forum Créatures, Monstres et NPC
    Réponses: 5
    Dernier message: 08/04/2016, 15h22
  3. Réponses: 3
    Dernier message: 23/03/2016, 22h31
  4. Réponses: 7
    Dernier message: 24/05/2011, 12h40
  5. [BGT] Classes jumelées : recherche d'un mod pour modifier les règles
    Par la_marmotte dans le forum Baldur's Gate Reloaded : les mods TUTU et Baldur's Gate Trilogy
    Réponses: 6
    Dernier message: 27/12/2007, 22h29

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257