From f46808740cba0e04ec3ab02158317bc0bce0981e Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Tue, 4 Jul 2023 12:56:42 +0200 Subject: [PATCH] feat: new platform&deco tiles, fix bounce super jump, frog anim fix, blobby anim fix --- .../drop-through-platform.aseprite | Bin 0 -> 1305 bytes assets/contraption/drop-through-platform.png | Bin 0 -> 776 bytes .../drop-through-platform.png.import | 35 + {src => assets/effects}/transparency.gdshader | 0 .../environment/blocks/BasicTileSet.aseprite | Bin 0 -> 16389 bytes assets/environment/blocks/BasicTileSet.png | Bin 0 -> 10559 bytes .../blocks/BasicTileSet.png.import | 35 + .../decor/platform-plants.aseprite | Bin 0 -> 1835 bytes assets/environment/decor/platform-plants.png | Bin 0 -> 2011 bytes .../decor/platform-plants.png.import | 35 + default_env.tres | 1 + project.godot | 4 + src/Actors/Actor.gd | 27 +- src/Actors/Blobby/Blobby.gd | 748 +++++++++--------- src/Actors/Blobby/Blobby.tscn | 81 +- src/Actors/Blobby/BlobbyStateMachine.gd | 384 ++++----- src/Actors/Enemies/Beings/WhatAreFrog.gd | 22 +- src/Actors/Enemies/Beings/WhatAreFrog.tscn | 32 +- .../Enemies/Beings/WhatAreFrogStateMachine.gd | 104 +-- src/Contraptions/DropThroughPlatforms.tres | 135 ++++ src/Environment/AlienGreenHouseTilesNew.tres | 332 -------- src/Environment/Background.tscn | 12 - src/Environment/GrassWithBonesTest.tscn | 30 - src/Environment/GreenHouseTiles.tres | 178 +++++ src/Environment/GreenhousePlatformPlants.tres | 26 + src/Levels/1 Tutorial Level.tscn | 231 ++++++ src/Levels/2 Tut Level.tscn | 10 +- src/Levels/Actual Level 1.tscn | 4 +- src/Levels/{ => Legacy}/1 Tut Level.tscn | 257 +++--- src/Levels/New Tiles Level.tscn | 81 -- src/Levels/Templates/Template.tscn | 49 +- .../Sounds/default_bus_layout.tres | 0 .../Screens/InGameMenu/PauseScreen.tscn | 2 +- .../MainMenu/ControlsMenu/ControlsMenu.tscn | 2 +- 34 files changed, 1526 insertions(+), 1331 deletions(-) create mode 100644 assets/contraption/drop-through-platform.aseprite create mode 100644 assets/contraption/drop-through-platform.png create mode 100644 assets/contraption/drop-through-platform.png.import rename {src => assets/effects}/transparency.gdshader (100%) create mode 100644 assets/environment/blocks/BasicTileSet.aseprite create mode 100644 assets/environment/blocks/BasicTileSet.png create mode 100644 assets/environment/blocks/BasicTileSet.png.import create mode 100644 assets/environment/decor/platform-plants.aseprite create mode 100644 assets/environment/decor/platform-plants.png create mode 100644 assets/environment/decor/platform-plants.png.import create mode 100644 src/Contraptions/DropThroughPlatforms.tres delete mode 100644 src/Environment/AlienGreenHouseTilesNew.tres delete mode 100644 src/Environment/Background.tscn delete mode 100644 src/Environment/GrassWithBonesTest.tscn create mode 100644 src/Environment/GreenHouseTiles.tres create mode 100644 src/Environment/GreenhousePlatformPlants.tres create mode 100644 src/Levels/1 Tutorial Level.tscn rename src/Levels/{ => Legacy}/1 Tut Level.tscn (80%) delete mode 100644 src/Levels/New Tiles Level.tscn rename default_bus_layout.tres => src/Sounds/default_bus_layout.tres (100%) diff --git a/assets/contraption/drop-through-platform.aseprite b/assets/contraption/drop-through-platform.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..b2db99b083771436de7154df3a6e7d6d6b264c61 GIT binary patch literal 1305 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 literal 0 HcmV?d00001 diff --git a/assets/environment/blocks/BasicTileSet.png.import b/assets/environment/blocks/BasicTileSet.png.import new file mode 100644 index 0000000..3fe3931 --- /dev/null +++ b/assets/environment/blocks/BasicTileSet.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/BasicTileSet.png-04d4931c2faae497a949588d0e9937bb.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/environment/blocks/BasicTileSet.png" +dest_files=[ "res://.import/BasicTileSet.png-04d4931c2faae497a949588d0e9937bb.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/assets/environment/decor/platform-plants.aseprite b/assets/environment/decor/platform-plants.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..11a0dab6d8230d4e869de60773bc8fcedfb3831f GIT binary patch literal 1835 zcmdUvdsLEV9LHa$NypXHENyCmX_wOtubGO{T}!Lwmd#w+x@altrfCuc)=EuFGpA-+ zl-fltyp}UFRJ@yE+Hz2Wcg;k>8=%0uAJsYQ?En3-hx7Y94-fBqzMuC2erqrY(sfr2 zLDX&|I0Rz5$#a-vCVO{|@N?+#G28dl1m|Bp&GQ zY6i3<*a3;eQ$X{>=Yd{9-N2*iDA1>+57_)x4n$QONcy8vm@d$wfhYa_fu0`j!0;`x zz=xKWK<JN8osLmY+3wQ{40?-F{5C>~e249c`Q_uuQ5Cl6= z122#QBhXQ~peR^?0^~zDBttA@LLj6;)POpIn5t3`IC4Z6O7)%o`=k-%DO?wkA@p*H zUudDzSxj@BXROs<`6>@i6lVaKh^6gN5@n@zm+3e%X`eUfRtmgkOjBy>EENuW0)IeL(=W0zR3O-T0!4K`IaNeUK8HQyVUdDFC?O%tj!9kHb~ z0U^zW0i304#g+2uy5DHlvNC+@Wc_Tcs5E9qG%mS1z%m^t)iNSXHRI*Qe>&@b{rrzJ zfxdEVub-UdC1xq?gN1CFxA(hfQTeoRs$z{igpruF0L||gi22KuY$hdjc|r*}D61gZ zdr$4#iMaYRd=IBkuINQz=2;d=*lW8#yrjOu*somL#%nKSQ!zg_5ZaQW@&_uoRGY2t z_xEw{d_T0N_|3VvBZV7w%nZx6<5M2oV5>6@>2aTJDn@USu0`x&E0B(k2B)h&6E;^t$E^ys<>Sw2V4AFT-zr8Q&z|ui}?#sp<1=Q(q(kZ{cb61=u{nQp==d1di@k*Q8Zehu)R5jiRw;wP6+Z| zqd3M@lHFQN|;8%o6aluQ^WY*lm(r!pw6fMfH7vsuB0b3T$rUXoyJ*@Btwfo z(Dgm1h;e%gl`C_u8F6M9@q%1sw9|l$K~@gZ?a-|@>vC%YJ(EmxGtkYub*H#m=;fse z7D}&xs#x^R!Hu<2e3)VK&9Ueg(tP-ZFvRpaI=0(wnYi>NHC)`BR^!OuIANFBCKD_X zIHF6&*7Xp_j*g-N9Um`4S_#VGlgq`y%Rp5)Vh4jSZJbIO~Lz=HEYD5i_N9gqvJf#7ju2$`KiJ=Am z>rajH|Fbd$XAPV>@)gXV1~f+mgSh=nJ|2RzP;Fg+nuAlVpyfh?`ZVSvbD(cR=flE# z9MmSLNT|;vBIDxAZmme%JdLjOgDJk#%Drzl8;nH1sjAmFZLY4f%02Us) nxx;Dp`>hTehoaH^-Bx?;?*|PJmn3xB?vwZsDNeR21&I7_f>q%j literal 0 HcmV?d00001 diff --git a/assets/environment/decor/platform-plants.png b/assets/environment/decor/platform-plants.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdcc96685aedc73ccbe6b1eaad1451c52ad431e GIT binary patch literal 2011 zcmV<12PF83P)Px+l}SWFRCt`tTTN&iM-+ZjLXql2P-_sxhQ^}!kP;%W+fYzRdMUC^iybg15Kwwa z6XjALOd%K_jLAg-rI*B2p~Qz0gTZzKO595wQ(vrDWuZ6+B}g*J1yQxC55hX-^&r3X z>}qFs_D}8y21&c`eY4+tGduHU%)n!057MZV3-BPi#Oz#iYwN}b{ceQPMithlwxl@q z;CWI?0iy)kjAe$_i@_VJ9ER2#@Hns%5<5>B&f=EB3_VM5K z`gxr{jwWinlf<&aPt(oKxgDkk z@z<9C%P)j}q60(fpb#Axf?z11e$O7HF_|03-Ido+E7ncl>O%fJ0K5`EH_tE9ubfBx z=FJOf{rH)L6Nm-|FJaV1L;Wnk>t_eD`J+4ms8#>%3co1+Sg7Fh=z?YZh4y<9e185P zQ+v;5AhMvs+u4i#stA1TK#yQ3pt(+KV88j<^r)@iQsShP1g`w}bI0!@Q1CkVCreWN zB71=2B$m}rW&kiN!pROmB2BCc#V-x1sUHh`FoTAOn_3}yj?p@5onqQYKyuorsz0+2mOx4- zGB=K!b35#?(XRL|j;%3KVXv}Xh3LSLD!A+n#16k3#4|CBXJTp%WN~awY8p+0hg*JG z{b)8Ks~@d(-PTO3{JU*~Tm3}nR{nUwFB5-SlI!CyZGSWy(cAknfFyI{sFVwa1s}dR z#8>PW$JRQ|6vQ(zJbSSplyU*G2WfSi(GPwZV4;GzvZJY{A2yDQq_XR8e(;ijyt0Vr>_MhJZcITz^3cxn_q7HyJ2?@}C2pT--yJ#EN4}Kn)eu{YYAtrODP_?nV4s6?ZOv^@jL1M zBC3~Lt!Ahd>kx+HLK+o!ZgYhm*&Pf!pi_`$XF9Cxoen%+@Dud<@!(?^3OnvT7yRihG1fz zv73)V!o>D_NovQx-L}}(Z*>MyDHmYjdgDa$2h&g6`Fr)Dud{cm;YA0AfK87w_V|{q zmjjzDv61STw*6#@u{$rld$~}h*3WIcl#;;gL0bLunqTj;+whxzbp}=Kyy`6fC%Dn? tr1Pg6{Rh)e)%ZIZtZ+GUY=88!{ttT1Y0u4G_wE1y002ovPDHLkV1fo&_hJA5 literal 0 HcmV?d00001 diff --git a/assets/environment/decor/platform-plants.png.import b/assets/environment/decor/platform-plants.png.import new file mode 100644 index 0000000..a3d7a74 --- /dev/null +++ b/assets/environment/decor/platform-plants.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/platform-plants.png-96350e262143adfad190cbcaf19c9adf.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/environment/decor/platform-plants.png" +dest_files=[ "res://.import/platform-plants.png-96350e262143adfad190cbcaf19c9adf.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/default_env.tres b/default_env.tres index 20207a4..fef7845 100644 --- a/default_env.tres +++ b/default_env.tres @@ -5,3 +5,4 @@ [resource] background_mode = 2 background_sky = SubResource( 1 ) +tonemap_mode = 2 diff --git a/project.godot b/project.godot index d8dad77..5866eea 100644 --- a/project.godot +++ b/project.godot @@ -96,6 +96,10 @@ config/name="Blobby" run/main_scene="res://src/UserInterface/Screens/MainMenu/MainScreen.tscn" config/icon="res://icon.png" +[audio] + +default_bus_layout="res://src/Sounds/default_bus_layout.tres" + [autoload] GlobalState="*res://src/Autoload/GlobalState.tscn" diff --git a/src/Actors/Actor.gd b/src/Actors/Actor.gd index 5eb9253..b997288 100644 --- a/src/Actors/Actor.gd +++ b/src/Actors/Actor.gd @@ -10,33 +10,34 @@ const PhysicsConst = preload("res://src/Utilities/Physic/PhysicsConst.gd") const FLOOR_NORMAL := Vector2.UP -var stomp_feedback := 1400 -var reset_stomp_time := 0.108 -var stomp_time := 0.108 +var stomp_feedback := 1400 * 60 +var stomp_time := 0.2 +var init_stomp_time := 0.2 var inair_velocity := 21 var wallslide_threshold := 1000 var base_floor_friction := 0.5 var initial_velocity_dependence := 0.7 var floor_friction := base_floor_friction +# TODO Mixing Vectors and ints is questionable var max_velocity := { - "walk": 120, "run": 160, "jump": Vector2(120, 420), "fall": Vector2(120, 420), "walljump": 200, "idle": 12000, "duck": 160 + "walk": 120, "run": 160, "jump": Vector2(120, 420), "fall": Vector2(120, 420), "walljump": 200, "idle": 12000, "duck": 160 } var velocity_jump_boost_ratio := 10 # This is added to the acceleration force initially var init_acceleration_force := { - "": 0, "idle_walk": 4181, "idle_run": 5765, "walk_run": 1000 + "": 0, "idle_walk": 4181, "idle_run": 5765, "walk_run": 1000 } # Oriented around deltas of 0.0166666...s # newtonmeters is the unit var acceleration_force := { - "walk": Vector2(1800, 1350), - "fall": Vector2(1800, 0), - "jump": Vector2(1800, 0), - "idle": Vector2(1800, 1233), - "duck": Vector2(500, 1300), - "run": Vector2(2500, 1400), - "walljump": Vector2(600, 1050), - "air_strafe": Vector2(333, 2000) + "walk": Vector2(1800, 1350), + "fall": Vector2(1800, 1050), + "jump": Vector2(1800, 0), + "idle": Vector2(1800, 1233), + "duck": Vector2(500, 1300), + "run": Vector2(2500, 1400), + "walljump": Vector2(600, 1050), + "air_strafe": Vector2(333, 2000) } # Gravity as m/s^2 var _gravity: float = PhysicsConst.gravity diff --git a/src/Actors/Blobby/Blobby.gd b/src/Actors/Blobby/Blobby.gd index 1194d04..b6b6f61 100644 --- a/src/Actors/Blobby/Blobby.gd +++ b/src/Actors/Blobby/Blobby.gd @@ -24,487 +24,493 @@ var snap_possible = true var shielded = false func execute_movement() -> void: - if(levelState.is_dead): - return - var snap = Vector2.DOWN * 128 - var center_floor_rot = 0 - var floor_rot = 0 - var onfloor = is_on_floor() + if(levelState.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 + 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()) - ): - 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()) + ): + 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()) - ): - 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 + + ( + 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()) + ): + 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 # 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 # Attached to wall state is in the PlayerStateMachine func is_correct_walljump_input(direction: Vector2) -> bool: - return ( - Input.is_action_pressed("jump") - && abs(direction.x + wall_touch_direction) < 1 - && abs(direction.x + wall_touch_direction) >= 0 - ) + return ( + Input.is_action_pressed("jump") + && abs(direction.x + wall_touch_direction) < 1 + && abs(direction.x + wall_touch_direction) >= 0 + ) 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_jump_velocity( - linear_velocity: Vector2, delta: float, direction: Vector2 + 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 += stomp_feedback / delta - stomp_time -= delta - if stomp_time <= 0: - stomp_time = reset_stomp_time - stomping = false + 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 += stomp_feedback + stomp_time -= delta + # print(stomp_time) + if stomp_time <= 0: +# print("stomping over") + stomping = false + stomp_time = init_stomp_time - if state != "jump": - linear_velocity.y = PhysicsFunc.two_step_euler( - linear_velocity.y, - (acceleration_force[state].y / delta + additive_jump_force) * -1, - mass, - delta - ) + if state != "jump": + linear_velocity.y = PhysicsFunc.two_step_euler( + linear_velocity.y, + (acceleration_force[state].y / delta + additive_jump_force) * -1, + mass, + delta + ) +# print(acceleration_force[state].y) +# print(linear_velocity.y) - if !Input.is_action_pressed("jump") && !stomping: - # Smooth transition from jumping to falling - if velocity.y > _gravity * delta * 10: - linear_velocity.y += _gravity * delta * 10 - else: - linear_velocity.y += ( - max(abs(linear_velocity.y), _gravity * delta) - / 2 - ) + if !Input.is_action_pressed("jump") && !stomping: + # Smooth transition from jumping to falling + if velocity.y > _gravity * delta * 10: + linear_velocity.y += _gravity * delta * 10 + else: + linear_velocity.y += ( + max(abs(linear_velocity.y), _gravity * delta) + / 2 + ) - else: - linear_velocity.y += _gravity * delta + else: + linear_velocity.y += _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 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 - ) + # 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 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 is_correct_airstrafe_input(): - linear_velocity = execute_airstrafe(linear_velocity, delta, direction) - return linear_velocity + if is_correct_airstrafe_input(): + linear_velocity = execute_airstrafe(linear_velocity, delta, direction) +# print(linear_velocity.y) + return linear_velocity # Only applicable to downwards gravity # Can set the jump buffer func calculate_fall_velocity( - linear_velocity: Vector2, delta: float, direction: Vector2 + 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) - else: - # TODO dont put constants in here - linear_velocity.y = PhysicsFunc.two_step_euler( - linear_velocity.y*0.94, _gravity * mass, mass, delta - ) - 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) + else: + # TODO dont put constants in here + linear_velocity.y = PhysicsFunc.two_step_euler( + linear_velocity.y*0.94, _gravity * mass, mass, delta + ) + 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 + 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: - stomping = true +# print("stomping") + 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 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 - signalManager.emit_signal("player_died", animation_number) - $BlobbySprite/AnimationTree.active = false - $BlobbySprite/BlobbymationPlayer.play("dying3") - if animation_number < 1: - $BlobbySprite/BlobbymationPlayer.play("expandingDisolve") + 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 + signalManager.emit_signal("player_died", animation_number) + $BlobbySprite/AnimationTree.active = false + $BlobbySprite/BlobbymationPlayer.play("dying3") + if animation_number < 1: + $BlobbySprite/BlobbymationPlayer.play("expandingDisolve") 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") && !levelState.is_dead: - die() - if area.is_in_group("pit"): - $PitfallTimer.start() - + if area.is_in_group("harmful") && !levelState.is_dead: + die() + if area.is_in_group("pit"): + $PitfallTimer.start() + # When the Enemy collision BODY enters the enemy collision area -> die func _on_BlobbySkin_body_entered(body: Node) -> void: - if body.is_in_group("harmful") && !levelState.is_dead: - die() + if body.is_in_group("harmful") && !levelState.is_dead: + die() # This problem stems from trying to decelerate a walk # that was caused by the moving environment and not by input # 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_PitfallTimer_timeout() -> void: - # TODO Debuff function to remove wanted buffs - shielded = false - levelState.player_dying() - respawn() + # TODO Debuff function to remove wanted buffs + shielded = false + levelState.player_dying() + respawn() 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 8d1b14a..18a7e24 100644 --- a/src/Actors/Blobby/Blobby.tscn +++ b/src/Actors/Blobby/Blobby.tscn @@ -1173,7 +1173,7 @@ tracks/1/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 12.5424, 10.5016 ) ] +"values": [ Vector2( 12, 10.502 ) ] } tracks/2/type = "value" tracks/2/path = NodePath("../BlobbySkin/CollisionPolygon2D:position") @@ -1197,7 +1197,7 @@ tracks/3/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 11, 10.525 ) ] +"values": [ Vector2( 12, 10.525 ) ] } tracks/4/type = "value" tracks/4/path = NodePath("../BlobbyBody:position") @@ -1209,7 +1209,7 @@ tracks/4/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 0.5, -10.481 ) ] +"values": [ Vector2( 0, -10.481 ) ] } tracks/5/type = "value" tracks/5/path = NodePath("../WallRaycasts/LeftWallRaycast/Left_Wallcast1:position") @@ -1221,7 +1221,7 @@ tracks/5/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -10.5, -13 ) ] +"values": [ Vector2( -12, -13 ) ] } tracks/6/type = "value" tracks/6/path = NodePath("../WallRaycasts/LeftWallRaycast/Left_Wallcast2:position") @@ -1233,7 +1233,7 @@ tracks/6/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -10.5, -5 ) ] +"values": [ Vector2( -12, -5 ) ] } tracks/7/type = "value" tracks/7/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast1:position") @@ -1245,7 +1245,7 @@ tracks/7/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 11.5, -13 ) ] +"values": [ Vector2( 12, -13 ) ] } tracks/8/type = "value" tracks/8/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast2:position") @@ -1257,7 +1257,7 @@ tracks/8/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 11.5, -5 ) ] +"values": [ Vector2( 12, -5 ) ] } tracks/9/type = "value" tracks/9/path = NodePath(".:offset") @@ -1310,7 +1310,7 @@ tracks/1/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 12.5424, 10.5016 ) ] +"values": [ Vector2( 12, 10.502 ) ] } tracks/2/type = "value" tracks/2/path = NodePath("../BlobbySkin/CollisionPolygon2D:position") @@ -1334,7 +1334,7 @@ tracks/3/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 11, 10.525 ) ] +"values": [ Vector2( 12, 10.525 ) ] } tracks/4/type = "value" tracks/4/path = NodePath("../BlobbyBody:position") @@ -1346,7 +1346,7 @@ tracks/4/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -0.5, -10.481 ) ] +"values": [ Vector2( 0, -10.481 ) ] } tracks/5/type = "value" tracks/5/path = NodePath("../WallRaycasts/LeftWallRaycast/Left_Wallcast1:position") @@ -1358,7 +1358,7 @@ tracks/5/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -11, -13 ) ] +"values": [ Vector2( -12, -13 ) ] } tracks/6/type = "value" tracks/6/path = NodePath("../WallRaycasts/LeftWallRaycast/Left_Wallcast2:position") @@ -1370,7 +1370,7 @@ tracks/6/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -11.5, -5 ) ] +"values": [ Vector2( -12, -5 ) ] } tracks/7/type = "value" tracks/7/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast1:position") @@ -1382,7 +1382,7 @@ tracks/7/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 10.5, -13 ) ] +"values": [ Vector2( 12, -13 ) ] } tracks/8/type = "value" tracks/8/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast2:position") @@ -1394,7 +1394,7 @@ tracks/8/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 10.5, -5 ) ] +"values": [ Vector2( 12, -5 ) ] } tracks/9/type = "value" tracks/9/path = NodePath(".:offset") @@ -1494,7 +1494,7 @@ tracks/5/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -13.0423, -10.6856 ) ] +"values": [ Vector2( -13, -10.686 ) ] } tracks/6/type = "value" tracks/6/path = NodePath("../WallRaycasts/LeftWallRaycast/Left_Wallcast2:position") @@ -1506,7 +1506,7 @@ tracks/6/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -13.0423, -1.94163 ) ] +"values": [ Vector2( -13, -1.942 ) ] } tracks/7/type = "value" tracks/7/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast2:position") @@ -1518,7 +1518,7 @@ tracks/7/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 13.0235, -1.94163 ) ] +"values": [ Vector2( 13, -1.942 ) ] } tracks/8/type = "value" tracks/8/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast1:position") @@ -1530,7 +1530,7 @@ tracks/8/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 13.0235, -10.6856 ) ] +"values": [ Vector2( 13, -10.686 ) ] } tracks/9/type = "value" tracks/9/path = NodePath(".:offset") @@ -1855,7 +1855,7 @@ tracks/1/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 13.0235, -10.6856 ) ] +"values": [ Vector2( 12, -10.686 ) ] } tracks/2/type = "value" tracks/2/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast2:position") @@ -1867,7 +1867,7 @@ tracks/2/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 13.0235, -1.94163 ) ] +"values": [ Vector2( 12, -1.942 ) ] } tracks/3/type = "value" tracks/3/path = NodePath("../WallRaycasts/LeftWallRaycast/Left_Wallcast2:position") @@ -1891,7 +1891,7 @@ tracks/4/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -13.0423, -10.6856 ) ] +"values": [ Vector2( -12, -10.686 ) ] } tracks/5/type = "value" tracks/5/path = NodePath("../BlobbySkin/CollisionPolygon2D:shape:extents") @@ -1903,7 +1903,7 @@ tracks/5/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 12.9698, 8.9748 ) ] +"values": [ Vector2( 12, 8.975 ) ] } tracks/6/type = "value" tracks/6/path = NodePath("../BlobbySkin/CollisionPolygon2D:position") @@ -1927,7 +1927,7 @@ tracks/7/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 12.971, 8.99662 ) ] +"values": [ Vector2( 12, 8.997 ) ] } tracks/8/type = "value" tracks/8/path = NodePath("../BlobbyBody:position") @@ -1992,7 +1992,7 @@ tracks/1/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 13.0235, -10.6856 ) ] +"values": [ Vector2( 12, -10.686 ) ] } tracks/2/type = "value" tracks/2/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast2:position") @@ -2004,7 +2004,7 @@ tracks/2/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 13.0235, -1.94163 ) ] +"values": [ Vector2( 12, -1.942 ) ] } tracks/3/type = "value" tracks/3/path = NodePath("../WallRaycasts/LeftWallRaycast/Left_Wallcast2:position") @@ -2016,7 +2016,7 @@ tracks/3/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -13.0423, -1.94163 ) ] +"values": [ Vector2( -12, -1.942 ) ] } tracks/4/type = "value" tracks/4/path = NodePath("../WallRaycasts/LeftWallRaycast/Left_Wallcast1:position") @@ -2028,7 +2028,7 @@ tracks/4/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -13.0423, -10.6856 ) ] +"values": [ Vector2( -12, -10.686 ) ] } tracks/5/type = "value" tracks/5/path = NodePath("../BlobbySkin/CollisionPolygon2D:shape:extents") @@ -2040,7 +2040,7 @@ tracks/5/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 12.9698, 8.9748 ) ] +"values": [ Vector2( 12, 8.975 ) ] } tracks/6/type = "value" tracks/6/path = NodePath("../BlobbySkin/CollisionPolygon2D:position") @@ -2064,7 +2064,7 @@ tracks/7/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 12.971, 8.99662 ) ] +"values": [ Vector2( 12, 8.997 ) ] } tracks/8/type = "value" tracks/8/path = NodePath("../BlobbyBody:position") @@ -2140,7 +2140,7 @@ tracks/2/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 11.9889, 9.98094 ) ] +"values": [ Vector2( 12, 9.981 ) ] } tracks/3/type = "value" tracks/3/path = NodePath("../BlobbyBody:position") @@ -2277,7 +2277,7 @@ tracks/2/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 11.9889, 9.98094 ) ] +"values": [ Vector2( 12, 9.981 ) ] } tracks/3/type = "value" tracks/3/path = NodePath("../BlobbyBody:position") @@ -2425,7 +2425,7 @@ tracks/3/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 10.0201, 10.5337 ) ] +"values": [ Vector2( 11, 10.534 ) ] } tracks/4/type = "value" tracks/4/path = NodePath("../BlobbyBody:position") @@ -2449,7 +2449,7 @@ tracks/5/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -10.012, -12.8494 ) ] +"values": [ Vector2( -11, -12.849 ) ] } tracks/6/type = "value" tracks/6/path = NodePath("../WallRaycasts/LeftWallRaycast/Left_Wallcast2:position") @@ -2461,7 +2461,7 @@ tracks/6/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -10.012, -5.91313 ) ] +"values": [ Vector2( -11, -5.913 ) ] } tracks/7/type = "value" tracks/7/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast1:position") @@ -2562,7 +2562,7 @@ tracks/3/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 10.0201, 10.5337 ) ] +"values": [ Vector2( 11, 10.534 ) ] } tracks/4/type = "value" tracks/4/path = NodePath("../BlobbyBody:position") @@ -2586,7 +2586,7 @@ tracks/5/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -10.012, -12.8494 ) ] +"values": [ Vector2( -11, -12.849 ) ] } tracks/6/type = "value" tracks/6/path = NodePath("../WallRaycasts/LeftWallRaycast/Left_Wallcast2:position") @@ -2598,7 +2598,7 @@ tracks/6/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( -10.012, -5.91313 ) ] +"values": [ Vector2( -11, -5.913 ) ] } tracks/7/type = "value" tracks/7/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast1:position") @@ -2610,7 +2610,7 @@ tracks/7/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 10.0805, -12.8494 ) ] +"values": [ Vector2( 11, -12.849 ) ] } tracks/8/type = "value" tracks/8/path = NodePath("../WallRaycasts/RightWallRaycast/Right_Wallcast2:position") @@ -2622,7 +2622,7 @@ tracks/8/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 10.0805, -5.91313 ) ] +"values": [ Vector2( 11, -5.913 ) ] } tracks/9/type = "value" tracks/9/path = NodePath(".:offset") @@ -4362,21 +4362,18 @@ collision_mask = 40 [node name="SlopeRaycastLeft" type="RayCast2D" parent="."] visible = false position = Vector2( -9, 0 ) -enabled = true cast_to = Vector2( 0, 24 ) collision_mask = 8 [node name="SlopeRaycast" type="RayCast2D" parent="."] unique_name_in_owner = true visible = false -enabled = true cast_to = Vector2( 0, 16 ) collision_mask = 8 [node name="SlopeRaycastRight" type="RayCast2D" parent="."] visible = false position = Vector2( 10, 0 ) -enabled = true cast_to = Vector2( 0, 24 ) collision_mask = 8 diff --git a/src/Actors/Blobby/BlobbyStateMachine.gd b/src/Actors/Blobby/BlobbyStateMachine.gd index aef421d..8bda016 100644 --- a/src/Actors/Blobby/BlobbyStateMachine.gd +++ b/src/Actors/Blobby/BlobbyStateMachine.gd @@ -21,249 +21,249 @@ var was_coyote_hanging = false # Adds the intial states func _ready(): - signalManager.connect("getback_timer_up", parent, "die_for_real", [1]) - signalManager.connect("power_up_collected", parent, "receive_power_up") - signalManager.connect("got_stomped", parent, "stomp") - anim_player.play("RESET") - add_state("idle") - add_state("duck") - add_state("run") - add_state("walk") - add_state("jump") - add_state("fall") - add_state("wallslide") - state = states.idle - levelState.is_dead = false - set_state(states.idle) + signalManager.connect("getback_timer_up", parent, "die_for_real", [1]) + signalManager.connect("power_up_collected", parent, "receive_power_up") + signalManager.connect("got_stomped", parent, "stomp") + anim_player.play("RESET") + add_state("idle") + add_state("duck") + add_state("run") + add_state("walk") + add_state("jump") + add_state("fall") + add_state("wallslide") + state = states.idle + levelState.is_dead = false + set_state(states.idle) - # Zero Vector is false - if(GlobalState.get_savepoint(levelState.levelName)): - parent.global_position = GlobalState.get_savepoint(levelState.levelName) + # Zero Vector is false + if(GlobalState.get_savepoint(levelState.levelName)): + parent.global_position = GlobalState.get_savepoint(levelState.levelName) # Calls the parent behaviours according to state func _state_logic(delta): - # RayCasts for visual debugging - # TODO Global context switch for debug/build mode - # \ is for new line in multiline statements - # parent.get_node("CollisionShape2D/RayCaster")._raycast( - # Vector2.DOWN, - # parent.get_node("CollisionShape2D").get_shape(), - # parent.collision_mask - # ) + # RayCasts for visual debugging + # TODO Global context switch for debug/build mode + # \ is for new line in multiline statements + # parent.get_node("CollisionShape2D/RayCaster")._raycast( + # Vector2.DOWN, + # parent.get_node("CollisionShape2D").get_shape(), + # parent.collision_mask + # ) - var handle_input_ref + var handle_input_ref - match self.state: - "idle": - handle_input_ref = funcref(self, "handle_idle_input") - "duck": - handle_input_ref = funcref(self, "handle_duck_input") - "walk": - handle_input_ref = funcref(self, "handle_walk_input") - "run": - handle_input_ref = funcref(self, "handle_run_input") - "jump": - handle_input_ref = funcref(self, "handle_jump_input") - "fall": - handle_input_ref = funcref(self, "handle_fall_input") - "wallslide": - handle_input_ref = funcref(self, "handle_wallslide_input") - _: - print("don't panik") - var texture = $"%BubbleShieldViewport".get_texture() - $"%Blobby3DEffects".texture = texture - var direction = get_horizontal_direction() - didTurn = false + match self.state: + "idle": + handle_input_ref = funcref(self, "handle_idle_input") + "duck": + handle_input_ref = funcref(self, "handle_duck_input") + "walk": + handle_input_ref = funcref(self, "handle_walk_input") + "run": + handle_input_ref = funcref(self, "handle_run_input") + "jump": + handle_input_ref = funcref(self, "handle_jump_input") + "fall": + handle_input_ref = funcref(self, "handle_fall_input") + "wallslide": + handle_input_ref = funcref(self, "handle_wallslide_input") + _: + print("don't panik") + var texture = $"%BubbleShieldViewport".get_texture() + $"%Blobby3DEffects".texture = texture + var direction = get_horizontal_direction() + didTurn = false - #TODO use blendspace value 0 for turn animations instead of this? - # Can you make the blendspace animation play out till end? - if direction.x < 0 && facing == 1: - didTurn = true - facing = -1 - elif direction.x > 0 && facing == -1: - didTurn = true - facing = 1 + #TODO use blendspace value 0 for turn animations instead of this? + # Can you make the blendspace animation play out till end? + if direction.x < 0 && facing == 1: + didTurn = true + facing = -1 + elif direction.x > 0 && facing == -1: + didTurn = true + facing = 1 - #TODO Yeah... deal with it - - if didTurn: - _set_blendspaces_direction(facing) - _trigger_turn_animation() + #TODO Yeah... deal with it + + if didTurn: + _set_blendspaces_direction(facing) + _trigger_turn_animation() - parent.velocity = handle_input_ref.call_func(delta, direction) + parent.velocity = handle_input_ref.call_func(delta, direction) - parent.execute_movement() + parent.execute_movement() func handle_idle_input(delta, direction) -> Vector2: - return parent.handle_grounded_movement(delta, direction) + return parent.handle_grounded_movement(delta, direction) func handle_duck_input(delta, direction) -> Vector2: - return parent.handle_duck_movement(delta, direction) + return parent.handle_duck_movement(delta, direction) func handle_walk_input(delta, direction) -> Vector2: - return parent.handle_grounded_movement(delta, direction) + return parent.handle_grounded_movement(delta, direction) func handle_run_input(delta, direction) -> Vector2: - return parent.handle_grounded_movement(delta, direction) + return parent.handle_grounded_movement(delta, direction) func handle_jump_input(delta, direction) -> Vector2: - return parent.handle_jump_movement(delta, direction) + return parent.handle_jump_movement(delta, direction) func handle_fall_input(delta, direction) -> Vector2: - return parent.handle_fall_movement(delta, direction) + return parent.handle_fall_movement(delta, direction) func handle_wallslide_input(delta, direction) -> Vector2: - return parent.handle_wallslide_movement(delta, direction) + return parent.handle_wallslide_movement(delta, direction) func get_horizontal_direction() -> Vector2: - #TODO Check if this is fixed yet -> Seems like it, idk what i meant by that lul xd roflcopter lmao wtfbbq1!!!11! - if Input.is_action_pressed("move_right"): - return Vector2(1, 0) - if Input.is_action_pressed("move_left"): - return Vector2(-1, 0) - return Vector2(0,0); + #TODO Check if this is fixed yet -> Seems like it, idk what i meant by that lul xd roflcopter lmao wtfbbq1!!!11! + if Input.is_action_pressed("move_right"): + return Vector2(1, 0) + if Input.is_action_pressed("move_left"): + return Vector2(-1, 0) + return Vector2(0,0); # Determines which state should be active at the moment func _get_transition(delta): - parent.get_node("StateLabel").text = ( - self.state - + " x vel:" - + String(round(parent.velocity.x)) - # + " y vel/10:" - # + String(round(parent.velocity.y / 10)) - ) - var new_state - if !parent.is_on_floor(): - if parent.velocity.y < -1: - was_coyote_hanging = false - parent.jump_buffer_filled = false - new_state = states.jump + parent.get_node("StateLabel").text = ( + self.state + + " x vel:" + + String(round(parent.velocity.x)) + # + " y vel/10:" + # + String(round(parent.velocity.y / 10)) + ) + var new_state + if !parent.is_on_floor(): + if parent.velocity.y < -1: + was_coyote_hanging = false + parent.jump_buffer_filled = false + new_state = states.jump - # TODO SOMETHING IS SETTING Y SLIGHTLY BELOW ZERO WHEN MOVING HORIZONTALLY??? - if parent.velocity.y >= -0.01: - new_state = states.fall - if parent.is_touching_wall_completely(): - anim_tree.set("parameters/wallslideToJump/blend_position", parent.wall_touch_direction) - anim_tree.set("parameters/wallsliding/blend_position", parent.wall_touch_direction) - new_state = states.wallslide - # Begins coyote time only if walking from ledge - elif [states.walk, states.run].has(self.state) && !was_coyote_hanging: - $CoyoteTimer.start() - coyote_hanging = true - was_coyote_hanging = true + # TODO SOMETHING IS SETTING Y SLIGHTLY BELOW ZERO WHEN MOVING HORIZONTALLY??? + if parent.velocity.y >= -0.01: + new_state = states.fall + if parent.is_touching_wall_completely(): + anim_tree.set("parameters/wallslideToJump/blend_position", parent.wall_touch_direction) + anim_tree.set("parameters/wallsliding/blend_position", parent.wall_touch_direction) + new_state = states.wallslide + # Begins coyote time only if walking from ledge + elif [states.walk, states.run].has(self.state) && !was_coyote_hanging: + $CoyoteTimer.start() + coyote_hanging = true + was_coyote_hanging = true - if new_state == states.fall && $JumpBufferTimer.is_stopped(): - $JumpBufferTimer.start() + if new_state == states.fall && $JumpBufferTimer.is_stopped(): + $JumpBufferTimer.start() - # It's important to check this here and not set by event (order) - if ( - $CoyoteTimer.is_stopped() - || [states.idle, states.jump].has(self.state) - ): - coyote_hanging = false - if coyote_hanging: - new_state = self.state - - elif abs(parent.velocity.x) > 5: - was_coyote_hanging = false - if Input.is_action_pressed("boost_move"): - new_state = states.run - # TODO Walking when stopping and not pressing anything? - else: - new_state = states.walk - if Input.is_action_pressed("duck"): - new_state = states.duck + # It's important to check this here and not set by event (order) + if ( + $CoyoteTimer.is_stopped() + || [states.idle, states.jump].has(self.state) + ): + coyote_hanging = false + if coyote_hanging: + new_state = self.state + + elif abs(parent.velocity.x) > 5: + was_coyote_hanging = false + if Input.is_action_pressed("boost_move"): + new_state = states.run + # TODO Walking when stopping and not pressing anything? + else: + new_state = states.walk + if Input.is_action_pressed("duck"): + new_state = states.duck - else: - was_coyote_hanging = false - new_state = states.idle - if Input.is_action_pressed("duck"): - new_state = states.duck + else: + was_coyote_hanging = false + new_state = states.idle + if Input.is_action_pressed("duck"): + new_state = states.duck - if new_state != self.state: - state_time = 0 - return new_state - init_boost = false - return null + if new_state != self.state: + state_time = 0 + return new_state + init_boost = false + return null func _enter_state(new_state, old_state): - if old_state == "idle" && (new_state == "walk" || new_state == "run"): - init_boost = true - init_boost_type = old_state + "_" + new_state - else: - init_boost = false - init_boost_type = "" - - if(new_state == "run"): - running_particles.emitting = true - - if(new_state == "jump"): - jump_point_particles.position.x = 0 if facing == 1 else 24 - jump_point_particles.emitting = true - jump_point_particles.restart() + if old_state == "idle" && (new_state == "walk" || new_state == "run"): + init_boost = true + init_boost_type = old_state + "_" + new_state + else: + init_boost = false + init_boost_type = "" + + if(new_state == "run"): + running_particles.emitting = true + + if(new_state == "jump"): + jump_point_particles.position.x = 0 if facing == 1 else 24 + jump_point_particles.emitting = true + jump_point_particles.restart() - if !["run", "walk", "idle", "duck"].has(old_state) && parent.is_on_floor(): - emit_signal("got_grounded") + if !["run", "walk", "idle", "duck"].has(old_state) && parent.is_on_floor(): + emit_signal("got_grounded") - match new_state: - states.walk: - # TODO I need this when there is a turn happening between two different states - # TODO Queue animation and only play if state time is exceeded, to not play animation on too small jumps/short wallslides - if old_state == states.idle && didTurn: - anim_state_playback.travel("idleTurn") - else: - anim_state_playback.travel("walking") - states.idle: - anim_state_playback.travel("idling") - states.duck: - anim_state_playback.travel("ducking") - states.jump: - if parent.rotation == 0 || !parent.snap_possible: - anim_state_playback.travel("jumping") - states.fall: - if parent.rotation == 0 || !parent.snap_possible: - anim_state_playback.travel("falling") - states.run: - anim_state_playback.travel("running") - states.wallslide: - # TODO When the hitbox transforms from wallslide to idle, blobby hangs in the air and that triggers the wallslide on landing - if(old_state != states.idle): - anim_state_playback.travel("wallsliding") + match new_state: + states.walk: + # TODO I need this when there is a turn happening between two different states + # TODO Queue animation and only play if state time is exceeded, to not play animation on too small jumps/short wallslides + if old_state == states.idle && didTurn: + anim_state_playback.travel("idleTurn") + else: + anim_state_playback.travel("walking") + states.idle: + anim_state_playback.travel("idling") + states.duck: + anim_state_playback.travel("ducking") + states.jump: + if parent.rotation == 0 || !parent.snap_possible: + anim_state_playback.travel("jumping") + states.fall: + if parent.rotation == 0 || !parent.snap_possible: + anim_state_playback.travel("falling") + states.run: + anim_state_playback.travel("running") + states.wallslide: + # TODO When the hitbox transforms from wallslide to idle, blobby hangs in the air and that triggers the wallslide on landing + if(old_state != states.idle): + anim_state_playback.travel("wallsliding") func _exit_state(_old_state, _new_state): - if(_old_state == "run"): - running_particles.emitting = false - pass + if(_old_state == "run"): + running_particles.emitting = false + pass func _set_blendspaces_direction(value): - running_particles.texture = run_dust_res if facing == -1 else run_dust_left_res - running_particles.scale.x = facing - anim_tree.set("parameters/ducking/blend_position", value) - anim_tree.set("parameters/falling/blend_position", value) - anim_tree.set("parameters/idling/blend_position", value) - anim_tree.set("parameters/jumpToFall/blend_position", value) - anim_tree.set("parameters/jumping/blend_position", value) - anim_tree.set("parameters/runToJump/blend_position", value) - anim_tree.set("parameters/running/blend_position", value) - anim_tree.set("parameters/turnToRun/blend_position", value) - anim_tree.set("parameters/walking/blend_position", value) + running_particles.texture = run_dust_res if facing == -1 else run_dust_left_res + running_particles.scale.x = facing + anim_tree.set("parameters/ducking/blend_position", value) + anim_tree.set("parameters/falling/blend_position", value) + anim_tree.set("parameters/idling/blend_position", value) + anim_tree.set("parameters/jumpToFall/blend_position", value) + anim_tree.set("parameters/jumping/blend_position", value) + anim_tree.set("parameters/runToJump/blend_position", value) + anim_tree.set("parameters/running/blend_position", value) + anim_tree.set("parameters/turnToRun/blend_position", value) + anim_tree.set("parameters/walking/blend_position", value) func _trigger_turn_animation(): - match self.state: - states.duck: - anim_state_playback.travel("duckTurn") - states.walk: - anim_state_playback.travel("idleTurn") - states.idle: - anim_state_playback.travel("idleTurn") + match self.state: + states.duck: + anim_state_playback.travel("duckTurn") + states.walk: + anim_state_playback.travel("idleTurn") + states.idle: + anim_state_playback.travel("idleTurn") func _on_JumpBufferTimer_timeout() -> void: - parent.jump_buffer_filled = false + parent.jump_buffer_filled = false diff --git a/src/Actors/Enemies/Beings/WhatAreFrog.gd b/src/Actors/Enemies/Beings/WhatAreFrog.gd index 6bf49f1..9e676b1 100644 --- a/src/Actors/Enemies/Beings/WhatAreFrog.gd +++ b/src/Actors/Enemies/Beings/WhatAreFrog.gd @@ -108,7 +108,7 @@ func execute_movement(delta: float) -> void: velocity.x = velocity.x * 0.8 velocity.y = velocity.y * 0.8 was_restricted = true - velocity = move_and_slide(velocity, FLOOR_NORMAL, false, 4, 0.785398,false) + velocity = move_and_slide(velocity, FLOOR_NORMAL, false, 4, 0.785398, false) if(is_on_floor()): velocity = Vector2(0,0) @@ -154,7 +154,7 @@ func search_next_target(): if(target != null && !weakref(target).get_ref()): return detect_food() - if(food_target == null): + if(food_target == null && is_bound): detect_player() @@ -246,7 +246,7 @@ func detect_player() -> void: func sleeping() -> Vector2: jump_timer.stop() - detect_player() + # detect_player() return velocity @@ -356,24 +356,25 @@ func consider_jump_landing_space(v: Vector2) -> Vector2: collider = check_feeler(Vector2(jump_distance * get_facing_direction(), - jump_height/2)) if((!is_jump_path_safe(v, global_position) || collider != null) && can_reverse_facing_direction()): # Can be printed when frog would jump into a wall too - print("no safe landing space found") + print("at wall or no safe landing spot") return Vector2(0,0) return v func consider_jumping_on_top() -> Vector2: var collider = check_feeler(Vector2(42 * get_facing_direction(),0)) + # 0 just for tile coordinate calculation var facing = 0 if get_facing_direction() >= 0 else - 1 if (collider == null): return Vector2(0,0) var local_position = tilemap.to_local(feeler_raycast.get_collision_point()) var map_position = tilemap.world_to_map(local_position) - var tile_position = Vector2(map_position.x + facing, map_position.y) + var tile_position = Vector2(map_position.x + facing, map_position.y - 1) # TODO Here the climb height of frog is limited to one constantly - var cell_id = tilemap.get_cell(tile_position.x, tile_position.y - 2) + var cell_id = tilemap.get_cell(tile_position.x, tile_position.y - 1) if (cell_id != -1 && - #TODO 9 is the navigation tile, but thats subject to change! - cell_id != 8): + #TODO 0 is the navigation tile, but thats subject to change! + cell_id != 7): return Vector2(0,0) var tile_upper_left_corner = tilemap.to_global(tilemap.map_to_world(tile_position)) var tile_upper_right_corner = Vector2(tile_upper_left_corner.x + tilemap.cell_size.x, tile_upper_left_corner.y) @@ -387,11 +388,12 @@ func consider_jumping_on_top() -> Vector2: var frog_bottom_right_corner = Vector2($EnemyBody.global_position.x + $EnemyBody.shape.extents.x, $EnemyBody.global_position.y + $EnemyBody.shape.extents.y) jump_angle = frog_bottom_right_corner.angle_to_point(tile_upper_left_corner) - PI - + if(abs(rad2deg(jump_angle)) < 78): return correct_jump_direction(velocity_for_jump_distance(default_jump_distance/2, abs(deg2rad(80)))) else: - return velocity_for_jump_distance(10, abs(deg2rad(45))) * -1 * facing + var v = velocity_for_jump_distance(block_size/1.5, abs(deg2rad(45))) + return Vector2(v.x * -1 * get_facing_direction(), v.y) # Tries to shorten the jump, so that it lands in a tiles center diff --git a/src/Actors/Enemies/Beings/WhatAreFrog.tscn b/src/Actors/Enemies/Beings/WhatAreFrog.tscn index 5be0d67..94ff155 100644 --- a/src/Actors/Enemies/Beings/WhatAreFrog.tscn +++ b/src/Actors/Enemies/Beings/WhatAreFrog.tscn @@ -108,7 +108,7 @@ tracks/1/enabled = true tracks/1/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), -"update": 0, +"update": 1, "values": [ Vector2( 1, 1 ) ] } @@ -138,7 +138,7 @@ tracks/1/enabled = true tracks/1/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), -"update": 0, +"update": 1, "values": [ Vector2( -1, 1 ) ] } @@ -280,7 +280,7 @@ tracks/1/enabled = true tracks/1/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), -"update": 0, +"update": 1, "values": [ Vector2( 1, 1 ) ] } @@ -310,7 +310,7 @@ tracks/1/enabled = true tracks/1/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), -"update": 0, +"update": 1, "values": [ Vector2( -1, 1 ) ] } @@ -412,14 +412,14 @@ states/idleHappy/position = Vector2( -58.7619, 98.0433 ) states/idleMean/node = SubResource( 20 ) states/idleMean/position = Vector2( 451.952, 98.0432 ) states/liftOff/node = SubResource( 23 ) -states/liftOff/position = Vector2( 184, -12 ) +states/liftOff/position = Vector2( 184.223, -12 ) states/midJumping/node = SubResource( 26 ) states/midJumping/position = Vector2( 184.091, -141 ) states/sleeping/node = SubResource( 54 ) -states/sleeping/position = Vector2( 176.896, 205.619 ) +states/sleeping/position = Vector2( 177.848, 205.619 ) transitions = [ "idleHappy", "liftOff", SubResource( 27 ), "liftOff", "midJumping", SubResource( 28 ), "idleMean", "liftOff", SubResource( 29 ), "midJumping", "liftOff", SubResource( 30 ), "liftOff", "idleMean", SubResource( 31 ), "liftOff", "idleHappy", SubResource( 32 ), "idleHappy", "sleeping", SubResource( 55 ), "idleMean", "sleeping", SubResource( 56 ), "sleeping", "idleHappy", SubResource( 57 ), "sleeping", "idleMean", SubResource( 58 ) ] start_node = "idleHappy" -graph_offset = Vector2( -375, -158 ) +graph_offset = Vector2( -379, -204 ) [sub_resource type="AnimationNodeStateMachinePlayback" id=11] @@ -427,15 +427,15 @@ graph_offset = Vector2( -375, -158 ) extents = Vector2( 12, 9 ) [sub_resource type="RectangleShape2D" id=2] -extents = Vector2( 12, 1.5 ) +extents = Vector2( 11, 1.875 ) [sub_resource type="RectangleShape2D" id=3] extents = Vector2( 18.2143, 13.5955 ) [node name="WhatAreFrog" type="KinematicBody2D"] collision_layer = 2 -collision_mask = 57 -collision/safe_margin = 0.001 +collision_mask = 185 +collision/safe_margin = 0.002 script = ExtResource( 2 ) [node name="Statemachine" type="Node2D" parent="."] @@ -494,10 +494,10 @@ active = true root_motion_track = NodePath(".:frame") parameters/playback = SubResource( 11 ) parameters/idleHappy/blend_position = 1.0 -parameters/idleMean/blend_position = 1.0 +parameters/idleMean/blend_position = 1.2434 parameters/liftOff/blend_position = 1.0 parameters/midJumping/blend_position = 1.0 -parameters/sleeping/blend_position = 1.0 +parameters/sleeping/blend_position = -0.00214911 [node name="VisibilityEnabler2D" type="VisibilityEnabler2D" parent="."] position = Vector2( 954, 0 ) @@ -509,7 +509,7 @@ physics_process_parent = true [node name="FeelerRayCast" type="RayCast2D" parent="."] enabled = true cast_to = Vector2( 0, -1 ) -collision_mask = 280 +collision_mask = 281 collide_with_areas = true [node name="Orientation" type="RayCast2D" parent="."] @@ -521,14 +521,14 @@ collide_with_bodies = false position = Vector2( -10, 6 ) enabled = true cast_to = Vector2( -5, 0 ) -collision_mask = 40 +collision_mask = 41 collide_with_areas = true [node name="Right_Wallcast" type="RayCast2D" parent="."] position = Vector2( 10, 6 ) enabled = true cast_to = Vector2( 5, 0 ) -collision_mask = 40 +collision_mask = 41 collide_with_areas = true [node name="VisionRayCast" type="RayCast2D" parent="."] @@ -556,7 +556,7 @@ input_pickable = false monitorable = false [node name="CollisionShape2D" type="CollisionShape2D" parent="StompDetector"] -position = Vector2( 0, -1 ) +position = Vector2( 0, -0.875 ) shape = SubResource( 2 ) [node name="EnemySkin" type="Area2D" parent="."] diff --git a/src/Actors/Enemies/Beings/WhatAreFrogStateMachine.gd b/src/Actors/Enemies/Beings/WhatAreFrogStateMachine.gd index 2927ab5..2b93129 100644 --- a/src/Actors/Enemies/Beings/WhatAreFrogStateMachine.gd +++ b/src/Actors/Enemies/Beings/WhatAreFrogStateMachine.gd @@ -5,67 +5,75 @@ onready var anim_state_playback = $"../FrogSprite/AnimationTree".get("parameters func _ready() -> void: - add_state("searching") - add_state("hunting") - add_state("sleeping") - state = states.searching - set_state(states.searching) - print(self.state) - for state in states: - if state_matching_method_exists(state): - continue - else: - printerr("StateMachine -> State: " + state + " has no matching method in parent.") - push_error("StateMachine -> State: " + state + " has no matching method in parent.") - + add_state("searching") + add_state("hunting") + add_state("sleeping") + state = states.searching + set_state(states.searching) + print(self.state) + for state in states: + if state_matching_method_exists(state): + continue + else: + printerr("StateMachine -> State: " + state + " has no matching method in parent.") + push_error("StateMachine -> State: " + state + " has no matching method in parent.") + # _animation_logic() + # Game logic consequences of state func _state_logic(delta): - var state_action_ref = funcref(parent, self.state) - parent.velocity = state_action_ref.call_func() - parent.execute_movement(delta) + var state_action_ref = funcref(parent, self.state) + parent.velocity = state_action_ref.call_func() + parent.execute_movement(delta) func _get_transition(_delta): - parent.get_node("StateLabel").text = self.state - _animation_logic() - var new_state - if parent.target == null: - new_state = states.searching - if parent.target != null: - new_state = states.hunting - if parent.is_hurt: - new_state = states.sleeping - if new_state != self.state: - return new_state - return null + parent.get_node("StateLabel").text = self.state + _set_blendspaces_direction() + _animation_logic() + var new_state + if parent.target == null: + new_state = states.searching + if parent.target != null: + new_state = states.hunting + if parent.is_hurt: + new_state = states.sleeping + if new_state != self.state: + return new_state + return null func _enter_state(_new_state, _previous_state): - pass + pass func _exit_state(_previous_state, _new_state): - pass + pass -func _animation_logic(): - _set_blendspaces_direction() - if parent.is_on_floor(): - if(parent.is_hurt): - anim_state_playback.travel("sleeping") - elif (parent.is_bound): - anim_state_playback.travel("idleMean") - else: - anim_state_playback.travel("idleHappy") - else: - anim_state_playback.travel("midJumping") +func _animation_logic(): + var animation = "sleeping" + if parent.is_on_floor(): + if(parent.is_hurt): + animation = "sleeping" + elif (parent.is_bound): + animation = "idleMean" + else: + animation = "idleHappy" + # The frog is lifted from the ground slightly when blobby stands on him for whatever reason + elif state != "sleeping": + animation = "midJumping" + if anim_state_playback.get_current_node() != animation: + print(anim_state_playback.get_current_node()) + print(animation) + anim_state_playback.travel(animation) func _set_blendspaces_direction(): - var value = parent.get_facing_direction() - # var leash_orientation := sign($"../LeashAnchor".position.x) - # $"../LeashAnchor".position.x *= -1 if leash_orientation == value else 1 - anim_tree.set("parameters/idleHappy/blend_position", value) - anim_tree.set("parameters/idleMean/blend_position", value) - anim_tree.set("parameters/liftOff/blend_position", value) - anim_tree.set("parameters/midJumping/blend_position", value) + var value = parent.get_facing_direction() + # var leash_orientation := sign($"../LeashAnchor".position.x) + # $"../LeashAnchor".position.x *= -1 if leash_orientation == value else 1 + anim_tree.set("parameters/idleHappy/blend_position", value) + anim_tree.set("parameters/idleMean/blend_position", value) + anim_tree.set("parameters/liftOff/blend_position", value) + anim_tree.set("parameters/midJumping/blend_position", value) + anim_tree.set("parameters/sleeping/blend_position", value) diff --git a/src/Contraptions/DropThroughPlatforms.tres b/src/Contraptions/DropThroughPlatforms.tres new file mode 100644 index 0000000..04b27e5 --- /dev/null +++ b/src/Contraptions/DropThroughPlatforms.tres @@ -0,0 +1,135 @@ +[gd_resource type="TileSet" load_steps=14 format=2] + +[ext_resource path="res://assets/contraption/drop-through-platform.png" type="Texture" id=1] + +[sub_resource type="ConvexPolygonShape2D" id=1] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=2] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=3] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=4] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=5] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=6] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=7] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=8] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=9] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=10] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=11] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[sub_resource type="ConvexPolygonShape2D" id=12] +points = PoolVector2Array( 0, 0, 16, 0, 16, 0, 0, 0 ) + +[resource] +2/name = "drop-through-platform.png 2" +2/texture = ExtResource( 1 ) +2/tex_offset = Vector2( 0, 0 ) +2/modulate = Color( 1, 1, 1, 1 ) +2/region = Rect2( 16, 0, 192, 16 ) +2/tile_mode = 2 +2/autotile/icon_coordinate = Vector2( 0, 0 ) +2/autotile/tile_size = Vector2( 16, 16 ) +2/autotile/spacing = 0 +2/autotile/occluder_map = [ ] +2/autotile/navpoly_map = [ ] +2/autotile/priority_map = [ ] +2/autotile/z_index_map = [ ] +2/occluder_offset = Vector2( 0, 0 ) +2/navigation_offset = Vector2( 0, 0 ) +2/shape_offset = Vector2( 0, 0 ) +2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +2/shape = SubResource( 1 ) +2/shape_one_way = true +2/shape_one_way_margin = 1.0 +2/shapes = [ { +"autotile_coord": Vector2( 2, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 1 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 1, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 2 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 0, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 3 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 3, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 4 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 4, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 5 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 5, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 6 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 6, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 7 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 7, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 8 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 8, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 9 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 9, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 10 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 10, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 11 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 11, 0 ), +"one_way": true, +"one_way_margin": 1.0, +"shape": SubResource( 12 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +2/z_index = 0 diff --git a/src/Environment/AlienGreenHouseTilesNew.tres b/src/Environment/AlienGreenHouseTilesNew.tres deleted file mode 100644 index a91b048..0000000 --- a/src/Environment/AlienGreenHouseTilesNew.tres +++ /dev/null @@ -1,332 +0,0 @@ -[gd_resource type="TileSet" load_steps=32 format=2] - -[ext_resource path="res://assets/environment/blocks/basic_tileset_blobb-jakob-remix.png" type="Texture" id=1] - -[sub_resource type="ConvexPolygonShape2D" id=6] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=7] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=8] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=9] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=10] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=11] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=12] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=13] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=14] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=15] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=16] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=17] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=18] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=19] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=20] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=21] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=22] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=23] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=24] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=25] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=26] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=27] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=28] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=29] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=30] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=31] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=32] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=33] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=34] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="NavigationPolygon" id=35] -vertices = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) -polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] -outlines = [ PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) ] - -[resource] -0/name = "basic_tileset_blobb-jakob-remix.png 0" -0/texture = ExtResource( 1 ) -0/tex_offset = Vector2( 0, 0 ) -0/modulate = Color( 1, 1, 1, 1 ) -0/region = Rect2( 0, 0, 128, 128 ) -0/tile_mode = 1 -0/autotile/bitmask_mode = 0 -0/autotile/bitmask_flags = [ Vector2( 0, 1 ), 1, Vector2( 0, 6 ), 321, Vector2( 1, 0 ), 256, Vector2( 1, 6 ), 320, Vector2( 2, 0 ), 320, Vector2( 3, 0 ), 64, Vector2( 4, 0 ), 260, Vector2( 5, 0 ), 65, Vector2( 5, 4 ), 324, Vector2( 5, 5 ), 321, Vector2( 6, 0 ), 4, Vector2( 6, 5 ), 64, Vector2( 7, 0 ), 5, Vector2( 7, 5 ), 65 ] -0/autotile/icon_coordinate = Vector2( 6, 5 ) -0/autotile/tile_size = Vector2( 16, 16 ) -0/autotile/spacing = 0 -0/autotile/occluder_map = [ ] -0/autotile/navpoly_map = [ ] -0/autotile/priority_map = [ ] -0/autotile/z_index_map = [ ] -0/occluder_offset = Vector2( 0, 0 ) -0/navigation_offset = Vector2( 0, 0 ) -0/shape_offset = Vector2( 0, 0 ) -0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) -0/shape = SubResource( 6 ) -0/shape_one_way = false -0/shape_one_way_margin = 1.0 -0/shapes = [ { -"autotile_coord": Vector2( 1, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 6 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 2, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 7 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 2, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 8 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 0, 1 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 9 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 3, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 10 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 3, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 11 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 4, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 12 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 5, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 13 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 5, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 14 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 7, 5 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 15 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 6, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 16 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 7, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 17 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 6, 5 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 18 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 1, 6 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 19 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -} ] -0/z_index = 0 -1/name = "basic_tileset_blobb-jakob-remix.png 1" -1/texture = ExtResource( 1 ) -1/tex_offset = Vector2( 0, 0 ) -1/modulate = Color( 1, 1, 1, 1 ) -1/region = Rect2( 0, 0, 128, 128 ) -1/tile_mode = 2 -1/autotile/icon_coordinate = Vector2( 5, 3 ) -1/autotile/tile_size = Vector2( 16, 16 ) -1/autotile/spacing = 0 -1/autotile/occluder_map = [ ] -1/autotile/navpoly_map = [ ] -1/autotile/priority_map = [ ] -1/autotile/z_index_map = [ ] -1/occluder_offset = Vector2( 0, 0 ) -1/navigation_offset = Vector2( 0, 0 ) -1/shape_offset = Vector2( 0, 0 ) -1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) -1/shape = SubResource( 20 ) -1/shape_one_way = false -1/shape_one_way_margin = 1.0 -1/shapes = [ { -"autotile_coord": Vector2( 1, 6 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 20 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 1, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 21 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 2, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 22 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 3, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 23 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 4, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 24 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 5, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 25 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 6, 5 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 26 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 6, 5 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 27 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 6, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 28 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 6, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 29 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 7, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 30 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 7, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 31 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 0, 1 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 32 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 0, 1 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 33 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -}, { -"autotile_coord": Vector2( 7, 5 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 34 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -} ] -1/z_index = 0 -2/name = "basic_tileset_blobb-jakob-remix.png 2" -2/texture = ExtResource( 1 ) -2/tex_offset = Vector2( 0, 0 ) -2/modulate = Color( 1, 1, 1, 1 ) -2/region = Rect2( 0, 0, 16, 16 ) -2/tile_mode = 0 -2/occluder_offset = Vector2( 0, 0 ) -2/navigation_offset = Vector2( 0, 0 ) -2/navigation = SubResource( 35 ) -2/shape_offset = Vector2( 0, 0 ) -2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) -2/shape_one_way = false -2/shape_one_way_margin = 0.0 -2/shapes = [ ] -2/z_index = 0 diff --git a/src/Environment/Background.tscn b/src/Environment/Background.tscn deleted file mode 100644 index 859f30e..0000000 --- a/src/Environment/Background.tscn +++ /dev/null @@ -1,12 +0,0 @@ -[gd_scene load_steps=2 format=2] - -[ext_resource path="res://assets/environment/background/background.png" type="Texture" id=1] - -[node name="Simple Background" type="CanvasLayer"] - -[node name="background" type="TextureRect" parent="."] -margin_right = 426.667 -margin_bottom = 240.0 -texture = ExtResource( 1 ) -expand = true -stretch_mode = 1 diff --git a/src/Environment/GrassWithBonesTest.tscn b/src/Environment/GrassWithBonesTest.tscn deleted file mode 100644 index 25a3458..0000000 --- a/src/Environment/GrassWithBonesTest.tscn +++ /dev/null @@ -1,30 +0,0 @@ -[gd_scene load_steps=2 format=2] - -[ext_resource path="res://assets/environment/decor/straight_straw.png" type="Texture" id=1] - -[node name="GrassWithBones" type="Node2D"] - -[node name="Polygon2D" type="Polygon2D" parent="."] -offset = Vector2( -6.5, -12.5 ) -texture = ExtResource( 1 ) -skeleton = NodePath("../Skeleton2D") -polygon = PoolVector2Array( 4.166, 12.5, 4.166, 7.25, 4.166, 1.5, 9.103, 1.5, 9.10325, 7.25, 9.103, 12.5 ) -uv = PoolVector2Array( 4.166, 12.5, 4.166, 7.25, 4.166, 1.5, 9.103, 1.5, 9.10325, 7.25, 9.103, 12.5 ) -polygons = [ PoolIntArray( 5, 0, 1, 2, 3, 4 ) ] -bones = [ "Base", PoolRealArray( 1, 0.34, 0, 0, 0, 1 ), "Base/Mid", PoolRealArray( 0.66, 1, 0, 0.5, 1, 0.83 ), "Base/Mid/Top", PoolRealArray( 0.49, 0.32, 1, 1, 0.49, 0.49 ) ] - -[node name="Skeleton2D" type="Skeleton2D" parent="."] - -[node name="Base" type="Bone2D" parent="Skeleton2D"] -rest = Transform2D( 1, 0, 0, 1, 0, 0 ) -default_length = 7.0 - -[node name="Mid" type="Bone2D" parent="Skeleton2D/Base"] -rest = Transform2D( 1, 0, 0, 1, 0, 0 ) -default_length = 7.0 - -[node name="Top" type="Bone2D" parent="Skeleton2D/Base/Mid"] -position = Vector2( 0, -5 ) -rotation = -1.5708 -rest = Transform2D( 2.22127e-06, -1, 1, 2.22127e-06, 0, -5 ) -default_length = 4.0 diff --git a/src/Environment/GreenHouseTiles.tres b/src/Environment/GreenHouseTiles.tres new file mode 100644 index 0000000..3ce8985 --- /dev/null +++ b/src/Environment/GreenHouseTiles.tres @@ -0,0 +1,178 @@ +[gd_resource type="TileSet" load_steps=18 format=2] + +[ext_resource path="res://assets/environment/blocks/BasicTileSet.png" type="Texture" id=2] + +[sub_resource type="NavigationPolygon" id=21] +vertices = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] +outlines = [ PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) ] + +[sub_resource type="ConvexPolygonShape2D" id=1] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=2] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=3] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=4] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=5] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=6] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=7] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=8] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=9] +points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=26] +points = PoolVector2Array( 0, 0, 0, 0, 16, 0, 16, 11.0125, 2.92126, 8.9875 ) + +[sub_resource type="ConvexPolygonShape2D" id=27] +points = PoolVector2Array( 0, 0.03125, 0, 0, 16, 0, 16, 10.9094, 0, 10.9688 ) + +[sub_resource type="ConvexPolygonShape2D" id=28] +points = PoolVector2Array( 0, 0, 16, 0, 12.9719, 8.84687, 0, 10.9719 ) + +[sub_resource type="ConvexPolygonShape2D" id=29] +points = PoolVector2Array( 1.97188, 14.1594, 0, 0, 15.9719, 0, 16, 16 ) + +[sub_resource type="ConvexPolygonShape2D" id=30] +points = PoolVector2Array( 0, 0, 16, 0, 14.0969, 14.1469, 0, 16 ) + +[sub_resource type="NavigationPolygon" id=31] +vertices = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] +outlines = [ PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) ] + +[resource] +5/name = "Green House Tiles" +5/texture = ExtResource( 2 ) +5/tex_offset = Vector2( 0, 0 ) +5/modulate = Color( 1, 1, 1, 1 ) +5/region = Rect2( 0, 0, 176, 160 ) +5/tile_mode = 2 +5/autotile/icon_coordinate = Vector2( 5, 6 ) +5/autotile/tile_size = Vector2( 16, 16 ) +5/autotile/spacing = 0 +5/autotile/occluder_map = [ ] +5/autotile/navpoly_map = [ Vector2( 0, 0 ), SubResource( 21 ) ] +5/autotile/priority_map = [ ] +5/autotile/z_index_map = [ ] +5/occluder_offset = Vector2( 0, 0 ) +5/navigation_offset = Vector2( 0, 0 ) +5/shape_offset = Vector2( 0, 0 ) +5/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +5/shape = SubResource( 1 ) +5/shape_one_way = false +5/shape_one_way_margin = 1.0 +5/shapes = [ { +"autotile_coord": Vector2( 1, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 1 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 2, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 2 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 3, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 3 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 4, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 4 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 5, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 5 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 7, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 6 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 6, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 7 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 8, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 8 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 10, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 9 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 6, 1 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 26 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 7, 1 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 27 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 8, 1 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 28 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 9, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 29 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +}, { +"autotile_coord": Vector2( 0, 1 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 30 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +5/z_index = 0 +7/name = "Navigation Tile" +7/texture = ExtResource( 2 ) +7/tex_offset = Vector2( 0, 0 ) +7/modulate = Color( 1, 1, 1, 1 ) +7/region = Rect2( 0, 0, 16, 16 ) +7/tile_mode = 0 +7/occluder_offset = Vector2( 0, 0 ) +7/navigation_offset = Vector2( 0, 0 ) +7/navigation = SubResource( 31 ) +7/shape_offset = Vector2( 0, 0 ) +7/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +7/shape_one_way = false +7/shape_one_way_margin = 0.0 +7/shapes = [ ] +7/z_index = 0 diff --git a/src/Environment/GreenhousePlatformPlants.tres b/src/Environment/GreenhousePlatformPlants.tres new file mode 100644 index 0000000..7e1db0a --- /dev/null +++ b/src/Environment/GreenhousePlatformPlants.tres @@ -0,0 +1,26 @@ +[gd_resource type="TileSet" load_steps=2 format=2] + +[ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=1] + +[resource] +0/name = "platform-plants.png 0" +0/texture = ExtResource( 1 ) +0/tex_offset = Vector2( 0, 0 ) +0/modulate = Color( 1, 1, 1, 1 ) +0/region = Rect2( 16, 0, 256, 16 ) +0/tile_mode = 2 +0/autotile/icon_coordinate = Vector2( 5, 0 ) +0/autotile/tile_size = Vector2( 16, 16 ) +0/autotile/spacing = 0 +0/autotile/occluder_map = [ ] +0/autotile/navpoly_map = [ ] +0/autotile/priority_map = [ ] +0/autotile/z_index_map = [ ] +0/occluder_offset = Vector2( 0, 0 ) +0/navigation_offset = Vector2( 0, 0 ) +0/shape_offset = Vector2( 0, 0 ) +0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +0/shape_one_way = false +0/shape_one_way_margin = 0.0 +0/shapes = [ ] +0/z_index = 0 diff --git a/src/Levels/1 Tutorial Level.tscn b/src/Levels/1 Tutorial Level.tscn new file mode 100644 index 0000000..2e26517 --- /dev/null +++ b/src/Levels/1 Tutorial Level.tscn @@ -0,0 +1,231 @@ +[gd_scene load_steps=15 format=2] + +[ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=1] +[ext_resource path="res://src/Environment/GreenHouseTiles.tres" type="TileSet" id=2] +[ext_resource path="res://src/Environment/GreenhousePlatformPlants.tres" type="TileSet" id=3] +[ext_resource path="res://src/Contraptions/DropThroughPlatforms.tres" type="TileSet" id=4] +[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=5] +[ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=6] +[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=7] +[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=8] +[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=9] +[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=10] +[ext_resource path="res://src/Actors/Enemies/Beings/WhatAreFrog.tscn" type="PackedScene" id=11] +[ext_resource path="res://src/Environment/Grass/ShaderGrass.tscn" type="PackedScene" id=12] + +[sub_resource type="AnimationNodeStateMachinePlayback" id=4] + +[sub_resource type="AnimationNodeStateMachinePlayback" id=5] + +[node name="LevelTemplate" type="Node2D"] +script = ExtResource( 1 ) +__meta__ = { +"_edit_horizontal_guides_": [ 464.0 ], +"_edit_vertical_guides_": [ 2880.0 ] +} + +[node name="SignalManager" parent="." instance=ExtResource( 10 )] + +[node name="LevelState" parent="." instance=ExtResource( 6 )] +unique_name_in_owner = true + +[node name="UserInterface" parent="." instance=ExtResource( 5 )] +unique_name_in_owner = true + +[node name="Timer" parent="UserInterface/HUD/HUDOverlay/GetBackTimer" index="0"] +wait_time = 20.0 + +[node name="BlobbyCam" parent="." instance=ExtResource( 9 )] +unique_name_in_owner = true +drag_margin_bottom = 0.3 + +[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] +frame = 8 + +[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] +frame = 7 + +[node name="Blobby" parent="." instance=ExtResource( 7 )] +unique_name_in_owner = true +position = Vector2( -70, -1.90735e-06 ) +scale = Vector2( 0.878906, 0.936025 ) + +[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] +parameters/playback = SubResource( 4 ) + +[node name="WhatAreFrog" parent="." instance=ExtResource( 11 )] +position = Vector2( 674, 39 ) + +[node name="Digit" parent="WhatAreFrog" index="2"] +visible = false + +[node name="AnimationTree" parent="WhatAreFrog/FrogSprite" index="1"] +root_motion_track = NodePath(".") +parameters/playback = SubResource( 5 ) + +[node name="TileMap" type="TileMap" parent="."] +unique_name_in_owner = true +z_index = -1 +tile_set = ExtResource( 2 ) +cell_size = Vector2( 16, 16 ) +cell_quadrant_size = 3 +cell_custom_transform = Transform2D( 16, 0, 0, 16, 0, 0 ) +collision_layer = 8 +collision_mask = 8 +bake_navigation = true +format = 1 +tile_data = PoolIntArray( -1245196, 1, 131076, -1245195, 1, 131076, -1245194, 1, 131076, -1245193, 1, 131076, -1245192, 1, 131076, -1245191, 1, 131076, -1245190, 1, 131076, -1245189, 1, 131076, -1245188, 1, 131076, -1245187, 1, 131076, -1245186, 1, 131076, -1245185, 1, 131076, -1310720, 1, 131076, -1310719, 1, 131076, -1310718, 1, 131076, -1310717, 1, 131076, -1310716, 1, 131076, -1310715, 1, 131076, -1310714, 1, 131076, -1310713, 1, 131076, -1310712, 1, 131076, -1310711, 1, 131076, -1310710, 1, 131076, -1310709, -536870911, 327681, -1310708, 536870913, 131077, -1310707, 536870913, 131077, -1310706, 536870913, 131077, -1310705, 536870913, 131077, -1310704, 536870913, 131077, -1310703, 536870913, 131077, -1310702, 536870913, 131077, -1310701, 536870913, 131077, -1310700, 536870913, 131077, -1310699, 536870913, 131077, -1310698, 536870913, 131077, -1310697, 536870913, 131077, -1310696, 536870913, 131077, -1310695, 536870913, 131077, -1310694, 536870913, 131077, -1310693, 536870913, 131077, -1310692, 536870913, 131077, -1310691, 536870913, 131077, -1310690, 536870913, 131077, -1310689, 536870913, 131077, -1310688, 536870913, 131077, -1310687, 536870913, 131077, -1310686, 536870913, 131077, -1310685, 536870913, 131077, -1310684, 1073741825, 327681, -1179660, 1, 131076, -1179659, 1, 131076, -1179658, 1, 131076, -1179657, 1, 131076, -1179656, 1, 131076, -1179655, 1, 131076, -1179654, 1, 131076, -1179653, 1, 131076, -1179652, 1, 131076, -1179651, 1, 131076, -1179650, 1, 131076, -1179649, 1, 131076, -1245184, 1, 131076, -1245183, 1, 131076, -1245182, 1, 131076, -1245181, 1, 131076, -1245180, 1, 131076, -1245179, 1, 131076, -1245178, 1, 131076, -1245177, 1, 131076, -1245176, 1, 131076, -1245175, 1, 131076, -1245174, 1, 131076, -1245173, -2147483647, 131077, -1245172, 536870913, 131079, -1245171, -536870911, 196615, -1245170, -536870911, 196615, -1245169, -536870911, 196615, -1245168, -536870911, 196615, -1245167, -536870911, 196615, -1245166, -536870911, 196615, -1245165, -536870911, 196615, -1245164, -536870911, 196615, -1245163, 1610612737, 65543, -1245162, -536870911, 196615, -1245161, -536870911, 196615, -1245160, -536870911, 196615, -1245159, -536870911, 196615, -1245158, -536870911, 196615, -1245157, -536870911, 196615, -1245156, -536870911, 196615, -1245155, -536870911, 196615, -1245154, -536870911, 196615, -1245153, -536870911, 196615, -1245152, -536870911, 196615, -1245151, -536870911, 196615, -1245150, -536870911, 196615, -1245149, 536870913, 131079, -1245148, -536870911, 131077, -1114124, 1, 131076, -1114123, 1, 131076, -1114122, 1, 131076, -1114121, 1, 131076, -1114120, 1, 131076, -1114119, 1, 131076, -1114118, 1, 131076, -1114117, 1, 131076, -1114116, 1, 131076, -1114115, 1, 131076, -1114114, 1, 131076, -1114113, 1, 131076, -1179648, 1, 131076, -1179647, 1, 131076, -1179646, 1, 131076, -1179645, 1, 131076, -1179644, 1, 131076, -1179643, 1, 131076, -1179642, 1, 131076, -1179641, 1, 131076, -1179640, 1, 131076, -1179639, 1, 131076, -1179638, 1, 131076, -1179637, -2147483647, 131077, -1179636, 536870913, 196615, -1179635, 1073741825, 393216, -1179634, 536870913, 7, -1179633, 536870913, 7, -1179632, 536870913, 7, -1179631, 536870913, 7, -1179630, 536870913, 7, -1179629, 536870913, 7, -1179628, 536870913, 7, -1179627, 536870913, 7, -1179626, 536870913, 7, -1179625, 536870913, 7, -1179624, 536870913, 7, -1179623, 536870913, 7, -1179622, 536870913, 7, -1179621, 536870913, 7, -1179620, 536870913, 7, -1179619, 536870913, 7, -1179618, 536870913, 7, -1179617, 536870913, 7, -1179616, 536870913, 7, -1179615, 536870913, 7, -1179614, 536870913, 7, -1179613, -2147483647, 327685, -1179612, -536870911, 131077, -1048588, 1, 131076, -1048587, 1, 131076, -1048586, 1, 131076, -1048585, 1, 131076, -1048584, 1, 131076, -1048583, 1, 131076, -1048582, 1, 131076, -1048581, 1, 131076, -1048580, 1, 131076, -1048579, 1, 131076, -1048578, 1, 131076, -1048577, 1, 131076, -1114112, 1, 131076, -1114111, 1, 131076, -1114110, 1, 131076, -1114109, 1, 131076, -1114108, 1, 131076, -1114107, 1, 131076, -1114106, 1, 131076, -1114105, 1, 131076, -1114104, 1, 131076, -1114103, 1, 131076, -1114102, 1, 131076, -1114077, 1073741825, 4, -1114076, -536870911, 131077, -983052, 1, 131076, -983051, 1, 131076, -983050, 1, 131076, -983049, 1, 131076, -983048, 1, 131076, -983047, 1, 131076, -983046, 1, 131076, -983045, 1, 131076, -983044, 1, 131076, -983043, 1, 131076, -983042, 1, 131076, -983041, 1, 131076, -1048576, 1, 131076, -1048575, 1, 131076, -1048574, 1, 131076, -1048573, 1, 131076, -1048572, 1, 131076, -1048571, 1, 131076, -1048570, 1, 131076, -1048541, 1073741825, 4, -1048540, -536870911, 131077, -851980, -1073741823, 131077, -851979, 1610612737, 327682, -851978, -1073741823, 196615, -851977, -1073741823, 196615, -851976, -1073741823, 196615, -851975, -1073741823, 196615, -851974, -1073741823, 196615, -851973, -1073741823, 196615, -851972, -1073741823, 196615, -851971, -1073741823, 196615, -851970, -1073741823, 196615, -851969, -1073741823, 196615, -917504, -1073741823, 196615, -917503, -1073741823, 196615, -917502, -1073741823, 196615, -917480, 0, 1, -917479, 0, 393217, -917478, 0, 2, -917477, 0, 2, -917476, 0, 393217, -917475, 0, 393217, -917474, 0, 2, -917473, 0, 3, -917469, 1073741825, 4, -917468, -536870911, 131077, -720908, 5, 524293, -720907, 5, 524293, -720906, 5, 524293, -720905, 5, 524293, -720904, 5, 524293, -720903, 5, 524293, -720902, 5, 524293, -720901, 5, 524293, -720900, 5, 524293, -720899, 5, 524293, -720898, 5, 524293, -720897, 5, 524293, -786432, 5, 524293, -786431, 5, 524293, -786430, 5, 524293, -786429, 5, 524293, -786428, 5, 524293, -786427, 5, 524293, -786426, 5, 524293, -786425, 5, 524293, -786424, 5, 524293, -786423, 5, 524293, -786422, 5, 524293, -786421, 5, 524293, -786420, 5, 524293, -786419, 5, 524293, -786418, 5, 524293, -786417, 5, 524293, -786416, 5, 524293, -786415, 5, 524293, -786414, 5, 524293, -786413, 5, 524293, -786412, 5, 524293, -786411, 5, 524293, -786410, 5, 524293, -786409, 5, 524293, -786408, 5, 524293, -786407, 5, 524293, -786406, 5, 524293, -786405, 5, 524293, -786404, 5, 524293, -786403, 5, 524293, -786402, 5, 524293, -786401, 5, 524293, -786400, 5, 524293, -786399, 5, 524293, -786398, 1610612741, 524291, -786397, -1610612731, 458760, -786396, -1610612731, 458760, -786395, -1610612731, 458760, -786394, -1610612731, 458760, -786393, -1610612731, 458760, -786392, -1610612731, 458760, -786391, -1610612731, 458760, -786390, -1610612731, 458760, -786389, -1610612731, 458760, -786388, -1610612731, 458760, -786387, -1610612731, 458760, -786386, -1610612731, 458760, -786385, -1610612731, 458760, -786384, -1610612731, 458760, -786383, -1610612731, 458760, -786382, -1610612731, 458760, -786381, -1610612731, 458760, -786380, -1610612731, 458760, -786379, -1610612731, 458760, -786378, -1610612731, 458760, -786377, -1610612731, 458760, -786376, -1610612731, 458760, -786375, -1610612731, 458760, -786374, -1610612731, 458760, -786373, -1610612731, 458760, -786372, -1610612731, 458760, -786371, -1610612731, 458760, -786370, -1610612731, 458760, -786369, -1610612731, 458760, -786368, 1610612741, 524292, -655372, -1610612731, 524293, -655371, 1610612741, 524291, -655370, -1610612731, 458760, -655369, -1610612731, 458760, -655368, -1610612731, 458760, -655367, -1610612731, 458760, -655366, -1610612731, 458760, -655365, -1610612731, 458760, -655364, -1610612731, 458760, -655363, -1610612731, 458760, -655362, -1610612731, 458760, -655361, -1610612731, 458760, -720896, -1610612731, 458760, -720895, -1610612731, 458760, -720894, -1073741819, 524291, -720893, 5, 524293, -720892, 5, 524293, -720891, 5, 524293, -720890, 5, 524293, -720889, 5, 524293, -720888, 5, 524293, -720887, 5, 524293, -720886, 5, 524293, -720885, 5, 524293, -720884, 5, 524293, -720883, 5, 524293, -720882, 5, 524293, -720881, 5, 524293, -720880, 5, 524293, -720879, 5, 524293, -720878, 5, 524293, -720877, 5, 524293, -720876, 5, 524293, -720875, 5, 524293, -720874, 5, 524293, -720873, 5, 524293, -720872, 5, 524293, -720871, 5, 524293, -720870, 5, 524293, -720869, 5, 524293, -720868, 5, 524293, -720867, 5, 524293, -720866, 5, 524293, -720865, 5, 524293, -720864, 5, 524293, -720863, 5, 524293, -720862, 5, 458760, -720861, -536870907, 196615, -720860, -1073741819, 196611, -720859, -1073741819, 196611, -720858, -1073741819, 196611, -720857, -1073741819, 196611, -720856, -1073741819, 196611, -720855, -1073741819, 196611, -720854, -1073741819, 196611, -720853, -1073741819, 196611, -720852, -1073741819, 196611, -720851, -1073741819, 196611, -720850, -1073741819, 196611, -720849, -1073741819, 196611, -720848, -1073741819, 196611, -720847, -1073741819, 196611, -720846, -1073741819, 196611, -720845, -1073741819, 196611, -720844, -1073741819, 196611, -720843, -1073741819, 196611, -720842, -1073741819, 196611, -720841, -1073741819, 196611, -720840, -1073741819, 196611, -720839, -1073741819, 196611, -720838, -1073741819, 196611, -720837, -1073741819, 196611, -720836, -1073741819, 196611, -720835, -1073741819, 196611, -720834, -1073741819, 196609, -720833, -1073741819, 131073, -720832, 1610612741, 458760, -589836, -1610612731, 524293, -589835, 5, 458760, -589834, 1610612741, 196609, -589833, -1073741819, 196611, -589832, -1073741819, 196611, -589831, -1073741819, 196611, -589830, -1073741819, 196611, -589829, -1073741819, 196611, -589828, -1073741819, 196611, -589827, -1073741819, 196611, -589826, -1073741819, 196611, -589825, -1073741819, 196611, -655360, -1073741819, 196611, -655359, -1073741819, 196609, -655358, 1610612741, 458760, -655357, 5, 524293, -655356, 5, 524293, -655355, 5, 524293, -655354, 5, 524293, -655353, 5, 524293, -655352, 5, 524293, -655351, 5, 524293, -655350, 5, 524293, -655349, 5, 524293, -655348, 5, 524293, -655347, 5, 524293, -655346, 5, 524293, -655345, 5, 524293, -655344, 5, 524293, -655343, 5, 524293, -655342, 5, 524293, -655341, 5, 524293, -655340, 5, 524293, -655339, 5, 524293, -655338, 5, 524293, -655337, 5, 524293, -655336, 5, 524293, -655335, 5, 524293, -655334, 5, 524293, -655333, 5, 524293, -655332, 5, 524293, -655331, 5, 524293, -655330, 5, 524293, -655329, 5, 524293, -655328, 5, 524293, -655327, 5, 524293, -655326, 5, 458760, -655325, 1610612741, 196611, -655324, 1610612741, 65539, -655323, 1610612741, 2, -655322, 1610612741, 2, -655321, 1610612741, 2, -655320, 1610612741, 2, -655319, 1610612741, 2, -655318, 1610612741, 2, -655317, 1610612741, 2, -655316, 1610612741, 2, -655315, 1610612741, 2, -655314, 1610612741, 2, -655313, 1610612741, 2, -655312, 1610612741, 2, -655311, 1610612741, 2, -655310, 1610612741, 2, -655309, 1610612741, 2, -655308, 1610612741, 2, -655307, 1610612741, 2, -655306, 1610612741, 2, -655305, 1610612741, 2, -655304, 1610612741, 2, -655303, 1610612741, 2, -655302, 1610612741, 2, -655301, 1610612741, 2, -655300, 1610612741, 2, -655299, 1610612741, 65538, -655298, 5, 196611, -655297, -1073741819, 65546, -655296, 1610612741, 458760, -524300, -1610612731, 524293, -524299, 5, 458760, -524298, -1610612731, 196610, -524297, 5, 65540, -524296, 5, 10, -524295, 5, 10, -524294, 5, 10, -524293, 5, 10, -524292, 5, 10, -524291, 5, 10, -524290, 5, 10, -524289, 5, 10, -589824, 5, 65541, -589823, 5, 196611, -589822, -536870907, 458755, -589821, 1073741829, 458757, -589820, 1073741829, 458757, -589819, 1073741829, 458757, -589818, 1073741829, 458757, -589817, 1073741829, 458757, -589816, 1073741829, 458757, -589815, 1073741829, 458757, -589814, 1073741829, 458757, -589813, 1073741829, 458757, -589812, 1073741829, 458757, -589811, 1073741829, 458757, -589810, 1073741829, 458757, -589809, 1073741829, 458757, -589808, 1073741829, 458757, -589807, 1073741829, 458757, -589806, 1073741829, 458757, -589805, 1073741829, 458757, -589804, 1073741829, 458757, -589803, 1073741829, 458757, -589802, 1073741829, 458757, -589801, 1073741829, 458757, -589800, 1073741829, 458757, -589799, 1073741829, 458757, -589798, 1073741829, 458757, -589797, 1073741829, 458757, -589796, 1073741829, 458757, -589795, 1073741829, 458757, -589794, 1073741829, 458757, -589793, 1073741829, 458757, -589792, 1073741829, 458757, -589791, 1073741829, 458757, -589790, -2147483643, 458756, -589789, 1610612741, 196611, -589788, 5, 7, -589787, 7, 0, -589786, 7, 0, -589785, 7, 0, -589784, 7, 0, -589783, 7, 0, -589782, 7, 0, -589781, 7, 0, -589780, 7, 0, -589779, 7, 0, -589778, 7, 0, -589777, 7, 0, -589776, 536870917, 0, -589775, 7, 0, -589774, 7, 0, -589773, 7, 0, -589772, 7, 0, -589771, 7, 0, -589770, 7, 0, -589769, 7, 0, -589768, 7, 0, -589767, 7, 0, -589766, 7, 0, -589765, 7, 0, -589764, 7, 0, -589763, 5, 6, -589762, 5, 196611, -589761, -1073741819, 65546, -589760, 1610612741, 458760, -458764, -1610612731, 524293, -458763, 5, 458760, -458762, -1610612731, 196610, -458761, 5, 7, -458757, 0, 1, -458756, 0, 393217, -458755, 0, 2, -458754, 0, 327686, -524288, 1610612741, 7, -524287, 5, 196611, -524286, 1073741829, 196618, -524285, 1073741829, 196618, -524284, 1073741829, 196618, -524283, 1073741829, 196618, -524282, 1073741829, 196618, -524281, 1073741829, 196618, -524280, 1073741829, 196618, -524279, 1073741829, 196618, -524278, 1073741829, 196618, -524277, 1073741829, 196618, -524276, 1073741829, 196618, -524275, 1073741829, 196618, -524274, 1073741829, 196618, -524273, 1073741829, 196618, -524272, 1073741829, 196618, -524271, 1073741829, 196618, -524270, 1073741829, 196618, -524269, 1073741829, 196618, -524268, 1073741829, 196618, -524267, 1073741829, 196618, -524266, 1073741829, 196618, -524265, 1073741829, 196618, -524264, 1073741829, 196618, -524263, 1073741829, 196618, -524262, 1073741829, 196618, -524261, 1073741829, 196618, -524260, 1073741829, 196618, -524259, 1073741829, 196618, -524258, 1073741829, 196618, -524257, 1073741829, 196618, -524256, 1073741829, 196618, -524255, 1073741829, 196618, -524254, 1073741829, 196618, -524253, 1610612741, 196611, -524252, 5, 7, -524251, 7, 0, -524250, 7, 0, -524249, 7, 0, -524248, 7, 0, -524247, 7, 0, -524246, 7, 0, -524245, 7, 0, -524244, 7, 0, -524243, 7, 0, -524242, 7, 0, -524241, 7, 0, -524240, 7, 0, -524239, 7, 0, -524238, 7, 0, -524237, 7, 0, -524236, 7, 0, -524235, 7, 0, -524234, 7, 0, -524233, 7, 0, -524232, 7, 0, -524231, 7, 0, -524230, 7, 0, -524229, 7, 0, -524228, 7, 0, -524227, 5, 6, -524226, 5, 196611, -524225, -1073741819, 65546, -524224, 1610612741, 458760, -393228, -1610612731, 524293, -393227, 5, 458760, -393226, -1610612731, 196610, -393225, 5, 7, -458752, 1610612741, 7, -458751, 5, 196611, -458750, 1073741829, 196618, -458749, 1073741829, 196618, -458748, 1073741829, 196618, -458747, 1073741829, 196618, -458746, 1073741829, 196618, -458745, 1073741829, 196618, -458744, 1073741829, 196618, -458743, 1073741829, 196618, -458742, 1073741829, 196618, -458741, 1073741829, 196618, -458740, 1073741829, 196618, -458739, 1073741829, 196618, -458738, 1073741829, 196618, -458737, 1073741829, 196618, -458736, 1073741829, 196618, -458735, 1073741829, 196618, -458734, 1073741829, 196618, -458733, 1073741829, 196618, -458732, 1073741829, 196618, -458731, 1073741829, 196618, -458730, 1073741829, 196618, -458729, 1073741829, 196618, -458728, 1073741829, 196618, -458727, 1073741829, 196618, -458726, 1073741829, 196618, -458725, 1073741829, 196618, -458724, 1073741829, 196618, -458723, 1073741829, 196618, -458722, 1073741829, 196618, -458721, 1073741829, 196618, -458720, 1073741829, 196618, -458719, 1073741829, 196618, -458718, 1073741829, 196618, -458717, 1610612741, 196611, -458716, 5, 7, -458715, 7, 0, -458714, 7, 0, -458713, 7, 0, -458712, 7, 0, -458711, 7, 0, -458710, 7, 0, -458709, 7, 0, -458708, 7, 0, -458707, 7, 0, -458706, 7, 0, -458705, 7, 0, -458704, 7, 0, -458703, 7, 0, -458702, 7, 0, -458701, 7, 0, -458700, 7, 0, -458699, 7, 0, -458698, 7, 0, -458697, 7, 0, -458696, 7, 0, -458695, 7, 0, -458694, 7, 0, -458693, 7, 0, -458692, 7, 0, -458691, 5, 6, -458690, 5, 196611, -458689, -2147483643, 131075, -458688, 1610612741, 458760, -327692, -1610612731, 524293, -327691, 5, 458760, -327690, -1610612731, 196610, -327689, 5, 7, -327685, 0, 4, -327684, 1, 393223, -327683, 1, 458753, -327682, 0, 5, -393216, 1610612741, 7, -393215, 5, 196611, -393214, 1073741829, 196618, -393213, 1073741829, 196618, -393212, 1073741829, 196618, -393211, 1073741829, 196618, -393210, 1073741829, 196618, -393209, 1073741829, 196618, -393208, 1073741829, 196618, -393207, 1073741829, 196618, -393206, 1073741829, 196618, -393205, 1073741829, 196618, -393204, 1073741829, 196618, -393203, 1073741829, 196618, -393202, 1073741829, 196618, -393201, 1073741829, 196618, -393200, 1073741829, 196618, -393199, 1073741829, 196618, -393198, 1073741829, 196618, -393197, 1073741829, 196618, -393196, 1073741829, 196618, -393195, 1073741829, 196618, -393194, 1073741829, 196618, -393193, 1073741829, 196618, -393192, 1073741829, 196618, -393191, 1073741829, 196618, -393190, 1073741829, 196618, -393189, 1073741829, 196618, -393188, 1073741829, 196618, -393187, 1073741829, 196618, -393186, 1073741829, 196618, -393185, 1073741829, 196618, -393184, 1073741829, 196618, -393183, 1073741829, 196618, -393182, 1073741829, 196618, -393181, 1610612741, 196611, -393180, 5, 7, -393179, 7, 0, -393178, 7, 0, -393177, 7, 0, -393176, 7, 0, -393175, 7, 0, -393174, 7, 0, -393173, 7, 0, -393172, 7, 0, -393171, 7, 0, -393170, 7, 0, -393169, 7, 0, -393168, 7, 0, -393167, 7, 0, -393166, 7, 0, -393165, 7, 0, -393164, 7, 0, -393163, 7, 0, -393162, 7, 0, -393161, 7, 0, -393160, 7, 0, -393159, 7, 0, -393158, 7, 0, -393157, 7, 0, -393156, 7, 0, -393155, 5, 6, -393154, 5, 196611, -393153, 1073741829, 196612, -393152, 1610612741, 458760, -262156, -1610612731, 524293, -262155, 5, 458760, -262154, -1610612731, 196610, -262153, 5, 7, -262149, 0, 6, -262148, 0, 7, -262147, 0, 7, -262146, 0, 65536, -327680, 1610612741, 7, -327679, 1073741829, 131076, -327678, -1073741819, 196611, -327677, -1073741819, 196611, -327676, -1073741819, 196611, -327675, -1073741819, 196611, -327674, -1073741819, 196611, -327673, -1073741819, 196611, -327672, -1073741819, 196611, -327671, -1073741819, 196611, -327670, -1073741819, 196611, -327669, -1073741819, 196611, -327668, -1073741819, 196611, -327667, -1073741819, 196611, -327666, -1073741819, 196611, -327665, -1073741819, 196611, -327664, -1073741819, 196611, -327663, -1073741819, 196611, -327662, -1073741819, 196611, -327661, -1073741819, 196611, -327660, -1073741819, 196611, -327659, -1073741819, 196611, -327658, -1073741819, 196611, -327657, -1073741819, 196611, -327656, -1073741819, 196611, -327655, -1073741819, 196611, -327654, -1073741819, 196611, -327653, -1073741819, 196611, -327652, -1073741819, 196611, -327651, -1073741819, 196611, -327650, -1073741819, 196611, -327649, -1073741819, 196611, -327648, -1073741819, 196611, -327647, -1073741819, 196611, -327646, -1073741819, 196611, -327645, -536870907, 131076, -327644, 5, 7, -327643, 7, 0, -327642, 7, 0, -327641, 7, 0, -327640, 7, 0, -327639, 7, 0, -327638, 7, 0, -327637, 7, 0, -327636, 7, 0, -327635, 7, 0, -327634, 7, 0, -327633, 7, 0, -327632, 7, 0, -327631, 7, 0, -327630, 7, 0, -327629, 7, 0, -327628, 7, 0, -327627, 7, 0, -327626, 7, 0, -327625, 7, 0, -327624, 7, 0, -327623, 7, 0, -327622, 7, 0, -327621, 7, 0, -327620, 7, 0, -327619, 5, 6, -327618, 5, 196611, -327617, -536870907, 393220, -327616, 1610612741, 458760, -196620, -1610612731, 524293, -196619, 5, 458760, -196618, -1610612731, 196610, -196617, 5, 7, -262144, 5, 9, -262143, 5, 10, -262142, 5, 10, -262141, 5, 10, -262140, 5, 10, -262139, 5, 10, -262138, 5, 10, -262137, 5, 10, -262136, 5, 10, -262135, 5, 10, -262134, 5, 10, -262133, 5, 10, -262132, 5, 10, -262131, 5, 10, -262130, 5, 10, -262129, 5, 10, -262128, 5, 10, -262127, 5, 10, -262126, 5, 10, -262125, 5, 10, -262124, 5, 10, -262123, 5, 10, -262122, 5, 10, -262121, 5, 10, -262120, 5, 10, -262119, 5, 10, -262118, 5, 10, -262117, 5, 10, -262116, 5, 10, -262115, 5, 10, -262114, 5, 10, -262113, 5, 10, -262112, 5, 10, -262111, 5, 10, -262110, 5, 10, -262109, 5, 10, -262108, 5, 65536, -262107, 7, 0, -262106, 7, 0, -262105, 7, 0, -262104, 7, 0, -262103, 7, 0, -262102, 7, 0, -262101, 7, 0, -262100, 7, 0, -262099, 7, 0, -262098, 7, 0, -262097, 7, 0, -262096, 7, 0, -262095, 7, 0, -262094, 7, 0, -262093, 7, 0, -262092, 7, 0, -262091, 7, 0, -262090, 7, 0, -262089, 7, 0, -262088, 7, 0, -262087, 7, 0, -262086, 7, 0, -262085, 7, 0, -262084, 7, 0, -262083, 5, 6, -262082, 5, 196611, -262081, 1073741829, 196612, -262080, 1610612741, 458760, -131084, -1610612731, 524293, -131083, 5, 458760, -131082, -1610612731, 196610, -131081, 5, 7, -196603, 1, 6, -196602, 1, 7, -196601, 1, 7, -196600, 1, 7, -196599, 1, 7, -196598, 1, 65536, -196591, 1, 4, -196590, -1610612735, 196614, -196589, 1, 393216, -196588, 1, 2, -196587, 1, 2, -196586, 1, 2, -196585, 1, 3, -196579, 7, 0, -196578, 7, 0, -196577, 7, 0, -196576, 7, 0, -196575, 7, 0, -196574, 7, 0, -196573, 7, 0, -196572, 7, 0, -196571, 7, 0, -196570, 7, 0, -196569, 7, 0, -196568, 7, 0, -196567, 7, 0, -196566, 7, 0, -196565, 7, 0, -196564, 7, 0, -196563, 7, 0, -196562, 7, 0, -196561, 7, 0, -196560, 7, 0, -196559, 7, 0, -196558, 7, 0, -196557, 7, 0, -196556, 7, 0, -196555, 7, 0, -196554, 7, 0, -196553, 7, 0, -196552, 7, 0, -196551, 7, 0, -196550, 7, 0, -196549, 7, 0, -196548, 7, 0, -196547, 5, 6, -196546, 5, 196611, -196545, 1073741829, 196612, -196544, 1610612741, 458760, -65548, -1610612731, 524293, -65547, 5, 458760, -65546, -1610612731, 196610, -65545, 5, 7, -131055, 1, 4, -131054, -1610612735, 196614, -131053, 1, 393218, -131052, 1, 393219, -131051, 1, 393219, -131050, 1, 393220, -131049, 1, 5, -131043, 7, 0, -131042, 7, 0, -131041, 7, 0, -131040, 7, 0, -131039, 7, 0, -131038, 7, 0, -131037, 7, 0, -131036, 7, 0, -131035, 7, 0, -131034, 7, 0, -131033, 7, 0, -131032, 7, 0, -131031, 7, 0, -131030, 7, 0, -131029, 7, 0, -131028, 7, 0, -131027, 5, 65542, -131026, 536870917, 65543, -131025, 536870917, 65542, -131024, 7, 0, -131023, 7, 0, -131022, 7, 0, -131021, 7, 0, -131020, 7, 0, -131019, 7, 0, -131018, 7, 0, -131017, 7, 0, -131016, 7, 0, -131015, 7, 0, -131014, 7, 0, -131013, 7, 0, -131012, 7, 0, -131011, 5, 6, -131010, 5, 196611, -131009, 1073741829, 327688, -131008, 1610612741, 458760, -12, -1610612731, 524293, -11, 5, 458760, -10, -1610612731, 196610, -9, 5, 7, -65519, 1, 4, -65518, -1610612735, 196614, -65514, 1, 393222, -65513, 1, 393216, -65512, 1, 2, -65511, 1, 2, -65510, 1, 327686, -65507, 7, 0, -65506, 7, 0, -65505, 7, 0, -65504, 7, 0, -65503, 7, 0, -65502, 7, 0, -65501, 7, 0, -65500, 7, 0, -65499, 7, 0, -65498, 7, 0, -65497, 7, 0, -65496, 7, 0, -65495, 7, 0, -65494, 7, 0, -65493, 7, 0, -65492, 7, 0, -65491, 7, 0, -65490, 7, 0, -65489, 7, 0, -65488, 7, 0, -65487, 7, 0, -65486, 7, 0, -65485, 7, 0, -65484, 7, 0, -65483, 7, 0, -65482, 5, 1, -65481, 5, 3, -65480, 5, 3, -65479, 5, 3, -65478, 5, 3, -65477, 5, 3, -65476, 5, 3, -65475, 5, 65539, -65474, 5, 196611, -65473, 1073741829, 262144, -65472, 1610612741, 458760, 65524, -1610612731, 524293, 65525, 5, 458760, 65526, -1610612731, 196610, 65527, 5, 65538, 65528, 5, 2, 65529, 5, 2, 65530, 5, 2, 65531, 5, 2, 65532, 5, 2, 65533, 5, 2, 65534, 5, 2, 65535, 5, 2, 0, 5, 3, 1, 5, 3, 2, 5, 3, 3, 5, 3, 4, 5, 3, 5, 5, 3, 6, 5, 3, 7, 5, 3, 8, 5, 3, 9, 5, 3, 10, 5, 3, 11, 5, 3, 12, 5, 3, 13, 5, 3, 14, 5, 3, 15, 5, 2, 16, 5, 2, 17, 5, 2, 18, 5, 2, 19, 5, 2, 20, 5, 2, 21, 5, 2, 22, 5, 2, 23, 5, 2, 24, 5, 2, 25, 5, 2, 26, 5, 2, 27, 5, 2, 28, 5, 2, 29, 5, 2, 30, 5, 2, 31, 5, 2, 32, 5, 2, 33, 5, 2, 34, 5, 2, 35, 5, 2, 36, 5, 2, 37, 5, 5, 38, 7, 0, 39, 7, 0, 40, 7, 0, 41, 7, 0, 42, 7, 0, 43, 7, 0, 44, 7, 0, 45, 7, 0, 46, 7, 0, 47, 7, 0, 48, 7, 0, 49, 7, 0, 50, 7, 0, 51, 7, 0, 52, 7, 0, 53, 7, 0, 54, 5, 6, 55, 5, 131076, 56, -1610612731, 196611, 57, -1610612731, 196611, 58, -1610612731, 196611, 59, -1610612731, 196611, 60, -1610612731, 196611, 61, -1610612731, 196611, 62, 5, 196609, 63, 1073741829, 262144, 64, 1610612741, 458760, 131060, -1610612731, 524293, 131061, 5, 458760, 131062, -1610612731, 196609, 131063, -1610612731, 196611, 131064, -1610612731, 196611, 131065, -1610612731, 196611, 131066, -1610612731, 196611, 131067, -1610612731, 196611, 131068, -1610612731, 196611, 131069, -1610612731, 196611, 131070, -1610612731, 196611, 131071, -1610612731, 196611, 65536, -1610612731, 196611, 65537, -1610612731, 196611, 65538, -1610612731, 196611, 65539, -1610612731, 196611, 65540, -1610612731, 196611, 65541, -1610612731, 196611, 65542, -1610612731, 196611, 65543, -1610612731, 196611, 65544, -1610612731, 196611, 65545, -1610612731, 196611, 65546, -1610612731, 196611, 65547, -1610612731, 196611, 65548, -1610612731, 196611, 65549, -1610612731, 196611, 65550, -1610612731, 196611, 65551, -1610612731, 196611, 65552, -1610612731, 196611, 65553, -1610612731, 196611, 65554, -1610612731, 196611, 65555, -1610612731, 196611, 65556, -1610612731, 196611, 65557, -1610612731, 196611, 65558, -1610612731, 196611, 65559, -1610612731, 196611, 65560, -1610612731, 196611, 65561, -1610612731, 196611, 65562, -1610612731, 196611, 65563, -1610612731, 196611, 65564, -1610612731, 196611, 65565, -1610612731, 196611, 65566, -1610612731, 196611, 65567, -1610612731, 196611, 65568, -1610612731, 196611, 65569, -1610612731, 196611, 65570, -1610612731, 196611, 65571, -1610612731, 196611, 65572, -1610612731, 131076, 65573, 5, 8, 65574, 7, 0, 65575, 7, 0, 65576, 7, 0, 65577, 7, 0, 65578, 7, 0, 65579, 7, 0, 65580, 7, 0, 65581, 7, 0, 65582, 7, 0, 65583, 7, 0, 65584, 7, 0, 65585, 7, 0, 65586, 5, 1, 65587, 5, 3, 65588, 5, 3, 65589, 5, 3, 65590, 5, 65539, 65591, 5, 196611, 65592, 536870917, 262144, 65593, 536870917, 262144, 65594, 536870917, 262144, 65595, 536870917, 262144, 65596, 536870917, 262144, 65597, 536870917, 262144, 65598, 536870917, 262144, 65599, 536870917, 262144, 65600, 1610612741, 458760, 196596, -1610612731, 524293, 196597, 5, 458760, 196598, 536870917, 262144, 196599, 536870917, 262144, 196600, 536870917, 262144, 196601, 536870917, 262144, 196602, 536870917, 262144, 196603, 536870917, 262144, 196604, 536870917, 262144, 196605, 536870917, 262144, 196606, 536870917, 262144, 196607, 536870917, 262144, 131072, 536870917, 262144, 131073, 536870917, 262144, 131074, 536870917, 262144, 131075, 536870917, 262144, 131076, 536870917, 262144, 131077, 536870917, 262144, 131078, 536870917, 262144, 131079, 536870917, 262144, 131080, 536870917, 262144, 131081, 536870917, 262144, 131082, 536870917, 262144, 131083, 536870917, 262144, 131084, 536870917, 262144, 131085, 536870917, 262144, 131086, 536870917, 262144, 131087, 536870917, 262144, 131088, 536870917, 262144, 131089, 536870917, 262144, 131090, 536870917, 262144, 131091, 536870917, 262144, 131092, 536870917, 262144, 131093, 536870917, 262144, 131094, 536870917, 262144, 131095, 536870917, 262144, 131096, 536870917, 262144, 131097, 536870917, 262144, 131098, 536870917, 262144, 131099, 536870917, 262144, 131100, 536870917, 262144, 131101, 536870917, 262144, 131102, 536870917, 262144, 131103, 536870917, 262144, 131104, 536870917, 262144, 131105, 536870917, 262144, 131106, 536870917, 262144, 131107, 536870917, 262144, 131108, 1610612741, 196611, 131109, 5, 8, 131110, 7, 0, 131111, 7, 0, 131112, 7, 0, 131113, 7, 0, 131114, 7, 0, 131115, 7, 0, 131116, 7, 0, 131117, 7, 0, 131118, 7, 0, 131119, 7, 0, 131120, 7, 0, 131121, 7, 0, 131122, 5, 6, 131123, -1610612731, 131077, 131124, -1610612731, 196611, 131125, -1610612731, 196611, 131126, -1610612731, 196611, 131127, 5, 196609, 131128, 536870917, 262144, 131129, 536870917, 262144, 131130, 536870917, 262144, 131131, 536870917, 262144, 131132, 536870917, 262144, 131133, 536870917, 262144, 131134, 536870917, 262144, 131135, 536870917, 262144, 131136, 1610612741, 458760, 262132, -1610612731, 524293, 262133, 5, 458760, 262134, 536870917, 262144, 262135, 536870917, 262144, 262136, 536870917, 262144, 262137, 536870917, 262144, 262138, 536870917, 262144, 262139, 536870917, 262144, 262140, 536870917, 262144, 262141, 536870917, 262144, 262142, 536870917, 262144, 262143, 536870917, 262144, 196608, 536870917, 262144, 196609, 536870917, 262144, 196610, 536870917, 262144, 196611, 536870917, 262144, 196612, 536870917, 262144, 196613, 536870917, 262144, 196614, 536870917, 262144, 196615, 536870917, 262144, 196616, 536870917, 262144, 196617, 536870917, 262144, 196618, 536870917, 262144, 196619, 536870917, 262144, 196620, 536870917, 262144, 196621, 536870917, 262144, 196622, 536870917, 262144, 196623, 536870917, 262144, 196624, 536870917, 262144, 196625, 536870917, 262144, 196626, 536870917, 262144, 196627, 536870917, 262144, 196628, 536870917, 262144, 196629, 536870917, 262144, 196630, 536870917, 262144, 196631, 536870917, 262144, 196632, 536870917, 262144, 196633, 536870917, 262144, 196634, 536870917, 262144, 196635, 536870917, 262144, 196636, 536870917, 262144, 196637, 536870917, 262144, 196638, 536870917, 262144, 196639, 536870917, 262144, 196640, 536870917, 262144, 196641, 536870917, 262144, 196642, 536870917, 262144, 196643, 536870917, 262144, 196644, 1610612741, 196611, 196645, 5, 65538, 196646, 5, 2, 196647, 5, 2, 196648, 5, 2, 196649, 5, 2, 196650, 5, 2, 196651, 5, 2, 196652, 5, 2, 196653, 5, 2, 196654, 5, 2, 196655, 5, 2, 196656, 5, 2, 196657, 5, 2, 196658, 5, 65539, 196659, -1610612731, 196613, 196660, 1073741829, 327688, 196661, -2147483643, 131074, 196662, -1073741819, 458753, 196663, -1073741819, 458760, 196664, -1073741819, 458760, 196665, -1073741819, 458760, 196666, -1073741819, 458760, 196667, -1073741819, 458760, 196668, -1073741819, 458760, 196669, -1073741819, 458760, 196670, -1073741819, 458760, 196671, -1073741819, 458760, 196672, -1073741819, 524292, 327668, -1610612731, 524293, 327669, 5, 458760, 327670, 536870917, 262144, 327671, 536870917, 262144, 327672, 536870917, 262144, 327673, 536870917, 262144, 327674, 536870917, 262144, 327675, 536870917, 262144, 327676, 536870917, 262144, 327677, 536870917, 262144, 327678, 536870917, 262144, 327679, 536870917, 262144, 262144, 536870917, 262144, 262145, 536870917, 262144, 262146, 536870917, 262144, 262147, 536870917, 262144, 262148, 536870917, 262144, 262149, 536870917, 262144, 262150, 536870917, 262144, 262151, 536870917, 262144, 262152, 536870917, 262144, 262153, 536870917, 262144, 262154, 536870917, 262144, 262155, 536870917, 262144, 262156, 536870917, 262144, 262157, 536870917, 262144, 262158, 536870917, 262144, 262159, 536870917, 262144, 262160, 536870917, 262144, 262161, 536870917, 262144, 262162, 536870917, 262144, 262163, 536870917, 262144, 262164, 536870917, 262144, 262165, 536870917, 262144, 262166, 536870917, 262144, 262167, 536870917, 262144, 262168, 536870917, 262144, 262169, 536870917, 262144, 262170, 536870917, 262144, 262171, 536870917, 262144, 262172, 536870917, 262144, 262173, 536870917, 262144, 262174, 536870917, 262144, 262175, 536870917, 262144, 262176, 536870917, 262144, 262177, 536870917, 262144, 262178, 536870917, 262144, 262179, 536870917, 262144, 262180, -1610612731, 196609, 262181, -1610612731, 196611, 262182, -1610612731, 196611, 262183, -1610612731, 196611, 262184, -1610612731, 196611, 262185, -1610612731, 196611, 262186, -1610612731, 196611, 262187, 536870917, 131082, 262188, -1610612731, 196611, 262189, 1073741829, 131078, 262190, -1610612731, 196611, 262191, -1610612731, 196611, 262192, -1610612731, 196611, 262193, -1610612731, 196611, 262194, 1610612741, 196613, 262195, 5, 196609, 262196, 1073741829, 327688, 262197, -2147483643, 131075, 262198, 1610612741, 458760, 262199, -1610612731, 524293, 262200, -1610612731, 524293, 262201, -1610612731, 524293, 262202, -1610612731, 524293, 262203, -1610612731, 524293, 262204, -1610612731, 524293, 262205, -1610612731, 524293, 262206, -1610612731, 524293, 262207, -1610612731, 524293, 262208, -1610612731, 524293, 393204, -1610612731, 524293, 393205, -1610612731, 524291, 393206, -1073741819, 458760, 393207, -1073741819, 458760, 393208, -1073741819, 458760, 393209, -1073741819, 458760, 393210, -1073741819, 458760, 393211, -1073741819, 458760, 393212, -1073741819, 458760, 393213, -1073741819, 458760, 393214, -1073741819, 458760, 393215, -1073741819, 458760, 327680, -1073741819, 458760, 327681, -1073741819, 458760, 327682, -1073741819, 458760, 327683, -1073741819, 458760, 327684, -1073741819, 458760, 327685, -1073741819, 458760, 327686, -1073741819, 458760, 327687, -1073741819, 458760, 327688, -1073741819, 458760, 327689, -1073741819, 458760, 327690, -1073741819, 458760, 327691, -1073741819, 458760, 327692, -1073741819, 458760, 327693, -1073741819, 458760, 327694, -1073741819, 458760, 327695, -1073741819, 458760, 327696, -1073741819, 458760, 327697, -1073741819, 458760, 327698, -1073741819, 458760, 327699, -1073741819, 458760, 327700, -1073741819, 458760, 327701, -1073741819, 458760, 327702, -1073741819, 458760, 327703, -1073741819, 458760, 327704, -1073741819, 458760, 327705, -1073741819, 458760, 327706, -1073741819, 458760, 327707, -1073741819, 458760, 327708, -1073741819, 458760, 327709, -1073741819, 458760, 327710, -1073741819, 458760, 327711, -1073741819, 458760, 327712, -1073741819, 458760, 327713, -1073741819, 458760, 327714, -1073741819, 458760, 327715, -1073741819, 458760, 327716, -1073741819, 458760, 327717, -1073741819, 458760, 327718, -1073741819, 458760, 327719, -1073741819, 458760, 327720, -1073741819, 458760, 327721, -1073741819, 458760, 327722, -1073741819, 458760, 327723, -1073741819, 458760, 327724, -1073741819, 458760, 327725, -1073741819, 458760, 327726, -1073741819, 458760, 327727, -1073741819, 458760, 327728, -1073741819, 458760, 327729, -1073741819, 458760, 327730, -1073741819, 458760, 327731, -1073741819, 458760, 327732, -1073741819, 458760, 327733, -1073741819, 458760, 327734, -1073741819, 524292, 327735, -1610612731, 524293, 327736, -1610612731, 524293, 327737, -1610612731, 524293, 327738, -1610612731, 524293, 327739, -1610612731, 524293, 327740, -1610612731, 524293, 327741, -1610612731, 524293, 327742, -1610612731, 524293, 327743, -1610612731, 524293, 327744, -1610612731, 524293 ) + +[node name="TileMap2" type="TileMap" parent="."] +tile_set = ExtResource( 4 ) +cell_size = Vector2( 16, 16 ) +collision_layer = 128 +collision_mask = 128 +format = 1 + +[node name="TileMap3" type="TileMap" parent="."] +tile_set = ExtResource( 3 ) +cell_size = Vector2( 16, 16 ) +format = 1 + +[node name="Portal" parent="." instance=ExtResource( 8 )] +position = Vector2( 952, -32 ) +next_scene = "res://src/Levels/Actual Level 1.tscn" + +[node name="Decor" type="Node2D" parent="."] + +[node name="ShaderGrass" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 614, 36 ) + +[node name="ShaderGrass7" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 620, 34 ) + +[node name="ShaderGrass9" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 634, 36 ) + +[node name="ShaderGrass10" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 644, 36 ) + +[node name="ShaderGrass33" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 718, 36 ) +z_index = 1 + +[node name="ShaderGrass34" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 718, 36 ) +z_index = 1 + +[node name="ShaderGrass11" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 655, 36 ) + +[node name="ShaderGrass12" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 648, 34 ) +z_index = -1 + +[node name="ShaderGrass13" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 674, 36 ) +z_index = -1 + +[node name="ShaderGrass17" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 666, 36 ) +z_index = -1 + +[node name="ShaderGrass14" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 687, 34 ) +z_index = -1 + +[node name="ShaderGrass15" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 692, 36 ) +z_index = -1 + +[node name="ShaderGrass16" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 683, 36 ) +z_index = -1 + +[node name="ShaderGrass8" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 624, 36 ) + +[node name="ShaderGrass18" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 670, 36 ) + +[node name="ShaderGrass19" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 686, 36 ) + +[node name="ShaderGrass20" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 699, 36 ) + +[node name="ShaderGrass30" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 710, 36 ) + +[node name="ShaderGrass31" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 719, 34 ) + +[node name="ShaderGrass32" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 724, 36 ) + +[node name="ShaderGrass21" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 699, 36 ) + +[node name="ShaderGrass2" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 594, -12 ) + +[node name="ShaderGrass3" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 584, -12 ) + +[node name="ShaderGrass4" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 576, -12 ) + +[node name="ShaderGrass5" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 582, -15 ) + +[node name="ShaderGrass6" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 568, -12 ) + +[node name="ShaderGrass35" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 548, -12 ) + +[node name="ShaderGrass36" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 543, -13 ) + +[node name="ShaderGrass37" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 537, -12 ) + +[node name="ShaderGrass38" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 520, -12 ) + +[node name="ShaderGrass39" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 520, -12 ) + +[node name="ShaderGrass22" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 732, 36 ) + +[node name="ShaderGrass23" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 738, 34 ) + +[node name="ShaderGrass24" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 752, 36 ) + +[node name="ShaderGrass25" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 762, 36 ) + +[node name="ShaderGrass26" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 773, 36 ) + +[node name="ShaderGrass27" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 766, 34 ) +z_index = -1 + +[node name="ShaderGrass28" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 742, 36 ) + +[node name="ShaderGrass29" parent="Decor" instance=ExtResource( 12 )] +position = Vector2( 785, 36 ) + +[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] + +[editable path="SignalManager"] +[editable path="LevelState"] +[editable path="UserInterface"] +[editable path="UserInterface/HUD"] +[editable path="BlobbyCam"] +[editable path="Blobby"] +[editable path="WhatAreFrog"] diff --git a/src/Levels/2 Tut Level.tscn b/src/Levels/2 Tut Level.tscn index f8d3e18..a4f4e49 100644 --- a/src/Levels/2 Tut Level.tscn +++ b/src/Levels/2 Tut Level.tscn @@ -44,10 +44,10 @@ unique_name_in_owner = true drag_margin_bottom = 0.3 [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 5 +frame = 8 [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 10 +frame = 13 [node name="Blobby" parent="." instance=ExtResource( 9 )] unique_name_in_owner = true @@ -228,19 +228,19 @@ position = Vector2( 756, -15 ) z_index = -1 [node name="AnimatedSprite" parent="Coin" index="2"] -frame = 5 +frame = 154 [node name="Coin2" parent="." instance=ExtResource( 11 )] position = Vector2( 744, -120 ) [node name="AnimatedSprite" parent="Coin2" index="2"] -frame = 250 +frame = 85 [node name="Coin3" parent="." instance=ExtResource( 11 )] position = Vector2( 1320, -282 ) [node name="AnimatedSprite" parent="Coin3" index="2"] -frame = 250 +frame = 85 [node name="Coin4" parent="." instance=ExtResource( 11 )] position = Vector2( 2340, -156 ) diff --git a/src/Levels/Actual Level 1.tscn b/src/Levels/Actual Level 1.tscn index 99f5783..44fea4d 100644 --- a/src/Levels/Actual Level 1.tscn +++ b/src/Levels/Actual Level 1.tscn @@ -44,10 +44,10 @@ wait_time = 20.0 unique_name_in_owner = true [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 9 +frame = 2 [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 13 +frame = 6 [node name="Blobby" parent="." instance=ExtResource( 15 )] unique_name_in_owner = true diff --git a/src/Levels/1 Tut Level.tscn b/src/Levels/Legacy/1 Tut Level.tscn similarity index 80% rename from src/Levels/1 Tut Level.tscn rename to src/Levels/Legacy/1 Tut Level.tscn index 092a3cc..b07ca25 100644 --- a/src/Levels/1 Tut Level.tscn +++ b/src/Levels/Legacy/1 Tut Level.tscn @@ -1,118 +1,46 @@ -[gd_scene load_steps=15 format=2] +[gd_scene load_steps=11 format=2] -[ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=3] -[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=4] -[ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=5] -[ext_resource path="res://assets/environment/blocks/basic_tileset_blobb-jakob-remix.png" type="Texture" id=6] -[ext_resource path="res://src/Environment/Grass/ShaderGrass.tscn" type="PackedScene" id=7] -[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=8] -[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=9] -[ext_resource path="res://src/Levels/Level 1.gd" type="Script" id=10] +[ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=1] +[ext_resource path="res://src/Levels/Level 1.gd" type="Script" id=2] +[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=3] +[ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=4] +[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=5] +[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=6] +[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=7] +[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=8] +[ext_resource path="res://src/Environment/Grass/ShaderGrass.tscn" type="PackedScene" id=9] [sub_resource type="AnimationNodeStateMachinePlayback" id=14] -[sub_resource type="ConvexPolygonShape2D" id=12] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="ConvexPolygonShape2D" id=13] -points = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) - -[sub_resource type="TileSet" id=11] -0/name = "basic_tileset_blobb-jakob-remix.png 0" -0/texture = ExtResource( 6 ) -0/tex_offset = Vector2( 0, 0 ) -0/modulate = Color( 1, 1, 1, 1 ) -0/region = Rect2( 16, 0, 16, 16 ) -0/tile_mode = 1 -0/autotile/bitmask_mode = 0 -0/autotile/bitmask_flags = [ ] -0/autotile/icon_coordinate = Vector2( 0, 0 ) -0/autotile/tile_size = Vector2( 16, 16 ) -0/autotile/spacing = 0 -0/autotile/occluder_map = [ ] -0/autotile/navpoly_map = [ ] -0/autotile/priority_map = [ ] -0/autotile/z_index_map = [ ] -0/occluder_offset = Vector2( 0, 0 ) -0/navigation_offset = Vector2( 0, 0 ) -0/shape_offset = Vector2( 0, 0 ) -0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) -0/shape = SubResource( 12 ) -0/shape_one_way = false -0/shape_one_way_margin = 1.0 -0/shapes = [ { -"autotile_coord": Vector2( 0, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 12 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -} ] -0/z_index = 0 -1/name = "basic_tileset_blobb-jakob-remix.png 1" -1/texture = ExtResource( 6 ) -1/tex_offset = Vector2( 0, 0 ) -1/modulate = Color( 1, 1, 1, 1 ) -1/region = Rect2( 32, 0, 16, 16 ) -1/tile_mode = 1 -1/autotile/bitmask_mode = 0 -1/autotile/bitmask_flags = [ ] -1/autotile/icon_coordinate = Vector2( 0, 0 ) -1/autotile/tile_size = Vector2( 16, 16 ) -1/autotile/spacing = 0 -1/autotile/occluder_map = [ ] -1/autotile/navpoly_map = [ ] -1/autotile/priority_map = [ ] -1/autotile/z_index_map = [ ] -1/occluder_offset = Vector2( 0, 0 ) -1/navigation_offset = Vector2( 0, 0 ) -1/shape_offset = Vector2( 0, 0 ) -1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) -1/shape = SubResource( 13 ) -1/shape_one_way = false -1/shape_one_way_margin = 1.0 -1/shapes = [ { -"autotile_coord": Vector2( 0, 0 ), -"one_way": false, -"one_way_margin": 1.0, -"shape": SubResource( 13 ), -"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) -} ] -1/z_index = 0 - [node name="Level 1" type="Node2D"] -script = ExtResource( 10 ) +script = ExtResource( 2 ) __meta__ = { "_edit_horizontal_guides_": [ 464.0 ], "_edit_vertical_guides_": [ 2880.0 ] } -[node name="SignalManager" parent="." instance=ExtResource( 4 )] +[node name="SignalManager" parent="." instance=ExtResource( 8 )] -[node name="LevelState" parent="." instance=ExtResource( 1 )] +[node name="LevelState" parent="." instance=ExtResource( 4 )] unique_name_in_owner = true -[node name="UserInterface" parent="." instance=ExtResource( 2 )] +[node name="UserInterface" parent="." instance=ExtResource( 3 )] unique_name_in_owner = true [node name="Timer" parent="UserInterface/HUD/HUDOverlay/GetBackTimer" index="0"] wait_time = 20.0 -[node name="BlobbyCam" parent="." instance=ExtResource( 3 )] +[node name="BlobbyCam" parent="." instance=ExtResource( 7 )] unique_name_in_owner = true drag_margin_bottom = 0.3 [node name="Emitter3" parent="BlobbyCam/ParallaxBackground/ParallaxLayer4" index="1"] visible = true -[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 3 - [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 6 +frame = 7 -[node name="Blobby" parent="." instance=ExtResource( 9 )] +[node name="Blobby" parent="." instance=ExtResource( 5 )] unique_name_in_owner = true [node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] @@ -120,7 +48,7 @@ parameters/playback = SubResource( 14 ) [node name="TileMap" type="TileMap" parent="."] unique_name_in_owner = true -tile_set = ExtResource( 5 ) +tile_set = ExtResource( 1 ) cell_size = Vector2( 24, 24 ) cell_quadrant_size = 3 cell_custom_transform = Transform2D( 24, 0, 0, 24, 0, 0 ) @@ -130,119 +58,119 @@ bake_navigation = true format = 1 tile_data = PoolIntArray( -720902, -1073741813, 0, -720901, -1073741813, 0, -720900, -1073741813, 0, -720899, -1073741813, 0, -720898, -1073741813, 0, -720897, -1073741813, 0, -786432, -1073741813, 0, -786431, -1073741813, 0, -786430, -1073741813, 0, -786429, -1073741813, 0, -786428, -1073741813, 0, -786427, -1073741813, 0, -786426, -1073741813, 0, -786425, -1073741813, 0, -786424, -1073741813, 0, -786423, -1073741813, 0, -786422, -1073741813, 0, -786421, -1073741813, 0, -786420, -1073741813, 0, -786419, -1073741813, 0, -786418, -1073741813, 0, -786417, -1073741813, 0, -786416, -1073741813, 0, -786415, 1610612751, 0, -786414, 1610612746, 0, -786413, 1610612746, 0, -786412, 1610612746, 0, -786411, 1610612746, 0, -786410, 1610612746, 0, -786409, 1610612746, 0, -786408, 1610612746, 0, -786407, 1610612746, 0, -786406, 1610612746, 0, -786405, -1073741809, 0, -655366, -1073741813, 0, -655365, -1073741813, 0, -655364, -1073741813, 0, -655363, -1073741813, 0, -655362, -1073741813, 0, -655361, -1073741813, 0, -720896, -1073741813, 0, -720895, -1073741813, 0, -720894, -1073741813, 0, -720893, -1073741813, 0, -720892, -1073741813, 0, -720891, -1073741813, 0, -720890, -1073741813, 0, -720889, -1073741813, 0, -720888, -1073741813, 0, -720887, -1073741813, 0, -720886, -1073741813, 0, -720885, -1073741813, 0, -720884, -1073741813, 0, -720883, -1073741813, 0, -720882, -1073741813, 0, -720881, 1610612751, 0, -720880, 1610612746, 0, -720879, -1610612722, 0, -720878, 1610612739, 0, -720877, 1610612739, 0, -720876, 1610612739, 0, -720875, 1610612739, 0, -720874, 1610612739, 0, -720873, 1610612739, 0, -720872, 1610612739, 0, -720871, 1610612739, 0, -720870, 1610612739, 0, -720869, -1073741814, 0, -589830, -1073741813, 0, -589829, -1073741813, 0, -589828, -1073741813, 0, -589827, -1073741813, 0, -589826, -1073741813, 0, -589825, -1073741813, 0, -655360, -1073741813, 0, -655359, -1073741813, 0, -655358, -1073741813, 0, -655357, -1073741813, 0, -655356, -1073741813, 0, -655355, -1073741813, 0, -655354, -1073741813, 0, -655353, -1073741813, 0, -655352, -1073741813, 0, -655351, -1073741813, 0, -655350, -1073741813, 0, -655349, -1073741813, 0, -655348, -1073741813, 0, -655347, 1610612751, 0, -655346, 1610612746, 0, -655345, -1610612722, 0, -655344, 1610612739, 0, -655343, 1610612739, 0, -655342, 1610612739, 0, -655341, 1610612739, 0, -655340, 1610612738, 0, -655339, 1610612738, 0, -655338, 1610612738, 0, -655337, 1610612738, 0, -655336, 1610612738, 0, -655335, 1610612739, 0, -655334, 1610612739, 0, -655333, -1073741814, 0, -524294, -1073741813, 0, -524293, -1073741813, 0, -524292, -1073741813, 0, -524291, -1073741813, 0, -524290, -1073741813, 0, -524289, -1073741813, 0, -589824, -1073741813, 0, -589823, -1073741813, 0, -589822, -1073741813, 0, -589821, -1073741813, 0, -589820, -1073741813, 0, -589819, -1073741813, 0, -589818, -1073741813, 0, -589817, -1073741813, 0, -589816, -1073741813, 0, -589815, -1073741813, 0, -589814, -1073741813, 0, -589813, -1610612725, 0, -589812, 1610612751, 0, -589811, -1610612722, 0, -589810, 1610612739, 0, -589809, 1610612739, 0, -589808, 1610612739, 0, -589807, 1610612739, 0, -589806, 1610612738, 0, -589805, 1610612743, 0, -589799, -1073741822, 0, -589798, -1610612733, 0, -589797, -1073741814, 0, -458758, 11, 0, -458757, 11, 0, -458756, 11, 0, -458755, 11, 0, -458754, 11, 0, -458753, 11, 0, -524288, 11, 0, -524287, 11, 0, -524286, 11, 0, -524285, 11, 0, -524284, 11, 0, -524283, 11, 0, -524282, 11, 0, -524281, 11, 0, -524280, 11, 0, -524279, 11, 0, -524278, -1073741813, 0, -524277, 1610612751, 0, -524276, -1610612722, 0, -524275, 1610612739, 0, -524274, 1610612739, 0, -524273, 1610612738, 0, -524272, 1610612738, 0, -524271, 1610612743, 0, -524263, -1073741822, 0, -524262, -1610612733, 0, -524261, -1073741814, 0, -393222, 11, 0, -393221, 1610612751, 0, -393220, 1610612746, 0, -393219, 1610612746, 0, -393218, 1610612746, 0, -393217, 1610612746, 0, -458752, 1610612746, 0, -458751, 1610612746, 0, -458750, 1610612746, 0, -458749, 1610612746, 0, -458748, 1610612746, 0, -458747, 1610612746, 0, -458746, 1610612746, 0, -458745, 1610612746, 0, -458744, 1610612746, 0, -458743, 1610612746, 0, -458742, 1610612746, 0, -458741, -1610612722, 0, -458740, 1610612738, 0, -458739, 1610612738, 0, -458738, 1610612743, 0, -458727, -1073741822, 0, -458726, -1610612733, 0, -458725, -1073741814, 0, -327686, 11, 0, -327685, -1610612726, 0, -327684, 1610612739, 0, -327683, 1610612738, 0, -327682, 1610612738, 0, -327681, 1610612738, 0, -393216, 1610612738, 0, -393215, 1610612738, 0, -393214, 1610612738, 0, -393213, 1610612738, 0, -393212, 1610612738, 0, -393211, 1610612738, 0, -393210, 1610612738, 0, -393209, 1610612738, 0, -393208, 1610612738, 0, -393207, 1610612738, 0, -393206, 1610612738, 0, -393205, 1610612743, 0, -393191, -1073741822, 0, -393190, -1610612733, 0, -393189, -1073741814, 0, -262150, 11, 0, -262149, -1610612726, 0, -262148, -1610612734, 0, -327655, -1073741822, 0, -327654, -1610612733, 0, -327653, -1073741814, 0, -196614, 11, 0, -196613, -1610612726, 0, -196612, -1610612734, 0, -262123, 7, 0, -262122, 2, 0, -262121, 2, 0, -262120, 2, 0, -262119, 1610612739, 0, -262118, 3, 0, -262117, -1073741814, 0, -131078, 11, 0, -131077, -1610612726, 0, -131076, -1610612734, 0, -196589, 7, 0, -196588, 2, 0, -196587, 3, 0, -196586, 3, 0, -196585, 3, 0, -196584, 3, 0, -196583, 3, 0, -196582, 3, 0, -196581, -1073741814, 0, -65542, 11, 0, -65541, -1610612726, 0, -65540, -1610612734, 0, -131056, 7, 0, -131055, 2, 0, -131054, 2, 0, -131053, 3, 0, -131052, 3, 0, -131051, -1073741810, 0, -131050, 10, 0, -131049, 10, 0, -131048, 10, 0, -131047, 10, 0, -131046, 10, 0, -131045, 15, 0, -6, 11, 0, -5, -1610612726, 0, -4, -1610612734, 0, -65524, 7, 0, -65523, 2, 0, -65522, 2, 0, -65521, 2, 0, -65520, 3, 0, -65519, 3, 0, -65518, 3, 0, -65517, -1073741810, 0, -65516, 10, 0, -65515, 15, 0, -65514, -1073741813, 0, -65513, -1073741813, 0, -65512, -1073741813, 0, -65511, -1073741813, 0, -65510, -1073741813, 0, -65509, -1073741813, 0, 65530, 11, 0, 65531, -1610612726, 0, 65532, 1610612739, 0, 65533, 2, 0, 65534, 2, 0, 65535, 2, 0, 0, 2, 0, 1, 2, 0, 2, 2, 0, 3, 2, 0, 4, 2, 0, 5, 2, 0, 6, 2, 0, 7, 2, 0, 8, 2, 0, 9, 2, 0, 10, 2, 0, 11, 2, 0, 12, 3, 0, 13, 3, 0, 14, 3, 0, 15, 3, 0, 16, 3, 0, 17, -1073741810, 0, 18, 10, 0, 19, 15, 0, 20, -1073741813, 0, 21, -1073741813, 0, 22, -1073741813, 0, 23, -1073741813, 0, 24, -1073741813, 0, 25, -1073741813, 0, 26, -1073741813, 0, 27, -1073741813, 0, 131066, 11, 0, 131067, -1610612721, 0, 131068, 10, 0, 131069, 10, 0, 131070, 10, 0, 131071, 10, 0, 65536, 10, 0, 65537, 10, 0, 65538, 10, 0, 65539, 10, 0, 65540, 10, 0, 65541, 10, 0, 65542, 10, 0, 65543, 10, 0, 65544, 10, 0, 65545, 10, 0, 65546, 10, 0, 65547, 10, 0, 65548, 10, 0, 65549, 10, 0, 65550, 10, 0, 65551, 10, 0, 65552, 10, 0, 65553, 15, 0, 65554, -1073741813, 0, 65555, -1073741813, 0, 65556, -1073741813, 0, 65557, -1073741813, 0, 65558, -1073741813, 0, 65559, -1073741813, 0, 65560, -1073741813, 0, 65561, -1073741813, 0, 65562, -1073741813, 0, 65563, -1073741813, 0, 196602, 11, 0, 196603, 11, 0, 196604, 11, 0, 196605, 11, 0, 196606, 11, 0, 196607, 11, 0, 131072, 11, 0, 131073, 11, 0, 131074, 11, 0, 131075, 11, 0, 131076, 11, 0, 131077, 11, 0, 131078, 11, 0, 131079, 11, 0, 131080, 11, 0, 131081, 11, 0, 131082, -1073741813, 0, 131083, -1073741813, 0, 131084, -1073741813, 0, 131085, -1073741813, 0, 131086, -1073741813, 0, 131087, -1073741813, 0, 131088, -1073741813, 0, 131089, -1073741813, 0, 131090, -1073741813, 0, 131091, -1073741813, 0, 131092, -1073741813, 0, 131093, -1073741813, 0, 131094, -1073741813, 0, 131095, -1073741813, 0, 131096, -1073741813, 0, 131097, -1073741813, 0, 131098, -1073741813, 0, 131099, -1073741813, 0 ) -[node name="Portal" parent="." instance=ExtResource( 8 )] +[node name="Portal" parent="." instance=ExtResource( 6 )] position = Vector2( 552, -120 ) next_scene = "res://src/Levels/2 Tut Level.tscn" [node name="Decor" type="Node2D" parent="."] position = Vector2( 30, -12 ) -[node name="ShaderGrass" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass" parent="Decor" instance=ExtResource( 9 )] position = Vector2( -99, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass2" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass2" parent="Decor" instance=ExtResource( 9 )] position = Vector2( -84, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass3" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass3" parent="Decor" instance=ExtResource( 9 )] position = Vector2( -67, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass4" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass4" parent="Decor" instance=ExtResource( 9 )] position = Vector2( -52, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass5" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass5" parent="Decor" instance=ExtResource( 9 )] position = Vector2( -33, -15 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass6" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass6" parent="Decor" instance=ExtResource( 9 )] position = Vector2( -18, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass7" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass7" parent="Decor" instance=ExtResource( 9 )] position = Vector2( -1, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass8" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass8" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 16, -15 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass9" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass9" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 30, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass10" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass10" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 45, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass11" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass11" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 62, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass12" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass12" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 76, -15 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass13" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass13" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 97, -15 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass14" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass14" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 111, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass15" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass15" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 128, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass16" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass16" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 143, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass17" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass17" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 162, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass18" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass18" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 178, -15 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass19" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass19" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 194, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass20" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass20" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 209, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass21" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass21" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 228, -12 ) scale = Vector2( 1, 2 ) z_index = -1 -[node name="ShaderGrass22" parent="Decor" instance=ExtResource( 7 )] +[node name="ShaderGrass22" parent="Decor" instance=ExtResource( 9 )] position = Vector2( 242, -15 ) scale = Vector2( 1, 2 ) z_index = -1 @@ -251,182 +179,175 @@ z_index = -1 position = Vector2( 35, -12 ) scale = Vector2( 1, 1.1 ) -[node name="ShaderGrass" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -106, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass5" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass5" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -98, -1 ) -[node name="ShaderGrass6" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass6" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -82, -1 ) -[node name="ShaderGrass7" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass7" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -65, -0.90909 ) -[node name="ShaderGrass2" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass2" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -91, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass3" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass3" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -73, -7.27273 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass4" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass4" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -59, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass8" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass8" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -47, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass9" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass9" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -39, -1 ) -[node name="ShaderGrass45" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass45" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -50, -0.90909 ) -[node name="ShaderGrass10" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass10" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -23, -1 ) -[node name="ShaderGrass11" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass11" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -6, -1 ) -[node name="ShaderGrass12" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass12" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -32, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass13" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass13" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( -15, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass14" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass14" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 0, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass43" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass43" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 9, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass15" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass15" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 16, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass16" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass16" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 24, -1 ) -[node name="ShaderGrass17" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass17" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 40, -1 ) -[node name="ShaderGrass18" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass18" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 57, -1 ) -[node name="ShaderGrass19" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass19" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 31, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass20" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass20" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 48, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass21" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass21" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 63, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass22" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass22" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 75, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass23" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass23" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 83, -1 ) -[node name="ShaderGrass44" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass44" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 72, -1 ) -[node name="ShaderGrass24" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass24" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 99, -1 ) -[node name="ShaderGrass25" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass25" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 116, -1 ) -[node name="ShaderGrass26" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass26" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 90, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass27" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass27" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 107, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass28" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass28" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 122, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass29" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass29" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 134, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass30" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass30" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 142, -1 ) -[node name="ShaderGrass46" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass46" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 131, -0.90909 ) -[node name="ShaderGrass31" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass31" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 158, -1 ) -[node name="ShaderGrass32" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass32" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 175, -1 ) -[node name="ShaderGrass47" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass47" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 186, -0.90909 ) -[node name="ShaderGrass33" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass33" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 149, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass34" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass34" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 166, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass35" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass35" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 181, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass36" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass36" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 193, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass37" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass37" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 201, -1 ) -[node name="ShaderGrass38" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass38" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 217, -1 ) -[node name="ShaderGrass39" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass39" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 234, -1 ) -[node name="ShaderGrass48" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass48" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 245, -0.90909 ) -[node name="ShaderGrass40" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass40" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 208, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass41" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass41" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 225, -7 ) scale = Vector2( 1, 1.5 ) -[node name="ShaderGrass42" parent="Decor2" instance=ExtResource( 7 )] +[node name="ShaderGrass42" parent="Decor2" instance=ExtResource( 9 )] position = Vector2( 240, -7 ) scale = Vector2( 1, 1.5 ) -[node name="TileMap2" type="TileMap" parent="."] -tile_set = SubResource( 11 ) -cell_size = Vector2( 16, 16 ) -cell_quadrant_size = 8 -cell_custom_transform = Transform2D( 16, 0, 0, 16, 0, 0 ) -format = 1 - [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [editable path="SignalManager"] diff --git a/src/Levels/New Tiles Level.tscn b/src/Levels/New Tiles Level.tscn deleted file mode 100644 index cec0b89..0000000 --- a/src/Levels/New Tiles Level.tscn +++ /dev/null @@ -1,81 +0,0 @@ -[gd_scene load_steps=12 format=2] - -[ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=1] -[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=3] -[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=4] -[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=5] -[ext_resource path="res://src/Actors/Enemies/Beings/Caterpillar.tscn" type="PackedScene" id=6] -[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=7] -[ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=8] -[ext_resource path="res://src/Environment/AlienGreenHouseTilesNew.tres" type="TileSet" id=9] -[ext_resource path="res://src/Actors/Enemies/Beings/BoundFrog.tscn" type="PackedScene" id=10] - -[sub_resource type="AnimationNodeStateMachinePlayback" id=4] - -[node name="LevelTemplate" type="Node2D"] -script = ExtResource( 1 ) -__meta__ = { -"_edit_horizontal_guides_": [ 464.0 ], -"_edit_vertical_guides_": [ 2880.0 ] -} - -[node name="SignalManager" parent="." instance=ExtResource( 4 )] - -[node name="LevelState" parent="." instance=ExtResource( 8 )] -unique_name_in_owner = true - -[node name="UserInterface" parent="." instance=ExtResource( 3 )] -unique_name_in_owner = true - -[node name="Timer" parent="UserInterface/HUD/HUDOverlay/GetBackTimer" index="0"] -wait_time = 20.0 - -[node name="BlobbyCam" parent="." instance=ExtResource( 5 )] -unique_name_in_owner = true -drag_margin_bottom = 0.3 - -[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 3 - -[node name="Blobby" parent="." instance=ExtResource( 7 )] -unique_name_in_owner = true -position = Vector2( -70, -1.90735e-06 ) -scale = Vector2( 0.878906, 0.936025 ) - -[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"] -parameters/playback = SubResource( 4 ) - -[node name="Caterpillar" parent="." instance=ExtResource( 6 )] -position = Vector2( 452, -154 ) - -[node name="TileMap" type="TileMap" parent="."] -unique_name_in_owner = true -tile_set = ExtResource( 9 ) -cell_size = Vector2( 16, 16 ) -cell_quadrant_size = 3 -cell_custom_transform = Transform2D( 16, 0, 0, 16, 0, 0 ) -collision_layer = 8 -collision_mask = 8 -bake_navigation = true -format = 1 -tile_data = PoolIntArray( -1245196, 1, 131076, -1245195, 1, 131076, -1245194, 1, 131076, -1245193, 1, 131076, -1245192, 1, 131076, -1245191, 1, 131076, -1245190, 1, 131076, -1245189, 1, 131076, -1245188, 1, 131076, -1245187, 1, 131076, -1245186, 1, 131076, -1245185, 1, 131076, -1310720, 1, 131076, -1310719, 1, 131076, -1310718, 1, 131076, -1310717, 1, 131076, -1310716, 1, 131076, -1310715, 1, 131076, -1310714, 1, 131076, -1310713, 1, 131076, -1310712, 1, 131076, -1310711, 1, 131076, -1310710, 1, 131076, -1310709, -536870911, 327681, -1310708, 536870913, 131077, -1310707, 536870913, 131077, -1310706, 536870913, 131077, -1310705, 536870913, 131077, -1310704, 536870913, 131077, -1310703, 536870913, 131077, -1310702, 536870913, 131077, -1310701, 536870913, 131077, -1310700, 536870913, 131077, -1310699, 536870913, 131077, -1310698, 536870913, 131077, -1310697, 536870913, 131077, -1310696, 536870913, 131077, -1310695, 536870913, 131077, -1310694, 536870913, 131077, -1310693, 536870913, 131077, -1310692, 536870913, 131077, -1310691, 536870913, 131077, -1310690, 536870913, 131077, -1310689, 536870913, 131077, -1310688, 536870913, 131077, -1310687, 536870913, 131077, -1310686, 536870913, 131077, -1310685, 536870913, 131077, -1310684, 1073741825, 327681, -1179660, 1, 131076, -1179659, 1, 131076, -1179658, 1, 131076, -1179657, 1, 131076, -1179656, 1, 131076, -1179655, 1, 131076, -1179654, 1, 131076, -1179653, 1, 131076, -1179652, 1, 131076, -1179651, 1, 131076, -1179650, 1, 131076, -1179649, 1, 131076, -1245184, 1, 131076, -1245183, 1, 131076, -1245182, 1, 131076, -1245181, 1, 131076, -1245180, 1, 131076, -1245179, 1, 131076, -1245178, 1, 131076, -1245177, 1, 131076, -1245176, 1, 131076, -1245175, 1, 131076, -1245174, 1, 131076, -1245173, -2147483647, 131077, -1245172, 536870913, 131079, -1245171, -536870911, 196615, -1245170, -536870911, 196615, -1245169, -536870911, 196615, -1245168, -536870911, 196615, -1245167, -536870911, 196615, -1245166, -536870911, 196615, -1245165, -536870911, 196615, -1245164, -536870911, 196615, -1245163, 1610612737, 65543, -1245162, -536870911, 196615, -1245161, -536870911, 196615, -1245160, -536870911, 196615, -1245159, -536870911, 196615, -1245158, -536870911, 196615, -1245157, -536870911, 196615, -1245156, -536870911, 196615, -1245155, -536870911, 196615, -1245154, -536870911, 196615, -1245153, -536870911, 196615, -1245152, -536870911, 196615, -1245151, -536870911, 196615, -1245150, -536870911, 196615, -1245149, 536870913, 131079, -1245148, -536870911, 131077, -1114124, 1, 131076, -1114123, 1, 131076, -1114122, 1, 131076, -1114121, 1, 131076, -1114120, 1, 131076, -1114119, 1, 131076, -1114118, 1, 131076, -1114117, 1, 131076, -1114116, 1, 131076, -1114115, 1, 131076, -1114114, 1, 131076, -1114113, 1, 131076, -1179648, 1, 131076, -1179647, 1, 131076, -1179646, 1, 131076, -1179645, 1, 131076, -1179644, 1, 131076, -1179643, 1, 131076, -1179642, 1, 131076, -1179641, 1, 131076, -1179640, 1, 131076, -1179639, 1, 131076, -1179638, 1, 131076, -1179637, -2147483647, 131077, -1179636, 536870913, 196615, -1179635, 1073741825, 393216, -1179634, 536870913, 7, -1179633, 536870913, 7, -1179632, 536870913, 7, -1179631, 536870913, 7, -1179630, 536870913, 7, -1179629, 536870913, 7, -1179628, 536870913, 7, -1179627, 536870913, 7, -1179626, 536870913, 7, -1179625, 536870913, 7, -1179624, 536870913, 7, -1179623, 536870913, 7, -1179622, 536870913, 7, -1179621, 536870913, 7, -1179620, 536870913, 7, -1179619, 536870913, 7, -1179618, 536870913, 7, -1179617, 536870913, 7, -1179616, 536870913, 7, -1179615, 536870913, 7, -1179614, 536870913, 7, -1179613, -2147483647, 327685, -1179612, -536870911, 131077, -1048588, 1, 131076, -1048587, 1, 131076, -1048586, 1, 131076, -1048585, 1, 131076, -1048584, 1, 131076, -1048583, 1, 131076, -1048582, 1, 131076, -1048581, 1, 131076, -1048580, 1, 131076, -1048579, 1, 131076, -1048578, 1, 131076, -1048577, 1, 131076, -1114112, 1, 131076, -1114111, 1, 131076, -1114110, 1, 131076, -1114109, 1, 131076, -1114108, 1, 131076, -1114107, 1, 131076, -1114106, 1, 131076, -1114105, 1, 131076, -1114104, 1, 131076, -1114103, 1, 131076, -1114102, 1, 131076, -1114101, -2147483647, 131077, -1114100, 1610612737, 196615, -1114099, 1, 327687, -1114077, 1073741825, 4, -1114076, -536870911, 131077, -983052, 1, 131076, -983051, 1, 131076, -983050, 1, 131076, -983049, 1, 131076, -983048, 1, 131076, -983047, 1, 131076, -983046, 1, 131076, -983045, 1, 131076, -983044, 1, 131076, -983043, 1, 131076, -983042, 1, 131076, -983041, 1, 131076, -1048576, 1, 131076, -1048575, 1, 131076, -1048574, 1, 131076, -1048573, 1, 131076, -1048572, 1, 131076, -1048571, 1, 131076, -1048570, 1, 131076, -1048569, 1, 131076, -1048568, 1, 131076, -1048567, 1, 131076, -1048566, 1, 131076, -1048565, -2147483647, 131077, -1048564, 1610612737, 196615, -1048563, 1, 5, -1048541, 1073741825, 4, -1048540, -536870911, 131077, -917516, 1610612737, 327681, -917515, 1, 131077, -917514, 1, 131077, -917513, 1, 131077, -917512, 1, 131077, -917511, 1, 131077, -917510, 1, 131077, -917509, 1, 131077, -917508, 1, 131077, -917507, 1, 131077, -917506, 1, 131077, -917505, 1, 131077, -983040, 1, 131077, -983039, 1, 131077, -983038, 1, 131077, -983037, 1, 131077, -983036, 1, 131077, -983035, 1, 131077, -983034, 1, 131077, -983033, 1, 131077, -983032, 1, 131077, -983031, 1, 131077, -983030, 1, 131077, -983029, -536870911, 327683, -983028, 1610612737, 196615, -983027, 1, 5, -983005, 1073741825, 4, -983004, -536870911, 131077, -851980, -1073741823, 131077, -851979, 1610612737, 327682, -851978, -1073741823, 196615, -851977, -1073741823, 196615, -851976, -1073741823, 196615, -851975, -1073741823, 196615, -851974, -1073741823, 196615, -851973, -1073741823, 196615, -851972, -1073741823, 196615, -851971, -1073741823, 196615, -851970, -1073741823, 196615, -851969, -1073741823, 196615, -917504, -1073741823, 196615, -917503, -1073741823, 196615, -917502, -1073741823, 196615, -917501, -1073741823, 196615, -917500, -1073741823, 196615, -917499, -1073741823, 196615, -917498, -1073741823, 196615, -917497, -1073741823, 196615, -917496, -1073741823, 196615, -917495, -1073741823, 196615, -917494, -1073741823, 196615, -917493, -1073741823, 196615, -917492, 1610612737, 65542, -917491, 1, 5, -917480, 0, 1, -917479, 0, 393217, -917478, 0, 2, -917477, 0, 2, -917476, 0, 393217, -917475, 0, 393217, -917474, 0, 2, -917473, 0, 3, -917469, 1073741825, 4, -917468, -536870911, 131077, -786444, -1073741823, 131077, -786443, 1610612737, 196615, -786442, -1610612735, 327685, -786441, 1, 7, -786440, 1, 7, -786439, 1, 7, -786438, 1, 7, -786437, 1, 7, -786436, 1, 7, -786435, 1, 7, -786434, 1, 7, -786433, 1, 7, -851968, 1, 7, -851967, 1, 7, -851966, 1, 7, -851965, 1, 7, -851964, 1, 7, -851963, 1, 7, -851962, 1, 7, -851961, 1, 7, -851960, 1, 7, -851959, 1, 7, -851958, 1, 7, -851957, 1, 7, -851956, 1, 7, -851955, 1, 65536, -851944, 0, 4, -851943, 1, 393218, -851942, 1, 393219, -851941, 1, 393219, -851940, 1, 393219, -851939, 1, 393219, -851938, 1, 393220, -851937, 0, 327687, -851933, 1073741825, 4, -851932, -536870911, 131077, -720908, -1073741823, 131077, -720907, 1610612737, 196615, -720906, 1, 5, -786408, 0, 4, -786407, 1, 393221, -786402, 1, 393222, -786401, 0, 5, -786397, 1073741825, 4, -786396, -536870911, 131077, -655372, -1073741823, 131077, -655371, 1610612737, 196615, -655370, 1, 5, -720872, 0, 4, -720871, 1, 393221, -720866, 1, 393222, -720865, 0, 5, -720861, 1073741825, 4, -720860, -536870911, 131077, -589836, -1073741823, 131077, -589835, 1610612737, 196615, -589834, 1, 5, -655336, 0, 4, -655335, 1, 393223, -655334, 1, 458752, -655333, 1, 458752, -655332, 1, 458752, -655331, 1, 458752, -655330, 1, 458753, -655329, 0, 327687, -655325, 1073741825, 4, -655324, -536870911, 131077, -524300, -1073741823, 131077, -524299, 1610612737, 196615, -524298, 1, 5, -589800, 0, 6, -589799, 0, 7, -589798, 0, 7, -589797, 0, 7, -589796, 0, 7, -589795, 0, 7, -589794, 0, 7, -589793, 0, 65536, -589789, 1073741825, 4, -589788, -536870911, 131077, -458764, -1073741823, 131077, -458763, 1610612737, 196615, -458762, 1, 5, -458757, 0, 1, -458756, 0, 393217, -458755, 0, 2, -458754, 0, 327686, -524253, 1073741825, 4, -524252, -536870911, 131077, -393228, -1073741823, 131077, -393227, 1610612737, 196615, -393226, 1, 5, -393221, 0, 4, -393220, 1, 393218, -393219, 1, 393220, -393218, 0, 327687, -458717, 1073741825, 4, -458716, -536870911, 131077, -327692, -1073741823, 131077, -327691, 1610612737, 196615, -327690, 1, 5, -327685, 0, 4, -327684, 1, 393223, -327683, 1, 458753, -327682, 0, 5, -393199, 1, 1, -393198, 1, 2, -393197, 1, 3, -393181, 1073741825, 4, -393180, -536870911, 131077, -262156, -1073741823, 131077, -262155, 1610612737, 196615, -262154, 1, 5, -262149, 0, 6, -262148, 0, 7, -262147, 0, 7, -262146, 0, 65536, -327663, 1, 4, -327662, -1073741823, 196608, -327661, 1, 5, -327645, 1073741825, 4, -327644, -536870911, 131077, -196620, -1073741823, 131077, -196619, 1610612737, 196615, -196618, 1, 5, -262139, 1, 1, -262138, 1, 2, -262137, 1, 2, -262136, 1, 2, -262135, 1, 2, -262134, 1, 3, -262127, 1, 4, -262126, -1610612735, 65543, -262125, 1, 5, -262109, 1073741825, 4, -262108, -536870911, 131077, -131084, -1073741823, 131077, -131083, -1073741823, 196608, -131082, 1, 5, -196603, 1, 6, -196602, 1, 7, -196601, 1, 7, -196600, 1, 7, -196599, 1, 7, -196598, 1, 65536, -196591, 1, 4, -196590, -1610612735, 196614, -196589, 1, 393216, -196588, 1, 2, -196587, 1, 2, -196586, 1, 2, -196585, 1, 3, -196573, 1073741825, 4, -196572, -536870911, 131077, -65548, -1073741823, 131077, -65547, 1610612737, 196615, -65546, 1, 5, -131055, 1, 4, -131054, -1610612735, 196614, -131053, 1, 393218, -131052, 1, 393219, -131051, 1, 393219, -131050, 1, 393220, -131049, 1, 5, -131037, 1073741825, 4, -131036, -536870911, 131077, -12, -1073741823, 131077, -11, 1610612737, 196615, -10, 1, 5, -65519, 1, 4, -65518, -1610612735, 196614, -65517, 1, 393221, -65514, 1, 393222, -65513, 1, 393216, -65512, 1, 2, -65511, 1, 2, -65510, 1, 327686, -65501, 1073741825, 4, -65500, -536870911, 131077, 65524, -1073741823, 131077, 65525, 1610612737, 196615, 65526, 1, 393216, 65527, 1, 2, 65528, 1, 2, 65529, 1, 2, 65530, 1, 2, 65531, 1, 2, 65532, 1, 2, 65533, 1, 2, 65534, 1, 2, 65535, 1, 2, 0, 1, 2, 1, 1, 2, 2, 1, 2, 3, 1, 2, 4, 1, 2, 5, 1, 2, 6, 1, 2, 7, 1, 2, 8, 1, 2, 9, 1, 393217, 10, 1, 393217, 11, 1, 393217, 12, 1, 393217, 13, 1, 2, 14, 1, 2, 15, 1, 2, 16, 1, 2, 17, 1, 262149, 18, -1610612735, 196614, 19, 1, 393223, 20, 1, 458752, 21, 1, 458752, 22, 1, 458753, 23, -1610612735, 262144, 24, -1073741823, 196615, 25, -1073741823, 65540, 26, 1, 393216, 27, 1, 2, 28, 1, 2, 29, 1, 2, 30, 1, 2, 31, 1, 2, 32, 1, 2, 33, 1, 2, 34, 1, 2, 35, 536870913, 393216, 36, -536870911, 131077, 131060, -1073741823, 131077, 131061, -1610612735, 327682, 131062, -1610612735, 196615, 131063, -1610612735, 196615, 131064, -1610612735, 196615, 131065, -1610612735, 196615, 131066, -1610612735, 196615, 131067, 1610612737, 196608, 131068, 1610612737, 196608, 131069, 1, 65543, 131070, -1610612735, 196615, 131071, -1610612735, 196615, 65536, -1610612735, 196615, 65537, -1610612735, 196615, 65538, -1610612735, 196615, 65539, -1610612735, 196615, 65540, -1610612735, 196615, 65541, -1610612735, 196615, 65542, 1, 65543, 65543, -1610612735, 196615, 65544, 1610612737, 262148, 65545, -1610612735, 196615, 65546, -1610612735, 196615, 65547, -1610612735, 196615, 65548, -1610612735, 196615, 65549, -1610612735, 196615, 65550, -1610612735, 196615, 65551, -1610612735, 196615, 65552, -1610612735, 196615, 65553, -1610612735, 196615, 65554, -1610612735, 196615, 65555, -1610612735, 196615, 65556, -1610612735, 196615, 65557, -1610612735, 196615, 65558, -1610612735, 196615, 65559, -1610612735, 196615, 65560, 1, 65543, 65561, 1, 65540, 65562, -1073741823, 262144, 65563, -1610612735, 196615, 65564, -1610612735, 196615, 65565, -1610612735, 196615, 65566, -1610612735, 196615, 65567, -1610612735, 196615, 65568, -1610612735, 196615, 65569, -1610612735, 196615, 65570, -1610612735, 196615, 65571, -2147483647, 196615, 65572, -536870911, 131077, 196596, -1610612735, 327681, 196597, 1610612737, 131077, 196598, 1610612737, 131077, 196599, 1610612737, 131077, 196600, 1610612737, 131077, 196601, 1610612737, 131077, 196602, 1610612737, 131077, 196603, 1610612737, 131077, 196604, 1610612737, 131077, 196605, 1610612737, 131077, 196606, 1610612737, 131077, 196607, 1610612737, 131077, 131072, 1610612737, 131077, 131073, 1610612737, 131077, 131074, 1610612737, 131077, 131075, 1610612737, 131077, 131076, 1610612737, 131077, 131077, 1610612737, 131077, 131078, 1610612737, 131077, 131079, 1610612737, 131077, 131080, 1610612737, 131077, 131081, 1610612737, 131077, 131082, 1610612737, 131077, 131083, 1610612737, 131077, 131084, 1610612737, 131077, 131085, 1610612737, 131077, 131086, 1, 131074, 131087, 1, 131074, 131088, 1, 131074, 131089, 1, 131074, 131090, 1, 131074, 131091, 1, 131074, 131092, 1, 131074, 131093, 1, 131074, 131094, 1, 131074, 131095, 1, 131074, 131096, 1, 131074, 131097, 1, 131074, 131098, 1, 131074, 131099, 1, 131074, 131100, 1, 131074, 131101, 1, 131074, 131102, 1, 131074, 131103, 1, 131074, 131104, 1, 131074, 131105, 1, 131074, 131106, 1, 131074, 131107, 1073741825, 131077, 131108, -2147483647, 327681 ) - -[node name="Portal" parent="." instance=ExtResource( 2 )] -position = Vector2( -123, -165 ) -next_scene = "res://src/Levels/Actual Level 1.tscn" - -[node name="Node2D" type="Node2D" parent="."] - -[node name="BoundFrog" parent="Node2D" instance=ExtResource( 10 )] -position = Vector2( 546, -9 ) -movement_radius = 14 - -[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] - -[editable path="SignalManager"] -[editable path="LevelState"] -[editable path="UserInterface"] -[editable path="UserInterface/HUD"] -[editable path="BlobbyCam"] -[editable path="Blobby"] diff --git a/src/Levels/Templates/Template.tscn b/src/Levels/Templates/Template.tscn index 6335a30..18670f1 100644 --- a/src/Levels/Templates/Template.tscn +++ b/src/Levels/Templates/Template.tscn @@ -1,16 +1,41 @@ -[gd_scene load_steps=10 format=2] +[gd_scene load_steps=13 format=2] -[ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=1] +[ext_resource path="res://src/Environment/GreenHouseTiles.tres" type="TileSet" id=1] [ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=2] [ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=3] [ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=4] [ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=5] +[ext_resource path="res://src/Contraptions/DropThroughPlatforms.tres" type="TileSet" id=6] [ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=7] [ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=8] [ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=9] +[ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=10] [sub_resource type="AnimationNodeStateMachinePlayback" id=4] +[sub_resource type="TileSet" id=5] +0/name = "platform-plants.png 0" +0/texture = ExtResource( 10 ) +0/tex_offset = Vector2( 0, 0 ) +0/modulate = Color( 1, 1, 1, 1 ) +0/region = Rect2( 16, 0, 256, 16 ) +0/tile_mode = 2 +0/autotile/icon_coordinate = Vector2( 5, 0 ) +0/autotile/tile_size = Vector2( 16, 16 ) +0/autotile/spacing = 0 +0/autotile/occluder_map = [ ] +0/autotile/navpoly_map = [ ] +0/autotile/priority_map = [ ] +0/autotile/z_index_map = [ ] +0/occluder_offset = Vector2( 0, 0 ) +0/navigation_offset = Vector2( 0, 0 ) +0/shape_offset = Vector2( 0, 0 ) +0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +0/shape_one_way = false +0/shape_one_way_margin = 0.0 +0/shapes = [ ] +0/z_index = 0 + [node name="LevelTemplate" type="Node2D"] script = ExtResource( 9 ) __meta__ = { @@ -34,10 +59,10 @@ unique_name_in_owner = true drag_margin_bottom = 0.3 [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 2 +frame = 3 [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 1 +frame = 2 [node name="Blobby" parent="." instance=ExtResource( 7 )] unique_name_in_owner = true @@ -50,17 +75,27 @@ parameters/playback = SubResource( 4 ) [node name="TileMap" type="TileMap" parent="."] unique_name_in_owner = true tile_set = ExtResource( 1 ) -cell_size = Vector2( 24, 24 ) +cell_size = Vector2( 16, 16 ) cell_quadrant_size = 3 cell_custom_transform = Transform2D( 24, 0, 0, 24, 0, 0 ) collision_layer = 8 collision_mask = 8 bake_navigation = true format = 1 -tile_data = PoolIntArray( -458761, 1610612738, 0, -458760, 1610612738, 0, -458759, 1610612738, 0, -458758, 1610612738, 0, -458757, 1610612738, 0, -458756, 1610612738, 0, -458755, 1610612738, 0, -458754, 1610612738, 0, -458753, 1610612738, 0, -524288, 1610612738, 0, -524287, 1610612738, 0, -524286, 1610612738, 0, -524285, 1610612738, 0, -524284, 1610612738, 0, -524283, 1610612738, 0, -524282, 1610612738, 0, -524281, 1610612738, 0, -524280, 1610612738, 0, -524279, 1610612738, 0, -524278, 1610612738, 0, -524277, 1610612738, 0, -524276, 1610612738, 0, -393226, -1610612734, 0, -458739, -1073741822, 0, -327690, -1610612734, 0, -393203, -1073741822, 0, -262154, -1610612734, 0, -327667, -1073741822, 0, -196618, -1610612734, 0, -262131, -1073741822, 0, -131082, -1610612734, 0, -196595, -1073741822, 0, -65546, -1610612734, 0, -131059, -1073741822, 0, -10, -1610612734, 0, -65523, -1073741822, 0, 65526, -1610612734, 0, 13, -1073741822, 0, 131062, -1610612734, 0, 65549, -1073741822, 0, 196598, -1610612734, 0, 131085, -1073741822, 0, 262134, -1610612734, 0, 196621, -1073741822, 0, 327670, -1610612734, 0, 262157, -1073741822, 0, 393206, -1610612734, 0, 327693, -1073741822, 0, 458743, 2, 0, 458744, 2, 0, 458745, 2, 0, 458746, 2, 0, 458747, 2, 0, 458748, 2, 0, 458749, 2, 0, 458750, 2, 0, 458751, 2, 0, 393216, 2, 0, 393217, 2, 0, 393218, 2, 0, 393219, 2, 0, 393220, 2, 0, 393221, 2, 0, 393222, 2, 0, 393223, 2, 0, 393224, 2, 0, 393225, 2, 0, 393226, 2, 0, 393227, 2, 0, 393228, 2, 0 ) +tile_data = PoolIntArray( -393230, 1610612741, 65539, -393229, 1610612741, 3, -393228, 1610612741, 3, -393227, 1610612741, 3, -393226, 1610612741, 3, -393225, 1610612741, 3, -393224, 1610612741, 3, -393223, 1610612741, 3, -393222, 1610612741, 3, -393221, 1610612741, 3, -393220, 1610612741, 3, -393219, 1610612741, 3, -393218, 1610612741, 3, -393217, 1610612741, 3, -458752, 1610612741, 3, -458751, 1610612741, 3, -458750, 1610612741, 3, -458749, 1610612741, 3, -458748, 1610612741, 3, -458747, 1610612741, 3, -458746, 1610612741, 3, -458745, 1610612741, 3, -458744, 1610612741, 3, -458743, 1610612741, 3, -458742, 1610612741, 3, -458741, 1610612741, 3, -458740, 1610612741, 3, -458739, 1610612741, 3, -458738, 1610612741, 3, -458737, 1610612741, 3, -458736, 1610612741, 3, -458735, 1610612741, 3, -458734, 1610612741, 3, -458733, 1610612741, 65538, -327694, 5, 7, -393197, 5, 6, -262158, 5, 7, -327661, 5, 6, -196622, 5, 7, -262125, 5, 6, -131086, 5, 7, -196589, 5, 6, -65550, 5, 7, -131053, 5, 6, -14, 5, 7, -65517, 5, 6, 65522, 5, 7, 19, 5, 6, 131058, 5, 7, 65555, 5, 6, 196594, 5, 7, 131091, 5, 6, 262130, 5, 7, 196627, 5, 6, 327666, 5, 7, 262163, 5, 6, 393202, 5, 7, 327699, 5, 6, 458738, 5, 7, 393235, 5, 6, 524274, 5, 65538, 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, 2, 458754, 5, 2, 458755, 5, 2, 458756, 5, 2, 458757, 5, 2, 458758, 5, 2, 458759, 5, 2, 458760, 5, 2, 458761, 5, 2, 458762, 5, 2, 458763, 5, 2, 458764, 5, 2, 458765, 5, 2, 458766, 5, 2, 458767, 5, 2, 458768, 5, 2, 458769, 5, 2, 458770, 5, 2, 458771, 5, 65539 ) + +[node name="DropThroughPlatforms" type="TileMap" parent="."] +tile_set = ExtResource( 6 ) +cell_size = Vector2( 16, 16 ) +format = 1 + +[node name="PlatformPlants" type="TileMap" parent="."] +tile_set = SubResource( 5 ) +cell_size = Vector2( 16, 16 ) +format = 1 [node name="Portal" parent="." instance=ExtResource( 5 )] -position = Vector2( 288, 120 ) +position = Vector2( 288, 96 ) next_scene = "res://src/Levels/Actual Level 1.tscn" [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] diff --git a/default_bus_layout.tres b/src/Sounds/default_bus_layout.tres similarity index 100% rename from default_bus_layout.tres rename to src/Sounds/default_bus_layout.tres diff --git a/src/UserInterface/Screens/InGameMenu/PauseScreen.tscn b/src/UserInterface/Screens/InGameMenu/PauseScreen.tscn index a9be5c9..738bc6c 100644 --- a/src/UserInterface/Screens/InGameMenu/PauseScreen.tscn +++ b/src/UserInterface/Screens/InGameMenu/PauseScreen.tscn @@ -5,7 +5,7 @@ [ext_resource path="res://src/UserInterface/Buttons/RetryButton.tscn" type="PackedScene" id=4] [ext_resource path="res://src/UserInterface/Screens/InGameMenu/PauseScreen.gd" type="Script" id=5] [ext_resource path="res://src/UserInterface/Screens/InGameMenu/Continue.gd" type="Script" id=6] -[ext_resource path="res://src/transparency.gdshader" type="Shader" id=7] +[ext_resource path="res://assets/effects/transparency.gdshader" type="Shader" id=7] [ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/ReallyQuitMenu.gd" type="Script" id=8] [ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/ActionKeyList.gd" type="Script" id=9] [ext_resource path="res://src/UserInterface/Screens/InGameMenu/ControlsMenuIngame.gd" type="Script" id=10] diff --git a/src/UserInterface/Screens/MainMenu/ControlsMenu/ControlsMenu.tscn b/src/UserInterface/Screens/MainMenu/ControlsMenu/ControlsMenu.tscn index 6f3770d..891256e 100644 --- a/src/UserInterface/Screens/MainMenu/ControlsMenu/ControlsMenu.tscn +++ b/src/UserInterface/Screens/MainMenu/ControlsMenu/ControlsMenu.tscn @@ -16,7 +16,7 @@ [ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/ActionKeyList.gd" type="Script" id=14] [ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/InputMapper.gd" type="Script" id=15] [ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/Reset.gd" type="Script" id=16] -[ext_resource path="res://src/transparency.gdshader" type="Shader" id=17] +[ext_resource path="res://assets/effects/transparency.gdshader" type="Shader" id=17] [ext_resource path="res://assets/meta/montserrat_extrabold.otf" type="DynamicFontData" id=18] [ext_resource path="res://src/UserInterface/Buttons/MenuNavigationButton.gd" type="Script" id=19]