From 12a7a3d76a69257727224777d489fd59caca0f08 Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Tue, 3 Oct 2023 21:16:46 +0200 Subject: [PATCH] fix: better vaccum caterpillar sprites, consistent caterpillar behaviour --- assets/enemy/Caterpilllar.aseprite | Bin 1164 -> 1213 bytes assets/enemy/Caterpilllar.png | Bin 0 -> 692 bytes assets/enemy/Caterpilllar.png.import | 35 ++ assets/enemy/VacuumRobot.aseprite | Bin 1392 -> 1469 bytes assets/enemy/VacuumRobot.png | Bin 604 -> 703 bytes project.godot | 6 + src/Actors/Blobby/Blobby.gd | 818 +++++++++++++-------------- src/Actors/Blobby/Blobby.tscn | 2 +- src/Actors/Enemies/Caterpillar.gd | 1 + src/Actors/Enemies/Caterpillar.tscn | 39 +- src/Actors/Enemies/DartingEnemy.gd | 43 +- src/Actors/Enemies/Enemy.gd | 8 +- src/Levels/Level 0.4.tscn | 6 +- src/Levels/Level 0.5.tscn | 2 +- src/Levels/Level 0.6.tscn | 3 - src/Levels/Level 1.tscn | 6 +- src/Levels/Level 2.tscn | 3 - src/Levels/Level 4.tscn | 6 +- src/Platforms/FlyingLaserCutter.gd | 9 +- src/Platforms/FlyingLaserCutter.tscn | 4 + 20 files changed, 549 insertions(+), 442 deletions(-) create mode 100644 assets/enemy/Caterpilllar.png create mode 100644 assets/enemy/Caterpilllar.png.import diff --git a/assets/enemy/Caterpilllar.aseprite b/assets/enemy/Caterpilllar.aseprite index 6f12f58b4e54de2cd878a400d00a42830fd45611..778f9d74524aef7d44db805a1d010e6049888b57 100644 GIT binary patch delta 359 zcmV-t0hs=b3B3scy^#Tb0X?yS=K_CK0RR96AOHXW01p8F0ssI20000003ZMn0C=3m zRWS+zK@7a=5KFOAivw-7vl8wJ7IwZs@Cm*~@DJAd6yKnY7M_eSM=m700Sgzx-fkw7 zT-YQ<;jckeHIS6fk`y-KF3YVk!{egaUYD)lEV0rS`iOsRlj0p6>NW=KI8T4-c_(I# z;r;V8cJpfSPIv1LFZ|#RIttFXr%vk01A+Z(-*02Uj&q9F;@lrH* zGzNOWG~ zDICu9CwngYfbM}FCv#}wWRKSOW!VeQKiMN1RxtVTZQnTOl^8s_? F9KjHCv4#Ku delta 310 zcmV-60m=To35*E=jFAC<0SvK$=K_Bu0RR96AOHXW01yEG0ssI20000003ZMm0C=3G zRWS|%F$}vmAST3c11oGyNcRXfzQSvG3cQJ(LmpBY%SkIyDLS=r9JiOW)0B_RJg>0I z=d8jO>AKvC**;F|?R9R3Ib%5%{t*otQ}OQZOVfZa=KJONqggQ{XXw| z=l$&d2gjTJtIQwyQJ2*oxECT`^E(XVB6s+?{-WO^M)d@D^iP$aG1dO{E`c76&CWKf ztL%JTO}O6g_0(uzRXFYY?A|7I{K}c(m?vAW?tiWcHof~D4tm^O&hew8_og~b_4a0Y IzG{A=OY#GjIsgCw diff --git a/assets/enemy/Caterpilllar.png b/assets/enemy/Caterpilllar.png new file mode 100644 index 0000000000000000000000000000000000000000..11a9eb85869d2e8fb7dfce41c753472592baa2b5 GIT binary patch literal 692 zcmV;l0!#ggP)Px%Zb?KzR9J=WR>5o9P#pdeoY8>JX0vn@X2@6;!?o8GQp>j2e-K@gn2fBqt^@?+y zI;DCVjTb*x3XuKGOZ7BL^)%#a(iLOB(M}2ny2Z_-ofOne!o`hMGCW_dCZQ2RHA1Mh zw@rmRpbG7mi<~U^H5sr)CmR3R&Dd81uFGMG9712LLFAECBHMEI&rH zlL7!tKlLyu4?&9?b^+GjHkFzNw)QvI3IkXX7r|=lFnbfO<1E5iq}iKbP#!{J=D9CB zzQPPfqvaA0T7*caUz^)Ku(iJ#$Q-b@-t0|$IZ7cLjQ9LZk{`Xj#~bJ5%`1HU@cB;h zAh?UCW)k*Ea*|a|1-(8DWbm&LasGMy`kj!(nus;y-*DE&Wp+mWglG9No|SG~-TWsU zw#MSDNk`qTBrmF0uB6LiS7^cpjvv->*j*ns;!sa-VfH5I*X96#$e=t#?kIuFm-e8z z-z2Na9s626y~Xrg7aMfkW^877ix?f-!%S)#b^)}wf$#W++{Ya#1@ZG^$7$&-%^{bUUR+!B6wfPLB9#seG7>4 a0pJ&cuuNyVX#E!e0000VD_+x8vR`r8IqA+WynaKLgQ>-4H?p5$eudcyqtWd|HyatFy9rqjvY8+n z=3-|;VT{Y(v)>>62LVF%;tFeW{R^@egz4>HV#67ie~HOMz> zIgDZX7h7JUW_g94hp?5CFpMuh4500|6UU7`mprl=ATzPq zNvwUu*h#FtAU-kvgJFDPxa>u?6Xr);_D#C83$LG$#!GrXfQ41zY$= zqT4}AUO~4HIb3n&7iyM6==lU!d5bT<;>*)0G7 delta 402 zcmV;D0d4-h3-Ag7aFGFj0_+2^g60AN1e0k4Hh;tH#bu|Bjm>{rVr091WpVw7(J=Yk z(%%1GAxUtW9E@xR%v@x5FlhPuCON8zaV=-nBM*+Hk@(!mzX?6 zNi({_mzM~IH8t`Oau~z%FRr{qt?~*z58)~&3FT*E?L;>Zy_`h$H%JUrcfiylvx&v% z`jdbJ7Z#>gvSkDT008>&0RUtG00031008s=ldS|xe|v=_!D(_ZvKb&VvDryY`-rs{ z#HXfx*z85N6Xr);_D#C8i)cHrsfC$|>{k$t?k0R@fW(k7K6}y4M79%GxZ*PN?Dt3i zL4c5*xWbnle}e1;VS4(L*s#UtPki}=k~D-bzu*gBYUC5-aK)Ejs8tT3=M!AzEx!Cp wtbH(hDDaiHFaWA^VD`e;q+pO9n0>_7(c0SD|3w6Z!5G9QMh~g_0jY5`Tw_|q_W%F@ diff --git a/assets/enemy/VacuumRobot.png b/assets/enemy/VacuumRobot.png index 77d2e2353a9b403370bded9e2808597d84cd4f7d..992e84ee5cac6ae0cc687a5fa3245008c42e9ba0 100644 GIT binary patch delta 666 zcmV;L0%iT&1iuB4F@JeUL_t(&f$f*SYui8+$G@^;SvDC0NtTpMUJ9Z^QX{aVjzt-~ zWJ{+)$zi?B3(nTXL$*+AI}rL~=#nLqN&bT3*b>QgNbh=gI#~*}WJ>P~ zhV$w9K6mfE(|ZQAw6wIew6wIew6wG`l;?Tmzvb)0FHkanNq=SZetkWaO@7$kPGpxQ zU+Dk<*eMj|3LgXkPES9<_a{aY`>gn(&6uW@YKq1=AZz{-0Qk)^G23IqZ5Kv*7btkOTfiAM3MFW#_H7*_)4&8H0!+W>8Xo;luC?$+_GkdNni#C2UZ_M2rQ zH$Ss9Z+=oPlWp5%ZDp0Lt*jE;wjaE}zw-NEdJ|^o6w@>9+5i9m07*qoM6N<$f*nmo AlK=n! delta 566 zcmV-60?GZq1>6LXF@F|GL_t(&f$f*SOM*cd$G@+rLob9-LC_>GL~s!GZsO}A#Ou=F zR%>I~-k;zfP>n4Gx;3=q(xTC(AqXLeLj=u&5;(`B6BD_B;3cB6cSV)q0wk;K>(tj`P002nGVxh{PheH5B zrBX3u;#K)4l5reop;NS0t4-|y)&3{|e4nn+`1Qc}K3$>N=IF9*#Q zd1b96LF45fyeob^2<(hS`FX|(&{BbBu3kfvPfMbDwg=<*GH~`S+Rx5{i1#t9-XLr_ z0AF4Esl3l6LVtyyB?62_Kijk?3b5pgN77P0majA0v_VS+-&*%ZUxlCDXQF^NA~sex zw|!H_E08N5;qjt8Rl@#%yeRw1`051E`)mtmfl9wegsns*pGJCX2j|wo%s94AD@g+5 zmf?@c1_n|8dY>61+puN$qq2b_oIrH~K+WVg4-;wx53sOe8={1v;$W;INZHzuyM{n5H@YmW3^2nkF8sDq@)v z;T2ef>o2-AOuy_abPOSct|!*$dSZ1`zz&t0A^blv|1rx>;M1&07*qoM6N<$ Eg1clBQvd(} diff --git a/project.godot b/project.godot index f996543..185241d 100644 --- a/project.godot +++ b/project.godot @@ -9,6 +9,11 @@ config_version=4 _global_script_classes=[ { +"base": "AudioStreamPlayer", +"class": "ACVoiceBox", +"language": "GDScript", +"path": "res://addons/ACVoicebox/ACVoicebox.gd" +}, { "base": "KinematicBody2D", "class": "Actor", "language": "GDScript", @@ -90,6 +95,7 @@ _global_script_classes=[ { "path": "res://src/StateMachines/StateMachine.gd" } ] _global_script_class_icons={ +"ACVoiceBox": "", "Actor": "", "AudibleButton": "", "AudibleCheckbox": "", diff --git a/src/Actors/Blobby/Blobby.gd b/src/Actors/Blobby/Blobby.gd index f69a6b9..ffb9c48 100644 --- a/src/Actors/Blobby/Blobby.gd +++ b/src/Actors/Blobby/Blobby.gd @@ -28,489 +28,489 @@ var shielded = false func execute_movement() -> void: - if level_state.is_dead: - return - var snap = Vector2.DOWN * 128 - var center_floor_rot = 0 - var floor_rot = 0 - var onfloor = is_on_floor() + if level_state.is_dead: + return + var snap = Vector2.DOWN * 128 + var center_floor_rot = 0 + var floor_rot = 0 + var onfloor = is_on_floor() - # get rotation of floor, compare collided floor with floor under center - if onfloor: - # TODO: Problem when correctly rotating? - center_floor_rot = $SlopeRaycast.get_collision_normal().rotated(PI / 2).angle() - floor_rot = get_floor_normal().rotated(PI / 2).angle() - if abs(center_floor_rot) > PI / 4 + 0.1: - center_floor_rot = floor_rot - # snap when on slopes - if (abs(floor_rot) > 0.1 || abs(center_floor_rot) > 0.1) && snap_possible: - velocity = move_and_slide_with_snap(velocity.rotated(floor_rot), snap, FLOOR_NORMAL, true) - # normal slide on flat floor - else: - velocity = move_and_slide(velocity.rotated(floor_rot), FLOOR_NORMAL) - rotation = 0 - if ( - $SlopeRaycastLeft.is_colliding() - && $SlopeRaycastRight.is_colliding() - && $SlopeRaycast.is_colliding() - ): - rotation = calculate_slope_rotation(onfloor) - # rotate related to floor slope - # Convert velocity back to local space. - # TODO: Downward velocity should be increased by gravity - velocity = velocity.rotated(-floor_rot) if snap_possible else velocity + # get rotation of floor, compare collided floor with floor under center + if onfloor: + # TODO: Problem when correctly rotating? + center_floor_rot = $SlopeRaycast.get_collision_normal().rotated(PI / 2).angle() + floor_rot = get_floor_normal().rotated(PI / 2).angle() + if abs(center_floor_rot) > PI / 4 + 0.1: + center_floor_rot = floor_rot + # snap when on slopes + if (abs(floor_rot) > 0.1 || abs(center_floor_rot) > 0.1) && snap_possible: + velocity = move_and_slide_with_snap(velocity.rotated(floor_rot), snap, FLOOR_NORMAL, true) + # normal slide on flat floor + else: + velocity = move_and_slide(velocity.rotated(floor_rot), FLOOR_NORMAL) + rotation = 0 + if ( + $SlopeRaycastLeft.is_colliding() + && $SlopeRaycastRight.is_colliding() + && $SlopeRaycast.is_colliding() + ): + rotation = calculate_slope_rotation(onfloor) + # rotate related to floor slope + # Convert velocity back to local space. + # TODO: Downward velocity should be increased by gravity + velocity = velocity.rotated(-floor_rot) if snap_possible else velocity func calculate_duck_velocity(linear_velocity: Vector2, delta: float, direction: Vector2) -> Vector2: - var state = player_state_machine.state - var out_vel := linear_velocity - var velocity_direction = 1.0 - if velocity.x < 0: - velocity_direction = -1.0 + var state = player_state_machine.state + var out_vel := linear_velocity + var velocity_direction = 1.0 + if velocity.x < 0: + velocity_direction = -1.0 - # TODO Improve this to separate crawling(slow) and sliding - var deceleration_force = calculate_deceleration_force(_gravity, mass) * 0.333 + # TODO Improve this to separate crawling(slow) and sliding + var deceleration_force = calculate_deceleration_force(_gravity, mass) * 0.333 - # Slowing down movement when not controlling direction - if is_equal_approx(direction.x, 0): - # TODO Handle Deadzones - out_vel.x = PhysicsFunc.two_step_euler( - out_vel.x, deceleration_force * -1 * velocity_direction, mass, delta - ) - if abs(out_vel.x) > abs(velocity.x): - out_vel.x = 0 - else: - # Reversing movement - # When turning the opposite direction, friction is added to the opposite acceleration movement - var reverse_move = is_reversing_horizontal_movement(direction) - if reverse_move: - # TODO dont put constants in here - out_vel.x = PhysicsFunc.two_step_euler( - out_vel.x, deceleration_force * -3.42 * velocity_direction, mass, delta - ) - # Normal movement - if abs(velocity.x) < max_velocity[state]: - out_vel.x = PhysicsFunc.two_step_euler( - out_vel.x, (acceleration_force[state].x) * direction.x, mass, delta - ) - elif !reverse_move: - out_vel.x = max_velocity[state] * direction.x - # TODO is_on_dropThrough does the action, is that ok? yEs, MaAsTeR-ChAn - # TODO Drop Through coyote time? - if Input.is_action_just_pressed("jump") && is_on_dropThrough(): - return Vector2(out_vel.x, _gravity * delta) - # Jumping when grounded or jump is buffered - if Input.is_action_just_pressed("jump") || (jump_buffer_filled && is_on_floor()) || stomping: - snap_possible = false - return calculate_jump_velocity(velocity, delta, direction) + # Slowing down movement when not controlling direction + if is_equal_approx(direction.x, 0): + # TODO Handle Deadzones + out_vel.x = PhysicsFunc.two_step_euler( + out_vel.x, deceleration_force * -1 * velocity_direction, mass, delta + ) + if abs(out_vel.x) > abs(velocity.x): + out_vel.x = 0 + else: + # Reversing movement + # When turning the opposite direction, friction is added to the opposite acceleration movement + var reverse_move = is_reversing_horizontal_movement(direction) + if reverse_move: + # TODO dont put constants in here + out_vel.x = PhysicsFunc.two_step_euler( + out_vel.x, deceleration_force * -3.42 * velocity_direction, mass, delta + ) + # Normal movement + if abs(velocity.x) < max_velocity[state]: + out_vel.x = PhysicsFunc.two_step_euler( + out_vel.x, (acceleration_force[state].x) * direction.x, mass, delta + ) + elif !reverse_move: + out_vel.x = max_velocity[state] * direction.x + # TODO is_on_dropThrough does the action, is that ok? yEs, MaAsTeR-ChAn + # TODO Drop Through coyote time? + if Input.is_action_just_pressed("jump") && is_on_dropThrough(): + return Vector2(out_vel.x, _gravity * delta) + # Jumping when grounded or jump is buffered + if Input.is_action_just_pressed("jump") || (jump_buffer_filled && is_on_floor()) || stomping: + snap_possible = false + return calculate_jump_velocity(velocity, delta, direction) - elif player_state_machine.coyote_hanging: - out_vel.y = 0 + elif player_state_machine.coyote_hanging: + out_vel.y = 0 - else: - out_vel.y = _gravity * delta + else: + out_vel.y = _gravity * delta - return out_vel + return out_vel func is_on_dropThrough(): - var bodies: Array = $BlobbySkin.get_overlapping_bodies() - for i in range(0, bodies.size()): - if bodies[i].get_collision_mask_bit(7): - set_collision_mask_bit(7, false) - return true - return false + var bodies: Array = $BlobbySkin.get_overlapping_bodies() + for i in range(0, bodies.size()): + if bodies[i].get_collision_mask_bit(7): + set_collision_mask_bit(7, false) + return true + return false func calculate_grounded_velocity( - linear_velocity: Vector2, delta: float, direction: Vector2 + linear_velocity: Vector2, delta: float, direction: Vector2 ) -> Vector2: - var state = player_state_machine.state - var out_vel := linear_velocity - var velocity_direction = 1.0 - if velocity.x < 0: - velocity_direction = -1.0 + var state = player_state_machine.state + var out_vel := linear_velocity + var velocity_direction = 1.0 + if velocity.x < 0: + velocity_direction = -1.0 - var deceleration_force = calculate_deceleration_force(_gravity, mass) + var deceleration_force = calculate_deceleration_force(_gravity, mass) - # Slowing down movement when not controlling direction - if is_equal_approx(direction.x, 0): - # TODO Handle Deadzones - out_vel.x = PhysicsFunc.two_step_euler( - out_vel.x, deceleration_force * -1 * velocity_direction, mass, delta - ) - if abs(out_vel.x) > abs(velocity.x): - out_vel.x = 0 - else: - # Reversing movement - # When turning the opposite direction, friction is added to the opposite acceleration movement - var reverse_move = is_reversing_horizontal_movement(direction) - if reverse_move: - # TODO dont put constants in here - out_vel.x = PhysicsFunc.two_step_euler( - out_vel.x, deceleration_force * -3.42 * velocity_direction, mass, delta - ) - # Normal movement - if abs(velocity.x) < max_velocity[state]: - out_vel.x = PhysicsFunc.two_step_euler( - out_vel.x, - ( - ( - acceleration_force[state].x - + (init_acceleration_force[init_boost_type] * int(init_boost)) - ) - * direction.x - ), - mass, - delta - ) - elif !reverse_move: - out_vel.x = max_velocity[state] * direction.x - # Jumping when grounded or jump is buffered - if Input.is_action_just_pressed("jump") || (jump_buffer_filled && is_on_floor()) || stomping: - snap_possible = false - #velocity += get_floor_velocity() * 0.5 - return calculate_jump_velocity(velocity, delta, direction) + # Slowing down movement when not controlling direction + if is_equal_approx(direction.x, 0): + # TODO Handle Deadzones + out_vel.x = PhysicsFunc.two_step_euler( + out_vel.x, deceleration_force * -1 * velocity_direction, mass, delta + ) + if abs(out_vel.x) > abs(velocity.x): + out_vel.x = 0 + else: + # Reversing movement + # When turning the opposite direction, friction is added to the opposite acceleration movement + var reverse_move = is_reversing_horizontal_movement(direction) + if reverse_move: + # TODO dont put constants in here + out_vel.x = PhysicsFunc.two_step_euler( + out_vel.x, deceleration_force * -3.42 * velocity_direction, mass, delta + ) + # Normal movement + if abs(velocity.x) < max_velocity[state]: + out_vel.x = PhysicsFunc.two_step_euler( + out_vel.x, + ( + ( + acceleration_force[state].x + + (init_acceleration_force[init_boost_type] * int(init_boost)) + ) + * direction.x + ), + mass, + delta + ) + elif !reverse_move: + out_vel.x = max_velocity[state] * direction.x + # Jumping when grounded or jump is buffered + if Input.is_action_just_pressed("jump") || (jump_buffer_filled && is_on_floor()) || stomping: + snap_possible = false + #velocity += get_floor_velocity() * 0.5 + return calculate_jump_velocity(velocity, delta, direction) - elif player_state_machine.coyote_hanging: - out_vel.y = 0 + elif player_state_machine.coyote_hanging: + out_vel.y = 0 - else: - out_vel.y = _gravity * delta + else: + out_vel.y = _gravity * delta - return out_vel + return out_vel # Determines if the player has reversed the steering direction # in reference to the current movement direction func is_reversing_horizontal_movement(direction: Vector2) -> bool: - return (direction.x > 0 && velocity.x < 0) || (direction.x < 0 && velocity.x > 0) + return (direction.x > 0 && velocity.x < 0) || (direction.x < 0 && velocity.x > 0) # Returns if the character is touching a wall with its whole body # Being able to touch a vertical surface over this length also makes it a qualified "wall" # Also sets wall_touch_direction func is_touching_wall_completely() -> bool: - var value = true - for left_raycast in left_wall_raycasts.get_children(): - wall_touch_direction = -1 - if !left_raycast.is_colliding(): - value = false - continue - if value == true: - return value + var value = true + for left_raycast in left_wall_raycasts.get_children(): + wall_touch_direction = -1 + if !left_raycast.is_colliding(): + value = false + continue + if value == true: + return value - value = true - for right_raycast in right_wall_raycasts.get_children(): - wall_touch_direction = 1 - if !right_raycast.is_colliding(): - value = false - continue - return value + value = true + for right_raycast in right_wall_raycasts.get_children(): + wall_touch_direction = 1 + if !right_raycast.is_colliding(): + value = false + continue + return value func is_crushed() -> bool: - var touching_left = false - for left_raycast in left_wall_raycasts.get_children(): - if left_raycast.is_colliding(): - touching_left = true - var touching_right = false - for right_raycast in right_wall_raycasts.get_children(): - if right_raycast.is_colliding(): - touching_right = true - return touching_left && touching_right + var touching_left = false + for left_raycast in left_wall_raycasts.get_children(): + if left_raycast.is_colliding(): + touching_left = true + var touching_right = false + for right_raycast in right_wall_raycasts.get_children(): + if right_raycast.is_colliding(): + touching_right = true + return touching_left && touching_right # Attached to wall state is in the PlayerStateMachine func is_correct_walljump_input(direction: Vector2) -> bool: - if is_touching_wall_completely(): - return ( - Input.is_action_pressed("jump") - && abs(direction.x + wall_touch_direction) < 1 - && abs(direction.x + wall_touch_direction) >= 0 - ) - return false + if is_touching_wall_completely(): + return ( + Input.is_action_pressed("jump") + && abs(direction.x + wall_touch_direction) < 1 + && abs(direction.x + wall_touch_direction) >= 0 + ) + return false func is_correct_airstrafe_input() -> bool: - return ( - air_strafe_charges > 0 - && (Input.is_action_just_pressed("move_right") || Input.is_action_just_pressed("move_left")) - ) + return ( + air_strafe_charges > 0 + && (Input.is_action_just_pressed("move_right") || Input.is_action_just_pressed("move_left")) + ) # Calculates the force of the ground friction func calculate_deceleration_force(_gravity: float, mass: float) -> float: - return floor_friction * _gravity * mass + return floor_friction * _gravity * mass func calculate_stomp_velocity(delta: float) -> float: - var v = 0 - if Input.is_action_pressed("jump"): - v += stomp_feedback - # print(stomp_time) - stomp_time -= delta - # print(stomp_time) - if stomp_time <= 0: - # print("stomping over") - stomping = false - stomp_time = init_stomp_time - return v + var v = 0 + if Input.is_action_pressed("jump"): + v += stomp_feedback + # print(stomp_time) + stomp_time -= delta + # print(stomp_time) + if stomp_time <= 0: + # print("stomping over") + stomping = false + stomp_time = init_stomp_time + return v func calculate_jump_velocity(linear_velocity: Vector2, delta: float, direction: Vector2) -> Vector2: - var state = player_state_machine.state - var additive_jump_force = velocity_jump_boost_ratio * abs(velocity.x) * mass - #TODO Single out stomping and make betta - #TODO too much force intially and too high with frog jump - if stomping: - additive_jump_force += calculate_stomp_velocity(delta) + var state = player_state_machine.state + var additive_jump_force = velocity_jump_boost_ratio * abs(velocity.x) * mass + #TODO Single out stomping and make betta + #TODO too much force intially and too high with frog jump + if stomping: + additive_jump_force += calculate_stomp_velocity(delta) - var y_acceleration_force = acceleration_force[state].y - var x_acceleration_force = acceleration_force[state].x + var y_acceleration_force = acceleration_force[state].y + var x_acceleration_force = acceleration_force[state].x - if duck_jumping: - y_acceleration_force *= duck_boost.y - linear_velocity.x += duck_boost.x * direction.x + if duck_jumping: + y_acceleration_force *= duck_boost.y + linear_velocity.x += duck_boost.x * direction.x - if state != "jump": - linear_velocity.y = PhysicsFunc.two_step_euler( - linear_velocity.y, - (y_acceleration_force / delta + additive_jump_force) * -1, - mass, - delta - ) + if state != "jump": + linear_velocity.y = PhysicsFunc.two_step_euler( + linear_velocity.y, + (y_acceleration_force / delta + additive_jump_force) * -1, + mass, + delta + ) # print(acceleration_force[state].y) # print(linear_velocity.y) - var y_velocity = 0 - if !Input.is_action_pressed("jump") && !stomping: - # Smooth transition from jumping to falling - if velocity.y > _gravity * delta * 10: - y_velocity += _gravity * delta * 10 - else: - y_velocity += (max(abs(linear_velocity.y), _gravity * delta) / 2) + var y_velocity = 0 + if !Input.is_action_pressed("jump") && !stomping: + # Smooth transition from jumping to falling + if velocity.y > _gravity * delta * 10: + y_velocity += _gravity * delta * 10 + else: + y_velocity += (max(abs(linear_velocity.y), _gravity * delta) / 2) - else: - y_velocity += _gravity * delta - - #if linear_velocity.y < max_velocity["jump"].y: - linear_velocity.y += y_velocity + else: + y_velocity += _gravity * delta - # TODO This is poop too - if ( - -max_velocity["jump"].x < velocity.x and direction.x < 0 - || max_velocity["jump"].x > velocity.x and direction.x > 0 - ): - var absolut = 1 - initial_velocity_dependence - var divisor = 1 / max(0.1, initial_velocity_dependence) - var movement_factor = absolut + abs(velocity.x) / (max_velocity["fall"].x * divisor) - linear_velocity.x = PhysicsFunc.two_step_euler( - linear_velocity.x, x_acceleration_force * movement_factor * direction.x, mass, delta - ) + #if linear_velocity.y < max_velocity["jump"].y: + linear_velocity.y += y_velocity - if is_correct_airstrafe_input(): - linear_velocity = execute_airstrafe(linear_velocity, delta, direction) + # TODO This is poop too + if ( + -max_velocity["jump"].x < velocity.x and direction.x < 0 + || max_velocity["jump"].x > velocity.x and direction.x > 0 + ): + var absolut = 1 - initial_velocity_dependence + var divisor = 1 / max(0.1, initial_velocity_dependence) + var movement_factor = absolut + abs(velocity.x) / (max_velocity["fall"].x * divisor) + linear_velocity.x = PhysicsFunc.two_step_euler( + linear_velocity.x, x_acceleration_force * movement_factor * direction.x, mass, delta + ) + + if is_correct_airstrafe_input(): + linear_velocity = execute_airstrafe(linear_velocity, delta, direction) # print(linear_velocity.y) - return linear_velocity + return linear_velocity # Only applicable to downwards gravity # Can set the jump buffer func calculate_fall_velocity(linear_velocity: Vector2, delta: float, direction: Vector2) -> Vector2: - var state = player_state_machine.state - if velocity.y < max_velocity["fall"].y: - linear_velocity.y = PhysicsFunc.two_step_euler( - linear_velocity.y, _gravity * mass, mass, delta - ) - else: - linear_velocity.y = max_velocity["fall"].y - if ( - -max_velocity["fall"].x < velocity.x and direction.x < 0 - || max_velocity["fall"].x > velocity.x and direction.x > 0 - ): - # TODO This is poop - var absolut = 1 - initial_velocity_dependence - var divisor = 1 / max(0.1, initial_velocity_dependence) - var movementFactor = absolut + abs(velocity.x) / (max_velocity["fall"].x * divisor) - linear_velocity.x = PhysicsFunc.two_step_euler( - linear_velocity.x, - acceleration_force[state].x * movementFactor * direction.x, - mass, - delta - ) - if Input.is_action_just_pressed("jump"): - jump_buffer_filled = true - if is_correct_airstrafe_input(): - linear_velocity = execute_airstrafe(linear_velocity, delta, direction) - if stomping: - linear_velocity = calculate_jump_velocity(Vector2(linear_velocity.x, 0), delta, direction) - return linear_velocity + var state = player_state_machine.state + if velocity.y < max_velocity["fall"].y: + linear_velocity.y = PhysicsFunc.two_step_euler( + linear_velocity.y, _gravity * mass, mass, delta + ) + else: + linear_velocity.y = max_velocity["fall"].y + if ( + -max_velocity["fall"].x < velocity.x and direction.x < 0 + || max_velocity["fall"].x > velocity.x and direction.x > 0 + ): + # TODO This is poop + var absolut = 1 - initial_velocity_dependence + var divisor = 1 / max(0.1, initial_velocity_dependence) + var movementFactor = absolut + abs(velocity.x) / (max_velocity["fall"].x * divisor) + linear_velocity.x = PhysicsFunc.two_step_euler( + linear_velocity.x, + acceleration_force[state].x * movementFactor * direction.x, + mass, + delta + ) + if Input.is_action_just_pressed("jump"): + jump_buffer_filled = true + if is_correct_airstrafe_input(): + linear_velocity = execute_airstrafe(linear_velocity, delta, direction) + if stomping: + linear_velocity = calculate_jump_velocity(Vector2(linear_velocity.x, 0), delta, direction) + return linear_velocity func calculate_wallslide_velocity( - linear_velocity: Vector2, delta: float, direction: Vector2 + linear_velocity: Vector2, delta: float, direction: Vector2 ) -> Vector2: - # Walljump mechanics - if is_correct_walljump_input(direction): - linear_velocity.x = PhysicsFunc.two_step_euler( - 0, acceleration_force["walljump"].x / delta * direction.x, mass, delta - ) - linear_velocity.y = PhysicsFunc.two_step_euler( - 0, acceleration_force["walljump"].y / delta * -1, mass, delta - ) - elif is_correct_airstrafe_input(): - # var rev = 1 if !is_reversing_horizontal_movement(direction) else -1 - linear_velocity = execute_airstrafe(linear_velocity, delta, direction) - elif ( - abs(direction.x + wall_touch_direction) < 1 - && abs(direction.x + wall_touch_direction) >= 0 - ): - var absolut = 1 - initial_velocity_dependence - var divisor = 1 / max(0.1, initial_velocity_dependence) - var movementFactor = absolut + abs(velocity.x) / (max_velocity["fall"].x * divisor) - linear_velocity.x = PhysicsFunc.two_step_euler( - linear_velocity.x, - acceleration_force["fall"].x * movementFactor * direction.x, - mass, - delta - ) - else: - # TODO dont put constants in here - linear_velocity.y = PhysicsFunc.two_step_euler( - linear_velocity.y * 0.94, _gravity * mass, mass, delta - ) - # TODO single out to function - air_strafe_charges = ( - air_strafe_charges + 1 - if max_air_strafe_charges > air_strafe_charges - else 0 - ) - return linear_velocity.rotated(rotation) + # Walljump mechanics + if is_correct_walljump_input(direction): + linear_velocity.x = PhysicsFunc.two_step_euler( + 0, acceleration_force["walljump"].x / delta * direction.x, mass, delta + ) + linear_velocity.y = PhysicsFunc.two_step_euler( + 0, acceleration_force["walljump"].y / delta * -1, mass, delta + ) + elif is_correct_airstrafe_input(): + # var rev = 1 if !is_reversing_horizontal_movement(direction) else -1 + linear_velocity = execute_airstrafe(linear_velocity, delta, direction) + elif ( + abs(direction.x + wall_touch_direction) < 1 + && abs(direction.x + wall_touch_direction) >= 0 + ): + var absolut = 1 - initial_velocity_dependence + var divisor = 1 / max(0.1, initial_velocity_dependence) + var movementFactor = absolut + abs(velocity.x) / (max_velocity["fall"].x * divisor) + linear_velocity.x = PhysicsFunc.two_step_euler( + linear_velocity.x, + acceleration_force["fall"].x * movementFactor * direction.x, + mass, + delta + ) + else: + # TODO dont put constants in here + linear_velocity.y = PhysicsFunc.two_step_euler( + linear_velocity.y * 0.94, _gravity * mass, mass, delta + ) + # TODO single out to function + air_strafe_charges = ( + air_strafe_charges + 1 + if max_air_strafe_charges > air_strafe_charges + else 0 + ) + return linear_velocity.rotated(rotation) func execute_airstrafe(linear_velocity: Vector2, delta: float, direction: Vector2) -> Vector2: - # var rev = 1 if !is_reversing_horizontal_movement(direction) else -1 - # TODO Consider adding a extra state for airstrafing - # TODO Make airstrafing less instantaneous and moderate the impulse - if direction.x > 0: - effect_player.play("airstrafing") - else: - effect_player.play("airstrafingLeft") - if is_reversing_horizontal_movement(direction): - linear_velocity.x = 0 - linear_velocity.x = PhysicsFunc.two_step_euler( - linear_velocity.x, acceleration_force["air_strafe"].x / delta * direction.x, mass, delta - ) - if linear_velocity.y > 0: - # TODO Put constant elsewhere - linear_velocity.y = linear_velocity.y * 0.33 - air_strafe_charges -= 1 - return linear_velocity + # var rev = 1 if !is_reversing_horizontal_movement(direction) else -1 + # TODO Consider adding a extra state for airstrafing + # TODO Make airstrafing less instantaneous and moderate the impulse + if direction.x > 0: + effect_player.play("airstrafing") + else: + effect_player.play("airstrafingLeft") + if is_reversing_horizontal_movement(direction): + linear_velocity.x = 0 + linear_velocity.x = PhysicsFunc.two_step_euler( + linear_velocity.x, acceleration_force["air_strafe"].x / delta * direction.x, mass, delta + ) + if linear_velocity.y > 0: + # TODO Put constant elsewhere + linear_velocity.y = linear_velocity.y * 0.33 + air_strafe_charges -= 1 + return linear_velocity func calculate_slope_rotation(_onfloor: bool) -> float: - var angle = 0 - var slope_angle_left = $SlopeRaycastLeft.get_collision_normal().rotated(PI / 2).angle() - var slope_angle_right = $SlopeRaycastRight.get_collision_normal().rotated(PI / 2).angle() - # avoid invalid angles and stay in rotation when touching ground completely - if ( - !(-PI / 2 <= slope_angle_left && slope_angle_left <= PI / 2) - || !(-PI / 2 <= slope_angle_right && slope_angle_right <= PI / 2) - || (is_equal_approx(abs(slope_angle_left), abs(slope_angle_right))) - ): - return ( - previous_rotation - if abs(rad2deg(previous_rotation)) > 1 && !is_equal_approx(slope_angle_left, 0) - else 0.0 - ) - # downturn - if ( - abs(slope_angle_left) > abs(slope_angle_right) && velocity.x < -10 - || abs(slope_angle_right) > abs(slope_angle_left) && velocity.x > 10 - ): - var length_vector: Vector2 = ( - $SlopeRaycastRight.get_collision_point() - - $SlopeRaycastLeft.get_collision_point() - ) - angle = length_vector.angle() - # upturn - else: - var length_vector: Vector2 = ( - $SlopeRaycastLeft.get_collision_point() - - $SlopeRaycastRight.get_collision_point() - ) - angle = length_vector.angle() - PI - previous_rotation = angle - if is_equal_approx(deg2rad(angle), 0): - pass - return angle + var angle = 0 + var slope_angle_left = $SlopeRaycastLeft.get_collision_normal().rotated(PI / 2).angle() + var slope_angle_right = $SlopeRaycastRight.get_collision_normal().rotated(PI / 2).angle() + # avoid invalid angles and stay in rotation when touching ground completely + if ( + !(-PI / 2 <= slope_angle_left && slope_angle_left <= PI / 2) + || !(-PI / 2 <= slope_angle_right && slope_angle_right <= PI / 2) + || (is_equal_approx(abs(slope_angle_left), abs(slope_angle_right))) + ): + return ( + previous_rotation + if abs(rad2deg(previous_rotation)) > 1 && !is_equal_approx(slope_angle_left, 0) + else 0.0 + ) + # downturn + if ( + abs(slope_angle_left) > abs(slope_angle_right) && velocity.x < -10 + || abs(slope_angle_right) > abs(slope_angle_left) && velocity.x > 10 + ): + var length_vector: Vector2 = ( + $SlopeRaycastRight.get_collision_point() + - $SlopeRaycastLeft.get_collision_point() + ) + angle = length_vector.angle() + # upturn + else: + var length_vector: Vector2 = ( + $SlopeRaycastLeft.get_collision_point() + - $SlopeRaycastRight.get_collision_point() + ) + angle = length_vector.angle() - PI + previous_rotation = angle + if is_equal_approx(deg2rad(angle), 0): + pass + return angle # TODO could be expanded with a parameter about what got stomped func stomp() -> void: - #print("stomping") - #print(player_state_machine.state) - scene_audio.play_parallel_sound( - "res://assets/sounds/FABRIC_Flap_03_mono.wav", -15, false, 1.5, 0.2 - ) - scene_audio.play_parallel_sound("res://assets/sounds/CLASP_Plastic_Open_stereo.wav", -12) - stomping = true + #print("stomping") + #print(player_state_machine.state) + scene_audio.play_parallel_sound( + "res://assets/sounds/FABRIC_Flap_03_mono.wav", -15, false, 1.5, 0.2 + ) + scene_audio.play_parallel_sound("res://assets/sounds/CLASP_Plastic_Open_stereo.wav", -12) + stomping = true # TOD lose_power_up function func receive_power_up(kind: String) -> void: - if kind == "shield": - $BubbleShieldViewport/IridescenceBall.visible = true - shielded = true + if kind == "shield": + $BubbleShieldViewport/IridescenceBall.visible = true + shielded = true # TODO Maybe this should be a state in itself? func die(animation_number: int = 0) -> void: - if level_state.is_dead: - return - if shielded: - shielded = false - $BubbleShieldViewport/IridescenceBall.visible = false - $InvincibilityTimer.start() - $BlobbySprite.material = invincible_shader - return - elif !$InvincibilityTimer.is_stopped(): - return - z_index = 1 - $BlobbySprite.material = death_shader - signal_manager.emit_signal("player_died", animation_number) - $"%BlobbymationTree".active = false - $"%BlobbymationPlayer".play("dying3") - if animation_number == 0: - $"%BlobbymationPlayer".play("expandingDisolve") - if animation_number == -1: - respawn() - return - scene_audio.play_parallel_sound(death_sound_1, -15) - scene_audio.play_parallel_sound(death_sound_2, -16) + if level_state.is_dead: + return + if shielded: + shielded = false + $BubbleShieldViewport/IridescenceBall.visible = false + $InvincibilityTimer.start() + $BlobbySprite.material = invincible_shader + return + elif !$InvincibilityTimer.is_stopped(): + return + z_index = 1 + $BlobbySprite.material = death_shader + signal_manager.emit_signal("player_died", animation_number) + $"%BlobbymationTree".active = false + $"%BlobbymationPlayer".play("dying3") + if animation_number == 0: + $"%BlobbymationPlayer".play("expandingDisolve") + if animation_number == -1: + respawn() + return + scene_audio.play_parallel_sound(death_sound_1, -15) + scene_audio.play_parallel_sound(death_sound_2, -16) func die_for_real(animation_number: int = 0) -> void: - shielded = false - $BubbleShieldViewport/IridescenceBall.visible = false - die(animation_number) + shielded = false + $BubbleShieldViewport/IridescenceBall.visible = false + die(animation_number) # TODO Checkpoint system func respawn() -> void: - # Is tied to the death animation - get_tree().reload_current_scene() + # Is tied to the death animation + get_tree().reload_current_scene() # When the Enemy stomp AREA enters the enemy collision area -> stomp func _on_BlobbySkin_area_entered(area: Area2D) -> void: - if area.is_in_group("harmful"): - die() - if area.is_in_group("pit"): - #scene_audio.play_parallel_sound(death_sound_1, -15) - scene_audio.play_parallel_sound(death_sound_2, -16) - $PitfallTimer.start() + if area.is_in_group("harmful"): + die() + if area.is_in_group("pit"): + #scene_audio.play_parallel_sound(death_sound_1, -15) + scene_audio.play_parallel_sound(death_sound_2, -16) + $PitfallTimer.start() # This problem stems from trying to decelerate a walk @@ -518,54 +518,54 @@ func _on_BlobbySkin_area_entered(area: Area2D) -> void: # It is particularly usefull for moving floor physics # TODO Setting y velocity this way stopped is_on_floor() from working correctly func _on_Blobby_got_grounded() -> void: - velocity.x -= get_floor_velocity().x - snap_possible = true - var floor_object = get_last_slide_collision().collider.get_parent() - #TODO There is already a friction property in engine - if "slide_friction" in floor_object: - floor_friction = floor_object.slide_friction - else: - floor_friction = base_floor_friction - air_strafe_charges = ( - air_strafe_charges + 1 - if max_air_strafe_charges > air_strafe_charges - else 0 - ) + velocity.x -= get_floor_velocity().x + snap_possible = true + var floor_object = get_last_slide_collision().collider.get_parent() + #TODO There is already a friction property in engine + if "slide_friction" in floor_object: + floor_friction = floor_object.slide_friction + else: + floor_friction = base_floor_friction + air_strafe_charges = ( + air_strafe_charges + 1 + if max_air_strafe_charges > air_strafe_charges + else 0 + ) func _on_BlobbySkin_body_exited(body: Node) -> void: - # This is for drop through platforms - if body.get_collision_mask_bit(7): - set_collision_mask_bit(7, true) + # This is for drop through platforms + if body.get_collision_mask_bit(7): + set_collision_mask_bit(7, true) func _on_InvincibilityTimer_timeout() -> void: - $BlobbySprite.material = null - for area in $BlobbySkin.get_overlapping_areas(): - if area.is_in_group("harmful"): - die() + $BlobbySprite.material = null + for area in $BlobbySkin.get_overlapping_areas(): + if area.is_in_group("harmful"): + die() func _on_CrushTimer_timeout() -> void: - if is_crushed(): - die_for_real() + if is_crushed(): + die_for_real() func handle_grounded_movement(delta: float, direction: Vector2) -> Vector2: - return calculate_grounded_velocity(velocity, delta, direction) + return calculate_grounded_velocity(velocity, delta, direction) func handle_jump_movement(delta: float, direction: Vector2) -> Vector2: - return calculate_jump_velocity(velocity, delta, direction) + return calculate_jump_velocity(velocity, delta, direction) func handle_duck_movement(delta: float, direction: Vector2) -> Vector2: - return calculate_duck_velocity(velocity, delta, direction) + return calculate_duck_velocity(velocity, delta, direction) func handle_fall_movement(delta: float, direction: Vector2) -> Vector2: - return calculate_fall_velocity(velocity, delta, direction) + return calculate_fall_velocity(velocity, delta, direction) func handle_wallslide_movement(delta: float, direction: Vector2) -> Vector2: - return calculate_wallslide_velocity(velocity, delta, direction) + return calculate_wallslide_velocity(velocity, delta, direction) diff --git a/src/Actors/Blobby/Blobby.tscn b/src/Actors/Blobby/Blobby.tscn index c38c93c..771534c 100644 --- a/src/Actors/Blobby/Blobby.tscn +++ b/src/Actors/Blobby/Blobby.tscn @@ -4385,7 +4385,7 @@ texture = SubResource( 62 ) offset = Vector2( 1, 0 ) hframes = 6 vframes = 6 -frame = 9 +frame = 5 __meta__ = { "_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUJsb2JieVNwcml0ZS9CbG9iYnltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvYmxvYmJ5L2Jsb2JieS1zcHJpdGVzaGVldHQuYXNlcHJpdGUKbGF5ZXJ8PUJsb2JieQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo=" } diff --git a/src/Actors/Enemies/Caterpillar.gd b/src/Actors/Enemies/Caterpillar.gd index 1252839..8e120de 100644 --- a/src/Actors/Enemies/Caterpillar.gd +++ b/src/Actors/Enemies/Caterpillar.gd @@ -32,6 +32,7 @@ func execute_movement(delta: float) -> void: # velocity var v = Vector2(velocity.x * movement, 0) time += delta + $AnimationPlayer.play("moving") move_and_slide_with_snap( v.rotated(rotation), snap.rotated(rotation), FLOOR_NORMAL, false, 4, PI, false ) diff --git a/src/Actors/Enemies/Caterpillar.tscn b/src/Actors/Enemies/Caterpillar.tscn index 844c818..60298e9 100644 --- a/src/Actors/Enemies/Caterpillar.tscn +++ b/src/Actors/Enemies/Caterpillar.tscn @@ -1,6 +1,6 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=8 format=2] -[ext_resource path="res://assets/enemy/enemy.png" type="Texture" id=1] +[ext_resource path="res://assets/enemy/Caterpilllar.png" type="Texture" id=1] [ext_resource path="res://src/Actors/Enemies/Caterpillar.gd" type="Script" id=2] [ext_resource path="res://src/StateMachines/CaterpillarStateMachine.gd" type="Script" id=3] @@ -13,6 +13,23 @@ extents = Vector2( 15, 8.61814 ) [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 14.7108, 7.85442 ) +[sub_resource type="Animation" id=4] +resource_name = "moving" +loop = true +step = 0.05 +tracks/0/type = "value" +tracks/0/path = NodePath("enemy:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ), Vector2( 1.05, 1 ), Vector2( 1.1, 1.05 ), Vector2( 1.05, 1.1 ) ] +} + [node name="Caterpillar" type="KinematicBody2D" groups=["harmful"]] scale = Vector2( 0.747749, 0.572926 ) collision_layer = 2 @@ -21,11 +38,12 @@ collision/safe_margin = 0.001 script = ExtResource( 2 ) [node name="enemy" type="Sprite" parent="."] -position = Vector2( 0, -1.90735e-06 ) -scale = Vector2( 0.286789, 0.276348 ) +position = Vector2( 0, -3.49085 ) +scale = Vector2( 1.01, 1.02 ) texture = ExtResource( 1 ) [node name="VisibilityEnabler2D" type="VisibilityEnabler2D" parent="."] +visible = false position = Vector2( 1362.81, -0.138177 ) scale = Vector2( 15.4865, 1.28502 ) rect = Rect2( -89, -10, 2, 20 ) @@ -33,30 +51,35 @@ process_parent = true physics_process_parent = true [node name="SlopeRaycastLeft" type="RayCast2D" parent="."] +visible = false position = Vector2( -7.5, 12 ) enabled = true cast_to = Vector2( 0, 2 ) collision_mask = 8 [node name="SlopeRaycastRight" type="RayCast2D" parent="."] +visible = false position = Vector2( 7.5, 12 ) enabled = true cast_to = Vector2( 0, 2 ) collision_mask = 8 [node name="WallRaycastLeft" type="RayCast2D" parent="."] +visible = false position = Vector2( -14.711, 11.5 ) enabled = true cast_to = Vector2( -3, 0 ) collision_mask = 8 [node name="WallRaycastRight" type="RayCast2D" parent="."] +visible = false position = Vector2( 14.711, 11.5 ) enabled = true cast_to = Vector2( 3, 0 ) collision_mask = 8 [node name="StompDetector" type="Area2D" parent="." groups=["weakpoint"]] +visible = false modulate = Color( 0, 0.0392157, 1, 1 ) light_mask = 0 position = Vector2( 0, -6.44095 ) @@ -66,26 +89,34 @@ monitorable = false priority = 1.0 [node name="CollisionShape2D" type="CollisionShape2D" parent="StompDetector"] +visible = false position = Vector2( 0, -2.28618 ) shape = SubResource( 2 ) [node name="EnemySkin" type="Area2D" parent="."] process_priority = -1 +visible = false collision_layer = 2 collision_mask = 127 input_pickable = false [node name="CollisionPolygon2D" type="CollisionShape2D" parent="EnemySkin"] +visible = false position = Vector2( 0, 3.49085 ) shape = SubResource( 3 ) [node name="EnemyBody" type="CollisionShape2D" parent="."] +visible = false position = Vector2( -6.37697e-07, 4.36357 ) shape = SubResource( 1 ) [node name="StateMachine" type="Node2D" parent="."] +visible = false script = ExtResource( 3 ) +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/moving = SubResource( 4 ) + [connection signal="body_entered" from="StompDetector" to="." method="_on_StompDetector_body_entered"] [connection signal="area_entered" from="EnemySkin" to="." method="_on_EnemySkin_area_entered"] [connection signal="body_entered" from="EnemySkin" to="." method="_on_EnemySkin_body_entered"] diff --git a/src/Actors/Enemies/DartingEnemy.gd b/src/Actors/Enemies/DartingEnemy.gd index e7a8d96..53709c0 100644 --- a/src/Actors/Enemies/DartingEnemy.gd +++ b/src/Actors/Enemies/DartingEnemy.gd @@ -4,6 +4,7 @@ const PhysicsFunc = preload("res://src/Utilities/Physic/PhysicsFunc.gd") export var invincible := false export var speed := 80 export var acceleration := 80 +export var is_harmful := true func _ready() -> void: $StompDetector.monitoring = !invincible @@ -22,8 +23,6 @@ func _physics_process(delta: float) -> void: mass, delta) velocity.y = move_and_slide(velocity, FLOOR_NORMAL).y - if player_entered_stomp: - $Sprite.frame = 1 # TODO Detects player over gaps func player_on_floor_direction() -> float: @@ -33,3 +32,43 @@ func player_on_floor_direction() -> float: if collider.is_in_group("player"): return sign(collider.position.x - self.position.x) return 0.0 + +func _on_StompDetector_body_entered(body: Node) -> void: + if !body.is_in_group("player"): + return + var incoming_vel_vector: Vector2 = body.velocity.normalized() + print(rad2deg(abs(incoming_vel_vector.angle_to(Vector2.DOWN.rotated(rotation))))) + if abs(incoming_vel_vector.angle_to(Vector2.DOWN.rotated(rotation))) > deg2rad(95) \ + && is_harmful: + print("too shallow entry") + body.die() + return + signal_manager.emit_signal("got_stomped") + #get_node("EnemyBody").disabled = true + if(killable): + remove_from_group("harmful") + die() + else: + switch_spikes() + +func switch_spikes() -> void: + is_harmful = !is_harmful + if $Sprite.frame == 0: + $Sprite.frame = 1 + else: + $Sprite.frame = 0 + + + + +func die() -> void: + queue_free() + + +func _on_EnemySkin_area_entered(area: Area2D) -> void: + pass + + +func _on_EnemySkin_body_entered(body: Node) -> void: + if body.is_in_group("player") && is_harmful: + body.die() diff --git a/src/Actors/Enemies/Enemy.gd b/src/Actors/Enemies/Enemy.gd index e54588a..64b2868 100644 --- a/src/Actors/Enemies/Enemy.gd +++ b/src/Actors/Enemies/Enemy.gd @@ -2,7 +2,6 @@ extends Actor class_name Enemy export(bool) var killable := true -var player_entered_stomp = false func _on_StompDetector_body_entered(body: Node) -> void: @@ -10,14 +9,11 @@ func _on_StompDetector_body_entered(body: Node) -> void: return var incoming_vel_vector: Vector2 = body.velocity.normalized() print(rad2deg(abs(incoming_vel_vector.angle_to(Vector2.DOWN.rotated(rotation))))) - if abs(incoming_vel_vector.angle_to(Vector2.DOWN.rotated(rotation))) > deg2rad(95) \ - && !player_entered_stomp: + if abs(incoming_vel_vector.angle_to(Vector2.DOWN.rotated(rotation))) > deg2rad(95): print("too shallow entry") body.die() - player_entered_stomp = false return signal_manager.emit_signal("got_stomped") - player_entered_stomp = true #get_node("EnemyBody").disabled = true if(killable): remove_from_group("harmful") @@ -35,5 +31,5 @@ func _on_EnemySkin_area_entered(area: Area2D) -> void: func _on_EnemySkin_body_entered(body: Node) -> void: - if body.is_in_group("player") && !player_entered_stomp: + if body.is_in_group("player"): body.die() diff --git a/src/Levels/Level 0.4.tscn b/src/Levels/Level 0.4.tscn index 92e550a..2e69867 100644 --- a/src/Levels/Level 0.4.tscn +++ b/src/Levels/Level 0.4.tscn @@ -125,9 +125,6 @@ unique_name_in_owner = true position = Vector2( -70, 1 ) scale = Vector2( 0.878906, 0.936025 ) -[node name="BlobbySprite" parent="Blobby" index="5"] -frame = 8 - [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"] parameters/playback = SubResource( 6 ) @@ -223,9 +220,8 @@ speed = 16 [node name="DartingEnemy" parent="." instance=ExtResource( 6 )] position = Vector2( 609, 67 ) +mass = 1.0 killable = false -speed = 300 -acceleration = 800 [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] diff --git a/src/Levels/Level 0.5.tscn b/src/Levels/Level 0.5.tscn index 1ccd992..e6717a3 100644 --- a/src/Levels/Level 0.5.tscn +++ b/src/Levels/Level 0.5.tscn @@ -128,7 +128,7 @@ death_sound_1 = null death_sound_2 = null [node name="BlobbySprite" parent="Blobby" index="5"] -frame = 7 +frame = 6 [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"] parameters/playback = SubResource( 7 ) diff --git a/src/Levels/Level 0.6.tscn b/src/Levels/Level 0.6.tscn index 7ae85c7..b13e7de 100644 --- a/src/Levels/Level 0.6.tscn +++ b/src/Levels/Level 0.6.tscn @@ -132,9 +132,6 @@ jump_buffer_filled = null death_sound_1 = null death_sound_2 = null -[node name="BlobbySprite" parent="Blobby" index="5"] -frame = 5 - [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"] parameters/playback = SubResource( 53 ) diff --git a/src/Levels/Level 1.tscn b/src/Levels/Level 1.tscn index f5dad11..04c5dc7 100644 --- a/src/Levels/Level 1.tscn +++ b/src/Levels/Level 1.tscn @@ -135,7 +135,7 @@ death_sound_1 = null death_sound_2 = null [node name="BlobbySprite" parent="Blobby" index="5"] -frame = 10 +frame = 9 [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"] parameters/playback = SubResource( 6 ) @@ -194,8 +194,8 @@ max_speed = 100 [node name="DartingEnemy" parent="." instance=ExtResource( 20 )] position = Vector2( -446, 259 ) -speed = 200 -acceleration = 320 +mass = 1.0 +killable = false [node name="TileMap" type="TileMap" parent="."] unique_name_in_owner = true diff --git a/src/Levels/Level 2.tscn b/src/Levels/Level 2.tscn index 6a26c58..e5becdb 100644 --- a/src/Levels/Level 2.tscn +++ b/src/Levels/Level 2.tscn @@ -131,9 +131,6 @@ unique_name_in_owner = true position = Vector2( -64, -1.90735e-06 ) scale = Vector2( 0.878906, 0.936025 ) -[node name="BlobbySprite" parent="Blobby" index="5"] -frame = 10 - [node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"] parameters/playback = SubResource( 6 ) diff --git a/src/Levels/Level 4.tscn b/src/Levels/Level 4.tscn index 63260a6..ccdf068 100644 --- a/src/Levels/Level 4.tscn +++ b/src/Levels/Level 4.tscn @@ -137,7 +137,7 @@ collision_layer = 8 collision_mask = 8 bake_navigation = true format = 1 -tile_data = PoolIntArray( -4849681, 5, 524293, -4849680, 5, 524293, -4849679, 5, 524293, -4849678, 5, 524293, -4849677, 5, 524293, -4849676, 5, 524293, -4849675, 5, 524293, -4849674, 5, 524293, -4849673, 5, 524293, -4849672, 5, 524293, -4849671, 5, 524293, -4849670, 5, 524293, -4849669, 5, 524293, -4849668, 5, 524293, -4849667, 5, 524293, -4849666, 5, 524293, -4849665, 5, 524293, -4915200, 5, 524293, -4915199, 5, 524293, -4915198, 5, 524293, -4915197, 5, 524293, -4915196, 5, 524293, -4915195, 5, 524293, -4915194, 5, 524293, -4915193, 5, 524293, -4915192, 5, 524293, -4915191, 5, 524293, -4915190, 5, 524293, -4915189, 5, 524293, -4915188, 5, 524293, -4915187, 5, 524293, -4915186, 5, 524293, -4915185, 5, 524293, -4915184, 5, 524293, -4915183, 5, 524293, -4915182, 5, 524293, -4915181, 5, 524293, -4915180, 5, 524293, -4915179, 5, 524293, -4915178, 5, 524293, -4915177, 5, 524293, -4915176, 5, 524293, -4915175, 5, 524293, -4915174, 5, 524293, -4915173, 5, 524293, -4915172, 5, 524293, -4915171, 5, 524293, -4915170, 5, 524293, -4915169, 5, 524293, -4915168, 5, 524293, -4915167, 5, 524293, -4915166, 5, 524293, -4915165, 5, 524293, -4915164, 5, 524293, -4915163, 5, 524293, -4915162, 5, 524293, -4915161, 5, 524293, -4915160, 5, 524293, -4915159, 5, 524293, -4915158, 5, 524293, -4784145, 5, 524293, -4784144, 5, 65540, -4784143, 5, 10, -4784142, 5, 10, -4784141, 5, 10, -4784140, 5, 10, -4784139, 5, 10, -4784138, 5, 10, -4784137, 5, 10, -4784136, 5, 10, -4784135, 5, 10, -4784134, 5, 10, -4784133, 5, 10, -4784132, 5, 10, -4784131, 5, 10, -4784130, 5, 10, -4784129, 5, 10, -4849664, 5, 10, -4849663, 5, 10, -4849662, 5, 10, -4849661, 5, 10, -4849660, 5, 10, -4849659, 5, 10, -4849658, 5, 10, -4849657, 5, 10, -4849656, 5, 10, -4849655, 5, 10, -4849654, 5, 10, -4849653, 5, 10, -4849652, 5, 10, -4849651, 5, 10, -4849650, 5, 10, -4849649, 5, 10, -4849648, 5, 10, -4849647, 5, 10, -4849646, 5, 10, -4849645, 5, 10, -4849644, 5, 10, -4849643, 5, 10, -4849642, 5, 10, -4849641, 5, 10, -4849640, 5, 10, -4849639, 5, 10, -4849638, 5, 10, -4849637, 5, 10, -4849636, 5, 10, -4849635, 5, 65541, -4849634, 5, 524293, -4849633, 5, 524293, -4849632, 5, 524293, -4849631, 5, 524293, -4849630, 5, 524293, -4849629, 5, 524293, -4849628, 5, 524293, -4849627, 5, 524293, -4849626, 5, 524293, -4849625, 5, 524293, -4849624, 5, 524293, -4849623, 5, 524293, -4849622, 5, 524293, -4718609, 5, 524293, -4718608, 5, 7, -4784099, 5, 6, -4784098, 5, 524293, -4784097, 5, 524293, -4784096, 5, 524293, -4784095, 5, 524293, -4784094, 5, 524293, -4784093, 5, 524293, -4784092, 5, 524293, -4784091, 5, 524293, -4784090, 5, 524293, -4784089, 5, 524293, -4784088, 5, 524293, -4784087, 5, 524293, -4784086, 5, 524293, -4653073, 5, 524293, -4653072, 5, 7, -4718563, 5, 6, -4718562, 5, 524293, -4718561, 5, 524293, -4718560, 5, 524293, -4718559, 5, 524293, -4718558, 5, 524293, -4718557, 5, 524293, -4718556, 5, 524293, -4718555, 5, 524293, -4718554, 5, 524293, -4718553, 5, 524293, -4718552, 5, 524293, -4718551, 5, 524293, -4718550, 5, 524293, -4587537, 5, 524293, -4587536, 5, 7, -4653027, 5, 6, -4653026, 5, 524293, -4653025, 5, 524293, -4653024, 5, 524293, -4653023, 5, 524293, -4653022, 5, 524293, -4653021, 5, 524293, -4653020, 5, 524293, -4653019, 5, 524293, -4653018, 5, 524293, -4653017, 5, 524293, -4653016, 5, 524293, -4653015, 5, 524293, -4653014, 5, 524293, -4522001, 5, 524293, -4522000, 5, 7, -4587491, 5, 6, -4587490, 5, 524293, -4587489, 5, 524293, -4587488, 5, 524293, -4587487, 5, 524293, -4587486, 5, 524293, -4587485, 5, 524293, -4587484, 5, 524293, -4587483, 5, 524293, -4587482, 5, 524293, -4587481, 5, 524293, -4587480, 5, 524293, -4587479, 5, 524293, -4587478, 5, 524293, -4456465, 5, 524293, -4456464, 5, 7, -4521955, 5, 6, -4521954, 5, 524293, -4521953, 5, 524293, -4521952, 5, 524293, -4521951, 5, 524293, -4521950, 5, 524293, -4521949, 5, 524293, -4521948, 5, 524293, -4521947, 5, 524293, -4521946, 5, 524293, -4521945, 5, 524293, -4521944, 5, 524293, -4521943, 5, 524293, -4521942, 5, 524293, -4390929, 5, 524293, -4390928, 5, 7, -4456425, 5, 1, -4456424, 5, 3, -4456423, 5, 3, -4456422, 5, 3, -4456421, 5, 3, -4456420, 5, 3, -4456419, 5, 65539, -4456418, 5, 524293, -4456417, 5, 524293, -4456416, 5, 524293, -4456415, 5, 524293, -4456414, 5, 524293, -4456413, 5, 524293, -4456412, 5, 524293, -4456411, 5, 524293, -4456410, 5, 524293, -4456409, 5, 524293, -4456408, 5, 524293, -4456407, 5, 524293, -4456406, 5, 524293, -4325393, 5, 524293, -4325392, 5, 7, -4390889, 5, 6, -4390888, 5, 524293, -4390887, 5, 524293, -4390886, 5, 524293, -4390885, 5, 524293, -4390884, 5, 524293, -4390883, 5, 524293, -4390882, 5, 524293, -4390881, 5, 524293, -4390880, 5, 524293, -4390879, 5, 524293, -4390878, 5, 524293, -4390877, 5, 524293, -4390876, 5, 524293, -4390875, 5, 524293, -4390874, 5, 524293, -4390873, 5, 524293, -4390872, 5, 524293, -4390871, 5, 524293, -4390870, 5, 524293, -4259857, 5, 524293, -4259856, 5, 7, -4325353, 5, 6, -4325352, 5, 524293, -4325351, 5, 524293, -4325350, 5, 524293, -4325349, 5, 524293, -4325348, 5, 524293, -4325347, 5, 524293, -4325346, 5, 524293, -4325345, 5, 524293, -4325344, 5, 524293, -4325343, 5, 524293, -4325342, 5, 524293, -4325341, 5, 524293, -4325340, 5, 524293, -4325339, 5, 524293, -4325338, 5, 524293, -4325337, 5, 524293, -4325336, 5, 524293, -4325335, 5, 524293, -4325334, 5, 524293, -4194321, 5, 524293, -4194320, 5, 7, -4259817, 5, 6, -4259816, 5, 524293, -4259815, 5, 524293, -4259814, 5, 524293, -4259813, 5, 524293, -4259812, 5, 524293, -4259811, 5, 524293, -4259810, 5, 524293, -4259809, 5, 524293, -4259808, 5, 524293, -4259807, 5, 524293, -4259806, 5, 524293, -4259805, 5, 524293, -4259804, 5, 524293, -4259803, 5, 524293, -4259802, 5, 524293, -4259801, 5, 524293, -4259800, 5, 524293, -4259799, 5, 524293, -4259798, 5, 524293, -4128785, 5, 524293, -4128784, 5, 7, -4194281, 5, 6, -4194280, 5, 524293, -4194279, 5, 524293, -4194278, 5, 524293, -4194277, 5, 524293, -4194276, 5, 524293, -4194275, 5, 524293, -4194274, 5, 524293, -4194273, 5, 524293, -4194272, 5, 524293, -4194271, 5, 524293, -4194270, 5, 524293, -4194269, 5, 524293, -4194268, 5, 524293, -4194267, 5, 524293, -4194266, 5, 524293, -4194265, 5, 524293, -4194264, 5, 524293, -4194263, 5, 524293, -4194262, 5, 524293, -4063249, 5, 524293, -4063248, 5, 7, -4128745, 5, 6, -4128744, 5, 524293, -4128743, 5, 524293, -4128742, 5, 524293, -4128741, 5, 524293, -4128740, 5, 524293, -4128739, 5, 524293, -4128738, 5, 524293, -4128737, 5, 524293, -4128736, 5, 524293, -4128735, 5, 524293, -4128734, 5, 524293, -4128733, 5, 524293, -4128732, 5, 524293, -4128731, 5, 524293, -4128730, 5, 524293, -4128729, 5, 524293, -4128728, 5, 524293, -4128727, 5, 524293, -4128726, 5, 524293, -3997713, 5, 524293, -3997712, 5, 7, -4063209, 5, 6, -4063208, 5, 524293, -4063207, 5, 524293, -4063206, 5, 524293, -4063205, 5, 524293, -4063204, 5, 524293, -4063203, 5, 524293, -4063202, 5, 524293, -4063201, 5, 524293, -4063200, 5, 524293, -4063199, 5, 524293, -4063198, 5, 524293, -4063197, 5, 524293, -4063196, 5, 524293, -4063195, 5, 524293, -4063194, 5, 524293, -4063193, 5, 524293, -4063192, 5, 524293, -4063191, 5, 524293, -4063190, 5, 524293, -3932177, 5, 524293, -3932176, 5, 7, -3997673, 5, 6, -3997672, 5, 524293, -3997671, 5, 524293, -3997670, 5, 524293, -3997669, 5, 524293, -3997668, 5, 524293, -3997667, 5, 524293, -3997666, 5, 524293, -3997665, 5, 524293, -3997664, 5, 524293, -3997663, 5, 524293, -3997662, 5, 524293, -3997661, 5, 524293, -3997660, 5, 524293, -3997659, 5, 524293, -3997658, 5, 524293, -3997657, 5, 524293, -3997656, 5, 524293, -3997655, 5, 524293, -3997654, 5, 524293, -3866641, 5, 524293, -3866640, 5, 7, -3932137, 5, 6, -3932136, 5, 524293, -3932135, 5, 524293, -3932134, 5, 524293, -3932133, 5, 524293, -3932132, 5, 524293, -3932131, 5, 524293, -3932130, 5, 524293, -3932129, 5, 524293, -3932128, 5, 524293, -3932127, 5, 524293, -3932126, 5, 524293, -3932125, 5, 524293, -3932124, 5, 524293, -3932123, 5, 524293, -3932122, 5, 524293, -3932121, 5, 524293, -3932120, 5, 524293, -3932119, 5, 524293, -3932118, 5, 524293, -3801105, 5, 524293, -3801104, 5, 7, -3866622, 5, 1, -3866621, 5, 2, -3866620, 5, 2, -3866619, 5, 5, -3866601, 5, 6, -3866600, 5, 524293, -3866599, 5, 524293, -3866598, 5, 524293, -3866597, 5, 524293, -3866596, 5, 524293, -3866595, 5, 524293, -3866594, 5, 524293, -3866593, 5, 524293, -3866592, 5, 524293, -3866591, 5, 524293, -3866590, 5, 524293, -3866589, 5, 524293, -3866588, 5, 524293, -3866587, 5, 524293, -3866586, 5, 524293, -3866585, 5, 524293, -3866584, 5, 524293, -3866583, 5, 524293, -3866582, 5, 524293, -3735569, 5, 524293, -3735568, 5, 7, -3801086, 5, 6, -3801085, 5, 524293, -3801084, 5, 524293, -3801083, 5, 8, -3801065, 5, 6, -3801064, 5, 524293, -3801063, 5, 524293, -3801062, 5, 524293, -3801061, 5, 524293, -3801060, 5, 524293, -3801059, 5, 524293, -3801058, 5, 524293, -3801057, 5, 524293, -3801056, 5, 524293, -3801055, 5, 524293, -3801054, 5, 524293, -3801053, 5, 524293, -3801052, 5, 524293, -3801051, 5, 524293, -3801050, 5, 524293, -3801049, 5, 524293, -3801048, 5, 524293, -3801047, 5, 524293, -3801046, 5, 524293, -3670033, 5, 524293, -3670032, 5, 7, -3670018, 5, 1, -3670017, 5, 3, -3735552, 5, 3, -3735551, 5, 3, -3735550, 5, 65539, -3735549, 5, 524293, -3735548, 5, 524293, -3735547, 5, 65538, -3735546, 5, 3, -3735545, 5, 3, -3735544, 5, 3, -3735543, 5, 3, -3735542, 5, 3, -3735541, 5, 3, -3735540, 5, 3, -3735539, 5, 3, -3735538, 5, 3, -3735537, 5, 3, -3735536, 5, 3, -3735535, 5, 3, -3735534, 5, 3, -3735533, 5, 3, -3735532, 5, 3, -3735531, 5, 3, -3735530, 5, 3, -3735529, 5, 65539, -3735528, 5, 524293, -3735527, 5, 524293, -3735526, 5, 524293, -3735525, 5, 524293, -3735524, 5, 524293, -3735523, 5, 524293, -3735522, 5, 524293, -3735521, 5, 524293, -3735520, 5, 524293, -3735519, 5, 524293, -3735518, 5, 524293, -3735517, 5, 524293, -3735516, 5, 524293, -3735515, 5, 524293, -3735514, 5, 524293, -3735513, 5, 524293, -3735512, 5, 524293, -3735511, 5, 524293, -3735510, 5, 524293, -3604497, 5, 524293, -3604496, 5, 7, -3604482, 5, 6, -3604481, 5, 524293, -3670016, 5, 524293, -3670015, 5, 524293, -3670014, 5, 524293, -3670013, 5, 524293, -3670012, 5, 524293, -3670011, 5, 524293, -3670010, 5, 524293, -3670009, 5, 524293, -3670008, 5, 524293, -3670007, 5, 524293, -3670006, 5, 524293, -3670005, 5, 524293, -3670004, 5, 524293, -3670003, 5, 524293, -3670002, 5, 524293, -3670001, 5, 524293, -3670000, 5, 524293, -3669999, 5, 524293, -3669998, 5, 524293, -3669997, 5, 524293, -3669996, 5, 524293, -3669995, 5, 524293, -3669994, 5, 524293, -3669993, 5, 524293, -3669992, 5, 524293, -3669991, 5, 524293, -3669990, 5, 524293, -3669989, 5, 524293, -3669988, 5, 524293, -3669987, 5, 524293, -3669986, 5, 524293, -3669985, 5, 524293, -3669984, 5, 524293, -3669983, 5, 524293, -3669982, 5, 524293, -3669981, 5, 524293, -3669980, 5, 524293, -3669979, 5, 524293, -3669978, 5, 524293, -3669977, 5, 524293, -3669976, 5, 524293, -3669975, 5, 524293, -3669974, 5, 524293, -3538961, 5, 524293, -3538960, 5, 7, -3538946, 5, 6, -3538945, 5, 524293, -3604480, 5, 524293, -3604479, 5, 524293, -3604478, 5, 524293, -3604477, 5, 524293, -3604476, 5, 524293, -3604475, 5, 524293, -3604474, 5, 65540, -3604473, 5, 10, -3604472, 5, 10, -3604471, 5, 10, -3604470, 5, 10, -3604469, 5, 10, -3604468, 5, 10, -3604467, 5, 10, -3604466, 5, 10, -3604465, 5, 10, -3604464, 5, 10, -3604463, 5, 10, -3604462, 5, 10, -3604461, 5, 10, -3604460, 5, 10, -3604459, 5, 10, -3604458, 5, 10, -3604457, 5, 10, -3604456, 5, 10, -3604455, 5, 10, -3604454, 5, 10, -3604453, 5, 10, -3604452, 5, 10, -3604451, 5, 10, -3604450, 5, 10, -3604449, 5, 10, -3604448, 5, 10, -3604447, 5, 10, -3604446, 5, 10, -3604445, 5, 10, -3604444, 5, 10, -3604443, 5, 10, -3604442, 5, 10, -3604441, 5, 10, -3604440, 5, 10, -3604439, 5, 65541, -3604438, 5, 524293, -3473425, 5, 524293, -3473424, 5, 7, -3473410, 5, 6, -3473409, 5, 524293, -3538944, 5, 524293, -3538943, 5, 524293, -3538942, 5, 524293, -3538941, 5, 524293, -3538940, 5, 524293, -3538939, 5, 524293, -3538938, 5, 8, -3538903, 5, 6, -3538902, 5, 524293, -3407889, 5, 524293, -3407888, 5, 7, -3407874, 5, 6, -3407873, 5, 524293, -3473408, 5, 524293, -3473407, 5, 524293, -3473406, 5, 524293, -3473405, 5, 524293, -3473404, 5, 524293, -3473403, 5, 524293, -3473402, 5, 8, -3473367, 5, 6, -3473366, 5, 524293, -3342353, 5, 524293, -3342352, 5, 7, -3342338, 5, 6, -3342337, 5, 524293, -3407872, 5, 524293, -3407871, 5, 524293, -3407870, 5, 524293, -3407869, 5, 524293, -3407868, 5, 524293, -3407867, 5, 524293, -3407866, 5, 8, -3407831, 5, 6, -3407830, 5, 524293, -3276817, 5, 524293, -3276816, 5, 7, -3276802, 5, 6, -3276801, 5, 524293, -3342336, 5, 524293, -3342335, 5, 524293, -3342334, 5, 524293, -3342333, 5, 524293, -3342332, 5, 524293, -3342331, 5, 524293, -3342330, 5, 8, -3342295, 5, 6, -3342294, 5, 524293, -3211281, 5, 524293, -3211280, 5, 7, -3211266, 5, 6, -3211265, 5, 524293, -3276800, 5, 524293, -3276799, 5, 524293, -3276798, 5, 524293, -3276797, 5, 524293, -3276796, 5, 524293, -3276795, 5, 524293, -3276794, 5, 8, -3276759, 5, 6, -3276758, 5, 524293, -3145745, 5, 524293, -3145744, 5, 7, -3145734, 5, 1, -3145733, 5, 2, -3145732, 5, 2, -3145731, 5, 2, -3145730, 5, 65539, -3145729, 5, 524293, -3211264, 5, 524293, -3211263, 5, 524293, -3211262, 5, 524293, -3211261, 5, 524293, -3211260, 5, 524293, -3211259, 5, 524293, -3211258, 5, 8, -3211223, 5, 6, -3211222, 5, 524293, -3080209, 5, 524293, -3080208, 5, 7, -3080198, 5, 6, -3080197, 5, 524293, -3080196, 5, 524293, -3080195, 5, 524293, -3080194, 5, 524293, -3080193, 5, 524293, -3145728, 5, 524293, -3145727, 5, 524293, -3145726, 5, 524293, -3145725, 5, 524293, -3145724, 5, 524293, -3145723, 5, 524293, -3145722, 5, 8, -3145687, 5, 6, -3145686, 5, 524293, -3014673, 5, 524293, -3014672, 5, 7, -3014662, 5, 9, -3014661, 5, 10, -3014660, 5, 10, -3014659, 5, 10, -3014658, 5, 10, -3014657, 5, 10, -3080192, 5, 10, -3080191, 5, 10, -3080190, 5, 10, -3080189, 5, 10, -3080188, 5, 10, -3080187, 5, 65541, -3080186, 5, 8, -3080151, 5, 6, -3080150, 5, 524293, -2949137, 5, 524293, -2949136, 5, 7, -3014651, 5, 6, -3014650, 5, 8, -3014615, 5, 6, -3014614, 5, 524293, -2883601, 5, 524293, -2883600, 5, 7, -2949115, 5, 6, -2949114, 5, 8, -2949079, 5, 6, -2949078, 5, 524293, -2818065, 5, 524293, -2818064, 5, 65538, -2818063, 5, 3, -2818062, 5, 3, -2818061, 5, 4, -2883579, 5, 6, -2883578, 5, 8, -2883543, 5, 6, -2883542, 5, 524293, -2752529, 5, 524293, -2752528, 5, 524293, -2752527, 5, 524293, -2752526, 5, 524293, -2752525, 5, 7, -2818043, 5, 6, -2818042, 5, 65538, -2818041, 5, 2, -2818040, 5, 2, -2818039, 5, 2, -2818038, 5, 2, -2818037, 5, 2, -2818036, 5, 2, -2818035, 5, 2, -2818034, 5, 2, -2818033, 5, 2, -2818032, 5, 2, -2818031, 5, 2, -2818030, 5, 4, -2818026, 5, 1, -2818025, 5, 2, -2818024, 5, 2, -2818023, 5, 2, -2818022, 5, 2, -2818021, 5, 2, -2818020, 5, 3, -2818019, 5, 3, -2818018, 5, 3, -2818017, 5, 4, -2818007, 5, 6, -2818006, 5, 524293, -2686993, 5, 524293, -2686992, 5, 524293, -2686991, 5, 524293, -2686990, 5, 524293, -2686989, 5, 7, -2752507, 5, 9, -2752506, 5, 10, -2752505, 5, 10, -2752504, 5, 10, -2752503, 5, 10, -2752502, 5, 10, -2752501, 5, 10, -2752500, 5, 10, -2752499, 5, 10, -2752498, 5, 10, -2752497, 5, 10, -2752496, 5, 10, -2752495, 5, 10, -2752494, 5, 65536, -2752490, 5, 9, -2752489, 5, 10, -2752488, 5, 10, -2752487, 5, 10, -2752486, 5, 10, -2752485, 5, 10, -2752484, 5, 65541, -2752483, 5, 524293, -2752482, 5, 524293, -2752481, 5, 7, -2752471, 5, 6, -2752470, 5, 524293, -2621457, 5, 524293, -2621456, 5, 524293, -2621455, 5, 524293, -2621454, 5, 524293, -2621453, 5, 7, -2686948, 5, 6, -2686947, 5, 524293, -2686946, 5, 524293, -2686945, 5, 7, -2686935, 5, 6, -2686934, 5, 524293, -2555921, 5, 524293, -2555920, 5, 524293, -2555919, 5, 524293, -2555918, 5, 524293, -2555917, 5, 65538, -2555916, 5, 3, -2555915, 5, 3, -2555914, 5, 3, -2555913, 5, 3, -2555912, 5, 3, -2555911, 5, 3, -2555910, 5, 5, -2621412, 5, 6, -2621411, 5, 524293, -2621410, 5, 524293, -2621409, 5, 65538, -2621408, 5, 2, -2621407, 5, 2, -2621406, 5, 5, -2621399, 5, 6, -2621398, 5, 524293, -2490385, 5, 524293, -2490384, 5, 524293, -2490383, 5, 524293, -2490382, 5, 524293, -2490381, 5, 524293, -2490380, 5, 524293, -2490379, 5, 524293, -2490378, 5, 524293, -2490377, 5, 524293, -2490376, 5, 524293, -2490375, 5, 524293, -2490374, 5, 8, -2555876, 5, 6, -2555875, 5, 524293, -2555874, 5, 65540, -2555873, 5, 10, -2555872, 5, 10, -2555871, 5, 10, -2555870, 5, 65536, -2555863, 5, 6, -2555862, 5, 524293, -2424849, 5, 524293, -2424848, 5, 524293, -2424847, 5, 524293, -2424846, 5, 524293, -2424845, 5, 524293, -2424844, 5, 524293, -2424843, 5, 524293, -2424842, 5, 524293, -2424841, 5, 524293, -2424840, 5, 524293, -2424839, 5, 524293, -2424838, 5, 8, -2490365, 5, 1, -2490364, 5, 3, -2490363, 5, 3, -2490362, 5, 3, -2490361, 5, 3, -2490360, 5, 3, -2490359, 5, 3, -2490358, 5, 3, -2490357, 5, 3, -2490356, 5, 3, -2490355, 5, 3, -2490354, 5, 3, -2490353, 5, 3, -2490352, 5, 3, -2490351, 5, 3, -2490350, 5, 3, -2490349, 5, 3, -2490348, 5, 3, -2490347, 5, 3, -2490346, 5, 3, -2490345, 5, 3, -2490344, 5, 3, -2490343, 5, 3, -2490342, 5, 3, -2490341, 5, 3, -2490340, 5, 65539, -2490339, 5, 524293, -2490338, 5, 7, -2490327, 5, 6, -2490326, 5, 524293, -2359313, 5, 524293, -2359312, 5, 524293, -2359311, 5, 524293, -2359310, 5, 524293, -2359309, 5, 524293, -2359308, 5, 524293, -2359307, 5, 524293, -2359306, 5, 524293, -2359305, 5, 524293, -2359304, 5, 524293, -2359303, 5, 524293, -2359302, 5, 8, -2424829, 5, 6, -2424828, 5, 65540, -2424827, 5, 10, -2424826, 5, 10, -2424825, 5, 10, -2424824, 5, 10, -2424823, 5, 10, -2424822, 5, 10, -2424821, 5, 10, -2424820, 5, 10, -2424819, 5, 10, -2424818, 5, 10, -2424817, 5, 10, -2424816, 5, 10, -2424815, 5, 10, -2424814, 5, 10, -2424813, 5, 10, -2424812, 5, 10, -2424811, 5, 10, -2424810, 5, 10, -2424809, 5, 10, -2424808, 5, 10, -2424807, 5, 10, -2424806, 5, 10, -2424805, 5, 65541, -2424804, 5, 524293, -2424803, 5, 524293, -2424802, 5, 7, -2424791, 5, 6, -2424790, 5, 524293, -2293777, 5, 524293, -2293776, 5, 524293, -2293775, 5, 524293, -2293774, 5, 524293, -2293773, 5, 524293, -2293772, 5, 524293, -2293771, 5, 524293, -2293770, 5, 524293, -2293769, 5, 524293, -2293768, 5, 524293, -2293767, 5, 524293, -2293766, 5, 65538, -2293765, 5, 3, -2293764, 5, 3, -2293763, 5, 3, -2293762, 5, 3, -2293761, 5, 3, -2359296, 5, 3, -2359295, 5, 3, -2359294, 5, 3, -2359293, 5, 65539, -2359292, 5, 7, -2359269, 5, 6, -2359268, 5, 524293, -2359267, 5, 524293, -2359266, 5, 65538, -2359265, 5, 3, -2359264, 5, 3, -2359263, 5, 3, -2359262, 5, 5, -2359255, 5, 6, -2359254, 5, 524293, -2228241, 5, 524293, -2228240, 5, 524293, -2228239, 5, 524293, -2228238, 5, 524293, -2228237, 5, 524293, -2228236, 5, 524293, -2228235, 5, 524293, -2228234, 5, 524293, -2228233, 5, 524293, -2228232, 5, 524293, -2228231, 5, 524293, -2228230, 5, 524293, -2228229, 5, 524293, -2228228, 5, 524293, -2228227, 5, 524293, -2228226, 5, 524293, -2228225, 5, 524293, -2293760, 5, 524293, -2293759, 5, 524293, -2293758, 5, 524293, -2293757, 5, 524293, -2293756, 5, 7, -2293749, 5, 0, -2293748, 5, 0, -2293733, 5, 9, -2293732, 5, 10, -2293731, 5, 10, -2293730, 5, 10, -2293729, 5, 10, -2293728, 5, 10, -2293727, 5, 10, -2293726, 5, 65536, -2293719, 5, 6, -2293718, 5, 524293, -2162705, 5, 524293, -2162704, 5, 524293, -2162703, 5, 524293, -2162702, 5, 524293, -2162701, 5, 524293, -2162700, 5, 524293, -2162699, 5, 524293, -2162698, 5, 524293, -2162697, 5, 524293, -2162696, 5, 524293, -2162695, 5, 524293, -2162694, 5, 524293, -2162693, 5, 524293, -2162692, 5, 524293, -2162691, 5, 524293, -2162690, 5, 524293, -2162689, 5, 524293, -2228224, 5, 524293, -2228223, 5, 524293, -2228222, 5, 524293, -2228221, 5, 524293, -2228220, 5, 7, -2228214, 5, 0, -2228213, 5, 0, -2228183, 5, 6, -2228182, 5, 524293, -2097169, 5, 524293, -2097168, 5, 524293, -2097167, 5, 524293, -2097166, 5, 524293, -2097165, 5, 524293, -2097164, 5, 524293, -2097163, 5, 524293, -2097162, 5, 524293, -2097161, 5, 524293, -2097160, 5, 524293, -2097159, 5, 524293, -2097158, 5, 524293, -2097157, 5, 524293, -2097156, 5, 524293, -2097155, 5, 524293, -2097154, 5, 524293, -2097153, 5, 524293, -2162688, 5, 524293, -2162687, 5, 524293, -2162686, 5, 524293, -2162685, 5, 524293, -2162684, 5, 65538, -2162683, 5, 2, -2162682, 5, 2, -2162681, 5, 4, -2162647, 5, 6, -2162646, 5, 524293, -2031633, 5, 524293, -2031632, 5, 524293, -2031631, 5, 524293, -2031630, 5, 524293, -2031629, 5, 524293, -2031628, 5, 524293, -2031627, 5, 524293, -2031626, 5, 524293, -2031625, 5, 524293, -2031624, 5, 524293, -2031623, 5, 524293, -2031622, 5, 524293, -2031621, 5, 524293, -2031620, 5, 524293, -2031619, 5, 524293, -2031618, 5, 524293, -2031617, 5, 524293, -2097152, 5, 524293, -2097151, 5, 524293, -2097150, 5, 524293, -2097149, 5, 524293, -2097148, 5, 524293, -2097147, 5, 524293, -2097146, 5, 524293, -2097145, 5, 7, -2097111, 5, 6, -2097110, 5, 524293, -1966097, 5, 524293, -1966096, 5, 524293, -1966095, 5, 524293, -1966094, 5, 524293, -1966093, 5, 524293, -1966092, 5, 524293, -1966091, 5, 524293, -1966090, 5, 524293, -1966089, 5, 524293, -1966088, 5, 524293, -1966087, 5, 524293, -1966086, 5, 524293, -1966085, 5, 524293, -1966084, 5, 524293, -1966083, 5, 524293, -1966082, 5, 524293, -1966081, 5, 524293, -2031616, 5, 524293, -2031615, 5, 524293, -2031614, 5, 524293, -2031613, 5, 524293, -2031612, 5, 524293, -2031611, 5, 524293, -2031610, 5, 524293, -2031609, 5, 7, -2031575, 5, 6, -2031574, 5, 524293, -1900561, 5, 524293, -1900560, 5, 524293, -1900559, 5, 524293, -1900558, 5, 524293, -1900557, 5, 524293, -1900556, 5, 524293, -1900555, 5, 524293, -1900554, 5, 524293, -1900553, 5, 524293, -1900552, 5, 524293, -1900551, 5, 524293, -1900550, 5, 524293, -1900549, 5, 524293, -1900548, 5, 524293, -1900547, 5, 524293, -1900546, 5, 524293, -1900545, 5, 524293, -1966080, 5, 524293, -1966079, 5, 524293, -1966078, 5, 524293, -1966077, 5, 524293, -1966076, 5, 524293, -1966075, 5, 524293, -1966074, 5, 524293, -1966073, 5, 7, -1966039, 5, 6, -1966038, 5, 524293, -1835025, 5, 524293, -1835024, 5, 524293, -1835023, 5, 524293, -1835022, 5, 524293, -1835021, 5, 524293, -1835020, 5, 524293, -1835019, 5, 524293, -1835018, 5, 524293, -1835017, 5, 524293, -1835016, 5, 524293, -1835015, 5, 524293, -1835014, 5, 524293, -1835013, 5, 524293, -1835012, 5, 524293, -1835011, 5, 524293, -1835010, 5, 524293, -1835009, 5, 524293, -1900544, 5, 524293, -1900543, 5, 524293, -1900542, 5, 524293, -1900541, 5, 524293, -1900540, 5, 524293, -1900539, 5, 524293, -1900538, 5, 524293, -1900537, 5, 7, -1900503, 5, 6, -1900502, 5, 524293, -1769489, 5, 524293, -1769488, 5, 524293, -1769487, 5, 524293, -1769486, 5, 524293, -1769485, 5, 524293, -1769484, 5, 524293, -1769483, 5, 524293, -1769482, 5, 524293, -1769481, 5, 524293, -1769480, 5, 524293, -1769479, 5, 524293, -1769478, 5, 524293, -1769477, 5, 524293, -1769476, 5, 524293, -1769475, 5, 524293, -1769474, 5, 524293, -1769473, 5, 524293, -1835008, 5, 524293, -1835007, 5, 524293, -1835006, 5, 524293, -1835005, 5, 524293, -1835004, 5, 524293, -1835003, 5, 524293, -1835002, 5, 524293, -1835001, 5, 7, -1834994, 5, 1, -1834993, 5, 2, -1834992, 5, 2, -1834991, 5, 2, -1834990, 5, 2, -1834989, 5, 2, -1834988, 5, 2, -1834987, 5, 2, -1834986, 5, 2, -1834985, 5, 2, -1834984, 5, 2, -1834983, 5, 2, -1834982, 5, 2, -1834981, 5, 2, -1834980, 5, 2, -1834979, 5, 2, -1834978, 5, 2, -1834977, 5, 2, -1834976, 5, 2, -1834975, 5, 2, -1834974, 5, 2, -1834973, 5, 2, -1834972, 5, 2, -1834971, 5, 2, -1834970, 5, 2, -1834969, 5, 2, -1834968, 5, 2, -1834967, 5, 65539, -1834966, 5, 524293, -1703953, 5, 524293, -1703952, 5, 524293, -1703951, 5, 524293, -1703950, 5, 524293, -1703949, 5, 524293, -1703948, 5, 524293, -1703947, 5, 524293, -1703946, 5, 524293, -1703945, 5, 524293, -1703944, 5, 524293, -1703943, 5, 524293, -1703942, 5, 524293, -1703941, 5, 524293, -1703940, 5, 524293, -1703939, 5, 524293, -1703938, 5, 524293, -1703937, 5, 524293, -1769472, 5, 524293, -1769471, 5, 524293, -1769470, 5, 524293, -1769469, 5, 524293, -1769468, 5, 524293, -1769467, 5, 524293, -1769466, 5, 524293, -1769465, 5, 7, -1769458, 5, 6, -1769457, 5, 524293, -1769456, 5, 524293, -1769455, 5, 524293, -1769454, 5, 524293, -1769453, 5, 524293, -1769452, 5, 524293, -1769451, 5, 524293, -1769450, 5, 524293, -1769449, 5, 524293, -1769448, 5, 524293, -1769447, 5, 524293, -1769446, 5, 524293, -1769445, 5, 524293, -1769444, 5, 524293, -1769443, 5, 524293, -1769442, 5, 524293, -1769441, 5, 524293, -1769440, 5, 524293, -1769439, 5, 524293, -1769438, 5, 524293, -1769437, 5, 524293, -1769436, 5, 524293, -1769435, 5, 524293, -1769434, 5, 524293, -1769433, 5, 524293, -1769432, 5, 524293, -1769431, 5, 524293, -1769430, 5, 524293, -1638417, 5, 524293, -1638416, 5, 524293, -1638415, 5, 524293, -1638414, 5, 524293, -1638413, 5, 524293, -1638412, 5, 524293, -1638411, 5, 524293, -1638410, 5, 524293, -1638409, 5, 524293, -1638408, 5, 524293, -1638407, 5, 524293, -1638406, 5, 524293, -1638405, 5, 524293, -1638404, 5, 524293, -1638403, 5, 524293, -1638402, 5, 524293, -1638401, 5, 524293, -1703936, 5, 524293, -1703935, 5, 524293, -1703934, 5, 524293, -1703933, 5, 524293, -1703932, 5, 524293, -1703931, 5, 524293, -1703930, 5, 65540, -1703929, 5, 65536, -1703922, 5, 9, -1703921, 5, 10, -1703920, 5, 65541, -1703919, 5, 524293, -1703918, 5, 524293, -1703917, 5, 524293, -1703916, 5, 524293, -1703915, 5, 524293, -1703914, 5, 524293, -1703913, 5, 524293, -1703912, 5, 524293, -1703911, 5, 524293, -1703910, 5, 524293, -1703909, 5, 524293, -1703908, 5, 524293, -1703907, 5, 524293, -1703906, 5, 524293, -1703905, 5, 524293, -1703904, 5, 524293, -1703903, 5, 524293, -1703902, 5, 524293, -1703901, 5, 524293, -1703900, 5, 524293, -1703899, 5, 524293, -1703898, 5, 524293, -1703897, 5, 524293, -1703896, 5, 524293, -1703895, 5, 524293, -1703894, 5, 524293, -1572881, 5, 524293, -1572880, 5, 524293, -1572879, 5, 524293, -1572878, 5, 524293, -1572877, 5, 524293, -1572876, 5, 524293, -1572875, 5, 524293, -1572874, 5, 524293, -1572873, 5, 524293, -1572872, 5, 524293, -1572871, 5, 524293, -1572870, 5, 524293, -1572869, 5, 524293, -1572868, 5, 524293, -1572867, 5, 524293, -1572866, 5, 524293, -1572865, 5, 524293, -1638400, 5, 524293, -1638399, 5, 524293, -1638398, 5, 524293, -1638397, 5, 524293, -1638396, 5, 524293, -1638395, 5, 524293, -1638394, 5, 7, -1638384, 5, 9, -1638383, 5, 10, -1638382, 5, 10, -1638381, 5, 10, -1638380, 5, 10, -1638379, 5, 10, -1638378, 5, 10, -1638377, 5, 10, -1638376, 5, 10, -1638375, 5, 10, -1638374, 5, 10, -1638373, 5, 10, -1638372, 5, 10, -1638371, 5, 10, -1638370, 5, 10, -1638369, 5, 10, -1638368, 5, 10, -1638367, 5, 10, -1638366, 5, 10, -1638365, 5, 65541, -1638364, 5, 524293, -1638363, 5, 524293, -1638362, 5, 524293, -1638361, 5, 524293, -1638360, 5, 524293, -1638359, 5, 524293, -1638358, 5, 524293, -1507345, 5, 524293, -1507344, 5, 524293, -1507343, 5, 524293, -1507342, 5, 524293, -1507341, 5, 524293, -1507340, 5, 524293, -1507339, 5, 524293, -1507338, 5, 524293, -1507337, 5, 524293, -1507336, 5, 524293, -1507335, 5, 524293, -1507334, 5, 524293, -1507333, 5, 524293, -1507332, 5, 524293, -1507331, 5, 524293, -1507330, 5, 524293, -1507329, 5, 524293, -1572864, 5, 524293, -1572863, 5, 524293, -1572862, 5, 524293, -1572861, 5, 524293, -1572860, 5, 524293, -1572859, 5, 524293, -1572858, 5, 7, -1572829, 5, 6, -1572828, 5, 524293, -1572827, 5, 524293, -1572826, 5, 524293, -1572825, 5, 524293, -1572824, 5, 524293, -1572823, 5, 524293, -1572822, 5, 524293, -1441809, 5, 524293, -1441808, 5, 524293, -1441807, 5, 524293, -1441806, 5, 524293, -1441805, 5, 524293, -1441804, 5, 524293, -1441803, 5, 524293, -1441802, 5, 524293, -1441801, 5, 524293, -1441800, 5, 524293, -1441799, 5, 524293, -1441798, 5, 524293, -1441797, 5, 524293, -1441796, 5, 524293, -1441795, 5, 524293, -1441794, 5, 524293, -1441793, 5, 524293, -1507328, 5, 524293, -1507327, 5, 524293, -1507326, 5, 524293, -1507325, 5, 524293, -1507324, 5, 524293, -1507323, 5, 524293, -1507322, 5, 65538, -1507321, 5, 4, -1507293, 5, 6, -1507292, 5, 524293, -1507291, 5, 524293, -1507290, 5, 524293, -1507289, 5, 524293, -1507288, 5, 524293, -1507287, 5, 524293, -1507286, 5, 524293, -1376273, 5, 524293, -1376272, 5, 524293, -1376271, 5, 524293, -1376270, 5, 524293, -1376269, 5, 524293, -1376268, 5, 524293, -1376267, 5, 524293, -1376266, 5, 524293, -1376265, 5, 524293, -1376264, 5, 524293, -1376263, 5, 524293, -1376262, 5, 524293, -1376261, 5, 524293, -1376260, 5, 524293, -1376259, 5, 524293, -1376258, 5, 524293, -1376257, 5, 524293, -1441792, 5, 524293, -1441791, 5, 524293, -1441790, 5, 524293, -1441789, 5, 524293, -1441788, 5, 524293, -1441787, 5, 524293, -1441786, 5, 524293, -1441785, 5, 7, -1441757, 5, 6, -1441756, 5, 524293, -1441755, 5, 524293, -1441754, 5, 524293, -1441753, 5, 524293, -1441752, 5, 524293, -1441751, 5, 524293, -1441750, 5, 524293, -1310737, 5, 524293, -1310736, 5, 524293, -1310735, 5, 524293, -1310734, 5, 524293, -1310733, 5, 524293, -1310732, 5, 524293, -1310731, 5, 524293, -1310730, 5, 524293, -1310729, 5, 524293, -1310728, 5, 524293, -1310727, 5, 524293, -1310726, 5, 524293, -1310725, 5, 524293, -1310724, 5, 524293, -1310723, 5, 524293, -1310722, 5, 524293, -1310721, 5, 524293, -1376256, 5, 524293, -1376255, 5, 524293, -1376254, 5, 524293, -1376253, 5, 524293, -1376252, 5, 524293, -1376251, 5, 524293, -1376250, 5, 524293, -1376249, 5, 65538, -1376248, 5, 3, -1376247, 5, 3, -1376246, 5, 3, -1376245, 5, 3, -1376244, 5, 3, -1376243, 5, 3, -1376242, 5, 3, -1376241, 5, 3, -1376240, 5, 3, -1376239, 5, 3, -1376238, 5, 3, -1376237, 5, 3, -1376236, 5, 3, -1376235, 5, 3, -1376234, 5, 3, -1376233, 5, 3, -1376232, 5, 3, -1376231, 5, 3, -1376230, 5, 3, -1376229, 5, 4, -1376221, 5, 6, -1376220, 5, 524293, -1376219, 5, 524293, -1376218, 5, 524293, -1376217, 5, 524293, -1376216, 5, 524293, -1376215, 5, 524293, -1376214, 5, 524293, -1245201, 5, 524293, -1245200, 5, 524293, -1245199, 5, 524293, -1245198, 5, 524293, -1245197, 5, 524293, -1245196, 5, 524293, -1245195, 5, 524293, -1245194, 5, 524293, -1245193, 5, 524293, -1245192, 5, 524293, -1245191, 5, 524293, -1245190, 5, 524293, -1245189, 5, 524293, -1245188, 5, 524293, -1245187, 5, 524293, -1245186, 5, 524293, -1245185, 5, 524293, -1310720, 5, 524293, -1310719, 5, 524293, -1310718, 5, 524293, -1310717, 5, 524293, -1310716, 5, 524293, -1310715, 5, 524293, -1310714, 5, 524293, -1310713, 5, 524293, -1310712, 5, 524293, -1310711, 5, 524293, -1310710, 5, 524293, -1310709, 5, 524293, -1310708, 5, 524293, -1310707, 5, 524293, -1310706, 5, 524293, -1310705, 5, 524293, -1310704, 5, 524293, -1310703, 5, 524293, -1310702, 5, 524293, -1310701, 5, 524293, -1310700, 5, 524293, -1310699, 5, 524293, -1310698, 5, 524293, -1310697, 5, 524293, -1310696, 5, 524293, -1310695, 5, 524293, -1310694, 5, 524293, -1310693, 5, 8, -1310685, 5, 6, -1310684, 5, 524293, -1310683, 5, 524293, -1310682, 5, 524293, -1310681, 5, 524293, -1310680, 5, 524293, -1310679, 5, 524293, -1310678, 5, 524293, -1179665, 5, 524293, -1179664, 5, 524293, -1179663, 5, 524293, -1179662, 5, 524293, -1179661, 5, 524293, -1179660, 5, 524293, -1179659, 5, 524293, -1179658, 5, 524293, -1179657, 5, 524293, -1179656, 5, 524293, -1179655, 5, 524293, -1179654, 5, 524293, -1179653, 5, 524293, -1179652, 5, 524293, -1179651, 5, 524293, -1179650, 5, 524293, -1179649, 5, 524293, -1245184, 5, 524293, -1245183, 5, 524293, -1245182, 5, 524293, -1245181, 5, 524293, -1245180, 5, 524293, -1245179, 5, 524293, -1245178, 5, 524293, -1245177, 5, 524293, -1245176, 5, 524293, -1245175, 5, 524293, -1245174, 5, 524293, -1245173, 5, 524293, -1245172, 5, 524293, -1245171, 5, 524293, -1245170, 5, 524293, -1245169, 5, 524293, -1245168, 5, 524293, -1245167, 5, 524293, -1245166, 5, 524293, -1245165, 5, 524293, -1245164, 5, 524293, -1245163, 5, 524293, -1245162, 5, 524293, -1245161, 5, 524293, -1245160, 5, 524293, -1245159, 5, 524293, -1245158, 5, 524293, -1245157, 5, 8, -1245149, 5, 6, -1245148, 5, 524293, -1245147, 5, 524293, -1245146, 5, 524293, -1245145, 5, 524293, -1245144, 5, 524293, -1245143, 5, 524293, -1245142, 5, 524293, -1114129, 5, 524293, -1114128, 5, 524293, -1114127, 5, 524293, -1114126, 5, 524293, -1114125, 5, 524293, -1114124, 5, 524293, -1114123, 5, 524293, -1114122, 5, 524293, -1114121, 5, 524293, -1114120, 5, 524293, -1114119, 5, 524293, -1114118, 5, 524293, -1114117, 5, 524293, -1114116, 5, 524293, -1114115, 5, 524293, -1114114, 5, 524293, -1114113, 5, 524293, -1179648, 5, 524293, -1179647, 5, 524293, -1179646, 5, 524293, -1179645, 5, 524293, -1179644, 5, 524293, -1179643, 5, 524293, -1179642, 5, 524293, -1179641, 5, 524293, -1179640, 5, 524293, -1179639, 5, 524293, -1179638, 5, 524293, -1179637, 5, 524293, -1179636, 5, 524293, -1179635, 5, 524293, -1179634, 5, 524293, -1179633, 5, 524293, -1179632, 5, 524293, -1179631, 5, 524293, -1179630, 5, 524293, -1179629, 5, 524293, -1179628, 5, 524293, -1179627, 5, 524293, -1179626, 5, 524293, -1179625, 5, 524293, -1179624, 5, 524293, -1179623, 5, 524293, -1179622, 5, 524293, -1179621, 5, 8, -1179613, 5, 6, -1179612, 5, 524293, -1179611, 5, 524293, -1179610, 5, 524293, -1179609, 5, 524293, -1179608, 5, 524293, -1179607, 5, 524293, -1179606, 5, 524293, -1048593, 5, 524293, -1048592, 5, 524293, -1048591, 5, 524293, -1048590, 5, 524293, -1048589, 5, 524293, -1048588, 5, 524293, -1048587, 5, 524293, -1048586, 5, 524293, -1048585, 5, 524293, -1048584, 5, 524293, -1048583, 5, 524293, -1048582, 5, 524293, -1048581, 5, 524293, -1048580, 5, 524293, -1048579, 5, 524293, -1048578, 5, 524293, -1048577, 5, 524293, -1114112, 5, 524293, -1114111, 5, 524293, -1114110, 5, 524293, -1114109, 5, 524293, -1114108, 5, 524293, -1114107, 5, 524293, -1114106, 5, 524293, -1114105, 5, 524293, -1114104, 5, 524293, -1114103, 5, 524293, -1114102, 5, 524293, -1114101, 5, 524293, -1114100, 5, 524293, -1114099, 5, 524293, -1114098, 5, 524293, -1114097, 5, 524293, -1114096, 5, 524293, -1114095, 5, 524293, -1114094, 5, 524293, -1114093, 5, 524293, -1114092, 5, 524293, -1114091, 5, 524293, -1114090, 5, 524293, -1114089, 5, 524293, -1114088, 5, 524293, -1114087, 5, 524293, -1114086, 5, 524293, -1114085, 5, 8, -1114077, 5, 6, -1114076, 5, 524293, -1114075, 5, 524293, -1114074, 5, 524293, -1114073, 5, 524293, -1114072, 5, 524293, -1114071, 5, 524293, -1114070, 5, 524293, -983057, 5, 524293, -983056, 5, 524293, -983055, 5, 524293, -983054, 5, 524293, -983053, 5, 524293, -983052, 5, 524293, -983051, 5, 524293, -983050, 5, 524293, -983049, 5, 524293, -983048, 5, 524293, -983047, 5, 524293, -983046, 5, 524293, -983045, 5, 524293, -983044, 5, 524293, -983043, 5, 524293, -983042, 5, 524293, -983041, 5, 524293, -1048576, 5, 524293, -1048575, 5, 524293, -1048574, 5, 524293, -1048573, 5, 524293, -1048572, 5, 524293, -1048571, 5, 524293, -1048570, 5, 524293, -1048569, 5, 524293, -1048568, 5, 524293, -1048567, 5, 524293, -1048566, 5, 524293, -1048565, 5, 524293, -1048564, 5, 524293, -1048563, 5, 524293, -1048562, 5, 524293, -1048561, 5, 524293, -1048560, 5, 524293, -1048559, 5, 524293, -1048558, 5, 524293, -1048557, 5, 524293, -1048556, 5, 524293, -1048555, 5, 524293, -1048554, 5, 524293, -1048553, 5, 524293, -1048552, 5, 524293, -1048551, 5, 524293, -1048550, 5, 524293, -1048549, 5, 8, -1048541, 5, 6, -1048540, 5, 524293, -1048539, 5, 524293, -1048538, 5, 524293, -1048537, 5, 524293, -1048536, 5, 524293, -1048535, 5, 524293, -1048534, 5, 524293, -917521, 5, 524293, -917520, 5, 524293, -917519, 5, 524293, -917518, 5, 524293, -917517, 5, 524293, -917516, 5, 524293, -917515, 5, 524293, -917514, 5, 524293, -917513, 5, 524293, -917512, 5, 524293, -917511, 5, 524293, -917510, 5, 524293, -917509, 5, 524293, -917508, 5, 524293, -917507, 5, 524293, -917506, 5, 524293, -917505, 5, 524293, -983040, 5, 524293, -983039, 5, 524293, -983038, 5, 524293, -983037, 5, 524293, -983036, 5, 524293, -983035, 5, 524293, -983034, 5, 524293, -983033, 5, 524293, -983032, 5, 524293, -983031, 5, 524293, -983030, 5, 524293, -983029, 5, 524293, -983028, 5, 524293, -983027, 5, 524293, -983026, 5, 524293, -983025, 5, 524293, -983024, 5, 524293, -983023, 5, 524293, -983022, 5, 524293, -983021, 5, 524293, -983020, 5, 524293, -983019, 5, 524293, -983018, 5, 524293, -983017, 5, 524293, -983016, 5, 524293, -983015, 5, 524293, -983014, 5, 524293, -983013, 5, 8, -983005, 5, 6, -983004, 5, 524293, -983003, 5, 524293, -983002, 5, 524293, -983001, 5, 524293, -983000, 5, 524293, -982999, 5, 524293, -982998, 5, 524293, -851985, 5, 524293, -851984, 5, 65540, -851983, 5, 10, -851982, 5, 10, -851981, 5, 10, -851980, 5, 10, -851979, 5, 10, -851978, 5, 10, -851977, 5, 10, -851976, 5, 10, -851975, 5, 10, -851974, 5, 10, -851973, 5, 10, -851972, 5, 10, -851971, 5, 10, -851970, 5, 10, -851969, 5, 10, -917504, 5, 10, -917503, 5, 10, -917502, 5, 10, -917501, 5, 10, -917500, 5, 10, -917499, 5, 10, -917498, 5, 10, -917497, 5, 10, -917496, 5, 10, -917495, 5, 10, -917494, 5, 10, -917493, 5, 10, -917492, 5, 10, -917491, 5, 10, -917490, 5, 10, -917489, 5, 10, -917488, 5, 10, -917487, 5, 10, -917486, 5, 10, -917485, 5, 10, -917484, 5, 10, -917483, 5, 10, -917482, 5, 10, -917481, 5, 10, -917480, 5, 10, -917479, 5, 10, -917478, 5, 10, -917477, 5, 65536, -917469, 5, 6, -917468, 5, 524293, -917467, 5, 524293, -917466, 5, 524293, -917465, 5, 524293, -917464, 5, 524293, -917463, 5, 524293, -917462, 5, 524293, -786449, 5, 524293, -786448, 5, 7, -851933, 5, 6, -851932, 5, 524293, -851931, 5, 524293, -851930, 5, 524293, -851929, 5, 524293, -851928, 5, 524293, -851927, 5, 524293, -851926, 5, 524293, -720913, 5, 524293, -720912, 5, 7, -786397, 5, 6, -786396, 5, 524293, -786395, 5, 524293, -786394, 5, 524293, -786393, 5, 524293, -786392, 5, 524293, -786391, 5, 524293, -786390, 5, 524293, -655377, 5, 524293, -655376, 5, 7, -720861, 5, 6, -720860, 5, 524293, -720859, 5, 524293, -720858, 5, 524293, -720857, 5, 524293, -720856, 5, 524293, -720855, 5, 524293, -720854, 5, 524293, -589841, 5, 524293, -589840, 5, 7, -655325, 5, 6, -655324, 5, 524293, -655323, 5, 524293, -655322, 5, 524293, -655321, 5, 524293, -655320, 5, 524293, -655319, 5, 524293, -655318, 5, 524293, -524305, 5, 524293, -524304, 5, 7, -589789, 5, 6, -589788, 5, 524293, -589787, 5, 524293, -589786, 5, 524293, -589785, 5, 524293, -589784, 5, 524293, -589783, 5, 524293, -589782, 5, 524293, -458769, 5, 524293, -458768, 5, 7, -524253, 5, 6, -524252, 5, 524293, -524251, 5, 524293, -524250, 5, 524293, -524249, 5, 524293, -524248, 5, 524293, -524247, 5, 524293, -524246, 5, 524293, -393233, 5, 524293, -393232, 5, 7, -458717, 5, 6, -458716, 5, 524293, -458715, 5, 524293, -458714, 5, 524293, -458713, 5, 524293, -458712, 5, 524293, -458711, 5, 524293, -458710, 5, 524293, -327697, 5, 524293, -327696, 5, 7, -393188, 5, 1, -393187, 5, 3, -393186, 5, 3, -393185, 5, 3, -393184, 5, 3, -393183, 5, 3, -393182, 5, 3, -393181, 5, 65539, -393180, 5, 524293, -393179, 5, 524293, -393178, 5, 524293, -393177, 5, 524293, -393176, 5, 524293, -393175, 5, 524293, -393174, 5, 524293, -262161, 5, 524293, -262160, 5, 7, -327652, 5, 6, -327651, 5, 524293, -327650, 5, 524293, -327649, 5, 524293, -327648, 5, 524293, -327647, 5, 524293, -327646, 5, 524293, -327645, 5, 524293, -327644, 5, 524293, -327643, 5, 524293, -327642, 5, 524293, -327641, 5, 524293, -327640, 5, 524293, -327639, 5, 524293, -327638, 5, 524293, -196625, 5, 524293, -196624, 5, 7, -262116, 5, 6, -262115, 5, 524293, -262114, 5, 524293, -262113, 5, 524293, -262112, 5, 524293, -262111, 5, 524293, -262110, 5, 524293, -262109, 5, 524293, -262108, 5, 524293, -262107, 5, 524293, -262106, 5, 524293, -262105, 5, 524293, -262104, 5, 524293, -262103, 5, 524293, -262102, 5, 524293, -131089, 5, 524293, -131088, 5, 7, -196588, 5, 1, -196587, 5, 3, -196586, 5, 3, -196585, 5, 3, -196584, 5, 3, -196583, 5, 3, -196582, 5, 3, -196581, 5, 3, -196580, 5, 65539, -196579, 5, 524293, -196578, 5, 524293, -196577, 5, 524293, -196576, 5, 524293, -196575, 5, 524293, -196574, 5, 524293, -196573, 5, 524293, -196572, 5, 524293, -196571, 5, 524293, -196570, 5, 524293, -196569, 5, 524293, -196568, 5, 524293, -196567, 5, 524293, -196566, 5, 524293, -65553, 5, 524293, -65552, 5, 7, -131052, 5, 6, -131051, 5, 524293, -131050, 5, 524293, -131049, 5, 524293, -131048, 5, 524293, -131047, 5, 524293, -131046, 5, 524293, -131045, 5, 524293, -131044, 5, 524293, -131043, 5, 524293, -131042, 5, 524293, -131041, 5, 524293, -131040, 5, 524293, -131039, 5, 524293, -131038, 5, 524293, -131037, 5, 524293, -131036, 5, 524293, -131035, 5, 524293, -131034, 5, 524293, -131033, 5, 524293, -131032, 5, 524293, -131031, 5, 524293, -131030, 5, 524293, -17, 5, 524293, -16, 5, 7, -65533, 5, 1, -65532, 5, 3, -65531, 5, 3, -65530, 5, 3, -65529, 5, 3, -65528, 5, 3, -65527, 5, 3, -65526, 5, 5, -65516, 5, 6, -65515, 5, 524293, -65514, 5, 524293, -65513, 5, 524293, -65512, 5, 524293, -65511, 5, 524293, -65510, 5, 524293, -65509, 5, 524293, -65508, 5, 524293, -65507, 5, 524293, -65506, 5, 524293, -65505, 5, 524293, -65504, 5, 524293, -65503, 5, 524293, -65502, 5, 524293, -65501, 5, 524293, -65500, 5, 524293, -65499, 5, 524293, -65498, 5, 524293, -65497, 5, 524293, -65496, 5, 524293, -65495, 5, 524293, -65494, 5, 524293, 65519, 5, 524293, 65520, 5, 7, 3, 5, 6, 4, 5, 524293, 5, 5, 524293, 6, 5, 524293, 7, 5, 524293, 8, 5, 524293, 9, 5, 524293, 10, 5, 7, 20, 5, 6, 21, 5, 524293, 22, 5, 524293, 23, 5, 524293, 24, 5, 524293, 25, 5, 524293, 26, 5, 524293, 27, 5, 524293, 28, 5, 524293, 29, 5, 524293, 30, 5, 524293, 31, 5, 524293, 32, 5, 524293, 33, 5, 524293, 34, 5, 524293, 35, 5, 524293, 36, 5, 524293, 37, 5, 524293, 38, 5, 524293, 39, 5, 524293, 40, 5, 524293, 41, 5, 524293, 42, 5, 524293, 131055, 5, 524293, 131056, 5, 7, 65539, 5, 6, 65540, 5, 524293, 65541, 5, 524293, 65542, 5, 524293, 65543, 5, 524293, 65544, 5, 524293, 65545, 5, 524293, 65546, 5, 7, 65556, 5, 6, 65557, 5, 524293, 65558, 5, 524293, 65559, 5, 524293, 65560, 5, 524293, 65561, 5, 524293, 65562, 5, 524293, 65563, 5, 524293, 65564, 5, 524293, 65565, 5, 524293, 65566, 5, 524293, 65567, 5, 524293, 65568, 5, 524293, 65569, 5, 524293, 65570, 5, 524293, 65571, 5, 524293, 65572, 5, 524293, 65573, 5, 524293, 65574, 5, 524293, 65575, 5, 524293, 65576, 5, 524293, 65577, 5, 524293, 65578, 5, 524293, 196591, 5, 524293, 196592, 5, 7, 131075, 5, 6, 131076, 5, 524293, 131077, 5, 524293, 131078, 5, 524293, 131079, 5, 524293, 131080, 5, 524293, 131081, 5, 524293, 131082, 5, 65538, 131083, 5, 3, 131084, 5, 3, 131085, 5, 3, 131086, 5, 3, 131087, 5, 3, 131088, 5, 3, 131089, 5, 3, 131090, 5, 3, 131091, 5, 3, 131092, 5, 65539, 131093, 5, 524293, 131094, 5, 524293, 131095, 5, 524293, 131096, 5, 524293, 131097, 5, 524293, 131098, 5, 524293, 131099, 5, 524293, 131100, 5, 524293, 131101, 5, 524293, 131102, 5, 524293, 131103, 5, 524293, 131104, 5, 524293, 131105, 5, 524293, 131106, 5, 524293, 131107, 5, 524293, 131108, 5, 524293, 131109, 5, 524293, 131110, 5, 524293, 131111, 5, 524293, 131112, 5, 524293, 131113, 5, 524293, 131114, 5, 524293, 262127, 5, 524293, 262128, 5, 7, 196611, 5, 6, 196612, 5, 524293, 196613, 5, 524293, 196614, 5, 524293, 196615, 5, 524293, 196616, 5, 524293, 196617, 5, 524293, 196618, 5, 524293, 196619, 5, 524293, 196620, 5, 524293, 196621, 5, 524293, 196622, 5, 524293, 196623, 5, 524293, 196624, 5, 524293, 196625, 5, 524293, 196626, 5, 524293, 196627, 5, 524293, 196628, 5, 524293, 196629, 5, 524293, 196630, 5, 524293, 196631, 5, 524293, 196632, 5, 524293, 196633, 5, 524293, 196634, 5, 524293, 196635, 5, 524293, 196636, 5, 524293, 196637, 5, 524293, 196638, 5, 524293, 196639, 5, 524293, 196640, 5, 524293, 196641, 5, 524293, 196642, 5, 524293, 196643, 5, 524293, 196644, 5, 524293, 196645, 5, 524293, 196646, 5, 524293, 196647, 5, 524293, 196648, 5, 524293, 196649, 5, 524293, 196650, 5, 524293, 327663, 5, 524293, 327664, 5, 7, 262147, 5, 6, 262148, 5, 524293, 262149, 5, 524293, 262150, 5, 524293, 262151, 5, 524293, 262152, 5, 524293, 262153, 5, 524293, 262154, 5, 524293, 262155, 5, 524293, 262156, 5, 524293, 262157, 5, 524293, 262158, 5, 524293, 262159, 5, 524293, 262160, 5, 524293, 262161, 5, 524293, 262162, 5, 524293, 262163, 5, 524293, 262164, 5, 524293, 262165, 5, 524293, 262166, 5, 524293, 262167, 5, 524293, 262168, 5, 524293, 262169, 5, 524293, 262170, 5, 524293, 262171, 5, 524293, 262172, 5, 524293, 262173, 5, 524293, 262174, 5, 524293, 262175, 5, 524293, 262176, 5, 524293, 262177, 5, 524293, 262178, 5, 524293, 262179, 5, 524293, 262180, 5, 524293, 262181, 5, 524293, 262182, 5, 524293, 262183, 5, 524293, 262184, 5, 524293, 262185, 5, 524293, 262186, 5, 524293, 393199, 5, 524293, 393200, 5, 7, 327683, 5, 6, 327684, 5, 524293, 327685, 5, 524293, 327686, 5, 524293, 327687, 5, 524293, 327688, 5, 524293, 327689, 5, 524293, 327690, 5, 524293, 327691, 5, 524293, 327692, 5, 524293, 327693, 5, 524293, 327694, 5, 524293, 327695, 5, 524293, 327696, 5, 524293, 327697, 5, 524293, 327698, 5, 524293, 327699, 5, 524293, 327700, 5, 524293, 327701, 5, 524293, 327702, 5, 524293, 327703, 5, 524293, 327704, 5, 524293, 327705, 5, 524293, 327706, 5, 524293, 327707, 5, 524293, 327708, 5, 524293, 327709, 5, 524293, 327710, 5, 524293, 327711, 5, 524293, 327712, 5, 524293, 327713, 5, 524293, 327714, 5, 524293, 327715, 5, 524293, 327716, 5, 524293, 327717, 5, 524293, 327718, 5, 524293, 327719, 5, 524293, 327720, 5, 524293, 327721, 5, 524293, 327722, 5, 524293, 458735, 5, 524293, 458736, 5, 7, 393219, 5, 6, 393220, 5, 524293, 393221, 5, 524293, 393222, 5, 524293, 393223, 5, 524293, 393224, 5, 524293, 393225, 5, 524293, 393226, 5, 524293, 393227, 5, 524293, 393228, 5, 524293, 393229, 5, 524293, 393230, 5, 524293, 393231, 5, 524293, 393232, 5, 524293, 393233, 5, 524293, 393234, 5, 524293, 393235, 5, 524293, 393236, 5, 524293, 393237, 5, 524293, 393238, 5, 524293, 393239, 5, 524293, 393240, 5, 524293, 393241, 5, 524293, 393242, 5, 524293, 393243, 5, 524293, 393244, 5, 524293, 393245, 5, 524293, 393246, 5, 524293, 393247, 5, 524293, 393248, 5, 524293, 393249, 5, 524293, 393250, 5, 524293, 393251, 5, 524293, 393252, 5, 524293, 393253, 5, 524293, 393254, 5, 524293, 393255, 5, 524293, 393256, 5, 524293, 393257, 5, 524293, 393258, 5, 524293, 524271, 5, 524293, 524272, 5, 65538, 524273, 5, 3, 524274, 5, 3, 524275, 5, 2, 524276, 5, 2, 524277, 5, 2, 524278, 5, 2, 524279, 5, 2, 524280, 5, 2, 524281, 5, 2, 524282, 5, 2, 524283, 5, 2, 524284, 5, 2, 524285, 5, 2, 524286, 5, 2, 524287, 5, 2, 458752, 5, 2, 458753, 5, 3, 458754, 5, 3, 458755, 5, 65539, 458756, 5, 524293, 458757, 5, 524293, 458758, 5, 524293, 458759, 5, 524293, 458760, 5, 524293, 458761, 5, 524293, 458762, 5, 524293, 458763, 5, 524293, 458764, 5, 524293, 458765, 5, 524293, 458766, 5, 524293, 458767, 5, 524293, 458768, 5, 524293, 458769, 5, 524293, 458770, 5, 524293, 458771, 5, 524293, 458772, 5, 524293, 458773, 5, 524293, 458774, 5, 524293, 458775, 5, 524293, 458776, 5, 524293, 458777, 5, 524293, 458778, 5, 524293, 458779, 5, 524293, 458780, 5, 524293, 458781, 5, 524293, 458782, 5, 524293, 458783, 5, 524293, 458784, 5, 524293, 458785, 5, 524293, 458786, 5, 524293, 458787, 5, 524293, 458788, 5, 524293, 458789, 5, 524293, 458790, 5, 524293, 458791, 5, 524293, 458792, 5, 524293, 458793, 5, 524293, 458794, 5, 524293, 589807, 5, 524293, 589808, 5, 524293, 589809, 5, 524293, 589810, 5, 524293, 589811, 5, 524293, 589812, 5, 524293, 589813, 5, 524293, 589814, 5, 524293, 589815, 5, 524293, 589816, 5, 524293, 589817, 5, 524293, 589818, 5, 524293, 589819, 5, 524293, 589820, 5, 524293, 589821, 5, 524293, 589822, 5, 524293, 589823, 5, 524293, 524288, 5, 524293, 524289, 5, 524293, 524290, 5, 524293, 524291, 5, 524293, 524292, 5, 524293, 524293, 5, 524293, 524294, 5, 524293, 524295, 5, 524293, 524296, 5, 524293, 524297, 5, 524293, 524298, 5, 524293, 524299, 5, 524293, 524300, 5, 524293, 524301, 5, 524293, 524302, 5, 524293, 524303, 5, 524293, 524304, 5, 524293, 524305, 5, 524293, 524306, 5, 524293, 524307, 5, 524293, 524308, 5, 524293, 524309, 5, 524293, 524310, 5, 524293, 524311, 5, 524293, 524312, 5, 524293, 524313, 5, 524293, 524314, 5, 524293, 524315, 5, 524293, 524316, 5, 524293, 524317, 5, 524293, 524318, 5, 524293, 524319, 5, 524293, 524320, 5, 524293, 524321, 5, 524293, 524322, 5, 524293, 524323, 5, 524293, 524324, 5, 524293, 524325, 5, 524293, 524326, 5, 524293, 524327, 5, 524293, 524328, 5, 524293, 524329, 5, 524293, 524330, 5, 524293 ) +tile_data = PoolIntArray( -4849681, 5, 524293, -4849680, 5, 524293, -4849679, 5, 524293, -4849678, 5, 524293, -4849677, 5, 524293, -4849676, 5, 524293, -4849675, 5, 524293, -4849674, 5, 524293, -4849673, 5, 524293, -4849672, 5, 524293, -4849671, 5, 524293, -4849670, 5, 524293, -4849669, 5, 524293, -4849668, 5, 524293, -4849667, 5, 524293, -4849666, 5, 524293, -4849665, 5, 524293, -4915200, 5, 524293, -4915199, 5, 524293, -4915198, 5, 524293, -4915197, 5, 524293, -4915196, 5, 524293, -4915195, 5, 524293, -4915194, 5, 524293, -4915193, 5, 524293, -4915192, 5, 524293, -4915191, 5, 524293, -4915190, 5, 524293, -4915189, 5, 524293, -4915188, 5, 524293, -4915187, 5, 524293, -4915186, 5, 524293, -4915185, 5, 524293, -4915184, 5, 524293, -4915183, 5, 524293, -4915182, 5, 524293, -4915181, 5, 524293, -4915180, 5, 524293, -4915179, 5, 524293, -4915178, 5, 524293, -4915177, 5, 524293, -4915176, 5, 524293, -4915175, 5, 524293, -4915174, 5, 524293, -4915173, 5, 524293, -4915172, 5, 524293, -4915171, 5, 524293, -4915170, 5, 524293, -4915169, 5, 524293, -4915168, 5, 524293, -4915167, 5, 524293, -4915166, 5, 524293, -4915165, 5, 524293, -4915164, 5, 524293, -4915163, 5, 524293, -4915162, 5, 524293, -4915161, 5, 524293, -4915160, 5, 524293, -4915159, 5, 524293, -4915158, 5, 524293, -4784145, 5, 524293, -4784144, 5, 65540, -4784143, 5, 10, -4784142, 5, 10, -4784141, 5, 10, -4784140, 5, 10, -4784139, 5, 10, -4784138, 5, 10, -4784137, 5, 10, -4784136, 5, 10, -4784135, 5, 10, -4784134, 5, 10, -4784133, 5, 10, -4784132, 5, 10, -4784131, 5, 10, -4784130, 5, 10, -4784129, 5, 10, -4849664, 5, 10, -4849663, 5, 10, -4849662, 5, 10, -4849661, 5, 10, -4849660, 5, 10, -4849659, 5, 10, -4849658, 5, 10, -4849657, 5, 10, -4849656, 5, 10, -4849655, 5, 10, -4849654, 5, 10, -4849653, 5, 10, -4849652, 5, 10, -4849651, 5, 10, -4849650, 5, 10, -4849649, 5, 10, -4849648, 5, 10, -4849647, 5, 10, -4849646, 5, 10, -4849645, 5, 10, -4849644, 5, 10, -4849643, 5, 10, -4849642, 5, 10, -4849641, 5, 10, -4849640, 5, 10, -4849639, 5, 10, -4849638, 5, 10, -4849637, 5, 10, -4849636, 5, 10, -4849635, 5, 65541, -4849634, 5, 524293, -4849633, 5, 524293, -4849632, 5, 524293, -4849631, 5, 524293, -4849630, 5, 524293, -4849629, 5, 524293, -4849628, 5, 524293, -4849627, 5, 524293, -4849626, 5, 524293, -4849625, 5, 524293, -4849624, 5, 524293, -4849623, 5, 524293, -4849622, 5, 524293, -4718609, 5, 524293, -4718608, 5, 7, -4784099, 5, 6, -4784098, 5, 524293, -4784097, 5, 524293, -4784096, 5, 524293, -4784095, 5, 524293, -4784094, 5, 524293, -4784093, 5, 524293, -4784092, 5, 524293, -4784091, 5, 524293, -4784090, 5, 524293, -4784089, 5, 524293, -4784088, 5, 524293, -4784087, 5, 524293, -4784086, 5, 524293, -4653073, 5, 524293, -4653072, 5, 7, -4718563, 5, 6, -4718562, 5, 524293, -4718561, 5, 524293, -4718560, 5, 524293, -4718559, 5, 524293, -4718558, 5, 524293, -4718557, 5, 524293, -4718556, 5, 524293, -4718555, 5, 524293, -4718554, 5, 524293, -4718553, 5, 524293, -4718552, 5, 524293, -4718551, 5, 524293, -4718550, 5, 524293, -4587537, 5, 524293, -4587536, 5, 7, -4653027, 5, 6, -4653026, 5, 524293, -4653025, 5, 524293, -4653024, 5, 524293, -4653023, 5, 524293, -4653022, 5, 524293, -4653021, 5, 524293, -4653020, 5, 524293, -4653019, 5, 524293, -4653018, 5, 524293, -4653017, 5, 524293, -4653016, 5, 524293, -4653015, 5, 524293, -4653014, 5, 524293, -4522001, 5, 524293, -4522000, 5, 7, -4587491, 5, 6, -4587490, 5, 524293, -4587489, 5, 524293, -4587488, 5, 524293, -4587487, 5, 524293, -4587486, 5, 524293, -4587485, 5, 524293, -4587484, 5, 524293, -4587483, 5, 524293, -4587482, 5, 524293, -4587481, 5, 524293, -4587480, 5, 524293, -4587479, 5, 524293, -4587478, 5, 524293, -4456465, 5, 524293, -4456464, 5, 7, -4521955, 5, 6, -4521954, 5, 524293, -4521953, 5, 524293, -4521952, 5, 524293, -4521951, 5, 524293, -4521950, 5, 524293, -4521949, 5, 524293, -4521948, 5, 524293, -4521947, 5, 524293, -4521946, 5, 524293, -4521945, 5, 524293, -4521944, 5, 524293, -4521943, 5, 524293, -4521942, 5, 524293, -4390929, 5, 524293, -4390928, 5, 7, -4456425, 5, 1, -4456424, 5, 3, -4456423, 5, 3, -4456422, 5, 3, -4456421, 5, 3, -4456420, 5, 3, -4456419, 5, 65539, -4456418, 5, 524293, -4456417, 5, 524293, -4456416, 5, 524293, -4456415, 5, 524293, -4456414, 5, 524293, -4456413, 5, 524293, -4456412, 5, 524293, -4456411, 5, 524293, -4456410, 5, 524293, -4456409, 5, 524293, -4456408, 5, 524293, -4456407, 5, 524293, -4456406, 5, 524293, -4325393, 5, 524293, -4325392, 5, 7, -4390889, 5, 6, -4390888, 5, 524293, -4390887, 5, 524293, -4390886, 5, 524293, -4390885, 5, 524293, -4390884, 5, 524293, -4390883, 5, 524293, -4390882, 5, 524293, -4390881, 5, 524293, -4390880, 5, 524293, -4390879, 5, 524293, -4390878, 5, 524293, -4390877, 5, 524293, -4390876, 5, 524293, -4390875, 5, 524293, -4390874, 5, 524293, -4390873, 5, 524293, -4390872, 5, 524293, -4390871, 5, 524293, -4390870, 5, 524293, -4259857, 5, 524293, -4259856, 5, 7, -4325353, 5, 6, -4325352, 5, 524293, -4325351, 5, 524293, -4325350, 5, 524293, -4325349, 5, 524293, -4325348, 5, 524293, -4325347, 5, 524293, -4325346, 5, 524293, -4325345, 5, 524293, -4325344, 5, 524293, -4325343, 5, 524293, -4325342, 5, 524293, -4325341, 5, 524293, -4325340, 5, 524293, -4325339, 5, 524293, -4325338, 5, 524293, -4325337, 5, 524293, -4325336, 5, 524293, -4325335, 5, 524293, -4325334, 5, 524293, -4194321, 5, 524293, -4194320, 5, 7, -4259817, 5, 6, -4259816, 5, 524293, -4259815, 5, 524293, -4259814, 5, 524293, -4259813, 5, 524293, -4259812, 5, 524293, -4259811, 5, 524293, -4259810, 5, 524293, -4259809, 5, 524293, -4259808, 5, 524293, -4259807, 5, 524293, -4259806, 5, 524293, -4259805, 5, 524293, -4259804, 5, 524293, -4259803, 5, 524293, -4259802, 5, 524293, -4259801, 5, 524293, -4259800, 5, 524293, -4259799, 5, 524293, -4259798, 5, 524293, -4128785, 5, 524293, -4128784, 5, 7, -4194281, 5, 6, -4194280, 5, 524293, -4194279, 5, 524293, -4194278, 5, 524293, -4194277, 5, 524293, -4194276, 5, 524293, -4194275, 5, 524293, -4194274, 5, 524293, -4194273, 5, 524293, -4194272, 5, 524293, -4194271, 5, 524293, -4194270, 5, 524293, -4194269, 5, 524293, -4194268, 5, 524293, -4194267, 5, 524293, -4194266, 5, 524293, -4194265, 5, 524293, -4194264, 5, 524293, -4194263, 5, 524293, -4194262, 5, 524293, -4063249, 5, 524293, -4063248, 5, 7, -4128745, 5, 6, -4128744, 5, 524293, -4128743, 5, 524293, -4128742, 5, 524293, -4128741, 5, 524293, -4128740, 5, 524293, -4128739, 5, 524293, -4128738, 5, 524293, -4128737, 5, 524293, -4128736, 5, 524293, -4128735, 5, 524293, -4128734, 5, 524293, -4128733, 5, 524293, -4128732, 5, 524293, -4128731, 5, 524293, -4128730, 5, 524293, -4128729, 5, 524293, -4128728, 5, 524293, -4128727, 5, 524293, -4128726, 5, 524293, -3997713, 5, 524293, -3997712, 5, 7, -4063209, 5, 6, -4063208, 5, 524293, -4063207, 5, 524293, -4063206, 5, 524293, -4063205, 5, 524293, -4063204, 5, 524293, -4063203, 5, 524293, -4063202, 5, 524293, -4063201, 5, 524293, -4063200, 5, 524293, -4063199, 5, 524293, -4063198, 5, 524293, -4063197, 5, 524293, -4063196, 5, 524293, -4063195, 5, 524293, -4063194, 5, 524293, -4063193, 5, 524293, -4063192, 5, 524293, -4063191, 5, 524293, -4063190, 5, 524293, -3932177, 5, 524293, -3932176, 5, 7, -3997673, 5, 6, -3997672, 5, 524293, -3997671, 5, 524293, -3997670, 5, 524293, -3997669, 5, 524293, -3997668, 5, 524293, -3997667, 5, 524293, -3997666, 5, 524293, -3997665, 5, 524293, -3997664, 5, 524293, -3997663, 5, 524293, -3997662, 5, 524293, -3997661, 5, 524293, -3997660, 5, 524293, -3997659, 5, 524293, -3997658, 5, 524293, -3997657, 5, 524293, -3997656, 5, 524293, -3997655, 5, 524293, -3997654, 5, 524293, -3866641, 5, 524293, -3866640, 5, 7, -3932137, 5, 6, -3932136, 5, 524293, -3932135, 5, 524293, -3932134, 5, 524293, -3932133, 5, 524293, -3932132, 5, 524293, -3932131, 5, 524293, -3932130, 5, 524293, -3932129, 5, 524293, -3932128, 5, 524293, -3932127, 5, 524293, -3932126, 5, 524293, -3932125, 5, 524293, -3932124, 5, 524293, -3932123, 5, 524293, -3932122, 5, 524293, -3932121, 5, 524293, -3932120, 5, 524293, -3932119, 5, 524293, -3932118, 5, 524293, -3801105, 5, 524293, -3801104, 5, 7, -3866622, 5, 1, -3866621, 5, 2, -3866620, 5, 2, -3866619, 5, 5, -3866601, 5, 6, -3866600, 5, 524293, -3866599, 5, 524293, -3866598, 5, 524293, -3866597, 5, 524293, -3866596, 5, 524293, -3866595, 5, 524293, -3866594, 5, 524293, -3866593, 5, 524293, -3866592, 5, 524293, -3866591, 5, 524293, -3866590, 5, 524293, -3866589, 5, 524293, -3866588, 5, 524293, -3866587, 5, 524293, -3866586, 5, 524293, -3866585, 5, 524293, -3866584, 5, 524293, -3866583, 5, 524293, -3866582, 5, 524293, -3735569, 5, 524293, -3735568, 5, 7, -3801086, 5, 6, -3801085, 5, 524293, -3801084, 5, 524293, -3801083, 5, 8, -3801065, 5, 6, -3801064, 5, 524293, -3801063, 5, 524293, -3801062, 5, 524293, -3801061, 5, 524293, -3801060, 5, 524293, -3801059, 5, 524293, -3801058, 5, 524293, -3801057, 5, 524293, -3801056, 5, 524293, -3801055, 5, 524293, -3801054, 5, 524293, -3801053, 5, 524293, -3801052, 5, 524293, -3801051, 5, 524293, -3801050, 5, 524293, -3801049, 5, 524293, -3801048, 5, 524293, -3801047, 5, 524293, -3801046, 5, 524293, -3670033, 5, 524293, -3670032, 5, 7, -3670018, 5, 1, -3670017, 5, 3, -3735552, 5, 3, -3735551, 5, 3, -3735550, 5, 65539, -3735549, 5, 524293, -3735548, 5, 524293, -3735547, 5, 65538, -3735546, 5, 3, -3735545, 5, 3, -3735544, 5, 3, -3735543, 5, 3, -3735542, 5, 3, -3735541, 5, 3, -3735540, 5, 3, -3735539, 5, 3, -3735538, 5, 3, -3735537, 5, 3, -3735536, 5, 3, -3735535, 5, 3, -3735534, 5, 3, -3735533, 5, 3, -3735532, 5, 3, -3735531, 5, 3, -3735530, 5, 3, -3735529, 5, 65539, -3735528, 5, 524293, -3735527, 5, 524293, -3735526, 5, 524293, -3735525, 5, 524293, -3735524, 5, 524293, -3735523, 5, 524293, -3735522, 5, 524293, -3735521, 5, 524293, -3735520, 5, 524293, -3735519, 5, 524293, -3735518, 5, 524293, -3735517, 5, 524293, -3735516, 5, 524293, -3735515, 5, 524293, -3735514, 5, 524293, -3735513, 5, 524293, -3735512, 5, 524293, -3735511, 5, 524293, -3735510, 5, 524293, -3604497, 5, 524293, -3604496, 5, 7, -3604482, 5, 6, -3604481, 5, 524293, -3670016, 5, 524293, -3670015, 5, 524293, -3670014, 5, 524293, -3670013, 5, 524293, -3670012, 5, 524293, -3670011, 5, 524293, -3670010, 5, 524293, -3670009, 5, 524293, -3670008, 5, 524293, -3670007, 5, 524293, -3670006, 5, 524293, -3670005, 5, 524293, -3670004, 5, 524293, -3670003, 5, 524293, -3670002, 5, 524293, -3670001, 5, 524293, -3670000, 5, 524293, -3669999, 5, 524293, -3669998, 5, 524293, -3669997, 5, 524293, -3669996, 5, 524293, -3669995, 5, 524293, -3669994, 5, 524293, -3669993, 5, 524293, -3669992, 5, 524293, -3669991, 5, 524293, -3669990, 5, 524293, -3669989, 5, 524293, -3669988, 5, 524293, -3669987, 5, 524293, -3669986, 5, 524293, -3669985, 5, 524293, -3669984, 5, 524293, -3669983, 5, 524293, -3669982, 5, 524293, -3669981, 5, 524293, -3669980, 5, 524293, -3669979, 5, 524293, -3669978, 5, 524293, -3669977, 5, 524293, -3669976, 5, 524293, -3669975, 5, 524293, -3669974, 5, 524293, -3538961, 5, 524293, -3538960, 5, 65538, -3538959, 5, 3, -3538958, 5, 4, -3538946, 5, 6, -3538945, 5, 524293, -3604480, 5, 524293, -3604479, 5, 524293, -3604478, 5, 524293, -3604477, 5, 524293, -3604476, 5, 524293, -3604475, 5, 524293, -3604474, 5, 65540, -3604473, 5, 10, -3604472, 5, 10, -3604471, 5, 10, -3604470, 5, 10, -3604469, 5, 10, -3604468, 5, 10, -3604467, 5, 10, -3604466, 5, 10, -3604465, 5, 10, -3604464, 5, 10, -3604463, 5, 10, -3604462, 5, 10, -3604461, 5, 10, -3604460, 5, 10, -3604459, 5, 10, -3604458, 5, 10, -3604457, 5, 10, -3604456, 5, 10, -3604455, 5, 10, -3604454, 5, 10, -3604453, 5, 10, -3604452, 5, 10, -3604451, 5, 10, -3604450, 5, 10, -3604449, 5, 10, -3604448, 5, 10, -3604447, 5, 10, -3604446, 5, 10, -3604445, 5, 10, -3604444, 5, 10, -3604443, 5, 10, -3604442, 5, 10, -3604441, 5, 10, -3604440, 5, 10, -3604439, 5, 65541, -3604438, 5, 524293, -3473425, 5, 524293, -3473424, 5, 65540, -3473423, 5, 10, -3473422, 5, 65536, -3473410, 5, 6, -3473409, 5, 524293, -3538944, 5, 524293, -3538943, 5, 524293, -3538942, 5, 524293, -3538941, 5, 524293, -3538940, 5, 524293, -3538939, 5, 524293, -3538938, 5, 8, -3538903, 5, 6, -3538902, 5, 524293, -3407889, 5, 524293, -3407888, 5, 7, -3407874, 5, 6, -3407873, 5, 524293, -3473408, 5, 524293, -3473407, 5, 524293, -3473406, 5, 524293, -3473405, 5, 524293, -3473404, 5, 524293, -3473403, 5, 524293, -3473402, 5, 8, -3473367, 5, 6, -3473366, 5, 524293, -3342353, 5, 524293, -3342352, 5, 7, -3342338, 5, 6, -3342337, 5, 524293, -3407872, 5, 524293, -3407871, 5, 524293, -3407870, 5, 524293, -3407869, 5, 524293, -3407868, 5, 524293, -3407867, 5, 524293, -3407866, 5, 8, -3407831, 5, 6, -3407830, 5, 524293, -3276817, 5, 524293, -3276816, 5, 7, -3276802, 5, 6, -3276801, 5, 524293, -3342336, 5, 524293, -3342335, 5, 524293, -3342334, 5, 524293, -3342333, 5, 524293, -3342332, 5, 524293, -3342331, 5, 524293, -3342330, 5, 8, -3342295, 5, 6, -3342294, 5, 524293, -3211281, 5, 524293, -3211280, 5, 7, -3211266, 5, 6, -3211265, 5, 524293, -3276800, 5, 524293, -3276799, 5, 524293, -3276798, 5, 524293, -3276797, 5, 524293, -3276796, 5, 524293, -3276795, 5, 524293, -3276794, 5, 8, -3276759, 5, 6, -3276758, 5, 524293, -3145745, 5, 524293, -3145744, 5, 7, -3145734, 5, 1, -3145733, 5, 2, -3145732, 5, 2, -3145731, 5, 2, -3145730, 5, 65539, -3145729, 5, 524293, -3211264, 5, 524293, -3211263, 5, 524293, -3211262, 5, 524293, -3211261, 5, 524293, -3211260, 5, 524293, -3211259, 5, 524293, -3211258, 5, 8, -3211223, 5, 6, -3211222, 5, 524293, -3080209, 5, 524293, -3080208, 5, 7, -3080198, 5, 6, -3080197, 5, 524293, -3080196, 5, 524293, -3080195, 5, 524293, -3080194, 5, 524293, -3080193, 5, 524293, -3145728, 5, 524293, -3145727, 5, 524293, -3145726, 5, 524293, -3145725, 5, 524293, -3145724, 5, 524293, -3145723, 5, 524293, -3145722, 5, 8, -3145687, 5, 6, -3145686, 5, 524293, -3014673, 5, 524293, -3014672, 5, 7, -3014662, 5, 9, -3014661, 5, 10, -3014660, 5, 10, -3014659, 5, 10, -3014658, 5, 10, -3014657, 5, 10, -3080192, 5, 10, -3080191, 5, 10, -3080190, 5, 10, -3080189, 5, 10, -3080188, 5, 10, -3080187, 5, 65541, -3080186, 5, 8, -3080151, 5, 6, -3080150, 5, 524293, -2949137, 5, 524293, -2949136, 5, 7, -3014651, 5, 6, -3014650, 5, 8, -3014615, 5, 6, -3014614, 5, 524293, -2883601, 5, 524293, -2883600, 5, 7, -2949115, 5, 6, -2949114, 5, 8, -2949079, 5, 6, -2949078, 5, 524293, -2818065, 5, 524293, -2818064, 5, 65538, -2818063, 5, 3, -2818062, 5, 3, -2818061, 5, 4, -2883579, 5, 6, -2883578, 5, 8, -2883543, 5, 6, -2883542, 5, 524293, -2752529, 5, 524293, -2752528, 5, 524293, -2752527, 5, 524293, -2752526, 5, 524293, -2752525, 5, 7, -2818043, 5, 6, -2818042, 5, 65538, -2818041, 5, 2, -2818040, 5, 2, -2818039, 5, 2, -2818038, 5, 2, -2818037, 5, 2, -2818036, 5, 2, -2818035, 5, 2, -2818034, 5, 2, -2818033, 5, 2, -2818032, 5, 2, -2818031, 5, 2, -2818030, 5, 4, -2818026, 5, 1, -2818025, 5, 2, -2818024, 5, 2, -2818023, 5, 2, -2818022, 5, 2, -2818021, 5, 2, -2818020, 5, 3, -2818019, 5, 3, -2818018, 5, 3, -2818017, 5, 4, -2818007, 5, 6, -2818006, 5, 524293, -2686993, 5, 524293, -2686992, 5, 524293, -2686991, 5, 524293, -2686990, 5, 524293, -2686989, 5, 7, -2752507, 5, 9, -2752506, 5, 10, -2752505, 5, 10, -2752504, 5, 10, -2752503, 5, 10, -2752502, 5, 10, -2752501, 5, 10, -2752500, 5, 10, -2752499, 5, 10, -2752498, 5, 10, -2752497, 5, 10, -2752496, 5, 10, -2752495, 5, 10, -2752494, 5, 65536, -2752490, 5, 9, -2752489, 5, 10, -2752488, 5, 10, -2752487, 5, 10, -2752486, 5, 10, -2752485, 5, 10, -2752484, 5, 65541, -2752483, 5, 524293, -2752482, 5, 524293, -2752481, 5, 7, -2752471, 5, 6, -2752470, 5, 524293, -2621457, 5, 524293, -2621456, 5, 524293, -2621455, 5, 524293, -2621454, 5, 524293, -2621453, 5, 7, -2686948, 5, 6, -2686947, 5, 524293, -2686946, 5, 524293, -2686945, 5, 7, -2686935, 5, 6, -2686934, 5, 524293, -2555921, 5, 524293, -2555920, 5, 524293, -2555919, 5, 524293, -2555918, 5, 524293, -2555917, 5, 65538, -2555916, 5, 3, -2555915, 5, 3, -2555914, 5, 3, -2555913, 5, 3, -2555912, 5, 3, -2555911, 5, 3, -2555910, 5, 5, -2621412, 5, 6, -2621411, 5, 524293, -2621410, 5, 524293, -2621409, 5, 65538, -2621408, 5, 2, -2621407, 5, 2, -2621406, 5, 5, -2621399, 5, 6, -2621398, 5, 524293, -2490385, 5, 524293, -2490384, 5, 524293, -2490383, 5, 524293, -2490382, 5, 524293, -2490381, 5, 524293, -2490380, 5, 524293, -2490379, 5, 524293, -2490378, 5, 524293, -2490377, 5, 524293, -2490376, 5, 524293, -2490375, 5, 524293, -2490374, 5, 8, -2555876, 5, 6, -2555875, 5, 524293, -2555874, 5, 65540, -2555873, 5, 10, -2555872, 5, 10, -2555871, 5, 10, -2555870, 5, 65536, -2555863, 5, 6, -2555862, 5, 524293, -2424849, 5, 524293, -2424848, 5, 524293, -2424847, 5, 524293, -2424846, 5, 524293, -2424845, 5, 524293, -2424844, 5, 524293, -2424843, 5, 524293, -2424842, 5, 524293, -2424841, 5, 524293, -2424840, 5, 524293, -2424839, 5, 524293, -2424838, 5, 8, -2490365, 5, 1, -2490364, 5, 3, -2490363, 5, 3, -2490362, 5, 3, -2490361, 5, 3, -2490360, 5, 3, -2490359, 5, 3, -2490358, 5, 3, -2490357, 5, 3, -2490356, 5, 3, -2490355, 5, 3, -2490354, 5, 3, -2490353, 5, 3, -2490352, 5, 3, -2490351, 5, 3, -2490350, 5, 3, -2490349, 5, 3, -2490348, 5, 3, -2490347, 5, 3, -2490346, 5, 3, -2490345, 5, 3, -2490344, 5, 3, -2490343, 5, 3, -2490342, 5, 3, -2490341, 5, 3, -2490340, 5, 65539, -2490339, 5, 524293, -2490338, 5, 7, -2490327, 5, 6, -2490326, 5, 524293, -2359313, 5, 524293, -2359312, 5, 524293, -2359311, 5, 524293, -2359310, 5, 524293, -2359309, 5, 524293, -2359308, 5, 524293, -2359307, 5, 524293, -2359306, 5, 524293, -2359305, 5, 524293, -2359304, 5, 524293, -2359303, 5, 524293, -2359302, 5, 8, -2424829, 5, 6, -2424828, 5, 65540, -2424827, 5, 10, -2424826, 5, 10, -2424825, 5, 10, -2424824, 5, 10, -2424823, 5, 10, -2424822, 5, 10, -2424821, 5, 10, -2424820, 5, 10, -2424819, 5, 10, -2424818, 5, 10, -2424817, 5, 10, -2424816, 5, 10, -2424815, 5, 10, -2424814, 5, 10, -2424813, 5, 10, -2424812, 5, 10, -2424811, 5, 10, -2424810, 5, 10, -2424809, 5, 10, -2424808, 5, 10, -2424807, 5, 10, -2424806, 5, 10, -2424805, 5, 65541, -2424804, 5, 524293, -2424803, 5, 524293, -2424802, 5, 7, -2424791, 5, 6, -2424790, 5, 524293, -2293777, 5, 524293, -2293776, 5, 524293, -2293775, 5, 524293, -2293774, 5, 524293, -2293773, 5, 524293, -2293772, 5, 524293, -2293771, 5, 524293, -2293770, 5, 524293, -2293769, 5, 524293, -2293768, 5, 524293, -2293767, 5, 524293, -2293766, 5, 65538, -2293765, 5, 3, -2293764, 5, 3, -2293763, 5, 3, -2293762, 5, 3, -2293761, 5, 3, -2359296, 5, 3, -2359295, 5, 3, -2359294, 5, 3, -2359293, 5, 65539, -2359292, 5, 7, -2359269, 5, 6, -2359268, 5, 524293, -2359267, 5, 524293, -2359266, 5, 65538, -2359265, 5, 3, -2359264, 5, 3, -2359263, 5, 3, -2359262, 5, 5, -2359255, 5, 6, -2359254, 5, 524293, -2228241, 5, 524293, -2228240, 5, 524293, -2228239, 5, 524293, -2228238, 5, 524293, -2228237, 5, 524293, -2228236, 5, 524293, -2228235, 5, 524293, -2228234, 5, 524293, -2228233, 5, 524293, -2228232, 5, 524293, -2228231, 5, 524293, -2228230, 5, 524293, -2228229, 5, 524293, -2228228, 5, 524293, -2228227, 5, 524293, -2228226, 5, 524293, -2228225, 5, 524293, -2293760, 5, 524293, -2293759, 5, 524293, -2293758, 5, 524293, -2293757, 5, 524293, -2293756, 5, 7, -2293749, 5, 0, -2293748, 5, 0, -2293733, 5, 9, -2293732, 5, 10, -2293731, 5, 10, -2293730, 5, 10, -2293729, 5, 10, -2293728, 5, 10, -2293727, 5, 10, -2293726, 5, 65536, -2293719, 5, 6, -2293718, 5, 524293, -2162705, 5, 524293, -2162704, 5, 524293, -2162703, 5, 524293, -2162702, 5, 524293, -2162701, 5, 524293, -2162700, 5, 524293, -2162699, 5, 524293, -2162698, 5, 524293, -2162697, 5, 524293, -2162696, 5, 524293, -2162695, 5, 524293, -2162694, 5, 524293, -2162693, 5, 524293, -2162692, 5, 524293, -2162691, 5, 524293, -2162690, 5, 524293, -2162689, 5, 524293, -2228224, 5, 524293, -2228223, 5, 524293, -2228222, 5, 524293, -2228221, 5, 524293, -2228220, 5, 7, -2228214, 5, 0, -2228213, 5, 0, -2228183, 5, 6, -2228182, 5, 524293, -2097169, 5, 524293, -2097168, 5, 524293, -2097167, 5, 524293, -2097166, 5, 524293, -2097165, 5, 524293, -2097164, 5, 524293, -2097163, 5, 524293, -2097162, 5, 524293, -2097161, 5, 524293, -2097160, 5, 524293, -2097159, 5, 524293, -2097158, 5, 524293, -2097157, 5, 524293, -2097156, 5, 524293, -2097155, 5, 524293, -2097154, 5, 524293, -2097153, 5, 524293, -2162688, 5, 524293, -2162687, 5, 524293, -2162686, 5, 524293, -2162685, 5, 524293, -2162684, 5, 65538, -2162683, 5, 2, -2162682, 5, 2, -2162681, 5, 4, -2162647, 5, 6, -2162646, 5, 524293, -2031633, 5, 524293, -2031632, 5, 524293, -2031631, 5, 524293, -2031630, 5, 524293, -2031629, 5, 524293, -2031628, 5, 524293, -2031627, 5, 524293, -2031626, 5, 524293, -2031625, 5, 524293, -2031624, 5, 524293, -2031623, 5, 524293, -2031622, 5, 524293, -2031621, 5, 524293, -2031620, 5, 524293, -2031619, 5, 524293, -2031618, 5, 524293, -2031617, 5, 524293, -2097152, 5, 524293, -2097151, 5, 524293, -2097150, 5, 524293, -2097149, 5, 524293, -2097148, 5, 524293, -2097147, 5, 524293, -2097146, 5, 524293, -2097145, 5, 7, -2097111, 5, 6, -2097110, 5, 524293, -1966097, 5, 524293, -1966096, 5, 524293, -1966095, 5, 524293, -1966094, 5, 524293, -1966093, 5, 524293, -1966092, 5, 524293, -1966091, 5, 524293, -1966090, 5, 524293, -1966089, 5, 524293, -1966088, 5, 524293, -1966087, 5, 524293, -1966086, 5, 524293, -1966085, 5, 524293, -1966084, 5, 524293, -1966083, 5, 524293, -1966082, 5, 524293, -1966081, 5, 524293, -2031616, 5, 524293, -2031615, 5, 524293, -2031614, 5, 524293, -2031613, 5, 524293, -2031612, 5, 524293, -2031611, 5, 524293, -2031610, 5, 524293, -2031609, 5, 7, -2031575, 5, 6, -2031574, 5, 524293, -1900561, 5, 524293, -1900560, 5, 524293, -1900559, 5, 524293, -1900558, 5, 524293, -1900557, 5, 524293, -1900556, 5, 524293, -1900555, 5, 524293, -1900554, 5, 524293, -1900553, 5, 524293, -1900552, 5, 524293, -1900551, 5, 524293, -1900550, 5, 524293, -1900549, 5, 524293, -1900548, 5, 524293, -1900547, 5, 524293, -1900546, 5, 524293, -1900545, 5, 524293, -1966080, 5, 524293, -1966079, 5, 524293, -1966078, 5, 524293, -1966077, 5, 524293, -1966076, 5, 524293, -1966075, 5, 524293, -1966074, 5, 524293, -1966073, 5, 7, -1966039, 5, 6, -1966038, 5, 524293, -1835025, 5, 524293, -1835024, 5, 524293, -1835023, 5, 524293, -1835022, 5, 524293, -1835021, 5, 524293, -1835020, 5, 524293, -1835019, 5, 524293, -1835018, 5, 524293, -1835017, 5, 524293, -1835016, 5, 524293, -1835015, 5, 524293, -1835014, 5, 524293, -1835013, 5, 524293, -1835012, 5, 524293, -1835011, 5, 524293, -1835010, 5, 524293, -1835009, 5, 524293, -1900544, 5, 524293, -1900543, 5, 524293, -1900542, 5, 524293, -1900541, 5, 524293, -1900540, 5, 524293, -1900539, 5, 524293, -1900538, 5, 524293, -1900537, 5, 7, -1900503, 5, 6, -1900502, 5, 524293, -1769489, 5, 524293, -1769488, 5, 524293, -1769487, 5, 524293, -1769486, 5, 524293, -1769485, 5, 524293, -1769484, 5, 524293, -1769483, 5, 524293, -1769482, 5, 524293, -1769481, 5, 524293, -1769480, 5, 524293, -1769479, 5, 524293, -1769478, 5, 524293, -1769477, 5, 524293, -1769476, 5, 524293, -1769475, 5, 524293, -1769474, 5, 524293, -1769473, 5, 524293, -1835008, 5, 524293, -1835007, 5, 524293, -1835006, 5, 524293, -1835005, 5, 524293, -1835004, 5, 524293, -1835003, 5, 524293, -1835002, 5, 524293, -1835001, 5, 7, -1834994, 5, 1, -1834993, 5, 2, -1834992, 5, 2, -1834991, 5, 2, -1834990, 5, 2, -1834989, 5, 2, -1834988, 5, 2, -1834987, 5, 2, -1834986, 5, 2, -1834985, 5, 2, -1834984, 5, 2, -1834983, 5, 2, -1834982, 5, 2, -1834981, 5, 2, -1834980, 5, 2, -1834979, 5, 2, -1834978, 5, 2, -1834977, 5, 2, -1834976, 5, 2, -1834975, 5, 2, -1834974, 5, 2, -1834973, 5, 2, -1834972, 5, 2, -1834971, 5, 2, -1834970, 5, 2, -1834969, 5, 2, -1834968, 5, 2, -1834967, 5, 65539, -1834966, 5, 524293, -1703953, 5, 524293, -1703952, 5, 524293, -1703951, 5, 524293, -1703950, 5, 524293, -1703949, 5, 524293, -1703948, 5, 524293, -1703947, 5, 524293, -1703946, 5, 524293, -1703945, 5, 524293, -1703944, 5, 524293, -1703943, 5, 524293, -1703942, 5, 524293, -1703941, 5, 524293, -1703940, 5, 524293, -1703939, 5, 524293, -1703938, 5, 524293, -1703937, 5, 524293, -1769472, 5, 524293, -1769471, 5, 524293, -1769470, 5, 524293, -1769469, 5, 524293, -1769468, 5, 524293, -1769467, 5, 524293, -1769466, 5, 524293, -1769465, 5, 7, -1769458, 5, 6, -1769457, 5, 524293, -1769456, 5, 524293, -1769455, 5, 524293, -1769454, 5, 524293, -1769453, 5, 524293, -1769452, 5, 524293, -1769451, 5, 524293, -1769450, 5, 524293, -1769449, 5, 524293, -1769448, 5, 524293, -1769447, 5, 524293, -1769446, 5, 524293, -1769445, 5, 524293, -1769444, 5, 524293, -1769443, 5, 524293, -1769442, 5, 524293, -1769441, 5, 524293, -1769440, 5, 524293, -1769439, 5, 524293, -1769438, 5, 524293, -1769437, 5, 524293, -1769436, 5, 524293, -1769435, 5, 524293, -1769434, 5, 524293, -1769433, 5, 524293, -1769432, 5, 524293, -1769431, 5, 524293, -1769430, 5, 524293, -1638417, 5, 524293, -1638416, 5, 524293, -1638415, 5, 524293, -1638414, 5, 524293, -1638413, 5, 524293, -1638412, 5, 524293, -1638411, 5, 524293, -1638410, 5, 524293, -1638409, 5, 524293, -1638408, 5, 524293, -1638407, 5, 524293, -1638406, 5, 524293, -1638405, 5, 524293, -1638404, 5, 524293, -1638403, 5, 524293, -1638402, 5, 524293, -1638401, 5, 524293, -1703936, 5, 524293, -1703935, 5, 524293, -1703934, 5, 524293, -1703933, 5, 524293, -1703932, 5, 524293, -1703931, 5, 524293, -1703930, 5, 65540, -1703929, 5, 65536, -1703922, 5, 9, -1703921, 5, 10, -1703920, 5, 65541, -1703919, 5, 524293, -1703918, 5, 524293, -1703917, 5, 524293, -1703916, 5, 524293, -1703915, 5, 524293, -1703914, 5, 524293, -1703913, 5, 524293, -1703912, 5, 524293, -1703911, 5, 524293, -1703910, 5, 524293, -1703909, 5, 524293, -1703908, 5, 524293, -1703907, 5, 524293, -1703906, 5, 524293, -1703905, 5, 524293, -1703904, 5, 524293, -1703903, 5, 524293, -1703902, 5, 524293, -1703901, 5, 524293, -1703900, 5, 524293, -1703899, 5, 524293, -1703898, 5, 524293, -1703897, 5, 524293, -1703896, 5, 524293, -1703895, 5, 524293, -1703894, 5, 524293, -1572881, 5, 524293, -1572880, 5, 524293, -1572879, 5, 524293, -1572878, 5, 524293, -1572877, 5, 524293, -1572876, 5, 524293, -1572875, 5, 524293, -1572874, 5, 524293, -1572873, 5, 524293, -1572872, 5, 524293, -1572871, 5, 524293, -1572870, 5, 524293, -1572869, 5, 524293, -1572868, 5, 524293, -1572867, 5, 524293, -1572866, 5, 524293, -1572865, 5, 524293, -1638400, 5, 524293, -1638399, 5, 524293, -1638398, 5, 524293, -1638397, 5, 524293, -1638396, 5, 524293, -1638395, 5, 524293, -1638394, 5, 7, -1638384, 5, 9, -1638383, 5, 10, -1638382, 5, 10, -1638381, 5, 10, -1638380, 5, 10, -1638379, 5, 10, -1638378, 5, 10, -1638377, 5, 10, -1638376, 5, 10, -1638375, 5, 10, -1638374, 5, 10, -1638373, 5, 10, -1638372, 5, 10, -1638371, 5, 10, -1638370, 5, 10, -1638369, 5, 10, -1638368, 5, 10, -1638367, 5, 10, -1638366, 5, 10, -1638365, 5, 65541, -1638364, 5, 524293, -1638363, 5, 524293, -1638362, 5, 524293, -1638361, 5, 524293, -1638360, 5, 524293, -1638359, 5, 524293, -1638358, 5, 524293, -1507345, 5, 524293, -1507344, 5, 524293, -1507343, 5, 524293, -1507342, 5, 524293, -1507341, 5, 524293, -1507340, 5, 524293, -1507339, 5, 524293, -1507338, 5, 524293, -1507337, 5, 524293, -1507336, 5, 524293, -1507335, 5, 524293, -1507334, 5, 524293, -1507333, 5, 524293, -1507332, 5, 524293, -1507331, 5, 524293, -1507330, 5, 524293, -1507329, 5, 524293, -1572864, 5, 524293, -1572863, 5, 524293, -1572862, 5, 524293, -1572861, 5, 524293, -1572860, 5, 524293, -1572859, 5, 524293, -1572858, 5, 7, -1572829, 5, 6, -1572828, 5, 524293, -1572827, 5, 524293, -1572826, 5, 524293, -1572825, 5, 524293, -1572824, 5, 524293, -1572823, 5, 524293, -1572822, 5, 524293, -1441809, 5, 524293, -1441808, 5, 524293, -1441807, 5, 524293, -1441806, 5, 524293, -1441805, 5, 524293, -1441804, 5, 524293, -1441803, 5, 524293, -1441802, 5, 524293, -1441801, 5, 524293, -1441800, 5, 524293, -1441799, 5, 524293, -1441798, 5, 524293, -1441797, 5, 524293, -1441796, 5, 524293, -1441795, 5, 524293, -1441794, 5, 524293, -1441793, 5, 524293, -1507328, 5, 524293, -1507327, 5, 524293, -1507326, 5, 524293, -1507325, 5, 524293, -1507324, 5, 524293, -1507323, 5, 524293, -1507322, 5, 65538, -1507321, 5, 4, -1507293, 5, 6, -1507292, 5, 524293, -1507291, 5, 524293, -1507290, 5, 524293, -1507289, 5, 524293, -1507288, 5, 524293, -1507287, 5, 524293, -1507286, 5, 524293, -1376273, 5, 524293, -1376272, 5, 524293, -1376271, 5, 524293, -1376270, 5, 524293, -1376269, 5, 524293, -1376268, 5, 524293, -1376267, 5, 524293, -1376266, 5, 524293, -1376265, 5, 524293, -1376264, 5, 524293, -1376263, 5, 524293, -1376262, 5, 524293, -1376261, 5, 524293, -1376260, 5, 524293, -1376259, 5, 524293, -1376258, 5, 524293, -1376257, 5, 524293, -1441792, 5, 524293, -1441791, 5, 524293, -1441790, 5, 524293, -1441789, 5, 524293, -1441788, 5, 524293, -1441787, 5, 524293, -1441786, 5, 524293, -1441785, 5, 7, -1441757, 5, 6, -1441756, 5, 524293, -1441755, 5, 524293, -1441754, 5, 524293, -1441753, 5, 524293, -1441752, 5, 524293, -1441751, 5, 524293, -1441750, 5, 524293, -1310737, 5, 524293, -1310736, 5, 524293, -1310735, 5, 524293, -1310734, 5, 524293, -1310733, 5, 524293, -1310732, 5, 524293, -1310731, 5, 524293, -1310730, 5, 524293, -1310729, 5, 524293, -1310728, 5, 524293, -1310727, 5, 524293, -1310726, 5, 524293, -1310725, 5, 524293, -1310724, 5, 524293, -1310723, 5, 524293, -1310722, 5, 524293, -1310721, 5, 524293, -1376256, 5, 524293, -1376255, 5, 524293, -1376254, 5, 524293, -1376253, 5, 524293, -1376252, 5, 524293, -1376251, 5, 524293, -1376250, 5, 524293, -1376249, 5, 65538, -1376248, 5, 3, -1376247, 5, 3, -1376246, 5, 3, -1376245, 5, 3, -1376244, 5, 3, -1376243, 5, 3, -1376242, 5, 3, -1376241, 5, 3, -1376240, 5, 3, -1376239, 5, 3, -1376238, 5, 3, -1376237, 5, 3, -1376236, 5, 3, -1376235, 5, 3, -1376234, 5, 3, -1376233, 5, 3, -1376232, 5, 3, -1376231, 5, 3, -1376230, 5, 3, -1376229, 5, 4, -1376221, 5, 6, -1376220, 5, 524293, -1376219, 5, 524293, -1376218, 5, 524293, -1376217, 5, 524293, -1376216, 5, 524293, -1376215, 5, 524293, -1376214, 5, 524293, -1245201, 5, 524293, -1245200, 5, 524293, -1245199, 5, 524293, -1245198, 5, 524293, -1245197, 5, 524293, -1245196, 5, 524293, -1245195, 5, 524293, -1245194, 5, 524293, -1245193, 5, 524293, -1245192, 5, 524293, -1245191, 5, 524293, -1245190, 5, 524293, -1245189, 5, 524293, -1245188, 5, 524293, -1245187, 5, 524293, -1245186, 5, 524293, -1245185, 5, 524293, -1310720, 5, 524293, -1310719, 5, 524293, -1310718, 5, 524293, -1310717, 5, 524293, -1310716, 5, 524293, -1310715, 5, 524293, -1310714, 5, 524293, -1310713, 5, 524293, -1310712, 5, 524293, -1310711, 5, 524293, -1310710, 5, 524293, -1310709, 5, 524293, -1310708, 5, 524293, -1310707, 5, 524293, -1310706, 5, 524293, -1310705, 5, 524293, -1310704, 5, 524293, -1310703, 5, 524293, -1310702, 5, 524293, -1310701, 5, 524293, -1310700, 5, 524293, -1310699, 5, 524293, -1310698, 5, 524293, -1310697, 5, 524293, -1310696, 5, 524293, -1310695, 5, 524293, -1310694, 5, 524293, -1310693, 5, 8, -1310685, 5, 6, -1310684, 5, 524293, -1310683, 5, 524293, -1310682, 5, 524293, -1310681, 5, 524293, -1310680, 5, 524293, -1310679, 5, 524293, -1310678, 5, 524293, -1179665, 5, 524293, -1179664, 5, 524293, -1179663, 5, 524293, -1179662, 5, 524293, -1179661, 5, 524293, -1179660, 5, 524293, -1179659, 5, 524293, -1179658, 5, 524293, -1179657, 5, 524293, -1179656, 5, 524293, -1179655, 5, 524293, -1179654, 5, 524293, -1179653, 5, 524293, -1179652, 5, 524293, -1179651, 5, 524293, -1179650, 5, 524293, -1179649, 5, 524293, -1245184, 5, 524293, -1245183, 5, 524293, -1245182, 5, 524293, -1245181, 5, 524293, -1245180, 5, 524293, -1245179, 5, 524293, -1245178, 5, 524293, -1245177, 5, 524293, -1245176, 5, 524293, -1245175, 5, 524293, -1245174, 5, 524293, -1245173, 5, 524293, -1245172, 5, 524293, -1245171, 5, 524293, -1245170, 5, 524293, -1245169, 5, 524293, -1245168, 5, 524293, -1245167, 5, 524293, -1245166, 5, 524293, -1245165, 5, 524293, -1245164, 5, 524293, -1245163, 5, 524293, -1245162, 5, 524293, -1245161, 5, 524293, -1245160, 5, 524293, -1245159, 5, 524293, -1245158, 5, 524293, -1245157, 5, 8, -1245149, 5, 6, -1245148, 5, 524293, -1245147, 5, 524293, -1245146, 5, 524293, -1245145, 5, 524293, -1245144, 5, 524293, -1245143, 5, 524293, -1245142, 5, 524293, -1114129, 5, 524293, -1114128, 5, 524293, -1114127, 5, 524293, -1114126, 5, 524293, -1114125, 5, 524293, -1114124, 5, 524293, -1114123, 5, 524293, -1114122, 5, 524293, -1114121, 5, 524293, -1114120, 5, 524293, -1114119, 5, 524293, -1114118, 5, 524293, -1114117, 5, 524293, -1114116, 5, 524293, -1114115, 5, 524293, -1114114, 5, 524293, -1114113, 5, 524293, -1179648, 5, 524293, -1179647, 5, 524293, -1179646, 5, 524293, -1179645, 5, 524293, -1179644, 5, 524293, -1179643, 5, 524293, -1179642, 5, 524293, -1179641, 5, 524293, -1179640, 5, 524293, -1179639, 5, 524293, -1179638, 5, 524293, -1179637, 5, 524293, -1179636, 5, 524293, -1179635, 5, 524293, -1179634, 5, 524293, -1179633, 5, 524293, -1179632, 5, 524293, -1179631, 5, 524293, -1179630, 5, 524293, -1179629, 5, 524293, -1179628, 5, 524293, -1179627, 5, 524293, -1179626, 5, 524293, -1179625, 5, 524293, -1179624, 5, 524293, -1179623, 5, 524293, -1179622, 5, 524293, -1179621, 5, 8, -1179613, 5, 6, -1179612, 5, 524293, -1179611, 5, 524293, -1179610, 5, 524293, -1179609, 5, 524293, -1179608, 5, 524293, -1179607, 5, 524293, -1179606, 5, 524293, -1048593, 5, 524293, -1048592, 5, 524293, -1048591, 5, 524293, -1048590, 5, 524293, -1048589, 5, 524293, -1048588, 5, 524293, -1048587, 5, 524293, -1048586, 5, 524293, -1048585, 5, 524293, -1048584, 5, 524293, -1048583, 5, 524293, -1048582, 5, 524293, -1048581, 5, 524293, -1048580, 5, 524293, -1048579, 5, 524293, -1048578, 5, 524293, -1048577, 5, 524293, -1114112, 5, 524293, -1114111, 5, 524293, -1114110, 5, 524293, -1114109, 5, 524293, -1114108, 5, 524293, -1114107, 5, 524293, -1114106, 5, 524293, -1114105, 5, 524293, -1114104, 5, 524293, -1114103, 5, 524293, -1114102, 5, 524293, -1114101, 5, 524293, -1114100, 5, 524293, -1114099, 5, 524293, -1114098, 5, 524293, -1114097, 5, 524293, -1114096, 5, 524293, -1114095, 5, 524293, -1114094, 5, 524293, -1114093, 5, 524293, -1114092, 5, 524293, -1114091, 5, 524293, -1114090, 5, 524293, -1114089, 5, 524293, -1114088, 5, 524293, -1114087, 5, 524293, -1114086, 5, 524293, -1114085, 5, 8, -1114077, 5, 6, -1114076, 5, 524293, -1114075, 5, 524293, -1114074, 5, 524293, -1114073, 5, 524293, -1114072, 5, 524293, -1114071, 5, 524293, -1114070, 5, 524293, -983057, 5, 524293, -983056, 5, 524293, -983055, 5, 524293, -983054, 5, 524293, -983053, 5, 524293, -983052, 5, 524293, -983051, 5, 524293, -983050, 5, 524293, -983049, 5, 524293, -983048, 5, 524293, -983047, 5, 524293, -983046, 5, 524293, -983045, 5, 524293, -983044, 5, 524293, -983043, 5, 524293, -983042, 5, 524293, -983041, 5, 524293, -1048576, 5, 524293, -1048575, 5, 524293, -1048574, 5, 524293, -1048573, 5, 524293, -1048572, 5, 524293, -1048571, 5, 524293, -1048570, 5, 524293, -1048569, 5, 524293, -1048568, 5, 524293, -1048567, 5, 524293, -1048566, 5, 524293, -1048565, 5, 524293, -1048564, 5, 524293, -1048563, 5, 524293, -1048562, 5, 524293, -1048561, 5, 524293, -1048560, 5, 524293, -1048559, 5, 524293, -1048558, 5, 524293, -1048557, 5, 524293, -1048556, 5, 524293, -1048555, 5, 524293, -1048554, 5, 524293, -1048553, 5, 524293, -1048552, 5, 524293, -1048551, 5, 524293, -1048550, 5, 524293, -1048549, 5, 8, -1048541, 5, 6, -1048540, 5, 524293, -1048539, 5, 524293, -1048538, 5, 524293, -1048537, 5, 524293, -1048536, 5, 524293, -1048535, 5, 524293, -1048534, 5, 524293, -917521, 5, 524293, -917520, 5, 524293, -917519, 5, 524293, -917518, 5, 524293, -917517, 5, 524293, -917516, 5, 524293, -917515, 5, 524293, -917514, 5, 524293, -917513, 5, 524293, -917512, 5, 524293, -917511, 5, 524293, -917510, 5, 524293, -917509, 5, 524293, -917508, 5, 524293, -917507, 5, 524293, -917506, 5, 524293, -917505, 5, 524293, -983040, 5, 524293, -983039, 5, 524293, -983038, 5, 524293, -983037, 5, 524293, -983036, 5, 524293, -983035, 5, 524293, -983034, 5, 524293, -983033, 5, 524293, -983032, 5, 524293, -983031, 5, 524293, -983030, 5, 524293, -983029, 5, 524293, -983028, 5, 524293, -983027, 5, 524293, -983026, 5, 524293, -983025, 5, 524293, -983024, 5, 524293, -983023, 5, 524293, -983022, 5, 524293, -983021, 5, 524293, -983020, 5, 524293, -983019, 5, 524293, -983018, 5, 524293, -983017, 5, 524293, -983016, 5, 524293, -983015, 5, 524293, -983014, 5, 524293, -983013, 5, 8, -983005, 5, 6, -983004, 5, 524293, -983003, 5, 524293, -983002, 5, 524293, -983001, 5, 524293, -983000, 5, 524293, -982999, 5, 524293, -982998, 5, 524293, -851985, 5, 524293, -851984, 5, 65540, -851983, 5, 10, -851982, 5, 10, -851981, 5, 10, -851980, 5, 10, -851979, 5, 10, -851978, 5, 10, -851977, 5, 10, -851976, 5, 10, -851975, 5, 10, -851974, 5, 10, -851973, 5, 10, -851972, 5, 10, -851971, 5, 10, -851970, 5, 10, -851969, 5, 10, -917504, 5, 10, -917503, 5, 10, -917502, 5, 10, -917501, 5, 10, -917500, 5, 10, -917499, 5, 10, -917498, 5, 10, -917497, 5, 10, -917496, 5, 10, -917495, 5, 10, -917494, 5, 10, -917493, 5, 10, -917492, 5, 10, -917491, 5, 10, -917490, 5, 10, -917489, 5, 10, -917488, 5, 10, -917487, 5, 10, -917486, 5, 10, -917485, 5, 10, -917484, 5, 10, -917483, 5, 10, -917482, 5, 10, -917481, 5, 10, -917480, 5, 10, -917479, 5, 10, -917478, 5, 10, -917477, 5, 65536, -917469, 5, 6, -917468, 5, 524293, -917467, 5, 524293, -917466, 5, 524293, -917465, 5, 524293, -917464, 5, 524293, -917463, 5, 524293, -917462, 5, 524293, -786449, 5, 524293, -786448, 5, 7, -851933, 5, 6, -851932, 5, 524293, -851931, 5, 524293, -851930, 5, 524293, -851929, 5, 524293, -851928, 5, 524293, -851927, 5, 524293, -851926, 5, 524293, -720913, 5, 524293, -720912, 5, 7, -786397, 5, 6, -786396, 5, 524293, -786395, 5, 524293, -786394, 5, 524293, -786393, 5, 524293, -786392, 5, 524293, -786391, 5, 524293, -786390, 5, 524293, -655377, 5, 524293, -655376, 5, 7, -720861, 5, 6, -720860, 5, 524293, -720859, 5, 524293, -720858, 5, 524293, -720857, 5, 524293, -720856, 5, 524293, -720855, 5, 524293, -720854, 5, 524293, -589841, 5, 524293, -589840, 5, 7, -655325, 5, 6, -655324, 5, 524293, -655323, 5, 524293, -655322, 5, 524293, -655321, 5, 524293, -655320, 5, 524293, -655319, 5, 524293, -655318, 5, 524293, -524305, 5, 524293, -524304, 5, 7, -589789, 5, 6, -589788, 5, 524293, -589787, 5, 524293, -589786, 5, 524293, -589785, 5, 524293, -589784, 5, 524293, -589783, 5, 524293, -589782, 5, 524293, -458769, 5, 524293, -458768, 5, 7, -524253, 5, 6, -524252, 5, 524293, -524251, 5, 524293, -524250, 5, 524293, -524249, 5, 524293, -524248, 5, 524293, -524247, 5, 524293, -524246, 5, 524293, -393233, 5, 524293, -393232, 5, 7, -458717, 5, 6, -458716, 5, 524293, -458715, 5, 524293, -458714, 5, 524293, -458713, 5, 524293, -458712, 5, 524293, -458711, 5, 524293, -458710, 5, 524293, -327697, 5, 524293, -327696, 5, 7, -393188, 5, 1, -393187, 5, 3, -393186, 5, 3, -393185, 5, 3, -393184, 5, 3, -393183, 5, 3, -393182, 5, 3, -393181, 5, 65539, -393180, 5, 524293, -393179, 5, 524293, -393178, 5, 524293, -393177, 5, 524293, -393176, 5, 524293, -393175, 5, 524293, -393174, 5, 524293, -262161, 5, 524293, -262160, 5, 7, -327652, 5, 6, -327651, 5, 524293, -327650, 5, 524293, -327649, 5, 524293, -327648, 5, 524293, -327647, 5, 524293, -327646, 5, 524293, -327645, 5, 524293, -327644, 5, 524293, -327643, 5, 524293, -327642, 5, 524293, -327641, 5, 524293, -327640, 5, 524293, -327639, 5, 524293, -327638, 5, 524293, -196625, 5, 524293, -196624, 5, 7, -262116, 5, 6, -262115, 5, 524293, -262114, 5, 524293, -262113, 5, 524293, -262112, 5, 524293, -262111, 5, 524293, -262110, 5, 524293, -262109, 5, 524293, -262108, 5, 524293, -262107, 5, 524293, -262106, 5, 524293, -262105, 5, 524293, -262104, 5, 524293, -262103, 5, 524293, -262102, 5, 524293, -131089, 5, 524293, -131088, 5, 7, -196588, 5, 1, -196587, 5, 3, -196586, 5, 3, -196585, 5, 3, -196584, 5, 3, -196583, 5, 3, -196582, 5, 3, -196581, 5, 3, -196580, 5, 65539, -196579, 5, 524293, -196578, 5, 524293, -196577, 5, 524293, -196576, 5, 524293, -196575, 5, 524293, -196574, 5, 524293, -196573, 5, 524293, -196572, 5, 524293, -196571, 5, 524293, -196570, 5, 524293, -196569, 5, 524293, -196568, 5, 524293, -196567, 5, 524293, -196566, 5, 524293, -65553, 5, 524293, -65552, 5, 7, -131052, 5, 6, -131051, 5, 524293, -131050, 5, 524293, -131049, 5, 524293, -131048, 5, 524293, -131047, 5, 524293, -131046, 5, 524293, -131045, 5, 524293, -131044, 5, 524293, -131043, 5, 524293, -131042, 5, 524293, -131041, 5, 524293, -131040, 5, 524293, -131039, 5, 524293, -131038, 5, 524293, -131037, 5, 524293, -131036, 5, 524293, -131035, 5, 524293, -131034, 5, 524293, -131033, 5, 524293, -131032, 5, 524293, -131031, 5, 524293, -131030, 5, 524293, -17, 5, 524293, -16, 5, 7, -65533, 5, 1, -65532, 5, 3, -65531, 5, 3, -65530, 5, 3, -65529, 5, 3, -65528, 5, 3, -65527, 5, 3, -65526, 5, 5, -65516, 5, 6, -65515, 5, 524293, -65514, 5, 524293, -65513, 5, 524293, -65512, 5, 524293, -65511, 5, 524293, -65510, 5, 524293, -65509, 5, 524293, -65508, 5, 524293, -65507, 5, 524293, -65506, 5, 524293, -65505, 5, 524293, -65504, 5, 524293, -65503, 5, 524293, -65502, 5, 524293, -65501, 5, 524293, -65500, 5, 524293, -65499, 5, 524293, -65498, 5, 524293, -65497, 5, 524293, -65496, 5, 524293, -65495, 5, 524293, -65494, 5, 524293, 65519, 5, 524293, 65520, 5, 7, 3, 5, 6, 4, 5, 524293, 5, 5, 524293, 6, 5, 524293, 7, 5, 524293, 8, 5, 524293, 9, 5, 524293, 10, 5, 7, 20, 5, 6, 21, 5, 524293, 22, 5, 524293, 23, 5, 524293, 24, 5, 524293, 25, 5, 524293, 26, 5, 524293, 27, 5, 524293, 28, 5, 524293, 29, 5, 524293, 30, 5, 524293, 31, 5, 524293, 32, 5, 524293, 33, 5, 524293, 34, 5, 524293, 35, 5, 524293, 36, 5, 524293, 37, 5, 524293, 38, 5, 524293, 39, 5, 524293, 40, 5, 524293, 41, 5, 524293, 42, 5, 524293, 131055, 5, 524293, 131056, 5, 7, 65539, 5, 6, 65540, 5, 524293, 65541, 5, 524293, 65542, 5, 524293, 65543, 5, 524293, 65544, 5, 524293, 65545, 5, 524293, 65546, 5, 7, 65556, 5, 6, 65557, 5, 524293, 65558, 5, 524293, 65559, 5, 524293, 65560, 5, 524293, 65561, 5, 524293, 65562, 5, 524293, 65563, 5, 524293, 65564, 5, 524293, 65565, 5, 524293, 65566, 5, 524293, 65567, 5, 524293, 65568, 5, 524293, 65569, 5, 524293, 65570, 5, 524293, 65571, 5, 524293, 65572, 5, 524293, 65573, 5, 524293, 65574, 5, 524293, 65575, 5, 524293, 65576, 5, 524293, 65577, 5, 524293, 65578, 5, 524293, 196591, 5, 524293, 196592, 5, 7, 131075, 5, 6, 131076, 5, 524293, 131077, 5, 524293, 131078, 5, 524293, 131079, 5, 524293, 131080, 5, 524293, 131081, 5, 524293, 131082, 5, 65538, 131083, 5, 3, 131084, 5, 3, 131085, 5, 3, 131086, 5, 3, 131087, 5, 3, 131088, 5, 3, 131089, 5, 3, 131090, 5, 3, 131091, 5, 3, 131092, 5, 65539, 131093, 5, 524293, 131094, 5, 524293, 131095, 5, 524293, 131096, 5, 524293, 131097, 5, 524293, 131098, 5, 524293, 131099, 5, 524293, 131100, 5, 524293, 131101, 5, 524293, 131102, 5, 524293, 131103, 5, 524293, 131104, 5, 524293, 131105, 5, 524293, 131106, 5, 524293, 131107, 5, 524293, 131108, 5, 524293, 131109, 5, 524293, 131110, 5, 524293, 131111, 5, 524293, 131112, 5, 524293, 131113, 5, 524293, 131114, 5, 524293, 262127, 5, 524293, 262128, 5, 7, 196611, 5, 6, 196612, 5, 524293, 196613, 5, 524293, 196614, 5, 524293, 196615, 5, 524293, 196616, 5, 524293, 196617, 5, 524293, 196618, 5, 524293, 196619, 5, 524293, 196620, 5, 524293, 196621, 5, 524293, 196622, 5, 524293, 196623, 5, 524293, 196624, 5, 524293, 196625, 5, 524293, 196626, 5, 524293, 196627, 5, 524293, 196628, 5, 524293, 196629, 5, 524293, 196630, 5, 524293, 196631, 5, 524293, 196632, 5, 524293, 196633, 5, 524293, 196634, 5, 524293, 196635, 5, 524293, 196636, 5, 524293, 196637, 5, 524293, 196638, 5, 524293, 196639, 5, 524293, 196640, 5, 524293, 196641, 5, 524293, 196642, 5, 524293, 196643, 5, 524293, 196644, 5, 524293, 196645, 5, 524293, 196646, 5, 524293, 196647, 5, 524293, 196648, 5, 524293, 196649, 5, 524293, 196650, 5, 524293, 327663, 5, 524293, 327664, 5, 7, 262147, 5, 6, 262148, 5, 524293, 262149, 5, 524293, 262150, 5, 524293, 262151, 5, 524293, 262152, 5, 524293, 262153, 5, 524293, 262154, 5, 524293, 262155, 5, 524293, 262156, 5, 524293, 262157, 5, 524293, 262158, 5, 524293, 262159, 5, 524293, 262160, 5, 524293, 262161, 5, 524293, 262162, 5, 524293, 262163, 5, 524293, 262164, 5, 524293, 262165, 5, 524293, 262166, 5, 524293, 262167, 5, 524293, 262168, 5, 524293, 262169, 5, 524293, 262170, 5, 524293, 262171, 5, 524293, 262172, 5, 524293, 262173, 5, 524293, 262174, 5, 524293, 262175, 5, 524293, 262176, 5, 524293, 262177, 5, 524293, 262178, 5, 524293, 262179, 5, 524293, 262180, 5, 524293, 262181, 5, 524293, 262182, 5, 524293, 262183, 5, 524293, 262184, 5, 524293, 262185, 5, 524293, 262186, 5, 524293, 393199, 5, 524293, 393200, 5, 7, 327683, 5, 6, 327684, 5, 524293, 327685, 5, 524293, 327686, 5, 524293, 327687, 5, 524293, 327688, 5, 524293, 327689, 5, 524293, 327690, 5, 524293, 327691, 5, 524293, 327692, 5, 524293, 327693, 5, 524293, 327694, 5, 524293, 327695, 5, 524293, 327696, 5, 524293, 327697, 5, 524293, 327698, 5, 524293, 327699, 5, 524293, 327700, 5, 524293, 327701, 5, 524293, 327702, 5, 524293, 327703, 5, 524293, 327704, 5, 524293, 327705, 5, 524293, 327706, 5, 524293, 327707, 5, 524293, 327708, 5, 524293, 327709, 5, 524293, 327710, 5, 524293, 327711, 5, 524293, 327712, 5, 524293, 327713, 5, 524293, 327714, 5, 524293, 327715, 5, 524293, 327716, 5, 524293, 327717, 5, 524293, 327718, 5, 524293, 327719, 5, 524293, 327720, 5, 524293, 327721, 5, 524293, 327722, 5, 524293, 458735, 5, 524293, 458736, 5, 7, 393219, 5, 6, 393220, 5, 524293, 393221, 5, 524293, 393222, 5, 524293, 393223, 5, 524293, 393224, 5, 524293, 393225, 5, 524293, 393226, 5, 524293, 393227, 5, 524293, 393228, 5, 524293, 393229, 5, 524293, 393230, 5, 524293, 393231, 5, 524293, 393232, 5, 524293, 393233, 5, 524293, 393234, 5, 524293, 393235, 5, 524293, 393236, 5, 524293, 393237, 5, 524293, 393238, 5, 524293, 393239, 5, 524293, 393240, 5, 524293, 393241, 5, 524293, 393242, 5, 524293, 393243, 5, 524293, 393244, 5, 524293, 393245, 5, 524293, 393246, 5, 524293, 393247, 5, 524293, 393248, 5, 524293, 393249, 5, 524293, 393250, 5, 524293, 393251, 5, 524293, 393252, 5, 524293, 393253, 5, 524293, 393254, 5, 524293, 393255, 5, 524293, 393256, 5, 524293, 393257, 5, 524293, 393258, 5, 524293, 524271, 5, 524293, 524272, 5, 65538, 524273, 5, 3, 524274, 5, 3, 524275, 5, 2, 524276, 5, 2, 524277, 5, 2, 524278, 5, 2, 524279, 5, 2, 524280, 5, 2, 524281, 5, 2, 524282, 5, 2, 524283, 5, 2, 524284, 5, 2, 524285, 5, 2, 524286, 5, 2, 524287, 5, 2, 458752, 5, 2, 458753, 5, 3, 458754, 5, 3, 458755, 5, 65539, 458756, 5, 524293, 458757, 5, 524293, 458758, 5, 524293, 458759, 5, 524293, 458760, 5, 524293, 458761, 5, 524293, 458762, 5, 524293, 458763, 5, 524293, 458764, 5, 524293, 458765, 5, 524293, 458766, 5, 524293, 458767, 5, 524293, 458768, 5, 524293, 458769, 5, 524293, 458770, 5, 524293, 458771, 5, 524293, 458772, 5, 524293, 458773, 5, 524293, 458774, 5, 524293, 458775, 5, 524293, 458776, 5, 524293, 458777, 5, 524293, 458778, 5, 524293, 458779, 5, 524293, 458780, 5, 524293, 458781, 5, 524293, 458782, 5, 524293, 458783, 5, 524293, 458784, 5, 524293, 458785, 5, 524293, 458786, 5, 524293, 458787, 5, 524293, 458788, 5, 524293, 458789, 5, 524293, 458790, 5, 524293, 458791, 5, 524293, 458792, 5, 524293, 458793, 5, 524293, 458794, 5, 524293, 589807, 5, 524293, 589808, 5, 524293, 589809, 5, 524293, 589810, 5, 524293, 589811, 5, 524293, 589812, 5, 524293, 589813, 5, 524293, 589814, 5, 524293, 589815, 5, 524293, 589816, 5, 524293, 589817, 5, 524293, 589818, 5, 524293, 589819, 5, 524293, 589820, 5, 524293, 589821, 5, 524293, 589822, 5, 524293, 589823, 5, 524293, 524288, 5, 524293, 524289, 5, 524293, 524290, 5, 524293, 524291, 5, 524293, 524292, 5, 524293, 524293, 5, 524293, 524294, 5, 524293, 524295, 5, 524293, 524296, 5, 524293, 524297, 5, 524293, 524298, 5, 524293, 524299, 5, 524293, 524300, 5, 524293, 524301, 5, 524293, 524302, 5, 524293, 524303, 5, 524293, 524304, 5, 524293, 524305, 5, 524293, 524306, 5, 524293, 524307, 5, 524293, 524308, 5, 524293, 524309, 5, 524293, 524310, 5, 524293, 524311, 5, 524293, 524312, 5, 524293, 524313, 5, 524293, 524314, 5, 524293, 524315, 5, 524293, 524316, 5, 524293, 524317, 5, 524293, 524318, 5, 524293, 524319, 5, 524293, 524320, 5, 524293, 524321, 5, 524293, 524322, 5, 524293, 524323, 5, 524293, 524324, 5, 524293, 524325, 5, 524293, 524326, 5, 524293, 524327, 5, 524293, 524328, 5, 524293, 524329, 5, 524293, 524330, 5, 524293 ) [node name="Coin" parent="." instance=ExtResource( 58 )] position = Vector2( 105, -545 ) @@ -187,9 +187,10 @@ rotation = -3.14159 [node name="FlyingLaserCutter7" parent="." instance=ExtResource( 13 )] position = Vector2( -48, -799 ) rotation = -3.14159 +avoid_crushing = true [node name="FlyingLaserCutter8" parent="." instance=ExtResource( 13 )] -position = Vector2( -223, -862 ) +position = Vector2( -190, -863 ) rotation = -6.28318 [node name="FlyingLaserCutter3" parent="." instance=ExtResource( 13 )] @@ -225,6 +226,7 @@ position = Vector2( 268, -977 ) [node name="DartingEnemy" parent="." instance=ExtResource( 14 )] position = Vector2( 408, -461 ) mass = 1.0 +killable = false [node name="Spikes" parent="." instance=ExtResource( 15 )] position = Vector2( 25, -594 ) diff --git a/src/Platforms/FlyingLaserCutter.gd b/src/Platforms/FlyingLaserCutter.gd index 8bc6288..67b82cf 100644 --- a/src/Platforms/FlyingLaserCutter.gd +++ b/src/Platforms/FlyingLaserCutter.gd @@ -15,13 +15,16 @@ var halted = false var returning = false var initial_distance : float = 1.0 -export(float) var velocity = 1 +export(float) var return_velocity = 10 +export(float) var initial_velocity = 20 export(float) var max_velocity = 200 export(float) var acceleration_force = 1200 export(float) var mass = 10 export(bool) var avoid_crushing = false export(bool) var fast_retrigger = false +var velocity = initial_velocity + func _ready() -> void: $FlyingLaserCutterBody/Sprite/AnimationPlayer.play("default") @@ -49,8 +52,8 @@ func _physics_process(delta: float) -> void: if halted && avoid_crushing: return returning = true - velocity=1 - body.position.x += (max_velocity/3)*-1*delta + velocity = initial_velocity + body.position.x += return_velocity * -1 * delta else: returning = false diff --git a/src/Platforms/FlyingLaserCutter.tscn b/src/Platforms/FlyingLaserCutter.tscn index 72f6a57..922d836 100644 --- a/src/Platforms/FlyingLaserCutter.tscn +++ b/src/Platforms/FlyingLaserCutter.tscn @@ -72,6 +72,10 @@ shader_param/oscilation_speed = 0.2 [node name="FlyingLaserCutter" type="Node2D"] script = ExtResource( 2 ) +return_velocity = 80.0 +initial_velocity = 30.0 +max_velocity = 190.0 +acceleration_force = 1000.0 [node name="FlyingLaserCutterBody" type="KinematicBody2D" parent="."] collision_layer = 32