Página 3 de 12
Re: What about...UDMF Editor?
Enviado: Qui Jan 28, 2010 3:45 pm
por Drak[X]
Fabio914 escreveu:Realmente, não é nada otimizado se escrever todo um texto para representar cada setor, linha e vértice... Por exemplo, cada caractere tem tamanho de 1 byte, para representarmos o numero 1000000 gastamos 7 bytes, o que, se armazenado em memória (formato inteiro), gastariamos 4 bytes [isto sem levar em conta o texto que indica a que se refere este 1000000]. Mas isso não impede que tenhamos uma boa compactação, como a tabela ASCII tem 256 posições (ou seja, limitada) , uma compactação eficiente seria indicar quantas vezes aparece determinado caractere (assim teríamos 256 valores armazenados) e a posição XY que ele aparece no texto a cada vez (mais alguns números por caractere). Algo mais eficiente ainda (algo semelhante ao feito por compactadores como ZIP e RAR) é pegar palavras (ou até frases inteiras) com muita incidência no texto (no nosso caso, todas as palavras da descrição dos linedefs, sidedefs, sectors, things e vertex) e marcar quantas vezes estas se repetem (muitas vezes!) e armazenar a posição desta no texto. Assim não precisamos armazenar a mesma informação repetidas vezes, poupando memória...
Um exemplo:
O texto:
Código: Selecionar todos
vertex { // ID = 1
x=100.00;
y=200.00;
}
vertex { // ID = 2
x=120.10;
y=210.20;
}
Pode ser armazenado como (obs.: palavra seguida da incidência) :
Código: Selecionar todos
vertex 2 ID = 2 1 5 2 5 x= 2 y= 2 { 2 } 2 0. 4 0; 4 // 2
(mais a informação da posição de cada um)
Assim da pra se ter uma boa compactação de texto...
Agora vem o X da questão!!!
Será que usando a tabela UNICODE o resultado não seria mais eficiente!?
Acredito que sim, já que o UNICODE consegue representar uma quantidade incrivelmente maior de caracteres em relação a tabela ASCII.
Re: What about...UDMF Editor?
Enviado: Qui Jan 28, 2010 4:55 pm
por DU0
Mas e precisamos de mais caracteres?
Re: What about...UDMF Editor?
Enviado: Qui Jan 28, 2010 5:17 pm
por Logan MTM
Qual ocupa menos espaço?
Código: Selecionar todos
sector // 1
{
heightfloor = 32;
heightceiling = 160;
texturefloor = "GSTONE2";
textureceiling = "GSTONE2";
lightlevel = 128;
}
ou
Código: Selecionar todos
st // 1
{
hf = 32;
hc = 160;
tf = "GSTONE2";
tc = "GSTONE2";
ll = 128;
}
Simples.

Re: What about...UDMF Editor?
Enviado: Qui Jan 28, 2010 8:39 pm
por Fabio914
Logan MTM escreveu:Qual ocupa menos espaço?
Código: Selecionar todos
sector // 1
{
heightfloor = 32;
heightceiling = 160;
texturefloor = "GSTONE2";
textureceiling = "GSTONE2";
lightlevel = 128;
}
ou
Código: Selecionar todos
st // 1
{
hf = 32;
hc = 160;
tf = "GSTONE2";
tc = "GSTONE2";
ll = 128;
}
Simples.

Em termos de compactação a diferença não seria muita... Em vez de armazenarmos quantas vezes "heightfloor" apareceu, por exemplo, e em quais posições, estaríamos armazenando quantas vezes e posições "hf" apareceu. Não poupariamos 9 bytes (11 bytes de heightfloor - 2 bytes de hf) por repetição (pois compactando acabamos com a repetição), estaríamos poupando 9 bytes no geral, o que não é tão significante... Isso teria grande diferença se não compactarmos o texto, mas mesmo assim ainda ficaria um texto muito grande e pesado pois ainda temos milhares de setores, linedefs, sidedefs, things, vertex num mapa bem elaborado...
BTW: Que ferramenta faremos? Quem de fato pretende participar? ...
Re: What about...UDMF Editor?
Enviado: Qui Jan 28, 2010 11:39 pm
por Rico
1 caracter não é 8 bits?
Não me lembro agora.
Lembrando que um caractér contém 8 números na linguagem do computador.
Afinal. Fabio, entre em contato comigo no Google Talk.
Já que é muito provável que faremos em C++, darei uma pausa aqui no C# com o CHAT.
Pq eu não tenho nenhuma ideia de como funciona o UDMF, mas sei o nome ao menos. Pelo menos links para eu estudar seria bem vindo.
"Lendo"::: WOW
Re: What about...UDMF Editor?
Enviado: Sex Jan 29, 2010 1:22 am
por Logan MTM
Mas 8 bits são 1 byte. Não?
@Fabio
Olha esse tópico:
http://forum.drdteam.org/viewtopic.php?f=22&t=4725
Re: What about...UDMF Editor?
Enviado: Sex Jan 29, 2010 7:21 am
por Drak[X]
Rico escreveu:1 caracter não é 8 bits?
Não me lembro agora.
Lembrando que um caractér contém 8 números na linguagem do computador.
Afinal. Fabio, entre em contato comigo no Google Talk.
Já que é muito provável que faremos em C++, darei uma pausa aqui no C# com o CHAT.
Pq eu não tenho nenhuma ideia de como funciona o UDMF, mas sei o nome ao menos. Pelo menos links para eu estudar seria bem vindo.
"Lendo"::: WOW
Você não costuma visitar o portal né?
BOMBA!!! Segredo descoberto!!
No final deste artigo existem 3 links que devem ajudar você a entender melhor o UDMF.
Re: What about...UDMF Editor?
Enviado: Sex Jan 29, 2010 3:29 pm
por Fabio914
Rico escreveu:1 caracter não é 8 bits?
Não me lembro agora.
Logan MTM escreveu:Mas 8 bits são 1 byte. Não?
Exatamente!
Sim, usando a compactação os resultados de tamanhos serão semelhantes aos do formato Hexen. Mas algo que me preocupa é o seguinte: para ler um arquivo compactado eventualmente o programa deverá (poderá) descompacta-lo para memória RAM, então durante o "loading" do mapa o consumo de memória RAM pode ser imenso (enquanto se carrega e lê os dados do UDMF) o que pode fazer com que este formato não seje carregado em sistemas antigos (dependendo do mapa)... Não tenho certeza se isso pode ocorrer, eu não faço idéia de como foi feito o sistema de leitura dos pk3 no ZDoom...
@ALL:
Mas e ai pessoal... Alguma idéia/sugestão para começarmos?
Re: What about...UDMF Editor?
Enviado: Sex Jan 29, 2010 4:11 pm
por Logan MTM
Sugestão?
C++/C#
Re: What about...UDMF Editor?
Enviado: Sex Jan 29, 2010 6:18 pm
por Rico
Se eu sei bem, pode-se usar as duas linguagens.
Bom, o legal seria pegar os códigos do ZDOOM para ver como funciona PK3/PK7
Sugestão: Estudar a LIB ZLIB que é usada para descompactar PK3.
Se o loco colocar todos os mapas em 1 wad VAI SER UM CU descompactar sim.
Mas se o nego colocar 1 mapa para cada wad é mais leve.
Descompactar na memória é um procedimento, outro é no HD e deleta-lo após o uso. é o meu pensamento.
Afinal, não temos que primeiramente pensar no código que interprete o texto puro primeiro? (UDMF)