Pular para o conteúdo principal
2008-07-23: finalmente, o programa funciona! Nesta parte final o que fizemos foi criar o método geraStr(), que como o nome fala, vai gravar o arquivo STR.

- primeiro instanciamos rafOut, rafOut = new RandomAccessFile(fileNamePath+".str", "rw");, que vai gerar um arquivo ao final chamado “nome.str.str”.

- em rafOut.writeShort(Short.reverseBytes(totalPonteiros)); estamos escrevendo em primeiro lugar o ponteiro de ponteiros, hehe, que é um short com a quantidade de ponteiros que existe no arquivo. Detalhe, que para colocar de volta no arquivo, temos que inverter os bytes para a forma original.

- depois temos um laço que percorrerá o array de RegistraPonteiro, lista[], pegando as informações, short ponteiro e byte[] conteúdo, gravando-as em sequencia no arquivo. Novamente, temos que inverter o short ponteiro para gravar de forma correta:
for ( i = 0; i < totalPonteiros; i++){
rafOut.writeShort(Short.reverseBytes(lista[i].getPonteiro()));
rafOut.write(lista[i].getConteudo());
}

O que importa mesmo é isso, o resto são besteiras que vou testando...

public void geraStr() {
try {
rafOut = new RandomAccessFile(fileNamePath+".str", "rw");
String titulo = this.getFrame().getTitle();
this.getFrame().setTitle(titulo+" salvando STR...");

rafOut.writeShort(Short.reverseBytes(totalPonteiros));//escreve a quantidade de ponteiros
for ( i = 0; i < totalPonteiros; i++){
rafOut.writeShort(Short.reverseBytes(lista[i].getPonteiro()));
rafOut.write(lista[i].getConteudo());
}

this.getFrame().setTitle(titulo+" salvando STR... OK!");
this.getFrame().setTitle(titulo);
//rafOut.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(StrEditorView.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ioe){
Logger.getLogger(StrEditorView.class.getName()).log(Level.SEVERE, null, ioe);
}
}

Ah, a classe RegistraPonteiro():
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package streditor;

/**
*
* @author Administrator
*/
public class RegistraPonteiro {
private short ponteiro; //aqui temos o ponteiro, que é o tamanho do bloco
private byte[] b = new byte[ponteiro]; //aqui vamos guardar o bloco de bytes deste ponteiro

/**
* Aqui vamos passar o valor de ponteiro
* @param sh
*/
public void setPonteiro(short sh){
this.ponteiro = sh;
}
/**
* Aqui passamos o valor do array de bytes do conteúdo
* @param b
*/
public void setConteudo (byte[] b){
this.b = b;
}
/**
* retornamos o valor em ponteiro
* @return
*/
public short getPonteiro (){
return this.ponteiro;
}
/**
* retornamos o valor do array byte
* @return
*/
public byte[] getConteudo (){
return this.b;
}

RegistraPonteiro(short p, byte[] b){
this.ponteiro = p;
this.b = b;
}
}

Ainda vou deixar o programinha mais funcional e lógico, mas já dá para trabalhar com as STRs. Resumindo, este programinha:

- Abre um arquivo STR, lê toda sua estrutura, quantidade de ponteiros, ponteiro e conteúdo, e passa para um array de RegistraPonteiro.

- Faz a leitura do array que contém as informações e joga numa área de texto para ser editada.

- A cada movimento de teclado ou clique de mouse, dispara métodos para atualizar linhas e cálculos de ponteiro/conteúdo, gravando os novos valores no array RegistaPonteiro que continha as informações.

- Gera um novo arquivo .str, gravando a quantidade de ponteiros, seguida pelos ponteiros e seus conteúdos, conforme ocorrem no array RegistraPonteiro.

- Gera também um arquivo .txt do que está na área de texto.

Testei a funcionalidade, carregando um arquivo str, percorrendo com o teclado e clicando (apenas para ativar os métodos atualizadores) o arquivo e salvando o str. Depois com o UltraEdit foi só comprarar os arquivos, gerado e original em modo byte para ver se ocorria alguma diferença. No início estava ocorrendo um erro no cálculo dos novos ponteiros, mas logo vi o que era e foi corrigido.
Depois, testei mesmo o StrEditor em ação, abri o arquivo que tinha traduzido manualmente à muito tempo, base.str, modifiquei “Automapa” para “Mapa”, salvei, gerei um novo arquivo .JAR e testei no emulador. Daí foi só correr pro abraço...


Antes e depois, de forma prática e sem traumas! Finalmente!

Comentários

Postagens mais visitadas deste blog

Gamasutra's Postmorten: RiverMan Media's MadStone

Aqui vão os meus comentários sobre este postmortem. O jogo em questão, MadStone, foi desenvolvido para a plataforma WiiWare, vindo de um antigo sonho de publicar um jogo para Nintendo (dos fundadores da RiverMan). MadStone é um puzzle 2d, onde as peças vão caindo (assim como tetris) e que custa U$8.00 no WiiWare. Antes de publicar um jogo para WiiWare, a desenvolvedora havia já desenvolvido outros dois jogos casuais para PC, Cash Cow e Primate Panic. Tela do jogo MadStone Bom, vamos às dicas deixadas pelos desenvolvedores: O que funcionou: 1. Correr atrás da Nintendo: Entre contatar a Nintendo e se tornar um desenvolvedor autorizado, os desenvolvedores tiveram que correr um pouco atrás. A primeira lição é justamente essa, não é fácil correr atrás e muitas vezes temos que sair de nossa zona de conforto para conseguir as coisas. 2. Plataforma 2D: A decisão de desenvolver um jogo 2D foi tomada por algumas facilidades como ferramentas de arte mais simples, como o photoshop; Pouco código...

GameDev Tutorial - Basic Circle Chain Engine Using Unity3D Part 1

Circle Chain ( http://www.emanueleferonato.com/stuff/circle_chain/ ) is a simple game developed in 2007 by Emanuele Feronato ( http://www.emanueleferonato.com ) as a monetization test in Flash Games. In fact it's based on Boomshine ( http://www.k2xl.com/games/boomshine/ ) Emanuele has since, ported his game tutorial for lots of platforms: AS3: (complete)  http://www.emanueleferonato.com/2012/02/20/circle-chain-ported-to-as3-with-commented-source-code-available-ready-to-jump-to-the-iphone/ Game Maker: (basic)  http://www.emanueleferonato.com/2012/06/07/circle-chain-engine-made-with-game-maker/ Construct2 HTML5:  http://www.emanueleferonato.com/2012/03/14/html5-version-of-circle-chain-engine-using-scirras-construct2/ Corona SDK:  http://www.emanueleferonato.com/2012/02/24/basic-circle-chain-engine-using-corona-sdk/ Gideros Studio:  http://www.emanueleferonato.com/2012/04/12/basic-circle-chain-engine-using-gideros-studio/ Stencyl:  http://www.emanueleferonato.com/2012/02/29/ba...

E.T. the Extra-Terrestrial em 3 níveis

E.T. o Extra-Terrestre E.T. o Extra-Terrestre, de 1982, é um consagrado filme co-produzido e dirigido por Steven Spielberg, que fez parte da minha infância. Assisti novamente depois de uns 15 anos e nem preciso dizer que foi nostálgico.