Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Lenguaje Smash: ¡¡¡ Primeras Capturas !

Iniciado por Javi SJ Cervera, 29 de Mayo de 2004, 07:22:04 PM

« anterior - próximo »

Javi SJ Cervera

 Smash es el lenguaje que estoy diseñando para programar Century y Sneak Behind. Se basa en el lenguaje Small, e implementa NeoEngine como engine 3D. Contiene un set de funciones muy sencillas de utilizar, y un sistema orientado a eventos óptimo para la programación de videojuegos. Aquí pongo dos capturas de dos mapas de Counter-Strike: Condition Zero cargadas en Smash:





Y aquí una captura de Sneak Behind:



El engine soporta DirectX9 y OpenGL.

Smash será completamente gratuito, aunque probablemente pondré un sistema que permita donar dinero. Si consigo suficiente dinero, compraré un Mac y haré versión para MacOS X. De momento estoy con la versión Windows, y una vez terminada portaré a Linux.

Aquí tenéis un ejemplo de la sintaxis:

// Include default libraries
#include <core>
#include <float>
#include <engine>

// Main function
// This function is called every frame by the engine
main()
{
while(mainmsg_exist()) {  // While there are messages to process ...
 switch (mainmsg_id()) {
  case msg_init: { // Engine initialization
   // Add resource path
   resource_addpath "cs"

   // Set display mode
   set_display 800, 600, 32, df_directx

   // Hide mouse pointer
   mouse_show false

   // Load scene
   scene_load "aztec.nsce"

   // Create a default entity
   entity_create("MyEntity")
  }
 }
 mainmsg_next
}

// Standard frame
//display_text 0, 0, "Hello world!"
//display_text 0, 12, "Do you like this?"
//display_text 0, 24, "SMASH: Coded by Javi \"Jedive\" San Juan"
//display_text 0, 36, "Copyright (c) 2004 Niven Interactive"
mouse_move display_width() / 2, display_height() / 2
if (key_hit(0x1001) || !display_exist())
 end_main
}

// This is the handler of the 'MyEntity' type of entity
// Every frame, this function will be called by the engine
// to process the messages that the entity has received
public MyEntity(Entity: myentity)
{
while(msg_exist(myentity)) { // While there are messages to process ...
 switch (msg_id(myentity)) {
  case msg_init: { // If msg_init received
   entity_setcamera myentity
  }
 }
 msg_next myentity   // Go to next message
}

// Standard frame
entity_turn myentity, mouse_movy() * 0.005, 0, 0
entity_turn myentity, 0, -mouse_movx() * 0.005, 0, true
if(key_down(4352)) entity_move myentity, 0, 0, 12
if(key_down(4353)) entity_move myentity, 0, 0, -12
if(key_down(4354)) entity_move myentity, -12, 0, 0
if(key_down(4355)) entity_move myentity, 12, 0, 0
}


Está a medio camino entre C y Basic. Aquí véis dos funciones. La función main(), a diferencia de C, es llama a cada frame por el engine. De forma que cuando la funcion main() termina, no termina el programa, si no el frame actual. Para slair del programa debemos utilizar end_main(). La forma adecuada de programa es hacer un bucle que responda a los mensajes que main() va recibiendo, y después ejecutar aquello que se debe procesar todos los frames, y entonces salir de la funcion.

La funcion MyEntity() es la función que controlará todos los entities de tipo MyEntity. Todas las funciones que controlan entities son llamadas una vez por cada entity por el engine, y también procesan los mensajes que recibe el entity. La función debe ir precedida por al palabra "public", que hace esa función accesible desde fuera del script (esto es, permite acceder a la función desde el runtime).

La funcion key_down() utiliza números enteros por ahora, y es un poco engorrosa, pero enseguida haré constantes kc_up, kc_down, kc_espace, etc, más fáciles de recordar :)
== Jedive ==

donald

 
entonces...pasas ya del irrlitch?

neoengine soporta importado de md5, o sea, bones y pesos.Y hay un exportador de Blender en md5.

Es decir, eso está ya, no hay que esperar.Lo cual es un punbto bueno.


Tb hay un exportador directo de Blender, pero creo que aún no hay animación...

Neoengine soporta max y maya , tb. Indirectamente tb, mediante el md5.



Decís por aquí que ese es mejor de rendimiento y eso...



pues ese código lo entiendo hasta yo...XD


Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

AlexHdez

 Viendo lo de

//display_text 0, 0, "Hello world!"

tengo dudas de si el // son comentarios o no...

Un saludo!

Javi SJ Cervera

 si si son comentarios. es k puse lod el display_text pa ver si estaba bien implementado, ya k lo k esto hace es añadir un elemento nuevo a un vector de STL k tiene todo slos mensajes k se deben escribir el siguiente frame. Cuando llega la hora de renderizar la escena, tras renderizar las camaras k haya activas, va leyendo y borrando los eleentos del vector k contiene los mensajes de print, e imprimiendolos sobre la escena.

Para sacar las capturas comente esas lineas, y por eso estan asi
== Jedive ==

Javi SJ Cervera

 Por cierto, m pasa una cosa curiosa... no m sale el boton "Edit" en el primer mensaje de este thread.  :blink:
== Jedive ==

egf

 

