Noviembre 21, 2011, 07:08:55 PM Ultima modificación: Noviembre 22, 2011, 04:04:51 PM por Zedenox
Bueno, a lo que vine :
estoy desarrollando un RTS (para los que no saben, videojuego de estrategia, warcraft 3, starcraft,age of empires, ya?) en GM8Pro y llevo esto, ademas he usado los tutoriales de fancypenguins(muy buenos) con los que logre bastantes cosas :

- Movimiento con mp_potential_step
- Deteccion de obstaculos y enemigos : verifica si hay el objetivo esta ocupado y se detiene (cuando mueves varias unidades a un lugar) o si solo esta entre el objetivo y la unidad
- Interfaz grafica GUI : hasta ahora solo muestra tu dinero, tiene una opcion para ver los trabajadores inactivos (trato de hacer que entre los inactivos seleccione un aleatorio pero no lo he logrado), un boton para finalizar el juego, y la GUI se mueve a traves del mapa(por ahora solo con las flechas y el numpad, trabajo en el mouse)
- Movimiento a traves del mapa : mapa mas grande
- Niebla de guerra (visibilidad) : dise?e una pero el juego corre lentisimo,
no son los recursos, el GMK solo pesa 26,6 kb  :-[ jeje

Bueno, por ahora les dejo unas imagenes :

El Juego

Algunas Unidades Moviendose

Movimiento a traves del Mapa con la GUI

Vengo a Pedirles ayuda con algunas cosas :
- Recoleccion de Recursos : mirando entre los tutoriales de fancypenguins encontre unos, estan al inicio, el problema es que yo quiero como warcraft 3, explico : al llegar al recurso, toman un poco y lo llevan a la base mas cercana, lo dejan y vuelven al recurso, y se repite el proceso. en este tutorial, se crean dos tipos de unidades y se cambia, quisiera realizar esto con una sola unidad.
- Interfaz grafica : al desplazarme a traves del mapa la GUI se corre un poco en direccion contraria a donde me dirijo, quisiera arreglar esto, es un poco fastidioso.
- Visualizar GUI para cada unidad : cuando seleccione una unidad, la GUI cambie o aparezca una parte de ella
- Todo lo Demas para un buen RTS : Construccion de Edificios, Creacion de unidades, inteligencia artificial, dise?o de mapas,etc.

Y lo mas importante : IDEAS para las unidades, nombres, edificios, enemigos, recursos.

oohh casi lo olvido : como puedo dise?ar una niebla de guerra (la visibilidad del mapa) que no ponga totalmente lento el juego, ya tengo una pero hace que el juego corra lentisimo

bueno, agradeceria su ayuda y me gustaria terminar algun dia lo que yo creeria que seria un gran juego.

Actualizo :
Bueno, aca donde vivo son las 01:55 PM (UTC-5, Colombia, serian las 07:55 PM en UTC+1, para espa?a) y acabo de terminar de almorzar,  ;D
hace un rato arregle el problema de la seleccion multiple y funciona de maravilla, ahora voy a tratar de crear la vista.

Actualizo :
Active la niebla de guerra con tama?o de 64x64 para que no pusiera lento, dejo imagen :

Niebla de Guerra.

Actualizo :
Son las 9:56 AM aca donde vivo y acabo de avanzar con los ataques : los soldados atacan enemigos si estan cerca de rango, pero aun no programo la AI enemiga.Ademas, A?adi algo a la GUI y dise?e un poco de la creacion de unidades. Dejo Imagen :

Ataque.

Creando una Unidad (Ahora hay 4 Trabajadores).

Hola, deberias ser mas especifico con las preguntas y separar tus dudas en diferentes temas, pero antes, tambien deberias usar el buscador pues yo he visto temas para cosas como las que quieres como minimapas, AI, luces o niebla, items, etc. Busca y aplicalo a tu engine y cuando tengas dudas concretas con gusto te ayudamos. Saludos.
Saludos Cordiales!!!

- Recoleccion de recursos: Puedes hacer 2 objetos distintos, y cuando le haces click derecho al recurso que cambie al objeto que va y viene recolectando.
O tambien con una variable, un solo objeto que es un evento step verifique una variable, y dependiendo de esa variable es como va a actuar.

- Haz que cuando el mouse llegue cerca de un lado de la room haga esto:

[gml]
if mouse_x >= view_xview + 640 - 16 //Si el mouse esta cerca del borde derecho.
{
view_xview += 1 //La camara se movera hacia la derecha.
}
if mouse_x <= view_xview + 16 //Si el mouse esta cerca del borde izquierdo.
{
view_xview -= 1 //La camara se movera hacia la izquierda.
}
if mouse_y <= view_yview - 16 //Si el mouse esta cerca del borde superior.
{
view_yview -= 1 //La camara se movera hacia arriba.
}
if mouse_y >= view_yview + 480 - 16 //Si el mouse esta cerca del borde inferior.
{
view_yview += 1 //La camara se movera hacia abajo.
}
[/gml]

-La GUI hazla por variables globales, cuando se hace click en tal unidad, pone en tal valor la unidad global. Un draw la verifica y la dibuja.

-Haz que se dibuje todo negro, y de alguna forma que se vaya sacando.




Edito:

Cita de: Zeit en Noviembre 21, 2011, 10:37:29 PM
Hola, deberias ser mas especifico con las preguntas y separar tus dudas en diferentes temas, pero antes, tambien deberias usar el buscador pues yo he visto temas para cosas como las que quieres como minimapas, AI, luces o niebla, items, etc. Busca y aplicalo a tu engine y cuando tengas dudas concretas con gusto te ayudamos. Saludos.

Aunque te conteste un par, tiene razon xD

Esa es la mejor idea.

si, gracias por responder, estuve mirando el codigo que dejaste y funciona excepto por una parte, y ademas se sale de los limites, puedes ver mas alla de -1 , voy a usar tu codigo con un poco del que ya tenia y lo arreglo

Actualizo :
Hace un rato termine la niebla de guerra, tuve que hacerla con un tama?o de 64 porque sino el juego no corria a la velocidad normal. Dejo Imagen :

Niebla de Guerra 64x64.

Es que te pase lo primero que hice de ese script xD
5 minutos despues ya lo habia arreglado (Porque antes lo habia hecho sin probar).

Aqui te dejo el ejemplo con imagenes y todo listo :)


