Shit Fliez Index du Forum Shit Fliez
Bienvenue sur le forum officiel des Shit Fliez !
 
 AccueilAccueil  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

[Probl?me] Chargement des combats depuis le moteur de FF7

 
Poster un nouveau sujet   Répondre au sujet    Shit Fliez Index du Forum -> Edition de Final Fantasy VII
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
Fremen^SF
GDB des Shit Fliez


Inscrit le: 21 Mar 2003
Messages: 849
Localisation: Versailles

MessagePosté le: 06 Nov 2003 10:01    Sujet du message: [Probl?me] Chargement des combats depuis le moteur de FF7 Répondre en citant

Je cr?e un nouveau topic pour exposer un probl?me relativement important qui concerne indirectement les ?diteurs (VB et l'?diteur en PHP/CGI). Je n'attends pas de r?ponse et je n'oblige personne ? lire ce post, l'objet est seulement d'expliquer de la fa?on la plus simple possible le probl?me qu'il faudra r?soudre avant d'avoir une chance d'obtenir des ?diteurs fonctionnels.

En soi, cela ne change rien au d?veloppement, que ce soit pour Jopfleger ou pour Speedy. Le probl?me touche mon programme, qui extrait/recr?e un fichier scene.bin : dans certains cas assez fr?quents (que l'on ne peut h?las pas pr?voir ? l'avance), mon programme ne pourra pas g?n?rer un fichier SCENE.BIN valide.

Je fais quand m?me une explication d?taill?e ici, ne serait-ce que pour avoir un pense-b?te sous la main. Clin d'oeil Et ainsi en comprenant mieux le probl?me, si vous souhaitez en savoir plus, vous pourrez peut-?tre proposer des solutions.


------------------------------------------------------------


Je commence l'explication depuis le d?but.
Chaque fichier SCENE.BIN est constitu? de blocs de taille fixe (0x2000 octets). Chaque bloc contient un nombre variable de "file" compress?es. On a 34 blocs dans le SCENE.BIN fran?ais, et 33 blocs dans le SCENE.BIN am?ricain.

Voici maintenant l'origine du probl?me : prenons le premier file (file0).
1) Lorsque je l'extrais d'un SCENE.BIN original (de la version fran?aise), file0.gz fait 710 octets.
2) Je le d?compresse, je le modifie, je rajoute plein d'informations (par exemple je mets des noms de monstre plus long, des valeurs l? o? il n'y en avait pas, je rajoute diff?rents scripts)
3) Je recompresse mon fichier file0. Oh surprise, il fait 4272 octets (c'est ce que j'ai obtenu dans le test que j'ai fait, en exag?rant volontairement)

Jusque l? rien d'anormal. Un fichier plus complexe se compresse forc?ment moins bien.
Maintenant regardons notre fichier SCENE.BIN original. Le premier bloc de 0x2000 octets contient 11 "file" (file0, file1, file2, file3, file4, file5, file6, file7, file8, file9, file10).
Donc, mon programme, lorsqu'on va l'appeler pour recr?er un nouveau SCENE.BIN en utilisant notre nouveau "file0", verra qu'il n'a pas la place de mettre les 11 premiers "file" dans le m?me bloc : il ne va ?crire que file0, file1, file2, file3, file4, file5 dans le premier bloc de 0x2000 octets, et il va ?crire les suivants dans les blocs suivants.

Voici une sch?matisation de ce test. Chaque num?ro en d?but de ligne correspond au num?ro de bloc, et les num?ros qui suivent correspondent ? un file.

Code:

// SCENE.BIN original

01 1  2  3  4  5  6  7  8  9 10 11 // file0 - file10
02 1  2  3  4  5  6  7 // file11 - file17
03 1  2  3  4  5  6  7 // etc...
04 1  2  3  4  5  6  7  8
05 1  2  3  4  5  6
06 1  2  3  4  5  6
07 1  2  3  4  5  6  7  8
08 1  2  3  4  5  6  7  8
09 1  2  3  4  5  6  7  8  9 10 11 12
10 1  2  3  4  5  6  7  8
11 1  2  3  4  5  6  7  8  9
12 1  2  3  4  5  6  7  8
13 1  2  3  4  5  6  7
14 1  2  3  4  5  6  7  8
15 1  2  3  4 [5] 6  7  8 // entre crochets : file117
16 1  2  3  4  5  6  7  8  9
17 1  2  3  4  5  6  7  8
18 1  2  3  4  5  6  7  8
19 1  2  3  4  5  6  7  8
20 1  2  3  4  5  6  7  8
21 1  2  3  4  5  6  7
22 1  2  3  4  5  6
23 1  2  3  4  5  6  7  8
24 1  2  3  4  5  6  7
25 1  2  3  4  5  6  7  8
26 1  2  3  4  5  6  7  8
27 1  2  3  4  5  6  7  8
28 1  2  3  4  5  6
29 1  2  3  4  5
30 1  2  3  4
31 1  2  3  4
32 1  2  3  4  5  6
33 1  2  3  4  5  6
34 1  2  3  4  5  6  7  8  9 10 11

// SCENE.BIN modifi?
// (Avec un file0.gz plus gros)

01 1  2  3  4  5  6 // file0 - file5
02 1  2  3  4  5  6  7  8  9 // file6 - file14
03 1  2  3  4  5  6 // etc...
04 1  2  3  4  5  6  7  8
05 1  2  3  4  5  6  7
06 1  2  3  4  5
07 1  2  3  4  5  6  7  8
08 1  2  3  4  5  6
09 1  2  3  4  5  6  7  8  9 10 11
10 1  2  3  4  5  6  7  8  9 10
11 1  2  3  4  5  6  7  8
12 1  2  3  4  5  6  7  8  9
13 1  2  3  4  5  6  7
14 1  2  3  4  5  6  7
15 1  2  3  4 <5> 6  7  8 // entre <> : file111
16 1  2 [3] 4  5  6  7  8 // entre crochets : file117
17 1  2  3  4  5  6  7  8
18 1  2  3  4  5  6  7  8
19 1  2  3  4  5  6  7  8  9
20 1  2  3  4  5  6  7  8
21 1  2  3  4  5  6  7  8
22 1  2  3  4  5  6
23 1  2  3  4  5  6  7
24 1  2  3  4  5  6  7
25 1  2  3  4  5  6  7
26 1  2  3  4  5  6  7  8
27 1  2  3  4  5  6  7  8
28 1  2  3  4  5  6  7  8
29 1  2  3  4  5  6
30 1  2  3  4  5
31 1  2  3  4
32 1  2  3  4
33 1  2  3  4  5  6  7
34 1  2  3  4  5  6  7
35 1  2  3  4  5  6  7  8



Voici (enfin) le probl?me : j'ai pris l'exemple du file117. C'est le seul file qui contient le Zolom de Midgar, ce qui me permet de faciliter mes tests.
Dans le SCENE.BIN d'origine, file117 est situ? dans le 15?me bloc, et c'est le 5?me fichier de ce bloc.
Dans le SCENE.BIN modifi?, file117 est situ? dans le 16?me bloc, et c'est le 3?me fichier de ce bloc.
Lorsque je lance une partie de FF7 avec mon SCENE.BIN modifi?, ? la place du Zolom de Midgar, je tombe sur Cosse de cerveau. En regardant de plus pr?s, oh surprise, je me rends compte que le combat contre ce monstre correspond pr?cisemment au file111, qui est le 5?me fichier du 15?me bloc.
Autrement dit, pour charger les donn?es d'un combat, le moteur de FF7 ne se rep?re pas par rapport au num?ro du file, mais ? la "position" du file dans un bloc d?termin? ? l'avance. Triste

Cela signifie que, pour peu qu'un file soit trop gros, les suivants seront d?cal?s et donc que les combats du jeu seront compl?tement fauss?s. Je n'ai h?las pas pu m'en rendre compte avant, ?tant donn? que dans mes tests je n'avais jamais eu ? modifier un nombre cons?quent de valeurs.

Concernant les ?diteurs, il y a donc pour le moment deux solutions :
1) Modifier une quantit? limit?e de valeurs dans chaque file et prier pour que ?a ne modifie pas trop la taille du file compress?. Par exemple s'en arr?ter aux caract?ristiques des monstres.
2) Trouver o?, parmi les fichiers de FF7, sont stock?es les "coordonn?es" des file (par exemple bloc 15 file 5 dans le cas du Zolom de Midgar). Je suppose lourdement qu'elles sont incluses dans FF7.EXE dans le cas de la version PC, mais c'est loin d'?tre gagn?.
_________________
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
jopfleger



