[Pruebas/investigacion] IPX con Div2(DosBox) net_join_game

Discusión en general sobre Gemix.

[Pruebas/investigacion] IPX con Div2(DosBox) net_join_game

Postby SimulatorOne » Thu Mar 31, 2011 11:49 pm

Hola

me a dado curiosiada por aprender y estudiar los comandos de NET que tiene Div2.
sinceramente nunca me atrevi a programarlos.

ahora que me pongo a leer la ayuda F1 de Div2, me doy cuenta de que no es tan dificil como te lo dicen...

por lo menos solo usa 2 comandos, y una estructura globaL NET + una estructura de tu juego online
Funciona por conexion IPX, que es lo mismo que RED LAN Local.

Pero las primeras pruebas me fallan, me devuelve -2 diciendo que no se puede crear una conexion.
Pense en DosBOX

y si, en el File de configuracion(dosbox.conf) de Dosbox, encotre IPX
Image

lo active, y volvi a entrar en Div2, y ejecute este codigo:
Source Code (Gemix) [ Download ] [ Hide ]
  • PROGRAM ejemplo_net_join_game;
  •  
  • GLOBAL
  •   STRUCT jugador[1]; // 8 jugadores como máximo (de 0 a 7).
  •     x,y;
  •   END
  •  
  •   id_red;
  • get_net;
  • string t;
  • BEGIN
  •   net.device=1;
  •   net.max_players=2; // Se indica aquí el número de registros.
  •  
  •   id_red=net_join_game("xxx",OFFSET jugador, sizeof(jugador));
  •  
  • write(0,0,0,0,t);
  •   // El registro de este jugador es "jugador[id_red]"
  • loop
  • if(id_red=>0);
  •   jugador[id_red].x=x; // Defino mis campos
  •   jugador[id_red].y=y;
  •   end
  •   get_net=net_get_games();
  • t="id_red="+itoa(id_red)+" x:"+itoa(x)+","+itoa(y)+" num_ply="+itoa(net.num_players)+" server="+itoa(net.server)+" get_g:"+itoa(get_net);
  •   FRAME; // Envio / Recepción de datos
  •  
  •   // Ahora hay conectados "net.num_players", y sus datos están en
  •   // los demás registros de la estructura jugador[].
  •  
  •   // ...
  • end
  • END
  •  


al menos para que me diga si se a conectado y mas detalles...

Lo ejecute, y me parece que me funciono.
me devuelve 0, siendo el jugador Nº 0, y siendo el server, diciendome que hay 1 jugador en linea.

pero no se que mas hacer...
probarlo en un mismo ordenador no tiene sentido, si no se tiene una LAN con otro PC con otro DosBox con el Div2 corriendo este codigo....

Me quede con la duda, y busque mas informacion y un tutorial de como activar una conexion IPX con DosBOx.
encontre estos 2

http://www.dedoimedo.com/games/reviving ... layer.html

y el oficial: (Busquen IPX)
http://www.dosbox.com/DOSBoxManual.html


Tambien estoy por una vez configurado bien el IPX de DosBOx, probarlo con Hamachi
https://secure.logmein.com/ES/products/hamachi2/

y crear una VLAN privado, y hacerlo a traves de hamachi

si todo va bien,
podre hacer test usando el PC de mi madre, yo tengo el mio, y mi madre otro, usando WIFI como LAN normal
y luego haciendo pruebas con Hamachi para VLAN

Alguien se anima a investigar esto?
Se podrian hacer pruebas con Hamachi usando el viejo Div2.

podriamos hacer el tipico juego de la Raqueta de tenis en blanco y negro XDDDDD
http://es.wikipedia.org/wiki/Pong
Image
super gamer!!!

para echar una super partida rapida XDD
http://www.granvino.com/jam/stuff/juego ... /index.htm
Last edited by SimulatorOne on Fri Apr 01, 2011 12:07 am, edited 1 time in total.
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [Pruebas/investigacion] IPX con Div2(DosBox) net_join_ga

Postby erkosone » Fri Apr 01, 2011 12:06 am

Jeje, recuerdo los dias en que me puse con ello.

La verdad, yo me esperaria a tener las de Gemix, usar DosBox me da un palo...

Pero si quieres practicar puedes hacerlo con un solo PC y un solo programa, mira haz esto:

Crea un programa en gemix.
Crea dos regiones de pantalla, osea, parte la pantalla en dos.
Crea una estructura como esta:

Struct player[1];
int x;
int y;
int x_disparo;
int y_disparo;
End

entonces creas un proceso en la region "0", que actualize a cada frame sus coordenadas en la estrucutra, concretamente en player[0].x y player[0].y. y que coloque un grafico en pantalla "un cuadrado mismo".
Tambien, en esa misma region, creas otro proceso que simplemente se coloque en las coordenadas player[1].x y player[1].y.
Aqui tienes un proceso "tonto" y un proceso que puedes mover por ejemplo con "a-s-w-d".


En la otra region haces lo mismo pero al reves, creas otro proceso que se mueva por la region "1" con los cursores, y un grafico tonto que se mueva en funcion de lo que vale player[0].x y player[0].y.
En esta segunda region tienes ya dos procesos, que simulan al otro cliente.

En cada region tienes un proceso que asigna en todo momento sus coordenadas a la parte de la estructura que toca, y asi, el proceso "tonto" se mueve cuando lo mueves desde la otra region, imagina que es otro PC.


Pues apartir de ahi puedes empezar a hacer pruebas, es muy interesante esto, ya que te dará mucha agilidad para cuando tengas las funciones nativas de gemix.
Espero que lo hayas entendido, que aveces me explico muy mal... ;)
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [Pruebas/investigacion] IPX con Div2(DosBox) net_join_ga

Postby erkosone » Fri Apr 01, 2011 12:17 am

Si te das cuenta, en Div2 para hacer una partida en red, solo tenias que crearla y asignarle una estructura que tenia que ser identica en todos los clientes y en el servidor.

Si eras el player 3, pues podias tocar los registros de la pagina 3 de la estructura, siendo todos los solo de acceso para lectura.
Y por supuesto, desde el servidor, todos los registors de todas las pages de datos son accesibles.

Se trata de controlar tu a un proceso y crear otros procesos "tontos" que son controlados por los valores de los registros que corresponden a los demas jugadores. Es muy facil ya veras.
Lo dificil es "disimular" el efecto latencia que proboca internet.

Hay varias tecnicas, las mas simples son:

No enviar por la estructura los codigos de grafico, crear las animaciones en todos los clientes y trabjar solo con estados como por ejemplo: registro "player[7].movement" si vale 0 esta parado y lo animas en el cliente. si vale 1 anda para la izquierda, si vale 2 para la derecha, si vale 3 anda hacia abajo, si vale 4 hacia arriba..
Cada "n" milisegundos comprovar en la estructura el valor de por ejemplo player[7].x y player[7].y, y si el cliente ha dejado al moñeco de un player colocado erraticamente pues se corrige la posición.

NUNCA mover un proceso directamente con datos de la Struct... chapuzada de las gordas.. al minimo lag veras que efecto paralisis mental mas majo jeje..

Si la latencia normal es de 100 milisegundos.... pues hacer las correcciones de las posiciones de los personajes.. de los disparos.. de las explosiones... a cada 120 milisegundos.. OJO!!!! las "CORRECCIONES" no las animaciones. Si has empezado a animar algo.. es porque has recivido en la estruct algo que asi te lo indicaba..


Pero para hacer unas pruebecillas asi en plan facil empieza con algo simplisimo, crea dos regiones y 4 procesos, 2 para cada region, en cada region mueves 1 proceso con teclas diferentes, y al otro lo mueves "captando" los datos de la page de la struct que le corresponda..



Está tirao tio, ya veras que es muy entretenido ;)
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [Pruebas/investigacion] IPX con Div2(DosBox) net_join_ga

Postby erkosone » Fri Apr 01, 2011 12:24 am

Joer que ganas por dios.... que ganas de jincarle el diente a todo esto....

ya no puedo mas:

AAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!!
You do not have the required permissions to view the files attached to this post.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [Pruebas/investigacion] IPX con Div2(DosBox) net_join_ga

Postby SimulatorOne » Fri Apr 01, 2011 12:30 am

oks,
sinceramente es por morvo a hacer algo Div multijugador online.

Pero me quedo asombrado que tenga tan pocos comandos/variables online Div2

Gemix tendra de todo y de alguna manera seria mas facil, ademas de que deberia haber algun test basico.

