[GAME] Dead Arena - ONLINE

Proyectos en Desarrollo.

Re: [GAME] Dead Arena - ONLINE

Postby erkosone » Sun Apr 08, 2012 12:36 am

Por si a alguien le interesa...

Una forma de crear disparos en red muy sencilla consiste en dejarlos creados de origen y fuera de pantalla.. o fuera de scroll mejor dicho.. entonces desde el proceso de nuestro jugador:

Source Code (Gemix) [ Download ] [ Hide ]
  •                 //--------------------------UPDATE NET POSITION---------------------------------------
  •                 players[net.player_id].x_ = x;                                                                  // mi coordenada X..
  •                 players[net.player_id].y_ = y;                                                                  // mi coordenada Y..
  •                 players[net.player_id].graph_ = net_graph_;                                     // mi gráfico..
  •                 players[net.player_id].flags_ = net_flags_;                                     // mi flags..
  •                 if(exists(id_my_shot))                                                                                  // Si existe mi disparo..
  •                         players[net.player_id].x_shot_ = id_my_shot.x;                          // envio su posición..
  •                         players[net.player_id].y_shot_ = id_my_shot.y;                          // envio su posición..
  •                         players[net.player_id].angle_shot_ = id_my_shot.angle;  // envio su angle..
  •                         players[net.player_id].graph_shot_ = id_my_shot.graph;  // envio su gráfico..
  •                                 else                                                                                                            // si no existe mi disparo..
  •                                         players[net.player_id].x_shot_ = -100;                          // mando a las replicas de mi disparo en los otros clientes fuera del scroll..
  •                                         players[net.player_id].y_shot_ = -100;                          // mando a las replicas de mi disparo en los otros clientes fuera del scroll..
  •                 end    
  •                 //------------------------------------------------------------------------------------



En todos los clientes por el simple hecho de estar conectados 3 clientes por ejemplo, existirán sus disparos y estarán fuera del scroll de juego, entonces si en un cliente se dispara.. se envian los datos del disparo a la estructura de red.. y si el disparo no existe, se le pasan unas coordenadas fuera de scroll.. así nos ahorramos toda la movida de crear y destruir entidades.

Un truco interesante vaya..

Por si a alguien le pica la curiosidad, la estructura de red que estoy usando es esta:

Source Code (Gemix) [ Download ] [ Hide ]
  • typedef
  •                 type playerdata
  •                         byte item_list_[31];                                                                    // lista de 32 bits que apunta a los objetos en red..
  •                         byte event_;
  •                         byte bit_;
  •                        
  •                         int x_;                                                                                                 // cord. X del jugador..                               
  •                         int y_;                                                                                                 // cord. Y del jugador..
  •                         byte flags_;
  •                         byte graph_;                                                                                    // gráfico del jugador..
  •                         byte healt_;
  •                         byte mana_;
  •                         byte in_combat_;
  •                        
  •                         int x_shot_;                                                                                    // cord. X del disparo del jugador..
  •                         int y_shot_;                                                                                    // cord. Y del disparo del jugador..
  •                         int angle_shot_;
  •                         byte graph_shot_;                                                                               // gráfico del disparo..
  •                        
  •                         int x_bomb;
  •                         int y_bomb;
  •                        
  •                         byte collision_obj_list_;                                                       // Para informar de colisiones..
  •                         byte collision_shot_;                                                                   // Para informar de que me ha alcanzado un disparo..
  •                 end
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Dead Arena - ONLINE

Postby erkosone » Sun Apr 08, 2012 12:59 am

AVANCES:

- Ya están implementados los jugadores, ya pueden entrar hasta 10 players al mundo online..
- Ya están implementados los disparos, cada jugador puede disparar por el mundo.. ya se replican los disparos con identificador del player que los ha creado..
- Ya funcionan los eventos básicos de colisión con objetos del mundo..
- Ya funciona el sistema día/noche que oscurece la pantalla en función de la hora del servidor..
- Decorados del escenario casi completados..

