You've already forked AM2R-Community-Updates
mirror of
https://github.com/izzy2lost/AM2R-Community-Updates.git
synced 2026-03-10 11:23:35 -07:00
2442 lines
87 KiB
Plaintext
2442 lines
87 KiB
Plaintext
/// characterStepEvent()
|
|
var jump_vel;
|
|
if (global.enablecontrol) chStepControl();
|
|
if (global.movingobj) chStepMovingCheck();
|
|
if (isCollisionBottom(1) || isCollisionPlatformBottom(1)) {
|
|
collision_bottom = 1;
|
|
} else collision_bottom = 0;
|
|
SetSpinJumpSound();
|
|
if (state == STANDING || state == RUNNING) {
|
|
idle += 1;
|
|
if (state == RUNNING && speedboost) {
|
|
if (facing == RIGHT && (kRight == 0 || kLeft > 0) || facing == LEFT && (kLeft == 0 || kRight > 0)) {
|
|
state = BRAKING;
|
|
statetime = 0;
|
|
dash = 0;
|
|
speedboost = 0;
|
|
canturn = 0;
|
|
image_index = 0;
|
|
sfx_play(sndBrake);
|
|
if (!inwater) {
|
|
smk = instance_create(x, y, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
}
|
|
if (inwater) {
|
|
repeat (2 + floor(random(4))) {
|
|
bubble = instance_create(x, y, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.hspeed = random_range(-1.5, 1.5);
|
|
bubble.vspeed = -0.1 - random(0.5);
|
|
bubble.alarm[0] = 90 + random(120);
|
|
}
|
|
}
|
|
}
|
|
} // if (facing == RIGHT && (kRight == 0 || kLeft > 0) || facing == LEFT && (kLeft == 0 || kRight > 0))
|
|
} // if (state == RUNNING && speedboost)
|
|
if (kLeft > 0) {
|
|
if (facing == RIGHT && turning == 0 && speedboost == 0 && aimlock == 0) {
|
|
turning = 1;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
dash = 0;
|
|
unmorphing = 0;
|
|
}
|
|
if (canturn == 1) facing = LEFT;
|
|
idle = 0;
|
|
if (position_meeting(x - 7, y - 8, oSolid) == false && position_meeting(x - 7, y - 24, oSolid) == false) {
|
|
if (!inwater && waterfall == 0 || global.currentsuit == 2) {
|
|
if (statetime < 2) xAcc = 0;
|
|
hspeed = 0;
|
|
if (statetime <= 5) xAcc -= runAcc / 8;
|
|
if (statetime > 5) {
|
|
if (walking == 0) {
|
|
xAcc -= runAcc;
|
|
} else xAcc -= runAcc * 0.5;
|
|
}
|
|
}
|
|
if ((inwater || waterfall > 0) && global.currentsuit != 2) {
|
|
if (statetime <= 90) xAcc = -runAcc * statetime / 90 * 0.7;
|
|
if (statetime > 90) xAcc -= runAcc * 0.7;
|
|
if (walking) xAcc *= 0.5;
|
|
}
|
|
}
|
|
if (facing == LEFT && position_meeting(x - 7, y - 31, oSolid) && position_meeting(x, y - 35, oSolid) == false && position_meeting(x - 7, y - 35, oSolid) == false && kJump && kJumpPushedSteps == false && global.powergrip && global.opautoclimb && y > 32) {
|
|
if (position_meeting(x - 7, y - 52, oSolid) == false || global.morphball) {
|
|
state = CLIMBING;
|
|
statetime = 0;
|
|
image_index = 0;
|
|
sfx_play(sndPullUp);
|
|
y -= 5;
|
|
}
|
|
}
|
|
if (facing == LEFT && position_meeting(x - 7, y - 14, oSolid) && position_meeting(x - 7, y - 22, oSolid) == false && kJump && kJumpPushedSteps == false && global.powergrip && global.opautoclimb && y > 32) {
|
|
if (position_meeting(x - 7, y - 35, oSolid) == false || global.morphball) {
|
|
state = CLIMBING;
|
|
statetime = 4;
|
|
image_index = 4;
|
|
sfx_play(sndPullUp);
|
|
}
|
|
}
|
|
if (facing == LEFT && position_meeting(x - 7, y - 22, oSolid) && position_meeting(x - 7, y - 8, oSolid) == false && kDown && kDownPushedSteps > 4 && global.morphball && global.opautomorph) {
|
|
state = DUCKING;
|
|
statetime = 0;
|
|
turning = 0;
|
|
sfx_play(sndCrouch);
|
|
}
|
|
} // if (kLeft > 0)
|
|
if (kRight > 0) {
|
|
if (facing == LEFT && turning == 0 && speedboost == 0 && aimlock == 0) {
|
|
turning = 1;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
dash = 0;
|
|
unmorphing = 0;
|
|
}
|
|
if (canturn == 1) facing = RIGHT;
|
|
idle = 0;
|
|
if (position_meeting(x + 7, y - 8, oSolid) == false && position_meeting(x + 7, y - 24, oSolid) == false) {
|
|
if (!inwater && waterfall == 0 || global.currentsuit == 2) {
|
|
if (statetime < 2) xAcc = 0;
|
|
hspeed = 0;
|
|
if (statetime <= 5) xAcc += runAcc / 8;
|
|
if (statetime > 5) {
|
|
if (walking == 0) {
|
|
xAcc += runAcc;
|
|
} else xAcc += runAcc * 0.5;
|
|
}
|
|
}
|
|
if ((inwater || waterfall > 0) && global.currentsuit != 2) {
|
|
if (statetime <= 90) xAcc = runAcc * statetime / 90 * 0.7;
|
|
if (statetime > 90) xAcc += runAcc * 0.7;
|
|
if (walking) xAcc *= 0.5;
|
|
}
|
|
}
|
|
if (facing == RIGHT && position_meeting(x + 7, y - 31, oSolid) && position_meeting(x, y - 35, oSolid) == false && position_meeting(x + 7, y - 35, oSolid) == false && kJump && kJumpPushedSteps == false && global.powergrip && global.opautoclimb) {
|
|
if (position_meeting(x + 7, y - 52, oSolid) == false || global.morphball) {
|
|
state = CLIMBING;
|
|
statetime = 0;
|
|
image_index = 0;
|
|
sfx_play(sndPullUp);
|
|
y -= 5;
|
|
}
|
|
}
|
|
if (facing == RIGHT && position_meeting(x + 7, y - 14, oSolid) && position_meeting(x + 7, y - 22, oSolid) == false && kJump && kJumpPushedSteps == false && global.powergrip && global.opautoclimb) {
|
|
if (position_meeting(x + 7, y - 35, oSolid) == false || global.morphball) {
|
|
state = CLIMBING;
|
|
statetime = 4;
|
|
image_index = 4;
|
|
sfx_play(sndPullUp);
|
|
}
|
|
}
|
|
if (facing == RIGHT && position_meeting(x + 7, y - 22, oSolid) && position_meeting(x + 7, y - 8, oSolid) == false && kDown && kDownPushedSteps > 4 && global.morphball && global.opautomorph) {
|
|
state = DUCKING;
|
|
statetime = 0;
|
|
turning = 0;
|
|
sfx_play(sndCrouch);
|
|
}
|
|
} // if (kRight > 0)
|
|
} // if (state == STANDING || state == RUNNING)
|
|
if (platformCharacterIs(IN_AIR)) {
|
|
if (yVel < 0 && kJump == 0 && state != AIRBALL) yVel = 0;
|
|
if (yVel < 0 && kJump == 0 && state == AIRBALL) {
|
|
if (fixedy == 0 && ballbounce == 0) yVel = 0;
|
|
}
|
|
if (waterfall > 0) yVel += 0.2;
|
|
if (state == JUMPING && vjump && charge > 0 && (inwater == 0 && waterfall == 0 || global.currentsuit == 2) && kJump && kJumpPushedSteps == 0) {
|
|
state = SJSTART;
|
|
statetime = 0;
|
|
sjball = 0;
|
|
vjump = 0;
|
|
}
|
|
if (state == JUMPING && statetime > 4 && position_meeting(x, y + 8, oSolid) == false && justwalljumped == 0 && walljumping == 0 && monster_drain == 0) {
|
|
if (kLeft > 0 && kJump == 1 && kJumpPushedSteps == 0 && position_meeting(x + 8, y - 16, oSolid) == true) {
|
|
walljumping = 1;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
turning = 0;
|
|
facing = LEFT;
|
|
aimdirection = 1;
|
|
canturn = 0;
|
|
justwalljumped = 10;
|
|
vjump = 0;
|
|
sfx_stop(spinjump_sound);
|
|
sfx_play(sndWallJump);
|
|
x -= 2;
|
|
while (isCollisionRight(2) == 0) x += 1;
|
|
if (!inwater) {
|
|
smk = instance_create(x + 7, y - 7, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.vspeed = 0.5;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
smk.image_xscale = 0.7;
|
|
smk.image_yscale = 0.7;
|
|
smk = instance_create(x + 7, y - 7, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.vspeed = -0.5;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
smk.image_xscale = 0.7;
|
|
smk.image_yscale = 0.7;
|
|
}
|
|
if (inwater) {
|
|
repeat (4 + floor(random(4))) {
|
|
bubble = instance_create(x, y, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.hspeed = -random(2);
|
|
bubble.vspeed = -0.1 - random(1);
|
|
bubble.alarm[0] = 90 + random(120);
|
|
}
|
|
}
|
|
}
|
|
} // if (kLeft > 0 && kJump == 1 && kJumpPushedSteps == 0 && position_meeting(x + 8, y - 16, oSolid) == true)
|
|
if (kRight > 0 && kJump == 1 && kJumpPushedSteps == 0 && position_meeting(x - 8, y - 16, oSolid) == true) {
|
|
walljumping = 1;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
turning = 0;
|
|
facing = RIGHT;
|
|
aimdirection = 0;
|
|
canturn = 0;
|
|
justwalljumped = 10;
|
|
vjump = 0;
|
|
sfx_stop(spinjump_sound);
|
|
sfx_play(sndWallJump);
|
|
x += 2;
|
|
while (isCollisionLeft(2) == 0) x -= 1;
|
|
if (!inwater) {
|
|
smk = instance_create(x - 7, y - 7, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.vspeed = 0.5;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
smk.image_xscale = 0.7;
|
|
smk.image_yscale = 0.7;
|
|
smk = instance_create(x - 7, y - 7, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.vspeed = -0.5;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
smk.image_xscale = 0.7;
|
|
smk.image_yscale = 0.7;
|
|
}
|
|
if (inwater) {
|
|
repeat (4 + floor(random(4))) {
|
|
bubble = instance_create(x, y, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.hspeed = random(2);
|
|
bubble.vspeed = -0.1 - random(1);
|
|
bubble.alarm[0] = 90 + random(120);
|
|
}
|
|
}
|
|
}
|
|
} // if (kRight > 0 && kJump == 1 && kJumpPushedSteps == 0 && position_meeting(x - 8, y - 16, oSolid) == true)
|
|
} // if (state == JUMPING && statetime > 4 && position_meeting(x, y + 8, oSolid) == false && ...)
|
|
if (walljumping) {
|
|
if (facing == LEFT) while (isCollisionRight(1) == 0) x += 1;
|
|
if (facing == RIGHT) while (isCollisionLeft(1) == 0) x -= 1;
|
|
}
|
|
if (kJump && kJumpPushedSteps == 0 && vjump == 1 && aimdirection != 6 && aimdirection != 7 && novjump == 0 && state != AIRBALL && aimlock == 0 && monster_drain == 0) {
|
|
vjump = 0;
|
|
yVel = 0;
|
|
novjump = 10;
|
|
LoopSoundMono(spinjump_sound);
|
|
jumpfwd = 1;
|
|
if (global.spacejump && (inwater == 0 && waterfall == 0 || global.currentsuit == 2) && monster_drain == 0) {
|
|
state = JUMPING;
|
|
yVel = initialJumpAcc;
|
|
jumpfwd = 1;
|
|
hijump = 1;
|
|
novjump = 30;
|
|
}
|
|
statetime = 0;
|
|
}
|
|
if (dash > 0 && (facing == RIGHT && kLeft > 0 || facing == LEFT && kRight > 0)) {
|
|
dash = 0;
|
|
canturn = 1;
|
|
}
|
|
if (yVel < 0 && vjump == 1 && state != AIRBALL) {
|
|
if (isCollisionUpRight() == 1 && kRight == 0) x -= 2;
|
|
if (isCollisionUpLeft() == 1 && kLeft == 0) x += 2;
|
|
}
|
|
if (yVel < 0 && state == AIRBALL) {
|
|
if (isCollisionUpRight() == 1 && kRight == 0) x -= 1 + (statetime < 2) + (statetime < 4);
|
|
if (isCollisionUpLeft() == 1 && kLeft == 0) x += 1 + (statetime < 2) + (statetime < 4);
|
|
}
|
|
if (vjump == 0 && dash == 0 && state != AIRBALL) {
|
|
if (!inwater || global.currentsuit == 2) {
|
|
if (facing == LEFT) xVel = -1.8;
|
|
if (facing == RIGHT) xVel = 1.8;
|
|
}
|
|
if ((inwater || waterfall > 0) && global.currentsuit != 2) {
|
|
if (facing == LEFT) {
|
|
xVel = -0.4 - airtime / 240 * 2;
|
|
if (xVel < -2.4) xVel = -2.4;
|
|
}
|
|
if (facing == RIGHT) {
|
|
xVel = 0.4 + airtime / 240 * 2;
|
|
if (xVel > 2.4) xVel = 2.4;
|
|
}
|
|
}
|
|
}
|
|
if (state != AIRBALL) yAcc += gravityIntensity * 0.8;
|
|
if (state == AIRBALL) yAcc += 0.3;
|
|
if ((inwater || waterfall > 0) && global.currentsuit != 2) yAcc *= 0.4;
|
|
if (state != AIRBALL) {
|
|
if (kLeft > 0) {
|
|
if (canturn == 1 && walljumping == 0) {
|
|
if (facing == RIGHT && turning == 0) {
|
|
turning = 1;
|
|
image_index = 0;
|
|
airtime = 0;
|
|
unmorphing = 0;
|
|
}
|
|
facing = LEFT;
|
|
}
|
|
if (kLeftPushedSteps > 3) {
|
|
if (vjump == 1 || jumpfwd == 0 || (inwater || waterfall > 0) && global.currentsuit != 2) xAcc = -0.4;
|
|
}
|
|
if (position_meeting(x + 8, y - 16, oSolid) == true && kLeftPushedSteps < 9 && vjump == 0) xVel = 0;
|
|
}
|
|
if (kRight > 0) {
|
|
if (canturn == 1 && walljumping == 0) {
|
|
if (facing == LEFT && turning == 0) {
|
|
turning = 1;
|
|
image_index = 0;
|
|
airtime = 0;
|
|
unmorphing = 0;
|
|
}
|
|
facing = RIGHT;
|
|
}
|
|
if (kRightPushedSteps > 3) {
|
|
if (vjump == 1 || jumpfwd == 0 || (inwater || waterfall > 0) && global.currentsuit != 2) xAcc = 0.4;
|
|
}
|
|
if (position_meeting(x - 8, y - 16, oSolid) == true && kRightPushedSteps < 9 && vjump == 0) xVel = 0;
|
|
}
|
|
if (vjump == 0 && jumpfwd == 1 && dash == 0) {
|
|
if (facing == LEFT) xAcc = -0.5;
|
|
if (facing == RIGHT) xAcc = 0.5;
|
|
}
|
|
if (dash > 0) {
|
|
if (facing == LEFT) xVel = -8;
|
|
if (facing == RIGHT) xVel = 8;
|
|
}
|
|
} // if (state != AIRBALL)
|
|
} // if (platformCharacterIs(IN_AIR))
|
|
if ((isCollisionBottom(1) || isCollisionPlatformBottom(1)) && platformCharacterIs(IN_AIR) && yVel >= 0) {
|
|
if (state == AIRBALL && ballfall >= 32) {
|
|
yVel = -1.7;
|
|
dash = 0;
|
|
sfx_play(sndBallBounce);
|
|
ballbounce = 8;
|
|
} else {
|
|
yVel = 0;
|
|
yAcc = 0;
|
|
landing = 1;
|
|
turning = 0;
|
|
vjump = 1;
|
|
canturn = 1;
|
|
walljumping = 0;
|
|
if (state != AIRBALL) {
|
|
image_index = 0;
|
|
state = STANDING;
|
|
idle = 0;
|
|
statetime = 0;
|
|
xVel = 0;
|
|
xAcc = 0;
|
|
PlayLandingSound(get_floor_material());
|
|
}
|
|
if (state == AIRBALL && sball == 0 && !moverobj) {
|
|
state = BALL;
|
|
statetime = 0;
|
|
if (mockball == 0) {
|
|
xVel = 0;
|
|
xAcc = 0;
|
|
dash = 0;
|
|
}
|
|
sfx_play(sndCrouch);
|
|
}
|
|
} // if (state == AIRBALL && ballfall >= 32) else
|
|
if (sball == 0) {
|
|
if (!inwater && !moverobj) {
|
|
smk = instance_create(x, y, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.hspeed = 0.5;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
smk.image_xscale = 0.7;
|
|
smk.image_yscale = 0.7;
|
|
smk = instance_create(x, y, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.hspeed = -0.5;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
smk.image_xscale = 0.7;
|
|
smk.image_yscale = 0.7;
|
|
}
|
|
if (inwater && !moverobj) {
|
|
repeat (2 + floor(random(4))) {
|
|
bubble = instance_create(x, y, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.hspeed = random_range(-1.5, 1.5);
|
|
bubble.vspeed = -0.1 - random(0.5);
|
|
bubble.alarm[0] = 90 + random(120);
|
|
}
|
|
}
|
|
}
|
|
} // if (sball == 0)
|
|
} // if ((isCollisionBottom(1) || isCollisionPlatformBottom(1)) && platformCharacterIs(IN_AIR) && yVel >= 0)
|
|
if (isCollisionBottom(1) == 0 && isCollisionPlatformBottom(1) == 0 && platformCharacterIs(ON_GROUND)) {
|
|
xAcc = xVel / 1.2;
|
|
xVel *= 0.5;
|
|
if (state != AIRBALL && state != BALL) state = JUMPING;
|
|
if (state == BALL) state = AIRBALL;
|
|
if (kJump == 0) vjump = 1;
|
|
y += 1;
|
|
if (speedboost == 0) dash = 0;
|
|
}
|
|
if (isCollisionTop(1)) {
|
|
yVel = 0;
|
|
hijump = 0;
|
|
}
|
|
if (isCollisionLeft(1) && xVel < 0 || isCollisionRight(1) && xVel > 0) {
|
|
if (aimlock == 0 && dash == 0) xVel = 0;
|
|
if (dash > 0 && (collision_line(x + 7, y - 14, x, y - 14, oSolid, true, true) > 0 && facing == RIGHT || collision_line(x - 7, y - 14, x, y - 14, oSolid, true, true) > 0 && facing == LEFT)) {
|
|
dash = 0;
|
|
canturn = 1;
|
|
}
|
|
if (dash > 0 && state != BALL && (collision_line(x + 7, y - 24, x, y - 24, oSolid, true, true) > 0 && facing == RIGHT || collision_line(x - 7, y - 24, x, y - 24, oSolid, true, true) > 0 && facing == LEFT)) {
|
|
dash = 0;
|
|
canturn = 1;
|
|
}
|
|
if (platformCharacterIs(IN_AIR)) xAcc = 0;
|
|
jumpfwd = 0;
|
|
}
|
|
if ((state == STANDING || state == DUCKING || state == RUNNING) && charge > 0 && (inwater == 0 && waterfall == 0 || global.currentsuit == 2) && kJump && kJumpPushedSteps == 0 && kLeft == 0 && kRight == 0) {
|
|
state = SJSTART;
|
|
statetime = 0;
|
|
sjball = 0;
|
|
}
|
|
if (kJump && kJumpPushedSteps == 0 && state != BALL && state != AIRBALL && platformCharacterIs(ON_GROUND)) {
|
|
state = JUMPING;
|
|
if (kLeft == 0 && kRight == 0 || aimlock || monster_drain > 0) {
|
|
vjump = 1;
|
|
} else vjump = 0;
|
|
yAcc += initialJumpAcc;
|
|
xAcc = xVel / 2;
|
|
xVel = 0;
|
|
jumpfwd = 1;
|
|
hijump = 1;
|
|
statetime = 0;
|
|
if (speedboost == 0) dash = 0;
|
|
if (vjump == 1) sfx_play(sndJump);
|
|
if (vjump == 0) LoopSoundMono(spinjump_sound);
|
|
instance_create(x, y, oJTrail);
|
|
}
|
|
if (kJump == 0 || platformCharacterIs(ON_GROUND)) hijump = 0;
|
|
if (global.hijump && kJump && state == JUMPING && hijump && monster_drain == 0) {
|
|
if ((!inwater && waterfall == 0 || global.currentsuit >= 2) && statetime <= 11) yVel = initialJumpAcc;
|
|
}
|
|
if (monster_drain > 0) {
|
|
hijump = 0;
|
|
vjump = 1;
|
|
if (yVel < -4) yVel = -4;
|
|
}
|
|
if (kJump && kJumpPushedSteps == 0 && state == JUMPING && global.spacejump == 1 && novjump == 0 && aimlock == 0 && monster_drain == 0 && (inwater == 0 && waterfall == 0 || global.currentsuit == 2) && (vjump == 0 || vjump == 1 && aimdirection != 6 && aimdirection != 7)) {
|
|
if (yVel > 2 && (!inwater && waterfall == 0 || global.currentsuit == 2) || yVel > 1 && (inwater || waterfall > 0) && global.currentsuit != 2) {
|
|
state = JUMPING;
|
|
yVel = initialJumpAcc;
|
|
jumpfwd = 1;
|
|
hijump = 1;
|
|
statetime = 0;
|
|
vjump = 0;
|
|
}
|
|
}
|
|
|
|
|
|
if (state == BALL || state == AIRBALL) {
|
|
if (facing == RIGHT && kLeft > 0 || facing == LEFT && kRight > 0) {
|
|
turning = 1;
|
|
image_index = 0;
|
|
if (false) // looks better with this code but DruidVorse found problem with it enabled.
|
|
{
|
|
if (facing == RIGHT && kLeft > 0) { facing = LEFT; }
|
|
if (facing == LEFT && kRight > 0) { facing = RIGHT; }
|
|
}
|
|
}
|
|
|
|
|
|
if (facing == RIGHT && kLeft > 0 || facing == LEFT && kRight > 0) {
|
|
turning = 1;
|
|
image_index = 0;
|
|
}
|
|
|
|
if (dash > 0) {
|
|
sjball = 1;
|
|
if (state == BALL && (facing == RIGHT && kRight == 0 || facing == LEFT && kLeft == 0)) {
|
|
dash = 0;
|
|
state = BRAKING;
|
|
statetime = 0;
|
|
canturn = 1;
|
|
sfx_play(sndBrake);
|
|
if (!inwater) {
|
|
smk = instance_create(x, y, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
}
|
|
if (inwater) {
|
|
repeat (2 + floor(random(4))) {
|
|
bubble = instance_create(x, y, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.hspeed = random_range(-1.5, 1.5);
|
|
bubble.vspeed = -0.1 - random(0.5);
|
|
bubble.alarm[0] = 90 + random(120);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (state == AIRBALL) {
|
|
if (facing == RIGHT && kLeft > 0 || facing == LEFT && kRight > 0) {
|
|
dash = 0;
|
|
canturn = 1;
|
|
}
|
|
}
|
|
} // if (dash > 0)
|
|
if (kLeft > 0 && fixedx == 0) {
|
|
if ((kLeftPushedSteps > 2 || isCollisionMoveableSolidRight(1)) && (facing == LEFT || approximatelyZero(xVel))) {
|
|
if (facing == RIGHT && dash > 0) {
|
|
dash = 0;
|
|
state = BRAKING;
|
|
statetime = 0;
|
|
canturn = 1;
|
|
sfx_play(sndBrake);
|
|
}
|
|
facing = LEFT;
|
|
if (state == BALL && dash == 0) xVel = -6 /(1+walking); //added
|
|
if (state == BALL && dash > 0) xVel = -10;
|
|
if (state == AIRBALL && dash == 0) xVel = -4.5;
|
|
}
|
|
}
|
|
if (kRight > 0 && fixedx == 0) {
|
|
if ((kRightPushedSteps > 2 || isCollisionMoveableSolidLeft(1)) && (facing == RIGHT || approximatelyZero(xVel))) {
|
|
if (facing == LEFT && dash > 0) {
|
|
dash = 0;
|
|
state = BRAKING;
|
|
statetime = 0;
|
|
canturn = 1;
|
|
sfx_play(sndBrake);
|
|
}
|
|
facing = RIGHT;
|
|
if (state == BALL && dash == 0) xVel = 6 /(1+walking); //added
|
|
if (state == BALL && dash > 0) xVel = 10;
|
|
if (state == AIRBALL && dash == 0) xVel = 4.5;
|
|
}
|
|
}
|
|
if (fixedx > 0) {
|
|
if (facing == RIGHT) xVel = 4;
|
|
if (facing == LEFT) xVel = -4;
|
|
}
|
|
if (state == AIRBALL && dash > 0) {
|
|
if (facing == RIGHT) xVel = 9;
|
|
if (facing == LEFT) xVel = -9;
|
|
}
|
|
if (state == AIRBALL && speedboost == 0 && yVel > 0) {
|
|
ballfall += 1;
|
|
} else ballfall = 0;
|
|
if (state == BALL && state != SPIDERBALL && charge > 0 && global.jumpball && (inwater == 0 && waterfall == 0 || global.currentsuit == 2) && kJump && kJumpPushedSteps == 0 && kLeft == 0 && kRight == 0) {
|
|
state = SJSTART;
|
|
statetime = 0;
|
|
sjball = 1;
|
|
}
|
|
if (platformCharacterIs(ON_GROUND) && kJump && kJumpPushedSteps == 0 && global.jumpball == 1 && state == BALL) {
|
|
if (global.hijump == 0) jump_vel = initialJumpAcc * 0.86;
|
|
if (global.hijump == 1) jump_vel = initialJumpAcc;
|
|
if (monster_drain > 0) jump_vel = -1;
|
|
if (isCollisionTop(abs(jump_vel) + 1) == 0) {
|
|
yVel = jump_vel;
|
|
} else if (isCollisionTop(abs(jump_vel)) == 0) {
|
|
yVel = jump_vel + 3;
|
|
} else if (isCollisionTop(abs(jump_vel) - 1) == 0) {
|
|
yVel = jump_vel + 4;
|
|
} else if (isCollisionTop(abs(jump_vel) - 2) == 0) {
|
|
yVel = jump_vel + 5;
|
|
} else if (isCollisionTop(abs(jump_vel) - 3) == 0) yVel = jump_vel + 6;
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
sfx_play(sndBallBounce);
|
|
}
|
|
} // if (state == BALL || state == AIRBALL)
|
|
chStepSpiderBall();
|
|
if ((walking == 1 || (inwater || waterfall > 0) && global.currentsuit < 2 || turning) && monster_drain == 0 && state == RUNNING) speedboost_steps = 0;
|
|
if (dash == 0 && state == RUNNING && speedboost_steps > 75 && (inwater == 0 || global.currentsuit == 2)) dash = 1;
|
|
if (speedboost == 0 && dash == 30) {
|
|
speedboost = 1;
|
|
canturn = 0;
|
|
sjball = 0;
|
|
charge = 0;
|
|
sfx_play(sndSBStart);
|
|
alarm[2] = 30;
|
|
}
|
|
if (state == SJSTART) {
|
|
if (statetime == 0) {
|
|
sjdir = 0;
|
|
sfx_play(sndSJStart);
|
|
image_index = 0;
|
|
canturn = 0;
|
|
yVel = 0;
|
|
xVel = 0;
|
|
xAcc = 0;
|
|
yAcc = 0;
|
|
charge = 0;
|
|
morphing = 0;
|
|
unmorphing = 0;
|
|
if (isCollisionBottom(1)) {
|
|
sjtargety = floor(y) - 8;
|
|
sjtype = 0;
|
|
} else {
|
|
sjtargety = y;
|
|
sjtype = 1;
|
|
}
|
|
if (isCollisionTop(2) == 0) y -= 2;
|
|
}
|
|
if (statetime > 0) {
|
|
if (y > sjtargety && isCollisionTop(1) == 0) y -= 1;
|
|
if (isCollisionLeft(1)) x += 1;
|
|
if (isCollisionRight(1)) x -= 1;
|
|
if (kRight > 0 && kUp == 0 && kAim == 0) sjdir = 1;
|
|
if (kRight > 0 && (kUp || kAim) || facing == RIGHT && kAim && kLeft == 0) sjdir = 3;
|
|
if (kLeft > 0 && kUp == 0 && kAim == 0) sjdir = 2;
|
|
if (kLeft > 0 && (kUp || kAim) || facing == LEFT && kAim && kRight == 0) sjdir = 4;
|
|
if (kUp && kLeft == 0 && kRight == 0 && kAim == 0) sjdir = 0;
|
|
}
|
|
if (statetime == 6 && kJump) {
|
|
if (sjtype == 0) sjtargety -= 10;
|
|
}
|
|
if (statetime == 18) {
|
|
state = SUPERJUMP;
|
|
statetime = 0;
|
|
image_index = 0;
|
|
sfx_loop(sndSJLoop);
|
|
}
|
|
} // if (state == SJSTART)
|
|
if (state == SUPERJUMP) {
|
|
if (sjdir != 0 && statetime >= 5 && sjball == 0) {
|
|
image_index = 2;
|
|
image_speed = 0;
|
|
}
|
|
if (sjdir == 0 && statetime == 0) {
|
|
repeat (8) {
|
|
if (isCollisionUpRight()) x -= 1;
|
|
if (isCollisionUpLeft()) x += 1;
|
|
}
|
|
}
|
|
if (sjdir == 0 && statetime > 0) {
|
|
yVel = -8;
|
|
repeat (8) {
|
|
if (isCollisionUpRight()) x -= 1;
|
|
if (isCollisionUpLeft()) x += 1;
|
|
}
|
|
}
|
|
if (sjdir == 1 && statetime > 0) {
|
|
xVel = 9;
|
|
yVel = 0;
|
|
facing = RIGHT;
|
|
}
|
|
if (sjdir == 2 && statetime > 0) {
|
|
xVel = -9;
|
|
yVel = 0;
|
|
facing = LEFT;
|
|
}
|
|
if (sjdir == 3 && statetime > 0) {
|
|
xVel = 7.5;
|
|
yVel = -3.5;
|
|
facing = RIGHT;
|
|
}
|
|
if (sjdir == 4 && statetime > 0) {
|
|
xVel = -7.5;
|
|
yVel = -3.5;
|
|
facing = LEFT;
|
|
}
|
|
if (sjdir != 0 && facing == RIGHT && isCollisionRightSlope(0) || facing == LEFT && isCollisionLeftSlope(0)) {
|
|
yVel = 0;
|
|
if (facing == RIGHT) {
|
|
repeat (4) {
|
|
if (isCollisionRight(1) == 0) x += 1;
|
|
}
|
|
}
|
|
if (facing == LEFT) while (isCollisionLeft(1) == 0) x -= 1;
|
|
if (facing == RIGHT && (kRight == 0 || kLeft > 0) || facing == LEFT && (kLeft == 0 || kRight > 0)) {
|
|
state = BRAKING;
|
|
statetime = 0;
|
|
dash = 0;
|
|
canturn = 0;
|
|
image_index = 0;
|
|
sfx_play(sndBrake);
|
|
sfx_stop(sndSJLoop);
|
|
} else {
|
|
if (sjball == 0) {
|
|
state = RUNNING;
|
|
statetime = 0;
|
|
dash = 29;
|
|
sfx_stop(sndSJLoop);
|
|
if (facing == RIGHT) {
|
|
xVel = 7.4;
|
|
} else xVel = -7.4;
|
|
shinespark = 4;
|
|
}
|
|
if (sjball == 1) {
|
|
state = BALL;
|
|
statetime = 0;
|
|
canturn = 1;
|
|
if (facing == RIGHT && kRight > 0 || facing == LEFT && kLeft > 0) {
|
|
dash = 30;
|
|
speedboost = 1;
|
|
sfx_play(sndSBStart);
|
|
sfx_stop(sndSJLoop);
|
|
alarm[2] = 30;
|
|
if (facing == RIGHT) {
|
|
xVel = 7.4;
|
|
} else xVel = -7.4;
|
|
shinespark = 4;
|
|
}
|
|
}
|
|
} // if (facing == RIGHT && (kRight == 0 || kLeft > 0) || facing == LEFT && (kLeft == 0 || kRight > 0)) else
|
|
} else if (isCollisionLeft(1) && (sjdir == 2 || sjdir == 4) || isCollisionRight(1) && (sjdir == 1 || sjdir == 3) || isCollisionTop(1) && (sjdir == 0 || sjdir == 3 || sjdir == 4)) {
|
|
state = SJEND;
|
|
statetime = 0;
|
|
} // if (sjdir != 0 && facing == RIGHT && isCollisionRightSlope(0) || facing == LEFT && isCollisionLeftSlope(0)) else
|
|
} // if (state == SUPERJUMP)
|
|
if (state == SJEND) {
|
|
yVel = 0;
|
|
xVel = 0;
|
|
dash = 0;
|
|
if (statetime == 0) {
|
|
quake = instance_create(0, 0, oQuake);
|
|
quake.delay = 0;
|
|
quake.duration = 20;
|
|
quake.intensity = 2;
|
|
sfx_stop(sndSJLoop);
|
|
sfx_play(sndSMissileExpl);
|
|
}
|
|
if (sjball == 0) {
|
|
if (statetime == 0) {
|
|
image_index = 1;
|
|
image_speed = 0;
|
|
}
|
|
if (statetime == 10) {
|
|
if (facing == RIGHT) {
|
|
if (global.currentsuit == 0) sprite_index = scr_suit_sprites(sJumpRight,sJumpRight_fusion);
|
|
if (global.currentsuit == 1) sprite_index = scr_suit_sprites(sVJumpRight,sJumpRight_fusion);
|
|
if (global.currentsuit == 2) sprite_index = scr_suit_sprites(sGJumpRight,sJumpRight_fusion);
|
|
image_index = 0;
|
|
image_speed = 0.5;
|
|
}
|
|
if (facing == LEFT) {
|
|
if (global.currentsuit == 0) sprite_index = scr_suit_sprites(sJumpLeft,sJumpLeft_fusion);
|
|
if (global.currentsuit == 1) sprite_index = scr_suit_sprites(sVJumpLeft,sJumpLeft_fusion);
|
|
if (global.currentsuit == 2) sprite_index = scr_suit_sprites(sGJumpLeft,sJumpLeft_fusion);
|
|
image_index = 0;
|
|
image_speed = 0.5;
|
|
}
|
|
}
|
|
if (statetime == 28) {
|
|
if (facing == RIGHT) {
|
|
if (global.currentsuit == 0) sprite_index = scr_suit_sprites(sSJumpStart,sSJumpStart_fusion);
|
|
if (global.currentsuit == 1) sprite_index = scr_suit_sprites(sVSJumpStart,sSJumpStart_fusion);
|
|
if (global.currentsuit == 2) sprite_index = scr_suit_sprites(sGSJumpStart,sSJumpStart_fusion);
|
|
image_index = 2.5;
|
|
image_speed = -0.15;
|
|
}
|
|
if (facing == LEFT) {
|
|
if (global.currentsuit == 0) sprite_index = scr_suit_sprites(sSJumpStartL,sSJumpStartL_fusion);
|
|
if (global.currentsuit == 1) sprite_index = scr_suit_sprites(sVSJumpStartL,sSJumpStartL_fusion);
|
|
if (global.currentsuit == 2) sprite_index = scr_suit_sprites(sGSJumpStartL,sSJumpStartL_fusion);
|
|
image_index = 2.5;
|
|
image_speed = -0.15;
|
|
}
|
|
}
|
|
if (statetime == 40) {
|
|
state = JUMPING;
|
|
statetime = 20;
|
|
vjump = 1;
|
|
canturn = 1;
|
|
image_index = 4;
|
|
if (facing == RIGHT && kLeft > 0) {
|
|
facing = LEFT;
|
|
turning = 1;
|
|
}
|
|
if (facing == LEFT && kRight > 0) {
|
|
facing = RIGHT;
|
|
turning = 1;
|
|
}
|
|
if (facing == RIGHT) aimdirection = 0;
|
|
if (facing == LEFT) aimdirection = 1;
|
|
}
|
|
} // if (sjball == 0)
|
|
if (sjball == 1) {
|
|
image_speed = 0;
|
|
if (statetime == 40 || sball == 1) {
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
canturn = 1;
|
|
sjball = 0;
|
|
}
|
|
}
|
|
} // if (state == SJEND)
|
|
if (state == DUCKING) {
|
|
if (kLeft > 0) {
|
|
if (canturn == 1 && facing == RIGHT && turning == 0) {
|
|
facing = LEFT;
|
|
turning = 1;
|
|
image_index = 0;
|
|
}
|
|
if (position_meeting(x - 7, y - 22, oSolid) && position_meeting(x - 7, y - 8, oSolid) == false && kDown && kDownPushedSteps > 2 && statetime > 2 && global.morphball && global.opautomorph) {
|
|
state = BALL;
|
|
morphing = 1;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
turning = 0;
|
|
sfx_play(sndMorph);
|
|
}
|
|
if (statetime > 10 && kLeftPushedSteps > 10 && position_meeting(x - 7, y - 22, oSolid) == false && position_meeting(x - 7, y - 8, oSolid) == false) state = RUNNING;
|
|
}
|
|
if (kRight > 0) {
|
|
if (canturn == 1 && facing == LEFT && turning == 0) {
|
|
facing = RIGHT;
|
|
turning = 1;
|
|
image_index = 0;
|
|
}
|
|
if (position_meeting(x + 7, y - 22, oSolid) && position_meeting(x + 7, y - 8, oSolid) == false && kDown && kDownPushedSteps > 2 && statetime > 2 && global.morphball && global.opautomorph) {
|
|
state = BALL;
|
|
morphing = 1;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
turning = 0;
|
|
sfx_play(sndMorph);
|
|
}
|
|
if (statetime > 10 && kRightPushedSteps > 10 && position_meeting(x + 7, y - 22, oSolid) == false && position_meeting(x + 7, y - 8, oSolid) == false) state = RUNNING;
|
|
}
|
|
} // if (state == DUCKING)
|
|
if (state == HURT) {
|
|
dash = 0;
|
|
charge = 0;
|
|
sball = 0;
|
|
yAcc += 0.3;
|
|
if (sfx_isplaying(sndSJLoop)) sfx_stop(sndSJLoop);
|
|
}
|
|
if (state == IDLE) {
|
|
canbehit = 0;
|
|
if (juststarted == 0 && kRight > 0) {
|
|
facing = RIGHT;
|
|
canbehit = 1;
|
|
}
|
|
if (juststarted == 0 && kLeft > 0) {
|
|
facing = LEFT;
|
|
canbehit = 1;
|
|
}
|
|
if (facing != 0 && kRight == 0 && kLeft == 0) {
|
|
state = STANDING;
|
|
canrun = 1;
|
|
statetime = 0;
|
|
idle = 0;
|
|
canbehit = 1;
|
|
}
|
|
}
|
|
if (state == SAVING) {
|
|
if (x < global.savexpos) x += 1;
|
|
if (x > global.savexpos) x -= 1;
|
|
charge = 0;
|
|
if (statetime == 5) facing = 0;
|
|
if (statetime >= 10 && x == global.savexpos) {
|
|
state = SAVINGFX;
|
|
statetime = 0;
|
|
}
|
|
}
|
|
if (state == SAVINGFX) {
|
|
if (statetime == 1) {
|
|
sfx_play(sndSave);
|
|
instance_create(x, y, oSaveFX);
|
|
instance_create(x, y, oSaveSparks);
|
|
popup_text(get_text("Notifications", "GameSaved"));
|
|
save_game("save" + string(global.saveslot + 1));
|
|
refill_heath_ammo();
|
|
}
|
|
if (statetime == 230) state = IDLE;
|
|
}
|
|
if (state == SAVINGSHIP) {
|
|
if (x < global.savexpos) x += 1;
|
|
if (x > global.savexpos) x -= 1;
|
|
charge = 0;
|
|
if (statetime == 5) {
|
|
facing = 0;
|
|
if (global.currentsuit == 0) sprite_index = scr_suit_sprites(sFront,sFront_fusion);
|
|
if (global.currentsuit == 1) sprite_index = scr_suit_sprites(sVFront,sFront_fusion);
|
|
if (global.currentsuit == 2) sprite_index = scr_suit_sprites(sGFront,sFront_fusion);
|
|
image_speed = 0.1;
|
|
}
|
|
if (statetime < 48) y += 1;
|
|
if (global.event[304] == 0) {
|
|
if (statetime == 60) {
|
|
state = SAVINGSHIPFX;
|
|
statetime = 0;
|
|
}
|
|
} else {
|
|
if (statetime == 120) {
|
|
with (oSaveShip) instance_destroy();
|
|
with (oHatchling) instance_destroy();
|
|
instance_create(3296, 1088, oShipOutro);
|
|
view_object[0] = oShipOutro;
|
|
with (oShip1) instance_destroy();
|
|
visible = false;
|
|
oControl.displaygui = 0;
|
|
global.enablecontrol = 0;
|
|
}
|
|
if (statetime == 420) {
|
|
instance_create(0, 0, oFinalFadeout);
|
|
mus_fadeout(musHatchling);
|
|
}
|
|
if (statetime == 760) {
|
|
remove_persistent_objects();
|
|
sfx_stop_all();
|
|
global.vibL = 0;
|
|
global.vibR = 0;
|
|
global.ingame = 0;
|
|
global.darkness = 0;
|
|
global.gotolog = -1;
|
|
global.enablecontrol = 1;
|
|
global.transitiontype = 0;
|
|
oControl.displaygui = 1;
|
|
room_goto(rm_credits);
|
|
mus_stop_all();
|
|
mus_play_once(musCredits);
|
|
}
|
|
} // if (global.event[304] == 0) else
|
|
} // if (state == SAVINGSHIP)
|
|
if (state == SAVINGSHIPFX) {
|
|
if (statetime == 1) {
|
|
sfx_play(sndSave);
|
|
save_game("save" + string(global.saveslot + 1));
|
|
refill_heath_ammo();
|
|
popup_text(get_text("Notifications", "GameSaved"));
|
|
}
|
|
if (statetime > 120) {
|
|
if (y > 1088) y -= 1;
|
|
if (y == 1088) state = IDLE;
|
|
}
|
|
}
|
|
if (state == ELEVATOR) {
|
|
if (x < global.savexpos) x += 1;
|
|
if (x > global.savexpos) x -= 1;
|
|
charge = 0;
|
|
if (statetime == 0) {
|
|
xVel = 0;
|
|
yVel = 0;
|
|
}
|
|
if (statetime == 5) facing = 0;
|
|
}
|
|
if (state == GFELEVATOR) {
|
|
charge = 0;
|
|
if (statetime == 0) {
|
|
xVel = 0;
|
|
yVel = 0;
|
|
}
|
|
if (statetime == 5) facing = 0;
|
|
if (statetime < 20) {
|
|
if (x < global.savexpos) x += 1;
|
|
if (x > global.savexpos) x -= 1;
|
|
}
|
|
if (statetime == 20) {
|
|
ele_fx = instance_create(x, y, oGFElevatorFX);
|
|
with (oGFElevator) event_user(0);
|
|
}
|
|
if (statetime > 20) {
|
|
if (!instance_exists(oGFElevatorFX)) ele_fx = instance_create(x, y, oGFElevatorFX);
|
|
ele_fx.x = x;
|
|
ele_fx.y = y + yVel;
|
|
if (room != elevator_target_room || room == elevator_target_room && point_distance(x, y, elevator_target_x, elevator_target_y) > 32) {
|
|
if (yVel < 0 && yVel > -6) yVel -= 0.2;
|
|
if (yVel > 0 && yVel < 6) yVel += 0.2;
|
|
} else if (abs(yVel) > 0.5) yVel *= 0.8;
|
|
if (room == elevator_target_room) {
|
|
if (point_distance(x, y, elevator_target_x, elevator_target_y) <= 1.5) {
|
|
x = elevator_target_x;
|
|
y = elevator_target_y;
|
|
state = IDLE;
|
|
statetime = 0;
|
|
xVel = 0;
|
|
yVel = 0;
|
|
sfx_stop(sndElevatorLoop);
|
|
with (ele_fx) instance_destroy();
|
|
with (oGFElevator) event_user(1);
|
|
}
|
|
}
|
|
}
|
|
} // if (state == GFELEVATOR)
|
|
if (state == KNOCKBACK1) {
|
|
if (statetime == 0) {
|
|
canbehit = 0;
|
|
speedboost = 0;
|
|
dash = 0;
|
|
charge = 0;
|
|
yVel = -4;
|
|
if (xVel == 0) {
|
|
if (facing == LEFT) {
|
|
xVel = 2;
|
|
} else xVel = -2;
|
|
}
|
|
unmorphing = 0;
|
|
image_index = 0;
|
|
image_speed = 0.12;
|
|
if (sfx_isplaying(sndSJLoop)) sfx_stop(sndSJLoop);
|
|
}
|
|
yAcc += 0.3;
|
|
xFric = 1;
|
|
if (image_index > 2.5) image_index = 2;
|
|
if (statetime == 30) canbehit = 1;
|
|
if (kJump && kJumpPushedSteps == 0 && canrecover == 0) canrecover = 30;
|
|
if (yVel > 0 && isCollisionBottom(1) > 0) {
|
|
yVel = 0;
|
|
yAcc = 0;
|
|
canbehit = 1;
|
|
turning = 0;
|
|
statetime = 0;
|
|
state = KNOCKBACK1_LAND;
|
|
sfx_play(sndKnockdown);
|
|
}
|
|
} // if (state == KNOCKBACK1)
|
|
if (state == KNOCKBACK1_LAND) {
|
|
if (statetime == 0) {
|
|
image_index = 0;
|
|
image_speed = 0;
|
|
if (!inwater) {
|
|
smk = instance_create(x, y, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.hspeed = 0.7;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
smk.image_xscale = 0.7;
|
|
smk.image_yscale = 0.7;
|
|
smk = instance_create(x, y, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.hspeed = -0.7;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
smk.image_xscale = 0.7;
|
|
smk.image_yscale = 0.7;
|
|
}
|
|
if (inwater) {
|
|
repeat (4 + floor(random(4))) {
|
|
bubble = instance_create(x, y, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.hspeed = random_range(-1.5, 1.5);
|
|
bubble.vspeed = -0.1 - random(0.5);
|
|
bubble.alarm[0] = 120 + random(120);
|
|
}
|
|
}
|
|
}
|
|
} // if (statetime == 0)
|
|
if (statetime == 6) {
|
|
image_index = 1;
|
|
if (canrecover > 18 && canrecover <= 30) {
|
|
state = RECOVER;
|
|
statetime = 0;
|
|
}
|
|
}
|
|
if (statetime == 60) image_speed = 0.4;
|
|
if (image_index > 3.5) {
|
|
landing = 1;
|
|
turning = 0;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
state = STANDING;
|
|
idle = 0;
|
|
}
|
|
xFric = 0.7;
|
|
if (isCollisionBottom(1) == 0) {
|
|
state = KNOCKBACK1;
|
|
statetime = 10;
|
|
image_index = 2;
|
|
}
|
|
} // if (state == KNOCKBACK1_LAND)
|
|
if (state == KNOCKBACK2) {
|
|
if (statetime == 0) {
|
|
yVel = -4;
|
|
unmorphing = 0;
|
|
image_index = 0;
|
|
image_speed = 0;
|
|
canbehit = 0;
|
|
speedboost = 0;
|
|
dash = 0;
|
|
charge = 0;
|
|
if (sfx_isplaying(sndSJLoop)) sfx_stop(sndSJLoop);
|
|
}
|
|
yVel += 0.3;
|
|
xFric = 1;
|
|
if (statetime == 10) canbehit = 1;
|
|
if (kJump && kJumpPushedSteps == 0 && canrecover == 0) canrecover = 30;
|
|
if (yVel > 0 && isCollisionBottom(1) > 0) {
|
|
yVel = 0;
|
|
yAcc = 0;
|
|
canbehit = 1;
|
|
turning = 0;
|
|
statetime = 0;
|
|
state = KNOCKBACK2_LAND;
|
|
PlayLandingSound(get_floor_material());
|
|
}
|
|
} // if (state == KNOCKBACK2)
|
|
if (state == KNOCKBACK2_LAND) {
|
|
if (statetime == 0) {
|
|
image_index = 3;
|
|
image_speed = 0;
|
|
}
|
|
if (statetime == 4) {
|
|
if (canrecover > 15 && canrecover <= 30) {
|
|
state = RECOVER;
|
|
statetime = 0;
|
|
}
|
|
}
|
|
if (statetime == 25) {
|
|
landing = 1;
|
|
turning = 0;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
state = STANDING;
|
|
idle = 0;
|
|
}
|
|
xFric = 0.85;
|
|
if (isCollisionBottom(1) == 0) {
|
|
state = JUMPING;
|
|
vjump = 1;
|
|
statetime = 0;
|
|
image_index = 0;
|
|
}
|
|
if (fxtimer == 0) {
|
|
smk = instance_create(x - 6 + random(12), y - 4, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
smk.image_xscale = 0.7;
|
|
smk.image_yscale = 0.7;
|
|
}
|
|
} // if (state == KNOCKBACK2_LAND)
|
|
if (state == RECOVER) {
|
|
if (statetime == 0) {
|
|
yVel = -2;
|
|
image_index = 6;
|
|
xVel *= 0.3;
|
|
if (kLeft > 0) xVel = -1.5;
|
|
if (kRight > 0) xVel = 1.5;
|
|
yFric = 1;
|
|
xFric = 1;
|
|
sfx_play(sndJump);
|
|
}
|
|
yVel += 0.25;
|
|
if (image_index < 1) {
|
|
state = JUMPING;
|
|
vjump = 1;
|
|
statetime = 0;
|
|
image_index = 0;
|
|
yVel = -0.8;
|
|
}
|
|
}
|
|
if (state == A4EXPL) {
|
|
if (statetime == 0) {
|
|
image_index = 0;
|
|
image_speed = 0;
|
|
chargebeam = 0;
|
|
}
|
|
if (statetime == 180) {
|
|
x = 128;
|
|
y = 192;
|
|
facing = RIGHT;
|
|
image_index = 1;
|
|
}
|
|
if (statetime > 180 && statetime < 400) {
|
|
if (fxtimer == 0) {
|
|
smk = instance_create(x - 8 + random(16), y - 2, oFXAnimSpark);
|
|
smk.image_speed = 0.5;
|
|
smk.additive = 0;
|
|
smk.sprite_index = sSmoke1;
|
|
smk.image_alpha = 0.6;
|
|
smk.image_xscale = 0.7;
|
|
smk.image_yscale = 0.7;
|
|
smk.vspeed = -1;
|
|
smk.depth = -10;
|
|
}
|
|
}
|
|
if (statetime == 500) image_speed = 0.1;
|
|
if (image_index > 3.5) {
|
|
image_speed = 0;
|
|
if (statetime > 600) {
|
|
landing = 1;
|
|
turning = 0;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
state = STANDING;
|
|
idle = 0;
|
|
mus_change(musArea4B);
|
|
}
|
|
}
|
|
} // if (state == A4EXPL)
|
|
if (state == WATERJET) {
|
|
yFric = 1;
|
|
xFric = 1;
|
|
if (statetime == 0) {
|
|
if (global.currentsuit == 0) sprite_index = scr_suit_sprites(sMorphBall,sMorphBall_fusion);
|
|
if (global.currentsuit == 1) sprite_index = scr_suit_sprites(sVMorphBall,sMorphBall_fusion);
|
|
if (global.currentsuit == 2) sprite_index = scr_suit_sprites(sGMorphBall,sMorphBall_fusion);
|
|
image_speed = 0;
|
|
image_index = 4;
|
|
xVel = 0;
|
|
xAcc = 0;
|
|
yVel = 0;
|
|
yAcc = 0;
|
|
}
|
|
if (statetime == 120) {
|
|
instance_create(x, y, oA2WaterSpawner);
|
|
w = instance_create(x, y - 8, oFXAnimSpark);
|
|
w.image_speed = 0.6;
|
|
w.additive = 0;
|
|
w.sprite_index = sWaterSplash;
|
|
w.image_alpha = 0.8;
|
|
sfx_play(sndA2WJStart);
|
|
sfx_loop(sndA2WJLoop);
|
|
}
|
|
if (statetime > 120) yVel = -8;
|
|
if (isCollisionTop(1) > 0 && statetime > 140) {
|
|
xVel = 8;
|
|
} else xVel = 0;
|
|
if (statetime == 500) {
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
}
|
|
} // if (state == WATERJET)
|
|
if (state == SPIDERBALL && statetime > 1) {
|
|
if (global.opspdstyle == 1 && kJump && kJumpPushedSteps == 0 || global.opspdstyle == 0 && (kAim && kAimPushedSteps == 0 || kAim2 && kAim2PushedSteps == 0) || global.opspdstyle == 2 && !kAim && !kAim2) {
|
|
if (isCollisionBottom(1) > 0) {
|
|
state = BALL;
|
|
} else state = AIRBALL;
|
|
morphing = 0;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
turning = 0;
|
|
sball = 0;
|
|
sfx_play(sndSBallStart);
|
|
}
|
|
}
|
|
if (state == AIRBALL && sball == 1 && statetime > 1) {
|
|
if (global.opspdstyle == 1 && kJump && kJumpPushedSteps == 0 || global.opspdstyle == 0 && (kAim && kAimPushedSteps == 0 || kAim2 && kAim2PushedSteps == 0) || global.opspdstyle == 2 && !kAim && !kAim2) {
|
|
morphing = 0;
|
|
statetime = 0;
|
|
sball = 0;
|
|
sfx_play(sndSBallStart);
|
|
}
|
|
}
|
|
if ((inwater == 1 || waterfall > 0) && global.currentsuit < 2 || monster_drain > 0) {
|
|
if (state == SPIDERBALL) {
|
|
state = BALL;
|
|
sfx_stop(sndSBallLoop);
|
|
}
|
|
if (state == AIRBALL && sball == 1) {
|
|
sball = 0;
|
|
sfx_stop(sndSBallLoop);
|
|
}
|
|
}
|
|
if (state == BALL && dash == 0 && global.spiderball == 1 && moverobj == 0 && invincible == 0 && (global.currentsuit < 2 && inwater == 0 && waterfall == 0 || global.currentsuit == 2) && statetime > 1 && monster_drain == 0) {
|
|
if (global.opspdstyle == 1 && kDown && kDownPushedSteps == 0 || global.opspdstyle == 0 && (kAim && kAimPushedSteps == 0 || kAim2 && kAim2PushedSteps == 0) || global.opspdstyle == 2 && (kAim || kAim2)) {
|
|
state = SPIDERBALL;
|
|
sball = 1;
|
|
morphing = 0;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
sbmove = 0;
|
|
turning = 0;
|
|
sfx_play(sndSBallStart);
|
|
sfx_loop(sndSBallLoop);
|
|
}
|
|
}
|
|
if (global.spiderball == 1 && sball == 0 && moverobj == 0 && invincible == 0 && (global.currentsuit < 2 && inwater == 0 && waterfall == 0 || global.currentsuit == 2) && (state == AIRBALL || state == SJEND && sjball == 1) && statetime > 1 && monster_drain == 0) {
|
|
if (global.opspdstyle == 1 && kDown && kDownPushedSteps == 0 || global.opspdstyle == 0 && (kAim && kAimPushedSteps == 0 || kAim2 && kAim2PushedSteps == 0) || global.opspdstyle == 2 && (kAim || kAim2)) {
|
|
morphing = 0;
|
|
statetime = 0;
|
|
sbmove = 0;
|
|
sball = 1;
|
|
sfx_play(sndSBallStart);
|
|
sfx_loop(sndSBallLoop);
|
|
}
|
|
}
|
|
if (global.morphball == 1 && unmorphing == 0 && nomorph == 0 && (global.opmrpstyle == 1 && kDown && kDownPushedSteps == 0 && state == DUCKING && (global.opaimstyle == 0 && (kAim == 0 || kAim && aimdirection == 4 || kAim && aimdirection == 5) || global.opaimstyle == 1) || kMorph && kMorphPushedSteps == 0 && (state == STANDING || state == RUNNING || state == DUCKING))) {
|
|
state = BALL;
|
|
morphing = 1;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
turning = 0;
|
|
xVel = 0;
|
|
dash = 0;
|
|
nomorph = 10;
|
|
sfx_play(sndMorph);
|
|
}
|
|
if (state == JUMPING && statetime > 2 && global.morphball == 1 && unmorphing == 0 && nomorph == 0 && global.classicmode == 0 && (global.opmrpstyle == 1 && kDown && kDownPushedSteps == 0 && aimdirection == 7 || kMorph && kMorphPushedSteps == 0)) {
|
|
state = AIRBALL;
|
|
morphing = 1;
|
|
mockball = 15;
|
|
nomorph = 10;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
turning = 0;
|
|
sball = 0;
|
|
if (yVel > 0) {
|
|
yVel = 0;
|
|
yAcc = 0;
|
|
}
|
|
if (!speedboost) {
|
|
xVel = 0;
|
|
xAcc = 0;
|
|
}
|
|
sfx_play(sndMorph);
|
|
}
|
|
if (kDown && kDownPushedSteps == 0 && platformCharacterIs(ON_GROUND) && state != BALL && state != RUNNING && state != DUCKING) {
|
|
if (global.opaimstyle == 0 && (kAim == 0 || kAim && aimdirection == 4 || kAim && aimdirection == 5) || global.opaimstyle == 1) {
|
|
state = DUCKING;
|
|
statetime = 0;
|
|
turning = 0;
|
|
sfx_play(sndCrouch);
|
|
}
|
|
}
|
|
if (state == BRAKING) {
|
|
dash = 0;
|
|
if (isCollisionBottom(1) == 0 && (isCollisionPlatformBottom(1) == 0 || isCollisionPlatform())) {
|
|
xAcc = xVel / 1.2;
|
|
xVel *= 0.5;
|
|
canturn = 1;
|
|
if (sjball == 0) {
|
|
state = JUMPING;
|
|
vjump = 1;
|
|
}
|
|
if (sjball == 1) state = AIRBALL;
|
|
statetime = 0;
|
|
y += 1;
|
|
}
|
|
if (sjball == 1 && statetime == 15) {
|
|
state = BALL;
|
|
canturn = 1;
|
|
sjball = 0;
|
|
}
|
|
}
|
|
if (state == BRAKING && statetime > 3 && kDown && kLeft == 0 && kRight == 0) {
|
|
if (sjball == 0) state = DUCKING;
|
|
if (sjball == 1) state = BALL;
|
|
statetime = 0;
|
|
turning = 0;
|
|
dash = 0;
|
|
canturn = 1;
|
|
charge = 240;
|
|
sfx_loop(sndSBChargeLoop);
|
|
expl = instance_create(x, y, oFXAnimSpark);
|
|
expl.image_speed = 0.5;
|
|
expl.sprite_index = sSBChargeFX;
|
|
expl.depth = -150;
|
|
}
|
|
if (kUp && kUpPushedSteps == 0 && state == DUCKING) {
|
|
if (kAim == 0 || kAim && aimdirection == 2 || kAim && aimdirection == 3 || global.opaimstyle == 1) {
|
|
state = STANDING;
|
|
statetime = 0;
|
|
idle = 0;
|
|
turning = 0;
|
|
xVel = 0;
|
|
xAcc = 0;
|
|
noaimup = 5;
|
|
unmorphing = 0;
|
|
}
|
|
}
|
|
if (state == BALL && morphing == 0 && dash == 0 && moverobj == 0 && nomorph == 0 && (global.opmrpstyle == 1 && kUp && kUpPushedSteps == 0 || kMorph && kMorphPushedSteps == 0)) {
|
|
if (isCollisionUnmorph() == 2) x -= 3;
|
|
if (isCollisionUnmorph() == 3) x += 3;
|
|
if (isCollisionUnmorph() == 1) {
|
|
state = DUCKING;
|
|
statetime = 0;
|
|
turning = 0;
|
|
unmorphing = 1;
|
|
nomorph = 10;
|
|
sjball = 0;
|
|
image_index = 0;
|
|
xVel = 0;
|
|
xAcc = 0;
|
|
sfx_play(sndUnMorph);
|
|
if (facing == RIGHT) {
|
|
aimdirection = 0;
|
|
} else aimdirection = 1;
|
|
}
|
|
}
|
|
if (state == AIRBALL && morphing == 0 && moverobj == 0 && nomorph == 0 && (global.opmrpstyle == 1 && kUp && kUpPushedSteps == 0 || kMorph && kMorphPushedSteps == 0)) {
|
|
if (isCollisionUnmorph() == 2) x -= 3;
|
|
if (isCollisionUnmorph() == 3) x += 3;
|
|
if (isCollisionUnmorph() == 1) {
|
|
state = JUMPING;
|
|
statetime = 0;
|
|
turning = 0;
|
|
vjump = 1;
|
|
hijump = 0;
|
|
unmorphing = 1;
|
|
nomorph = 10;
|
|
image_index = 0;
|
|
yVel = 0;
|
|
yAcc = 0;
|
|
if (!speedboost) {
|
|
xVel = 0;
|
|
xAcc = 0;
|
|
}
|
|
cmmorph = 10;
|
|
sfx_play(sndUnMorph);
|
|
sball = 0;
|
|
sjball = 0;
|
|
if (facing == RIGHT) {
|
|
aimdirection = 0;
|
|
} else aimdirection = 1;
|
|
}
|
|
} // if (state == AIRBALL && morphing == 0 && moverobj == 0 && nomorph == 0 && (global.opmrpstyle == 1 && kUp && kUpPushedSteps == 0 || kMorph && kMorphPushedSteps == 0))
|
|
if (xVel == 0 && xAcc == 0 && state == RUNNING) {
|
|
state = STANDING;
|
|
statetime = 0;
|
|
firing = 0;
|
|
idle = 0;
|
|
}
|
|
if (xAcc != 0 && state == STANDING && canrun == 1) {
|
|
state = RUNNING;
|
|
statetime = 0;
|
|
image_index = 0;
|
|
unmorphing = 0;
|
|
}
|
|
if (yVel < 0 && platformCharacterIs(IN_AIR) && state != BALL && state != AIRBALL) state = JUMPING;
|
|
if (state == JUMPING && statetime == 0 && vjump == 0 && (kUp || kDown)) lockspinjump = 1;
|
|
if (state == JUMPING && statetime > 4 && vjump == 0 && !kUp && !kDown) {
|
|
lockspinjump = 0;
|
|
if (facing == RIGHT) {
|
|
aimdirection = 0;
|
|
} else aimdirection = 1;
|
|
}
|
|
if (state == JUMPING && vjump == 0 && walljumping == 0 && statetime > 4 && justwalljumped == 0) {
|
|
if ((kUp || kDown) && kLeft == 0 && kRight == 0 && novjump == 0 && lockspinjump == 0 || kFire && kFirePushedSteps == 0 && nofire == 0 || chargebeam > 0 && !kFire || aimlock) {
|
|
vjump = 1;
|
|
novjump = 10;
|
|
canturn = 1;
|
|
turning = 0;
|
|
hijump = 0;
|
|
statetime = 0;
|
|
if (global.spacejump && yVel > 0) yVel = -1.5;
|
|
}
|
|
}
|
|
if (platformCharacterIs(IN_AIR) && state != AIRBALL && position_meeting(x, y + 10, oSolid) == false && position_meeting(x, y - 32, oSolid) == false && yVel > 0 && y > 32 && global.powergrip == 1) {
|
|
if (facing == RIGHT && position_meeting(x + 7, y - 26, oSolid) == true && position_meeting(x + 7, y - 26, oMovingSolid) == false && position_meeting(x + 7, y - 32, oSolid) == false && kRight > 0 && dash == 0) {
|
|
state = GRIP;
|
|
statetime = 0;
|
|
turning = 0;
|
|
image_index = 0;
|
|
canturn = 0;
|
|
canclimb = 0;
|
|
aimdirection = 0;
|
|
y += 1;
|
|
move_snap(16, 16);
|
|
x -= 7;
|
|
y -= 5;
|
|
sfx_play(sndGrab);
|
|
}
|
|
if (facing == LEFT && position_meeting(x - 7, y - 26, oSolid) == true && position_meeting(x - 7, y - 26, oMovingSolid) == false && position_meeting(x - 7, y - 32, oSolid) == false && kLeft > 0 && dash == 0) {
|
|
state = GRIP;
|
|
statetime = 0;
|
|
turning = 0;
|
|
image_index = 0;
|
|
canturn = 0;
|
|
canclimb = 0;
|
|
aimdirection = 1;
|
|
y += 1;
|
|
move_snap(16, 16);
|
|
x += 7;
|
|
y -= 5;
|
|
sfx_play(sndGrab);
|
|
}
|
|
} // if (platformCharacterIs(IN_AIR) && state != AIRBALL && position_meeting(x, y + 10, oSolid) == false && position_meeting(x, y - 32, oSolid) == false && yVel > 0 && y > 32 && global.powergrip == 1)
|
|
if (state == GRIP && facing == RIGHT) {
|
|
if (kJump && kJumpPushedSteps == 1 && kRight == 0 && kLeft == 0) {
|
|
state = JUMPING;
|
|
statetime = 0;
|
|
vjump = 1;
|
|
canturn = 1;
|
|
if (aimdirection == 0) yAcc += initialJumpAcc * 0.75;
|
|
if (aimdirection != 0) {
|
|
yVel = 0;
|
|
facing = LEFT;
|
|
}
|
|
sfx_play(sndJump);
|
|
}
|
|
if (kJump && kJumpPushedSteps == 1 && kLeft > 0 && turning == 0) {
|
|
state = JUMPING;
|
|
statetime = 0;
|
|
facing = LEFT;
|
|
aimdirection = 1;
|
|
xAcc = -2;
|
|
yAcc += initialJumpAcc;
|
|
hijump = 1;
|
|
vjump = 0;
|
|
canturn = 1;
|
|
LoopSoundMono(spinjump_sound);
|
|
}
|
|
if (kUp && kLeft == 0 && kAim == 0 && kAim2 == 0) {
|
|
canclimb += 1;
|
|
} else canclimb = 0;
|
|
if ((kJump && kJumpPushedSteps == 1 && kRight > 0 || kUp && canclimb > 30 && statetime > 30) && (!position_meeting(x + 7, y - 46, oSolid) || position_meeting(x + 7, y - 46, oSolid) && global.morphball)) {
|
|
state = CLIMBING;
|
|
statetime = 0;
|
|
aimdirection = 0;
|
|
image_index = 0;
|
|
sfx_play(sndPullUp);
|
|
}
|
|
if (!position_meeting(x + 7, y - 26, oSolid)) {
|
|
state = JUMPING;
|
|
statetime = 0;
|
|
vjump = 1;
|
|
canturn = 1;
|
|
yVel = 0;
|
|
}
|
|
} // if (state == GRIP && facing == RIGHT)
|
|
if (state == GRIP && facing == LEFT) {
|
|
if (kJump && kJumpPushedSteps == 1 && kRight == 0 && kLeft == 0) {
|
|
state = JUMPING;
|
|
statetime = 0;
|
|
vjump = 1;
|
|
canturn = 1;
|
|
if (aimdirection == 1) yAcc += initialJumpAcc * 0.75;
|
|
if (aimdirection != 1) {
|
|
yVel = 0;
|
|
facing = RIGHT;
|
|
}
|
|
sfx_play(sndJump);
|
|
}
|
|
if (kJump && kJumpPushedSteps == 1 && kRight > 0 && turning == 0) {
|
|
state = JUMPING;
|
|
statetime = 0;
|
|
facing = RIGHT;
|
|
aimdirection = 0;
|
|
xAcc = 2;
|
|
yAcc += initialJumpAcc;
|
|
hijump = 1;
|
|
vjump = 0;
|
|
canturn = 1;
|
|
LoopSoundMono(spinjump_sound);
|
|
}
|
|
if (kUp && kRight == 0 && kAim == 0 && kAim2 == 0) {
|
|
canclimb += 1;
|
|
} else canclimb = 0;
|
|
if ((kJump && kJumpPushedSteps == 1 && kLeft > 0 || kUp && canclimb > 30 && statetime > 30) && (!position_meeting(x - 8, y - 46, oSolid) || position_meeting(x - 8, y - 46, oSolid) && global.morphball)) {
|
|
state = CLIMBING;
|
|
statetime = 0;
|
|
aimdirection = 1;
|
|
image_index = 0;
|
|
sfx_play(sndPullUp);
|
|
}
|
|
if (!position_meeting(x - 8, y - 26, oSolid)) {
|
|
state = JUMPING;
|
|
statetime = 0;
|
|
vjump = 1;
|
|
canturn = 1;
|
|
yVel = 0;
|
|
}
|
|
} // if (state == GRIP && facing == LEFT)
|
|
if (state == CLIMBING) {
|
|
canturn = 0;
|
|
canbehit = 0;
|
|
if (statetime == 2) y -= 6;
|
|
if (statetime == 3) y -= 6;
|
|
if (statetime == 5) y -= 2;
|
|
if (statetime == 6) y -= 2;
|
|
if (facing == RIGHT) {
|
|
if (statetime == 8) {
|
|
y -= 1;
|
|
x += 4;
|
|
}
|
|
if (statetime == 9) {
|
|
y -= 1;
|
|
x += 3;
|
|
}
|
|
if (statetime == 10) {
|
|
y -= 2;
|
|
x += 2;
|
|
}
|
|
if (statetime == 11) {
|
|
y -= 2;
|
|
x += 2;
|
|
}
|
|
if (statetime == 12) {
|
|
y -= 2;
|
|
x += 1;
|
|
}
|
|
if (statetime == 13) {
|
|
y -= 2;
|
|
x += 1;
|
|
}
|
|
} // if (facing == RIGHT)
|
|
if (facing == LEFT) {
|
|
if (statetime == 8) {
|
|
y -= 1;
|
|
x -= 4;
|
|
}
|
|
if (statetime == 9) {
|
|
y -= 1;
|
|
x -= 3;
|
|
}
|
|
if (statetime == 10) {
|
|
y -= 2;
|
|
x -= 2;
|
|
}
|
|
if (statetime == 11) {
|
|
y -= 2;
|
|
x -= 2;
|
|
}
|
|
if (statetime == 12) {
|
|
y -= 2;
|
|
x -= 1;
|
|
}
|
|
if (statetime == 13) {
|
|
y -= 2;
|
|
x -= 1;
|
|
}
|
|
} // if (facing == LEFT)
|
|
if (statetime == 14) {
|
|
if (position_meeting(x, y - 18, oSolid) == false) {
|
|
y -= 1;
|
|
landing = 1;
|
|
state = STANDING;
|
|
statetime = 0;
|
|
idle = 0;
|
|
image_index = 0;
|
|
canturn = 1;
|
|
if (facing == RIGHT && kLeft > 0) {
|
|
facing = LEFT;
|
|
turning = 1;
|
|
landing = 0;
|
|
}
|
|
if (facing == LEFT && kRight > 0) {
|
|
facing = RIGHT;
|
|
turning = 1;
|
|
landing = 0;
|
|
}
|
|
}
|
|
if (position_meeting(x, y - 18, oSolid) == true) {
|
|
y -= 1;
|
|
state = BALL;
|
|
statetime = 0;
|
|
image_index = 0;
|
|
morphing = 1;
|
|
canturn = 1;
|
|
sfx_play(sndMorph);
|
|
}
|
|
canbehit = 1;
|
|
} // if (statetime == 14)
|
|
if (statetime > 6 && (isCollisionRightSlope(1) || isCollisionLeftSlope(1))) y -= 1;
|
|
if (statetime >= 12 && (isCollisionRightSlope(1) || isCollisionLeftSlope(1))) y -= 1;
|
|
} // if (state == CLIMBING)
|
|
if (state == GRABBEDGAMMA) {
|
|
yVel = 0;
|
|
xVel = 0;
|
|
x = round(oMGamma.x + oMGamma.legba1x + oMGamma.legba2x + 8 * oMGamma.facing);
|
|
y = round(oMGamma.y + oMGamma.legba1y + oMGamma.legba2y + 24);
|
|
invincible = 5;
|
|
canturn = 0;
|
|
|
|
if (global.currentsuit == 0) global.playerhealth -= (global.mod_grabbedgammaPS * oControl.mod_diffmult);
|
|
if (global.currentsuit == 1) global.playerhealth -= (global.mod_grabbedgammaVS * oControl.mod_diffmult);
|
|
//if (global.currentsuit == 2) global.playerhealth -= global.mod_grabbedgammaGS * oControl.mod_diffmult;;
|
|
if (global.currentsuit == 2) {
|
|
if(global.item[5] == 0) {
|
|
global.playerhealth -= (global.mod_grabbedgammaVS * oControl.mod_diffmult);
|
|
} else {
|
|
global.playerhealth -= (global.mod_grabbedgammaGS * oControl.mod_diffmult);
|
|
}
|
|
} //added
|
|
|
|
if (global.playerhealth <= 0) with (oControl) event_user(1);
|
|
if (statetime == 0) {
|
|
sfx_stop_loops();
|
|
sfx_loop(sndMGammaElecLoop);
|
|
}
|
|
if (statetime == 100 || oMGamma.state != 9 && statetime > 1) {
|
|
state = KNOCKBACK1;
|
|
statetime = -1;
|
|
if (oMGamma.facing == 1) {
|
|
facing = LEFT;
|
|
} else facing = RIGHT;
|
|
sfx_stop(sndMGammaElecLoop);
|
|
}
|
|
}
|
|
if (state == LOCKEDBALL) {
|
|
yVel = 0;
|
|
xVel = 0;
|
|
}
|
|
if (state == GRABBED) {
|
|
yVel = 0;
|
|
xVel = 0;
|
|
canturn = 0;
|
|
if (statetime > 300) {
|
|
state = KNOCKBACK1;
|
|
statetime = -1;
|
|
if (facing == LEFT) {
|
|
xVel = 2;
|
|
} else xVel = -2;
|
|
}
|
|
}
|
|
if (state == GRABBEDOMEGA) {
|
|
if (statetime == 0) {
|
|
canbehit = 0;
|
|
speedboost = 0;
|
|
dash = 0;
|
|
charge = 0;
|
|
yVel = -0.3;
|
|
xVel = oMOmega.xVel * 1.5;
|
|
unmorphing = 0;
|
|
image_index = 0;
|
|
image_speed = 0.12;
|
|
if (sfx_isplaying(sndSJLoop)) sfx_stop(sndSJLoop);
|
|
}
|
|
yAcc += 0.3;
|
|
xFric = 1;
|
|
if (image_index > 2.5) image_index = 2;
|
|
if (statetime == 30) canbehit = 1;
|
|
if (kJump && kJumpPushedSteps == 0 && canrecover == 0) canrecover = 30;
|
|
if (yVel > 0 && isCollisionBottom(1) > 0) {
|
|
yVel = 0;
|
|
yAcc = 0;
|
|
xVel *= 2;
|
|
canbehit = 1;
|
|
turning = 0;
|
|
statetime = 0;
|
|
state = KNOCKBACK1_LAND;
|
|
sfx_play(sndKnockdown);
|
|
}
|
|
} // if (state == GRABBEDOMEGA)
|
|
if (state == GRABBEDQUEEN) {
|
|
if (statetime == 0) {
|
|
canbehit = 0;
|
|
speedboost = 0;
|
|
dash = 0;
|
|
charge = 0;
|
|
yVel = 0;
|
|
xVel = 0;
|
|
unmorphing = 0;
|
|
image_index = 0;
|
|
image_speed = 0;
|
|
queen_drain = 1;
|
|
if (sfx_isplaying(sndSJLoop)) sfx_stop(sndSJLoop);
|
|
}
|
|
facing = LEFT;
|
|
aimdirection = 1;
|
|
aimlock = 1;
|
|
if (statetime == 50) image_index = 1;
|
|
if (statetime == 55) image_index = 2;
|
|
if (statetime > 60 && global.morphball == 1 && (kDown && kDownPushedSteps == 0 || kMorph && kMorphPushedSteps == 0)) {
|
|
state = GRABBEDQUEENMORPH;
|
|
morphing = 1;
|
|
image_index = 0;
|
|
statetime = 0;
|
|
turning = 0;
|
|
xVel = 0;
|
|
dash = 0;
|
|
nomorph = 10;
|
|
sfx_play(sndMorph);
|
|
aimlock = 0;
|
|
}
|
|
if (oQueen.state == 100) {
|
|
state = JUMPING;
|
|
statetime = 0;
|
|
vjump = 1;
|
|
x = round(x);
|
|
y = round(y);
|
|
aimlock = 0;
|
|
}
|
|
} // if (state == GRABBEDQUEEN)
|
|
if (state == GRABBEDQUEENMORPH) {
|
|
if (statetime == 0) {
|
|
image_speed = 0.5;
|
|
queen_drain = 1;
|
|
}
|
|
if ((statetime > 10) && (kLeft > 0)) {
|
|
state = GRABBEDQUEENBELLY;
|
|
statetime = 0;
|
|
}
|
|
if (oQueen.state == 100) {
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
x = round(x);
|
|
y = round(y);
|
|
}
|
|
}
|
|
if (state == GRABBEDQUEENBELLY) {
|
|
if (statetime == 0) {
|
|
hspeed = -1;
|
|
vspeed = -0.21;
|
|
queen_drain = 1;
|
|
}
|
|
if (statetime < 60) y = clamp(y, 0, oQueenHead.y + 24);
|
|
if (statetime > 60 && instance_exists(oQueen)) {
|
|
hspeed = 0;
|
|
vspeed = 0;
|
|
x = lerp(oQueen.x + oQueen.belly_x, x, 0.01);
|
|
y = lerp(oQueen.y + oQueen.belly_y, y, 0.01);
|
|
if (oQueen.state == 100) {
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
x = round(x);
|
|
y = round(y);
|
|
queen_drain = 0;
|
|
}
|
|
}
|
|
if (!instance_exists(oQueen)) {
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
x = round(x);
|
|
y = round(y);
|
|
queen_drain = 0;
|
|
}
|
|
} // if (state == GRABBEDQUEENBELLY)
|
|
moverobj = 0;
|
|
if (global.moverobj && (global.currentsuit < 2)) {
|
|
if (collision_line(round(x - 5), round(y - 2), round(x + 5), round(y - 2), oMoverUp, false, true) > 0 && state != CLIMBING) {
|
|
if (state != AIRBALL) {
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
canturn = 1;
|
|
sball = 0;
|
|
}
|
|
yVel = -5;
|
|
moverobj = 1;
|
|
}
|
|
if (collision_line(round(x - 5), round(y - 2), round(x + 5), round(y - 2), oMoverDown, false, true) > 0 && state != CLIMBING) {
|
|
if (state != AIRBALL) {
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
canturn = 1;
|
|
sball = 0;
|
|
}
|
|
yVel = 5;
|
|
moverobj = 1;
|
|
}
|
|
if (collision_line(round(x - 5), round(y - 2), round(x + 5), round(y - 2), oMoverLeft, false, true) > 0 && state != CLIMBING) {
|
|
if (state != AIRBALL) {
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
canturn = 1;
|
|
sball = 0;
|
|
}
|
|
xVel = -5;
|
|
moverobj = 1;
|
|
fixedx = 20;
|
|
facing = LEFT;
|
|
}
|
|
if (collision_line(round(x - 5), round(y - 2), round(x + 5), round(y - 2), oMoverRight, false, true) > 0 && state != CLIMBING) {
|
|
if (state != AIRBALL) {
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
canturn = 1;
|
|
sball = 0;
|
|
}
|
|
xVel = 5;
|
|
moverobj = 1;
|
|
fixedx = 20;
|
|
facing = RIGHT;
|
|
}
|
|
if (collision_line(round(x - 5), round(y - 2), round(x + 5), round(y - 2), oMoverLeftUp, false, true) > 0 && state != CLIMBING) {
|
|
if (state != AIRBALL) {
|
|
state = AIRBALL;
|
|
statetime = 0;
|
|
canturn = 1;
|
|
sball = 0;
|
|
}
|
|
xVel = -5;
|
|
yVel = -5;
|
|
moverobj = 1;
|
|
fixedx = 20;
|
|
fixedy = 20;
|
|
facing = LEFT;
|
|
}
|
|
} // if (global.moverobj && global.currentsuit < 2)
|
|
if (global.classicmode) {
|
|
if ((cmhurt > 0 || cmmorph > 0) && kJump && kJumpPushedSteps == 0 && isCollisionBottom(1) == 0) {
|
|
if (sjball == 0) {
|
|
state = JUMPING;
|
|
vjump = 1;
|
|
}
|
|
if (sjball && global.jumpball) state = AIRBALL;
|
|
canturn = 1;
|
|
statetime = 0;
|
|
yVel = -7;
|
|
cmhurt = 0;
|
|
cmmorph = 0;
|
|
}
|
|
}
|
|
if (state == STANDING || state == DUCKING || state == GRIP || state == CLIMBING || state == SJSTART || state == SJEND || state == IDLE) xFric = 0;
|
|
if (state == RUNNING) {
|
|
if (dash == 0) xFric = frictionRunningX;
|
|
if (dash > 0 && dash <= 30) xFric = frictionRunningX + dash * 0.0075;
|
|
if (turning == 1) xFric = 0;
|
|
if (shinespark) xFric = 1;
|
|
}
|
|
if (state == BRAKING) xFric = frictionRunningX * 2.8;
|
|
if (state == SUPERJUMP) xFric = 1;
|
|
if (state == BALL) {
|
|
if (dash == 0) xFric = frictionRunningX * 2;
|
|
if (dash > 0 && dash <= 30) xFric = frictionRunningX + dash * 0.017;
|
|
if (shinespark) xFric = 1;
|
|
}
|
|
if (state == AIRBALL) {
|
|
xFric = 0.5;
|
|
if (dash > 0) xFric = 0.8;
|
|
if (moverobj) {
|
|
xFric = 1;
|
|
yFric = 1;
|
|
}
|
|
}
|
|
if (state == JUMPING) {
|
|
if (vjump == 1) xFric = frictionJumpingX;
|
|
if (vjump == 0) xFric = 1;
|
|
if (walljumping == 1 || state == SPIDERBALL) xFric = 0;
|
|
}
|
|
if (state == HURT) xFric = frictionJumpingX;
|
|
if (unmorphing == 1 || walljumping == 1 || state == GRIP || state == CLIMBING || state == SPIDERBALL) {
|
|
yFric = 0;
|
|
} else yFric = 1;
|
|
if ((inwater == 1 || waterfall > 0) && global.currentsuit != 2 || monster_drain > 0) {
|
|
if (state != RUNNING) xFric *= 0.7;
|
|
yFric *= 0.95;
|
|
}
|
|
if (xAcc > xAccLimit) {
|
|
xAcc = xAccLimit;
|
|
} else if (xAcc < -1 * xAccLimit) xAcc = -1 * xAccLimit;
|
|
if (yAcc > yAccLimit) {
|
|
yAcc = yAccLimit;
|
|
} else if (yAcc < -1 * yAccLimit) yAcc = -1 * yAccLimit;
|
|
xVel += xAcc;
|
|
yVel += yAcc;
|
|
xAcc = 0;
|
|
yAcc = 0;
|
|
xVel *= xFric;
|
|
yVel *= yFric;
|
|
if (xVel > xVelLimit) {
|
|
xVel = xVelLimit;
|
|
} else if (xVel < -1 * xVelLimit) xVel = -1 * xVelLimit;
|
|
if (yVel > yVelLimit && (inwater == 0 && waterfall == 0 || global.currentsuit >= 2)) yVel = yVelLimit;
|
|
if (yVel > yVelLimit / 2 && (inwater == 1 || waterfall > 0) && global.currentsuit < 2) {
|
|
yVel = yVelLimit / 2;
|
|
} else if (yVel < JumpVelLimit) yVel = JumpVelLimit;
|
|
if (approximatelyZero(xVel)) xVel = 0;
|
|
if (approximatelyZero(yVel)) yVel = 0;
|
|
if (approximatelyZero(xAcc)) xAcc = 0;
|
|
if (approximatelyZero(yAcc)) yAcc = 0;
|
|
if (maxSlope * abs(xVel) > 0 && (platformCharacterIs(ON_GROUND) || state == BRAKING)) {
|
|
slopeYPrev = y;
|
|
for (y = y; y >= slopeYPrev - maxSlope * 2; y -= 1) {
|
|
if (isCollisionTop(1)) break;
|
|
}
|
|
slopeChangeInY = slopeYPrev - y;
|
|
} else slopeChangeInY = 0;
|
|
if (speedmultiplier != 1) {
|
|
xVel *= speedmultiplier;
|
|
yVel *= speedmultiplier;
|
|
}
|
|
if ((instance_exists(oEventCamera) || instance_exists(oEventCamera2)) && global.enablecontrol == 0) xVel = 0;
|
|
if (maxSlope * abs(xVel) > 0 && (platformCharacterIs(ON_GROUND) || state == BRAKING)) {
|
|
xPrev = x;
|
|
yPrev = slopeYPrev;
|
|
yPrevHigh = y;
|
|
moveTo(xVel, yVel + slopeChangeInY);
|
|
} else moveTo(xVel, yVel);
|
|
if (isCollisionBottom(1) == 0 && maxDownSlope * abs(xVelInteger) > 0 && (platformCharacterIs(ON_GROUND) || state == BRAKING)) {
|
|
upYPrev = y;
|
|
for (y = y; y <= upYPrev + maxDownSlope * abs(xVelInteger); y += 1) {
|
|
if (isCollisionBottom(1)) {
|
|
upYPrev = y;
|
|
break;
|
|
}
|
|
}
|
|
y = upYPrev;
|
|
}
|
|
statePrevPrev = statePrev;
|
|
statePrev = state;
|
|
if (image_speed > 1) image_speed = 1;
|
|
if (state != GRIP) {
|
|
if (facing == RIGHT) {
|
|
if (aimdirection == 1) aimdirection = 0;
|
|
if (aimdirection == 3) aimdirection = 2;
|
|
if (aimdirection == 5) aimdirection = 4;
|
|
}
|
|
if (facing == LEFT) {
|
|
if (aimdirection == 0) aimdirection = 1;
|
|
if (aimdirection == 2) aimdirection = 3;
|
|
if (aimdirection == 4) aimdirection = 5;
|
|
}
|
|
}
|
|
if (state != GRIP && aimlock == 0) {
|
|
if (kAim == 0 && turning == 0) {
|
|
if (kRight > 0 && kUp == 0 && kDown == 0) aimdirection = 0;
|
|
if (kLeft > 0 && kUp == 0 && kDown == 0) aimdirection = 1;
|
|
if (kRight > 0 && kUp && state != DUCKING && state != BALL) aimdirection = 2;
|
|
if (kLeft > 0 && kUp && state != DUCKING && state != BALL) aimdirection = 3;
|
|
if (kRight > 0 && kDown) aimdirection = 4;
|
|
if (kLeft > 0 && kDown) aimdirection = 5;
|
|
if (kUp && kLeft == 0 && kRight == 0 && noaimup == 0 && state != RUNNING) {
|
|
aimdirection = 6;
|
|
idle = 0;
|
|
}
|
|
}
|
|
if (global.opaimstyle == 0 && turning == 0) {
|
|
if (kAim) {
|
|
idle = 0;
|
|
if (facing == RIGHT) {
|
|
if (aimdirection == 5) aimdirection = 4;
|
|
if (aimdirection != 2 && aimdirection != 4) aimdirection = 2;
|
|
if (kDown && aimdirection == 2) aimdirection = 4;
|
|
if (kUp && aimdirection == 4) aimdirection = 2;
|
|
}
|
|
if (facing == LEFT) {
|
|
if (aimdirection == 4) aimdirection = 5;
|
|
if (aimdirection != 3 && aimdirection != 5) aimdirection = 3;
|
|
if (kDown && aimdirection == 3) aimdirection = 5;
|
|
if (kUp && aimdirection == 5) aimdirection = 3;
|
|
}
|
|
}
|
|
if (kDown == 1 && kLeft == 0 && kRight == 0 && kAim == 0 && kAim2 == 0 && platformCharacterIs(IN_AIR)) aimdirection = 7;
|
|
if (kRight == 0 && kLeft == 0 && kAim == 0 && kAim2 == 0 && (kUp == 0 && platformCharacterIs(ON_GROUND) || kUp == 0 && state == JUMPING && aimdirection != 6 && aimdirection != 7 || state == DUCKING)) {
|
|
if (facing == RIGHT) aimdirection = 0;
|
|
if (facing == LEFT) aimdirection = 1;
|
|
}
|
|
}
|
|
if (global.opaimstyle == 1 && turning == 0) {
|
|
if (kAim) {
|
|
idle = 0;
|
|
if (facing == RIGHT) aimdirection = 2;
|
|
if (facing == LEFT) aimdirection = 3;
|
|
}
|
|
if (kAim2 && !kAim) {
|
|
idle = 0;
|
|
if (facing == RIGHT) aimdirection = 4;
|
|
if (facing == LEFT) aimdirection = 5;
|
|
}
|
|
if (kAim && kAim2 && state != RUNNING) aimdirection = 6;
|
|
if (kDown == 1 && kLeft == 0 && kRight == 0 && kAim == 0 && kAim2 == 0 && platformCharacterIs(IN_AIR)) aimdirection = 7;
|
|
if (kRight == 0 && kLeft == 0 && kAim == 0 && kAim2 == 0 && (kUp == 0 && platformCharacterIs(ON_GROUND) || kUp == 0 && state == JUMPING && aimdirection != 6 && aimdirection != 7 || state == DUCKING)) {
|
|
if (facing == RIGHT) aimdirection = 0;
|
|
if (facing == LEFT) aimdirection = 1;
|
|
}
|
|
}
|
|
} // if (state != GRIP && aimlock == 0)
|
|
if (state == GRIP && aimlock == 0) {
|
|
if (facing == RIGHT) {
|
|
if (kRight > 0 && kRightPushedSteps == 0 && (global.opaimstyle == 0 && kAim == 0 || kAim == 0 && kAim2 == 0)) {
|
|
if (aimdirection != 0) turning = 1;
|
|
aimdirection = 0;
|
|
}
|
|
if (kLeft > 0 && kUp == 0 && kDown == 0) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 1;
|
|
}
|
|
if (kLeft > 0 && kUp) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 3;
|
|
}
|
|
if (kLeft > 0 && kDown) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 5;
|
|
}
|
|
if (kUp && kLeft == 0 && kRight == 0) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 6;
|
|
}
|
|
if (kDown && kLeft == 0 && kRight == 0) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 7;
|
|
}
|
|
if (global.opaimstyle == 0 && kAim) {
|
|
if (aimdirection != 3 && aimdirection != 5) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 3;
|
|
}
|
|
if (kDown && aimdirection == 3) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 5;
|
|
}
|
|
if (kUp && aimdirection == 5) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 3;
|
|
}
|
|
}
|
|
if (global.opaimstyle == 1) {
|
|
if (kAim && !kAim2) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 3;
|
|
}
|
|
if (kAim2 && !kAim) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 5;
|
|
}
|
|
if (kAim && kAim2) {
|
|
if (aimdirection == 0) turning = 1;
|
|
aimdirection = 6;
|
|
}
|
|
}
|
|
if (kLeft == 0 && aimdirection != 6 && (aimdirection == 3 || aimdirection == 5 || global.opaimstyle == 1 && aimdirection == 6) && (global.opaimstyle == 0 && kAim == 0 || kAim == 0 && kAim2 == 0)) aimdirection = 1;
|
|
} // if (facing == RIGHT)
|
|
if (facing == LEFT) {
|
|
if (kLeft > 0 && kLeftPushedSteps == 0 && kAim == 0) {
|
|
if (aimdirection != 1) turning = 1;
|
|
aimdirection = 1;
|
|
}
|
|
if (kRight > 0 && kUp == 0 && kDown == 0) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 0;
|
|
}
|
|
if (kRight > 0 && kUp) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 2;
|
|
}
|
|
if (kRight > 0 && kDown) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 4;
|
|
}
|
|
if (kUp && kLeft == 0 && kRight == 0) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 6;
|
|
}
|
|
if (kDown && kLeft == 0 && kRight == 0) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 7;
|
|
}
|
|
if (global.opaimstyle == 0 && kAim) {
|
|
if (aimdirection != 2 && aimdirection != 4) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 2;
|
|
}
|
|
if (kDown && aimdirection == 2) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 4;
|
|
}
|
|
if (kUp && aimdirection == 4) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 2;
|
|
}
|
|
}
|
|
if (global.opaimstyle == 1) {
|
|
if (kAim && !kAim2) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 2;
|
|
}
|
|
if (kAim2 && !kAim) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 4;
|
|
}
|
|
if (kAim && kAim2) {
|
|
if (aimdirection == 1) turning = 1;
|
|
aimdirection = 6;
|
|
}
|
|
}
|
|
if (kRight == 0 && aimdirection != 6 && (aimdirection == 2 || aimdirection == 4 || global.opaimstyle == 1 && aimdirection == 6) && (global.opaimstyle == 0 && kAim == 0 || kAim == 0 && kAim2 == 0)) aimdirection = 0;
|
|
} // if (facing == LEFT)
|
|
} // if (state == GRIP && aimlock == 0)
|
|
if (state == DUCKING && turning && (global.opaimstyle == 0 && kAim == 0 || kAim == 0 && kAim2 == 0)) {
|
|
if (facing == RIGHT) aimdirection = 0;
|
|
if (facing == LEFT) aimdirection = 1;
|
|
}
|
|
if (chargebeam > 0 && !kFire) {
|
|
if (state == JUMPING && vjump == 0 && walljumping == 0) vjump = 1;
|
|
if (state == GRIP && facing == RIGHT && aimdirection == 0) aimdirection = 1;
|
|
if (state == GRIP && facing == LEFT && aimdirection == 1) aimdirection = 0;
|
|
}
|
|
if (aimlock) {
|
|
canturn = 0;
|
|
if (aimdirection == 7 && state == STANDING) {
|
|
if (facing == RIGHT) {
|
|
aimdirection = 0;
|
|
} else aimdirection = 1;
|
|
}
|
|
} else if (!walljumping) canturn = 1;
|
|
chStepSetSprite();
|
|
if (speedmultiplier != 1) image_speed *= speedmultiplier;
|
|
chStepFire();
|
|
if (global.watertype == 1 && inwater && global.currentsuit < 2) {
|
|
if (burning == 0) sfx_loop(sndLavaLoop);
|
|
burning = 1;
|
|
if (global.currentsuit == 0) global.playerhealth -= global.mod_lavaburnPS * oControl.mod_diffmult;
|
|
if (global.currentsuit == 1) global.playerhealth -= global.mod_lavaburnVS * oControl.mod_diffmult;
|
|
if (global.playerhealth <= 0) with (oControl) event_user(1);
|
|
} else burning = 0;
|
|
if (plantdrain > 0) {
|
|
plantdrain -= 1;
|
|
if ((instance_exists(oMeboid) || instance_exists(oMeboid2)) && (state != 60)) { // MEBOIDS state 60 is warp pipes
|
|
switch global.currentsuit {
|
|
case 0: global.playerhealth -= 0.4*oControl.mod_diffmult; break;
|
|
case 1: global.playerhealth -= 0.3*oControl.mod_diffmult; break;
|
|
case 2: global.playerhealth -= 0.2*oControl.mod_diffmult; break;
|
|
}
|
|
if (global.playerhealth <= 0) with (oControl) event_user(1); // so we don't get Druids invuln glitch
|
|
// oh man 1.4.4
|
|
|
|
} else if (state != 60) { // druid don't break this pls
|
|
if (global.currentsuit == 0) global.playerhealth -= global.mod_plaintdrainPS * oControl.mod_diffmult;
|
|
if (global.currentsuit == 1) global.playerhealth -= global.mod_plaintdrainVS * oControl.mod_diffmult;
|
|
if (global.playerhealth <= 0) with (oControl) event_user(1);
|
|
}
|
|
if ((state != 60) && (plantdrainfx == 0)) {
|
|
sfx_loop(sndPlantLoop);
|
|
plantdrainfx = 1;
|
|
}
|
|
} else plantdrainfx = 0;
|
|
if (monster_drain > 0) {
|
|
monster_drain -= 1;
|
|
dash = 0;
|
|
speedboost = 0;
|
|
if (global.currentsuit == 0 && oControl.mod_monstersextreme == 0) global.playerhealth -= global.mod_monstersdrainPS * oControl.mod_diffmult;
|
|
else if (global.currentsuit == 0 && oControl.mod_monstersextreme != 0) global.playerhealth -= global.mod_monstersdrainPS * 4;
|
|
if (global.currentsuit == 1 && oControl.mod_monstersextreme == 0) global.playerhealth -= global.mod_monstersdrainVS * oControl.mod_diffmult;
|
|
else if (global.currentsuit == 1 && oControl.mod_monstersextreme != 0) global.playerhealth -= global.mod_monstersdrainVS * 4;
|
|
//if (global.currentsuit > 1) global.playerhealth -= global.mod_monstersdrainGS * oControl.mod_diffmult;
|
|
if (global.currentsuit == 2 && oControl.mod_monstersextreme == 0)
|
|
{
|
|
if(global.item[5] == 0)
|
|
global.playerhealth -= global.mod_monstersdrainVS * oControl.mod_diffmult;
|
|
else
|
|
global.playerhealth -= global.mod_monstersdrainGS * oControl.mod_diffmult;
|
|
}
|
|
else if (global.currentsuit == 2 && oControl.mod_monstersextreme != 0)
|
|
{
|
|
if(global.item[5] == 0)
|
|
global.playerhealth -= global.mod_monstersdrainVS * 4;
|
|
else
|
|
global.playerhealth -= global.mod_monstersdrainGS * 4;
|
|
} //added
|
|
|
|
|
|
if (global.playerhealth <= 0) with (oControl) event_user(1);
|
|
if (monster_drainfx == 0) {
|
|
sfx_loop(sndDrainLoop);
|
|
monster_drainfx = 1;
|
|
}
|
|
xVel *= 0.4;
|
|
} else monster_drainfx = 0;
|
|
if (queen_drain > 0) {
|
|
dash = 0;
|
|
speedboost = 0;
|
|
global.playerhealth -= 0.1;
|
|
if (global.playerhealth <= 0) with (oControl) event_user(1);
|
|
if (queen_drainfx == 0) {
|
|
sfx_loop(sndDrainLoop);
|
|
queen_drainfx = 1;
|
|
}
|
|
} else queen_drainfx = 0;
|
|
if (state != BALL && state != AIRBALL && state != SPIDERBALL && state != SUPERJUMP) setCollisionBounds(-6, -27, 6, 0);
|
|
if (state == BALL) setCollisionBounds(-6, -11, 6, 0);
|
|
if (state == SPIDERBALL || state == AIRBALL || state == WATERJET || state == KNOCKBACK1 || state == KNOCKBACK2 || (state == HURT || state == BRAKING || state == SJSTART || state == SJEND) && sjball == 1) setCollisionBounds(-6, -13, 6, 0);
|
|
if (state == SUPERJUMP && sjdir != 0 && sjball == 0) setCollisionBounds(-6, -22, 6, 0);
|
|
if (state == SUPERJUMP && (sjdir == 3 || sjdir == 4) && sjball == 0) setCollisionBounds(-6, -27, 6, 0);
|
|
if (state == SUPERJUMP && sjball == 1) setCollisionBounds(-6, -13, 6, 0);
|
|
mask_index = sMask1;
|
|
if (state == DUCKING) mask_index = sMask3;
|
|
if (state == BALL || state == AIRBALL || state == SPIDERBALL || state == WATERJET) mask_index = sMask4;
|
|
if (sjball == 1 && (state == SUPERJUMP || state == SJSTART || state == SJEND || state == BRAKING)) mask_index = sMask4;
|
|
if (state == JUMPING && vjump == 0 && dash > 0) {
|
|
if (xVel < -8) xVel = -8;
|
|
if (xVel > 8) xVel = 8;
|
|
}
|
|
if (y > global.waterlevel && global.waterlevel != 0) {
|
|
if (inwater == 0) {
|
|
if (abs(yVel) > 1) {
|
|
var splash = instance_create(x, global.waterlevel, oSplash); //added
|
|
splash.bubbles = true; //added
|
|
sfx_play(sndWaterSplash);
|
|
repeat (8 + floor(random(4))) {
|
|
bubble = instance_create(x, y + 12, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.hspeed = random_range(-1.8, 1.8);
|
|
bubble.vspeed = 0.3 + random(0.7);
|
|
}
|
|
}
|
|
if (global.currentsuit < 2) yVel *= 0.5;
|
|
}
|
|
sfx_stop(spinjump_sound);
|
|
SetSpinJumpSound();
|
|
}
|
|
inwater = 1;
|
|
} else {
|
|
if (inwater == 1) {
|
|
if (abs(yVel) > 1) {
|
|
instance_create(x, global.waterlevel, oSplash);
|
|
sfx_play(sndWaterExit);
|
|
}
|
|
sfx_stop(spinjump_sound);
|
|
SetSpinJumpSound();
|
|
}
|
|
inwater = 0;
|
|
} // if (y > global.waterlevel && global.waterlevel != 0) else
|
|
if (inwater && random(15) < 1 && fxtimer == 0) {
|
|
if (state == BALL || state == AIRBALL || state == SPIDERBALL || state == DUCKING) {
|
|
bubble = instance_create(x, y - 12, oLBubble);
|
|
} else bubble = instance_create(x, y - 32, oLBubble);
|
|
}
|
|
if (inwater) {
|
|
if (state == JUMPING && vjump == 0) {
|
|
if (global.screwattack == 0 && (global.currentsuit < 2 || global.currentsuit >= 2 && global.spacejump == 0)) {
|
|
if (fxtimer == 0 && random(4) < 1) {
|
|
bubble = instance_create(x, y - 16, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.alarm[0] = 60 + random(200);
|
|
bubble.direction = random(360);
|
|
bubble.speed = 0.2;
|
|
}
|
|
}
|
|
}
|
|
if (global.screwattack == 0 && global.currentsuit >= 2 && global.spacejump == 1) {
|
|
if (fxtimer == 0 && random(2) < 1) {
|
|
bubble = instance_create(x, y - 16, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.alarm[0] = 60 + random(200);
|
|
bubble.direction = random(360);
|
|
bubble.speed = 0.5;
|
|
}
|
|
}
|
|
}
|
|
if (global.screwattack == 1) {
|
|
if (fxtimer == 0) {
|
|
bubble = instance_create(x, y - 16, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.alarm[0] = 60 + random(120);
|
|
bubble.direction = random(360);
|
|
bubble.speed = 0.5;
|
|
}
|
|
}
|
|
}
|
|
} // if (state == JUMPING && vjump == 0)
|
|
if (state == SUPERJUMP && statetime == 0) {
|
|
if (sjdir == 0) {
|
|
repeat (10) {
|
|
bubble = instance_create(x + random_range(-8, 8), y, oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.alarm[0] = 60 + random(60);
|
|
bubble.direction = 90;
|
|
bubble.speed = 0.5 + random(1.5);
|
|
}
|
|
}
|
|
}
|
|
if (sjdir == 1 || sjdir == 3) {
|
|
repeat (10) {
|
|
bubble = instance_create(x, y - random(16), oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.alarm[0] = 60 + random(60);
|
|
bubble.direction = 180;
|
|
bubble.speed = 0.5 + random(1.5);
|
|
}
|
|
}
|
|
}
|
|
if (sjdir == 2 || sjdir == 4) {
|
|
repeat (10) {
|
|
bubble = instance_create(x, y - random(16), oLBubble);
|
|
if (instance_exists(bubble)) {
|
|
bubble.alarm[0] = 60 + random(60);
|
|
bubble.direction = 0;
|
|
bubble.speed = 0.5 + random(1.5);
|
|
}
|
|
}
|
|
}
|
|
} // if (state == SUPERJUMP && statetime == 0)
|
|
if (state == BRAKING && statetime < 60) {
|
|
if (fxtimer == 0) {
|
|
bubble = instance_create(x + random_range(-4, 4), y, oLBubble);
|
|
if (instance_exists(bubble)) bubble.alarm[0] = 60 + random(60);
|
|
}
|
|
}
|
|
} // if (inwater)
|
|
if (footstep == 0) {
|
|
if (state == RUNNING) {
|
|
if (abs(image_index) >= 4 && abs(image_index) < 4.9 || abs(image_index) >= 9 && abs(image_index) < 9.9) {
|
|
PlayFootstep(get_floor_material());
|
|
if (inwater == 0 && waterfall == 0 && monster_drain == 0) {
|
|
footstep = 5;
|
|
} else {
|
|
footstep = 10;
|
|
if (inwater) {
|
|
if (random(3) < 1) {
|
|
bubble = instance_create(x, y, oLBubble);
|
|
if (instance_exists(bubble)) bubble.alarm[0] = 60 + random(120);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!sfx_isplaying(spinjump_sound) && state == JUMPING && vjump == 0 && statetime >= 10) LoopSoundMono(spinjump_sound);
|
|
if (sfx_isplaying(spinjump_sound) && (state != JUMPING || state == JUMPING && vjump == 1)) sfx_stop(spinjump_sound);
|
|
if (sfx_isplaying(sndSBLoop) && dash == 0) sfx_stop(sndSBLoop);
|
|
if (sfx_isplaying(sndSBStart) && dash == 0) sfx_stop(sndSBStart);
|
|
if (charge == 0 && sfx_isplaying(sndSBChargeLoop)) sfx_stop(sndSBChargeLoop);
|
|
if (chargebeam > 0 && chargebeam < 0.03) sfx_play(sndCharge);
|
|
if (chargebeam > 0.97 && chargebeam < 1) {
|
|
LoopSoundMono(sndChargeLoop);
|
|
sfx_stop(sndCharge);
|
|
}
|
|
if (chargebeam == 0) {
|
|
sfx_stop(sndCharge);
|
|
sfx_stop(sndChargeLoop);
|
|
}
|
|
if ((oControl.hpalarm > 0) && (oControl.mod_lowhealthwarning > 0) && !sfx_isplaying(sndLowEnergyAlertLoop)) { LoopSoundMono(sndLowEnergyAlertLoop); }
|
|
if ((oControl.hpalarm == 0) || (oControl.mod_lowhealthwarning == 0)) { sfx_stop(sndLowEnergyAlertLoop); }
|
|
if (sfx_isplaying(sndSBallLoop) && (floor(sball) == 0)) sfx_stop(sndSBallLoop);
|
|
if (sfx_isplaying(sndLavaLoop) && (floor(burning) == 0)) sfx_stop(sndLavaLoop);
|
|
if (sfx_isplaying(sndPlantLoop) && (floor(plantdrainfx) == 0)) sfx_stop(sndPlantLoop);
|
|
if (sfx_isplaying(sndDrainLoop) && (floor(monster_drainfx) == 0) && (floor(queen_drainfx) == 0)) sfx_stop(sndDrainLoop);
|
|
if (dash > 0 && xVel == 0) dash = 0;
|
|
if (dash == 0) speedboost = 0;
|
|
if (justwalljumped > 0) justwalljumped -= 1;
|
|
if (noaimup > 0) noaimup -= 1;
|
|
if (novjump > 0) novjump -= 1;
|
|
if (nofire > 0) nofire -= 1;
|
|
if (nomorph > 0) nomorph -= 1;
|
|
if (mockball > 0) mockball -= 1;
|
|
if (fxtimer >= 0) fxtimer -= 1;
|
|
if (fxtimer == -1) fxtimer = 5;
|
|
if (fixedx > 0) fixedx -= 1;
|
|
if (fixedy > 0) fixedy -= 1;
|
|
if (dash > 0 && dash < 30 && state == RUNNING) dash += 1;
|
|
if (shinespark > 0) shinespark -= 1;
|
|
if (charge > 0) charge -= 1;
|
|
if (invincible > 0) invincible -= 1;
|
|
if (juststarted > 0) juststarted -= 1;
|
|
if (cmhurt > 0) cmhurt -= 1;
|
|
if (cmmorph > 0) cmmorph -= 1;
|
|
if (footstep > 0) footstep -= 1;
|
|
if (speedmultiresettimer > 0) {
|
|
speedmultiresettimer -= 1;
|
|
} else speedmultiplier = 1;
|
|
if (state == JUMPING) {
|
|
airtime += 1;
|
|
} else airtime = 0;
|
|
if (global.speedbooster && state == RUNNING && (kLeft > 0 || kRight > 0) && turning == 0) {
|
|
speedboost_steps += 1;
|
|
} else speedboost_steps = 0;
|
|
if (speedboost_steps > 0 && state != RUNNING) speedboost_steps = 0;
|
|
if (canrecover > 0) canrecover -= 1;
|
|
if (firing > 0) firing -= 1;
|
|
if (waterfall > 0) waterfall -= 1;
|
|
if (onfire > 0) onfire -= 1;
|
|
if (ballbounce > 0) ballbounce -= 1;
|
|
statetime += 1;
|
|
if (state != IDLE && state != SAVING && state != SAVINGFX && state != SAVINGSHIP && state != SAVINGSHIPFX) global.gametime += 1;
|