Inscrit le: 07 Oct 2003
Messages: 48
Localisation: Strasbourg

MessagePosté le: 06 Nov 2003 10:39    Sujet du message: Répondre en citant

Cela ne me surprend pas, car je pensais que les rangs devaient ?tre la cl? d'indexation du moteur de combat, et c'est pourquoi j'ai toujours consid?r? qu'il fallait changer un minimum de choses et en tous cas, ne pas "empaqueter" diff?remment les descripteurs de monstres. En d'autre termes, il faut retrouver dans le nouveau scene.bin le meme nombre de blocs, cela va de soi, mais aussi le m?me nombre de files par bloc.
Les d?veloppeurs de Square n'avaient en fait pas d'autre choix, puisqu'on n'a pas d'autre cl? qui rende les files, subfiles uniques, sauf ? parfaire.
Mais d?couvrir o? sont stock?es les relations entre les moments du sc?nario et les invocations des scenes de combat peut s'av?rer impossible, ? moins de trouver une s?quence qui doit forc?ment ?tre croissante (les pas du scenario) et une info en correspondance (cette info pouvant ?tre une table puisque certaines scenes de combat sont al?atoires, au m?me point du sc?nario on peut avoir des ennemis ? rencontrer qui sont randomis?s et ce seront donc des files diff?rents qui seront charg?s.
Mais est-il utile de "pousser" les investigations aussi loin? Sauf ? faire plaisir ? FWS et ? Fremen qui aimeraient renconter Ruby et Emerald sur un m?me plateau. Mais l? on risque effectivement de rencontrer des difficult?s et ? l'heure qu'il est, on est incapable de dire si elles seront surmontables.
Pour ma part, je continue en modifiant des carac simples, cela permet de garder exactement les m?mes files dans chaque bloc, et il y a d?j? de quoi se faire plaisir.
Au fait, Fremen, avais-tu essay? un nomat?ria?
_________________
Aimant s'instruire, partager le go?t des voyages et l'acquisition de connaissances, se sentant responsable ("spectateur engag?", Raymond Aron). Ma caract?ristique c'est l'?merveillement devant la diversification de toutes les formes de vie.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail
Fremen^SF
GDB des Shit Fliez


