From f75c76e437f6f69516a33290195ca6e509579866 Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Sun, 10 Jul 2022 16:44:46 +0200 Subject: [PATCH] Flying Laser Cutters --- assets/contraption/FlyingLaserCutter.aseprite | Bin 9274 -> 8958 bytes project.godot | 3 + src/Actors/Blobby/Blobby.gd | 11 ++-- src/Actors/Blobby/Blobby.tscn | 35 ++++++----- src/Actors/Enemies/Machines/Turret.tscn | 4 +- src/Actors/Player.gd | 14 ++--- .../Platform/FlyingLaserCutter.gd | 57 +++++++++++++++++ .../Platform/FlyingLaserCutter.png | Bin 1786 -> 1993 bytes .../Platform/FlyingLaserCutter.tscn | 58 +++++++++++++----- src/Contraptions/Platform/Track.tscn | 2 +- src/Levels/1Level.tscn | 20 ++++-- src/Levels/Plattforms Level.tscn | 12 +--- 12 files changed, 154 insertions(+), 62 deletions(-) create mode 100644 src/Contraptions/Platform/FlyingLaserCutter.gd diff --git a/assets/contraption/FlyingLaserCutter.aseprite b/assets/contraption/FlyingLaserCutter.aseprite index b0c8862a5537c32c14432554c53b14a953384980..3393c2153b01b6edcef42d6229ae0911ceeb1a7c 100644 GIT binary patch literal 8958 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 JHudMJ{txZ_Tw4GD diff --git a/project.godot b/project.godot index f4346de..6637ce6 100644 --- a/project.godot +++ b/project.godot @@ -138,7 +138,10 @@ boost_move={ [physics] +common/physics_fps=120 +common/physics_jitter_fix=0.3 2d/cell_size=100 +common/enable_object_picking=false [rendering] diff --git a/src/Actors/Blobby/Blobby.gd b/src/Actors/Blobby/Blobby.gd index f89f5eb..9eb96ca 100644 --- a/src/Actors/Blobby/Blobby.gd +++ b/src/Actors/Blobby/Blobby.gd @@ -9,7 +9,9 @@ onready var init_boost = player_state_machine.init_boost onready var init_boost_type = player_state_machine.init_boost_type onready var animation_player = $BlobbySprite/BlobbymationPlayer # TODO Too much speed through midair boosting -# TODO Walljump of of enemies/object not only walls +# TODO Jumping near walls is buggy +# TODO Falling and then touching walls is too fast +# TODO Couple one time applications of force to delta to keep values constant for different physics fps # When the Enemy stomp AREA enters the enemy collision area -> stomp @@ -71,7 +73,7 @@ func calculate_grounded_velocity( if reverse_move: out_vel.x = PhysicsFunc.two_step_euler( out_vel.x, - deceleration_force * -1.66 * velocity_direction, + deceleration_force * -3.42 * velocity_direction, mass, delta ) @@ -180,8 +182,8 @@ func calculate_jump_velocity( if !Input.is_action_pressed("jump"): # TODO This is so good not gonna lie # Smooth transition from jumping to falling - if velocity.y > _gravity * delta * 10: - linear_velocity.y += _gravity * delta * 10 + if velocity.y > _gravity * delta * 20: + linear_velocity.y += _gravity * delta * 20 else: linear_velocity.y += ( max(abs(linear_velocity.y), _gravity * delta) @@ -204,6 +206,7 @@ func calculate_jump_velocity( delta ) air_strafe_charges -= 1 + # TODO Suspend in air return linear_velocity diff --git a/src/Actors/Blobby/Blobby.tscn b/src/Actors/Blobby/Blobby.tscn index 31fc1a0..4e2408a 100644 --- a/src/Actors/Blobby/Blobby.tscn +++ b/src/Actors/Blobby/Blobby.tscn @@ -5,6 +5,9 @@ [ext_resource path="res://src/Actors/Blobby/Blobby.gd" type="Script" id=4] [ext_resource path="res://assets/meta/new_dynamicfont.tres" type="DynamicFont" id=5] +[sub_resource type="RectangleShape2D" id=2] +extents = Vector2( 13, 9 ) + [sub_resource type="StreamTexture" id=5] load_path = "res://.import/Blobby.png-42eed5028ccb56a7415a0793b79ec61e.stex" @@ -75,24 +78,32 @@ tracks/0/keys = { [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 13, 9 ) -[sub_resource type="RectangleShape2D" id=2] -extents = Vector2( 13, 9 ) - [node name="Blobby" type="KinematicBody2D" groups=["player"]] collision_mask = 120 +collision/safe_margin = 0.001 script = ExtResource( 4 ) +[node name="BlobbySkin" type="Area2D" parent="." groups=["player"]] +process_priority = -1 +collision_mask = 126 + +[node name="CollisionPolygon2D" type="CollisionShape2D" parent="BlobbySkin"] +position = Vector2( 0, -9 ) +scale = Vector2( 1.03, 1.04 ) +shape = SubResource( 2 ) + [node name="BlobbySprite" type="Sprite" parent="."] position = Vector2( 0, -16 ) texture = SubResource( 5 ) hframes = 3 vframes = 3 -frame = 5 +frame = 7 __meta__ = { "_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUJsb2JieVNwcml0ZS9CbG9iYnltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvYmxvYmJ5L2Jsb2JieS1zcHJpdGVzaGVldHQuYXNlcHJpdGUKbGF5ZXJ8PUJsb2JieQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo=" } [node name="BlobbymationPlayer" type="AnimationPlayer" parent="BlobbySprite"] +playback_process_mode = 0 anims/falling = SubResource( 6 ) anims/idling = SubResource( 7 ) anims/jumping = SubResource( 8 ) @@ -121,14 +132,6 @@ script = ExtResource( 2 ) [node name="ShiftTween" type="Tween" parent="BlobbyCam"] -[node name="BlobbySkin" type="Area2D" parent="." groups=["player"]] -collision_mask = 126 - -[node name="CollisionPolygon2D" type="CollisionShape2D" parent="BlobbySkin"] -position = Vector2( 0, -9 ) -scale = Vector2( 1.03, 1.03 ) -shape = SubResource( 2 ) - [node name="BlobbyStateMachine" type="Node" parent="."] script = ExtResource( 3 ) @@ -162,14 +165,14 @@ position = Vector2( -13, -4 ) enabled = true exclude_parent = false cast_to = Vector2( -1, 0 ) -collision_mask = 8 +collision_mask = 56 [node name="Left_Wallcast2" type="RayCast2D" parent="WallRaycasts/LeftWallRaycast"] position = Vector2( -13, 6 ) enabled = true exclude_parent = false cast_to = Vector2( -1, 0 ) -collision_mask = 8 +collision_mask = 56 [node name="RightWallRaycast" type="Node2D" parent="WallRaycasts"] position = Vector2( 0, -8 ) @@ -179,14 +182,14 @@ position = Vector2( 13, -5 ) enabled = true exclude_parent = false cast_to = Vector2( 1, 0 ) -collision_mask = 8 +collision_mask = 56 [node name="Right_Wallcast2" type="RayCast2D" parent="WallRaycasts/RightWallRaycast"] position = Vector2( 13, 5 ) enabled = true exclude_parent = false cast_to = Vector2( 1, 0 ) -collision_mask = 8 +collision_mask = 56 [connection signal="area_entered" from="BlobbySkin" to="." method="_on_BlobbySkin_area_entered"] [connection signal="body_entered" from="BlobbySkin" to="." method="_on_BlobbySkin_body_entered"] diff --git a/src/Actors/Enemies/Machines/Turret.tscn b/src/Actors/Enemies/Machines/Turret.tscn index 744a887..b1a6766 100644 --- a/src/Actors/Enemies/Machines/Turret.tscn +++ b/src/Actors/Enemies/Machines/Turret.tscn @@ -98,13 +98,13 @@ collision_mask = 123 [node name="SightCone" type="Node2D" parent="."] [node name="Sightline1" type="RayCast2D" parent="SightCone"] -rotation = 0.0698132 +rotation = 0.0174533 enabled = true cast_to = Vector2( 0, 100000 ) collision_mask = 121 [node name="Sightline2" type="RayCast2D" parent="SightCone"] -rotation = -0.0698132 +rotation = -0.0174533 enabled = true cast_to = Vector2( 0, 100000 ) collision_mask = 121 diff --git a/src/Actors/Player.gd b/src/Actors/Player.gd index 09c999b..91da56b 100644 --- a/src/Actors/Player.gd +++ b/src/Actors/Player.gd @@ -8,23 +8,23 @@ var stomp_feedback := 1000.0 var inair_velocity := 21 var wallslide_threshold := 1000 # TODO Map to floor types and move to physics constants -var normal_floor_friction := 0.5 +var normal_floor_friction := 1 var max_velocity := { "walk": 120, "run": 160, "fall": 420, "walljump": 200, "idle": 12000 } var velocity_jump_boost_ratio := 10 # This is added to the acceleration force initially var init_acceleration_force := { - "idle_walk": 4181, "idle_run": 5765, "walk_run": 1000 + "idle_walk": 4181/2, "idle_run": 5765/2, "walk_run": 1000/2 } # Oriented around deltas of 0.0166666...s # newtonmeters is the unit var acceleration_force := { - "walk": Vector2(2000, 74000), - "idle": Vector2(2000, 74000), - "run": Vector2(2800, 74000), - "walljump": Vector2(36000, 63000), - "air_strafe": Vector2(20000, 100) + "walk": Vector2(1000, 148000), + "idle": Vector2(1000, 148000), + "run": Vector2(1400, 148000), + "walljump": Vector2(72000, 126000), + "air_strafe": Vector2(40000, 2000) } # Gravity as m/s^2 var _gravity: float = PhysicsConst.gravity diff --git a/src/Contraptions/Platform/FlyingLaserCutter.gd b/src/Contraptions/Platform/FlyingLaserCutter.gd new file mode 100644 index 0000000..268346c --- /dev/null +++ b/src/Contraptions/Platform/FlyingLaserCutter.gd @@ -0,0 +1,57 @@ +extends KinematicBody2D +const PhysicsFunc = preload("res://src/Utilities/Physic/PhysicsFunc.gd") + +#Array of RayCast2D +onready var trigger_rays = $Triggers.get_children() +onready var tween = $Tween +onready var original_position: Vector2 = self.global_position +onready var local_facing: Vector2 = Vector2.RIGHT +onready var global_facing: Vector2 = local_facing.rotated(transform.get_rotation()) + +var flyoff_triggered = false +var velocity = 1 +var max_velocity = 200 +var acceleration_force = 1200 +var mass = 10 + +# TODO Returing Laser cutter has broken collision and infinite impulse +# TODO Friction on the laser and other platforms should be higher + + +func _ready() -> void: + $Sprite/AnimationPlayer.play("default") + + +func _physics_process(delta: float) -> void: + if !flyoff_triggered: + for ray in trigger_rays: + if ray.is_colliding(): + var collider = ray.get_collider() + if collider.is_in_group("player"): + tween.stop(self) + set("motion/sync_to_physics", false) + flyoff_triggered = true + break + else: + velocity = PhysicsFunc.two_step_euler( + velocity, acceleration_force, mass, delta + ) + velocity = clamp(velocity, 0, max_velocity) + var collision = move_and_collide(velocity*global_facing*delta,true) + if collision != null: + if !collision.collider.is_in_group("player"): + _on_collision() + + +func _on_collision() -> void: + velocity = 1 + flyoff_triggered = false + set("motion/sync_to_physics", true) + var distance: Vector2 = self.global_position - original_position + var time_vec = Vector2(abs(distance.x), abs(distance.y)) / (max_velocity / 3) + var time = time_vec.length() + tween.interpolate_property( + self, "position", self.global_position, original_position, time + ) + tween.start() + diff --git a/src/Contraptions/Platform/FlyingLaserCutter.png b/src/Contraptions/Platform/FlyingLaserCutter.png index 6b485319e11f6545a594b2812b88acfa069aaf56..df544f599ecbb4bbad0a49b259dbca18d2079897 100644 GIT binary patch delta 1967 zcmV;g2T=I>4apCXFn!D}2<9LK+JT@%{FCSlu)l_vEM5Jc9Cr=n58 zLnAJzm)eSTMQ9e%i&%TI1uqS358`T}^`ydr6%>L&dh%kBfZjaBCK@j_baxO-+Q@i_ zZ~Nx$o83+K_nYZ^{JyZzo!x#WnVJ3V+kKz+i#mC_5(7XyHh%|>s5{pn{QUSu062VP z0_&T=^r7om-#nUl!of!l_XRw=^j_lrbKh+sIyD0TD1CYZZ_HmK=dZq4!rHO(c=@e) z7JhVU2FsO&AoxnZf_HavbRf_Le}4IQWo~aZ8}aPQA|@`cv+*lS=P>5N<3Dr)e~2fkNonuLU~-V@ByH`bqnpSTWowY1pwWvXTSO^ z@!-Sb`<%Dc<5#eH{7UyZgW?;1vOI;!@)R3?Ydgl)c7L47@hRwk{1d<4-HCn0q($#! zmeWtz45ObmjLVz*^8w*faDwasK1Et^Whgvc)!@?VlNSXe*Eq$ z_`uA3>VN2sq6`T?AAUi9+07N<=gTj~V{_e6T-0d~{TXc72tQxGa}+HJCj|hw`R4}f zPK3|T|Ks}~9&&9@eFg7Cjgdx%gCcxd{-e)4{ja^P)ojE?dt=mT0|53b`w^N5KRbT4 zR#!bI*qqTQmg=~>eY-DY*m+6e=fm%wVEsOz?tgS}U}k=IZoYZ~RuX5!);LsrmK_ ze`>yY-%Brgxw62m<%JKN>vt*n{XS)k$~TV>n-^{FgqlCQvgkFxvUCn>$Ii3z zoh$s!jOzW)t}OPH3*ql(vOLw(X@`<;e#+=M!BMA8_Fids#1Vcnt_z5Qug4Hh@qgVn z@0W|eTv-4v*ID`1T3wwub0Kk(DfpA+sV?6;FB<68a)qDHC- z&$1u2c+r9PqZThZK)zWa#ETA)-+$9>)@Se6H@@quTu#39i*{s?F)|9@HZHjN-u8>O zr}HTJU85raK5M^dJ)zCPH;oJ7yZHdK7i~^x3qN~)tJ#R9Uvy4<{XWUbuh!~{+>5q7 zBj3DeAUVk5;_DL1%_sMwU7{Lg`k9VY{6WT}PkitCMY}E_;ivPZUv%Jn7Jn~V&t`CW zzdGD}SA65Mc+p$iG1iWqXY+n_xcRR5#%J-O%i{{=rE`gGlzi9vU7x(}Ecq<`qHQCB znr|Bs)O~C%y?&RAZ~pN}Za%9Qtt0)Y`^VdU(XD19{^r-ez2oZ&!Nt$AAAdEQ7p=WqANjgM zaPiFw!R>VyM>Z3HUhkKh4}hJo!@)Pl5FC87Li9LU6yfxKLx^p>P{$lU zc;`h6e{jqd{;99vov48w@T}hzJ}=*_5IrYY%U%1K7N7_}TfX#*4xI00zi8nP9~Lj# zj_~v2ix(X@U%cqh`G4X?=gYr(@ht0tdGVri=3l*dw(tKRHRN8j?d5WNzrOKpFM4R$ zeWm~m@8z1ev{9U^lbdgRdmAO6yT^zf7B4yr?^nk+@0zR;Im6m7 z+AK%H@6YE7Tfb;+TnIlsS(Iy*e$iQazZ`r3?EI`k?nQHZzkk4BW8^{aN1bKJy=ZRl zH!Z&Nx#Fc49U7lAtX{Mk;pY?S7o9VoJ1kzb8R6#}@_x~h2P-UIw7tULH?KHrK4)0G z=zeQ=Dfq+0cRp2EylB_@T}r-dbsiR zx#Fc49a=wX&M1f%oiqQJ%?;LfbMc~c=5uSa{{gjR7u=8wNdy1@002ovPDHLkV1oG< B5!3(x delta 1758 zcmY+Dc~Fzr8pgwT1+J+eRt+hOvIu3-fFei)GNLg;frv{f(j+bjR6#_N3S{{NX@f=z zS`}FXL50RCa3LT|2w({a3FLkhL_iI)gvb_>2uUPBKig?%dj2}+%z584&+~iUF4K=2 zv)uqgUcljlCzA^13h*(Orz|^LYAS;3QiC_{${^%zOW9=VZ#Q=VPr2cL(D=Jn4D(R~ zuP=K`tSM(IjY&KneC*)!rQ)sJ^bOe9!J?NpnE%`;F(o_^A<P!7x~qi`P+YzXB5g zRlj6BJ+D0qw>CQ2MrvMRj$`EewTm6Qo-IBd50Y44%Vk@Ww1(`H?)nKM4Y2+Jo|f$Q zp;qHZGI7oCXsOjAoiJSz$MMXS-;5N7OGWxoK`Y)|-#Lh|lRmtur;#u!`bwmpX_2M8 zGVYEf1sPs%(aci1Qytm!A}8Q$$DAs3!$gb2?k7s-)ph3G8?%)b5&1E(aSke7B%idJ zP^Q2Cf*SM<|2}!M3x#&hT{ht#}{pj;ewK3zx%O zA{o`R1o8_m@&B=6qhi%9zGai=8*oD|+m&Q#rQfI@RD>DuLWXK|a9Enrm1M=x`}}AI zT7TO(>sCF2vMkGG`$*Re6&N2x%96vp?;aZE>VNBfzi0w%Wo5rf&?BM}JlD1;Z+nxc zRg;%HhQR1}v-igp<`fK;`LVPjY}+DMqQdCvXF)w)eXOrDH=%W0v*(W_xZ8J#y!~hhHrUoK!F@&rk3-e~E|P`8o}6gy zjEp5Zk^2FT`6G7R&5uQhC*N{4in;X|{z1)}ImN znQo$jkV5Z7Wwl5TkhRxKh#u+#QREn-g~?ed~6!@>UmZj!548Rxyx+XD)@!J&*hK8pn+-r{=bpwoiWa(U|Ln$5jv&~o?~C6sE0 zGlqgUfvf9Dfe?d-H3&t*SwAb%kmrohLy@Bc-w9$wy4Rm*EkgnQN9nNVl~;k}6@xm} zx{jR(U$H_`w`UxR$QT7~_)-!FiI*QwUtT2`!7K~+3u!#yE5H}^QQq#PYJ|@bdEIii zOdwGo+iG62RN-`J4D0xACB=Q9Da1LF$g4LCTCDha?8J}D9BMj#>pW}T#t&PMYBbW` zdnb@vPt4r@A04by{&MaSBF=)nXBMk5W;@Sf%fw|SRM1KNOKCGI@An8BC1(=KUa~Mi z{pkZ-SZ&Yr=(Wwi>l&e1dKxwLeq!V`?$-mK2*0+NFAed8X2NqR^n~yzYPintVs{my maL-!K;=aC8??1cN4y_ridm68B)53@_Xa!(H4p;b}N&5rN^{G|> diff --git a/src/Contraptions/Platform/FlyingLaserCutter.tscn b/src/Contraptions/Platform/FlyingLaserCutter.tscn index 4114fe4..33dcb46 100644 --- a/src/Contraptions/Platform/FlyingLaserCutter.tscn +++ b/src/Contraptions/Platform/FlyingLaserCutter.tscn @@ -1,9 +1,14 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://src/Contraptions/Platform/FlyingLaserCutter.gd" type="Script" id=1] + +[sub_resource type="RectangleShape2D" id=4] +extents = Vector2( 3.30347, 10.9923 ) [sub_resource type="RectangleShape2D" id=3] -extents = Vector2( 11.9718, 11.9718 ) +extents = Vector2( 11.9396, 11.9718 ) -[sub_resource type="StreamTexture" id=1] +[sub_resource type="StreamTexture" id=6] load_path = "res://.import/FlyingLaserCutter.png-9cf80385a79c58041216f8c2509a5bab.stex" [sub_resource type="Animation" id=2] @@ -22,21 +27,33 @@ tracks/0/keys = { "values": [ 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0 ] } -[sub_resource type="RectangleShape2D" id=4] -extents = Vector2( 10.7929, 10 ) - [node name="FlyingLaserCutter" type="KinematicBody2D"] collision_layer = 32 collision_mask = 123 +collision/safe_margin = 0.001 +script = ExtResource( 1 ) + +[node name="LaserArea" type="Area2D" parent="." groups=["harmful"]] +process_priority = -1 +collision_layer = 32 +collision_mask = 3 + +[node name="PainZone" type="CollisionShape2D" parent="LaserArea" groups=["harmful"]] +process_priority = -1 +position = Vector2( 9.88403, 0.0077219 ) +shape = SubResource( 4 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2( -0.0136938, 0 ) shape = SubResource( 3 ) +[node name="Tween" type="Tween" parent="."] +playback_process_mode = 0 + [node name="Sprite" type="Sprite" parent="."] -texture = SubResource( 1 ) +texture = SubResource( 6 ) hframes = 5 vframes = 5 -frame = 11 __meta__ = { "_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PVNwcml0ZS9BbmltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvY29udHJhcHRpb24vRmx5aW5nTGFzZXJDdXR0ZXIuYXNlcHJpdGUKbGF5ZXJ8PQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo=" } @@ -44,14 +61,23 @@ __meta__ = { [node name="AnimationPlayer" type="AnimationPlayer" parent="Sprite"] anims/default = SubResource( 2 ) -[node name="LaserArea" type="Area2D" parent="." groups=["harmful"]] -collision_layer = 32 -collision_mask = 255 +[node name="Triggers" type="Node2D" parent="."] +position = Vector2( 0, 0.0077219 ) -[node name="CollisionShape2D" type="CollisionShape2D" parent="LaserArea"] -position = Vector2( 1.1396, 0 ) -shape = SubResource( 4 ) - -[node name="RayCast2D" type="RayCast2D" parent="."] +[node name="RayCast2D" type="RayCast2D" parent="Triggers"] +position = Vector2( 3.92072e-12, 8.99337 ) rotation = -1.5708 scale = Vector2( 1, 1000 ) +enabled = true +cast_to = Vector2( 0, 1 ) +collision_mask = 9 + +[node name="RayCast2D2" type="RayCast2D" parent="Triggers"] +position = Vector2( 0, -8.95621 ) +rotation = -1.5708 +scale = Vector2( 1, 1000 ) +enabled = true +cast_to = Vector2( 0, 1 ) +collision_mask = 9 + +[connection signal="area_entered" from="LaserArea" to="." method="_on_LaserArea_area_entered"] diff --git a/src/Contraptions/Platform/Track.tscn b/src/Contraptions/Platform/Track.tscn index 11b3f4f..94bd5b7 100644 --- a/src/Contraptions/Platform/Track.tscn +++ b/src/Contraptions/Platform/Track.tscn @@ -27,7 +27,7 @@ tracks/0/keys = { script = ExtResource( 2 ) [node name="KinematicBody2D" type="KinematicBody2D" parent="."] -position = Vector2( 25.7293, 0 ) +position = Vector2( 24.4777, 0 ) collision_layer = 8 collision_mask = 0 motion/sync_to_physics = true diff --git a/src/Levels/1Level.tscn b/src/Levels/1Level.tscn index c85c031..95b965f 100644 --- a/src/Levels/1Level.tscn +++ b/src/Levels/1Level.tscn @@ -34,6 +34,7 @@ points = PoolVector2Array( 23.7224, 24, 0, 24, 0, 0, 24, 0 ) 1/z_index = 0 [node name="LevelTemplate" type="Node2D"] +scale = Vector2( 0.998402, 1.0004 ) __meta__ = { "_edit_horizontal_guides_": [ 464.0 ], "_edit_vertical_guides_": [ 2880.0 ] @@ -48,7 +49,6 @@ position = Vector2( -259.915, 710.547 ) tile_set = SubResource( 2 ) cell_size = Vector2( 24, 24 ) cell_quadrant_size = 12 -cell_custom_transform = Transform2D( 24, 0, 0, 24, 0, 0 ) collision_layer = 8 collision_mask = 0 format = 1 @@ -60,12 +60,22 @@ position = Vector2( 1989, 528 ) [node name="Collectibles" type="Node" parent="."] [node name="Coin" parent="Collectibles" instance=ExtResource( 5 )] -position = Vector2( -65.9265, 721.783 ) +position = Vector2( -166.948, 610.671 ) +scale = Vector2( 0.15, 0.15 ) [node name="AnimatedSprite" parent="Collectibles/Coin" index="2"] -frame = 57 +frame = 104 -[node name="FlyingLaserCutter" parent="." instance=ExtResource( 6 )] -position = Vector2( -169.145, 696.547 ) +[node name="FlyingLaserCutter3" parent="." instance=ExtResource( 6 )] +position = Vector2( -167.267, 632.742 ) +rotation = 1.5708 + +[node name="FlyingLaserCutter4" parent="." instance=ExtResource( 6 )] +position = Vector2( -296.474, 577.769 ) + +[node name="FlyingLaserCutter5" parent="." instance=ExtResource( 6 )] +position = Vector2( -14.0224, 527.789 ) +rotation = -3.14159 +scale = Vector2( 0.996031, 1 ) [editable path="Collectibles/Coin"] diff --git a/src/Levels/Plattforms Level.tscn b/src/Levels/Plattforms Level.tscn index d207571..9cade4e 100644 --- a/src/Levels/Plattforms Level.tscn +++ b/src/Levels/Plattforms Level.tscn @@ -1,11 +1,10 @@ -[gd_scene load_steps=12 format=2] +[gd_scene load_steps=11 format=2] [ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=1] [ext_resource path="res://assets/environment/blocks/Basic stone block.png" type="Texture" id=2] [ext_resource path="res://src/Contraptions/Platform/Spring.tscn" type="PackedScene" id=3] [ext_resource path="res://src/Environment/Background.tscn" type="PackedScene" id=4] [ext_resource path="res://src/Contraptions/Platform/Track.tscn" type="PackedScene" id=5] -[ext_resource path="res://src/Actors/Enemies/Machines/Turret.tscn" type="PackedScene" id=6] [ext_resource path="res://src/UserInterface/Buttons/UI.tscn" type="PackedScene" id=7] [sub_resource type="NavigationPolygon" id=1] @@ -64,14 +63,6 @@ collision_mask = 2147483648 format = 1 tile_data = PoolIntArray( 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 13, 0, 0, 14, 0, 0, 15, 0, 0, 16, 0, 0, 17, 0, 0, 18, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, 0, 22, 0, 0, 23, 0, 0, 24, 0, 0, 25, 0, 0, 26, 0, 0, 27, 0, 0, 28, 0, 0, 29, 0, 0, 30, 0, 0, 65536, 0, 0, 65566, 0, 0, 131072, 0, 0, 131102, 0, 0, 196608, 0, 0, 196638, 0, 0, 262144, 0, 0, 262174, 0, 0, 327680, 0, 0, 327710, 0, 0, 393216, 0, 0, 393246, 0, 0, 458752, 0, 0, 458782, 0, 0, 524288, 0, 0, 524318, 0, 0, 589824, 0, 0, 589854, 0, 0, 655360, 0, 0, 655390, 0, 0, 720896, 0, 0, 720926, 0, 0, 786432, 0, 0, 786462, 0, 0, 851968, 0, 0, 851998, 0, 0, 917504, 0, 0, 917534, 0, 0, 983040, 0, 0, 983070, 0, 0, 1048576, 0, 0, 1048606, 0, 0, 1114112, 0, 0, 1114142, 0, 0, 1179648, 0, 0, 1179678, 0, 0, 1245184, 0, 0, 1245214, 0, 0, 1310720, 0, 0, 1310750, 0, 0, 1376256, 0, 0, 1376286, 0, 0, 1441792, 0, 0, 1441822, 0, 0, 1507328, 0, 0, 1507358, 0, 0, 1572864, 0, 0, 1572894, 0, 0, 1638400, 0, 0, 1638430, 0, 0, 1703936, 0, 0, 1703966, 0, 0, 1769472, 0, 0, 1769502, 0, 0, 1835008, 0, 0, 1835038, 0, 0, 1900544, 0, 0, 1900574, 0, 0, 1966080, 0, 0, 1966110, 0, 0, 2031616, 0, 0, 2031646, 0, 0, 2097152, 0, 0, 2097182, 0, 0, 2162688, 0, 0, 2162718, 0, 0, 2228224, 0, 0, 2228254, 0, 0, 2293760, 0, 0, 2293790, 0, 0, 2359296, 0, 0, 2359326, 0, 0, 2424832, 0, 0, 2424862, 0, 0, 2490368, 0, 0, 2490398, 0, 0, 2555904, 0, 0, 2555905, 0, 0, 2555906, 0, 0, 2555907, 0, 0, 2555908, 0, 0, 2555909, 0, 0, 2555910, 0, 0, 2555911, 0, 0, 2555912, 0, 0, 2555913, 0, 0, 2555914, 0, 0, 2555915, 0, 0, 2555916, 0, 0, 2555917, 0, 0, 2555918, 0, 0, 2555919, 0, 0, 2555920, 0, 0, 2555921, 0, 0, 2555922, 0, 0, 2555923, 0, 0, 2555924, 0, 0, 2555925, 0, 0, 2555926, 0, 0, 2555927, 0, 0, 2555928, 0, 0, 2555929, 0, 0, 2555930, 0, 0, 2555931, 0, 0, 2555932, 0, 0, 2555933, 0, 0, 2555934, 0, 0 ) -[node name="Turret" parent="." instance=ExtResource( 6 )] -position = Vector2( 479, 430 ) -scale = Vector2( 0.354, 0.354 ) - -[node name="Laserpoint" parent="Turret" index="11"] -position = Vector2( -8.71185, 539.311 ) -scale = Vector2( 2.08898, 2.08898 ) - [node name="Blobby" parent="." instance=ExtResource( 1 )] position = Vector2( 50.7867, 604.063 ) @@ -92,6 +83,5 @@ scale = Vector2( 2.83999, 0.56 ) [node name="KinematicBody2D" parent="Track" index="0"] position = Vector2( 25.0812, 0 ) -[editable path="Turret"] [editable path="Spring4"] [editable path="Track"]