MapEditor v1.6 - SetupProject v1.0 - SpacePong v2.0

23 October, 2007

Debe de ser la primera vez que digo: “en una semana..” y es en 3 dias y encima mas cosas de las anunciadas jejeje, salgo ahora mismo de casa a comprar el cupon, hoy me toca fijo :).

Mike me sorprendio anoche con su nueva version para CRM32Pro v4.99 y con soporte a layers, ya me habia enviado la 1.5 pero tenia un par de cosillas por corregir y no solo lo hizo, si no que agrego mas cambios, otro que tambien cuando se pone se pone :).

Del SetupProject, poco mas que añadir que no haya dicho ya, solo que espero que todos aquellos que tienen algun proyecto con la lib, lo utilicen y se ahorren tener que crear ellos esa aplicacion. Ah bueno, el SpacePong v2.0 utiliza el SetupProject asi que es un buen ejemplo para fijarse como van las cosas.

Y ahora que? pues muy sencillo, tengo que pulir un par de detalles del ScrollEngine (MSSE) y despues lo subire a la web, aunque ya he visto que hay gente que lo esta utilizando jeje.

Venga, me vuelvo a arriesgar… si todo va bien, el MSSE estara pulido del todo en… 10 dias? veremos en que queda esto jeje.

Saludos!


CRM32Pro v4.99 SDK

21 October, 2007

Buenas!

al final y como casi siempre, unos dias se traducen en semanas que a su vez, se hacen meses… y es que el tema de los efectos en sprites(mirror,flip,resize y rotate) ha dado mucha mas guerra de la que me imaginaba. Para empezar, justo hace un año que intente implementarlo pero me rendi, habia otras cosas que hacer…por aquel entonces el proyecto PKM06 estaba vivo… pero como soy masoca, un poquito melon y tuve un momento de inspiracion..se me ocurrio antes de verano que podria ponerme de nuevo con los dichosos efectos. Pues bien, estan conseguidos y funcionando! :)

Esta version, tiene muchisimas mejoras y aconsejo a todo el que utilice la lib, pasarse a ella YA!.

Una de las cosas que estuve haciendo fue pasarla el BoundsChecker de forma intensiva y descubri varios bugs jodidillos pero que pude reparar.

Ademas, he aprovechado y he agregado soporte directo a las superficies y recursos en 8bits, hace años pense que seria una tonteria soportar 8bits pero ahora creo que es mas tonteria poner limites absurdos solo porque yo pensara que…. y esto no ha sido facil, sobre todo en el EditorDPF pero con tiempo y dedicacion, tambien lo he conseguido jeje.

Por ultimo, he subido la v1.2 del DPF2XML que no solo es muchisimo mas rapido importando de XML a DPF si no que ademas van los ejecutables para Windows y Linux.

Quizas alguno se pregunte…y el SetupProject? no estaba terminado? Sí, si lo esta. Lo subiré esta semana pero tengo que hacer unas mini-instrucciones y modificar muy levemente al SpacePong para que lo utilice y asi habra un ejemplo practico.

Si todo eso va bien, esta semana hare otro update de la web y acto seguido me pondre con el scrollengine para pulir un par de detalles y poder liberarlo cuanto antes, fechas? yo espero que antes de que termine este mes este en la web pero… yo ya no digo nada :).

Y bueno, la v5.0 la dejo un poco aparcada hasta el proximo año ya que me quiero poner con los jueguecillos, lease TitanBomber.

En fin, esto ha sido todo por el momento, que no es poco!

Dejo una lista de las mejoras de la v4.99:

· CRM32Pro main interface:

- Implementation of LoadConfig() and SaveConfig(). They now work!.

- Full working link between LoadConfig()/SaveConfig() and the SetupProject.

- Improved blitting optimization across all supported CPUs.

· ILogSystem:

- Added new Halt() and Resume() members to stop and resume the log output.

- New mode to append the log output to the same log file.

· ICursor:

- Fixed a problem creating a cursor from a 8bits surface.

· INetwork:

- Fixed some memory leaks on client and server code.

- Improved stability with client-server disconnections.

- Updated network examples.

· IButton:

- Raised MAX_LAYERBUTTON from 3 to 5.

- Fixed a problem with layer visibility. Now they works fine.

- Fixed a problem with ID buttons on layer 2 and upper.

- Better output of Info() member.

- Improved master buttons and cloned buttons functionality.

