Noticias:

SMF - Just Installed!

Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Abenhor

#1
[quote user="Lepastur" post="41332"]Picar en qué? La verdad es q no m cosco  :whistling: [/quote]
A ver, aparte de probar lo de las imágenes, escoger estas era un modo de que alguien  :bash:  creyese que ya se había logrado una traducción nueva completamente funcional, cuando en realidad las imágenes que he puesto son capturas del juego original (para DOS). Osea, no son falsas, pero pretendían engañar...  :jester2:
#2
[quote user="Lepastur" post="41329"]Ah, entonces es un fake tuyo?[/quote]
Falsas no son, son auténticas, las originales.  :tongue:
#3
[quote user="Lepastur" post="41325"]no veo a santo de qué vienen las imágenes q has compartido con nosotros  :confused:[/quote]
Tenía que probar con alguna, y tal como le he reconocido a Balder, trataba de que alguien picase (creyera que son de una traducción nueva, distinta de la original).  :whistling:
#4
[quote user="Balder" post="41320"]¿Se trata de la tradu original no? :unsure:[/quote]
Sí  :laugh:
Como el lanzapedrolos no me funcionará hasta que se sincronice la lista de usuarios con la del portal, estaba probando si el script permitía mostrar en el portal imágenes del exterior (ya veo que sí), a la vez que mostraba una forma "creativa" de hacer miniaturas, y de paso esperaba que alguien picase, pero has estado rápido.  :tongue:
#5
Pincha en las imágenes para verlas en grande.













#6
Ya está actualizado el enlace en Celestial Heavens.
#7
Ya está decodificado:  :clap:

[code linenumbers=false]
*****************************************
Decodificación de líneas
líneas de 26 péxeles de ancho (39 -14 +1)
si dato < 80h pintar pixel
si dato = 80h fin de línea
si dato > 80h saltar (dato -80h) píxeles
*****************************************

linea1 {
        80           // Fin de línea
      }
linea2 {
        91              // Saltar 17 píxeles (se resta 80h), desde el comienzo del bloque, no de la línea.
        01 02 03        // pintar 3 píxeles
        81              // Saltar 1 pixel (se resta 80h)
        04 05           // pintar 2 píxeles
        89              // Saltar 9 píxeles (se resta 80h)
        02 03           // pintar 2 píxeles
        81              // Saltar 1 pixel (se resta 80h)
        06 05 07        // pintar 3 píxeles
        80              // Fin de línea
      }
linea3 {
        90              // Saltar 16 píxeles (se resta 80h), desde el comienzo del bloque, no de la línea.
        08 09 03        // pintar 3 píxeles
        82              // Saltar 2 píxeles (se resta 80h)
        01 0A           // pintar 2 píxeles
        88              // Saltar 8 píxeles (se resta 80h)
        09 03           // pintar 2 píxeles
        82              // Saltar 2 píxeles (se resta 80h)
        01 0A 0B 07     //
        80              // Fin de línea
      }
linea4 {
        8F              // Saltar 15 píxeles (se resta 80h), desde el comienzo del bloque, no de la línea.
        0C              // pintar 1 pixel
        81              // Saltar 1 pixel (se resta 80h)
        07 09 01        // pintar 3 píxeles
        81              // Saltar 1 pixel (se resta 80h)
        07 05 07        // pintar 3 píxeles
        87              // Saltar 7 píxeles (se resta 80h)
        08 04 01        // pintar 3 píxeles
        81              // Saltar 1 pixel (se resta 80h)
        0D 07 0E 0C 0F  // pintar 4 píxeles
        80           // Fin de línea
      }
[/code]
#8
Imagino que te vendrá bien si te paso la imagen boy0 "arreglada" a su tamaño real.

#9
Muy breve, te adelanto un poco más. A la tarde miraré otro poco.

[code linenumbers=false]
/************************************
* Formato cmp usado en I.M. Meen    *
* Fichero *1.cmp                    *
* Imagen pequeña, de color indexado *
************************************/

