diff --git a/2d/split_screen_platformer/engine.cfg b/2d/split_screen_platformer/engine.cfg index dddef264..c33f3c42 100644 --- a/2d/split_screen_platformer/engine.cfg +++ b/2d/split_screen_platformer/engine.cfg @@ -1,7 +1,7 @@ [application] -name="Platformer" -main_scene="res://stage.tscn" +name="Split Screen Platformer" +main_scene="res://split_stage.tscn" icon="res://icon.png" name_es="Plataformero" target_fps="60" @@ -19,11 +19,16 @@ repeat=false [input] -move_left=[key(Left), jbutton(0, 14)] -move_right=[key(Right), jbutton(0, 15)] -jump=[key(Up), jbutton(0, 0)] -shoot=[key(Space), jbutton(0, 2)] -spawn=[key(F1), jbutton(0, 11)] +move_left1=[key(A), jbutton(1, 14)] +move_right1=[key(D), jbutton(1, 15)] +jump1=[key(W), jbutton(1, 0)] +shoot1=[key(Space), jbutton(1, 2)] +spawn1=[key(F2), jbutton(1, 11)] +move_left0=[key(Left), jbutton(0, 14)] +move_right0=[key(Right), jbutton(0, 15)] +jump0=[key(Up), jbutton(0, 0)] +shoot0=[key(Return), jbutton(0, 2)] +spawn0=[key(F1), jbutton(0, 11)] [physics_2d] diff --git a/2d/split_screen_platformer/player.gd b/2d/split_screen_platformer/player.gd index 8cafd8b9..efe23bae 100644 --- a/2d/split_screen_platformer/player.gd +++ b/2d/split_screen_platformer/player.gd @@ -52,6 +52,7 @@ var bullet = preload("res://bullet.tscn") var floor_h_velocity = 0.0 var enemy +export(int, "Player 1", "Player 2") var index = 0 func _integrate_forces(s): var lv = s.get_linear_velocity() @@ -61,11 +62,11 @@ func _integrate_forces(s): var new_siding_left = siding_left # Get the controls - var move_left = Input.is_action_pressed("move_left") - var move_right = Input.is_action_pressed("move_right") - var jump = Input.is_action_pressed("jump") - var shoot = Input.is_action_pressed("shoot") - var spawn = Input.is_action_pressed("spawn") + var move_left = Input.is_action_pressed("move_left" + str(index)) + var move_right = Input.is_action_pressed("move_right" + str(index)) + var jump = Input.is_action_pressed("jump" + str(index)) + var shoot = Input.is_action_pressed("shoot" + str(index)) + var spawn = Input.is_action_pressed("spawn" + str(index)) if spawn: var e = enemy.instance() diff --git a/2d/split_screen_platformer/player.tscn b/2d/split_screen_platformer/player.tscn index 77a2e272..a00f220e 100644 --- a/2d/split_screen_platformer/player.tscn +++ b/2d/split_screen_platformer/player.tscn @@ -35,7 +35,8 @@ step = 0.25 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 -tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 22 ] } +tracks/0/imported = false +tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ 22 ] } [sub_resource type="Animation" id=5] @@ -46,7 +47,8 @@ step = 0.25 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 -tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 21 ] } +tracks/0/imported = false +tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ 21 ] } [sub_resource type="Animation" id=6] @@ -57,7 +59,8 @@ step = 0.25 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 -tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 26 ] } +tracks/0/imported = false +tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ 26 ] } [sub_resource type="Animation" id=7] @@ -67,7 +70,8 @@ step = 0.25 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 -tracks/0/keys = { "cont":false, "times":FloatArray( 0, 1.25, 1.5, 2, 4.5, 4.75, 5, 5.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 16, 17, 18, 16, 19, 20, 19, 16 ] } +tracks/0/imported = false +tracks/0/keys = { "times":FloatArray( 0, 1.25, 1.5, 2, 4.5, 4.75, 5, 5.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 16, 17, 18, 16, 19, 20, 19, 16 ] } [sub_resource type="Animation" id=8] @@ -77,7 +81,8 @@ step = 0.25 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 -tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 25 ] } +tracks/0/imported = false +tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ 25 ] } [sub_resource type="Animation" id=9] @@ -87,7 +92,8 @@ step = 0.25 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 -tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5 ), "transitions":FloatArray( 1, 1, 1 ), "values":[ 23, 24, 23 ] } +tracks/0/imported = false +tracks/0/keys = { "times":FloatArray( 0, 0.25, 0.5 ), "transitions":FloatArray( 1, 1, 1 ), "update":1, "values":[ 23, 24, 23 ] } [sub_resource type="Animation" id=10] @@ -97,7 +103,8 @@ step = 0.25 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 -tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 26 ] } +tracks/0/imported = false +tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ 26 ] } [sub_resource type="Animation" id=11] @@ -107,7 +114,8 @@ step = 0.25 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 -tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 4, 0 ] } +tracks/0/imported = false +tracks/0/keys = { "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 0, 1, 2, 3, 4, 0 ] } [sub_resource type="Animation" id=12] @@ -117,7 +125,8 @@ step = 0.25 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 -tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 5, 6, 7, 8, 9, 5 ] } +tracks/0/imported = false +tracks/0/keys = { "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 5, 6, 7, 8, 9, 5 ] } [sub_resource type="Animation" id=13] @@ -127,13 +136,14 @@ step = 0.25 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 -tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 10, 11, 12, 13, 14, 5 ] } +tracks/0/imported = false +tracks/0/keys = { "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 10, 11, 12, 13, 14, 5 ] } [sub_resource type="SampleLibrary" id=14] +samples/coin = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) } samples/jump = { "db":0.0, "pitch":1.0, "sample":ExtResource( 5 ) } samples/shoot = { "db":0.0, "pitch":1.0, "sample":ExtResource( 6 ) } -samples/coin = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) } [node name="player" type="RigidBody2D"] @@ -162,6 +172,7 @@ velocity/angular = 0.0 damp_override/linear = -1.0 damp_override/angular = -1.0 script/script = ExtResource( 1 ) +index = 0 [node name="sprite" type="Sprite" parent="."] diff --git a/2d/split_screen_platformer/split_stage.gd b/2d/split_screen_platformer/split_stage.gd new file mode 100644 index 00000000..adbe3214 --- /dev/null +++ b/2d/split_screen_platformer/split_stage.gd @@ -0,0 +1,15 @@ +extends Control + +func _ready(): + #make bottom viewport have the same world2D as the top viewport, so both show the same + get_node("bottom/viewport").set_world_2d( get_node("top/viewport").get_world_2d() ) + #make player2 camera control the offset of the bottom viewport + get_node("top/viewport/stage/player2/camera").set_custom_viewport( get_node("bottom/viewport") ) + # + var parallax_copy = get_node("top/viewport/stage/parallax_bg").duplicate() + parallax_copy.set_custom_viewport( get_node("bottom/viewport") ) + get_node("top/viewport/stage").add_child(parallax_copy) + + #simple and alternatively, copy them to the other viewport, but they must be erased when level is unloaded + #get_node("bottom/viewport").add_child( get_node("top/viewport/stage/parallax_bg").duplicate() ) + pass diff --git a/2d/split_screen_platformer/split_stage.tscn b/2d/split_screen_platformer/split_stage.tscn new file mode 100644 index 00000000..e333d2d4 --- /dev/null +++ b/2d/split_screen_platformer/split_stage.tscn @@ -0,0 +1,83 @@ +[gd_scene load_steps=3 format=1] + +[ext_resource path="res://split_stage.gd" type="Script" id=1] +[ext_resource path="res://stage.tscn" type="PackedScene" id=2] + +[node name="main_control" type="Control"] + +anchor/right = 1 +anchor/bottom = 1 +focus/ignore_mouse = false +focus/stop_mouse = true +size_flags/horizontal = 2 +size_flags/vertical = 2 +margin/left = 0.0 +margin/top = 0.0 +margin/right = 0.0 +margin/bottom = 0.0 +script/script = ExtResource( 1 ) + +[node name="top" type="Control" parent="."] + +anchor/right = 1 +anchor/bottom = 3 +focus/ignore_mouse = false +focus/stop_mouse = true +size_flags/horizontal = 2 +size_flags/vertical = 2 +margin/left = 0.0 +margin/top = 0.0 +margin/right = 0.0 +margin/bottom = 0.0 + +[node name="viewport" type="Viewport" parent="top"] + +rect = Rect2( 0, 0, 800, 240 ) +own_world = false +world = null +transparent_bg = false +render_target/enabled = false +render_target/v_flip = false +render_target/clear_on_new_frame = true +render_target/filter = false +render_target/gen_mipmaps = false +render_target/update_mode = 2 +audio_listener/enable_2d = false +audio_listener/enable_3d = false +physics/object_picking = false +gui/disable_input = false + +[node name="stage" parent="top/viewport" instance=ExtResource( 2 )] + +[node name="bottom" type="Control" parent="."] + +anchor/top = 3 +anchor/right = 1 +anchor/bottom = 1 +focus/ignore_mouse = false +focus/stop_mouse = true +size_flags/horizontal = 2 +size_flags/vertical = 2 +margin/left = 0.0 +margin/top = 0.0 +margin/right = 0.0 +margin/bottom = 0.0 + +[node name="viewport" type="Viewport" parent="bottom"] + +rect = Rect2( 0, 0, 800, 240 ) +own_world = false +world = null +transparent_bg = false +render_target/enabled = false +render_target/v_flip = false +render_target/clear_on_new_frame = true +render_target/filter = false +render_target/gen_mipmaps = false +render_target/update_mode = 2 +audio_listener/enable_2d = false +audio_listener/enable_3d = false +physics/object_picking = false +gui/disable_input = false + + diff --git a/2d/split_screen_platformer/stage.tscn b/2d/split_screen_platformer/stage.tscn index 9709efef..583e6ec6 100644 --- a/2d/split_screen_platformer/stage.tscn +++ b/2d/split_screen_platformer/stage.tscn @@ -36,212 +36,170 @@ __meta__ = { "_edit_lock_":true } [node name="coin" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 672, 1179 ) -linear_damp = 0.1 [node name="coin 2" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 704, 1179 ) -linear_damp = 0.1 [node name="coin 3" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 736, 1179 ) -linear_damp = 0.1 [node name="coin 4" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1120, 992 ) -linear_damp = 0.1 [node name="coin 5" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1152, 992 ) -linear_damp = 0.1 [node name="coin 6" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1184, 992 ) -linear_damp = 0.1 [node name="coin 7" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1216, 992 ) -linear_damp = 0.1 [node name="coin 8" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1248, 992 ) -linear_damp = 0.1 [node name="coin 9" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1568, 864 ) -linear_damp = 0.1 [node name="coin 10" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1632, 864 ) -linear_damp = 0.1 [node name="coin 11" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1824, 768 ) -linear_damp = 0.1 [node name="coin 12" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1888, 768 ) -linear_damp = 0.1 [node name="coin 13" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 2080, 672 ) -linear_damp = 0.1 [node name="coin 14" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 2144, 672 ) -linear_damp = 0.1 [node name="coin 15" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1792, 1248 ) -linear_damp = 0.1 [node name="coin 16" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1856, 1248 ) -linear_damp = 0.1 [node name="coin 17" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1920, 1248 ) -linear_damp = 0.1 [node name="coin 18" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1920, 1184 ) -linear_damp = 0.1 [node name="coin 19" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1856, 1184 ) -linear_damp = 0.1 [node name="coin 20" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 1792, 1184 ) -linear_damp = 0.1 [node name="coin 21" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 98.8868, 488.515 ) -linear_damp = 0.1 [node name="coin 22" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 89.5989, 481.217 ) -linear_damp = 0.1 [node name="coin 23" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 108.175, 481.217 ) -linear_damp = 0.1 [node name="coin 24" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 116.136, 469.939 ) -linear_damp = 0.1 [node name="coin 25" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 117.463, 457.997 ) -linear_damp = 0.1 [node name="coin 26" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 106.184, 449.373 ) -linear_damp = 0.1 [node name="coin 27" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 98.2234, 458.661 ) -linear_damp = 0.1 [node name="coin 28" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 88.272, 448.71 ) -linear_damp = 0.1 [node name="coin 29" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 79.6476, 457.334 ) -linear_damp = 0.1 [node name="coin 30" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 82.9647, 468.612 ) -linear_damp = 0.1 [node name="coin 31" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 3357.42, 465.288 ) -linear_damp = 0.1 [node name="coin 31 2" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 3421.42, 465.288 ) -linear_damp = 0.1 [node name="coin 31 3" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 3485.42, 465.288 ) -linear_damp = 0.1 [node name="coin 31 4" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 3485.42, 401.288 ) -linear_damp = 0.1 [node name="coin 31 5" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 3421.42, 401.288 ) -linear_damp = 0.1 [node name="coin 31 6" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 3357.42, 401.288 ) -linear_damp = 0.1 [node name="coin 32" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 4172.75, 605.058 ) -linear_damp = 0.1 [node name="coin 31 7" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 4236.75, 605.058 ) -linear_damp = 0.1 [node name="coin 31 7 2" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 4300.75, 605.058 ) -linear_damp = 0.1 [node name="coin 31 7 3" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 4300.75, 541.058 ) -linear_damp = 0.1 [node name="coin 31 7 4" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 4236.75, 541.058 ) -linear_damp = 0.1 [node name="coin 31 7 5" parent="coins" instance=ExtResource( 2 )] transform/pos = Vector2( 4172.75, 541.058 ) -linear_damp = 0.1 [node name="props" type="Node" parent="."] @@ -275,6 +233,11 @@ transform/pos = Vector2( 927.698, 1120.81 ) transform/pos = Vector2( 251.684, 1045.6 ) +[node name="player2" parent="." instance=ExtResource( 6 )] + +transform/pos = Vector2( 179.645, 1046.34 ) +index = 1 + [node name="music" type="StreamPlayer" parent="."] stream/stream = ExtResource( 7 ) @@ -339,6 +302,7 @@ transform/pos = Vector2( 2406.63, 815.115 ) focus/ignore_mouse = true focus/stop_mouse = true size_flags/horizontal = 2 +size_flags/vertical = 0 margin/left = 12.0 margin/top = -202.0 margin/right = 358.0