Inscrit le: 21 Mar 2003
Messages: 849
Localisation: Versailles

MessagePosté le: 06 Nov 2003 13:31    Sujet du message: Répondre en citant

Jopfleger a écrit:
Mais d?couvrir o? sont stock?es les relations entre les moments du sc?nario et les invocations des scenes de combat peut s'av?rer impossible, ? moins de trouver une s?quence qui doit forc?ment ?tre croissante (les pas du scenario) et une info en correspondance (cette info pouvant ?tre une table puisque certaines scenes de combat sont al?atoires, au m?me point du sc?nario on peut avoir des ennemis ? rencontrer qui sont randomis?s et ce seront donc des files diff?rents qui seront charg?s.


Bien vu, ce seraient effectivement des tables qui seraient charg?es de la correspondance. Tu m'as donn? l'id?e de faire un petit programme qui cherche cette table, o? chaque ?l?ment serait s?par? par un ?cart de taille fixe (0 octet, 1 octet, ...), dans des fichiers que je suspecte de contenir cette information. Il fallait d?j? imaginer ce que pouvait contenir cette table.

Parmi les 5 tables que j'ai test?es, j'ai test? la table suivante :

unsigned char bloc[34] = {0,11,18,25,33,39,45,53,61,73,81,90,98,105,113,121,130,138,146,154,162,169,175,183,190,198,206,214,220,225,229,233,239,245};

o? l'on pourrait retrouver le num?ro de bloc ? partir du num?ro de "file" recherch? en utilisant la formule :
bloc[n]<=numero_file<bloc[n+1]

Et bien apr?s avoir d?compress? et scann? kernel.bin (un autre fichier de FF7) avec ce programme, je suis pr?cisemment tomb? sur ces valeurs. Maintenant il reste ? voir si elles jouent bien le r?le qu'on pourrait supposer, mais en tout cas merci pour cette id?e, cela permettra peut-?tre d'?conomiser des dizaines d'heures de recherche.
Bref, le temps de trouver un moyen de modifier proprement kernel.bin et de tester ?a, et je reposte pour dire si ?a fonctionne.

Mais d?couvrir o? sont stock?es les relations entre les moments du sc?nario et les invocations des scenes de combat peut s'av?rer impossible,

Justement, ce matin en faisant une recherche sur le forum de Qhimm pour voir si je pouvais y trouver des indices, j'ai trouv? un post de The Saint qui explique en d?tail comment les combats et les "fields" (autrement dit tout ce qui se passe dans le jeu en dehors de la world map, par exemple ? Kalm, ? Corel ou dans le crat?re Nord). Ces informations sont stock?es dans le fichier flevel.lgp (un gros fichier de 130Mo qui contient entre autre tous les "fonds d'?cran"), et elles contiennent entre autre la fr?quence des combats, le num?ro de la "scene" (ce qu'il appelle Enemy Type dans son post) et la probabilit? de rencontrer tel ou tel autre "Enemy". Note au passage qu'il y a 4 "scenes" dans chaque "file", je l'ai v?rifi? r?cemment, donc on retrouve facilement le num?ro de "file" ? partir du num?ro de "sc?ne", si on se comprend Clin d'oeil
A titre d'information, j'ai pens? que ?a pouvait t'int?resser m?me si ce n'est pas vraiment utile pour nos projets. Donc voici le lien vers post en question.