04 bytes - nnnnnnnn - longitud (tamaño del fichero cmp -4)
02 bytes - nnnn     - ancho del bloque (ancho en pixels de la imagen)
02 bytes - nnnn     - alto del bloque (alto en pixels de la imagen)
02 bytes - nnnn     - ¿margen superior?
02 bytes - nnnn     - alto de la imagen
02 bytes - nnnn     - ¿margen izquierdo?
02 bytes - nnnn     - ancho de la imagen
01 bytes - nn       - nColores (máximo 128)
nColores bytes      - colores usados
variable            - líneas codificadas


****************
Ejemplo Boy0.cmp
****************

0000 - 5A000000 - 90 (tamaño del fichero -4)
0004 - 3800     - 56 (ancho del bloque)
0006 - 3E00     - 62 (alto del bloque)
0008 - 1C00     - 28 (primera línea a pintar, comenzando a contar en cero)
000a - 1F00     - 31 (última línea a pintar, comenzando a contar en cero)
000c - 0E00     - 14 (primer pixel a pintar en cada línea, comenzando a contar en cero)
000e - 2700     - 39 (último pixel a pintar en cada línea, comenzando a contar en cero)
0010 - 10       - 16 (número de colores usados)
0011 - 004C47E64AD64BD7D849D3D5AAD9ACA8 (los colores usados)
0021 - 2500     - direccionLinea28 -4 (inicio en 0029)
0023 - 2600     - direccionLinea29 -4 (inicio en 002a)
0025 - 3500     - direccionLinea30 -4 (inicio en 0039)
0027 - 4500     - direccionLinea31 -4 (inicio en 0049)
0029 -          - linea1 { 80 }
002a -          - linea2 { 91 01 02 03 81 04 05 89 02 03 81 06 05 07 80 }
0039 -          - linea3 { 90 08 09 03 82 01 0A 88 09 03 82 01 0A 0B 07 80 }
0049 -          - linea4 { 8F 0C 81 07 09 01 81 07 05 07 87 08 04 01 81 0D 07 0E 0C 0F 80 }
[/code]

Luego miro a ver qué veo en la codificación de líneas, aunque una captura para comparar sería bien recibida...  :cool:
#10
Anteayer he contactado con Valeriy, administrador de "Age of Heroes" y su foro "Heroes Community", para pedirle que incluya en su sección de enlaces uno a mi nueva web Taberna Berserker, y de paso le he notificado que el enlaces que apunta a La Torre de Marfil no está operativo.
Ya me ha respondido, que le avise cuando tenga algo más de contenido en mi web, y que ya ha corregido el enlace a La Torre de Marfil.
Hoy he enviado un mensaje similar al staff de "Celestial Heavens" y su foro "Round Table", con las mismas dos cuestiones.
Supongo que si La Torre de Marfil está enlazada en más webs habría que hacer una ronda pidiendo que se actualicen los enlaces.
Entretanto, mañana me gustaría dedicarle un rato a crear una sección de enlaces en TB, cuando acabe con las villas. Supongo que no hay ningún problema en que incluya a La Torre, ¿verdad?
#11
[quote user="Balder" post="41281"]Bien, aquí te dejo lo que ya tengo del proyecto. [/quote]

No lo he mirado a fondo todo, pero con el primer fichero boy0.cmp y la imagen que me entregas boy0.tga he logrado descifrarlo, con alguna lagunilla, a pesar de que la captura que me has puesto no se corresponde con el tamaño "real" de la imagen. ¿Me has puesto trampas?  :wink:
Ya me imagino que se trata de una deformación por la resolución usada por el windows, o el dosbox, o algo así...
Te pongo lo que he sacado en claro y me acuesto ya, que es tardísimo (o muy temprano, según se mire).

[code linenumbers=false]
/************************************
* Formato cmp usado en I.M. Meen    *
* Imagen pequeña, de color indexado *
************************************/