- Added new SetKey() and GetKey() members.

- Added new SetColorSelect() and GetColorSelect() members.

- Added new RemoveMaster() member.

- Inputbox type button now works better avoiding key repetition and delays.

- GetCurrentValue() has been renamed to GetValue().

- SetCurrentValue() has been renamed to SetValue().

- Function assigned to a button now supports two argument of any data type.

- Fixed a problem in Save() to DPF when the button was in video memory.

· IVideo:

- Fixed a critical bug on MPEG playback on multicores CPUs.

The problem was found and solved on SMPEG sources.

· IScreenFX:

- Improved Resize(): faster, support all color depth and optional render to a destination surface.

- Added new Flip() member to flip a surface.

- Added new Mirror() member to mirror a surface.

- Added new Rotate() and RotateScale() members to rotate a surface.

- All above members support surface clipping and the destination surface bounds.

- Note that all above features work in software mode. In hardware mode they are quite slow.

· IPrimitives:

- PutPixel() has been renamed and duplicated to PutPixelColor() and PutPixelRGBA().

- HLine() has been renamed and duplicated to HLineColor() and HLineRGBA().

- VLine() has been renamed and duplicated to VLineColor() and VLineRGBA().

- Rect() has been renamed and duplicated to RectangleColor() and RectangleRGBA().

- Added new LineRGBA() and LineColor() members.

- Added new BoxColor() and BoxRGBA() members.

- Added new RGBtoYUV() and YUVtoRGB() members.

- Added new RGBtoCYMK and CYMKtoRGB() members.

· CSprites:

- Added new SetEffect() member to activate special effects.

- New special effects: mirror, flip, rotate and resize.

- Fix a problem with colorkey in 8bits and 16bits surfaces.

- Full support for 8bits sprites surfaces.

- Fixed a problem in Save() to DPF when the sprite was in video memory.

· IImage:

- Added new LoadIMG() member to load a BMP or PNG.

- Fix a problem in SavePNG() trying to save RLE surfaces.

· CTiles:

- Full support for 8bits tiles surfaces.

- Fixed a problem in Save() to DPF when the tile was in video memory.

· Improved internal use of SDL_DisplayFormat(): it only performs the conversion when it is needed.

· Modified project files to support VS2005 and ready to add MacOS x86 project files.

· Improved documentation.

· Fixed a couple of mispelling words on sprites documentation. Thanks to Melkor to report it!.


SetupProject v1.0

14 August, 2007

Ultimamente me esta cundiendo bastante, desde que cambie de puesto la verdad que no solo estoy mas inspirado si no que tengo tiempo libre, puedo trasnochar(que es cuando mas cunde esto de la programacion jeje) y luego levantarme a tiempo de ir a trabajar sin estar muerto de sueño.

El caso es que me puse con el SetupProject que tenia abandonado desde hace mas de un año y medio. Me imagino que pocos sabran de que se trata, pues bien, antiguamente tenia una aplicacion utilizando las MFC para configurar de un modo sencillo cualquier juego que utilice CRM32Pro pero claro, estaba restringido solo a Windows asi que aprovechando que CRM32Pro es multiplataforma, diseñe un nuevo SetupProject mas avanzado, completamente configurable sin tener que programar ni compilar nada(lo unico que hay que hacer es modificar un XML) y utilizando CRM32Pro. El resultado, a mi parecer, es bastante bueno y permite tener una herramienta para configurar el juego, acceder directamente a cualquier URL(local o en internet), cualquier fichero de texto(como las instrucciones del juego por ejemplo), ejecutar el juego despues de asegurarte que la configuracion es la correcta y voila! Ademas, funciona igual en Windows que en Linux(y proximamente en MacOS x86). Las configuraciones estan divididas entre 3 tabs:

En el tab general se encuentra el tipo de procesador, memoria disponible, multitasking friendly, etc.

SetuProject General tab

Tambien he agregado un boton que lanza un benchmark(prueba la cpu, memoria y velocidad de bliteo por software) que termina dando un indice de rendimiento, de este modo se podria recomendar que para correr el juego se necesita un indice de X como minimo. Los botones readme y web site acceden a un fichero de texto local y a una URL dada respectivamente. De este tipo se pueden configurar de 0 a 7 botones que realicen cualquiera de esas acciones.

