Information about object: objPlayer
Sprite: sprStand
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children:
Mask:
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children:
Mask:
No Physics Object
Create Event:
set variable ShotTimer to 0
set variable BulletType to 6
set variable sprite to sprStand
execute code: chained_to = objBullet; //the ball object that the player is chained to chain_length = 128; //how long the chain should be movement_speed = 4; //how fast the player should currently move max_movement_speed = 4; //how fast the player moves without being held back by the chain chain_movement_speed = 1; //how fast the player moves when being held back by the chain collision_padding = 4; //How close to the wall the chain can get - must be at least 1 chain_is_bent = false; //If there is a bend in the chain chain_bend_x = 0; //where the bend is chain_bend_y = 0; hsp = 0 vsp = 0
Step Event:
execute code:
hspeed=0;
vspeed=0;
if keyboard_check(vk_left) hspeed=-4;
if keyboard_check(vk_right) hspeed=4;
if keyboard_check(vk_up) vspeed=-4;
if keyboard_check(vk_down) vspeed=4;
k_up = keyboard_check(vk_up)
k_down = keyboard_check(vk_down)
if hspeed<0 && vspeed=0 {
BulletType=4;
}
if hspeed<0 && vspeed<0 {
BulletType=3;
}
if hspeed<0 && vspeed>0 {
BulletType=5;
}
if hspeed>0 && vspeed=0 {
BulletType=0;
}
if hspeed>0 && vspeed<0 {
BulletType=1;
}
if hspeed>0 && vspeed>0 {
BulletType=7;
}
if hspeed=0 && vspeed<0 {
BulletType=2;
}
if hspeed=0 && vspeed>0 {
BulletType=6;
}
if mouse_x>x and mouse_y<y+10 and mouse_y>y-10 then sprite_index=sprEast;
if mouse_x<x and mouse_y<y+10 and mouse_y>y-10then sprite_index=sprWest;
if mouse_y>y and mouse_x<x+10 and mouse_x>x-10then sprite_index=sprSouth;
if mouse_y<y and mouse_x<x+10 and mouse_x>x-10then sprite_index=sprNorth;
if mouse_x>x+10 and mouse_y>y+10 then sprite_index=sprSouthEast;
if mouse_x>x+10 and mouse_y<y-10 then sprite_index=sprNorthEast;
if mouse_x<x-10 and mouse_y>y+10 then sprite_index=sprSouthWest;
if mouse_x<x-10 and mouse_y<y-10 then sprite_index=sprNorthWest;
if hspeed!=0 or vspeed!=0 {
image_single=-1;
} else {
image_single=1;
}
if mouse_button=mb_left {
if ShotTimer<0 {
axe = instance_create(x,y,objBullet);
ShotTimer=25;
if (k_up-k_down)!=0
{
if (k_up-k_down)>0
{
axe.vsp=-12
axe.hsp=0
}
if (k_up-k_down)<0
{
axe.vsp=12
axe.hsp=0
}
}
else
{
axe.vsp=0
axe.hsp=12*image_xscale
}
}
}
set variable ShotTimer relative to -1
execute code:
/*
if(instance_exists(chained_to)){
var ball_distance = point_distance(x,y,chained_to.x,chained_to.y); //Distance between the player and the ball
var ball_collision_distance = point_distance(chain_bend_x,chain_bend_y,chained_to.x,chained_to.y); //Distance between the ball and the chain bend
var player_collision_distance = point_distance(chain_bend_x,chain_bend_y,x,y); //Distance between the bend and the player
if chain_is_bent //If the chain is bent calculate the chain distance
{
ball_distance = ball_collision_distance + player_collision_distance;
}
if position_meeting(chained_to.x, chained_to.y, block_object) //If the ball is stuck on the wall just go straight towards the player
{
chain_bend_x = objPlayer.x;
chain_bend_y = objPlayer.y;
}
if ball_distance > chain_length //If the player is too far
{
movement_speed = lerp(movement_speed,chain_movement_speed,.2); //Change the movement speed to the slow speed
//I use lerp to keep the movement from looking jumpy
if chain_is_bent //If the chain is bent move the ball towards the bend
{
chained_to.x = lerp(chained_to.x,chain_bend_x,.02*(ball_distance/ball_collision_distance));
chained_to.y = lerp(chained_to.y,chain_bend_y,.02*(ball_distance/ball_collision_distance));
}
else //If the chain isn't bent move the ball toward the player
{
chained_to.x = lerp(chained_to.x,objPlayer.x,.02);
chained_to.y = lerp(chained_to.y,objPlayer.y,.02);
}
}
else //If the player is not too far away set the player's speed to the max speed
{
movement_speed = lerp(movement_speed,max_movement_speed,.2);
}
//Check the line to see if a bend should be added
collision_object = collision_line(x,y,chained_to.x,chained_to.y,block_object,2,false);
if collision_object != noone //If there' a collision
{
var xoff = (collision_object.sprite_width*.5)+collision_padding; //this assumes the axis is in the middle of the object
var yoff = (collision_object.sprite_height*.5)+collision_padding; //this assumes the axis is in the middle of the object
if !chain_is_bent //If there is a bend, check wich corner of the wall the bend should be on
{
if check_chain_bend(collision_object.x+xoff,collision_object.y+yoff)
{
chain_bend_x = collision_object.x+xoff;
chain_bend_y = collision_object.y+yoff;
}
if check_chain_bend(collision_object.x-xoff,collision_object.y+yoff)
{
chain_bend_x = collision_object.x-xoff;
chain_bend_y = collision_object.y+yoff;
}
if check_chain_bend(collision_object.x+xoff,collision_object.y-yoff)
{
chain_bend_x = collision_object.x+xoff;
chain_bend_y = collision_object.y-yoff;
}
if check_chain_bend(collision_object.x-xoff,collision_object.y-yoff)
{
chain_bend_x = collision_object.x-xoff;
chain_bend_y = collision_object.y-yoff;
}
chain_is_bent = true;
}
}
else
{
chain_is_bent = false;
}
}
Draw Event:
execute code:
draw_self()
if(instance_exists(chained_to)){
if chain_is_bent
{
draw_cool_line(x,y,chain_bend_x,chain_bend_y,chain_sprite,5);
draw_cool_line(chain_bend_x,chain_bend_y,chained_to.x,chained_to.y,chain_sprite,5);
}
else
{
draw_cool_line(x,y,chained_to.x,chained_to.y,sprBullet,5);
}
}
Information about object: objOtherBulletSprite: sprBullet
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children:
Mask: No Physics ObjectCreate Event:start moving in the direction of position (mouse_x,mouse_y) with speed 8Information about object: objBulletSprite: sprBullet
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children:
Mask: No Physics ObjectCreate Event:execute code: axe_clock=25 forward = true backward = false canThrow = false trackPlayer = false move_towards_point(mouse_x, mouse_y, 30)Step Event:execute code: if(distance_to_object(objPlayer) >200) { trackPlayer = true } if(trackPlayer){ move_towards_point(objPlayer.x, objPlayer.y, 8) if place_meeting(x, y, objPlayer) { trackPlayer = false instance_destroy() } }Other Event: Outside Room:destroy the instanceInformation about object: objPlayerSprite: sprStand
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children:
Mask: No Physics ObjectCreate Event:set variable ShotTimer to 0set variable BulletType to 6set variable sprite to sprStandexecute code: chained_to = objBullet; //the ball object that the player is chained to chain_length = 128; //how long the chain should be movement_speed = 4; //how fast the player should currently move max_movement_speed = 4; //how fast the player moves without being held back by the chain chain_movement_speed = 1; //how fast the player moves when being held back by the chain collision_padding = 4; //How close to the wall the chain can get - must be at least 1 chain_is_bent = false; //If there is a bend in the chain chain_bend_x = 0; //where the bend is chain_bend_y = 0; hsp = 0 vsp = 0Step Event:execute code: hspeed=0; vspeed=0; if keyboard_check(vk_left) hspeed=-4; if keyboard_check(vk_right) hspeed=4; if keyboard_check(vk_up) vspeed=-4; if keyboard_check(vk_down) vspeed=4; k_up = keyboard_check(vk_up) k_down = keyboard_check(vk_down) if hspeed<0 && vspeed=0 { BulletType=4; } if hspeed<0 && vspeed<0 { BulletType=3; } if hspeed<0 && vspeed>0 { BulletType=5; } if hspeed>0 && vspeed=0 { BulletType=0; } if hspeed>0 && vspeed<0 { BulletType=1; } if hspeed>0 && vspeed>0 { BulletType=7; } if hspeed=0 && vspeed<0 { BulletType=2; } if hspeed=0 && vspeed>0 { BulletType=6; } if mouse_x>x and mouse_y<y+10 and mouse_y>y-10 then sprite_index=sprEast; if mouse_x<x and mouse_y<y+10 and mouse_y>y-10then sprite_index=sprWest; if mouse_y>y and mouse_x<x+10 and mouse_x>x-10then sprite_index=sprSouth; if mouse_y<y and mouse_x<x+10 and mouse_x>x-10then sprite_index=sprNorth; if mouse_x>x+10 and mouse_y>y+10 then sprite_index=sprSouthEast; if mouse_x>x+10 and mouse_y<y-10 then sprite_index=sprNorthEast; if mouse_x<x-10 and mouse_y>y+10 then sprite_index=sprSouthWest; if mouse_x<x-10 and mouse_y<y-10 then sprite_index=sprNorthWest; if hspeed!=0 or vspeed!=0 { image_single=-1; } else { image_single=1; } if mouse_button=mb_left { if ShotTimer<0 { axe = instance_create(x,y,objBullet); ShotTimer=25; if (k_up-k_down)!=0 { if (k_up-k_down)>0 { axe.vsp=-12 axe.hsp=0 } if (k_up-k_down)<0 { axe.vsp=12 axe.hsp=0 } } else { axe.vsp=0 axe.hsp=12*image_xscale } } }set variable ShotTimer relative to -1execute code: /* if(instance_exists(chained_to)){ var ball_distance = point_distance(x,y,chained_to.x,chained_to.y); //Distance between the player and the ball var ball_collision_distance = point_distance(chain_bend_x,chain_bend_y,chained_to.x,chained_to.y); //Distance between the ball and the chain bend var player_collision_distance = point_distance(chain_bend_x,chain_bend_y,x,y); //Distance between the bend and the player if chain_is_bent //If the chain is bent calculate the chain distance { ball_distance = ball_collision_distance + player_collision_distance; } if position_meeting(chained_to.x, chained_to.y, block_object) //If the ball is stuck on the wall just go straight towards the player { chain_bend_x = objPlayer.x; chain_bend_y = objPlayer.y; } if ball_distance > chain_length //If the player is too far { movement_speed = lerp(movement_speed,chain_movement_speed,.2); //Change the movement speed to the slow speed //I use lerp to keep the movement from looking jumpy if chain_is_bent //If the chain is bent move the ball towards the bend { chained_to.x = lerp(chained_to.x,chain_bend_x,.02*(ball_distance/ball_collision_distance)); chained_to.y = lerp(chained_to.y,chain_bend_y,.02*(ball_distance/ball_collision_distance)); } else //If the chain isn't bent move the ball toward the player { chained_to.x = lerp(chained_to.x,objPlayer.x,.02); chained_to.y = lerp(chained_to.y,objPlayer.y,.02); } } else //If the player is not too far away set the player's speed to the max speed { movement_speed = lerp(movement_speed,max_movement_speed,.2); } //Check the line to see if a bend should be added collision_object = collision_line(x,y,chained_to.x,chained_to.y,block_object,2,false); if collision_object != noone //If there' a collision { var xoff = (collision_object.sprite_width*.5)+collision_padding; //this assumes the axis is in the middle of the object var yoff = (collision_object.sprite_height*.5)+collision_padding; //this assumes the axis is in the middle of the object if !chain_is_bent //If there is a bend, check wich corner of the wall the bend should be on { if check_chain_bend(collision_object.x+xoff,collision_object.y+yoff) { chain_bend_x = collision_object.x+xoff; chain_bend_y = collision_object.y+yoff; } if check_chain_bend(collision_object.x-xoff,collision_object.y+yoff) { chain_bend_x = collision_object.x-xoff; chain_bend_y = collision_object.y+yoff; } if check_chain_bend(collision_object.x+xoff,collision_object.y-yoff) { chain_bend_x = collision_object.x+xoff; chain_bend_y = collision_object.y-yoff; } if check_chain_bend(collision_object.x-xoff,collision_object.y-yoff) { chain_bend_x = collision_object.x-xoff; chain_bend_y = collision_object.y-yoff; } chain_is_bent = true; } } else { chain_is_bent = false; } }Draw Event:execute code: draw_self() if(instance_exists(chained_to)){ if chain_is_bent { draw_cool_line(x,y,chain_bend_x,chain_bend_y,chain_sprite,5); draw_cool_line(chain_bend_x,chain_bend_y,chained_to.x,chained_to.y,chain_sprite,5); } else { draw_cool_line(x,y,chained_to.x,chained_to.y,sprBullet,5); } }
No comments:
Post a Comment