diff --git a/RabiClone_0.0a.zip b/RabiClone_0.0a.zip index 1383cc9..ce57fc9 100644 Binary files a/RabiClone_0.0a.zip and b/RabiClone_0.0a.zip differ diff --git a/bin/RabiClone.jar b/bin/RabiClone.jar index 162aec0..04467c2 100644 Binary files a/bin/RabiClone.jar and b/bin/RabiClone.jar differ diff --git a/src/sig/objects/Player.java b/src/sig/objects/Player.java index 83ca59e..0df9e52 100644 --- a/src/sig/objects/Player.java +++ b/src/sig/objects/Player.java @@ -20,10 +20,11 @@ public class Player extends PhysicsObject{ final static long jump_fall_AnimationWaitTime = TimeUtils.millisToNanos(200); final static long slide_AnimationWaitTime = TimeUtils.millisToNanos(100); final static long slide_duration = TimeUtils.millisToNanos(700); + final static long bellySlideDuration = TimeUtils.millisToNanos(1000); final static long weaponSwingAnimationTime = TimeUtils.millisToNanos(333); final static long weaponComboWaitTime = TimeUtils.millisToNanos(60); - final static double finalComboJumpBackSpeedX = -150; - final static double finalComboJumpBackSpeedY = -96; + final static double finalComboJumpBackSpeedX = -185; + final static double finalComboJumpBackSpeedY = -110; long weaponSwingTime = 0; @@ -40,6 +41,7 @@ public class Player extends PhysicsObject{ long jump_slide_fall_StartAnimationTimer = -1; long slide_time = -1; long jumpHoldTime = TimeUtils.millisToNanos(150); + long bellySlideTime = -1; final static long slideBufferTime = TimeUtils.millisToNanos(200); long slidePressed = -1; @@ -100,7 +102,7 @@ public class Player extends PhysicsObject{ } break; case IDLE: - if (RabiClone.TIME - slidePressed <= slideBufferTime) { + if (RabiClone.TIME - slidePressed <= slideBufferTime && state!=State.BELLYSLIDE) { performSlide(); break; } @@ -121,9 +123,6 @@ public class Player extends PhysicsObject{ } break; case JUMP: - if (prvState == State.SLIDE) { - // jump_velocity=-500; - } if (jump_slide_fall_StartAnimationTimer == -1) { jump_slide_fall_StartAnimationTimer = RabiClone.TIME; setAnimatedSpr(Sprite.ERINA_JUMP_RISE1); @@ -162,6 +161,28 @@ public class Player extends PhysicsObject{ } } break; + case BELLYSLIDE:{ + if (RabiClone.TIME - bellySlideTime > bellySlideDuration) { + if (KeyHeld(Action.MOVE_LEFT)) { + facing_direction = LEFT; + } + if (KeyHeld(Action.MOVE_RIGHT)) { + facing_direction = RIGHT; + } + state = State.IDLE; + } + if (KeyHeld(Action.MOVE_LEFT) && !KeyHeld(Action.MOVE_RIGHT)) { + if (facing_direction == LEFT && x_velocity > -sliding_velocity * 1.5 || + facing_direction == RIGHT && x_velocity > sliding_velocity * 0.5) { + x_velocity -= sliding_acceleration * updateMult; + } + } else if (KeyHeld(Action.MOVE_RIGHT) && !KeyHeld(Action.MOVE_LEFT)) { + if (facing_direction == LEFT && x_velocity < -sliding_velocity * 0.5 || + facing_direction == RIGHT && x_velocity < sliding_velocity * 1.5) { + x_velocity += sliding_acceleration * updateMult; + } + } + }break; case STAGGER: break; case UNCONTROLLABLE: @@ -183,7 +204,7 @@ public class Player extends PhysicsObject{ spacebarPressed = 0; spacebarReleased = true; } - if (state != State.SLIDE) { + if (state != State.SLIDE&&state!=State.BELLYSLIDE) { if ((a == Action.MOVE_LEFT) && (KeyHeld(Action.MOVE_RIGHT))) { facing_direction = RIGHT; } else if ((a == Action.MOVE_RIGHT) && (KeyHeld(Action.MOVE_LEFT))) { @@ -243,6 +264,11 @@ public class Player extends PhysicsObject{ default: break; } + if (a==Action.FALL&&(state==State.JUMP||state==State.FALLING)) { + state=State.BELLYSLIDE; + y_velocity=y_velocity_limit; + x_velocity=60*(facing_direction?1:-1); + } else if (a == Action.ATTACK&&(state==State.IDLE||state==State.FALLING||state==State.JUMP)&&(RabiClone.TIME-weaponSwingTime>=weaponSwingAnimationTime)) { RabiClone.OBJ.add(new KnifeSwing(Sprite.KNIFE_SWING,40,RabiClone.p,this)); state=State.ATTACK; @@ -259,7 +285,7 @@ public class Player extends PhysicsObject{ // System.out.println("Jump"); } } - if (state != State.SLIDE) { + if (state != State.SLIDE&&state!=State.BELLYSLIDE) { switch (a) { case MOVE_LEFT: facing_direction = LEFT; diff --git a/src/sig/objects/actor/PhysicsObject.java b/src/sig/objects/actor/PhysicsObject.java index 81b8c58..9dd23b4 100644 --- a/src/sig/objects/actor/PhysicsObject.java +++ b/src/sig/objects/actor/PhysicsObject.java @@ -12,6 +12,7 @@ public abstract class PhysicsObject extends AnimatedObject implements PhysicsObj final public static double NORMAL_FRICTION = 6400; final public static double NORMAL_JUMP_VELOCITY = -300; final public static double WALKING_SPEED_LIMIT = 164; + final public static double FALLING_SPEED_LIMIT = 500; public State state = State.IDLE; public double x_velocity; @@ -128,9 +129,12 @@ public abstract class PhysicsObject extends AnimatedObject implements PhysicsObj if (!groundCollision){ this.setY(this.getY()+displacement_y); y_acceleration = gravity; - if(y_velocity>0 && state!=State.SLIDE){ + if(y_velocity>0 && state!=State.SLIDE&&state!=State.BELLYSLIDE){ state = State.FALLING; } + if (y_velocity>FALLING_SPEED_LIMIT&&state!=State.BELLYSLIDE) { + y_velocity=FALLING_SPEED_LIMIT; + } if (!sideCollision) { handleKeyboardMovement(updateMult, right-left, horizontal_air_friction, horizontal_air_drag); this.setX(this.getX()+displacement_x); diff --git a/src/sig/objects/actor/State.java b/src/sig/objects/actor/State.java index 88068db..270ff40 100644 --- a/src/sig/objects/actor/State.java +++ b/src/sig/objects/actor/State.java @@ -3,6 +3,7 @@ package sig.objects.actor; public enum State{ IDLE, SLIDE, + BELLYSLIDE, JUMP, FALLING, ATTACK,