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 valioukha » Samedi 18 Juin 2011 à 19:24:28

Pour :

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

Change en :

local sortie = Output.new("Fichier", entry.name_out, "wb")
valioukha
 
Messages: 13
Âge: 37
Enregistré le: Mardi 14 Décembre 2010 à 23:23:01
Localisation: France, Sarthe
Genre: Homme

Re: Les pointeurs de Prinny 2

Message non lupar BahaBulle » Dimanche 19 Juin 2011 à 16:13:28

Ca m'apprendra à faire quelque vite fait sans tester (surtout que je n'ai pas trop l'habitude de l'API lua du hareng :p)

Et valioukha a rison pour le sortie ;)

Dès que j'ai 5 minutes, je teste mon code et le corrige.
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 » Lundi 20 Juin 2011 à 19:25:47

Bon, je jeté un oeil.

DarkCenobyte a écrit:Enfin en gros il repart à zéro tous les 4 pointeurs...

Ca c'est de ta faute, tu as déplacé la ligne "local num_pt = 1"

Voilà le code corrigé :
Code: Tout sélectionner
nameFileTable   = "ascii.tbl"

local list_files = {
   { name_in = "Demo00_jp.dat", name_out = "US-script05.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
   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 + 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 - adressScript
   fileScript:seek(adressScript, SEEK_SET)
   fileScript:read(bufferScript, sizeScript)

   local sortie = Output.new("Fichier", entry.name_out, "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 » Mardi 21 Juin 2011 à 18:32:19

Je viens de tester, ça marche :D ('fin il met plusieurs <FIN> à la fin du texte, mais ça peut-être les 00 qui dépasse quand j'ai sortie le fichier avec mon éditeur hexadécimal),
je regarderais demain à nouveau pour un moyen d'insérer, mais je suis vraiment pas douer en LUA... Sinon je pense que je vais aussi regarder un peu sur internet quelques tuto sur le langage LUA (juste les bases du trucs déjà, car je m'y retrouve quand même moins que dans un code en C je trouve).
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 » Mardi 21 Juin 2011 à 18:41:17

Les <FIN> en trop, ce doit être parce qu'il y a plusieurs 0 à la fin du fichier qui doivent servir d'alignement.

Le lua est assez simple mais je trouve que l'API du hareng n'est pas très facile d'utilisation.
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 » Lundi 27 Juin 2011 à 22:25:53

Bon, j'ai pas trop progressé dans le script d'insertion (j'ai rien fait qui marche enfaite x) ), mais je suis en pleine période de BAC (je passe ma dernière épreuve oral Mercredi), je m'y remettrais vers ce week end xD .
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 DarkCenobyte » Samedi 2 Juillet 2011 à 11:13:11

Bon alors toujours sur l'étape pour extraire les valeurs entre les pointeurs, j'ai modifier le code pour tenter de les récupérer et les mettre dans un autre fichier (car je vois pas trop où les mettre enfaite...) en me basant sur le readme_lua.txt du hareng-tool, et mon code ne fonctionne pas :oops: (je me suis rebasé sur le script d'extraction de départ pour l'instant car je le trouve plus simple là x) ):

Code: Tout sélectionner
nameFileOutput  = "Prinny2-script01.txt"
nameFileOutput2   = "Prinny2-data01.txt"
nameFileScript  = "test_hareng.dat"
-- nameFilePointer = "fichier2.bin"
nameFileTable   = "ascii.tbl"
nameFileTable2  = "asciiB.tbl"
adressScript    = 0x010C24
--adressPointer   = 0x0C
adressPointer   = 0x04
-- (first text only) sizeScript      = 0x2D
sizeScript      = 0x02429F
nb_pointer      = 2860
--nb_pt2 = 0

SEEK_SET = 0
SEEK_CUR = 1
SEEK_END = 2

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

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

-- 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

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

-- 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)

--EDIT 2/07/2011 : Récupération des 8 octets entre 4 pointeurs (zapper 16 octets).
--Positionnement début fichier:
fileScript:seek(adressPointer, SEEK_SET)
--Création d'un fichier de sortie
sortie2 = Output.new("Fichier", nameFileOutput2, "wb")
   --Récupérer les 8 octets
   for j = 1, 8 do
      fileScript:read(bufferData, 8)
      --Zapper 16 octets
      fileScript:seek(SEEK_CUR+16,SEEK_CUR)
   end
   Ext_ins.extraire(bufferData, tbl2, sortie2, table_pt2)

--FIN EDIT


J'ai du mal à trouver comment faire ce que je veux enfaite:
Dans la doc' , y a pas mal de fonction pour manipuler les pointeurs ou récupérer le texte, comme par exemple donner une taille à un pointeur, mais comme là c'est ni l'un ni l'autre... J'ai essayer de faire comme si c'était du texte sans pointeur (j'ai ajouter une table de pointeur vide)...
Mais je suis pas sûr de m'y prendre correctement :| ...
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 » Lundi 4 Juillet 2011 à 9:30:02

Et pourquoi tu veux les mettre dans un autre fichier ?

En fait, je ne comprends pas ce que tu veux faire.
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 » Lundi 4 Juillet 2011 à 18:14:33

... en gros j'aurais pas à toucher au script d'extraction... mais faire que le script d'insert récupère les valeurs en passage dans le premier fichier ?

Ce serais pas plus facile si je les exportais d'abord dans un autre fichier, et que le script d'insertion utilise alors les deux fichiers exporter (le texte et les valeurs là...) ?

'fin quand j'y pense là, ça m'a l'air compliqué dans les deux cas x) ...

J'ai commencé à mieux comprendre les scripts (les fonctions de l'API, ...) et le lua, mais j'ai du mal à comprendre le fonctionnement avec les variables i , j , k dans les boucles car j'avais jamais fait un truc comme ça en C... (ça doit être logique... mais j'ai pas capté la logique sur ça xD ...)
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 » Lundi 4 Juillet 2011 à 19:02:31

Ah oui, c'est vrai que tu as un système de pointeurs à la con.
Là, comme ça, j'ai pas d'idées pour gérer ça facilement et je n'ai pas la tête à réfléchir :p

DarkCenobyte a écrit: mais j'ai du mal à comprendre le fonctionnement avec les variables i , j , k dans les boucles car j'avais jamais fait un truc comme ça en C... (ça doit être logique... mais j'ai pas capté la logique sur ça xD ...)

Tu n'as jamais fait de boucle "for" en C : for (i = 1 ; i < 10 ; i++)... :shock:

Il s'agit juste d'itérateurs. Un moyen pour faire plusieurs fois la même chose.
Exemple avec ces 2 bouts de code qui font exactement la même chose.
Code: Tout sélectionner
list = {}
list[1] = fileScript:get()
list[2] = fileScript:get()
list[3] = fileScript:get()
list[4] = fileScript:get()

Code: Tout sélectionner
list = {}
for i = 1, 4 do
   list[i] = fileScript:get()
end
Avatar de l’utilisateur
BahaBulle
 
Messages: 280
Enregistré le: Lundi 20 Décembre 2010 à 18:18:17
Genre: Homme

PrécédenteSuivante

Retourner vers Sur le ROMhacking

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

x

#{title}

#{text}