En el tab de video se puede escoger el renderer deseado disponible para la plataforma en la que lo estas ejecutando, elegir la resolucion deseada de entre un maximo de 4, cada una de ellas puede ser el valor que uno desee(de nuevo, modificando el XML), la profundidad de color, etc. Lo interesante es que automaticamente y dependiendo de las opciones elegidas o disponibles se van activando y desactivando algunos controles y en el caso de que sea una combinacion no deseada, simplemente no permite guardar la configuracion actual.

SetuProject Video tab

Por ultimo, el tab de audio, podemos activar o desactivar el sonido, cambiar la configuracion de salida de output, muestreo, frecuencia, resolucion, modo sin olvidarnos del volumen de los sonidos y de la musica.

SetuProject Audio tab

El control que tenemos sobre cualquier elmento de cada pestaña es total: podemos deshabilitar un control, por ejemplo en caso de que no queramos que el usuario corra en modo ventana, con desahilitar ese control se termino :P, podemos modificar su posicion, de nuevo, utilizando el XML. El aspecto grafico esta basado en skins, yo he creado uno, el llamado “default” cuyo aspecto es el que podeis ver en los pantallazos pero es facil crear otro set de controles GUIs, fondos, icono, etc.. bajo otro skin(uno de Linux, otro de Mac, otro complemente nuevo…). Una vez mas, para cambiar de un skin a otro…en el XML :). Todo esto se puede modificar a gusto del desarrollador o grafista directamente utilizando el EditorDPF, sin programar ni compilar nada!!

Para los que hayan llegado hasta aqui…se merecen ver el aspecto del fichero XML que configura todo esto, el layout.xml:

layout.xml

Como no podria ser de otra manera.., tambien le he pegado a CRM32Pro :). La v4.99 saldra junto al SetupProject v1.0 ya que he agregado los famosos LoadConfig() y SaveConfig() de modo que desde vuestro juego tan solo teneis que llamar al metodo LoadConfig() y voila! cargara todos los valores generados por el SetupProject, vamos, mas sencillo imposible :). Para esta version estoy trabajando en la maldita rotacion y escalado de sprites, no prometo nada puesto que es la 2 vez que me pongo a ello pero esta vez hay un par de ases en la manga asi que espero que vaya mejor la cosa.

La pregunta podria ser…y todo esto para cuando? pues bien, el SetupProject ya esta terminado al 100%. Ahora estoy con CRM32Pro(si, de nuevo jeje) y luego ya actualizo la web con todo esto, como estoy de vacaciones… yo diria que para dentro de unos dias estara todo listo(siempre y cuando mi nivel de inspiracion no caiga jeje). Ah!! y no me olvido del scrollengine, ese ya esta terminado y tendria que subirlo a la web. Vamos, que me espera un mesecito de muchas actualizaciones :)

Pues nada, solo darte la enhorabuena si has sido capaz de tragarte todo este rollo :)

hasta la proxima!


MegaStorm ScrollEngine v0.90(MSSE)- First release

25 July, 2007

Finalmente aqui teneis la primera version publica del scroll engine funcionando sobre CRM32Pro v4.98 (esta version aun no esta terminada asi que solo incluyo la version para VisualStudio).

El scroll engine es completamente funcional y aunque me quedan realizar algunos cambios internos, lo mas importante y complicado ya esta. Si alguien se pone a probarlo o incluso utilizarlo y se le ocurre alguna mejora o descubre algun problemilla que me lo diga y lo corregire para la v1.0.

He tardado un poco mas porque he preferido documentar todo y crear unos cuantos ejemplos de uso. Por ahora no va el codigo fuente, solo la libreria estatica para linkar pero en la v1.0 la idea es dejar todo el codigo libre bajo alguna licencia para que podais agregar lo que querais.

dot Native support up to 5 layers. Easy update to n layers.
dot Full and customizable parallax scroll support.
dot Independent or group fixed, with scroll or with parallax scroll layers.
dot Viewport and target surface can be selected in realtime.
dot OnUpdateEnd event which will be called at the end of each layer update.
dot Manual layer creation.
dot Import any external image file(BMP or PNG) and convert it to a valid layer.
dot Export any layer to an image file(BMP or PNG).
dot Level loading and saving on native format to an XML or to a DPF file.
dot Easy custom maps management to create almost any kind of game.

Aprovecho tambien para comentar que la idea de crear este engine vino a raiz del grupo PKM06 y nuestro proyecto de un shooter espacial en 2D con scroll vertical al estilo clasico. Por el momento la cosa esta bastante congelada y no se si la cosa se reactivara o se quedara donde esta ahora pero es justo nombrarlo ya que sin el, este engine no existiria.

Volviendo a CRM32Pro… espero tener lista la v4.98 antes de que termine Julio y rapidamente vendra la v4.99 que utilizara la recien estrenada SDL 1.2.12 corrigiendo muchos bugs y glSDL 0.8. Ambas versiones seran muy probablemente las ultimas antes de SDL 1.3/2.0 asi que CRM32Pro esta cerca de llegar al final de su evolucion y pasara al modo mantenimiento, aun y asi el plan sigue siendo el mismo, la v5.0 tendra soporte total con aceleracion OpenGL y el scroll engine como tal se aprovechara de todo ello.

Por ultimo, aqui teneis el enlace: MegaStorm ScrollEngine v0.90(MSSE) for VisualStudio

Y bueno, esto es todo por el momento!

Hasta la proxima actualizacion!


ScrollEngine v0.8… casi libre en la red!

14 June, 2007

El ultimo mes no ha sido muy productivo, hace 15 dias que no puedo hacer nada pero bueno, empiezo a tener tiempo libre la proxima semana ya que solo trabajare 3 dias a las semana :), no tendre excusa nunca mais!!

El ScrollEngine va por muy buen camino, ya graba en formato nativo y es muy definible, ahora estoy con la carga del formato nativo y un par de pequeños detalles mas y lo libero a la red. Para mas adelanta quedaria la importacion de mapas del tiled, mappy y demas.

Ademas, a ratos (pero no es mucho) sigo con la v4.98 de CRM32Pro y como siempre mejoras aunque empiezo a pensar que darme la paliza de liberar las cosas quizas es demasiado… no parece que nadie este usando la lib, hubo un momento prometedor pero bueno… por eso en los ultimos meses me he centrado mas en desarrollar internamente que en liberar nada…

En fin, esperemos que en 1 semana este el scrollengine disponible para descarga :)

Saludos!


ScrollEngine - Funcionando!!

6 May, 2007

Un mes ha pasado desde que me puse con el scrollengine y aunque no he podido dedicarle mucho tiempo de programacion…si pude darle caña al tema del diseño y asi ha pasado…que el resultado ha sido bastante bueno, es potente, sencillo y flexible :)

Ahora mismo podria subir una pequeña demo pero como no he visto que este nadie interesado… me volcare en continuar su desarrollo, ahora me he puesto con el formato del mapa nativo (habilitando la posibilidad de guardar y cargas mapas), mas tarde vendra la importacion de mapas desde otros formatos: tiled, MapEditor de Mike y posiblemente del mappy. Y despues de eso… uff, eso ya es otra historia que veremos si me pongo con ella o me si centro en el juego en si de PKM06.

Pero vamos, que el ultimo mes ha sido bastante productivo :) Ya sabeis, si alguien quiere ver como va el tema que me de un toque y le paso el codigo + ejemplo.

Nada mas por el momento! hasta la proxima!


Siguiente paso…

2 April, 2007

Despues de unos meses un poco vago(en cuanto a la programacion se refiere eh?), mucho lio y mucho trabajo en el curro, la cosa parece que vuelve a su cauce original, me he vuelto a inspirar y afortunadamente en el curro he podido conseguir otro puesto que, en unos meses me dejara 2 dias libres entre semana mas luego el finde, luego preveo mucho tiempo que junto a la inspiracion puede dar grandes frutos :).

El DPF2XML esta terminado y en la web, una nueva version el MapEditor de Mike con una correccion mia esta tambien OK y en la web… y ahora es tiempo de diseñar y plasmar en papel todas las ideas que he ido pensando las ultimas semanas acerca de un scroll engine montado sobre CRM32Pro que dicho sea de paso, lo utilizaremos en el grupo PKM06 para nuestro proyecto.

En cuanto tenga algo materializado, ire escribiendo o por aqui o por el foro para que veais su avance, dudas, peticiones, criticas, ayuda, sugerencias, etc…

Lo dicho…a trabajar!! :)

Y el que este de Semana Santa… a disfrutar!!


DPF2XML - Exportador/importador DPFXML

20 March, 2007

Despues de unos meses sin tiempo libre, poco a poco voy haciendo hueco a esto de la programacion y desarrollo.

