Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

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.


Temas - Texic

Páginas: 1 2 3
2
Guerra de IAs (GIA) / GIA_04 Maze Shooter Finalizada
« en: Octubre 27, 2013, 05:16:00 am »
La GIA 04 ha finalizado!!

Curiosamente he salido campeón, por favor no me apedreen por esto  XD
Como se sabrá yo competía en el concurso de manera oficial, lo que quizás muchos no saben es que la razón de esto fue para vencer a los ganadores de cada ronda y extender la GIA para que se vuelva un poco más interesante y duradera, el problema es que a mi ia se le pasó un poco la mano  :-[ (y la de Ciberman sufrió una embolia en la última ronda xD)

Descargas:
Editable con todas las ia's y sus respectivos registros
SDK vacío del concurso  :GM8:
SDK vacío del concurso  :GMS:



Lista de participantes en orden de llegada:
-Texic
-Ciberman
-Elviskelley
-Mgbu
-Pikamaker
-Brunoxzx
-Ferhand
-Knd144

Mis felicitaciones personales a todos, hicieron un trabajo excelente, recuerden que lo importante no es ganar sino la diversión de ver tu propia ia desparramando sangre en cada ronda (?
Fuera de chistes creo que esta clase de concursos sirven para agudizar el intelecto, espero que hayan aprendido mucho sobre el comportamiento de una ia en un top down shooter, y que sobre todo se hayan divertido en el proceso, que es la meta principal del concurso  ;D
Hasta la próxima!

3
Noticias / Radio Makero abierta al público
« en: Septiembre 23, 2013, 01:01:06 am »
Queridos usuarios, a partir de hoy se abre la recepción de contenidos para radio makero a todo público. Pueden crear contenido de cualquier tipo dentro de los estándares de cgm, este será sometido a evaluación y subido posteriormente a la radio. Los contenidos pueden abarcar publicidades, gameplays, entrevistas, podcasts, lo que se les ocurra mientras mantenga coherencia con la temática de la comunidad y no resulte ofensivo o demasiado soez. Para subir contenido van a tener que enviar los links por mp a Daz, luego en moderación nos encargamos de hacer la revisión y subirlos. No sean tímidos y envíen contenido con total confianza, saludos!

4
Noticias / La GIA 4 ha comenzado!!
« en: Septiembre 12, 2013, 02:47:15 am »

Como dice el título, ya ha dado comienzo la cuarta entrega de Guerra de IAs, los interesados pasen por este tema
http://www.comunidadgm.org/index.php?topic=19036.0

No conoces la GIA?
[youtube]http://www.youtube.com/watch?v=RmO6InSk-C0[/youtube]

Espero que, como en todas las entregas, haya mucha concurrencia y entusiasmo. Suerte a todos los participantes!

5
Guerra de IAs (GIA) / GIA_04 Maze Shooter
« en: Septiembre 12, 2013, 02:43:40 am »

YA ESTÁN LOS RESULTADOS DEL QUINTO ENCUENTRO!
Veanlo en el video que está debajo

[youtube]http://www.youtube.com/watch?v=Pqcf94ZcmB8[/youtube]

Compañeros de CGM, el momento ha llegado. Ha pasado mucho tiempo desde la última GIA, pero ha llegado la hora de ver las mentes más grandes de CGM competir entre sí por la supremacía total. La GIA de este año será un brutal top-down shooter en donde todas las IA se asesinarán entre sí para sobrevivir y lograr el mejor puntaje. Los datos de cada ronda serán actualizados en este mismo mensaje a medida que transcurra la GIA. La fecha del primer encuentro será el 25 de Septiembre, así que manos a la obra!

Antes del reglamento les dejo un video promocional armado por Daz
[youtube]http://www.youtube.com/watch?v=RmO6InSk-C0[/youtube]

Reglamento GIA 4

Citar
Bases de Guerra de IAs

¿Qué es GIA?

   Guerra de IAs, mejor conocido bajo las siglas "GIA" tiene como fin el ser un concurso en donde compitan IAs (Inteligencias Artificiales) en un marco de un videojuego.
   Los participantes se inscriben y generan sus IAs segun el marco y genero en el que se establezca el concurso. Por ejemplo, batallas de naves, carreras, un ajedrez, etc.

   El concurso consta de una serie de rondas que finaliza cuando se determina al Campeón definitivo. En cada ronda, la IA vencedora quedará con el título de Campeona. Luego, habrá un lapso de X semanas (ej: 2 semanas) para que los competidores intenten mejorar sus IAs y asi destronar a la IA Campeona. Este ciclo se repetirá hasta la ronda en la que la ultima IA Campeona no sea destronada quedándose asi con el título de Campeona definitiva y siendo asi la ganadora del concurso.

   Luego existe una segunda etapa del concurso en la que una ves declarado al ganador del concurso se liberan todos los codigos de fuente de las IAs participantes son sus respectivos registros para que el material generado sirva a todo el mundo.

   A modo de incentivar la creación de IAs, una vez finalizado el concurso se seguirán aceptando IAs. Claro que no estarán en el marco del concurso ni competirán por el premio pero será una forma de seguir generando material sobre IAs para el genero.

  Vamos a dar un ejemplo:
  "Supongamos que el tema seleccionado para la edición es "Carrera de Autos", en ese caso la IA campeona seria la que llegue en primer lugar."
   Pero como se dijo antes, habrá un plazo en donde los demás participantes podrán intentar derrocar a la IA Campeona. Y así sucesivamente hasta que se declare una IA definitiva.
  Luego de ello todos los registros de los participantes con sus respectivas IAs serian liberadas a modo de fomentar el aprendizaje por medio de una competencia.
  En este momento se podrán seguir mejorando las IAs a partir de los códigos ya liberados. Aunque la Campeona ya haya sido declarada como oficial Campeona eterna, eso no quita que pueda ser superada una vez que se liberen los códigos.

   Para hacer las IAs los participantes van a trabajar sobre un editable pre-diseñado con el engine del tema y género del concurso. Los participantes solo van a tener la capacidad de trabajar (picar código) sobre un solo objeto que será el del Droide/IA que va a representar al jugador. Luego, el encargado del concurso juntará todo en un editable maestro en donde se definen las rondas y compiten las IAs.



Reglamento General:

   Las acciones que pueda realizar la IA van a estar determinadas por unos scripts a los que van a tener que llamar, ubicados en el grupo "Usables".

   Dentro de las cosas que podrán programar sobre la IA hay ciertas reglas que deben seguir:

   1. Solo se trabaja sobre el objeto de la IA propia.
   2. No se pueden modificar variables existentes, solo chequearlas. Ej: X, Y, speed, globales.
   3. Solo se puede modificar variables creadas por uno mismo.
   4. No se puede hacer uso del evento draw.
   5. No se pueden crear instancias.
   6. Si se crean scripts deberán llamarse "scr_nombredeljuegador_nombredelscript"
   7. Habrá un lapso de al menos 3 días entre cada IA enviada.
   8. No se puede hacer la IA para un room especifico, debe ser capaz que funcionar bien en cualquier ambiente. Ej: if room=x {blabla} NO
   9. Si una IA relentiza demasiado el juego el juez puede optar por no validarla.
  10. Trabajar sobre hojas distintas a las que utilizan los scripts defaults que ya vienen con el editable.
  11. En las hojas se deberá incluir un // indicando si la hoja va antes o después del script default y en caso de ser varias numerarlas.
  12. A la hora de enviar el editable modificarle el nombre agregándole un _nombre del participante al final del mismo. EJ: GIA_01 La Carrera de los Droides_KrakenHimoto


   Este tipo de acciones invalidaran a las IAs, y en caso de ser groseras como querer Cerrar el juego (como algo muy obvio) podría sancionarse al jugador invalidándolo a presentar mas IAs.

   Esto no es una regla, pero es recomendable que mientras participan no liberen el código cosa de que cada jugador tome distintos rumbos que es donde toma gracia el concurso.


Registro de las IAs:

   Los jugadores deberán hacer un seguimiento de los problemas que les fueron surgiendo en el desarrollo de sus IAs, tanto los planes que fueron cambiando de rumbo como las dificultades a lo largo de los niveles.

Deberán ponerlo con un // en el evento create del objeto IA en hojas a parte.

El Evento Create estará conformado de 3 partes:

La 1er hoja default con el script scr_create();
La 2da hoja con el registro;
La 3er hoja con los códigos propios de la IA;

Haciendo referencia a la Hoja 2, deberá estar compuesta por:

DATOS de la IA.

   También deberían agregar la fecha de inicio y finalización de la IA más el nombre del creador y la versión de la IA.

Explicación de como piensa la IA.
 Ej:
-Primero busca armas y evade confrontaciones con enemigos escondiéndose en la caja más cercana
-Una vez que consigue buenas armas acepta cualquier confrontación realizando movimientos evasivos
-Si tiene poca vida se retira para buscar vida

Explicación de problemas surgidos .
Ej:
La realización del algoritmo que recorre las habitaciones fue simple, podría haber mejorado mucho el sistema de búsqueda.
Esto trajo consecuencias a la hora de conseguir rapidamente el armamento ya que daba vueltas por la habitación inclusive cuando debería saber que no hay nada, revisaba varias veces algunas zonas

Es recomendable que vallan actualizando el registro diariamente para no perder rastros de las IAs, también los ayudará a tener noción de la evolución de sus IAs.


GIA_04 Maze Shooter

   Ésta edición de GIA consiste en una batalla de supervivencia estilo shooter dentro de un maze generado de manera aleatoria.

    * Las batallas serán de todos contra todos sumando puntos por cada IA destruida y por durar más tiempo en la partida. Al finalizar tres rondas se verá una tabla de puntajes que determinará quien es la IA campeona.
    * Los Personajes cuentan con 2 slots para guardar armas e iniciarán con una pistola cargada con 72 balas. Podrán buscar en cada cuarto un arma nueva o más balas para su arma, siendo posible encontrar Pistolas, Ametralladoras y Escopetas.
    * El disparo de pistola hace 5 puntos de daño, el disparo de ametralladora hace 2 punto de daño y el disparo de escopeta hace 3 puntos de daño por perdigón (se disparan 5 por carga, y se dispersan rapidamente). Los personajes cuentan con 100 puntos de vida.
    * Las rondas tendrán un tiempo limite de 240 segundos.


Especificaciones de GIA_04

    * Deberán colocar en un .zip/rar el editable modificado.

    * Deberán enviarlo a kurtlobato@gmail.com, enviarmelo por mp o en el último de los casos por facebook (Kurt Lobato)

    * No se podrá hacer uso de funciones de chequeo de colisión o posiciones, sólo se pueden utilizar las funciones que están en el grupo "Usables" para ese propósito (la idea es que la IA tenga un rango de visión propio que es precalculado en el engine, no se debe romper ese concepto)

    * Deberán poner sus códigos en el evento User Defined 0

FAQ
¿Cuando comienza GIA Maze Shooter y cuanto durará?
El primer encuentro será el 25 de Septiembre del 2013. La duración depende de la intensidad de las batallas y cuánto tarde una en quedar campeona, pero habrá un encuentro por semana.

¿Cuanto tiempo me puede quitar el participar de esta competencia?
Es muy dependiente de cada participante, pero yo creo que con un par de días que le dediques a conciencia ya tendrás una IA mas que aceptable. Si hablamos de que la competencia probablemente dure mas de 1 mes estamos hablando de ínfimo tiempo de inversión.

¿De a cuantos personajes se harán las batallas?
Depende de la cantidad de IA's participantes, pero la totalidad participaran en todas las rondas, el mapa generado será más grande o más chico dependiendo de ello.

¿Se puede programar la IA en D&D?
No, las IAs deberán estar hechas 100% en código (GML).

¿Si los personajes colisionan qué pasa?
Nada, eso entorpecería mucho el gameplay así que los personajes no coisionan entre sí.

¿Puedo esconderme y "campear"?
Si es muy evidente tu IA podría ser descalificada, la idea es que la IA sea inteligente.

¿Como consigo el editable para ponerme manos a la obra?
En el momento que se inicie el concurso voy a subir el editable al foro de noticias.

¿Puedo personalizar mi personaje (gráficamente)?
Si, pero vas a tener que crear una sprite nueva que cumpla con los estándares de la original (mismo tamaño de sprite y misma máscara).

Scripts Disponibles

Los scripts disponibles se encuentran en el grupo "Usables", cada uno tiene descripción sobre lo que hace y los argumentos que lleva, así como un ejemplo de su uso. Los scripts que generen los jugadores deberán ser puestos en una carpeta creada en el grupo "Jugadores" con su nombre.


Como cargar un droide/IA?

   1. Crear el objeto de la IA haciendo un duplicado de la ia base (obj_ia).
   2. Ir al objeto obj_control y abrir el código del evento create
   3. Agregar el script scr_agregar_jugador(String nombre,Objeto IA) con los demás
   4. Poner una instancia de tu IA en el room de pruebas

Como hago referencia a mi enemigo?
Para hacer referencia a nuestro enemigo se utiliza el script scr_ver_enemigos que chequea si hay alguno en nuetro rango de visión. Luego para obtener la posición de cada uno ingresamos el número de enemigo que queremos chequear (entre 1 y la cantidad de enemigos).
Por ejemplo:

if scr_ver_enemigos()>0
{
for (i=1;i<=scr_ver_enemigos();i+=1)
{
posx=scr_pos_enemigo_x(i)
posy=scr_pos_enemigo_y(i)
}
}

----------------------------------------

Texic

El editable para que empiecen a trabajar se encuentra adjunto en este mensaje. Se trabaja con Game Maker 8 Pro o Game Maker Studio importando el gmk (mis agradecimientos a brunoxzx por el port)
Recuerden mirar cada tanto si se modificó el SDK, ya sea para arreglar errores o, durante la primera semana, agregar cosas que hayan faltado

Si tienen alguna duda pueden escribirme un mensaje privado, escribir por facebook (Kurt Lobato) o enviar un correo electrónico a kurtlobato@gmail.com

Mis personales agradecimientos a Daz, Ciberman y Jesus que fueron los que más me ayudaron a armar el concurso. Disfruten armando la IA, si encuentran algún bug me avisan

Saludos, Texic!

Nota: Algunas de las características del editable real que se usarán en los encuentros no existen en el sdk (por ejemplo el generador de mapas aleatorio, la tabla de puntajes o la finalización de rondas, ya sea por tiempo o falta de jugadores)

Nota 2: Al calcular un camino la posición de destino tiene que ser válida, hay que tener en cuenta que la sprite del personaje es centrada y las demás tienen orígen en 0,0

Última modificación del SDK
30/09/13

Se arreglaron un par de validaciones para no espiar fuera del room
Se agregaron scripts para extender la detección de enemigos
Se agregó un script de movimiento en 8 direcciones
Se agregó el evento User defined 1 que se activa cuando la IA escucha algo

Se agregó un jugador manual para testeo
Se arrelgó un error de giro de máscara que provocaba atascamientos en ciertas circunstancias
Ahora las IA que disparen en movimiento tendrán menos puntería que las que lo hagan quietas
Reparado un bug al portar a studio que no permitía obtener la cantidad de puertas, cajas ni obtener vida extra
Reparado un bug que causaba problemas cuando la IA calculaba un camino fuera de la habitación

Se reparó la función raycast_ext
Se reparó la función scr_recoger_arma que no cambiaba el tipo visible del objeto en el piso
Modificada la función scr_vista meramente para mejorar el rendimiento
Se agregó una función para conocer el nombre del enemigo

Modificados los argumentos de la función scr_calcular_camino
Reparadas las funciones de camino que provocaban errores cuando no se chequeaba que el camino fuera correcto
Reparado un error que provocaba un bucle infinito al disparar en el evento de escuchar
Reparado un error que provocaba un bucle infinito al recargar en el evento de escuchar

6
Desarrollo de Scripts / Dibujar curvas bezier
« en: Agosto 28, 2013, 04:20:33 pm »
Creador: Texic

Version de GM utilizada:  :GM8:

Descripcion:
Se trata de dos scripts que pueden dibujar curvas bezier. Uno dibuja curvas cuadráticas (con sólo un punto de control entre el inicio y el fin) y otra cúbicas (con 2 puntos de control entre inicio y fin)

draw_bezier_quadratic
/*
argument0 = x del punto inicial
argument1 = y del punto inicial
argument2 = x del punto final
argument3 = y del punto final
argument4 = x del punto de anclaje
argument5 = y del punto de anclaje
*/
var p1x,p1y,p2x,p2y,p3x,p3y,pointsx,pointsy,c,t;
p1x=argument0
p1y=argument1
p2x=argument2
p2y=argument3
p3x=argument4
p3y=argument5
pointsx=ds_list_create()
pointsy=ds_list_create()
ds_list_add(pointsx,p1x)
ds_list_add(pointsy,p1y)
c=max(point_distance(p1x,p1y,p2x,p2y) div 20,4)
for (i=1;i<=c;i+=1)
{
t=i/c
ds_list_add(pointsx,(sqr((1-t)))*p1x+(2*(1-t)*t*p3x)+(sqr(t)*p2x))
ds_list_add(pointsy,(sqr((1-t)))*p1y+(2*(1-t)*t*p3y)+(sqr(t)*p2y))
}
for (i=0;i<=ds_list_size(pointsx)-2;i+=1)
{
draw_line(ds_list_find_value(pointsx,i),ds_list_find_value(pointsy,i),ds_list_find_value(pointsx,i+1),ds_list_find_value(pointsy,i+1))
}
ds_list_destroy(pointsx)
ds_list_destroy(pointsy)

draw_bezier_cubic
/*
argument0 = x del punto inicial
argument1 = y del punto inicial
argument2 = x del punto final
argument3 = y del punto final
argument4 = x del punto de anclaje de inicio
argument5 = y del punto de anclaje de inicio
argument6 = x del punto de anclaje de fin
argument7 = y del punto de anclaje de fin
*/
var p1x,p1y,p2x,p2y,p3x,p3y,p4x,p4y,pointsx,pointsy,c,t;
p1x=argument0
p1y=argument1
p2x=argument2
p2y=argument3
p3x=argument4
p3y=argument5
p4x=argument6
p4y=argument7
pointsx=ds_list_create()
pointsy=ds_list_create()
ds_list_add(pointsx,p1x)
ds_list_add(pointsy,p1y)
c=max(point_distance(p1x,p1y,p2x,p2y) div 10,20)
for (i=1;i<=c;i+=1)
{
t=i/c
ds_list_add(pointsx,(power((1-t),3))*p1x+(3*sqr((1-t))*t*p3x)+(3*(1-t)*sqr(t)*p4x)+(power(t,3)*p2x))
ds_list_add(pointsy,(power((1-t),3))*p1y+(3*sqr((1-t))*t*p3y)+(3*(1-t)*sqr(t)*p4y)+(power(t,3)*p2y))
}
for (i=0;i<=ds_list_size(pointsx)-2;i+=1)
{
draw_line(ds_list_find_value(pointsx,i),ds_list_find_value(pointsy,i),ds_list_find_value(pointsx,i+1),ds_list_find_value(pointsy,i+1))
}
ds_list_destroy(pointsx)
ds_list_destroy(pointsy)

Como siempre dejo un ejemplo adjunto. Aclaro que no hace falta recalcular siempre la curva, pueden hacerle las modificaciones pertinentes para quedarse con la lista de puntos y dibujarla sin recalcular
Espero que a alguno le sirva  :)
Saludos makeros!

7
Noticias / Juntada Makera en Mar del Plata!
« en: Febrero 25, 2013, 04:42:09 pm »
Hola makeros! Les comunico que estoy organizando personalmente una juntada makera en mar del plata (argentina) para las vacaciones de invierno. Todavía hay muchos puntos a confirmar, como el día, la hora, el punto de encuentro exacto y el lugar donde nos juntamos pero ya tengo una idea de cada una, hay que irla adaptando a las necesidades de cada uno de los que vaya. La idea es juntarnos en plaza mayo, el shopping los gallegos o directamente en la terminal de omnibus tipo 10 (se verá según los horarios de micro de cada uno) y de ahí ir pateando para la pizzería "La nieve" que queda en la esquina de rivadavia y la rioja. De ahí podemos ir a dar una vuelta, ir a alguna plaza o a la costa a tomar mates y seguir la charla, veremos qué prefieren hacer. Voy posteando desde ahora para que me vayan confirmando los que pueden ir, me parece que estaría bueno vernos cara a cara y hay tiempo para ahorrar para pasajes. Si quieren recomendar un punto más intermedio o a alguno carece de plata para movilizarse hasta mardel vemos cómo hacemos. Bueno, los que quieran ir vayan avisando por acá y cuando sepamos más o menos los que somos repasamos cada uno de los puntos. Saludos!

8
Desarrollo de Scripts / Scripts extendidos para listas
« en: Febrero 19, 2013, 07:27:21 pm »
Creador: Yo

Version de GM utilizada:  :GM8:

Descripcion:
Una recopilación de scripts útiles para listas creado por mi, extiende las funciones permitiendo mezclar o ordenar 2 listas ligadas (o más modificando los scripts), buscar y reemplazar un valor o todos (como la función string_replace_all), y encontrar todas las repeticiones de un valor en una lista con la posición detallada de cada uno

ds_list_sort_both
//argument0=lista 1
//argument1=lista 2
//argument2=ascendente
//argument3=preciso
var a,b,isreal,isreal2;
if argument3=0
{
if ds_list_size(argument0)<>ds_list_size(argument1) {return -1}
a=ds_list_create()
ds_list_copy(a,argument0)
b=ds_list_create()
ds_list_copy(b,argument1)
ds_list_sort(argument0,argument2)
for (i=0;i<=ds_list_size(argument1)-1;i+=1)
{
ds_list_replace(argument1,i,ds_list_find_value(b,ds_list_find_index(a,ds_list_find_value(argument0,i))))
}
ds_list_destroy(a)
ds_list_destroy(b)
return 1
}
else
{
if ds_list_size(argument0)<>ds_list_size(argument1) {return -1}
isreal=ds_list_create()
isreal2=ds_list_create()
for (i=0;i<=ds_list_size(argument0)-1;i+=1)
{
ds_list_add(isreal,is_real(ds_list_find_value(argument0,i)))
ds_list_replace(argument0,i,string(ds_list_find_value(argument0,i))+string(i))
ds_list_add(isreal2,is_real(ds_list_find_value(argument1,i)))
ds_list_replace(argument1,i,string(ds_list_find_value(argument1,i))+string(i))
}
a=ds_list_create()
ds_list_copy(a,argument0)
b=ds_list_create()
ds_list_copy(b,argument1)
ds_list_sort(argument0,argument2)
for (i=0;i<=ds_list_size(argument1)-1;i+=1)
{
ds_list_replace(argument1,i,ds_list_find_value(b,ds_list_find_index(a,ds_list_find_value(argument0,i))))
}
for (i=0;i<=ds_list_size(argument0)-1;i+=1)
{
ds_list_replace(argument0,i,string_delete(ds_list_find_value(argument0,i),string_length(ds_list_find_value(argument0,i)),1))
if ds_list_find_value(isreal,i) {ds_list_replace(argument0,i,real(ds_list_find_value(argument0,i)))}
ds_list_replace(argument1,i,string_delete(ds_list_find_value(argument1,i),string_length(ds_list_find_value(argument1,i)),1))
if ds_list_find_value(isreal2,i) {ds_list_replace(argument1,i,real(ds_list_find_value(argument1,i)))}
}
ds_list_destroy(a)
ds_list_destroy(b)
ds_list_destroy(isreal)
ds_list_destroy(isreal2)
return 1
}
Este script ordena una lista (lista 1) en orden ascendente o descendente dejando intacta la lista ligada (lista 2). El argumento preciso debe usarse si en la lista 1 existen valores que se repiten, de otra manera se recomienda no usarlo ya que consume más recursos. Las listas deben tener el mismo tamaño. Devuelve 1 si la operación es exitosa, de lo contrario devuelve -1

ds_list_shuffle_both
//argument0=lista 1
//argument1=lista 2
//argument2=preciso
var a,b,isreal,isreal2;
if argument2=0
{
if ds_list_size(argument0)<>ds_list_size(argument1) {return -1}
a=ds_list_create()
ds_list_copy(a,argument0)
b=ds_list_create()
ds_list_copy(b,argument1)
ds_list_shuffle(argument0)
for (i=0;i<=ds_list_size(argument1)-1;i+=1)
{
ds_list_replace(argument1,i,ds_list_find_value(b,ds_list_find_index(a,ds_list_find_value(argument0,i))))
}
ds_list_destroy(a)
ds_list_destroy(b)
return 1
}
else
{
if ds_list_size(argument0)<>ds_list_size(argument1) {return -1}
isreal=ds_list_create()
isreal2=ds_list_create()
for (i=0;i<=ds_list_size(argument0)-1;i+=1)
{
ds_list_add(isreal,is_real(ds_list_find_value(argument0,i)))
ds_list_replace(argument0,i,string(ds_list_find_value(argument0,i))+string(i))
ds_list_add(isreal2,is_real(ds_list_find_value(argument1,i)))
ds_list_replace(argument1,i,string(ds_list_find_value(argument1,i))+string(i))
}
a=ds_list_create()
ds_list_copy(a,argument0)
b=ds_list_create()
ds_list_copy(b,argument1)
ds_list_shuffle(argument0)
for (i=0;i<=ds_list_size(argument1)-1;i+=1)
{
ds_list_replace(argument1,i,ds_list_find_value(b,ds_list_find_index(a,ds_list_find_value(argument0,i))))
}
for (i=0;i<=ds_list_size(argument0)-1;i+=1)
{
ds_list_replace(argument0,i,string_delete(ds_list_find_value(argument0,i),string_length(ds_list_find_value(argument0,i)),1))
if ds_list_find_value(isreal,i) {ds_list_replace(argument0,i,real(ds_list_find_value(argument0,i)))}
ds_list_replace(argument1,i,string_delete(ds_list_find_value(argument1,i),string_length(ds_list_find_value(argument1,i)),1))
if ds_list_find_value(isreal2,i) {ds_list_replace(argument1,i,real(ds_list_find_value(argument1,i)))}
}
ds_list_destroy(a)
ds_list_destroy(b)
ds_list_destroy(isreal)
ds_list_destroy(isreal2)
return 1
}
Hace lo mismo que el script anterior pero mezclando la lista 1 de manera aleatoria, también se debe notar que se elimina el parámetro ascendente. Las listas deben tener el mismo tamaño. Devuelve 1 si la operación es exitosa, de lo contrario devuelve -1

ds_list_find_replace
//argument0=lista
//argument1=valor buscado
//argument2=valor con el que será reemplazado
var a;
a=ds_list_find_index(argument0,argument1)
if a<>-1 {ds_list_replace(argument0,a,argument2)}
return a
Este script reemplaza el primer valor encontrado en una lista por el valor deseado. Devuelve la posición del elemento reemplazado si se encontró, de lo contrario devuelve -1

ds_list_find_replace_all
//argument0=lista
//argument1=valor buscado
//argument2=valor con el que será reemplazado
var a,b;
b=-1
a=ds_list_find_index(argument0,argument1)
while a<>-1 {ds_list_replace(argument0,a,argument2) a=ds_list_find_index(argument0,argument1) b=1}
return b
Este script reemplaza todos los valores encontrados en una lista por el valor deseado. Devuelve 1 si se encontró y reemplazó algún valor, de lo contrario devuelve -1

ds_list_find_index_all
//argument0=lista
//argument1=valor buscado
var a,b;
aux=ds_list_create()
b=-1
a=ds_list_find_index(argument0,argument1)
while a<>-1 {ds_list_replace(argument0,a,"_*#@") ds_list_add(aux,a) a=ds_list_find_index(argument0,argument1)}
a=ds_list_find_index(argument0,"_*#@")
while a<>-1 {ds_list_replace(argument0,a,argument1) a=ds_list_find_index(argument0,"_*#@")}
return aux
Este script encuentra todas las posiciones de un valor buscado en la lista y los vierte en una lista nueva, devuelve el índice de dicha lista

Bueno, esos son todos, me costó un poco hacer algunos, pero a mi particularmente me estaban haciendo falta, espero que a alguno le sirva, saludos!  :)