04 bytes - nnnnnnnn - longitud (tamaño del fichero cmp - 4)
02 bytes - nnnn     - ancho (ancho en pixels de la imagen)
02 bytes - nnnn     - alto (alto en pixels de la imagen)
02 bytes - 0000     - desconocido1
02 bytes - nnnn     - desconocido2 (¿alto - 1?)
02 bytes - 0000     - desconocido3
02 bytes - nnnn     - desconocido4 (¿ancho - 1?)
01 byte  - nn       - nColores (número de colores usados)
nColores bytes      - array: colores{byte nColores} (índices de color usados, probablemente de una paleta externa)
alto*2 bytes        - array: direccionLineas{word alto} (desplazamiento -4, desde el inicio del fichero, a los datos de los píxeles)
alto*ancho bytes    - array: pixeles{byte ancho*alto} (tabla de píxeles de cada línea)

****************
Ejemplo Boy0.cmp
****************
0000 - 04 bytes - 520e0000 - 3666 (3670 bytes de tamaño de fichero)
0004 - 02 bytes - 3800     - 56 píxeles de ancho
0006 - 02 bytes - 3e00     - 62 píxeles de alto
0008 - 02 bytes - 0000     - desconocido
000a - 02 bytes - 3d00     - 61 ¿alto - 1?
000c - 02 bytes - 0000     - desconocido
000e - 02 bytes - 3700     - 55 ¿ancho - 1?
0010 - 01 byte  - 39       - 57 colores
0011 - 57 bytes - paleta de colores ¿índices de una paleta externa de 256 colores?
                 67 08 C7 DB D9 D8 5D 5C 5B 59 60 5F 58 B0 DA C8 AF AC DC AA A7 AE A6 A5 A8 A3 A1 A4 C9 AB A9 B2 AD B1 D6 4B 47 E6 4A D3 49 4C D7 CB CC 65 64 62 68 61 5E 66 43 45 63 42 48
004a - 124bytes - alto * 2 bytes (en este caso 62*2 = 124)
                 {direccionLineas:
                   array[1..alto] of word; (tabla de offsets de las líneas, sin contar los 4 primeros bytes del tamaño de fichero)
                 }
                 C200 FA00 3201 6A01 ... 720D AA0D E20D 1A0E
00c6 - 56 bytes - linea1:
                 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00fe - 56 bytes - linea2:
                 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00
0136 - 56 bytes - linea3:
                 00 01 01 01 01 01 01 01 01 01 01 01 01 02 01 01 01 01 02 01 01 01 01 01 01 01 01 01 01 01 01 01 02 01 01 01 01 01 01 01 01 01 02 02 01 01 01 01 01 01 01 01 02 02 01 00
016e - 56 bytes - linea4:
                 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00
[... más líneas ...]
0d76 - 56 bytes - linea59:
                 00 33 2E 36 36 2F 2F 0A 2F 2F 36 2D 00 2F 31 0A 0B 31 2D 28 35 35 35 34 34 37 37 37 34 34 35 35 35 35 35 28 2D 0A 0A 2F 2F 30 30 2D 36 2F 31 2F 2F 2F 36 36 2E 2D 33 00
0dae - 56 bytes - linea60:
                 00 36 36 36 2F 0A 31 2F 0A 2F 2F 36 2E 00 00 2F 31 0A 31 2D 28 28 38 35 35 35 35 35 35 35 35 35 28 28 28 2D 0A 0A 2F 2F 30 2D 2E 36 2F 2F 2F 31 2F 31 2F 36 36 36 2E 00
0de6 - 56 bytes - linea61:
                 00 36 36 31 31 2F 0A 31 31 0A 2F 36 36 2E 2E 00 00 2F 0A 31 2D 2D 28 38 38 38 38 28 28 28 28 28 28 2D 2D 0A 2F 2F 2D 30 2D 2E 36 2F 2F 31 31 0A 2F 0A 31 2F 36 36 36 00