Yo creo que en breve podremos hechar unos tiros contra los monstruos.. todavía me queda la IA de los malos.. y la IA del boss del evento.. que eso va a ser el hueso duro de programar.. pero por ahora me no me he atrancado en nada.. así que esto avanza a buen ritmo.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Dead Arena - ONLINE

Postby SimulatorOne » Sun Apr 08, 2012 2:20 am

si se entiende perfectamente :)

yo tambien hago algo parecido.

aun que grupo los BYTES en un Array, en vez de tenerlos 1 a 1 sueltos.

me da que si declaras BYTE a un varaible, te lo considera de 4bytes realmente, no de 1.

en cambio si se crea un Array de tipo BYTE
BYTE MI_DATOS[3]; //Esto son 4 bytes , de 4 valores.

no estoy 100% convencido de que la STRUCTURA o TYPEDEF, te coga esos BYTES en variables, como 1BYTE.
si no te los utiliza como 4Bytes.

mira, mi STRUCT: el actual:
Source Code (Gemix) [ Download ] [ Hide ]
  • STRUCT JUG_NET[TOP_JUG_NET];//0=SERVER, 1,2,3...=JUGNET.
  •  short XY[1];//COORDENADAS (4BYTES) -32768/32767
  •  BYTE GFAL[3];//GRAPH,FLAGS,ALPHA,ANGLE+45 (4 BYTES) 0/255
  •  
  •  STRING CMES_S[top_STRNET];//COMANDOS 16 BYTES (PARA SERVIDOR)
  •  STRING CMES_C[top_STRNET];//COMANDOS 16 BYTES (PARA CLIENTE)
  •  
  •  STRING CHAT_S[top_STRNETC];  //CHAT 48 BYTES (PARA SERVIDOR)
  •  STRING CHAT_C[top_STRNETC+1];//CHAT 49 BYTES (PARA CLIENTE)
  •  DWORD LOGCHAT;//NUMERO DE CHAT 4bytes(control de chat)
  • END


si te fijas en las 2 primeras: short XY[1]; y BYTE GFAL[3];
uso aarrays para agrupar esos Bytes, los que necesito.

no confio de que usandolo de este metodo:
Source Code (Gemix) [ Download ] [ Hide ]
  • STRUCT JUG_NET[TOP_JUG_NET];//0=SERVER, 1,2,3...=JUGNET.
  •  short X//COORDENADAS (2BYTES) -32768/32767
  •  short Y;//COORDENADAS (2BYTES) -32768/32767
  •  BYTE G;//GRAPH (1 BYTES) 0/255
  •  BYTE F;//FLAGS (1 BYTES) 0/255
  •  BYTE A;//ALPHA (1 BYTES) 0/255
  •  BYTE L;//ANGLE+45 (1 BYTES) 0/255
  •  
  •  STRING CMES_S[top_STRNET];//COMANDOS 16 BYTES (PARA SERVIDOR)
  •  STRING CMES_C[top_STRNET];//COMANDOS 16 BYTES (PARA CLIENTE)
  •  
  •  STRING CHAT_S[top_STRNETC];  //CHAT 48 BYTES (PARA SERVIDOR)
  •  STRING CHAT_C[top_STRNETC+1];//CHAT 49 BYTES (PARA CLIENTE)
  •  DWORD LOGCHAT;//NUMERO DE CHAT 4bytes(control de chat)
  • END



teoricamente deberia aceptarlas taal y cuaal, sus BYTES correspondan:
Source Code (Gemix) [ Download ] [ Hide ]
  • STRUCT JUG_NET[TOP_JUG_NET];//0=SERVER, 1,2,3...=JUGNET.
  •  short X//COORDENADAS (2BYTES) -32768/32767
  •  short Y;//COORDENADAS (2BYTES) -32768/32767
  •  BYTE G;//GRAPH (1 BYTES) 0/255
  •  BYTE F;//FLAGS (1 BYTES) 0/255
  •  BYTE A;//ALPHA (1 BYTES) 0/255
  •  BYTE L;//ANGLE+45 (1 BYTES) 0/255
  • ...
  •  