9
Juegos en desarrollo / Consola GM
« en: Noviembre 20, 2012, 03:58:51 am »

Consola GM

Otro

GM8

Consola GM es una consola de juegos para game maker que te permite descargar y jugar los mejores juegos hechos en GM con absoluta facilidad y comodidad. Tiene una agradable pantalla de selección con screenshots para que no vuelvas a olvidarte de qué iba ese juego que no tocas hace mucho tiempo. La lista de juegos descargables se actualiza con frecuencia, sin necesidad de redescargar el programa










EJECUTABLE: http://dl.dropbox.com/u/18232060/Juegos%20proyecto/Consola%20GM.rar

EDITABLE: http://dl.dropbox.com/u/18232060/Editable%20de%20Consola%20GM.rar


Si tienen alguna sugerencia para hacer, duda o queja, no duden en decírmelo


10
Mercado / Artículos relacionados
« en: Septiembre 29, 2012, 12:51:52 pm »
Listado de articulos relacionados con los contenidos de este subforo.

Están todos invitados a continuar añadiendo entradas a esta lista.

Citar
Un poco de historia, el CRASH del 84'
Juegos Web y Otros Modelos de Negocio
El mercado de los videojuegos para móviles
El precio de los videojuegos
Los 100 mejores videojuegos
El cine y los Videojuegos