0e1e - 56 bytes - linea62:
                 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
// fin de fichero
[/code]

La paleta está claro que no está incluída en este fichero, así que supongo que se usará una paleta "normalizada", o una común a todos los gráficos.
Quedan 4 datos desconocidos, aunque seguramente se trate de los márgenes, o de alguna historia semejante...
Si hace falta, miro otro par de ficheros, a ver en qué se diferencian en esos datos.
#12
Es una interesante aportación. Enhorabuena.
#13
[quote user="Balder" post="41273"]No problemo, te echaré un cable con la programación. Así de repente se me ocurre pasarlo a tga[/quote]
Me parece buena idea.

[quote user="Balder" post="41273"]Además, comentas que ya tienes dominado el formato de las imágenes. Con una descripción precisa programar la herramienta será coser y cantar! Hay que ver menudo talentazo para hacer "reverse engineering" con el editor hexadecimal jejeej :thumbsup: [/quote]

Creo que ya lo tengo. Te pongo una descripción completa. Pregunta lo que no entiendas.
[code linenumbers=false]
****************************************
****************************************
**
** Formato de fichero h4l (layers)
**   bloque de imágenes del juego Heroes4
**
** Descripción por Abenhor (abenhor@tabernaberserker.es)
**
** Puede haber muchas imágenes pequeñas arrinconadas dentro de un gran bloque.
**   El juego usa el bloque completo para referenciar la posición de una imagen respecto de una plantilla.
**
** Para calcular el ancho y el alto de cada imagen dentro de un bloque, tener en cuenta que:
**   - margenIzquierdo es en realidad el primer pixel a pintar, empezando a contar desde cero.
**     Por tanto, si margenIzquierdo = 23, significa que los 23 primeros píxeles de la izquierda (desde el cero al veintidos) se dejan transparentes.
**   - margenDerecho es en realidad el último pixel a pintar, empezando a contar desde cero.
**     Por tanto, si margenDerecho = 54, significa que sólo se pintan los píxeles del 23 al 54 (32 en total), dejando el resto transparentes.
**   - Lo mismo se aplica para los márgenes superior e inferior.
**
** En cada imagen hay una zona de imagen y, opcionalmente, una de descripción de la transparencia.
**
****************************************
****************************************

02 bytes - nnnn    - numeroImagenes (número de imágenes en el archivo)
{ imagen1:
 02 bytes - nnnn     - longitudPaleta (número de colores en la paleta)
 02 bytes - nnnn     - colorAlfa (color para la mezcla de sombras)
 longitudPaleta * 3 bytes
 { paleta:
   array[1..longitudPaleta] of array[1..3] of bytes; (paleta de colores RGB)
 }
 02 bytes - nnnn     - longitudNombre (longitud del nombre de la imagen)
 nn bytes - cadena   - nombre (nombre de la imagen)
 01 byte  - nn       - sombras (para suavizar (antialiasing) la superposición de imágenes sobre el fondo)
   / 0 - Sin áreas transparentes (por lo general, cuadros de diálogo)
   / 1 - Con áreas transparentes, pero sin canal alfa
   / 4 - Con áreas transparentes, y con canal alfa (estas son las que me han vuelto loco)
 04 bytes - nnnnnnnn - margenIzquierdo (Desplazamiento horizontal de la imagen dentro del bloque)
 04 bytes - nnnnnnnn - margenSuperior (Desplazamiento vertical de la imagen dentro del bloque)
 04 bytes - nnnnnnnn - margenDerecho (Ancho en pixeles = MargenDerecho - MargenIzquierdo + 1)
 04 bytes - nnnnnnnn - margenInferior (Alto en pixeles = MargenInferior - MargenSuperior + 1)
 { descripcionLineas:
   array[1..Alto] of record
   {
     02 bytes - nnnn     - iniX (primer pixel de la línea, rellenar con píxeles transparentes al principio de la línea)
     02 bytes - nnnn     - finX (último pixel de la línea, rellenar con píxeles transparentes por la derecha)
     04 bytes - nnnnnnnn - direccionLinea (Direccion de los datos de la línea, en la matriz datosLineas)
   }
 }
 { datosLineas:
   array[1..Alto] of record
   {
     pixeles: array[descripcionLineas.finX - descripcionLineas.iniX] of bytes;
          (Índices de color de cada pixel, de izq a dcha y de arriba a abajo.)
          (Aplicar el índice a la matrix paleta, para tener los componentes del color.)
   }
 }
 [opcional {Cuadro de sombras y transparencias}]
 / * fin de la imagen1
}
{ imagen2 ... }
{ ..... }
{ imagenN ... }


****************************************
* Cuadro de sombras y transparencias
*   Consta de cero, una o dos partes,
*   dependiendo de "sombras" (0, 1 o 4)
****************************************
La fórmula exacta de la longitud de la primera parte = (longitudDatos + 1) dividido 2;
La fórmula exacta de la longitud de la segunda parte = (longitudDatos + 131) dividido 128;
Y que afecta a la aceleración. Cada byte de la segunda parte corresponde a 128 bytes de longitudDatos.
Cada byte se divide en 4 partes, cada parte (2 bits), es responsable de 32 píxeles. Los valores de estos dos píxeles son:
 00 - Todos los píxeles son transparentes y pueden ser omitidos.
 01 - Todos los píxeles son completamente opacos (canal alfa = 255) y no es necesario que se mezclen con la base.
 10 - Todos los píxeles son más opacos (canal alfa = 255) que los del color transparente y no hace falta mezclar con la base.
 11 - Hay píxeles con un valor alfa variable, distinto de cero (ni 255); el canal alfa debe mezclarse con la base.
Con los tres primeros modos es muy rápido, pero el cuarto implica un proceso lento, por lo que sólo se utiliza para los bordes de las imágenes.
El byte tras el tamaño de paleta, colorAlfa, es el color transparente. Todos los píxeles con un color inferior a este número no se muestran en los modos 10 y 11.
En los casos en que la máscara no tiene aceleración (si el tipo de imagen no es 4) es para todos los píxeles en modo 10.
[/code]

[quote user="Balder" post="41273"]Yo llevo descifrando unos archivos CMP [...] Si un día tienes 5 minutos te agradecería que le echaras un vistazo por encima, aer si se te ocurre algo. :punk: [/quote]
Cuenta con ello. Pásame 3 o 4 ficheros CMP y una captura del juego o algo semejante donde se vena esas imágenes. Y si ya hay algo que tengas claro, partir de una descripción parcial siempre acelera el tema. Por cierto, ¿de qué juego se trata?
#14
[quote user="Balder" post="41267"]Pues ahora me pillas fatal de tiempo, pero no sería ningún inconveniente hacerte una herramienta apropiada para la extracción. Pero stando los exámenes de junio ahí al lado... A ver cuando puedo currarme algo.[/quote]
La extracción en sí no es demasiado problema (me apaño con un simple editor hexadecimal). Lo que es más problemático es convertir el formato interno que usó 3DO en "algo usable" para la web (gif o png, con transparencias, y si fuese posible con canal alfa).
Si cuando termines tus exámenes quieres dedicarle algo de tiempo, sin prisas, cuenta conmigo para ayudarte.

[quote user="Balder" post="41267"]Si te sirve de algo por el momento, te dejo la estructura de los ficheros de H4, así, si tienes tiempo libre tú, podrías hacer dicho tool rápidamente:[/quote]
No me creo capaz de programar algo así. Tengo conocimientos básicos de programación, aunque lo que manejo habitualmente es PHP. Ya sé que PHP es como C pero para la web, pero no me animo.
Eso sí, le he echado un vistazo a la especificación que me has puesto, y creo que hay alguna laguna. Te pongo lo que he entendido yo, tras hacer un buen puñado de pruebas y experimentos.

