From ab0f5efa30f68fdacb33682735b520728bf20bc0 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Tue, 27 Jan 2026 19:15:00 +1100 Subject: [PATCH] Started working on a floaty field --- boxboy/boxboy.gd | 58 ++++++++++++++++++++++++++++-------- platforms/Bouncy.tscn | 3 ++ platforms/Floaty.tscn | 34 +++++++++++++++++++++ platforms/bouncy.gd | 2 +- platforms/bouncy.xcf | Bin 2502 -> 2496 bytes platforms/floaty.gd | 10 +++++++ platforms/floaty.gd.uid | 1 + platforms/floaty.png | Bin 0 -> 1195 bytes platforms/floaty.png.import | 40 +++++++++++++++++++++++++ platforms/floaty.xcf | Bin 0 -> 2100 bytes project.godot | 5 ---- scene.tscn | 17 +++++++---- 12 files changed, 146 insertions(+), 24 deletions(-) create mode 100644 platforms/Floaty.tscn create mode 100644 platforms/floaty.gd create mode 100644 platforms/floaty.gd.uid create mode 100644 platforms/floaty.png create mode 100644 platforms/floaty.png.import create mode 100644 platforms/floaty.xcf diff --git a/boxboy/boxboy.gd b/boxboy/boxboy.gd index fb8c79b..b428163 100644 --- a/boxboy/boxboy.gd +++ b/boxboy/boxboy.gd @@ -3,13 +3,24 @@ class_name BoxBoy extends CharacterBody2D @onready var _sprite = $AnimatedSprite2D const MOVE_FORCE: int = 300 -const JUMP_FORCE: int = 800 +const JUMP_FORCE: int = 500 #about 4 tiles -const GRAVITY_UP: int = 15 -const GRAVITY_DOWN: int = 30 +const GRAVITY_RISING: int = 15 +const GRAVITY_FALLING: int = 30 +#bouncy platform +const BOUNCE_FORCE: int = -820 #about 10 tiles +var just_bounced: bool = false #allow max bounce height (i.e. ignore jump input) + +#floaty field +const FLOATY_RISING: int = -10 +const FLOATY_FALLING: int = -30 +var floaty_counter: int = 0 + +#limits const MAX_MOVE_SPEED: int = 300 const MAX_FALL_SPEED: int = 500 +const MAX_FLOATY_SPEED: int = -300 #boilerplate func _ready(): @@ -17,19 +28,31 @@ func _ready(): #movement func _physics_process(_delta) -> void: - #input, jumps + #jump input if is_on_floor() and Input.is_action_just_pressed("input_jump"): velocity.y -= JUMP_FORCE + if floaty_counter > 0: + #inverted - could tweak the rise? + if is_rising(): + velocity.y += FLOATY_RISING + else: + velocity.y += FLOATY_FALLING #fall faster than you rise - if is_airborne_rising() and Input.is_action_pressed("input_jump"): - velocity.y += GRAVITY_UP + elif is_rising() and (Input.is_action_pressed("input_jump") or just_bounced): + velocity.y += GRAVITY_RISING else: - velocity.y += GRAVITY_DOWN + velocity.y += GRAVITY_FALLING + just_bounced = false - if is_airborne_falling() and velocity.y > MAX_FALL_SPEED: + #terminal velocity + if floaty_counter > 0: + if velocity.y < MAX_FLOATY_SPEED: + velocity.y = MAX_FLOATY_SPEED + elif is_falling() and velocity.y > MAX_FALL_SPEED: velocity.y = MAX_FALL_SPEED - + + print(velocity.y) #input, walking var move_dir = Input.get_axis("input_left", "input_right") @@ -55,10 +78,19 @@ func _on_animation_finished() -> void: _sprite.play("idle", 2) #utils -func is_airborne() -> bool: return !is_on_floor() -func is_airborne_rising() -> bool: return !is_on_floor() and velocity.y < 0 -func is_airborne_falling() -> bool: return !is_on_floor() and velocity.y >= 0 +#func is_airborne() -> bool: return !is_on_floor() +func is_rising() -> bool: return velocity.y < 0 +func is_falling() -> bool: return velocity.y >= 0 #external actions func apply_bounce() -> void: - velocity.y -= JUMP_FORCE + velocity.y = BOUNCE_FORCE + just_bounced = true + +func enable_float() -> void: + floaty_counter += 1 + pass + +func disable_float() -> void: + floaty_counter -= 1 + pass diff --git a/platforms/Bouncy.tscn b/platforms/Bouncy.tscn index 67eb85e..35af6ee 100644 --- a/platforms/Bouncy.tscn +++ b/platforms/Bouncy.tscn @@ -19,11 +19,14 @@ size = Vector2(32, 16) [node name="Bouncy" type="Area2D"] script = ExtResource("1_uccqy") +metadata/_edit_group_ = true [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] sprite_frames = SubResource("SpriteFrames_npa0g") +metadata/_edit_lock_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="."] shape = SubResource("RectangleShape2D_qqmjc") +metadata/_edit_lock_ = true [connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/platforms/Floaty.tscn b/platforms/Floaty.tscn new file mode 100644 index 0000000..4d95576 --- /dev/null +++ b/platforms/Floaty.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=5 format=3 uid="uid://8gd74f7ltuwk"] + +[ext_resource type="Script" uid="uid://6xvc47rc3xnp" path="res://platforms/floaty.gd" id="1_nilcs"] +[ext_resource type="Texture2D" uid="uid://uo0dn2kbqhh8" path="res://platforms/floaty.png" id="1_tt70t"] + +[sub_resource type="SpriteFrames" id="SpriteFrames_nilcs"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("1_tt70t") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_cftfe"] +size = Vector2(64, 64) + +[node name="Floaty" type="Area2D"] +script = ExtResource("1_nilcs") +metadata/_edit_group_ = true + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +z_index = -100 +sprite_frames = SubResource("SpriteFrames_nilcs") +metadata/_edit_lock_ = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_cftfe") +metadata/_edit_lock_ = true + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] +[connection signal="body_exited" from="." to="." method="_on_body_exited"] diff --git a/platforms/bouncy.gd b/platforms/bouncy.gd index 8f7d235..a280f0d 100644 --- a/platforms/bouncy.gd +++ b/platforms/bouncy.gd @@ -1,6 +1,6 @@ extends Area2D func _on_body_entered(body) -> void: - print("collision") + #print("collision") if body is BoxBoy: body.apply_bounce() diff --git a/platforms/bouncy.xcf b/platforms/bouncy.xcf index 9e6a3ad0ddc10b0305e02deaabdc1522ddabb046..e820fc14eb27c0d07ff43b674d90459838ac3cb9 100644 GIT binary patch delta 87 zcmX>md_Z_ZCL^QXxwPmg8Ij0EZS4%m4rY delta 97 zcmX>gd`x&lCZnb8jEQOE f=EY1NY@(ll$`pVYrUl64 void: + #print("collision") + if body is BoxBoy: + body.enable_float() + +func _on_body_exited(body) -> void: + if body is BoxBoy: + body.disable_float() diff --git a/platforms/floaty.gd.uid b/platforms/floaty.gd.uid new file mode 100644 index 0000000..d68f2fa --- /dev/null +++ b/platforms/floaty.gd.uid @@ -0,0 +1 @@ +uid://6xvc47rc3xnp diff --git a/platforms/floaty.png b/platforms/floaty.png new file mode 100644 index 0000000000000000000000000000000000000000..fe08a12aa866ee36f20e1267511e347e0ef82580 GIT binary patch literal 1195 zcmV;c1XTNpP)EX>4Tx04R}tk-ba9P!z>aQ>7vmK|6>#WT;Md(ISpog(6f4wL+^7CNKShCJjl7 zi=*ILaPVWX>fqw6tAnc`2!4S02Z)oRiTxwGn1Ytju4B*4pustl}wE|P8?M=o$`gO z$13M7&RV6$TKD8H4CnQgWvu?YAB-u8!_5-QY@tDJmKRXcKs5$6mpfp z$gzMbG{~+W{11N5)+$U*dP(5~(EZ{#A7emh7iiWU=lj@knkPW;8MxBh{%Ql5`6RvG z)}lv1|2A-O-PV*n;Bp5TdNO2FcBLRKp-=$c&*+b?)ds_4R0jTJ5yl6UF(f|Me24YJ`L;yhm2>_uo&|-H0000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHSE2Ok@Q1G=36000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0007lNkltH)=&GNgbklF(qPs3zT%>ecy3iIuC`hr87#ovrx)Ewyn~8bM zIm`PvcldFJIWsWo`Fk3KI5Z&-0T2KI5C8#aXQU!e!VBQ&Ngl>#ar9*P02Fb?{dGVw z?ysYWhYKJV+riQ{0G77N#dg92kg!%rL^9XMA{i3aO78<$YLuKe|NE-&=CRah?*b@n z9{JlS)D83M*Sy`E09j`n*YN+i#x;Dh&UWts^cf2bxrKjPJLDGVGZuOWK&uo5fB9B> z3jQ)$rFsLP5Zl90=B@S^%A^q6>wbVidy{@E`Cohctt5l?X7>WPdWzxbbW=Hoqtm#0 zs`~&Gaf<$0Ai0YETFYAHmI36VJ4Cb-NUn%>$VGR$2Ow#!lCU$uw$FBkq_x`l01=fZ z=gqaIs=PTOD&M&P3Y((80XMX|L7Y(ZHv(;y0|gjy_y5}JHvMEVd`8^;&I1@QmqrOp8`RGPfEcx~*eQRApw3gjY>$|bHEwQFN}ZxKVKo6c<#K#HQbi&h2z z<*Rd!%kMa=y#{JLh)y(p!b$ZdCsmVs<`UWHEK#Emtqh9ZE+4)>1#0aBNZVU@W}L6p zV?JNJ;i6t@QQ_A(s~vE5et@GV$T*Kl+F8=}7GJ6_+5_O~8GbaXy#4l!dgJuY-r+Cm zB|er*e5$0lZ!O^J87lR|y9cP$52;)p(ypjCPC31N)g2#1IyD4900ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1RzYIo-t6ln4c+(3p5KB29>2eSPE` zz9Q&bBhf%OAuJR!E~$&(0=21Kv^@wst% z^got;qWOl?j!lV!iA4M)GAX^YGGzX)0M*F(^Ph0sewX??MBats%;OVO zi9a&1!@#0}-!pK9fp;5t4>JGll!70Ke+Tz>6&Vw0<_s8^n+#m~(U#7HOFS&XcGgEf zj$Flix9mqQg&%M8MDO{~l;A#s6xmE$$#ocSUdozWbP6ci@QMgp6z@-Q^Pg!A8-Rx)Z!mPrJJ_b*%Dm?9FkSS9k)5Bl`^F}v= zXLc2ybuxJ3P~nM>X_?m!RePQBGI&{`!pjZ@xk?ps9tK%Kh3tL?o0vD-7_3*TueGDv*{j#_0n+Do+NIjgMAHFp!O{Ct_LoiFbqFkzQrqLaXoLxv$A(VS_Atfie^ z0%s~@IMYF3q*8_v4}mU0hORcERb3Ed?LyT)^sh#LH-X_A8HQVk=ANrTf47VK*K+@6 z0#T<7(Ix_i>SQ?7NVNJ{Gy0!EixX+2+4=_Z#(Gwk&mFcBL4HH5htJ9KS?k9nKPo2= zSg>Xx`2$ILw4M}tjyr8wu#tlEc#jLIeFufll}rnIC-h?%;My}BnhXV{NIWJU2_(PA zN~wX6QsbP)+IHjQtN*`oig-=2DUr$|^KQ+X7ymQG*o)%5(-@_m$F~}yJdYE9QN=a8 Q)3Bkmh9$eVROhGu7ZgH`w*UYD literal 0 HcmV?d00001 diff --git a/project.godot b/project.godot index 67d2f76..8667a48 100644 --- a/project.godot +++ b/project.godot @@ -15,11 +15,6 @@ run/main_scene="res://scene.tscn" config/features=PackedStringArray("4.5", "Forward Plus") config/icon="res://icon.svg" -[display] - -window/size/viewport_width=800 -window/size/viewport_height=600 - [input] input_right={ diff --git a/scene.tscn b/scene.tscn index cdee063..5f209a2 100644 --- a/scene.tscn +++ b/scene.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=11 format=4 uid="uid://b7ndmr6uvnyqb"] +[gd_scene load_steps=12 format=4 uid="uid://b7ndmr6uvnyqb"] [ext_resource type="Texture2D" uid="uid://ddl0kxl0inw6r" path="res://tiles/atlas.png" id="1_3253y"] [ext_resource type="Script" uid="uid://c2x51mppxugpn" path="res://boxboy/boxboy.gd" id="1_nxogm"] [ext_resource type="Texture2D" uid="uid://bpjhq0b2dae1d" path="res://boxboy/boxboy.png" id="1_ulcgi"] [ext_resource type="PackedScene" uid="uid://b1hpr05b5sgww" path="res://platforms/Bouncy.tscn" id="4_u3cyc"] +[ext_resource type="PackedScene" uid="uid://8gd74f7ltuwk" path="res://platforms/Floaty.tscn" id="5_m7jmp"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u3cyc"] texture = ExtResource("1_3253y") @@ -57,24 +58,30 @@ height = 32.0 [node name="Node2D" type="Node2D"] [node name="TileMapLayer" type="TileMapLayer" parent="."] -position = Vector2(117, 76) -tile_map_data = PackedByteArray("AAD9/w0ABAAAAAAAAAD9/w4ABAABAAAAAAD9/w8ABAABAAAAAAD+/w0ABAAAAAAAAAD+/w4ABAABAAAAAAD+/w8ABAABAAAAAAD//w0ABAAAAAAAAAD//w4ABAABAAAAAAD//w8ABAABAAAAAAAAAA0ABAAAAAAAAAAAAA4ABAABAAAAAAAAAA8ABAABAAAAAAABAA0ABAAAAAAAAAABAA4ABAABAAAAAAABAA8ABAABAAAAAAACAA0ABAAAAAAAAAACAA4ABAABAAAAAAACAA8ABAABAAAAAAADAA0ABAAAAAAAAAADAA4ABAABAAAAAAADAA8ABAABAAAAAAAEAA0ABAAAAAAAAAAEAA4ABAABAAAAAAAEAA8ABAABAAAAAAAFAA0ABAAAAAAAAAAFAA4ABAABAAAAAAAFAA8ABAABAAAAAAAGAA0ABAAAAAAAAAAGAA4ABAABAAAAAAAGAA8ABAABAAAAAAAHAA0ABAAAAAAAAAAHAA4ABAABAAAAAAAHAA8ABAABAAAAAAAIAA0ABAAAAAAAAAAIAA4ABAABAAAAAAAIAA8ABAABAAAAAAAJAA0ABAAAAAAAAAAJAA4ABAABAAAAAAAJAA8ABAABAAAAAAAKAA0ABAAAAAAAAAAKAA4ABAABAAAAAAAKAA8ABAABAAAAAAALAA0ABAAAAAAAAAALAA4ABAABAAAAAAALAA8ABAABAAAAAAAMAA0ABAAAAAAAAAAMAA4ABAABAAAAAAAMAA8ABAABAAAAAAANAA0ABAAAAAAAAAANAA4ABAABAAAAAAANAA8ABAABAAAAAAAOAA0ABAAAAAAAAAAOAA4ABAABAAAAAAAOAA8ABAABAAAAAAAPAA0ABAAAAAAAAAAPAA4ABAABAAAAAAAPAA8ABAABAAAAAAAQAA0ABAAAAAAAAAAQAA4ABAABAAAAAAAQAA8ABAABAAAAAAARAA0ABAAAAAAAAAARAA4ABAABAAAAAAARAA8ABAABAAAAAAASAA0ABAAAAAAAAAASAA4ABAABAAAAAAASAA8ABAABAAAAAAATAA0ABAAAAAAAAAATAA4ABAABAAAAAAATAA8ABAABAAAAAAAUAA0ABAAAAAAAAAAUAA4ABAABAAAAAAAUAA8ABAABAAAAAAAVAA0ABAAAAAAAAAAVAA4ABAABAAAAAAAVAA8ABAABAAAAAAAWAA0ABAAAAAAAAAAWAA4ABAABAAAAAAAWAA8ABAABAAAAAAAXAA0ABAAAAAAAAAAXAA4ABAABAAAAAAAXAA8ABAABAAAAAAAYAA0ABAAAAAAAAAAYAA4ABAABAAAAAAAYAA8ABAABAAAAAAAZAA0ABAAAAAAAAAAZAA4ABAABAAAAAAAZAA8ABAABAAAAAAAaAA0ABAAAAAAAAAAaAA4ABAABAAAAAAAaAA8ABAABAAAAAAAbAA0ABAAAAAAAAAAbAA4ABAABAAAAAAAbAA8ABAABAAAAAAAcAA0ABAAAAAAAAAAcAA4ABAABAAAAAAAcAA8ABAABAAAAAAAdAA0ABAAAAAAAAAAdAA4ABAABAAAAAAAdAA8ABAABAAAAAAAeAA0ABAAAAAAAAAAeAA4ABAABAAAAAAAeAA8ABAABAAAAAAAfAA0ABAAAAAAAAAAfAA4ABAABAAAAAAAfAA8ABAABAAAAAAD9/xAABAABAAAAAAD+/xAABAABAAAAAAD//xAABAABAAAAAAAAABAABAABAAAAAAABABAABAABAAAAAAACABAABAABAAAAAAADABAABAABAAAAAAAEABAABAABAAAAAAAFABAABAABAAAAAAAGABAABAABAAAAAAAHABAABAABAAAAAAAIABAABAABAAAAAAAJABAABAABAAAAAAAKABAABAABAAAAAAALABAABAABAAAAAAAMABAABAABAAAAAAANABAABAABAAAAAAAOABAABAABAAAAAAAPABAABAABAAAAAAAQABAABAABAAAAAAARABAABAABAAAAAAASABAABAABAAAAAAATABAABAABAAAAAAAUABAABAABAAAAAAAVABAABAABAAAAAAAWABAABAABAAAAAAAXABAABAABAAAAAAAYABAABAABAAAAAAAZABAABAABAAAAAAAaABAABAABAAAAAAAbABAABAABAAAAAAAcABAABAABAAAAAAAdABAABAABAAAAAAAeABAABAABAAAAAAAfABAABAABAAAAAAAWAAoABAABAAAAAAAXAAoABAABAAAAAAAYAAoABAABAAAAAAAZAAoABAABAAAAAAAaAAoABAABAAAAAAAbAAoABAABAAAAAAAcAAoABAABAAAAAAAWAAkABAAAAAAAAAAXAAkABAAAAAAAAAAYAAkABAAAAAAAAAAZAAkABAAAAAAAAAAaAAkABAAAAAAAAAAbAAkABAAAAAAAAAAcAAkABAAAAAAAAAA=") +tile_map_data = PackedByteArray("AAD9/w0ABAAAAAAAAAD9/w4ABAABAAAAAAD9/w8ABAABAAAAAAD+/w0ABAAAAAAAAAD+/w4ABAABAAAAAAD+/w8ABAABAAAAAAD//w0ABAAAAAAAAAD//w4ABAABAAAAAAD//w8ABAABAAAAAAAAAA0ABAAAAAAAAAAAAA4ABAABAAAAAAAAAA8ABAABAAAAAAABAA0ABAAAAAAAAAABAA4ABAABAAAAAAABAA8ABAABAAAAAAACAA0ABAAAAAAAAAACAA4ABAABAAAAAAACAA8ABAABAAAAAAADAA0ABAAAAAAAAAADAA4ABAABAAAAAAADAA8ABAABAAAAAAAEAA0ABAAAAAAAAAAEAA4ABAABAAAAAAAEAA8ABAABAAAAAAAFAA0ABAAAAAAAAAAFAA4ABAABAAAAAAAFAA8ABAABAAAAAAAGAA0ABAAAAAAAAAAGAA4ABAABAAAAAAAGAA8ABAABAAAAAAAHAA0ABAAAAAAAAAAHAA4ABAABAAAAAAAHAA8ABAABAAAAAAAIAA0ABAAAAAAAAAAIAA4ABAABAAAAAAAIAA8ABAABAAAAAAAJAA0ABAAAAAAAAAAJAA4ABAABAAAAAAAJAA8ABAABAAAAAAAKAA0ABAAAAAAAAAAKAA4ABAABAAAAAAAKAA8ABAABAAAAAAALAA0ABAAAAAAAAAALAA4ABAABAAAAAAALAA8ABAABAAAAAAAMAA0ABAAAAAAAAAAMAA4ABAABAAAAAAAMAA8ABAABAAAAAAANAA0ABAAAAAAAAAANAA4ABAABAAAAAAANAA8ABAABAAAAAAAOAA0ABAAAAAAAAAAOAA4ABAABAAAAAAAOAA8ABAABAAAAAAAPAA0ABAAAAAAAAAAPAA4ABAABAAAAAAAPAA8ABAABAAAAAAAQAA4ABAABAAAAAAAQAA8ABAABAAAAAAARAA0ABAAAAAAAAAARAA4ABAABAAAAAAARAA8ABAABAAAAAAASAA0ABAAAAAAAAAASAA4ABAABAAAAAAASAA8ABAABAAAAAAATAA0ABAAAAAAAAAATAA4ABAABAAAAAAATAA8ABAABAAAAAAAUAA0ABAAAAAAAAAAUAA4ABAABAAAAAAAUAA8ABAABAAAAAAAVAA0ABAAAAAAAAAAVAA4ABAABAAAAAAAVAA8ABAABAAAAAAAWAA0ABAAAAAAAAAAWAA4ABAABAAAAAAAWAA8ABAABAAAAAAAXAA0ABAAAAAAAAAAXAA4ABAABAAAAAAAXAA8ABAABAAAAAAAYAA0ABAAAAAAAAAAYAA4ABAABAAAAAAAYAA8ABAABAAAAAAAZAA0ABAAAAAAAAAAZAA4ABAABAAAAAAAZAA8ABAABAAAAAAAaAA0ABAAAAAAAAAAaAA4ABAABAAAAAAAaAA8ABAABAAAAAAAbAA0ABAAAAAAAAAAbAA4ABAABAAAAAAAbAA8ABAABAAAAAAAcAA0ABAAAAAAAAAAcAA4ABAABAAAAAAAcAA8ABAABAAAAAAAdAA0ABAAAAAAAAAAdAA4ABAABAAAAAAAdAA8ABAABAAAAAAAeAA0ABAAAAAAAAAAeAA4ABAABAAAAAAAeAA8ABAABAAAAAAAfAA0ABAAAAAAAAAAfAA4ABAABAAAAAAAfAA8ABAABAAAAAAD9/xAABAABAAAAAAD+/xAABAABAAAAAAD//xAABAABAAAAAAAAABAABAABAAAAAAABABAABAABAAAAAAACABAABAABAAAAAAADABAABAABAAAAAAAEABAABAABAAAAAAAFABAABAABAAAAAAAGABAABAABAAAAAAAHABAABAABAAAAAAAIABAABAABAAAAAAAJABAABAABAAAAAAAKABAABAABAAAAAAALABAABAABAAAAAAAMABAABAABAAAAAAANABAABAABAAAAAAAOABAABAABAAAAAAAPABAABAABAAAAAAAQABAABAABAAAAAAARABAABAABAAAAAAASABAABAABAAAAAAATABAABAABAAAAAAAUABAABAABAAAAAAAVABAABAABAAAAAAAWABAABAABAAAAAAAXABAABAABAAAAAAAYABAABAABAAAAAAAZABAABAABAAAAAAAaABAABAABAAAAAAAbABAABAABAAAAAAAcABAABAABAAAAAAAdABAABAABAAAAAAAeABAABAABAAAAAAAfABAABAABAAAAAAAWAAoABAABAAAAAAAXAAoABAABAAAAAAAYAAoABAABAAAAAAAZAAoABAABAAAAAAAaAAoABAABAAAAAAAbAAoABAABAAAAAAAcAAoABAABAAAAAAAWAAkABAAAAAAAAAAXAAkABAAAAAAAAAAYAAkABAAAAAAAAAAZAAkABAAAAAAAAAAaAAkABAAAAAAAAAAbAAkABAAAAAAAAAAcAAkABAAAAAAAAAASAAMABAACAAAAAAASAAIABAACAAAAAAAQAA0ABAAAAAAAAAA=") tile_set = SubResource("TileSet_xlvrw") +metadata/_edit_lock_ = true [node name="Boxboy" type="CharacterBody2D" parent="."] -position = Vector2(117, 76) +position = Vector2(128, 384) script = ExtResource("1_nxogm") [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Boxboy"] sprite_frames = SubResource("SpriteFrames_y2354") animation = &"idle" +metadata/_edit_lock_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="Boxboy"] shape = SubResource("CapsuleShape2D_ulcgi") +metadata/_edit_lock_ = true [node name="Camera2D" type="Camera2D" parent="Boxboy"] +metadata/_edit_lock_ = true [node name="Bouncy" parent="." instance=ExtResource("4_u3cyc")] -position = Vector2(622, 475) +position = Vector2(528, 408) + +[node name="Floaty" parent="." instance=ExtResource("5_m7jmp")] +position = Vector2(224, 384) [connection signal="animation_finished" from="Boxboy/AnimatedSprite2D" to="Boxboy" method="_on_animation_finished"]