• Jueves 18 de Abril de 2024, 09:20

Mostrar Mensajes

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


Mensajes - Amilius

Páginas: 1 ... 25 26 [27]
651
Delphi / Re: Problema con los sockets
« en: Viernes 17 de Octubre de 2003, 21:25 »
Básicamente mueves puntitos de colores, es cliente-servidor, funciona con un servidor coordinando los clientes.

Necesitas Delphi 3 Client-Server o superior.

652
DirectX / cambio de modo
« en: Viernes 17 de Octubre de 2003, 21:08 »
Un extracto de un tutorial:

3. Losing Surfaces

One very important area of robustness that the code samples above ignored is what happens if the user switches away from a fullscreen DirectDraw app to some other app running in the system. First of all, your code needs to handle the WM_ACTIVATEAPP message and set a flag when your app goes inactive. In the idle section of your PeekMessage loop, check this flag, and don't try to update your display when you're not active.

But the real issue is that once you switch to another app, you have left the DirectDraw environment and allowed GDI to become active. GDI is oblivious to DirectDraw, and will overwrite the areas of display memory in use by your DirectDraw surfaces. This means that your bitmaps get wiped out and will need to be reloaded. Fortunately, when you call a function that operates on a surface, such as Flip() or BltFast(), DirectDraw will return an error of DDERR_SURFACELOST to let you know if the surface was lost. So, your code has to check for this error and reload the bitmaps into the surfaces if this error occurs.

ddrval = lpDDSPrimary->Blt( &rcRectDest, lpDDSBack, &rcRectSrc, DDBLT_WAIT, NULL);

                if( ddrval == DDERR_SURFACELOST )

                {

                    ddrval = restoreAll();

                }

               

                ddrval = lpDDSPrimary->Flip( NULL, DDFLIP_WAIT);

               

                if( ddrval == DDERR_SURFACELOST )

                {

                    ddrval = restoreAll();

                }

                :

                :

               

                void restoreAll()

                {

                    // for each surface your app has created you should do the following:

                    ddrval = lpMyDDSurface->Restore(); // this reattaches the video memory to the surface

                    if( ddrval == DD_OK )

                    {

                        lpTempDDS ->DDReLoadBitmap(); // this will be the same as the function above

                                                      // that was originally used to load the bitmap

                                                      // with the exception that the surface is already

                                                      // created and ready to go

                    }

                }
Bueno, básicamente cuendo el DDraw avisa si se perdió la superficie hay que aplicar un "restore" a la superficie y volver a recuperarla.

En mi caso uso siempre modo cooperativo, por lo menos hasta que termine mi juego.
¿Por que:?
1.- Cuando pasa algo "malo" en modo exclusivo (no cooperativo) y no preveiste el caso la pantalla no se restaura y queda toda negra y no queda otra que reiniciar.
2.- En modo cooperativo nunca pierdes superficies:)
3.- Aunque si hay que diseñar el juego para que pueda ser ejecutado en modo  exclusivo y se pueda implementar la recuperación de superficies sin mayores problemas, pienso que esa parte de la implementación se la debe hacer al final por comodidad ya que básicamente lo único que se gana es optimización (y no mucha la verdad) al utilizar el flip real. Digo esto especialmente por el punto 1.

653
En realidad será un juego "freeware" y se podrá jugar como mínimo en una Pentium 100 de 32 RAM y 1mega de video (a 9 FPS). Si tienes una máquina más rápida el juego irá a 18,27 y hasta 36 FPS. De forma que si tienes una máquina lenta lo jugarás como si fuera ajedrez donde vez tus fichas moverse de casilla en casilla, pero si tienes una máquina rápida verás a tu personaje y a los monstruos delplazándose más suavemente por la pantalla.

654
Para hacer magia:

Como aún no existen vendedores puedes crear los objetos que necesites con el cheat "%Objeto n n"

1.- Crear un mago o un clérigo preferentemente.

2.- Subir de nivel o utilizar el cheat
  %nivel

3.- Crear pergaminos mágicos para aprender conjuros:
escribir en el chat:

  %objeto 224 n    

n va de 0 a 29. Cada número corresponde a un tipo de conjuro.