[code linenumbers=false]
****************************************
****************************************
**
** Formato de fichero H4R
**   paquete de ficheros de recursos
**   del juego Heroes4
**
****************************************
****************************************


04 bytes - 48345205 - Cabecera "H4R"

04 bytes - 08000000 - direccionDatos

04 bytes - nnnnnnnn - numFicheros

numFicheros x cabeceraFicheros
{
 04 bytes - nnnnnnnn direccionFichero
 04 bytes - nnnnnnnn longitudFicheroComprimido
 04 bytes - nnnnnnnn longitudFicheroDescomprimido
 04 bytes - nnnnnnnn ¿tipoFichero? ¿versión?
 02 bytes - nnnn     longitudNombreFichero
 nn bytes - cadena   nombreFichero
 02 bytes - nnnn     longitudComentarios (puede ser cero)
 nn bytes - cadena   comentarios (habitualmente la ruta del desarrollador)
 02 bytes - nnnn     longitudEnlacesSimbolicos (puede ser cero)
 nn bytes - cadena   cadenaEnlacesSimbolicos
 04 bytes - nnnnnnnn compresion 01000000(sin compresión) 03000000(compresión gzip) (no he detectado otras)
}
datosFicheros (variable)


****************************************
* Tipos de fichero en su interior
*   Fuentes de letra, sonidos, textos,
*   tablas, videos, escenarios,
*   imágenes y otros varios
****************************************

font           fuentes de letra
sound          sonidos
strings        textos
table          tablas
bink           videos
game_maps      escenarios y campañas


Imágenes
----------------------------------------
actor_sequence
adv_actor
adv_object
animation
battlefield_preset_map
bitmap_raw
castle
combat_actor
combat_header_table_cache
combat_object
layers.adventure
layers.button
layers.Campaign_Splashscreens
layers.combat
layers.Control
layers.creature
layers.cursor
layers.dialog
layers.icons
layers.map_frame
layers.map_margin
layers.menu
layers.Scroll
layers.Shroud
layers.text_background
layers.town
terrain
transition
[/code]

De momento, creo que lo que sería más interesante es una herramienta para convertir las imágenes tipo "layer" a gif y/o png con transparencia del fondo (y si es posible, con canal alfa, para las sombras). Ya tengo dominado casi todo el formato, aunque aún me queda alguna laguna con los datos de cola (el canal alfa). Ya te contaré...

[quote user="Balder" post="41267"]No se si has visto que ya se programado un tool equivalente para extraer archivos del HoMM2 y su expansión: http://www.torredemarfil.es/foro/homm2-modding-remake-vt2675.html[/quote]
Me anoto el enlace para mirarlo mañana, que al final se me hizo tarde hoy mirando el formato de h4.

[quote user="Balder" post="41267"]Venga amigo, suerte con tu proyecto :thumbsup:[/quote]
Muchas gracias.
#15
Hoy le he dedicado un buen tiempo a estudiar cómo sacar imágenes del juego; siempre es preferible usar las imágenes del propio juego para describir sus elementos, y no está bien andarlas tomando de otras webs (no al menos sin permiso).
He encontrado pocas herramientas, y las que hay no son demasiado buenas para convertir imágenes (H4res, ResEdit2...). Todas ellas proporcionan a lo sumo un fichero bmp. Se pierde la transparencia, y encima el canal alfa lo ignora por completo.
Si alguien conoce una herramienta apropiada, le agradecería la información.
De momento, y a la espera de esa cuenta de ftp para subir materiales a La Torre de Marfil, os enlazo aquí algunas de las imágenes que he ido añadiendo hoy a las secciones de facciones. Pincha en los enlaces si quieres verlas en su contexto.

Facción Poder / Might


Facción Orden / Order


Facción Caos / Chaos


Facción Vida / Life


Facción Naturaleza / Nature


Facción Muerte / Death


Facciones: Generalidades