gracias, pero aun asi sigue con el problema de que el mouse se va del limite del mundo

#6 Noviembre 22, 2011, 05:36:30 AM Ultima modificación: Noviembre 22, 2011, 06:34:05 AM por Zedenox
Actualizo :
Es casi medianoche ( :-[),estoy dise?ando la GUI y acabo de avanzar un poco con el generador de mundos, dejo dos mapas aleatorios :

Mapa Aleatorio 1.

Mapa Aleatorio 2.

El Problema es que los arboles si se ven, si alguno sabe como corregir esto, por favor digan como :D

Como haces que esas partes queden oscuras? Si es con alguna variable puedes verificar esa variable desde los arboles y hacer que desaparezcan.

PD: Lo de mi ejemplo no se porque te sucede eso, yo lo estoy usando y me anda bien :/

#8 Noviembre 22, 2011, 07:07:00 AM Ultima modificación: Noviembre 22, 2011, 07:17:18 AM por klys
Me gusta este proyecto, amo los RTS games, si necesitas de programador, aqu? estoy!

Dime por mp que necesitas y te ayudare con gusto :3!  :D

Si la niebla de guerra son unos objectos puedes ponerles depth -100 (o mas) y cubrir?n todo.

Me gustar?a revisar como hiciste la niebla de guerra, quiz?s la pueda mejorar :D
Battlefield Galactic (Nombre piloto) Alpha 1.7.5.0
Juego Genero: Multiplayer Online Battle Arena!
Is more than 9000 APM!!

#9 Noviembre 22, 2011, 02:21:35 PM Ultima modificación: Noviembre 22, 2011, 02:23:33 PM por Zedenox
Te dejo el Codigo de la Niebla de Guerra, Son Dos Objetos, La Niebla y el Creador.

Niebla : Parent_Player es Un Objeto que Cubre todos los Parents por Categoria (Unidades y Edificios) del Jugador. Esto va en el "Step" Event. No hubo Necesidad de Modificar la "Depth", ya que solo Cambie la "Mask" del Objeto a un Sprite sin Imagen, asi no hay Colision.
[gml]// Niebla
if (distance_to_object(instance_nearest(x,y,Parent_Player)) <= instance_nearest(x,y,Parent_Player).range * 4) {
   image_alpha = 1
}
if (distance_to_object(instance_nearest(x,y,Parent_Player)) <= instance_nearest(x,y,Parent_Player).range * 2) {
   image_alpha = 0.5
}
if (distance_to_object(instance_nearest(x,y,Parent_Player)) <= instance_nearest(x,y,Parent_Player).range) {
   image_alpha = 0
}[/gml]

Creador : La variable "fog_size" obtiene el Tama?o del Sprite de la Niebla, me ahorraba tener que cambiar valores si la hacias mas grande o Peque?a. El Restro de Codigo escanea el tama?o del Escenario y crea la Niebla.
[gml]// Niebla
fog_size = sprite_get_width(Spr_Fog)
for (fog_x=0; fog_x <= room_width; fog_x += fog_size) {
   for (fog_y=0; fog_y<=room_height; fog_y += fog_size) {
       instance_create(fog_x,fog_y,Fog)
   }
}[/gml]
Con este codigo me funciono muy bien, lo Dise?e yo solo (Bueno, me apoye un poco de un Video) y creo que no necesita mejoras. Tal Vez si encontraras la posibilidad de hacer que una Niebla de 16x16 no Hiciera que el Juego corriera Lentisimo, eso seria muy Util.

Hola, para la niebla se me ocurre con un solo objeto con mascara de rectangulo y dibuja el rectangulo restando un color en escala de gris (dependiendo de la oscuridad) cuando colisione con tu personaje. Por cierto, para que no se vean los arboles utiliza un deph mayor para los objetos arbol que para los objeto niebla. Saludos.
Saludos Cordiales!!!

#11 Noviembre 22, 2011, 04:47:28 PM Ultima modificación: Noviembre 22, 2011, 05:42:28 PM por Zedenox
Cita de: Zeit en Noviembre 22, 2011, 04:10:09 PM
Hola, para la niebla se me ocurre con un solo objeto con mascara de rectangulo y dibuja el rectangulo restando un color en escala de gris (dependiendo de la oscuridad) cuando colisione con tu personaje. Por cierto, para que no se vean los arboles utiliza un deph mayor para los objetos arbol que para los objeto niebla. Saludos.

la niebla a esta arreglada, voy a mirar con lo de la depth. oye me podrias ayudar con este codigo, es del generador de escenarios, estoy usando el metodo switch(por primera vez  XD) y tengo tres objetos, uno amarillo, uno rojo y uno verde, el problema es que en vez de crear aleatorio , solo crea el rojo :
[gml]create_limit = 32
// Lista de Enemigos
enemy_list = ds_list_create()
ds_list_add(enemy_list,a)
ds_list_add(enemy_list,b)
ds_list_add(enemy_list,c)
size = ds_list_size(enemy_list)
show_message(string(size)) // para saber el cuantos enemigos existen jeje
repeat(10) {
   number = irandom(size)
   e_x = random_range(create_limit,room_width-create_limit)
   e_y = random_range(create_limit,room_height-create_limit)
   switch (size){
       case 1:
           instance_create(e_x,e_y,a)
       case 2:
           instance_create(e_x,e_y,b)        
       case 3:
           instance_create(e_x,e_y,c)

   }
}[/gml]

Hola, en : switch(size) debe ser switch(floor(number))... Saludos.
Saludos Cordiales!!!

Gracias por decirme que este tipo de juegos se les llama RTS, estoy creando uno y no sabia como se llamaba jejeje.
Bueno... La niebla osea lo oscuro podr?as mejor hacerlo con primitivas aca veras como Click aqui

Cita de: elviskelley en Noviembre 22, 2011, 07:33:30 PM
Gracias por decirme que este tipo de juegos se les llama RTS, estoy creando uno y no sabia como se llamaba jejeje.
Bueno... La niebla osea lo oscuro podr?as mejor hacerlo con primitivas aca veras como Click aqui

Me defines bien lo que son primitivas?