En Navidad, estuve liado con un exportador/importador de DPF a XML y al reves y en la ultima semana y durante esta, lo he estado dando los retoques finales. Al principio surgio como una herramienta para el equipo PKM06 y nuestro proyecto pero despues pense que puede ser util a cualquier otro.

La idea es poder abrir la posibilidad de crear utilidades utilizando XML para luego crear un DPF que entienda el codigo. En concreto, en PKM06 lo utilizaremos como punto de enlace entre editores realizados con .Net y el juego en si desarrollado cn CRM32Pro.

A continuacion, os pongo un ejemplo de un DPF transformado a XML:
dpf2xml.jpg

Manana actualizare la web con dicho exportador junto a una nueva version del MapEditor de Mike.

Espero que os sea util!!

Saludos!


Antes de la v5.0… la v4.96!

26 October, 2006

Despues de tener varias conversaciones con warwolf del foro de Stratos y debido a que desde que anuncie que los sprites soportaran rotacion y escalado, recibo casi un mail diario preguntando para cuando estara disponible he decidido sacar una version antes de la v5.0.

De este modo, con la v4.96 espero poder liberar todas las mejoras de sprites en mes antes de lo previsto, que si todo va bien, podria ser en noviembre. Pero como siempre, depende mucho del tiempo libre del que disponga que ultimamente mas bien brilla por su ausencia.. pero tiene que cambiar! no va a ver siempre mil incidencias en el curro jeje.

Adelanto por aqui las mejoras previstas en la v4.96 tal y como lo tengo en mi ToDo, luego esta ingles y espanol mezclado…pero se entiende:
· CFont:
- Added new SetKerning() member to set the kerning of the font.
- The format of stored fonts have changed. Load() member will automatically update it.
· CSprite:
- TODO Al clonar sprites…porque no clona el autorestore, pausa y demas??? deberia e indicarlo en la documentacion
- TODO Añadir a los sprites el hotx y hoty.
- TODO Seleccion del frame inicio y frame final de una animacion
- TODO revisar pingpong porque parece que se repite el ultimo frame
- TODO mirror,flip, rotacion y escalado.
· IScreenFX:
- TODO Added new Flip() member to flip a surface.
- TODO Added new Mirror() member to mirror a surface.
- TODO Added new Rotate() member to rotate a surface.
- TODO Improved Scale(): faster and direct support for 8bits surfaces.
· ITimeSystem: added a new warning message when CRM32Pro.Update() is used without to initialize ITimeSystem.
· IButton: fixed a problem with slider button.
· Fixed a bug in CRM32Pro.Update() when ITimeSystem was not initialized.
· Removed two little memory leaks.

Bueno, pues voy a trabajar otro poquito y ya dejo de perder tiempo con el blog :)


Rendimiento de SDL y CRM32Pro

26 October, 2006

Varias personas me han preguntado por mail si existe diferencia en el rendimiento entre usar solo SDL o CRM32Pro y la respuesta es afirmativa. Ojo, que esto solo es cierto en modo software. En modo hardware son totalmente identicas.

Hace ya mas de un año me dedique a optimizar el memcpy para que utilizara MMX, tecnicas prefetch, etc. adecuadas para cada arquitectura de CPU actuales. El resultado es que una vez que inicias CRM32Pro y aunque solo utilices SDL, estaras usando automaticamente las mejores funciones para tu micro y ademas, dependiendo del tamaño de la copia, tambien utilizara unas u otras.

Esta diferencia no es muy grande en condiciones normales, pero existe diferencia. En condiciones favorables, por ejemplo bliteo consecutivo de superficies grandes(como un fondo de un menu), la diferencia es bastante mas dramatica, en algunos casos, casi el 80%. Pero como estos casos no nos interesan..(a quien le importa si el menu va a mas o menos fps??), voy a colgar una grafica de las pruebas que hice en su momento en el caso mas desfavorable que es muchas copias de sprites de reducido tamaño(16×16pixels) de un juego que esta desarrollando Ivo Wubbels que casualmente, descubrio un bug serio de rendimiento en el apartado grafico. Este bug existia en las versiones anteriores a la 4.90, en el resto, esta reparado :).

SDL and CRM32Pro performance

Cuando tenga mas tiempo libre, colgare en la web otro benchmark sobre velocidad de bliteo de sprites para que podais comprobar en vuestros propios equipos la velocidad de solo SDL, de CRM32Pro y quizas para comparar, algun backend por hardware como ddraw y glSDL.