11
Desarrolladores / Texic Games
« en: Septiembre 23, 2012, 09:16:53 pm »




Texic

13/08/2008

Argentina

Bueno, básicamente soy otro makero más que se interesa en esto del game maker. Tengo un nivel bastante alto de makeo (en mi opinión) y desarrollé casi todos los géneros de juegos, aunque mi enfoque principal es el online. Sé manejar el photoshop, un poco de pixel art, visual basic, pascal, flash y corel draw. Actualmente estoy estudiando Licenciatura en Informática en la ciudad de La Plata (Buenos Aires, Argentina)



- Pokémon TCG Online



- Consola GM
- Devorados por múltiples actualizaciones del foro



- Msn
- Gmail
- Facebook



12
Mercado / Estrategia de ventas
« en: Septiembre 13, 2012, 06:54:13 pm »
Bueno, como he estado comentando en el grupo de facebook, se me ha ocurrido para comenzar a hacer conocer mis juegos, venderlos en convenciones de animé y videojuegos en formato físico (con cajita, cd impreso con lightscribe y quizás un manual). El precio de producción podría llegar a ar$18 por cd, o ese es mi cálculo inicial. Otra versión podría incluir solamente la cajita y el cd, sin manual, pero el juego tendría algunos extras para compensar por un precio bastante más bajo (unos ar$ 12). Cuál creen que es más vendible, con un precio cercano al precio de costo? O qué estrategia utilizarían ustedes para distribuirlo mejor?