Mais est-il utile de "pousser" les investigations aussi loin?

Pour te r?pondre, je vais quand m?me essayer, surtout qu'il y a une bonne piste qui se trace, mais en effet ce n'est pas primordial, donc si je vois que ?a prend trop de temps je laisserai tomber.

Au fait, Fremen, avais-tu essay? un nomat?ria?

Et non Sourire
Je trouve que c'est un bon d?fi ? se faire, demandant beaucoup de tactique, le probl?me est que je ne prends pas vraiment plaisir ? jouer ? un jeu si je dois m'imposer des r?gles. Ca peut para?tre bizarre, et vrai dire je ne comprends pas pourquoi moi non plus ^^
C'est d'ailleurs pour ?a que je me suis int?ress? ? l'?dition de FF7, car ?a permettrait de rendre le jeu plus dur sans soucis de contraintes.
_________________
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
jopfleger



Inscrit le: 07 Oct 2003
Messages: 48
Localisation: Strasbourg

MessagePosté le: 06 Nov 2003 14:45    Sujet du message: Répondre en citant

Bravo pour ton mess, Fremen.
J'ai l'impression que rien n'est insurmontable en ce qui te concerne (hormis les contraintes que tu as du mal ? accepter ?!)
J'ai ?t? tr?s int?ress? mais aussi tr?s surpris de voir que le fichier flevel.lgp avait d?j? ?t? analys?.
Trouver des infos pertinentes dans 130 Mo de binaire, c'est ahurissant.
A ce compte-l?, on pourrait peut-?tre songer ? soudoyer un d?veloppeur de Square?
Mais je pense que m?me si tu as trouv? des s?quences et les tables en rapport, c'est le d?but d'une piste.
Mais j'ai vu aussi un petit post de Speedy qui te rappelle que tu as d'autres obligations au niveau ?tudes.
S'il se permet de dire cela c'est qu'il te conna?t bien et c'est certainement en bonne camaraderie, alors ne n?glige pas les conseils de tes amis.
_________________
Aimant s'instruire, partager le go?t des voyages et l'acquisition de connaissances, se sentant responsable ("spectateur engag?", Raymond Aron). Ma caract?ristique c'est l'?merveillement devant la diversification de toutes les formes de vie.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail
Fremen^SF
GDB des Shit Fliez


Inscrit le: 21 Mar 2003
Messages: 849
Localisation: Versailles

MessagePosté le: 07 Nov 2003 1:06    Sujet du message: Répondre en citant

Mais j'ai vu aussi un petit post de Speedy qui te rappelle que tu as d'autres obligations au niveau ?tudes.
S'il se permet de dire cela c'est qu'il te conna?t bien et c'est certainement en bonne camaraderie, alors ne n?glige pas les conseils de tes amis.


Oui, il a 100 fois raison, mais je ne suis pas encore en situation d'?chec. Je souhaitais seulement atteindre certains objectifs pour ce projet avant de me relancer au maximum sur mes cours. Car ? vrai dire, je suis incapable de faire deux choses ? la fois, et laisser ce projet (pour ma part) en stand-by, sans avoir fournit un script cgi correct et un serveur MySQL op?rationnel ? Speedy, sans que tu aies un programme fonctionnel sous la main pour modifier les donn?es de monstres pour ton ?diteur et sans avoir fil? le moindre coup de main ? FWS pour le d?cryptage de SCENE.BIN, ?a m'aurait franchement g?n?. Ce projet j'en r?ve presque depuis que j'ai rejou? ? FF7 en 98 et que j'ai trouv? ce jeu trop facile et trop identique ? ma premi?re partie. Maintenant j'ai la conscience tranquille, m?me si tout est loin d'?tre fini, je sais maintenant que rien ne pourra nous emp?cher de faire des ?diteurs fonctionnels.