Seleccionar el icono del pergamino y hacer click derecho para usarlo.

Si logras leer el pergamino ya puedes lanzar ese hechizo.

Para recuperar mana:

1.- Poción de mana:
 
%objeto 162 255

2.- Crear un libro de hechiceria para magos o uno de oraciones para los clérigos, luego lo colocas en tu mano derecha (Selecciona el libro y haz click derecho  o bien presiona la tecla u, también puedes hacer click derecho sobre la casilla donde quieres usar el objeto que seleccionaste)

Libros:

%objeto 115 1
%objeto 119 1

Luego en el chat escribe /descansar
para empezar a recuperar maná.

Para lanzar los conjuros:

Dependiendo del conjuro será necesario que apuntes a un monstruo y luego presiones "C" para lanzar el conjuro. Puedes seleccionar el conjuro que utilizarás en el tab de conjuros al lado del tab del inventario del jugador.

655
Respecto a lo del macreo y experiencia:

Si el jugador tiene que macrear es que el juego es aburrido, es una de las cosas que quiero evitar. No será tan difícil y moroso conseguir recursos (si tienes la pericia adecuada) Y será también fácil perder lo que conseguiste.

El juego no está orientado en el sentido de que el jugador más poderoso es el que tiene más experiencia. El jugador más poderoso será el que se prepare para el combate con alguna estrategia bien pensada para acabar con el enemigo. Será vital la coordinación de magos y guerreros. Casi todos los conjuros afectan también a los monstruos. Puedes conjurar guerreros esqueleto, darles armaduras mágicas, acelerarlos, darles meyor fuerza, hacerlos invisibles, hacer que vean a invisibles, curarlos ,etc. Igual puedes ayudar a tus guerreros en el combate. Puedes atacar al adversario reduciendo su capacidad de ataque al mínimo, paralizándolo, maldiciendo sus armas/armaduras, quemándolo, congelándolo, etc. El guerrero puede tener la pericia de Ira Tenax que le permitirá duplicar el daño que haga a costa de perder capacidad de defensa. Los magos pueden crear armas/armaduras/vestimentas mágicas de todo tipo ya sea con gemas como el rubí o con aleaciones como el oricalco que es elaborado por los alquimistas. Y muchas cosas más que ya están implementadas.

El comercio aún no está implementado, pero tendrá el concepto de "libre oferta y demanda" para que el juego se auto-balancee, pero poniendo límites para evitar que los jugadores hagan lo que algunos tipos hacen en wall street.

Los precios podrán incrementarse hasta CASI 4 veces el precio "normal", al mismo tiempo podrás vender tus objetos a medio uso por 1/4 del precio de venta del objeto nuevo. Esto es para fomentar el comercio entre jugadores y la fabricación propia de artefactos.

656
Ya pueden bajar la versión para test del Cliente+Servidor de esta comunidad:

(En la parte de documentos)

http://groups.msn.com/Legadodelasartesarcanas

Espero que les guste, sólo ocupa 3 Megas. (por el momento...) Si notan que faltan cosas recuerden que está en pleno desarrollo.

Basta que tu máquina tenga win98 y directX7 o superior, pero si tienes una maquina buena puedes presionar "F" para incrementar los FPS.

En el servidor pueden controlar el consumo de ancho de banda/cpu cambiando el número de turnos por segundo en el juego. Bastan 200/100(modo de bajo consumo) bytes por segundo por cada cliente conectado. Pueden presionar "E" para ver la cantidad de bytes "Netos" (descontando información de control) recibidos del servidor.

También pueden poner música mp3 en lugar de midis, para lo que tienen que reemplazar los archivos .mid por sus .mp3 preferidos, cambiándoles de extensión a .mpg

Recuerden que siempre podrán salir con Alt+F4 si las cosas se ponen feas en el combate!

657
Delphi / Re: delphi
« en: Jueves 18 de Septiembre de 2003, 03:39 »
¿A que te refieres exactamente con graficar grafos?

A mi me suena a uno de esos algoritmos donde recorres una estructura llamada "grafo" y vas mostrando en pantalla como está organizado el "grafo".

