Hola, saludos cordiales.

Saludos 3dgeminis, discúlpeme por interrumpir, perdóname esta.

, le dejo la version html5 que puede ejecutar desde aquí, para que vea el resultado directamente.
https://ndika3y7yuiuyd81pfplkq-on.drv.tw/www.dixonweb.dx/games/ventilador_html5/Ahora continuamos con el post

¿Tienes un problema con tu ventilador (abanico)?, no te preocupes, hoy estas de suerte, afortunadamente me dedico a la reparación de computadoras, ventiladores y lavadoras (no automáticas) y en mis tiempos libres programo en game maker. Para continuar, tendremos presente que se le llamará “ventilador” al abanico, porque así lo llamamos en Venezuela.

Viendo bien el código de tu ventilador, “no me gusta su aspecto”, al parecer le ha entrado polvo, hay que hacerle mantenimiento, comprarle los rodamientos (bocinas, rolines) nuevos, y echarle buena grasa, pero para eso hay que destaparlo por completo, es por eso que la mano de obra (mi trabajo técnico) te sale más o menos (te cuesta aproximadamente, te costará alrededor de, tendrá un precio aproximado de) 10 dólares americanos incluyendo el costo de los repuestos (refacciones).

.
La global.fan_on es el interruptor de encendido. Debería llamarse global.fan_ switch, ya que es incorrecto llamar a los interruptores de corriente “apagadores o encendedores”, su nombre técnico es “interruptores” porque interrumpen el paso de la corriente eléctrica. Ahora bien, en el script que presentas no me indicaste la función que enciende al ventilador, es decir: me entregastes un ventilador sin el interruptor. Pero no te preocupes porque aunque lo encendí en el evento CREATE me di cuenta que no arrancaba, luego se recalentó (aumentó su temperatura, se puso caliente) y comenzó a echar mucho humo, entonces lo apagué antes de que se terminara de dañar.

La variable global.spins_number, no está haciendo absolutamente nada, es un cable que está demás, no tengo idea porque el técnico anterior lo dejó hay, pero no te preocupes que tengo fé de que te lo voy a reparar, he trabajado con ventiladores en condiciones más desfavorables.
El script approach representa el capacitor (condensador o filtro) el cual le da el primer impulso de corriente al embobinado produciendo un fuerte campo magnético. No he trabajado con ese modelo de script que me presenta, pero estuve investigando bastante y descubrí que es correcto usar este tipo de script para acelerar ventiladores, entre otras cosas. Es decir tu script está bueno.
Estuve trabajando por aproximadamente 3 horas para hallarle la solución a tu ventilador (abanico) y logré repararlo.
Descubrí que estabas usando el script approach de manera incorrecta, así es como debe usarse:
Este es el script:
scr_approach(variable a sumar, valor maximo, aceleracion)
El primer argumento (el argumento0), llamado “variable a sumar”, es la variable que va a cambiar de valor o que va a ser incrementada, no es una variable fija, el segundo argumento (valor máximo), es el valor máximo que tendrá la variable del primer argumento, y el tercer argumento es la velocidad o el factor de aceleración que tendrá la variable, en otras palabras será el valor que se le sumará variable por cada paso o step. Es un poco confuso entender todo esto, pero con la práctica se domina el tema.
El ángulo también presentaba problemas, ya que no estaba recibiendo correctamente el valor solicitado.
Esto fue lo que hice:
1. Modifiqué el script, permitiendo que el ventilador girara, y que su inicio fuera acelerado como los ventiladores reales.
2. Agregué un evento del teclado para apagar y encender el ventilador el presionar ENTER.
3. Agregué otro pequeño script, para que el ángulo se mantenga dentro de los 360 grados y no salga de ahí.
4. Anexé otro pequeño script approach para la disminución del giro a la hora de apagar el ventilador (abanico), para que también se disminuyera su aceleración al apagar.
5. Agregué un pequeño código muy útil, el cual permite visualizar fácilmente el estado de las variables cuando está en ejecución, lo he llamado draw_text_super2. Este código es necesario para todos los programadores del game maquer, ya que facilita en gran manera el desarrollo al permitir visualizar las variables de la manera más rápida y cómoda que estar usando la variable draw_text por cada variable.
El script quedó de la siguiente manera:
angle=0
fan_power=0;
fan_power_min = 0;
fan_power_max = 10;
aceleracion=1
friccion=1
global.fan_on=false;
zzz=""
global.spins_number+=1;
if (global.fan_on=true) and (alarm[0]==-1) {alarm[0]=room_speed/2}
if (global.fan_on=false) alarm[0]=-1
if (global.fan_on=true)
{
angle=angle+fan_power
fan_power=scr_approach(fan_power,fan_power_max,aceleracion)
}
else
{
angle=angle+fan_power
fan_power=scr_approach(fan_power,0,aceleracion)
}
if(angle>360){angle=angle-360}
if(angle<0){angle=angle+360}
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,angle,c_white,1)
draw_text(x,y,string(angle))
dx=0;
dy=0;
fuente_size=20;
fuente_espacio=fuente_size+fuente_size/2;
draw_text(dx,dy,"global.fan_on: "+string(global.fan_on));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"fan_power: "+string(fan_power));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"angle: "+string(angle));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
if(global.fan_on=true)
{
global.fan_on=false;
}
else
{
global.fan_on=true;
}

Realmente no estoy cobrando, pero si usted cree que sería conveniente darme una donación, se la aceptaré con gusto, pero si no puede no importa, seguiremos siendo amigos.

. Aqui le dejo el gmz para game maker studio 1.4 el cual puede ser importado a game maker studio 2.
https://drive.google.com/u/0/uc?id=1w1tjGL7H2cj4_5-apYhGCX2rSFrIYGZK&export=download 