buena trabajo men  (ole)

y es todo a base de codigo o vas a crear algun ineface para cargar las cosas lo digo por los grafistas que quieran pobarlo?

Lord Trancos 2

Cita de: "donald"entonces...pasas ya del irrlitch?

neoengine soporta importado de md5, o sea, bones y pesos.Y hay un exportador de Blender en md5.

Es decir, eso está ya, no hay que esperar.Lo cual es un punbto bueno.


Tb hay un exportador directo de Blender, pero creo que aún no hay animación...

Neoengine soporta max y maya , tb. Indirectamente tb, mediante el md5.



Decís por aquí que ese es mejor de rendimiento y eso...



pues ese código lo entiendo hasta yo...XD
Dicen que el Doom3 sale el mes que viene.... esperemos que no hayan cambiado mucho el formato ^_^;

(yo tb lo uso en mi "engine")
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

donald

 hmm...poniéndonos en plan estadísticos, el md5 podría imponerse como lo hizo el md2 y luego el md3...el mds ha pasado sin pena ni gloria, de todos modos, siendo infinitamente mejor que esos dos, teniendo ya bones y pesos, así que vete a saber...

Usas el md5? Interesante...

Blender se está poniendo realmente interesante...un tipo está haciendo constrains de suelo, y pinning de bone, juder como lo consigaa...

El plugin de exportado de x está casi casi, pero al hombre le salen contínuamente problemas en la última fase...

Así que, al menos, ya con el md5, y sin pinn...euh, fijado de articulaciones al espacio global, hablemos en algo que se entienda... pues la verdad es que se convierte en una herramienta de personajes open source de lo más interesante. (para el que tenga paciencia...y le apetezca ;) )

Que yo sepa, el único engine gratuito qu eusa md5 de momento es Neoengine...

No sabía que la salida de doom3 era tan inminente...

der_ton tiene tb el importador md5 de Max, pero ha querido esperar a la salida de doom 3 para darlo. El exportador de md5 para Max lo sacó hace tiempo y sí se puede usar.

Así que en teoría se pueden animar personajes en Blender (yo paso de modelar en Blender, para eso hay importado..) , o en Max, con estos plugins, para Neoengine. Si encima dicen que es bueno y libre...pues oye.


tu engine está colgado en algún sitio?

Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

Lord Trancos 2

 
Citar
Usas el md5? Interesante...

Indirectamente. Convierto el MD5 a un formato propio que es poco mas que una forma binaria del mismo.

Citar
der_ton tiene tb el importador md5 de Max, pero ha querido esperar a la salida de doom 3 para darlo. El exportador de md5 para Max lo sacó hace tiempo y sí se puede usar.

Es el que uso  (ole)

Citar
tu engine está colgado en algún sitio?

engine ? que engine ?  :P

Si te fijas en el post anterior puse "engine" con comillas.
Digo "engine" por no decir librerias.

Y no, no estan colgadas.

Pero vamos, si lo que te interesa es cargar MD5;
http://www.nowan.net/cb/3d  

Yo me "inspire" en ese codigo.  ;)
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Mars Attacks

Cita de: "Jedive"Por cierto, m pasa una cosa curiosa... no m sale el boton "Edit" en el primer mensaje de este thread.  :blink:
El mensaje deja de ser editable tras un cierto periodo de tiempo (¿una hora?).

En las capturas que has puesto, veo el suelo de la última como con una especie de DoF extraño. ¿Intenta ser un DoF o es alguna movida de las texturas?

En cualquier caso, está muy interesante el asunto. Seguiremos a la escucha.

Saludetes.

Zaelsius

 
Cita de: "Mars Attacks"En las capturas que has puesto, veo el suelo de la última como con una especie de DoF extraño. ¿Intenta ser un DoF o es alguna movida de las texturas?
Parece un filtrado bilineal con las distancias entre niveles mipmap y la cámara mal calculadas.

Le pasa lo mismo a Irrlicht en DX9 en mi PC/Gráfica... por eso para el "Paco Jones" tuve que quitar el código de carga de texturas del Irrlicht(que era "manual") y usar las d3dx para cargar las texturas. Eso corrigió el bug visual. Puede que NeoEngine 3d sufra un bug similar.. no sé  :ph34r:

BeRSeRKeR

 El efecto ese es el del filtro bilineal. Con un trilineal o un anisotrópico se solucionaría (aunque más chupa, claro :lol:).

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Zaelsius

 Bersi fíjate que se ve exageradamente borroso.. un filtro trilineal sólo suavizaría las transiciones(que en este caso son muy visibles) entre niveles ¿no crees?

A ver si encuentro un post mio en el foro de Irrlicht con el mismo efecto..

Edit: lo digo pq con Irrlicht el trilinear o anisotrópico no me solucionó nada. Se nota que los niveles se aplican demasiado cerca de la cámara. Esta es la captura que hice en su dia para enviarsela a Niko..



PD: Sorry Jedive por infectar tu post  :P  

BeRSeRKeR

 Aparte de lo que dices, creo que la textura tampoco ayuda demasiado. :)

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Lord Trancos 2

 A mi ese efecto me sucede cuando tengo los drivers de la tarjeta configurados para mejorar la "performance" en lugar de la "calidad"
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.