658
Programación de Videojuegos / Re: Juego de Rol Multi-Usuario Masivo 100% Hecho en Delphi.
« en: Miércoles 17 de Septiembre de 2003, 00:26 »
A fin de mes mandaré una versión beta para test a todos los q se apunten y dejen su email en este foro (Un email con 4 megas libres como mínimo). Lo mandaré por partes (a lo sumo 4 correos de 1mega c/u).

Incluirá el cliente y el servidor para funcionar sobre TCP/IP.

Tendrá varios comandos de test "cheats" para subir de nivel, viajar a otros mapas, crear artefactos, etc.

659
En realidad es código para Delphi.

¿Es posible aplicar efectos alpha/alphaEdgeBlending sin estar en modo 3d?

Parece que todas las tarjetas de video tienen implementados estos efectos sólo para modo 3d, obviamente porque la codificación es distinta entre 2d y 3d, en 3d es más complicado y los algoritmos son inevitablemente más pesados que para 2d. DirectX tampoco parece tener estos efectos por "software"  en caso de que tu tarjeta de video no los soporte en modo 2d.

Por estos motivos tengo implementados esos efectos en 2d por software, es más ligero que entrar en modo 3d y utilizar los de la tarjeta aceleradora, por lo menos con una tarjeta de 8MB todo va muy lento:(  .

El juego que estoy haciendo está orientado a usuarios q no puedan pagar los 10$us mensuales que generalmente cuesta jugar un MMORPG.  Por esto mismo el juego no puede exigir que el usuario tenga la super máquina.

El juego funcionará en cualquier máquina donde corra win98+directX7. Y si la máquina es buena el juego irá a mayores fps.

660
Noooooo...:o
Desaparecieron las Tabulaciones..

Aqui va adjuntado...

661
Un procedimiento que elaboré q permite hacer blt con alpha del 50%, ideal para objetos semi-transparentes. Está optimizado para modo 16bits (5-6-5).

Noten q el efecto de transparencia se obtiene con dos operadores lógicos y un desplazamiento. El efecto es visualmente muy bueno una transparencia del 50% perfecta para los ojos.

Notas:

* SuperficieRender es una variable global.
* El color transparente es el 0,0,0 =$0000

Espejo: en el eje vertical.




procedure BltTrans(const DestR:Trect;SuperficieDD:IDirectDrawSurface7;const OrigR:Trect;espejo:bytebool);
const mskTrans=$F7DF;
var x,y,anchoFaltante,anchoFaltanteOrig,ancho:integer;
    conta,contaOrig:pointer;
    dato2:integer;
    lpDDSurfaceDesc:TDDSurfaceDesc2;
begin
  FillChar(lpDDSurfaceDesc, SizeOf(lpDDSurfaceDesc),#0);//Llena de ceros.
  lpDDSurfaceDesc.dwSize := sizeof(lpDDSurfaceDesc);
  lpDDSurfaceDesc.dwFlags := DDSD_CAPS or DDSD_LPSURFACE or DDSD_PITCH;
//SuperficieRender
  if SuperficieRender.lock(@DestR,lpDDSurfaceDesc,DDLOCK_WAIT,0)=DD_OK then
  begin
    conta:=lpDDSurfaceDesc.lpSurface;
    anchoFaltante:=lpDDSurfaceDesc.lPitch-(DestR.Right-DestR.Left) shl 1;
//SuperficieTransparente
    FillChar(lpDDSurfaceDesc, SizeOf(lpDDSurfaceDesc),#0);//Llena de ceros.
    lpDDSurfaceDesc.dwSize := sizeof(lpDDSurfaceDesc);
    lpDDSurfaceDesc.dwFlags := DDSD_CAPS or DDSD_LPSURFACE or DDSD_PITCH;
    if SuperficieDD.lock(@OrigR,lpDDSurfaceDesc,DDLOCK_WAIT,0)=DD_OK then
    begin
      if espejo then
      begin
        contaOrig:=Pointer(integer(lpDDSurfaceDesc.lpSurface)+(origR.Right-origR.Left) shl 1);
        anchoFaltanteOrig:=lpDDSurfaceDesc.lPitch+(origR.Right-origR.Left) shl 1;
        ancho:=lpDDSurfaceDesc.lPitch;
        x:=integer(lpDDSurfaceDesc.lpSurface);//!
        for y:=origR.top to origR.Bottom-1 do//-1
        begin
          while integer(contaOrig)>x do
          begin
            dec(integer(contaOrig),2);
            dato2:=word(contaOrig^);
            if dato2<>0 then
              word(conta^):=((dato2 and mskTrans)+(word(conta^) and mskTrans)) shr 1;
            inc(integer(conta),2);
          end;
          inc(integer(conta),anchoFaltante);
          inc(integer(contaOrig),anchoFaltanteOrig);
          inc(x,ancho);//!
        end;
      end
      else
      begin
        contaOrig:=lpDDSurfaceDesc.lpSurface;
        anchoFaltanteOrig:=lpDDSurfaceDesc.lPitch-(origR.Right-origR.Left) shl 1;
        ancho:=lpDDSurfaceDesc.lPitch;
        x:=integer(lpDDSurfaceDesc.lpSurface)+(origR.Right-origR.Left) shl 1;;//!
        for y:=origR.top to origR.Bottom-1 do
        begin
          while integer(contaOrig)<x do
          begin
            dato2:=word(contaOrig^);
            if dato2<>0 then
              word(conta^):=((dato2 and mskTrans)+(word(conta^) and mskTrans)) shr 1;
            inc(integer(conta),2);
            inc(integer(contaOrig),2);
          end;
          inc(integer(conta),anchoFaltante);
          inc(integer(contaOrig),anchoFaltanteOrig);
          inc(x,ancho);//!
        end;
      end;
      SuperficieDD.unlock(@OrigR);
    end;
    SuperficieRender.unlock(@DestR);
  end;
end;

662
Programación de Videojuegos / Re: Info sobre hacer juegos
« en: Sábado 13 de Septiembre de 2003, 21:56 »
Seguramente cada consola tiene un compilador especial. Las consolas no tienen el mismo juego de instrucciones de procesador que una computadora (Excepto la xbox q es una PIII modificada).

Dudo mucho que se pueda hacer "copy/paste" de un juego hecho en compiladores estándar como VC++ a un compilador de C++ para plataformas.

  No sólo es cuestión de librerías adicionales, es necesario que consigas el paquete completo de compilador + herramientas para crear un juego para la ps2 o el gba.

  Es lógico suponer que tendrán librerías lo suficientemente potentes como para que el mayor efuerzo, en la elaboración de un juego, esté en la elaboración y sincronización gráficos, sonido y programa además de las particularidades del juego.
 
Sin embargo dudo mucho que encuentres las herramientas q necesitas. La tendencia es hacer correr los juegos de PS2 y GBA en la Compu.

Los responsables de PS2 y GBA deberían apoyar más a sus consolas distribuyendo compiladores+ herramientas gratuitas para hacer juegos en sus consolas. ¿O tal vez no lo hacen porque GANAN dinero de los juegos q venden y no de la venta de consolas?

663
:good:

Pueden ver algunas pantallas capturadas en esta comunidad:

http://groups.msn.com/Legadodelasartesa ... oebox.msnw

Todos los efectos de blt están implementados en delphi con el método lock del directDraw (Que sólo te da una referencia a la posición de memoria donde puedes trabajar y otros datos adicionales para trabajar con la superficie)

Tiene un engine isométrico 2D, funciona perfectamente en cualquier máquina con win98 y el nro de fps aumenta con la calidad del hardware sin afectar la sincronización de animación, como sucede en un buen juego hecho en modo 3d.

El servidor también está sincronizado con el cliente para mantener la calidad de animación del juego.

Cualquier pregunta q' tengan:

ZeratulZ@hotmail.com


:lightsabre: :beer: :guitar:

664
Delphi / Juego de Rol Multi-Usuario Masivo 100% Hecho en Delphi 3.
« en: Viernes 12 de Septiembre de 2003, 17:14 »
Pueden ver algunas pantallas capturadas en esta comunidad:

http://groups.msn.com/Legadodelasartesarcanas/shoebox.msnw

Todos los efectos de blt están implementados en delphi.

Nota: Para bajar los archivos es necesario ser miembro del grupo como ocrurre en todos los grupos msn.  :rolleyes:

Páginas: 1 ... 25 26 [27]