Compare commits
No commits in common. "fc5f9630bdce8eb79cd18aaeaea1668a140be2f5" and "21c800d772dcc655ab6c09fe524f54bf8ece3d13" have entirely different histories.
fc5f9630bd
...
21c800d772
15 changed files with 86 additions and 115 deletions
Binary file not shown.
Binary file not shown.
BIN
Replays/Rival.dat
Normal file
BIN
Replays/Rival.dat
Normal file
Binary file not shown.
|
@ -6,7 +6,6 @@ var letty_snow = load("res://BGM/Letty_Snow_-_Utsuho.mp3")
|
|||
var score_end = load("res://BGM/Score_End_-_Utsuho.mp3")
|
||||
|
||||
var player : AudioStreamPlayer
|
||||
var difficulty: String = "Easy"
|
||||
|
||||
|
||||
func _ready():
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -61,18 +61,6 @@ enum MapElemType {
|
|||
OOB_LOWER,
|
||||
}
|
||||
|
||||
const ELEM_TYPE_SLOPE = [
|
||||
2,
|
||||
0,
|
||||
4,
|
||||
1,
|
||||
1,
|
||||
3,
|
||||
3,
|
||||
2,
|
||||
2,
|
||||
]
|
||||
|
||||
enum SpriteClass {
|
||||
IDLE,
|
||||
WALK,
|
||||
|
@ -281,27 +269,3 @@ const SPAWN_DISTANCE = 20
|
|||
|
||||
# specialized constants
|
||||
const FLASH_CYCLE = 0.15
|
||||
|
||||
const SLOPE_SPEED = [
|
||||
0.0,
|
||||
0.0,
|
||||
3.5,
|
||||
7.3 * 1.118,
|
||||
9.2 * 1.414,
|
||||
]
|
||||
|
||||
const SLOPE_ACCEL = [
|
||||
0.0,
|
||||
0.0,
|
||||
1.0,
|
||||
2.2 * 1.118,
|
||||
3.4 * 1.414,
|
||||
]
|
||||
|
||||
const SLOPE_DECEL = [
|
||||
5.0 * 1.414,
|
||||
3.5 * 1.118,
|
||||
0.3,
|
||||
0.2,
|
||||
0.1
|
||||
]
|
||||
|
|
|
@ -108,7 +108,7 @@ func _process(delta):
|
|||
if !stage_finished:
|
||||
time_elapsed_in_race += delta
|
||||
# 1 grid unit = 2ft, 1 grid unit / s = 1.36 mph
|
||||
player_speed_mph = player.target_move_speed#player.h_speed * 1.36
|
||||
player_speed_mph = player.h_speed * 1.36
|
||||
|
||||
if not race_over and player.pos.x >= finish_x_pos:
|
||||
race_over = true
|
||||
|
@ -192,7 +192,7 @@ func handle_player_input():
|
|||
|
||||
if input_table[Constants.PlayerInput.GBA_A][I_T_PRESSED]:
|
||||
if (player.get_current_action() == Constants.UnitCurrentAction.JUMPING
|
||||
or ((player.get_current_action() == Constants.UnitCurrentAction.IDLE)
|
||||
or (player.get_current_action() == Constants.UnitCurrentAction.IDLE
|
||||
and input_table[Constants.PlayerInput.GBA_A][I_T_JUST_PRESSED])):
|
||||
if player.unit_conditions[Constants.UnitCondition.IS_ON_GROUND] or player.get_current_action() == Constants.UnitCurrentAction.JUMPING:
|
||||
player.set_action(Constants.ActionType.JUMP)
|
||||
|
|
|
@ -2,7 +2,7 @@ extends Node
|
|||
class_name PlayerRecorder
|
||||
|
||||
var replay: ReplayRecording
|
||||
var this_frame: int = 0
|
||||
var this_frame: bool = true
|
||||
var sprite: int = 0
|
||||
var player: Node
|
||||
var scene: Node
|
||||
|
@ -20,15 +20,15 @@ func _ready():
|
|||
player.recorder = self
|
||||
scene = player.get_parent()
|
||||
|
||||
func _physics_process(_delta):
|
||||
if this_frame == 0:
|
||||
this_frame = 1
|
||||
func _process(_delta):
|
||||
if this_frame:
|
||||
this_frame = false
|
||||
replay.positions.append(player.pos)
|
||||
replay.sprites.append(sprite)
|
||||
replay.frames += 1
|
||||
|
||||
else:
|
||||
this_frame -= 1
|
||||
this_frame = true
|
||||
|
||||
func save():
|
||||
replay.save_to_uri(save_to)
|
||||
|
|
|
@ -160,8 +160,10 @@ func jump():
|
|||
v_speed = max(Constants.UNIT_TYPE_JUMP_SPEEDS[unit_type], v_speed)
|
||||
else:
|
||||
# airborne
|
||||
print("airjump")
|
||||
print(v_speed)
|
||||
v_speed = max(Constants.UNIT_TYPE_JUMP_SPEEDS[unit_type], move_toward(v_speed, Constants.UNIT_TYPE_JUMP_SPEEDS[unit_type], get_process_delta_time() * Constants.GRAVITY))
|
||||
|
||||
print(v_speed)
|
||||
set_unit_condition(Constants.UnitCondition.IS_ON_GROUND, false)
|
||||
if get_current_action() == Constants.UnitCurrentAction.JUMPING and v_speed > 0:
|
||||
set_sprite(Constants.SpriteClass.JUMP, 0)
|
||||
|
|
|
@ -5,13 +5,11 @@ class_name DownhillAutoscrollerPlayer
|
|||
export var min_speed : float = 3
|
||||
export var max_speed : float = 11
|
||||
export var player_initiated_acceleration : float = 5
|
||||
export var boost_per_second : float = 4 / 1.36 # 6 mph
|
||||
export var boost_per_second : float = 6 / 1.36 # 6 mph
|
||||
|
||||
var last_contacted_map_elem_type : int = Constants.MapElemType.SQUARE
|
||||
|
||||
var boost : float = 0 # to movement speed
|
||||
var boost_effect: float = 0
|
||||
var instant_accel: bool = false
|
||||
|
||||
var respawn_pos : Vector2
|
||||
|
||||
|
@ -96,59 +94,77 @@ func handle_idle():
|
|||
if boost == 0:
|
||||
.handle_idle()
|
||||
|
||||
func handle_speed(delta):
|
||||
if get_current_action() == Constants.UnitCurrentAction.RECOILING:
|
||||
target_move_speed = min_speed
|
||||
return
|
||||
|
||||
if scene.input_table[Constants.PlayerInput.LEFT][scene.I_T_PRESSED]:
|
||||
target_move_speed = move_toward(target_move_speed, min_speed, player_initiated_acceleration * delta)
|
||||
boost_effect = 0.0
|
||||
return
|
||||
|
||||
var slope: int = Constants.ELEM_TYPE_SLOPE[last_contacted_map_elem_type]
|
||||
|
||||
var speed_limit: float = Constants.SLOPE_SPEED[slope]
|
||||
var accel: float = player_initiated_acceleration
|
||||
|
||||
if not get_condition(Constants.UnitCondition.IS_ON_GROUND, true):
|
||||
speed_limit = target_move_speed
|
||||
if scene.input_table[Constants.PlayerInput.RIGHT][scene.I_T_PRESSED] and speed_limit < Constants.UNIT_TYPE_MOVE_SPEEDS[unit_type]:
|
||||
speed_limit = Constants.UNIT_TYPE_MOVE_SPEEDS[unit_type]
|
||||
|
||||
speed_limit = max(min_speed, speed_limit)
|
||||
|
||||
if get_condition(Constants.UnitCondition.IS_ON_GROUND, true):
|
||||
if scene.input_table[Constants.PlayerInput.RIGHT][scene.I_T_PRESSED]:
|
||||
speed_limit += 1.0
|
||||
|
||||
if boost_effect > 0:
|
||||
speed_limit += boost_effect
|
||||
|
||||
if target_move_speed < boost_effect:
|
||||
boost_effect = 0.0
|
||||
|
||||
elif slope < 2:
|
||||
boost_effect -= delta
|
||||
|
||||
accel = (Constants.SLOPE_ACCEL if target_move_speed < speed_limit else Constants.SLOPE_DECEL)[slope]
|
||||
|
||||
target_move_speed = move_toward(target_move_speed, speed_limit, accel * delta)
|
||||
if target_move_speed > speed_limit + 4.0:
|
||||
target_move_speed -= speed_limit
|
||||
target_move_speed *= pow(0.5, delta)
|
||||
target_move_speed += speed_limit
|
||||
|
||||
func process_unit(delta, time_elapsed : float):
|
||||
# always be movin'
|
||||
facing = Constants.Direction.RIGHT
|
||||
actions[Constants.ActionType.MOVE] = true
|
||||
|
||||
handle_speed(delta)
|
||||
# Fine tune the player's speed
|
||||
|
||||
if boost_effect > 0:
|
||||
boost_effect -= delta
|
||||
print(last_contacted_map_elem_type)
|
||||
|
||||
if get_current_action() == Constants.UnitCurrentAction.RECOILING:
|
||||
target_move_speed = min_speed
|
||||
else:
|
||||
# override player input so that leftward movement is deceleration,
|
||||
# right movement is acceleration
|
||||
if scene.input_table[Constants.PlayerInput.LEFT][scene.I_T_PRESSED]:
|
||||
target_move_speed = move_toward(target_move_speed, min_speed, player_initiated_acceleration * delta)
|
||||
else:
|
||||
if not get_condition(Constants.UnitCondition.IS_ON_GROUND, true):
|
||||
if (target_move_speed < Constants.UNIT_TYPE_MOVE_SPEEDS[unit_type]
|
||||
and scene.input_table[Constants.PlayerInput.RIGHT][scene.I_T_PRESSED]):
|
||||
target_move_speed = move_toward(target_move_speed, Constants.UNIT_TYPE_MOVE_SPEEDS[unit_type], player_initiated_acceleration * delta)
|
||||
if target_move_speed > max_speed:
|
||||
target_move_speed = move_toward(target_move_speed, max_speed, player_initiated_acceleration * delta)
|
||||
else:
|
||||
# shallow slope: arctan(.5) = 27 degrees, sin(27) = 0.45
|
||||
# steep slope: sin(45) = 0.71
|
||||
var ground_influenced_acceleration = 0
|
||||
var is_decel : bool = false
|
||||
if (last_contacted_map_elem_type == Constants.MapElemType.SMALL_SLOPE_RIGHT_1
|
||||
or last_contacted_map_elem_type == Constants.MapElemType.SMALL_SLOPE_RIGHT_2
|
||||
or last_contacted_map_elem_type == Constants.MapElemType.SMALL_SLOPE_LEFT_1
|
||||
or last_contacted_map_elem_type == Constants.MapElemType.SMALL_SLOPE_LEFT_2):
|
||||
ground_influenced_acceleration = Constants.GRAVITY * 0.45
|
||||
if (last_contacted_map_elem_type == Constants.MapElemType.SMALL_SLOPE_LEFT_1
|
||||
or last_contacted_map_elem_type == Constants.MapElemType.SMALL_SLOPE_LEFT_2):
|
||||
is_decel = true
|
||||
elif (last_contacted_map_elem_type == Constants.MapElemType.SLOPE_RIGHT
|
||||
or last_contacted_map_elem_type == Constants.MapElemType.SLOPE_LEFT):
|
||||
ground_influenced_acceleration = Constants.GRAVITY * 0.71
|
||||
if last_contacted_map_elem_type == Constants.MapElemType.SLOPE_LEFT:
|
||||
is_decel = true
|
||||
if is_decel or ground_influenced_acceleration == 0:
|
||||
var end_speed
|
||||
if ground_influenced_acceleration == 0:
|
||||
# flat ground
|
||||
if scene.input_table[Constants.PlayerInput.RIGHT][scene.I_T_PRESSED]:
|
||||
end_speed = max(min(target_move_speed, max_speed), Constants.UNIT_TYPE_MOVE_SPEEDS[unit_type])
|
||||
else:
|
||||
end_speed = min(target_move_speed, max_speed)
|
||||
else:
|
||||
# incline
|
||||
if scene.input_table[Constants.PlayerInput.RIGHT][scene.I_T_PRESSED]:
|
||||
end_speed = Constants.UNIT_TYPE_MOVE_SPEEDS[unit_type]
|
||||
else:
|
||||
end_speed = min_speed
|
||||
if target_move_speed < end_speed:
|
||||
target_move_speed = move_toward(target_move_speed, end_speed, player_initiated_acceleration * delta)
|
||||
else:
|
||||
if ground_influenced_acceleration > 0:
|
||||
target_move_speed = move_toward(target_move_speed, end_speed, ground_influenced_acceleration * delta)
|
||||
else:
|
||||
target_move_speed = move_toward(target_move_speed, end_speed, player_initiated_acceleration * delta)
|
||||
else:
|
||||
var acceleration = ground_influenced_acceleration
|
||||
if scene.input_table[Constants.PlayerInput.RIGHT][scene.I_T_PRESSED]:
|
||||
acceleration = max(acceleration, player_initiated_acceleration)
|
||||
if target_move_speed < max_speed:
|
||||
target_move_speed = move_toward(target_move_speed, max_speed, acceleration * delta)
|
||||
else:
|
||||
target_move_speed = move_toward(target_move_speed, max_speed, player_initiated_acceleration * delta)
|
||||
|
||||
.process_unit(delta, time_elapsed)
|
||||
|
||||
# treat all collisions as right-side collisions
|
||||
|
@ -188,8 +204,8 @@ func landed():
|
|||
return
|
||||
if boost > 0:
|
||||
scene.find_node("CanvasLayer").flash_boost = true
|
||||
boost_effect += boost
|
||||
target_move_speed += boost
|
||||
h_speed += boost
|
||||
target_move_speed = h_speed
|
||||
boost = 0
|
||||
|
||||
func react(delta):
|
||||
|
@ -233,13 +249,7 @@ func react(delta):
|
|||
|
||||
func respawn_from_pit():
|
||||
pos = respawn_pos
|
||||
#hit(Constants.Direction.RIGHT)
|
||||
set_unit_condition_with_timer(Constants.UnitCondition.IS_INVINCIBLE)
|
||||
start_flash()
|
||||
get_node("SpinningSprite").visible = false
|
||||
get_node("SpinningSprite").rotation = 0
|
||||
hit_audiostream_player.play()
|
||||
hit(Constants.Direction.RIGHT)
|
||||
boost = 0
|
||||
boost_effect = 0
|
||||
get_node("Camera2D").make_current()
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ export var replay_file: String
|
|||
func _ready():
|
||||
._ready()
|
||||
replay = ReplayRecording.new()
|
||||
replay.load_from_uri(replay_file % MusicController.difficulty)
|
||||
replay.load_from_uri(replay_file)
|
||||
|
||||
|
||||
func process_unit(delta : float, time_elapsed : float):
|
||||
|
|
|
@ -15,7 +15,6 @@ extents = Vector2( 9, 34 )
|
|||
z_index = 1
|
||||
collision_layer = 0
|
||||
script = ExtResource( 1 )
|
||||
unit_type = 1
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2( 0, -36 )
|
||||
|
|
|
@ -14,7 +14,6 @@ extents = Vector2( 9, 34 )
|
|||
z_index = 1
|
||||
collision_layer = 0
|
||||
script = ExtResource( 1 )
|
||||
unit_type = 1
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2( 0, -36 )
|
||||
|
|
|
@ -63,7 +63,7 @@ _global_script_class_icons={
|
|||
[application]
|
||||
|
||||
config/name="Moriya's Wanton Winter Wager"
|
||||
run/main_scene="res://Scenes/DownhillAutoscroller2.tscn"
|
||||
run/main_scene="res://Scenes/DownhillAutoscroller.tscn"
|
||||
config/icon="res://icon.png"
|
||||
|
||||
[autoload]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue