lekao25
(usa FreeBSD)
Enviado em 23/01/2009 - 10:57h
Olá pessoal,
Sou novo no fórum e gostaria de parabenizar a todos pelo excelente conteúdo disponibilizado.
Sou iniciante em C++, tive aula na facu e tenho algumas dúvidas sobre o "programa" que estou tentando fazer. Vamos la...
Vou apresentar o "projeto", de repente se alguém se interessar...
Projeto Code Veronica BR - PS2
Gosto muito de games e comecei a jogar o "Resident Evil Code Veronica" para Play2. Me interessei pela idéia de passar as legendas do jogo para portugês, como tambem nomes de itens e descrições.
Então para fazer isso instalei um editor hexadecimal e fui abrindo os arquivos do jogo, até achar o arquivo que tem os textos.
Modifiquei o arquivo pelo editor hexa, inseri em uma ISO que fiz do jogo, gravei e rodei no Play2. Então................ Funcionou!!! Após várias tentativas e testes, verifiquei os padrões dentro do arquivo, como por exemplo início de uma frase, nome de item, maiuscula e minuscula e que só se pode alterar dentro do mesmo espaço de letras que a frase ou palavra tem.
Como o arquivo aberto em hexa é muito grande, eu vou fazer um programa que leia o arquivo em hexa, converta letra por letra em hexa para uma forma legível (de acordo com a tabela correspondência que montei), imprima o texto na tela e na linha abaixo eu escreva o texto em português, e converta novamente (de acordo com a tabela correspondência que montei) para hexa e vá salvando em um novo arquivo.
Logo no iníco encontrei problemas, não estou conseguindo abrir o arquivo em hexadecimal...
Na verdade queria fazer uma funcção que fosse percorrendo o arquivo e jogasse o conteúdo que está entre os hexa "ff ff" (são os separadores) para um vetor, onde ficariam armazenadas as frases em hexa.
O código mais perto que consegui foi esse
http://www.vivaolinux.com.br/scripts/verFonte.php?codigo=3516&arquivo=viewhex.c , mas além de não funcionar (compilei no XP com Borland C++ 4, as linhas com '{FONTE}' deram erro, então apaguei) e abrir só 17 linhas hexa do arquivo, não quero imprimir tabela na tela... Se alguém conseguir ver porque esse código não abre totalmente o arquivo e puder postar aqui ficarei muito grato, pois posso tentar modificá-lo para meus objetivos.
#include <stdio.h>
void byteToHexa (unsigned char b, char* hex);
void intTohex (unsigned long int b, char* hex);
int main (int argc, char* argv[])
{
FILE *arq;
char buf[3];
int contByteLin=0;
unsigned long int contLin=1;
char pos [9];
int f;
if (argc!=2)
{
printf ("Parametro incorreto.\n");
printf ("Informe apenas o nome do arquivo\n");
return 1;
}
if (!(arq=fopen(argv[1],"r")))
{
printf ("Nao foi possivel abrir o arquivo!\n");
return 1;
}
printf (" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");
printf (" -----------------------------------------------\n");
printf ("00000000 | ");
while (f=fread(buf,1,1,arq))
{
if (contByteLin==16)
{
contByteLin = 0;
printf ("\n");
if ((contLin % 0x10) == 0)
{
printf (" -----------------------------------------------\n");
printf (" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");
printf (" -----------------------------------------------\n");
}
intTohex (contLin++, pos);
printf ("%s | ",pos);
}
byteToHexa (buf[0],buf);
printf ("%s ",buf);
contByteLin ++;
}
printf ("\n");
close (arq);
}
void byteToHexa (unsigned char b, char* hex)
{
char vet[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int r;
int i;
r = b % 16;
i = (b - r)/16;
hex[0] = vet[i];
hex[1] = vet[r];
// hex[2] = '{FONTE}';
}
void intTohex (unsigned long int b, char* hex)
{
char vet[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
unsigned long int r;
r = b % 0x10; hex[7] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[6] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[5] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[4] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[3] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[2] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[1] = vet[r]; b = b >> 0x4;
hex[0] = vet[b];
// hex[8] = '{FONTE}';
}
Obrigado pessoal