Noticias

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

* Sponsor

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!.

Autor Tema: Scripts en desarrollo  (Leído 3788 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dixon

en: Abril 25, 2020, 07:53:06 pm
Buen día, saludos cordiales.

Si dios quiere se desarrollará el siguiente script

draw_hipertext
Nombre del script:  Nombres propuestos: draw_hipertext, draw_rtf (Rich Text Format), draw_forotext, draw_htmltext…
Breve descripción de su función: Devolver string o texto con hiperenlaces y otras funciones aún no definidas.
Game Maker utilizado: Game Maker 4.1c (2001), se pretende compatibilidad con otras versions.
Importancia del script: Para agilizar la interacción de los usuarios de programas Gmk, se propone el presente script con el cual se pretende enriquecer los distintos textos o string mediante el reconocimiento de diversas marcas o etiquetas tales como: url e img.



Script en etapa 1:
Código: [Seleccionar]
repeat(score=0)
{
texto="Para visitar la comunidad Game Maker, presiona [url=https://www.comunidadgm.org]Aquí[/url]"


//lector
argument1=texto

code=0
str_code=""
et_ap=0
et_cp=0
url_p=0
url_length=0
contenido_p=0
contenido_length=0
length=string_length(argument1)
for(i=1;i<=length;i+=1)
{
str_ram=string_copy(argument1,i,1)
if(str_ram="[" && code=0){code=1;et_ap=i}


if(code=3){
if(str_ram="["){code=4;str_code="";et_cp=i}else{contenido_length+=1}}

if(code=2){
if(str_ram="]"){code=3;str_code="";contenido_p=i+1}else{url_length+=1}}

if(code=1){
str_code+=str_ram
if(str_code="[url="){code=2;url_p=i+1;str_code=""}}


}

etiqueta_a=string_copy(texto,et_ap,5)
etiqueta_c=string_copy(texto,et_cp,6)
url_x=string_copy(texto,url_p,url_length)
contenido_x=string_copy(texto,contenido_p,contenido_length)



score=1
}

//botones
if(keyboard_check(113)){game_restart()}

//dibujo
dy=0
dx=0

txt=texto
txt="Texto: "+string(txt)
draw_text(dx,dy,txt)
dy+=40;if(dy>room_height-20){dy=0;dx+=100}

txt=etiqueta_a
txt="Etiqueta de apertura: "+string(etiqueta_a)
draw_text(dx,dy,txt)
dy+=20;if(dy>room_height-20){dy=0;dx+=100}

txt=etiqueta_c
txt="Etiqueta de cierre: "+string(txt)
draw_text(dx,dy,txt)
dy+=20;if(dy>room_height-20){dy=0;dx+=100}


txt=url_x
txt="Dirección web: "+string(url_x)
draw_text(dx,dy,txt)
dy+=20;if(dy>room_height-20){dy=0;dx+=100}

txt=contenido_x
txt="Contenido o texto a mostrar: "+string(txt)
draw_text(dx,dy,txt)
dy+=20;if(dy>room_height-20){dy=0;dx+=100}


Resultado de etapa 1
« Última modificación: Abril 27, 2020, 07:43:59 pm por dixon »

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado dixon

Respuesta #1 en: Abril 27, 2020, 07:46:59 pm
Hola, saludos.
Si dios quiere, se logrará la creación el siguiente script:
Plataformas precisas
Etapa 15-17

Nombre del script:  pp_movimientos (movimientos para plataformas precisas).
Breve descripción de su función: Facilitar la creación de juegos de plataforma, garantizar movimientos precisos sin errores y garantizar diversas funcionalidades.
Game maker utilizado: Compatible con todas las versiones desde Game Maker 5.3A hasta studio.

¿Qué se puede hacer con este script?
Mediante este paquete de scripts se puede mover a un objeto con precisión en juegos de plataforma.
 El objeto podrá:
1.   Subir y bajar colinas cuidando los detalles del movimiento.
2.   La máscara del objeto podrá ser tan pequeña como un pixel, sin generar errores
3.   El movimiento cuenta con aceleración y fricción para garantizar  la creación de suelos resbaladizos de hielo.
4.   Interactuar con los techos de la plataforma.

 También se podrá:
1.   Configurar las teclas rápidamente.
2.   Graduar el movimiento del objeto de manera fácil.
3.   Asignar fácilmente los múltples sprites del personaje.

Modo de uso: Copiar los scripts uno por uno y crear una lista de scripts en game maker con su nombre exacto. Luego colocar los siguientes códigos en un objeto:

para el evento create
Código: [Seleccionar]
pp_create()
para el evento step
Código: [Seleccionar]
pp_inicio()
pp_mando(vk_left,vk_up,vk_right,vk_down,ord("Z"))
pp_movimientos(5,0.75,0.25,1,5.5,1,-2)

Lista de scripts
Spoiler
pp_creacion
Código: [Seleccionar]
//Nombre del script: pp_creacion
//Este script es para el evento create o creación

//Variables para script pp_movimientos
//pp_movimientos(velocidad,aceleracion,friccion,gravedad,salto,techo,object_type)
pp_velocidad=0 //Velocidad horizontal máxima a alcanzar.
pp_aceleracion=0 //Aceleración o incremento de la pp_velocidad horizontal.
pp_friccion=0 //Fricción o rose que disminuye la pp_velocidad horizontal.
pp_gravedad=0 //Gravedad con la que los objetos son atraídos hacia abajo.
pp_salto=0 //Fuerza de salto o pp_velocidad inicial ascendente.
pp_techo=0 //Interacción con el techo; puede tener cuatro valores: 0 para que tarde un poco en bajar, 1 para colisionar normalmente, 2 para rebotar, 3 para pegarse al techo dejando presionada la tecla de salto.
pp_tipo_objeto=0//Tipo de objeto con el cual se puede colisionar. se puede colocar lo siguiente: -1 para objetos solidos, -2 para todos los objetos y tambien se pueden colocar el nombre o numero de objeto para especificar al objeto.

//variables de dirección y salto
pp_d=1 //dirección inicial que tendrá el objeto: 1 derecha y -1 izquierda.
pp_vxpre=0// pp_velocidad x previa, o movimiento horizontal sin analizar.
pp_vs=0//pp_velocidad vertical
control=0 //para controlar el movimiento del personaje

//INDISPENSABLE PARA script pp_movimientos
pp_movimientos_numero=0 //Contador de scripts movimiento
pp_boton_izquierda=0
pp_boton_arriba=0
pp_boton_derecha=0
pp_boton_abajo=0
pp_boton_salto_pressed=0
pp_boton_salto=0

//INDISPENSABLES PARA script pp_mando
pp_mando_numero=0//Contador de scripts pp_mando

//INDISPENSABLES PARA pp_sprites
pp_sprite_diry=1
pp_sprite_movimientox=0
pp_sprite_movimientoy=0

//INDISPENSABLE PARA pp_sprite y pp_movimiento
pp_estado="suelo"
pp_estado2="parado"
pp_colina=0//para las colinas

//resbalarse en colinas
pp_aceleracion_colina=0
pre_colina=0
v_colina=0


pp_libre
Código: [Seleccionar]
//Nombre del script: pp_libre
//Este script lo requiere el script pp_movimientos.
//pp_libre(x,y,tipo_objeto): para determinar si un tipo de objeto se encuenta en un lugar, En tipo_objeto puedes usar -1 para solidos, -2 para todos y el nombre de un objeto.

//Este script cumple la función de detectar objetos al igual que las funciones meeting, free y empty. Es indispensable para controlar el tipo de objeto a detectar.
{
libre_object=argument2 //Detectando tipo de objeto
pre_return=0 //Preparando la salida del script
if(libre_object>=0){pre_return+=(place_meeting(argument0,argument1,libre_object)=0)}//Verificando si se ha indicado objeto
pre_return+=place_free(argument0,argument1)*(libre_object=-1)//Verificando si el objeto es solido
pre_return+=place_empty(argument0,argument1)*(libre_object<=-2)//Verificando a cualquier objeto
return pre_return //Devolviendo resultado.
}

//Este código presentaba errores en Html5 pero se remplazó la siguiente función
//pre_return+=(place_meeting(argument0,argument1,argument2)=0)*(libre_object>=0)
//se reemplazó por esta:
//if(libre_object>=0){pre_return+=(place_meeting(argument0,argument1,libre_object)=0)}




pp_inicio
Código: [Seleccionar]
//Nombre del script: pp_inicio
//Este script debe ser el primero en el evento step.
//Es indispensable para contar a los diferentes scripts.

//para los scripts input
pp_mando_numero=0 //numero de scripts input que se van ejecutando por step.
pp_movimientos_numero=0 //numero de scripts movements que se van ejecutando por step.




pp_mando
Código: [Seleccionar]
//Nombre del script: pp_mando
//Este script se coloca en el evento step debajo del script pp_inicio
//Se emplea para definir las teclas a usar.

//Estructura
//pp_mando(pp_boton_izquierda,pp_boton_arriba,pp_boton_derecha,pp_boton_abajo,boton_salto)

//Ejemplo de uso:
//pp_mando(ord("A"),ord("W"),ord("D"),ord("S"),ord("M"))
//pp_mando(vk_left,vk_up,vk_right,vk_down,ord("X"))
//pp_mando(100,104,102,98,ord("X"))

pp_mando_numero+=1; //contando los scripts pp_mando.
if(pp_mando_numero=1){//Para evitar errores por muchos scrpts pp_mando
//botones a usar
pp_boton_izquierda=keyboard_check(argument0)
pp_boton_arriba=keyboard_check(argument1)
pp_boton_derecha=keyboard_check(argument2)
pp_boton_abajo=keyboard_check(argument3)
pp_boton_salto_pressed=(pp_boton_salto=0)*keyboard_check(argument4)
pp_boton_salto=keyboard_check(argument4)
}

pp_movimientos
Código: [Seleccionar]
//Nombre del script: pp_movimientos
//Se coloca en el evento step o paso, debajo de pp_mando.

//Estructura:
//pp_movimientos(velocidad,aceleracion,friccion,gravedad,salto,techo,tipo_objeto)

//Ejemplo de uso:
//Normal: pp_movimientos(5,1,0.5,1,5.5,1,-2)
//Hielo: pp_movimientos(5,0.4,0.1,1,5.5,1,-2)
//Gravedad de luna: pp_movimientos(3,0.4,0.08,0.29,2.2,1,-2)

pp_movimientos_numero+=1 ;//sumando cada script movements.
if(pp_movimientos_numero=1) //garantizando el uso de un solo script movement para evitar errores.
{

/////////////////////////ADMINISTRADOR DE ARGUMENTOS
pp_velocidad=argument0; //Velocidad X máxima, o velocidad horizontal máxima.
pp_aceleracion=argument1; //Aceleracion del movimiento x, o movimiento horizontal.
pp_friccion=argument2; //Fricción del movimiento horizontal
pp_gravedad=argument3 //Gravedad, o velocidad vertical positiva.
pp_fuerza_salto=argument4 //Fuerza de salto o velocidad inicial ascendente
pp_techo=argument5 //Techo: tipo de choque con techo
pp_tipo_objeto=argument6 //detectando el tipo de objeto con el cual colisionar

//condiciones para estar agachado según mario world 1 snes
if((pp_estado="suelo")&&(pp_boton_abajo)){pp_estado2="agachado"}
if((pp_estado2="agachado")&&(pp_estado="suelo")&&(pp_boton_abajo=0)){pp_estado2="parado"}
if(pp_colina!=0){pp_estado2="parado"}

//condiciones para permitir el caminar segun mario bros world 1 snes
condicion1=(pp_estado="no_suelo")
condicion2=(pp_estado="suelo" && pp_estado2="parado")

//condiciones para resbalarse en colina
condicion4=(pp_estado="suelo")*pp_libre(x-3,y+1,pp_tipo_objeto)*(pp_libre(x,y+2,pp_tipo_objeto)=0)
condicion3=(pp_estado="suelo")*pp_libre(x+3,y+1,pp_tipo_objeto)*(pp_libre(x,y+2,pp_tipo_objeto)=0)
pp_colina=0
if(condicion4){pp_colina=-1}
if(condicion3){pp_colina=1}
pp_aceleracion_colina=abs(pp_colina)

////////////////////////MOVIMIENTO X O MOVIMIENTO HORIZONTAL
//pp_velocidad=argument0; //Velocidad X máxima, o pp_velocidad horizontal máxima.
//pp_aceleracion=argument1; //Aceleracion del movimiento x, o movimiento horizontal.
//pp_friccion=argument2; //Fricción del movimiento horizontal
control=(pp_boton_izquierda+pp_boton_derecha=1) //Permite el movimiento horizontal solo cuando una sola de las teclas son presionadas.
if(control){pp_d=1-2*pp_boton_izquierda} //Permite el cambio de la dirección. 1 para derecha y -1 para izquierda.
if(control && (condicion1||condicion2)){pp_vxpre+=pp_aceleracion*pp_d} //relacionando la velocidad con la direccion.
if((control=0)&&(condicion3 || condicion4)){pp_vxpre+=((pp_colina=1)-(pp_colina=-1))*((pp_aceleracion_colina)+(pp_aceleracion_colina*2*pp_boton_abajo))} //Mover a estar en una colina
if(pp_vxpre>pp_velocidad){pp_vxpre=pp_velocidad}//limitando la velocidad
if(pp_vxpre<-pp_velocidad){pp_vxpre=-pp_velocidad}//limitando la velocidad negativa
if(abs(pp_vxpre)){pp_vxpre-=sign(pp_vxpre)*pp_friccion}//reduciendo la velocidad con la fricción
if((pp_vxpre<pp_friccion) && (pp_vxpre>-pp_friccion)){pp_vxpre=0}//Evitando errores: Haciendo la velocidad cero cuando esté proxima a cero.
///CALCULANDO EL MOVIMIENTO X DEFINITIVO.
xdef=0 //movimiento X, definitivo sin colisiones. Por calcularse.
for(i=1;i<=abs(pp_vxpre) && pp_libre(x+i*sign(pp_vxpre),y,pp_tipo_objeto);i+=1){xdef+=sign(pp_vxpre)}//Calculando y comprobando que el movimiento x no presentará colisiones. Si resentare colisiones entonces será reducido hasta llegar a cero.
x+=xdef //Movimiento X, final.






///////////////////////////////MOVIMIENTO Y O MOVIMIENTO VERTICAL
//Determinar si hay un suelo
pp_estado="no_suelo" //permitir salto cuando exista suelo a los pies.
for(i=1;i<=1+floor(abs(pp_vxpre)*2) && (pp_estado="no_suelo") && (pp_vs>=0);i+=1){if(pp_libre(x,y+i,pp_tipo_objeto)=0){pp_estado="suelo";pp_vs=0;y+=i-1}}

//pp_gravedad=argument3 //pp_gravedad, o velocidad vertical positiva.
//para permitir el salto cuando las condiciones estén dadas
if(pp_boton_salto_pressed && (pp_estado="suelo") && (pp_vs>=0)){pp_salto=pp_fuerza_salto} //Condiciones para generar la acción de salto.
pp_salto=pp_salto-pp_gravedad //disminuyendo impulso de salto con la gravedad.
if(pp_salto<=0)pp_salto=0 //para evitar que el salto produzca errores.
pp_vs+=pp_gravedad-pp_salto //relacionando salto y gravedad.

//CHOQUE CON EL TECHO
//pp_techo=argument5
//al chocar con el techo
cx=0
cx=(pp_libre(x,y-1,pp_tipo_objeto)=0)
if(cx){//cuando hayga un techo a la cabeza
if((pp_techo=1) && (pp_vs<0)){pp_vs=0} //para colisionar normalmente
if((pp_techo=2) && (pp_vs<0)){pp_vs=pp_vs*-1} //para rebotar
if((pp_techo=3) && pp_boton_salto){pp_vs=0} //para pegarse al techo
}

//MOVIMIENTO Y DEFINITIVO
ydef=0 //movimiento Y, definitivo sin colisiones. Por calcularse.
for(i=1;i<=abs(pp_vs) && pp_libre(x,y+i*sign(pp_vs),pp_tipo_objeto);i+=1){ydef+=sign(pp_vs)}//CORRECTOR DE MOVIMIENTO VERTICAL. Este sistema verifica que el movimiento a dar esté libre de colisión, de lo contrario lo vá reduciendo hasta que no exista colisión.
y+=ydef //movimiento Y, final.







/////////////////////////////////SUBIR COLINAS
repeat(floor(abs(pp_vxpre))*(abs(pp_vxpre)>1)){ //se repite el siguiente código para acelerar la subida de una colina
libre_y=0// El espacio libre a la cabeza del personaje
for(i=1;i<=2 && pp_libre(x,y-i,pp_tipo_objeto);i+=1){libre_y+=1}
libre_y2=0// El espacio libre delante del personaje
for(i=0;i<=libre_y && pp_libre(x+sign(pp_vxpre),y-libre_y+i,pp_tipo_objeto);i+=1){libre_y2+=1}
libre_y+=(libre_y>0) //salto minimo
libre_y-=libre_y2 //Al salto total le restamos el espacio libre que tenemos adelante para poder hacer un salto exacto
c3=pp_libre(x+sign(pp_vxpre),y-libre_y,pp_tipo_objeto)
c4=pp_libre(x+sign(pp_vxpre),y-1,pp_tipo_objeto)
c5=(pp_libre(x+sign(pp_vxpre),y,pp_tipo_objeto)=0)
c6=pp_libre(x,y-1,pp_tipo_objeto)
if((c3 || c4) && c5 && abs(pp_vxpre) && c6){y-=pp_libre(x,y-1,pp_tipo_objeto)+pp_libre(x,y-2,pp_tipo_objeto)*(libre_y=2);if(abs(pp_vxpre)>1.5){x+=sign(pp_vxpre)*pp_libre(x+sign(pp_vxpre),y,pp_tipo_objeto)}}
}

}//fin if(pp_movimientos_numero=1)



pp_sprites
Código: [Seleccionar]
//Nombre del script: pp_sprite_
//pp_sprite_(parado,caminando,saltando,cayendo,agachado,mirando_arriba,resbalandose,frenando)

pp_sprite_direccion=argument0
pp_sprite_parado=argument1
pp_sprite_caminando=argument2
pp_sprite_saltando=argument3
pp_sprite_cayendo=argument4
pp_sprite_agachado=argument5
pp_sprite_mirando_arriba=argument6
pp_sprite_resbalandose=argument7
pp_sprite_frenando=argument8

pp_sprite_return=0
if(x=xprevious){pp_sprite_movimientox=0}else{pp_sprite_movimientox=1}
if(y=yprevious){pp_estadoy=0}else{pp_estadoy=1}
if(y>yprevious){pp_sprite_diry=1}
if(y<yprevious){pp_sprite_diry=-1}

//CUANDO ESTÁ EN EL SUELO
if(pp_estado="suelo"){
//Cuando está estático en el suelo
if(pp_sprite_movimientox=0){pp_sprite_return=pp_sprite_parado}
//si esta en el suelo y se está moviento
if(pp_sprite_movimientox=1){
pp_sprite_return=pp_sprite_caminando;//si esta caminando
if((sign(pp_vxpre)!=pp_d)*(pp_colina=0)){pp_sprite_return=pp_sprite_frenando}//si esta frenandose
}
//CUANDO MIRA HACIA ARRIBA
if((pp_sprite_movimientox=0)&& pp_boton_arriba){pp_sprite_return=pp_sprite_mirando_arriba}
//RESBALANDOSE
if((pp_colina!=0)&&(control=0)&&(pp_boton_abajo)){pp_sprite_return=pp_sprite_resbalandose}
}

//CUANDO NO TIENE NADA BAJO LOS PIES
if(pp_estado="no_suelo"){
//Cuando saltando y subiendo
if(pp_sprite_diry=-1){pp_sprite_return=pp_sprite_saltando}
//si esta en el suelo y se está moviento
if(pp_sprite_diry=1){pp_sprite_return=pp_sprite_cayendo}
}

//CUANDO ESTÁ AGACHADO
if(pp_estado2="agachado")
{
pp_sprite_return=pp_sprite_agachado
}

if(pp_sprite_direccion!=0)
{
if(pp_sprite_direccion=pp_d){sprite_index=pp_sprite_return}
}
else
{sprite_index=pp_sprite_return;image_xscale=pp_d}//para usar image_xscale

image_speed=0.4








« Última modificación: Mayo 23, 2020, 04:47:55 pm por dixon »

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.
 


Desconectado Marth

Respuesta #2 en: Abril 30, 2020, 11:46:24 am
Es confuso que vayas incluyendo varias versiones de tu código. Con solo poner la ultima versión es suficiente.
Y el script de las físicas de salto hay que ponerlo en el protagonista, ¿No?
Agradeceria un exportable con el que poder ver el código en acción, ya que no es un simple script, sino que hay al menos 2, uno para el evento create y otro para el step.

 
Los siguientes usuarios dieron las gracias a este tema: dixon


Desconectado Marth

Respuesta #3 en: Mayo 02, 2020, 12:51:34 pm
He encontrado un bug con el sistema de salto de tu proyecto.
Dejo aquí un video en el que se ve en que consiste.

 
Los siguientes usuarios dieron las gracias a este tema: dixon


Desconectado dixon

Respuesta #4 en: Mayo 02, 2020, 07:23:59 pm
Hola, saludos cordiales.Gracia spor comentar.

No es un bug, es la modalidad de engancharse para crear barras de desplazamiento como las de Medroid.

Imagen de metroid fusion de game boy advance (izquierda) comparado con el proyecto para Game Maker studio (derecha).


Puedes activar y desactivar eso modificando el sexto argumento del script pp_movimientos
pp_movimientos (pp_velocidad ,pp_aceleración , pp_friccion, pp_gravedad, pp_fuerza_salto, pp_techo , pp_tipo_objeto):

El uso de ese script está especificado en la documentación, donde se indica:
pp_techo: Interacción con el techo; puede tener cuatro valores:
0 para que tarde un poco en bajar.
1 para colisionar normalmente.
2 para rebotar.
3 para pegarse al techo dejando presionada la tecla de salto.

Tambien puedes utilizar estas combinaciones para crear los siguientes movimientos:
Para movimiento normal: pp_movimientos(5,1,0.5,1,5.5,1,-2)
Para moverse sobre Hielo: pp_movimientos(5,0.4,0.1,1,5.5,1,-2)
Para Gravedad de luna: pp_movimientos(3,0.4,0.08,0.29,2.2,1,-2)

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.