13
Noticias / Euclideon y su nuevo engine 3D
« en: Agosto 06, 2012, 03:18:12 am »
Les dejo este video por acá

Es una de las demostraciones más interesantes que he visto. Con esto la compañía euclideon se ha ganado varios enemigos, pero tienen mi apoyo, no se logra lo que ellos lograron sin poder hacer el resto. Ya el avance que han dado es colosal, impresionante diría yo. Está en inglés sin subtítulos lamentablemente, quizás en algún momento se me dé por traducirlo pero mientras tanto los que hablen inglés, vale muchísimo la pena el video. Los va a dejar con la boca abierta sin dudas

14
Desarrollo de Scripts / Asociar Extensión
« en: Agosto 01, 2012, 11:54:35 pm »
Creador: Texic
Versión de Gm utilizada:  :GM8:
Descripción: Este script sirve para crear una asociación entre un tipo de archivo y un archivo ejecutable. Puede hacerlo de dos maneras, por medio de los scripts en gml (silencioso), y si no funciona (por ejemplo en windows 7 o similares) pasa al modo no silencioso, creando y ejecutando un archivo de registro .reg
Script:
Código: [Seleccionar]
//argument0: Extensión a asociar (string) Ej: ".svk"
//argument1: Ruta del archivo con que abrirlo (string) Ej: "C:\Mijuego\Juego.exe"
//argument2: Ruta del ícono asociado (string) Ej: "C:\Mijuego\Icono.ico" (Opcional)
//argument3: Tipo de archivo (string) Ej: "Archivo Guardado"
b=registry_set_root(2)
if registry_exists("\"+argument0) {exit}
b+=registry_write_string_ext("\"+argument0,"",string_copy(argument0,2,3)+"file")
b+=registry_write_string_ext('\'+string_copy(argument0,2,3)+"file","",argument3)
b+=registry_write_string_ext('\'+string_copy(argument0,2,3)+"file"+'\shell\open\command',"",argument1+' %1')
if variable_local_exists(argument2) {b+=registry_write_string_ext("\"+string_copy(argument0,2,3)+"\DefaultIcon","",argument2)}
if b=0{
argument1=string_replace_all(string_replace_all(argument1,"\","|"),"|","\\")
argument2=string_replace_all(string_replace_all(argument2,"\","|"),"|","\\")
str='Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\'+argument0+']
@="'+string_copy(argument0,2,3)+"file"+'"

[HKEY_CLASSES_ROOT\'+string_copy(argument0,2,3)+'file'+']
@="'+argument3+'"

[HKEY_CLASSES_ROOT\'+string_copy(argument0,2,3)+"file"+'\DefaultIcon]
@="'+argument2+'"

[HKEY_CLASSES_ROOT\'+string_copy(argument0,2,3)+'file'+'\shell]

[HKEY_CLASSES_ROOT\'+string_copy(argument0,2,3)+'file'+'\shell\open]

[HKEY_CLASSES_ROOT\'+string_copy(argument0,2,3)+'file'+'\shell\open\command]
@="'+argument1+' %1"
'
a=file_text_open_write(working_directory+"\reg.reg")
file_text_write_string(a,str)
file_text_close(a)
execute_shell(working_directory+"\reg.reg",0)
}
str='@echo off
taskkill /IM explorer.exe /F
CD /d %userprofile%\AppData\Local
DEL IconCache.db /a
explorer.exe
exit'
a=file_text_open_write(temp_directory+"\act.bat")
file_text_write_string(a,str)
file_text_close(a)
while(1)
{
screen_redraw()
screen_refresh()
if registry_exists_ext("\"+argument0,"") {execute_shell(temp_directory+"\act.bat",0) break}
}

Soporte para íconos personalizados agregado, y ejemplo sobre cómo usar los parameter string y count para reconocer los archivos asociados abiertos. Usenlo con sabiduría! ;P

Ejemplo Adjunto

PD: Para que el ícono y el nombre de la extensión sean visibles se corre un comando .bat, si lo desean pueden pasar esos comandos de manera silenciosa con silentdos, que se encuentra en gmtoolbox.com. Lo dejo a su elección, de otra manera se muestra en pantalla

15
Desarrollo de Scripts / sprite_change_color
« en: Junio 13, 2012, 08:15:22 pm »
Creador: Texic
Versión de Gm utilizada: :GM8:
Descripción: Este script sirve para cambiar el color de un sprite por otro. Por el momento no funciona para cambiar colores transparentes, sólo colores sólidos.
Script
Código: [Seleccionar]
//argument0=color a cambiar
//argument1=color deseado
//argument2=sprite a cambiar
var w,h,i,j,sp,count,sn;
count=1
w=sprite_get_width(argument2)
h=sprite_get_height(argument2)
xo=sprite_get_xoffset(argument2)
yo=sprite_get_yoffset(argument2)
sn=sprite_get_number(argument2)
a=surface_create(w,h)
surface_set_target(a)
draw_clear_alpha(c_white,0)
draw_sprite(argument2,0,0,0)
for (i=0;i<=h;i+=1)
{
for (j=0;j<=w;j+=1)
{
if surface_getpixel(a,j,i)=argument0 {draw_point_color(j,i,argument1)}
}
}
surface_reset_target()
sp=sprite_create_from_surface(a,0,0,w,h,0,0,xo,yo)
surface_free(a)
while sn>1 and count<>sn {
a=surface_create(w,h)
surface_set_target(a)
draw_clear_alpha(c_white,0)
draw_sprite(argument2,count-1,0,0)
for (i=0;i<=h;i+=1)
{
for (j=0;j<=w;j+=1)
{
if surface_getpixel(a,j,i)=argument0 {draw_point_color(j,i,argument1)}
}
}
surface_reset_target()
sprite_add_from_surface(sp,a,0,0,w,h,0,0)
surface_free(a)
count+=1
}
return sp

Ejemplo: Adjunto

Páginas: 1 2 3