y si no los corresponde? y si me los trata como 4bytes?
Source Code (Gemix) [ Download ] [ Hide ]
  • STRUCT JUG_NET[TOP_JUG_NET];//0=SERVER, 1,2,3...=JUGNET.
  •  short X//COORDENADAS (4BYTES) -32768/32767
  •  short Y;//COORDENADAS (4BYTES) -32768/32767
  •  BYTE G;//GRAPH (4 BYTES) 0/255
  •  BYTE F;//FLAGS (4 BYTES) 0/255
  •  BYTE A;//ALPHA (4 BYTES) 0/255
  •  BYTE L;//ANGLE+45 (4 BYTES) 0/255
  • ...
  •  

Que derroche de bytes de 4bytes no???

A mi me da miedo que me trate asi los BYTES/short en variables de 4bytes, y no en 1Byte o 2Bytes.

Ya te digo que no estoy 100% seguro de que te Envie/reciba esos paquetes JUSTO con esos Bytes de informacion.
Y yo me siento mas seguro usando Arrays o STRINGS

Sabias que si cualquier valor del registro de un Cliente o servidor, es modificaado, un bit....
esta se envia TODO el Registro al Servidor, y esta rebota hacia los Clientes.

Es importante compactar lo maximo posible esos BYTES de la STRUCT, y contra menos cambios de datos tenga mejor....
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME] Dead Arena - ONLINE

Postby erkosone » Sun Apr 08, 2012 2:25 am

pues tienes la opción que rompe la compatibilidad con div que creo que se llama 'unit_size = 1', con eso 1 byte es 1 byte en memoria asegurado, pero también has de cambiar esto:

net.max_players = MaxConnections+1;

por: net.max_players = MaxConnections;

Y ya lo tienes ;)
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Dead Arena - ONLINE

Postby SimulatorOne » Sun Apr 08, 2012 2:38 am

yo uso el unit_size=1
para guardar y leer ficheros binarios con FOPEN,FWRITE,FREAD

para nada mas lo uso :S
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME] Dead Arena - ONLINE

Postby erkosone » Mon Apr 09, 2012 2:07 am

Vídeo al inicio del post, en breve mas info sobre el proyecto.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Dead Arena - ONLINE

Postby SimulatorOne » Mon Apr 09, 2012 3:15 pm

que ganas de probarlo tu
:)
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME] Dead Arena - ONLINE

Postby kozka » Tue Apr 10, 2012 2:53 pm

ifa a mirar el video aqui desde el curro , tenemos el firewall desde alemania y al intentar ver el video me sale lo mismo que algunos videoclips y demas XD
mola

Sentimos comunicarte que este vídeo no está disponible en Alemania porque es posible que incluya contenido musical cuyos derechos musicales correspondientes no han sido concedidos por la GEMA.
Disculpa las molestias.
User avatar
kozka
 
Posts: 2111
Joined: Sun Feb 01, 2009 9:36 pm

Re: [GAME] Dead Arena - ONLINE

Postby erkosone » Tue Apr 10, 2012 7:11 pm

Ostras.. eso no lo sabía, para los siguientes que suba lo tendré en cuenta, vaya tela..
Gracias por el aviso.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Dead Arena - ONLINE

Postby erkosone » Tue Apr 10, 2012 9:34 pm

Una Screen de como va quedando el tema..
2 Players, uno en modo defensivo con pompa de mitigar daño y el otro atravesado por una flecha con sangre XD..
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.

PreviousNext

Return to Proyectos WIP

Who is online

Users browsing this forum: No registered users and 6 guests