si hare pruebas, pero aun asi con un mismo pc no puedo hacer esas pruebas :/
necesito 2 como minimo, conectados por LAN(sea por cable , como por Wifi, mientras tenga la misma puerta de enlace y eso)


mira, actualmente lo tengo asi:
Code: Select all
C:\Documents and Settings\Tino>ipconfig
Configuración IP de Windows

Adaptador Ethernet WIFI          :

        Sufijo de conexión específica DNS :
        Dirección IP. . . . . . . . . . . : 192.168.1.101
        Máscara de subred . . . . . . . . : 255.255.255.0
        Puerta de enlace predeterminada   : 192.168.1.1

Adaptador Ethernet Hamachi          :

        Sufijo de conexión específica DNS :
        Dirección IP. . . . . . . . . . . : 5.82.50.130
        Máscara de subred . . . . . . . . : 255.0.0.0
        Puerta de enlace predeterminada   :


el problema es que no se que conexion coje DosBox, para su conexion IPX
Si el WIFI o el Hamachi.

y el PC de mi madre tendra otro numero "Dirección IP", la mascara de subred deberia ser la misma y la Puerta de enlace tambien.

Segun DosBox dice que la IP del servidor(o sea YO) tiene la IP: 127.0.0.1 Puerto:206

gracias por tu ayuda!!
Yo es que no se tanto, se muy basico de redes, mas bien soy mas LOCAL que no ONLINE XDDDD
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [Pruebas/investigacion] IPX con Div2(DosBox) net_join_ga

Postby erkosone » Fri Apr 01, 2011 12:37 am

Me da que DosBox emula esta feature unicamente, te explico, como STANDARD OF THE WORLD que queda mu chulo pero es algo muy normal, se estipuló en su dia que la IP 127.0.0.1 era asignada "internamente" mediante el adaptador propio, sin conectividad a nada, pero dando soporte para realizar diferentes test dentro de un equipo sin conexion a red.

Veras que si te bajas un scanner de red, encontraras que "extrañamente" existen en tu red 255 maquinas "que no existen en verdad", dentro del rango de IP´S:

127.0.0.1 hasta 127.0.0.255....

Esto está asi desde el nacimiento de las redes con protos de encapsulación de datos.. No sirve para nada mas que para probar el sistema.


Si el dosbox no te coje la IP del adaptador real 192.168.1........ entonces olvidate... solo es una emulación para que el software de msdos no pete al ejecutarlo.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [Pruebas/investigacion] IPX con Div2(DosBox) net_join_ga

Postby SimulatorOne » Fri Apr 01, 2011 1:51 am

esto es lo maximo que e conseguido:
conectar el cliente al servidor, usando la IP LAN Real, no la que me da DosBox como servidor
Code: Select all
IPXSERVER: Connect from 127.0.0.1
IPX: Connected to server.  IPX address is 127:0:0:1:8:105
IPXSERVER: Connect from 192.168.1.100


La IP 192.168.1.100 es el PC de mi madre.
mi IP Local normal es la : 192.168.1.101

pero la IP de DosBox del servidor como ves es la 127.0.0.1 cosa que no puedo cambiar :(

Deberia cambiar las IP locales mias normales, para entrar en ese rango 127.0.0.x
------------------------------

de todas maneras e echo otra vez la prueba en div2. teniendo conectado de esa manera.

Esta vez da un resultado diferente.
lo que si va demasiado lento, ya que en cada FRAME estoy haciendo esta comprobacion con este comando:
net_get_games();
supongo que esto reeelentiza mucho y mas en cada frame

lo que si que me dado cuenta que me hace trabajar la conexion WIFI entre los 2 PC continuamente y no se si es por ese comando o que...

Windows XP , el mio
Image

Winvista, el de mi madre
Image
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [Pruebas/investigacion] IPX con Div2(DosBox) net_join_ga

Postby GINO » Fri Apr 01, 2011 2:09 am

Yo tenía entendido que el sistema de red de DIV2 tenia bugs, que no iba guay, pero lo digo de oídas, nunca lo probé.
User avatar
GINO
 
Posts: 2823
Joined: Thu Jul 31, 2008 10:25 pm

Re: [Pruebas/investigacion] IPX con Div2(DosBox) net_join_ga

Postby erkosone » Fri Apr 01, 2011 2:20 am

El NET_GET_GAMES() solo lo has de utilizar una vez "en el cliente", si existe la partida en el servidor el cliente se entera haciendo esto:

Existe_partida=NET_GET_GAMES();


Si existe_partida > 0 es que el servidor se ha iniciado, sino es que está parado.


Despues de comprovar que hay alguna partida abierta, tienes que conectarte con NET_JOIN_GAME(); pero asignando una variable a esta sentencia asi: Mi_player=net_join_game(........);

y te devuelve TU numuero de jugador, si te devuelve -1 o menos es que no ha conectado..

Y una vez conectado ya puedes hacer las pruebas, si lo haces a cada frame.. lo que puedes probocar es un crash de los gordos.. pues no das tiempo a que el server te conteste y lo estas bombardeando a preguntas..
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [Pruebas/investigacion] IPX con Div2(DosBox) net_join_ga

Postby SimulatorOne » Fri Apr 01, 2011 3:15 am

con el NET_GET_GAMES();

si solo inicio el servidor, me dice =0 es decir, que no hay ninguna.

El servidor esta esperando....
me dice que solo hay 1 jugador, y que esta conectado. y que no hay nignuna partida segun NET_GET_GAMES();

cuando ejecuto el del cliente, me dice lo mismo, salvo que me dice que hay una partida existente NET_GET_GAMES();
el Servidor tambien me lo dice que hay una partida existente.

Pero claro El cliente se a convertido en servidor, y se estan ejecutando 2 senvidores a la vez.
los 2 se detectan con el NET_GET_GAMES(); diciendo que hay una partida activa.

Es decir que e creado 2 partidas en 2 servidores, de 1 jugador.

El problema es que esta esperando a que se una un cliente.

el Codigo PRG es identico. en los 2.

Lo que yo hago primero es iniciar el Servidor, esta esperando el servidor a que se conecte un cliente
y luego ejecuto el Cliente.... pero el cliente se lo toma como servidor, no como cliente, y crea la partida.

pero NET_GET_GAMES(); me dice que existe una partida activa, es decir el de ellos mismos.

1-Servidor: Crea partida, espera, y NET_GET_GAMES(); da = 0 no ve nada...
2-Cleinte: No se por que, pero El cliente se crea su partida, haciendose tambien servidor. NET_GET_GAMES();=1 dice que hay una partida(el del 1-Servidor)
3-Consulto del (1-Servidor) el NET_GET_GAMES() se pone a 1 tambien, este ve el (2-cliente) como otra partida.

Resultado: hay 2 servidores en la misma red. con 2 partidas.


Source Code (Gemix) [ Download ] [ Hide ]
  • PROGRAM ejemplo_net_join_game;
  •  
  • GLOBAL
  •   STRUCT jugador[1]; // 8 jugadores como máximo (de 0 a 7).
  •     x,y;
  •   END
  •  
  •   id_red;
  • get_net;
  • string t;
  • BEGIN
  •   net.device=1;
  •   net.max_players=2; // Se indica aquí el número de registros.
  •  
  •   id_red=net_join_game("xxx",OFFSET jugador, sizeof(jugador));
  •  
  • write(0,0,0,0,t);
  •   // El registro de este jugador es "jugador[id_red]"
  •  
  • loop
  •  
  • if(id_red==0);x=rand(0,234);end
  • if(id_red==1);y=rand(0,234);end
  • if(id_red=>0);
  •   jugador[id_red].x=x; // Defino mis campos
  •   jugador[id_red].y=y;
  •   end
  •   if(key(_enter));get_net=net_get_games();end
  • t="id_red="+itoa(id_red)+" x:"+itoa(x)+","+itoa(y)+" num_ply="+itoa(net.num_players)+" server="+itoa(net.server)+" get_g:"+itoa(get_net);
  •   FRAME; // Envio / Recepción de datos
  •  
  •   // Ahora hay conectados "net.num_players", y sus datos están en
  •   // los demás registros de la estructura jugador[].
  •  
  •   // ...
  • end
  • END
  •  
  •  



Supongo que el problema lo tiene DosBox por asignarme esa IP 127.0.0
y no hay manera de cambiarla por otra.

El Servidor, tiene la IP 127.0.0 y no se puede cambiar
y el cliente su IP normal de RED Local Real.

Mas no puedo hacer...

A no ser que use una maquina virtual Windows98se, con VirtualPC y los conecte por LAN.
Ya otra no se me ocurre....
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Next

Return to General

Who is online

Users browsing this forum: No registered users and 3 guests