Les pointeurs de Prinny 2

sur PSP, comment les calculer ?

Une question en rapport avec le ROMHacking ?
Dans cette section nous tenterons de vous conseiller ou de partager nos connaissances, bien entendu dans la limite de nos compétences et de notre disponibilité.

Re: Les pointeurs de Prinny 2

Message non lupar DarkCenobyte » Mercredi 15 Juin 2011 à 13:37:59

J'ai continuer à rechercher des trucs sur les valeurs entre, et j'ai trouvé que c'était lié au personnage qui parle:

02 C8 = Prinny/Asagi (sans avatar, pour le choix de la difficulté)

(102792FF) 04 C8 = Prinny (avatar paniqué / grande bulle de dialogue)
(152798FF) 03 C9 = Prinny (avatar inquiet / bulle de dialogue petite)
(1A270000) 04 CA = Telling Skeleton (sans avatar, grande bulle de dialogue)
(1F270000) 03 CA = Telling Skeleton (sans avatar, bulle de dialogue petite)
(...)
(29277417) 03 CA = Démon Suspect (bulle de dialogue petite)
(2E277617) 03 CA = Démon Suspect (avatar content / bulle de dialogue petite)
(33277217) 03 CA = Démon Suspect (avatar content / bulle de dialogue petite)
(382796FF) 0B C8 = Prinny (avatar ... plutôt inquiet / bulle de dialogue en "nuage" (arrondis)).
(...)
(42277117) 04 CA = Démon Suspect (avatar en colère ? / grande bulle de dialogue).
(47277517) 03 CA = Démon Suspect (avatar aggressif ? / petite bulle de dialogue).



Alors ces fameuses valeurs sont à mon avis lié aux personnages, aux expressions de leurs avatars, et enfin au bulle de dialogue...
Mais à part pour les bulles de dialogue où visiblement: 04 = grande bulle / 03 = petite bulle / 0B = bulle en nuage/arrondis , (et encore j'ai un doute, j'ai vue une commençant par 02... 'fin faudrait que je prenne des screenshots pour comparer ce serait plus simple...)

J'ai encore des doutes,
Si je me trompe pas, C8 et C9 s'applique à des Prinny (peut-être qu'un d'eux est le "héro", pour le différencier des autres...), et CA s'applique à un moment à l'épouvantail (sans avatar), et plus loins au démon suspect...
(et je pense que les valeurs qui précède ça, peuvent (quand elles sont différente de 0000) indiquer un avatar et son humeur..., je suis pas encore sûr, mais je pense que xxFF serait un avatar de Prinny , xx17 un avatar du démon suspect, et que les valeurs précédente = des émotions)


C'est possible que ces valeurs puissent indiqué des images venant d'un autre fichier de façon précise ? où c'est codé dans le jeu ou très compliqué à retrouver ?
(j'ai pas encore essayer d'extraire les images du jeux...)

edit: Bon j'ai encore des doutes sur ce que j'ai dit en gros, car j'ai du mal à me repérer entre les textes, ces valeurs, ... Mais je pense que je suis pas loin dans l'idée...
Avatar de l’utilisateur
DarkCenobyte
 
Messages: 20
Enregistré le: Mardi 14 Juin 2011 à 16:58:03
Genre: Non spécifié

Re: Les pointeurs de Prinny 2

Message non lupar BahaBulle » Mercredi 15 Juin 2011 à 14:05:26

C'est tout à fait possible que ce soit ça. Mais pour confirmer il faudrait faire des tests.

Si c'est possible, remplace une des valeurs par une autre existante et regarde la différence.
Avatar de l’utilisateur
BahaBulle
 
Messages: 280
Enregistré le: Lundi 20 Décembre 2010 à 18:18:17
Genre: Homme

Re: Les pointeurs de Prinny 2

Message non lupar DarkCenobyte » Jeudi 16 Juin 2011 à 13:49:50

Bon, je n'ai pas encore fait de test (un peu par flemme je l'avoue, car faut que je lance mon linux virtualisé pour recompressé le fichier, ... a chaque fois), mais j'ai pris en screenshot chaque dialogue du jeu jusqu'à un certain passage, et j'ai analysé les valeurs à chaques fois, et c'est impossible que ce soit le hasard, c'est obligatoirement les avatars des personnages vue que ça correspond à chaque fois dans le fichier hexadécimal et mes screenshots, enfaite, ce n'est pas deux valeurs entre les pointeurs mais 3 qui sont collé directement:

xx xx yy yy zz zz

xx xx = inconnu ? (cependant cette valeur augmente à chaque fois)
yy yy = avatar du personnage ( emotion / personnage )
zz zz = bulle de dialogue (taille/forme ???)

Alors pour xx xx , à mon avis comme ça augmente, ça doit pointer quelque part, peut-être dans un autre fichier ça j'en sais absolument rien... En tout cas au début ça augmente de 1 en 1 au menu du choix des options (5A 00, 5B 00, 5C 00, ...), puis dans les dialogues du jeu, ça augmente de 5 en 5 (10 27, 15 27, 1A 27, 1F 27, 24 27, ...)

Pour yy yy , j'en est repéré une partie, c'est bien l'avatar, les valeurs sont "émotion" puis "personnage" :

--LISTE AVATAR--
yy FF = Prinny

92 FF = Effrayé 1
98 FF = Inquiet 1
96 FF = Inquiet 2
91 FF = Désespéré/Lassé 1
9B FF = ... (à controler, j'ai pas pris le screenshot)
32 FF = Héro (inquiet)


--

yy 00 = Prinny (regarde vers la gauche)

6B 00 = Effrayé
68 00 = Inquiet 1
6A 00 = Inquiet 2
66 00 = Effrayé 2
67 00 = Rougit
CB 00 = Héro (rougit)
CE 00 = Héro (inquiet)
CD 00 = Héro (inquiet 2)
C9 00 = Héro (normal)

--

yy 17 = Démon suspect

74 17 = Normal 1
76 17 = Content 1
72 17 = Content 2 (étoilé)
73 17 = Content 3
75 17 = En colère 1
71 17 = Faché 1

--

yy FD = Etna

A1 FD = Furieuse 1
A0 FD = Normal 1
A6 FD = Méprisante 1

--

yy 09 = Flonne

CC 09 = Choquée 1
D2 09 = Regard enflammé 1
D3 09 = Joyeuse 1
CB 09 = Joyeuse 2 (étoilé)

--

00 00 = Sans Avatar


Et finalement pour zz zz , je suis QUASIMENT sûr que c'est la forme de la bulle/panneau/zone de texte utilisé, mais je n'ai pas encore cherché les valeurs.

Enfin, j'ai jeté un oeil au "hareng tool", mais je suis pas franchement à l'aise avec... Je sais pas si y serais pratique, car je ne sais pas si y a moyen de lui faire éviter ces valeurs (de plus je n'ai strictement aucune connaissance en LUA...)... Donc en gros, soit je me tape tout à la main... Soit faut que je me remette un peu à la programmation (mais ça va prendre du temps avant que j'arrive à faire un truc pour ça en C je pense :| ...), car dans le fond, comme c'est toujours "4 pointeurs" "les valeurs xx yy zz" "4 pointeurs" (...), la logique du fichier est pas trop tordu...

edit: Sinon j'ai finalement fait un petit test, et ça confirme ce que je pensais:
(bon le perso est collé sur le texte, mais j'ai aussi changé la bulle, c'est pas celle prévu à cet endroit je pense, donc c'est ptet pour ça, et de plus... Il n'y a normalement pas d'avatar à cet endroit...) :

Image
Avatar de l’utilisateur
DarkCenobyte
 
Messages: 20
Enregistré le: Mardi 14 Juin 2011 à 16:58:03
Genre: Non spécifié

Re: Les pointeurs de Prinny 2

Message non lupar BahaBulle » Jeudi 16 Juin 2011 à 18:26:18

DarkCenobyte a écrit:Enfin, j'ai jeté un oeil au "hareng tool", mais je suis pas franchement à l'aise avec... Je sais pas si y serais pratique, car je ne sais pas si y a moyen de lui faire éviter ces valeurs (de plus je n'ai strictement aucune connaissance en LUA...)... Donc en gros, soit je me tape tout à la main... Soit faut que je me remette un peu à la programmation (mais ça va prendre du temps avant que j'arrive à faire un truc pour ça en C je pense :| ...), car dans le fond, comme c'est toujours "4 pointeurs" "les valeurs xx yy zz" "4 pointeurs" (...), la logique du fichier est pas trop tordu...

Personnellement, je te conseille d'essayer l'API lua du hareng. Ce n'est pas très compliqué surtout si tu connais un peu le C.

En plus, je vais te mâcher le travail. Voilà un script que j'avais fait pour Lyan. Il faut l'adapter à ton cas parce que Lyan avait les pointeurs dans un autre fichier que les textes mais le plus gros est déjà fait.
Script pour extraire
Script pour insérer
Avatar de l’utilisateur
BahaBulle
 
Messages: 280
Enregistré le: Lundi 20 Décembre 2010 à 18:18:17
Genre: Homme

Re: Les pointeurs de Prinny 2

Message non lupar DarkCenobyte » Vendredi 17 Juin 2011 à 14:19:45

J'ai commencé à y jeter un oeil, et j'ai commencer à essayer de modifier un peu le script d'extraction:

Code: Tout sélectionner
nameFileOutput  = "US-script05.txt"
nameFileScript  = "test_hareng.dat"
-- nameFilePointer = "fichier2.bin"
nameFileTable   = "ascii.tbl"
adressScript    = 0x010C24
adressPointer   = 0x0C
sizeScript      = 0x2D
-- (complet) sizeScript      = 0x02429F
nb_pointer      = 4

SEEK_SET = 0
SEEK_CUR = 1
SEEK_END = 2

-- Ouverture du fichier contenant les pointeurs
fileScript   = Fichier.new()
table_pt     = Table_pointeurs.new()
tbl          = Table_ext_ins.new()
bufferScript = Buffer.new()

fileScript:open(nameFileScript, "rb")
fileScript:seek(adressPointer, SEEK_SET)

-- Récupération des pointeurs
for i = 1, nb_pointer do
   local pointer = 0
   for j = 1, 4 do
      pointer = pointer + shift_l(fileScript:get(), 8 * (j - 1))
   end

   -- On zap le nombre d'octets
   for j = 1, 4 do
      fileScript:get()
   end

   local pt = Pointeur.new()
   pt:numero(i)
   pt:valeur(pointer)
   pt:taille(4)

   table_pt:ajouter(pt)
end

-- Chargement de la table
tbl:ouvrir(nameFileTable)

-- Récupération des données à extraire
-- fileScript:open(nameFileScript, "rb")
fileScript:seek(adressScript, SEEK_SET)
fileScript:read(bufferScript, sizeScript)

sortie = Output.new("Fichier", nameFileOutput, "wb")

-- Extraction du script
Ext_ins.extraire(bufferScript, tbl, sortie, table_pt)


Et sa me donne un fichier qui contient ça:

Code: Tout sélectionner
<PT0001>
Prinny<00>This level is for real<00><PT0002>
demons, dood!<00><0A>


Alors que si j'ai bien compris les résultat que dois donné le hareng-tool, le résultat devrait-être:

Code: Tout sélectionner
<PT0001>
Prinny<00>
<FIN>

<PT0002>
This level is for real<00>
<FIN>

<PT0003>
demons, dood!<00>
<FIN>

<PT0004>
<0A>
<FIN>


non ?

Ensuite, là je l'ai appliqué sur juste une section "entre" les valeurs des avatars/bulle/ ...
Et je me pose 2 questions (dans le but de pouvoir extraire tout le script d'un coup):

1- Déjà j'ai regardé le fichier readme-lua.txt du hareng-tool, pour voir si y avais moyen de lui dire "tous les x pointeurs, zappe y octets dans la recherche des pointeurs", mais j'ai pas trouvé de fonction pour ça, ensuite la valeur "nb_pointer", c'est bien le nombre de pointeur au total ? ... Si oui, en supposant que je veuille extraire tout le script, il y a un moyen de connaitre le nombre de pointeur présent dans le script ?

2- Je les ai déjà croisé dans le script de compression du romhacker italien, que j'avais modifié (mais faut dire que j'étais loin d'avoir compris le fonctionnement de son script, j'ai juste reconnu des valeurs que j'ai remplacé en regardant aussi à quel variable/fonction elles étaient liés...), mais j'ai du mal à comprendre certains truc dans le passage qui concerne la recherche des pointeurs justement: "i" et "j" servent à quoi ?
(je pense que si je veux faire que hareng-tool évite des valeurs à partir d'un certains point par là, il faut que je modifie quelque chose de ce coté là).


(sinon, on va dire que j'ai des bases en C, mais juste des bases, et j'ai jamais été trop doué avec la manipulation de fichier...)
Avatar de l’utilisateur
DarkCenobyte
 
Messages: 20
Enregistré le: Mardi 14 Juin 2011 à 16:58:03
Genre: Non spécifié

Re: Les pointeurs de Prinny 2

Message non lupar BahaBulle » Vendredi 17 Juin 2011 à 15:35:16

Déjà, ça donne quelque chose de potable. Faut affiner maintenant.

Dans ta table, il faut ajouter :
00=<FIN>\n\n

2. i et j sont juste des itérateurs pour pouvoir parcourir tous les pointeurs.

1. Pour nb_pointer :
- soit tu écris le nombre de pointeur en dur dans le script (comme dans le mien)
- soit tu trouves un moyen de le calculer
- soit tu ne te bases pas sur un nombre mais tu lis les pointeurs jusqu'à atteindre une adresse
- soit il est indiqué dans le fichier

Pour ce dernier cas :
On ne sait pas à quoi correspondent les 4 premiers octets. Passons.
Nos infos commencent donc en 0x04 avec, vraisemblablement, un numéro.
Les textes commencent en 0x10C24. Donc nos "pointeurs" font 0x10C24 - 0x04 = 0x10C20 octets (=68640)
Ensuite, en prenant les premières infos, on a 8 octets suivi de 4 pointeurs de 4 octets donc, en tout, 24 octets.
Prenons comme hypothèse que tout soit organisés de la même façon, donc 24 octets par bloc de dialogue.
En partant de ce principe, cela voudrait dire qu'on peut trouver le nombre de pointeur en divisant la taille des infos par le nombre d'octets par bloc de pointeurs.
Donc 68640 / 24 = 3860 ou 0x0B2C en hexa et......quel hasard, c'est exactement la même valeur que nos 4 tout premiers octets ;)

Apparemment, le schéma est identique pour chaque bloc de pointeurs et les 4 premiers octets du fichier sont le nombre de blocs.
Je gère déjà ça dans mon script, dans la partie "Récupération des pointeurs". Faut juste l'adapter à ton cas (j'ai pas testé) :
Code: Tout sélectionner
-- Récupération des pointeurs
local num_pt = 1
for i = 1, nb_pointer do
   -- On zap les 8 premiers octets
   for j = 1, 8 do
      fileScript:get()
   end

   -- On lit les 4 pointeurs qui suivent
   for j = 1, 4 do
      local pointer = 0
      for k = 1, 4 do
         pointer = pointer + shift_l(fileScript:get(), 8 * (k - 1))
      end

      local pt = Pointeur.new()
      pt:numero(num_pt)
      pt:valeur(pointer)
      pt:taille(4)
      num_pt = num_pt + 1

      table_pt:ajouter(pt)
   end

end
Avatar de l’utilisateur
BahaBulle
 
Messages: 280
Enregistré le: Lundi 20 Décembre 2010 à 18:18:17
Genre: Homme

Re: Les pointeurs de Prinny 2

Message non lupar DarkCenobyte » Vendredi 17 Juin 2011 à 17:08:44

Oki :) ,
alors j'ai changé les valeurs du script (j'ai donc mis 3860 à nb_pointer), mais ça m'a défigurer le début:
Code: Tout sélectionner
<PT0001>
Prinny<FIN>

<PT0002>
This level is for real<FIN>

<PT0003>
dem<PT11538>
<PT11606>
<PT11814>
ons, dood!<FIN>

<PT0004>
<0A><FIN>

<PT11596>
<PT0005>
<PT11650>
<PT11827>
<PT11923>
<PT11978>
<PT12277>
<PT12490>
<PT12913>
<PT13937>
<PT14076>
<PT14131>
<PT14444>
Prinny<FIN>

<PT0006>
This is the recommended<FIN>

<PT0007>
level for beginners, doo<PT12394>
d.<FIN>

<PT0008>
<0A><FIN>

<PT0009>
Pr<PT12434>
inny<FIN>

<PT0010>
T<PT12297>
his is for all you<FIN>


En mettant une plus faible valeur ça allais mieux, mais les pointeurs ne vont pas jusqu'au bout, avec une valeur de 1 pour nb_pointeurs, j'ai remarqué qu'il m'en affichait 4 , j'ai donc divisé 3860 / 4 = 965 , mais en allant jusqu'à 3860 pointeurs, il y a encore du texte après sans pointeurs :/ ...

Donc je pense qu'il crée soit des pointeurs à des endroits où il n'y en a pas, soit y a un autre problèmes xD .

Alors enfaite j'ai remarqué qu'à certains endroit du texte, au lieu d'avoir 00 0A 00 à la fin d'un texte et un pointeur sur le 0A , on avait à la place 00 00 00 , et un pointeur dirigé sur le troisième 00 , je me suis dit que ça pouvais être le problème...
(il y a un exemple au niveau de "Press the .. button to [00] Jump. Press it again in.the air to Double Jump. [00][00][00] Press the down [00] directional button near [00] an edge to Hang Down.[00][00][00] " , je pense que ça concerne surtout les panneaux du "tutoriel" du jeu, mais il y a peut-être d'autre texte comme ça).

edit: Pourtant, ça à l'air correcte dans le texte:

Code: Tout sélectionner
<PT0026>
Press the <C3><97> button to<FIN>

<PT0027>
Jump. Press it again in<FIN>

<PT0028>
the air to Double Jump.<FIN>

<FIN>

<PT0029>
<FIN>

<PT0030>
Press the down<FIN>

<PT0031>
directional button near<FIN>

<PT0032>
an edge to Hang Down.<FIN>

<FIN>

<PT0033>
<FIN>



... Je vois pas du tout où ça colle pas :shock:

edit2: Bon enfaite le problème est réglé, j'ai recalculé, tu avais fais une faute de frappe que j'avais directement repris xD : le nb_pointer = 2860 et non 3860 .

Bon, le texte a l'air parfaitement extrait, maintenant je vais jeter un coup d'oeil au script d'insertion :D .
Avatar de l’utilisateur
DarkCenobyte
 
Messages: 20
Enregistré le: Mardi 14 Juin 2011 à 16:58:03
Genre: Non spécifié

Re: Les pointeurs de Prinny 2

Message non lupar BahaBulle » Vendredi 17 Juin 2011 à 17:59:52

Ah oui, j'ai raté la touche 2 :D

Mais tu n'as pas besoin de faire le calcul, l'info est dans le fichier, autant la lire directement avec le code.
Donc afin d'éviter de faire un script par fichier, il ne faut pas avoir de ligne nb_pointer = 2860
Avant de récupérer les pointeurs, tu peux mettre ça :
Code: Tout sélectionner
local nb_pointer
for i = 1, 4 do
      nb_pointer = nb_pointer + shift_l(fileScript:get(), 8 * (i - 1))
end
Avatar de l’utilisateur
BahaBulle
 
Messages: 280
Enregistré le: Lundi 20 Décembre 2010 à 18:18:17
Genre: Homme

Re: Les pointeurs de Prinny 2

Message non lupar BahaBulle » Vendredi 17 Juin 2011 à 18:24:25

Bon, vu que je viens d'en faire un pour valioukha, autant continuer sur ma lancée :p

Avec ce script, tu pourras gérer tous les fichiers qui fonctionnent de la même façon.
Il suffit de mettre la liste des fichiers dans la variable list_files comme c'est déjà fait.

Je n'ai pas testé alors il se peut qu'il y ait des petits soucis. Mais bon l'idée est là, tu devrais pouvoir te débrouiller pour corriger.


Pour l'insertion, c'est un peu plus compliqué vu qu'il faut récupérer les valeurs qu'on a zappé à l'extraction. Mais bon, rien d'insurmontable ;)

Code: Tout sélectionner
nameFileTable   = "ascii.tbl"

local list_files = {
   { name_in = "test_hareng.dat", name_out = "US-script05.txt" },
   { name_in = "prout.dat"      , name_out = "US-script01.txt" },
}


SEEK_SET = 0
SEEK_CUR = 1
SEEK_END = 2


for _, entry in ipairs(list_files) do
   -- Initialisation des variables
   local fileScript   = Fichier.new()
   local table_pt     = Table_pointeurs.new()
   local tbl          = Table_ext_ins.new()
   local bufferScript = Buffer.new()

   fileScript:open(entry.name_in, "rb")

   -- Récupération de la taille du Fichier
   fileScript:seek(0, SEEK_END)
   local sizeFile = fileScript:tell()
   fileScript:seek(0, SEEK_SET)

   -- Récupération du nombre de pointeurs
   local nb_pointer = 0
   for i = 1, 4 do
      nb_pointer = nb_pointer + bit.lshift(fileScript:get(), 8 * (i - 1))
   end

   -- Récupération des pointeurs
   local num_pt = 1
   for i = 1, nb_pointer do
      -- On zap 8 octets
      for j = 1, 8 do
         fileScript:get()
      end

      -- On lit les 4 pointeurs qui suivent
      for j = 1, 4 do
         local pointer = 0
         for k = 1, 4 do
            pointer = pointer + bit.lshift(fileScript:get(), 8 * (k - 1))
         end

         local pt = Pointeur.new()
         pt:numero(num_pt)
         pt:valeur(pointer)
         pt:taille(4)
         num_pt = num_pt + 1

         table_pt:ajouter(pt)
      end
   end

   -- Chargement de la table
   tbl:ouvrir(nameFileTable)

   -- Récupération des données à extraire
   local adressScript = nb_pointer * 24 + 4
   local sizeScript = sizeFile - sizeScript
   fileScript:seek(adressScript, SEEK_SET)
   fileScript:read(bufferScript, sizeScript)

   local sortie = Output.new("Fichier", nameFileOutput, "wb")

   -- Extraction du script
   Ext_ins.extraire(bufferScript, tbl, sortie, table_pt)

   fileScript:close()
   bufferScript:clear()
end
Avatar de l’utilisateur
BahaBulle
 
Messages: 280
Enregistré le: Lundi 20 Décembre 2010 à 18:18:17
Genre: Homme

Re: Les pointeurs de Prinny 2

Message non lupar DarkCenobyte » Samedi 18 Juin 2011 à 11:12:17

Alors j'ai pas réussit à utiliser ton code pour récupérer automatiquement le nombre de pointeurs sur mon code (en l'utilisant, il considérait qu'il n'y a aucun pointeur apparemment, et n'en mettais aucun en sortie).

Et sur ton code complet j'ai eu plusieurs bugs à corriger et maintenant que le hareng-tool ne renvoi pas d'erreurs quand je le lance, il y a deux problèmes avec:

Code: Tout sélectionner
nameFileTable   = "ascii.tbl"
sizeScript      = 0

local list_files = {
   { name_in = "test_hareng.dat", name_out = "US-script05.txt" },
--   { name_in = "prout.dat"      , name_out = "US-script01.txt" },
}


SEEK_SET = 0
SEEK_CUR = 1
SEEK_END = 2


for _, entry in ipairs(list_files) do
   -- Initialisation des variables
   local fileScript   = Fichier.new()
   local table_pt     = Table_pointeurs.new()
   local tbl          = Table_ext_ins.new()
   local bufferScript = Buffer.new()

   fileScript:open(entry.name_in, "rb")

   -- Récupération de la taille du Fichier
   fileScript:seek(0, SEEK_END)
   local sizeFile = fileScript:tell()
   fileScript:seek(0, SEEK_SET)

   -- Récupération du nombre de pointeurs
   
   local nb_pointer = 0
   for i = 1, 4 do
   nb_pointer = nb_pointer + shift_l(fileScript:get(), 8 * (i - 1))
   end

   -- Récupération des pointeurs
   for i = 1, nb_pointer do
   local num_pt = 1
      -- On zap 8 octets
      for j = 1, 8 do
         fileScript:get()
      end

      -- On lit les 4 pointeurs qui suivent
      for j = 1, 4 do
         local pointer = 0
         for k = 1, 4 do
            pointer = pointer + shift_l(fileScript:get(), 8 * (k - 1))
         end

         local pt = Pointeur.new()
         pt:numero(num_pt)
         pt:valeur(pointer)
         pt:taille(4)
         num_pt = num_pt + 1

         table_pt:ajouter(pt)
      end
   end

   -- Chargement de la table
   tbl:ouvrir(nameFileTable)

   -- Récupération des données à extraire
   local adressScript = nb_pointer * 24 + 4
   local sizeScript = sizeFile - sizeScript
   fileScript:seek(adressScript, SEEK_SET)
   fileScript:read(bufferScript, sizeScript)

   local sortie = Output.new("Fichier", "Test.txt", "wb")

   -- Extraction du script
   Ext_ins.extraire(bufferScript, tbl, sortie, table_pt)

   fileScript:close()
   bufferScript:clear()
end


Déjà, dans la fin " local sortie = Output.new("Fichier", "Test.txt", "wb") ", il ne récupérais pas le nom en sortie qui était définis en haut dans la liste, donc j'ai donner vite-fait un nom pour que ça passe vue que pour l'instant il ne traite qu'un fichier...
Et en sortie il me fait:

Code: Tout sélectionner
<PT0001>
Prinny<FIN>

<PT0002>
This level is for real<FIN>

<PT0003>
demons, dood!<FIN>

<PT0004>
<0A><FIN>

<PT0001>
Prinny<FIN>

<PT0002>
This is the recommended<FIN>

<PT0003>
level for beginners, dood.<FIN>

<PT0004>
<0A><FIN>

<PT0001>
Prinny<FIN>

<PT0002>
This is for all you<FIN>

<PT0003>
diaper-wearing noobs, dood.<FIN>

<PT0004>
<0A><FIN>

<PT0001>
Asagi<FIN>


Enfin en gros il repart à zéro tous les 4 pointeurs...


Enfin à la limite perso, je pense que je peux rester sur le code sans la détection auto, la repéré moi même à chaque fois et l'écrire, c'est moins automatisé mais comme il n'y a pas beaucoup de fichier dans ce jeu (tout quasiment est dans Demo00_jp.dat) ça ne me gène pas trop...

Sinon j'ai aussi essayé d'écrire un code d'insertion, mais là deux gros problèmes:

1- Le calcul des pointeurs dans ton script dépend de la taille du fichier, donc faut que le texte lui même soit écrit dans le fichier avant... Donc je vois pas comment faire pour lui faire écrire au début du fichier avant le texte.

2- Pour les valeurs "hors pointeurs", j'ai pensé à deux chose, d'abord ce serait de les extraire dans un autre fichier, puis de les réinsérer ensuite lors de l'insertion... Mais j'ai pas été capable de faire un script pour les extraire... (je dois pas être doué avec le lua :oops: ), et mon autre idée, ça aurait été de "ré-écrire par dessus" le fichier original ou au moins une copie de ce dernier et d'éviter les valeurs "hors pointeurs", mais de ce que j'avais vue en manip' de fichier en C, le mode "wb" supprime tout ce qui était dans le fichier avant, donc ça ne vas pas... Et je ne sais pas si c'est possible d'écraser une partie sans tout effacer directement...
Avatar de l’utilisateur
DarkCenobyte
 
Messages: 20
Enregistré le: Mardi 14 Juin 2011 à 16:58:03
Genre: Non spécifié

PrécédenteSuivante

Retourner vers Sur le ROMhacking

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 11 invités

x

#{title}

#{text}