Donc pour ma part, je crois que je vais en rester l? pour le moment sur ce projet. Je dois faire mes preuves (? la fac) en Janvier, et je sais que deux mois ?a passe tr?s vite et que la fac ne me laissera pas une quatri?me chance (oui oui je triple ma deuxi?me ann?e actuellement Confus ). Quoi qu'il en soit, m?me si ce n'?tait peut-?tre pas dit dans ce but, je vais suivre vos conseils. Je vais profiter de la semaine de vacances scolaires ? venir (notre fac est en retard ^^) pour me sevrer et me remettre de bon pied pour la rentr?e, et je me limiterai dor?navant ? jeter un oeil ? l'avancement des trois travaux en cours (?diteur en VB, ?diteur en php/cgi, et d?cryptage de SCENE.BIN). J'esp?re seulement que tout le monde comprendra bien que ce n'est pas par mauvaise volont? (d'ailleurs ce n'est pas l'envie qui me manque de continuer jusqu'au bout), mais simplement ? cause du fait que lorsque j'?cris une ligne de programme, je ne peux pas m'emp?cher d'?crire la suivante, et ainsi de suite Neutre Un jour je crois qu'un bon psy ne me ferait pas de mal d'ailleurs Mort de rire

Je pars donc en "vacances" Samedi et je serai par cons?quent beaucoup moins pr?sent ? partir de ce moment. N?anmoins si tout va bien, je pourrai de nouveau contribuer d?s F?vrier, si mes r?sultats le permettent. Je m'excuse d'avance de tous vous laisser sur un projet en cours, mais vu le nombre de personnes de mon entourage qui me poussent ? reprendre des activit?s plus utiles pour mon avenir direct, je crois que je vais suivre le conseil pour de bon.

Trouver des infos pertinentes dans 130 Mo de binaire, c'est ahurissant.

En r?alit?, ce fichier n'est pas si complexe que ?a : tu as un index au d?but, qui pointe sur tous les "fields" du jeu.
- Chaque field repr?sente un lieu ("int?rieur de l'auberge de Kalm, rez-de-chauss?e", "int?rieur de l'auberge de Kalm, ?tage", "Maison d'Elmyra", etc...).
- Ces fields sont en fait des fichiers compress?s. Une fois d?compress?s, on se rend compte qu'ils sont eux-m?me constitu?s de sections (les pointeurs se trouvent au d?but de chaque fichier field). Ces sections se trouvent donc facilement.

La grosse difficult? ?tait donc de trouver le r?le de chaque section (il doit y en avoir une dizaine), mais une fois que c''est trouv? pour un field, cela s'applique ? tous les autres field. Apr?s c'est s?r, rien que comprendre le sens de la section 7 (celle que The Saint d?crit) c'est un boulot important. Je ne comprends d'ailleurs toujours pas l'utilit? de ces "root values" qu'il d?crit, pourquoi Square se sont-ils sentis oblig?s d'additionner des valeurs constantes ? chaque num?ro de sc?ne ?

Mais je pense que m?me si tu as trouv? des s?quences et les tables en rapport, c'est le d?but d'une piste.

Sur ce point, j'ai pu v?rifier, les valeurs incluses dans kernel.bin correspondent effectivement ? ces valeurs de bloc. Dans un tableau unsigned char bloc[64] sont stock?es les num?ros de file situ?s au d?but de chaque bloc, i.e. :
Bloc01 : bloc[0] = 0x00
Bloc02 : bloc[1] = 0x0B
Bloc03 : bloc[2] = 0x12
etc...
Donc par la suite, si l'on souhaite permettre des choses assez couteuses en espace, par exemple rajouter des sorts (et leurs noms) ? un monstre, complexifier les scenes de combat, ce sera possible. Evidemment nous n'en sommes pas l? Clin d'oeil

Petite parenth?se, concernant la version PSX, on peut patcher l'image CD avec KERNEL.BIN de la m?me fa?on que pour SCENE.BIN. J'ai pu v?rifier ?a tout ? l'heure. Si quelqu'un en a utilit?, je pourrais l'adapter et le mettre en ligne demain.
_________________
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
Speedy^SF
Shit Fliez


Inscrit le: 21 Mar 2003
Messages: 745
Localisation: Troyes

MessagePosté le: 10 Nov 2003 0:14    Sujet du message: Répondre en citant

TRES TRES joli travail de recherche fremen
L? je trouve que tu ( je ne dis pas "on" car moi je ne fais plus rien ces derniers temps :] ) as fait un sacr? travail de recherche
Je trouve que ta d?cision concernant tes ?tudes est la bonne
Donc, bon courage pour la suite Sourire

Voili voilou Sourire
_________________
Speeeeeeddyyyyyyyyyyy !!!!!!
Personnal Website
Team Website
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Shit Fliez Index du Forum -> Edition de Final Fantasy VII Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001 phpBB Group
trevorj :: theme by ~// TreVoR \\~
Traduction par : phpBB-fr.com