├── .gitattributes ├── .gitignore ├── LICENSE ├── Multiplayer Tutorial Source Files ├── Bullet.gd ├── Bullet.tscn ├── Famas.png ├── Famas.png.import ├── GameManager.gd ├── Main Character - Male - Full spritesheet - No Guide.png ├── Main Character - Male - Full spritesheet - No Guide.png.import ├── MutiplayerController.gd ├── SceneManager.gd ├── ServerBrowser.gd ├── ServerInfo.gd ├── building_01.png ├── building_01.png.import ├── building_02.png ├── building_02.png.import ├── building_03.png ├── building_03.png.import ├── building_04.png ├── building_04.png.import ├── building_05.png ├── building_05.png.import ├── export_presets.cfg ├── main_tileset.png ├── main_tileset.png.import ├── multiplayerScene.tscn ├── parallax_background_layer_6.png ├── parallax_background_layer_6.png.import ├── player.gd ├── player.tscn ├── server_info.tscn └── testScene.tscn ├── icon.svg ├── icon.svg.import └── project.godot /.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize EOL for all files that Git considers text files. 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Godot 4+ specific ignores 2 | .godot/ 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Mitch 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/Bullet.gd: -------------------------------------------------------------------------------- 1 | extends CharacterBody2D 2 | 3 | 4 | const SPEED = 500.0 5 | 6 | # Get the gravity from the project settings to be synced with RigidBody nodes. 7 | var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") 8 | var direction : Vector2 9 | 10 | func _ready(): 11 | direction = Vector2(1,0).rotated(rotation) 12 | 13 | func _physics_process(delta): 14 | # Add the gravity. 15 | velocity = SPEED * direction 16 | if not is_on_floor(): 17 | velocity.y += gravity * 1 * delta 18 | move_and_slide() 19 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/Bullet.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://lviwd7iyvso6"] 2 | 3 | [ext_resource type="Script" path="res://Multiplayer Tutorial Source Files/Bullet.gd" id="1_e8ca4"] 4 | [ext_resource type="Texture2D" uid="uid://bh4xilvgu3miq" path="res://icon.svg" id="2_hjusm"] 5 | 6 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_e3xmc"] 7 | size = Vector2(30, 6) 8 | 9 | [node name="Node2D" type="CharacterBody2D"] 10 | position = Vector2(1, -1) 11 | script = ExtResource("1_e8ca4") 12 | 13 | [node name="Icon" type="Sprite2D" parent="."] 14 | position = Vector2(14, 0) 15 | scale = Vector2(0.226563, 0.0390625) 16 | texture = ExtResource("2_hjusm") 17 | 18 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 19 | position = Vector2(14, 0) 20 | shape = SubResource("RectangleShape2D_e3xmc") 21 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/Famas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finepointcgi/WebRTC-with-Godot-Tutorial/77f6a99bbd832dd604da2bb8e92cfd33435dba6b/Multiplayer Tutorial Source Files/Famas.png -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/Famas.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://tcgb3bjp6hyi" 6 | path="res://.godot/imported/Famas.png-e81de5776217d02212442b3463abb43e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Multiplayer Tutorial Source Files/Famas.png" 14 | dest_files=["res://.godot/imported/Famas.png-e81de5776217d02212442b3463abb43e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/GameManager.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | var Players = {} 4 | 5 | # Called when the node enters the scene tree for the first time. 6 | func _ready(): 7 | pass # Replace with function body. 8 | 9 | 10 | # Called every frame. 'delta' is the elapsed time since the previous frame. 11 | func _process(delta): 12 | pass 13 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/Main Character - Male - Full spritesheet - No Guide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finepointcgi/WebRTC-with-Godot-Tutorial/77f6a99bbd832dd604da2bb8e92cfd33435dba6b/Multiplayer Tutorial Source Files/Main Character - Male - Full spritesheet - No Guide.png -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/Main Character - Male - Full spritesheet - No Guide.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dld54qw3mao0w" 6 | path="res://.godot/imported/Main Character - Male - Full spritesheet - No Guide.png-f6c8a18811f5edd0d50dea9a8fb402d5.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Multiplayer Tutorial Source Files/Main Character - Male - Full spritesheet - No Guide.png" 14 | dest_files=["res://.godot/imported/Main Character - Male - Full spritesheet - No Guide.png-f6c8a18811f5edd0d50dea9a8fb402d5.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/MutiplayerController.gd: -------------------------------------------------------------------------------- 1 | extends Control 2 | 3 | @export var Address = "204.48.28.159" 4 | @export var port = 8910 5 | var peer 6 | 7 | # Called when the node enters the scene tree for the first time. 8 | func _ready(): 9 | multiplayer.peer_connected.connect(peer_connected) 10 | multiplayer.peer_disconnected.connect(peer_disconnected) 11 | multiplayer.connected_to_server.connect(connected_to_server) 12 | multiplayer.connection_failed.connect(connection_failed) 13 | if "--server" in OS.get_cmdline_args(): 14 | hostGame() 15 | 16 | $ServerBrowser.joinGame.connect(JoinByIP) 17 | pass # Replace with function body. 18 | 19 | 20 | # Called every frame. 'delta' is the elapsed time since the previous frame. 21 | func _process(delta): 22 | pass 23 | 24 | # this get called on the server and clients 25 | func peer_connected(id): 26 | print("Player Connected " + str(id)) 27 | 28 | # this get called on the server and clients 29 | func peer_disconnected(id): 30 | print("Player Disconnected " + str(id)) 31 | GameManager.Players.erase(id) 32 | var players = get_tree().get_nodes_in_group("Player") 33 | for i in players: 34 | if i.name == str(id): 35 | i.queue_free() 36 | # called only from clients 37 | func connected_to_server(): 38 | print("connected To Sever!") 39 | SendPlayerInformation.rpc_id(1, $LineEdit.text, multiplayer.get_unique_id()) 40 | 41 | # called only from clients 42 | func connection_failed(): 43 | print("Couldnt Connect") 44 | 45 | @rpc("any_peer") 46 | func SendPlayerInformation(name, id): 47 | if !GameManager.Players.has(id): 48 | GameManager.Players[id] ={ 49 | "name" : name, 50 | "id" : id, 51 | "score": 0 52 | } 53 | 54 | if multiplayer.is_server(): 55 | for i in GameManager.Players: 56 | SendPlayerInformation.rpc(GameManager.Players[i].name, i) 57 | 58 | @rpc("any_peer","call_local") 59 | func StartGame(): 60 | var scene = load("res://Multiplayer Tutorial Source Files/testScene.tscn").instantiate() 61 | get_tree().root.add_child(scene) 62 | self.hide() 63 | 64 | func hostGame(): 65 | peer = ENetMultiplayerPeer.new() 66 | var error = peer.create_server(port, 2) 67 | if error != OK: 68 | print("cannot host: " + error) 69 | return 70 | peer.get_host().compress(ENetConnection.COMPRESS_RANGE_CODER) 71 | 72 | multiplayer.set_multiplayer_peer(peer) 73 | print("Waiting For Players!") 74 | 75 | 76 | func _on_host_button_down(): 77 | hostGame() 78 | SendPlayerInformation($LineEdit.text, multiplayer.get_unique_id()) 79 | $ServerBrowser.setUpBroadCast($LineEdit.text + "'s server") 80 | pass # Replace with function body. 81 | 82 | 83 | func _on_join_button_down(): 84 | JoinByIP(Address) 85 | pass # Replace with function body. 86 | 87 | func JoinByIP(ip): 88 | peer = ENetMultiplayerPeer.new() 89 | peer.create_client(ip, port) 90 | peer.get_host().compress(ENetConnection.COMPRESS_RANGE_CODER) 91 | multiplayer.set_multiplayer_peer(peer) 92 | 93 | func _on_start_game_button_down(): 94 | StartGame.rpc() 95 | pass # Replace with function body. 96 | 97 | 98 | func _on_button_button_down(): 99 | GameManager.Players[GameManager.Players.size() + 1] ={ 100 | "name" : "test", 101 | "id" : 1, 102 | "score": 0 103 | } 104 | pass # Replace with function body. 105 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/SceneManager.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | @export var PlayerScene : PackedScene 4 | 5 | # Called when the node enters the scene tree for the first time. 6 | func _ready(): 7 | var index = 0 8 | for i in GameManager.Players: 9 | var currentPlayer = PlayerScene.instantiate() 10 | currentPlayer.name = str(GameManager.Players[i].id) 11 | add_child(currentPlayer) 12 | for spawn in get_tree().get_nodes_in_group("PlayerSpawnPoint"): 13 | if spawn.name == str(index): 14 | currentPlayer.global_position = spawn.global_position 15 | index += 1 16 | pass # Replace with function body. 17 | 18 | 19 | # Called every frame. 'delta' is the elapsed time since the previous frame. 20 | func _process(delta): 21 | pass 22 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/ServerBrowser.gd: -------------------------------------------------------------------------------- 1 | extends Control 2 | 3 | signal found_server 4 | signal server_removed 5 | signal joinGame(ip) 6 | var broadcastTimer : Timer 7 | 8 | var RoomInfo = {"name":"name", "playerCount": 0} 9 | var broadcaster : PacketPeerUDP 10 | var listner : PacketPeerUDP 11 | @export var listenPort : int = 8911 12 | @export var broadcastPort : int = 8912 13 | @export var broadcastAddress : String = '192.168.1.255' 14 | 15 | @export var serverInfo : PackedScene 16 | # Called when the node enters the scene tree for the first time. 17 | func _ready(): 18 | broadcastTimer = $BroadcastTimer 19 | setUp() 20 | pass # Replace with function body. 21 | 22 | func setUp(): 23 | listner = PacketPeerUDP.new() 24 | var ok = listner.bind(listenPort) 25 | 26 | if ok == OK: 27 | print("Bound to listen Port " + str(listenPort) + " Successful!") 28 | $Label2.text="Bound To Listen Port: true" 29 | else: 30 | print("Failed to bind to listen port!") 31 | $Label2.text="Bound To Listen Port: false" 32 | 33 | 34 | func setUpBroadCast(name): 35 | RoomInfo.name = name 36 | RoomInfo.playerCount = GameManager.Players.size() 37 | 38 | broadcaster = PacketPeerUDP.new() 39 | broadcaster.set_broadcast_enabled(true) 40 | broadcaster.set_dest_address(broadcastAddress, listenPort) 41 | 42 | var ok = broadcaster.bind(broadcastPort) 43 | 44 | if ok == OK: 45 | print("Bound to Broadcast Port " + str(broadcastPort) + " Successful!") 46 | else: 47 | print("Failed to bind to broadcast port!") 48 | 49 | $BroadcastTimer.start() 50 | 51 | 52 | # Called every frame. 'delta' is the elapsed time since the previous frame. 53 | func _process(delta): 54 | 55 | if listner.get_available_packet_count() > 0: 56 | var serverip = listner.get_packet_ip() 57 | var serverport = listner.get_packet_port() 58 | var bytes = listner.get_packet() 59 | var data = bytes.get_string_from_ascii() 60 | var roomInfo = JSON.parse_string(data) 61 | 62 | print("server Ip: " + serverip +" serverPort: "+ str(serverport) + " room info: " + str(roomInfo)) 63 | 64 | for i in $Panel/VBoxContainer.get_children(): 65 | if i.name == roomInfo.name: 66 | i.get_node("Ip").text = serverip 67 | i.get_node("PlayerCount").text = str(roomInfo.playerCount) 68 | return 69 | 70 | var currentInfo = serverInfo.instantiate() 71 | currentInfo.name = roomInfo.name 72 | currentInfo.get_node("Name").text = roomInfo.name 73 | currentInfo.get_node("Ip").text = serverip 74 | currentInfo.get_node("PlayerCount").text = str(roomInfo.playerCount) 75 | $Panel/VBoxContainer.add_child(currentInfo) 76 | currentInfo.joinGame.connect(joinbyIp) 77 | pass 78 | pass 79 | 80 | 81 | func _on_broadcast_timer_timeout(): 82 | print("Broadcasting Game!") 83 | RoomInfo.playerCount = GameManager.Players.size() 84 | var data = JSON.stringify(RoomInfo) 85 | var packet = data.to_ascii_buffer() 86 | broadcaster.put_packet(packet) 87 | pass # Replace with function body. 88 | 89 | func cleanUp(): 90 | listner.close() 91 | 92 | $BroadcastTimer.stop() 93 | if broadcaster != null: 94 | broadcaster.close() 95 | 96 | func _exit_tree(): 97 | cleanUp() 98 | 99 | func joinbyIp(ip): 100 | joinGame.emit(ip) 101 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/ServerInfo.gd: -------------------------------------------------------------------------------- 1 | extends HBoxContainer 2 | 3 | signal joinGame(ip) 4 | 5 | # Called when the node enters the scene tree for the first time. 6 | func _ready(): 7 | pass # Replace with function body. 8 | 9 | 10 | # Called every frame. 'delta' is the elapsed time since the previous frame. 11 | func _process(delta): 12 | pass 13 | 14 | 15 | func _on_button_button_down(): 16 | joinGame.emit($Ip.text) 17 | pass # Replace with function body. 18 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/building_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finepointcgi/WebRTC-with-Godot-Tutorial/77f6a99bbd832dd604da2bb8e92cfd33435dba6b/Multiplayer Tutorial Source Files/building_01.png -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/building_01.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cwxl33xxbtg3r" 6 | path="res://.godot/imported/building_01.png-79d765ed92db934546d9337cd4fa389e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Multiplayer Tutorial Source Files/building_01.png" 14 | dest_files=["res://.godot/imported/building_01.png-79d765ed92db934546d9337cd4fa389e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/building_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finepointcgi/WebRTC-with-Godot-Tutorial/77f6a99bbd832dd604da2bb8e92cfd33435dba6b/Multiplayer Tutorial Source Files/building_02.png -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/building_02.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b4vq4xgturgu4" 6 | path="res://.godot/imported/building_02.png-3d7adf59f0125b4374376f58d72a758c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Multiplayer Tutorial Source Files/building_02.png" 14 | dest_files=["res://.godot/imported/building_02.png-3d7adf59f0125b4374376f58d72a758c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/building_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finepointcgi/WebRTC-with-Godot-Tutorial/77f6a99bbd832dd604da2bb8e92cfd33435dba6b/Multiplayer Tutorial Source Files/building_03.png -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/building_03.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://tnonfplskpfd" 6 | path="res://.godot/imported/building_03.png-b5b34e1276105527142af02806e1b646.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Multiplayer Tutorial Source Files/building_03.png" 14 | dest_files=["res://.godot/imported/building_03.png-b5b34e1276105527142af02806e1b646.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/building_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finepointcgi/WebRTC-with-Godot-Tutorial/77f6a99bbd832dd604da2bb8e92cfd33435dba6b/Multiplayer Tutorial Source Files/building_04.png -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/building_04.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b6y0w06xobc7d" 6 | path="res://.godot/imported/building_04.png-5b305d21185614b5940f4ac610bbed7d.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Multiplayer Tutorial Source Files/building_04.png" 14 | dest_files=["res://.godot/imported/building_04.png-5b305d21185614b5940f4ac610bbed7d.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/building_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finepointcgi/WebRTC-with-Godot-Tutorial/77f6a99bbd832dd604da2bb8e92cfd33435dba6b/Multiplayer Tutorial Source Files/building_05.png -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/building_05.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cg5nd8583ee0n" 6 | path="res://.godot/imported/building_05.png-d487209f6b6b225c3476904bcb171249.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Multiplayer Tutorial Source Files/building_05.png" 14 | dest_files=["res://.godot/imported/building_05.png-d487209f6b6b225c3476904bcb171249.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/export_presets.cfg: -------------------------------------------------------------------------------- 1 | [preset.0] 2 | 3 | name="Windows Desktop" 4 | platform="Windows Desktop" 5 | runnable=true 6 | dedicated_server=false 7 | custom_features="" 8 | export_filter="all_resources" 9 | include_filter="" 10 | exclude_filter="" 11 | export_path="../multiplayer Lan Tutorial.exe" 12 | encryption_include_filters="" 13 | encryption_exclude_filters="" 14 | encrypt_pck=false 15 | encrypt_directory=false 16 | 17 | [preset.0.options] 18 | 19 | custom_template/debug="" 20 | custom_template/release="" 21 | debug/export_console_wrapper=1 22 | binary_format/embed_pck=false 23 | texture_format/bptc=true 24 | texture_format/s3tc=true 25 | texture_format/etc=false 26 | texture_format/etc2=false 27 | binary_format/architecture="x86_64" 28 | codesign/enable=false 29 | codesign/timestamp=true 30 | codesign/timestamp_server_url="" 31 | codesign/digest_algorithm=1 32 | codesign/description="" 33 | codesign/custom_options=PackedStringArray() 34 | application/modify_resources=true 35 | application/icon="" 36 | application/console_wrapper_icon="" 37 | application/icon_interpolation=4 38 | application/file_version="" 39 | application/product_version="" 40 | application/company_name="" 41 | application/product_name="" 42 | application/file_description="" 43 | application/copyright="" 44 | application/trademarks="" 45 | ssh_remote_deploy/enabled=false 46 | ssh_remote_deploy/host="user@host_ip" 47 | ssh_remote_deploy/port="22" 48 | ssh_remote_deploy/extra_args_ssh="" 49 | ssh_remote_deploy/extra_args_scp="" 50 | ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' 51 | $action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' 52 | $trigger = New-ScheduledTaskTrigger -Once -At 00:00 53 | $settings = New-ScheduledTaskSettingsSet 54 | $task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 55 | Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true 56 | Start-ScheduledTask -TaskName godot_remote_debug 57 | while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } 58 | Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" 59 | ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue 60 | Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue 61 | Remove-Item -Recurse -Force '{temp_dir}'" 62 | dotnet/include_scripts_content=false 63 | dotnet/include_debug_symbols=true 64 | 65 | [preset.1] 66 | 67 | name="Linux/X11" 68 | platform="Linux/X11" 69 | runnable=true 70 | dedicated_server=false 71 | custom_features="" 72 | export_filter="all_resources" 73 | include_filter="" 74 | exclude_filter="" 75 | export_path="../multiplayer Lan Tutorial.x86_64" 76 | encryption_include_filters="" 77 | encryption_exclude_filters="" 78 | encrypt_pck=false 79 | encrypt_directory=false 80 | 81 | [preset.1.options] 82 | 83 | custom_template/debug="" 84 | custom_template/release="" 85 | debug/export_console_wrapper=1 86 | binary_format/embed_pck=false 87 | texture_format/bptc=true 88 | texture_format/s3tc=true 89 | texture_format/etc=false 90 | texture_format/etc2=false 91 | binary_format/architecture="x86_64" 92 | ssh_remote_deploy/enabled=false 93 | ssh_remote_deploy/host="user@host_ip" 94 | ssh_remote_deploy/port="22" 95 | ssh_remote_deploy/extra_args_ssh="" 96 | ssh_remote_deploy/extra_args_scp="" 97 | ssh_remote_deploy/run_script="#!/usr/bin/env bash 98 | export DISPLAY=:0 99 | unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" 100 | \"{temp_dir}/{exe_name}\" {cmd_args}" 101 | ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash 102 | kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") 103 | rm -rf \"{temp_dir}\"" 104 | dotnet/include_scripts_content=false 105 | dotnet/include_debug_symbols=true 106 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/main_tileset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finepointcgi/WebRTC-with-Godot-Tutorial/77f6a99bbd832dd604da2bb8e92cfd33435dba6b/Multiplayer Tutorial Source Files/main_tileset.png -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/main_tileset.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://6r0yoxgn80ir" 6 | path="res://.godot/imported/main_tileset.png-e8f9fa0c42c40bc27784a07cff7ecb98.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Multiplayer Tutorial Source Files/main_tileset.png" 14 | dest_files=["res://.godot/imported/main_tileset.png-e8f9fa0c42c40bc27784a07cff7ecb98.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/multiplayerScene.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://bwtcufnykv2gk"] 2 | 3 | [ext_resource type="Script" path="res://Multiplayer Tutorial Source Files/MutiplayerController.gd" id="1_omkav"] 4 | [ext_resource type="Script" path="res://Multiplayer Tutorial Source Files/ServerBrowser.gd" id="2_njv3o"] 5 | [ext_resource type="PackedScene" uid="uid://dpqlhqyadbpvs" path="res://Multiplayer Tutorial Source Files/server_info.tscn" id="3_jpahl"] 6 | 7 | [node name="Control" type="Control"] 8 | layout_mode = 3 9 | anchors_preset = 15 10 | anchor_right = 1.0 11 | anchor_bottom = 1.0 12 | grow_horizontal = 2 13 | grow_vertical = 2 14 | script = ExtResource("1_omkav") 15 | Address = "127.0.0.1" 16 | 17 | [node name="Host" type="Button" parent="."] 18 | layout_mode = 0 19 | offset_left = 74.0 20 | offset_top = 120.0 21 | offset_right = 251.0 22 | offset_bottom = 168.0 23 | text = "Host" 24 | 25 | [node name="Join" type="Button" parent="."] 26 | layout_mode = 0 27 | offset_left = 270.0 28 | offset_top = 120.0 29 | offset_right = 447.0 30 | offset_bottom = 168.0 31 | text = "Join" 32 | 33 | [node name="StartGame" type="Button" parent="."] 34 | layout_mode = 0 35 | offset_left = 479.0 36 | offset_top = 120.0 37 | offset_right = 656.0 38 | offset_bottom = 168.0 39 | text = "Start Game" 40 | 41 | [node name="LineEdit" type="LineEdit" parent="."] 42 | layout_mode = 0 43 | offset_left = 156.0 44 | offset_top = 68.0 45 | offset_right = 508.0 46 | offset_bottom = 99.0 47 | 48 | [node name="Label" type="Label" parent="."] 49 | layout_mode = 0 50 | offset_left = 75.0 51 | offset_top = 70.0 52 | offset_right = 122.0 53 | offset_bottom = 96.0 54 | text = "Name" 55 | 56 | [node name="ServerBrowser" type="Control" parent="."] 57 | anchors_preset = 0 58 | offset_right = 40.0 59 | offset_bottom = 40.0 60 | script = ExtResource("2_njv3o") 61 | serverInfo = ExtResource("3_jpahl") 62 | 63 | [node name="BroadcastTimer" type="Timer" parent="ServerBrowser"] 64 | 65 | [node name="Label2" type="Label" parent="ServerBrowser"] 66 | layout_mode = 0 67 | offset_left = 901.0 68 | offset_top = 15.0 69 | offset_right = 1148.0 70 | offset_bottom = 67.0 71 | text = "Bound To 72 | Listen Port: " 73 | 74 | [node name="Panel" type="Panel" parent="ServerBrowser"] 75 | layout_mode = 0 76 | offset_left = 44.0 77 | offset_top = 248.0 78 | offset_right = 687.0 79 | offset_bottom = 580.0 80 | 81 | [node name="ServerInfo2" type="HBoxContainer" parent="ServerBrowser/Panel"] 82 | layout_mode = 2 83 | offset_top = 1.0 84 | offset_right = 643.0 85 | offset_bottom = 51.0 86 | 87 | [node name="Name" type="Label" parent="ServerBrowser/Panel/ServerInfo2"] 88 | layout_mode = 2 89 | size_flags_horizontal = 3 90 | text = "Name" 91 | 92 | [node name="Ip" type="Label" parent="ServerBrowser/Panel/ServerInfo2"] 93 | layout_mode = 2 94 | size_flags_horizontal = 3 95 | text = "IP" 96 | 97 | [node name="PlayerCount" type="Label" parent="ServerBrowser/Panel/ServerInfo2"] 98 | layout_mode = 2 99 | size_flags_horizontal = 3 100 | text = "Player Count" 101 | 102 | [node name="PlayerCount2" type="Label" parent="ServerBrowser/Panel/ServerInfo2"] 103 | layout_mode = 2 104 | size_flags_horizontal = 3 105 | text = "Join" 106 | 107 | [node name="VBoxContainer" type="VBoxContainer" parent="ServerBrowser/Panel"] 108 | layout_mode = 0 109 | offset_top = 53.0 110 | offset_right = 643.0 111 | offset_bottom = 329.0 112 | 113 | [node name="Button" type="Button" parent="."] 114 | layout_mode = 0 115 | offset_left = 898.0 116 | offset_top = 104.0 117 | offset_right = 1123.0 118 | offset_bottom = 173.0 119 | text = "test add player (host)" 120 | 121 | [connection signal="button_down" from="Host" to="." method="_on_host_button_down"] 122 | [connection signal="button_down" from="Join" to="." method="_on_join_button_down"] 123 | [connection signal="button_down" from="StartGame" to="." method="_on_start_game_button_down"] 124 | [connection signal="timeout" from="ServerBrowser/BroadcastTimer" to="ServerBrowser" method="_on_broadcast_timer_timeout"] 125 | [connection signal="button_down" from="Button" to="." method="_on_button_button_down"] 126 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/parallax_background_layer_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finepointcgi/WebRTC-with-Godot-Tutorial/77f6a99bbd832dd604da2bb8e92cfd33435dba6b/Multiplayer Tutorial Source Files/parallax_background_layer_6.png -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/parallax_background_layer_6.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://chlnt56mtnfqo" 6 | path="res://.godot/imported/parallax_background_layer_6.png-78b97f9b9fecf70f03e072c39bd72404.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Multiplayer Tutorial Source Files/parallax_background_layer_6.png" 14 | dest_files=["res://.godot/imported/parallax_background_layer_6.png-78b97f9b9fecf70f03e072c39bd72404.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/player.gd: -------------------------------------------------------------------------------- 1 | extends CharacterBody2D 2 | 3 | 4 | const SPEED = 300.0 5 | const JUMP_VELOCITY = -400.0 6 | # Get the gravity from the project settings to be synced with RigidBody nodes. 7 | var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") 8 | var syncPos = Vector2(0,0) 9 | var syncRot = 0 10 | @export var bullet :PackedScene 11 | 12 | func _ready(): 13 | $MultiplayerSynchronizer.set_multiplayer_authority(str(name).to_int()) 14 | 15 | func _physics_process(delta): 16 | if $MultiplayerSynchronizer.get_multiplayer_authority() == multiplayer.get_unique_id(): 17 | # Add the gravity. 18 | if not is_on_floor(): 19 | velocity.y += gravity * delta 20 | 21 | $GunRotation.look_at(get_viewport().get_mouse_position()) 22 | # Handle Jump. 23 | if Input.is_action_just_pressed("ui_accept") and is_on_floor(): 24 | velocity.y = JUMP_VELOCITY 25 | 26 | syncPos = global_position 27 | syncRot = rotation_degrees 28 | if Input.is_action_just_pressed("Fire"): 29 | fire.rpc() 30 | # Get the input direction and handle the movement/deceleration. 31 | # As good practice, you should replace UI actions with custom gameplay actions. 32 | var direction = Input.get_axis("ui_left", "ui_right") 33 | if direction: 34 | velocity.x = direction * SPEED 35 | else: 36 | velocity.x = move_toward(velocity.x, 0, SPEED) 37 | 38 | move_and_slide() 39 | else: 40 | global_position = global_position.lerp(syncPos, .5) 41 | rotation_degrees = lerpf(rotation_degrees, syncRot, .5) 42 | 43 | @rpc("any_peer","call_local") 44 | func fire(): 45 | var b = bullet.instantiate() 46 | b.global_position = $GunRotation/BulletSpawn.global_position 47 | b.rotation_degrees = $GunRotation.rotation_degrees 48 | get_tree().root.add_child(b) 49 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/player.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=20 format=3 uid="uid://cwld7ti0ms68j"] 2 | 3 | [ext_resource type="Script" path="res://Multiplayer Tutorial Source Files/player.gd" id="1_3us0m"] 4 | [ext_resource type="Texture2D" uid="uid://dld54qw3mao0w" path="res://Multiplayer Tutorial Source Files/Main Character - Male - Full spritesheet - No Guide.png" id="1_grirq"] 5 | [ext_resource type="Texture2D" uid="uid://tcgb3bjp6hyi" path="res://Multiplayer Tutorial Source Files/Famas.png" id="2_8kqsh"] 6 | [ext_resource type="PackedScene" uid="uid://lviwd7iyvso6" path="res://Multiplayer Tutorial Source Files/Bullet.tscn" id="2_gobh3"] 7 | 8 | [sub_resource type="AtlasTexture" id="AtlasTexture_wskdl"] 9 | atlas = ExtResource("1_grirq") 10 | region = Rect2(0, 0, 32, 32) 11 | 12 | [sub_resource type="AtlasTexture" id="AtlasTexture_snm0b"] 13 | atlas = ExtResource("1_grirq") 14 | region = Rect2(32, 0, 32, 32) 15 | 16 | [sub_resource type="AtlasTexture" id="AtlasTexture_fjhv6"] 17 | atlas = ExtResource("1_grirq") 18 | region = Rect2(64, 0, 32, 32) 19 | 20 | [sub_resource type="AtlasTexture" id="AtlasTexture_bkdw0"] 21 | atlas = ExtResource("1_grirq") 22 | region = Rect2(96, 0, 32, 32) 23 | 24 | [sub_resource type="AtlasTexture" id="AtlasTexture_4q5n3"] 25 | atlas = ExtResource("1_grirq") 26 | region = Rect2(128, 0, 32, 32) 27 | 28 | [sub_resource type="AtlasTexture" id="AtlasTexture_ow2xj"] 29 | atlas = ExtResource("1_grirq") 30 | region = Rect2(160, 0, 32, 32) 31 | 32 | [sub_resource type="AtlasTexture" id="AtlasTexture_h2r2y"] 33 | atlas = ExtResource("1_grirq") 34 | region = Rect2(0, 1, 32, 32) 35 | 36 | [sub_resource type="AtlasTexture" id="AtlasTexture_kurpv"] 37 | atlas = ExtResource("1_grirq") 38 | region = Rect2(32, 1, 32, 32) 39 | 40 | [sub_resource type="AtlasTexture" id="AtlasTexture_idhmh"] 41 | atlas = ExtResource("1_grirq") 42 | region = Rect2(64, 1, 32, 32) 43 | 44 | [sub_resource type="AtlasTexture" id="AtlasTexture_5d645"] 45 | atlas = ExtResource("1_grirq") 46 | region = Rect2(96, 1, 32, 32) 47 | 48 | [sub_resource type="AtlasTexture" id="AtlasTexture_nxjxb"] 49 | atlas = ExtResource("1_grirq") 50 | region = Rect2(128, 1, 32, 32) 51 | 52 | [sub_resource type="AtlasTexture" id="AtlasTexture_b0bfu"] 53 | atlas = ExtResource("1_grirq") 54 | region = Rect2(160, 1, 32, 32) 55 | 56 | [sub_resource type="SpriteFrames" id="SpriteFrames_l6rhg"] 57 | animations = [{ 58 | "frames": [{ 59 | "duration": 1.0, 60 | "texture": SubResource("AtlasTexture_wskdl") 61 | }, { 62 | "duration": 1.0, 63 | "texture": SubResource("AtlasTexture_snm0b") 64 | }, { 65 | "duration": 1.0, 66 | "texture": SubResource("AtlasTexture_fjhv6") 67 | }, { 68 | "duration": 1.0, 69 | "texture": SubResource("AtlasTexture_bkdw0") 70 | }, { 71 | "duration": 1.0, 72 | "texture": SubResource("AtlasTexture_4q5n3") 73 | }, { 74 | "duration": 1.0, 75 | "texture": SubResource("AtlasTexture_ow2xj") 76 | }], 77 | "loop": true, 78 | "name": &"Run", 79 | "speed": 10.0 80 | }, { 81 | "frames": [{ 82 | "duration": 1.0, 83 | "texture": SubResource("AtlasTexture_h2r2y") 84 | }, { 85 | "duration": 1.0, 86 | "texture": SubResource("AtlasTexture_kurpv") 87 | }, { 88 | "duration": 1.0, 89 | "texture": SubResource("AtlasTexture_idhmh") 90 | }, { 91 | "duration": 1.0, 92 | "texture": SubResource("AtlasTexture_5d645") 93 | }, { 94 | "duration": 1.0, 95 | "texture": SubResource("AtlasTexture_nxjxb") 96 | }, { 97 | "duration": 1.0, 98 | "texture": SubResource("AtlasTexture_b0bfu") 99 | }], 100 | "loop": true, 101 | "name": &"default", 102 | "speed": 5.0 103 | }] 104 | 105 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_m1yx7"] 106 | size = Vector2(32, 40) 107 | 108 | [sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_c85fd"] 109 | properties/0/path = NodePath(".:position") 110 | properties/0/spawn = false 111 | properties/0/sync = false 112 | properties/0/watch = false 113 | properties/1/path = NodePath("GunRotation:rotation") 114 | properties/1/spawn = true 115 | properties/1/sync = true 116 | properties/1/watch = false 117 | properties/2/path = NodePath(".:syncPos") 118 | properties/2/spawn = true 119 | properties/2/sync = true 120 | properties/2/watch = false 121 | properties/3/path = NodePath(".:syncRot") 122 | properties/3/spawn = true 123 | properties/3/sync = true 124 | properties/3/watch = false 125 | 126 | [node name="Player" type="CharacterBody2D" groups=["Player"]] 127 | script = ExtResource("1_3us0m") 128 | bullet = ExtResource("2_gobh3") 129 | 130 | [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] 131 | texture_filter = 1 132 | position = Vector2(-3, -35) 133 | scale = Vector2(2.1875, 2.1875) 134 | sprite_frames = SubResource("SpriteFrames_l6rhg") 135 | animation = &"Run" 136 | flip_h = true 137 | 138 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 139 | position = Vector2(-3, -20) 140 | shape = SubResource("RectangleShape2D_m1yx7") 141 | 142 | [node name="GunRotation" type="Node2D" parent="."] 143 | position = Vector2(-2, -20) 144 | 145 | [node name="Famas" type="Sprite2D" parent="GunRotation"] 146 | texture_filter = 1 147 | position = Vector2(36, 1) 148 | scale = Vector2(0.432292, 0.432292) 149 | texture = ExtResource("2_8kqsh") 150 | 151 | [node name="BulletSpawn" type="Node2D" parent="GunRotation"] 152 | position = Vector2(53, 0) 153 | 154 | [node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."] 155 | replication_interval = 0.1 156 | delta_interval = 0.1 157 | replication_config = SubResource("SceneReplicationConfig_c85fd") 158 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/server_info.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://dpqlhqyadbpvs"] 2 | 3 | [ext_resource type="Script" path="res://Multiplayer Tutorial Source Files/ServerInfo.gd" id="1_7sw04"] 4 | 5 | [node name="ServerInfo" type="HBoxContainer"] 6 | script = ExtResource("1_7sw04") 7 | 8 | [node name="Name" type="Label" parent="."] 9 | layout_mode = 2 10 | size_flags_horizontal = 3 11 | text = "test label" 12 | 13 | [node name="Ip" type="Label" parent="."] 14 | layout_mode = 2 15 | size_flags_horizontal = 3 16 | text = "192.168.1.111" 17 | 18 | [node name="PlayerCount" type="Label" parent="."] 19 | layout_mode = 2 20 | size_flags_horizontal = 3 21 | text = "5" 22 | 23 | [node name="Button" type="Button" parent="."] 24 | layout_mode = 2 25 | size_flags_horizontal = 3 26 | text = "Join" 27 | 28 | [connection signal="button_down" from="Button" to="." method="_on_button_button_down"] 29 | -------------------------------------------------------------------------------- /Multiplayer Tutorial Source Files/testScene.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=12 format=3 uid="uid://bt13jko8i5tec"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://bh4xilvgu3miq" path="res://icon.svg" id="1_0m6ke"] 4 | [ext_resource type="Texture2D" uid="uid://chlnt56mtnfqo" path="res://parallax_background_layer_6.png" id="1_07yi8"] 5 | [ext_resource type="Script" path="res:///Multiplayer Tutorial Source Files/SceneManager.gd" id="1_br64h"] 6 | [ext_resource type="PackedScene" uid="uid://cwld7ti0ms68j" path="res://player.tscn" id="2_7bveh"] 7 | [ext_resource type="Texture2D" uid="uid://cg5nd8583ee0n" path="res://building_05.png" id="2_ncww1"] 8 | [ext_resource type="Texture2D" uid="uid://6r0yoxgn80ir" path="res://main_tileset.png" id="3_0df68"] 9 | [ext_resource type="Texture2D" uid="uid://b6y0w06xobc7d" path="res://building_04.png" id="3_vfe3b"] 10 | [ext_resource type="Texture2D" uid="uid://b4vq4xgturgu4" path="res://building_02.png" id="4_ds3ar"] 11 | 12 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_bsyir"] 13 | size = Vector2(785, 120) 14 | 15 | [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_awss8"] 16 | texture = ExtResource("3_0df68") 17 | 1:1/0 = 0 18 | 2:1/0 = 0 19 | 3:1/0 = 0 20 | 5:1/0 = 0 21 | 6:1/0 = 0 22 | 7:1/0 = 0 23 | 9:1/0 = 0 24 | 12:1/0 = 0 25 | 13:1/0 = 0 26 | 14:1/0 = 0 27 | 15:1/0 = 0 28 | 16:1/0 = 0 29 | 18:1/0 = 0 30 | 19:1/0 = 0 31 | 20:1/0 = 0 32 | 21:1/0 = 0 33 | 22:1/0 = 0 34 | 23:1/0 = 0 35 | 24:1/0 = 0 36 | 25:1/0 = 0 37 | 26:1/0 = 0 38 | 1:2/0 = 0 39 | 3:2/0 = 0 40 | 5:2/0 = 0 41 | 6:2/0 = 0 42 | 7:2/0 = 0 43 | 9:2/0 = 0 44 | 12:2/0 = 0 45 | 13:2/0 = 0 46 | 14:2/0 = 0 47 | 15:2/0 = 0 48 | 16:2/0 = 0 49 | 18:2/0 = 0 50 | 19:2/0 = 0 51 | 20:2/0 = 0 52 | 21:2/0 = 0 53 | 22:2/0 = 0 54 | 23:2/0 = 0 55 | 24:2/0 = 0 56 | 25:2/0 = 0 57 | 26:2/0 = 0 58 | 1:3/0 = 0 59 | 2:3/0 = 0 60 | 3:3/0 = 0 61 | 5:3/0 = 0 62 | 6:3/0 = 0 63 | 7:3/0 = 0 64 | 9:3/0 = 0 65 | 12:3/0 = 0 66 | 13:3/0 = 0 67 | 14:3/0 = 0 68 | 15:3/0 = 0 69 | 16:3/0 = 0 70 | 18:3/0 = 0 71 | 19:3/0 = 0 72 | 20:3/0 = 0 73 | 21:3/0 = 0 74 | 22:3/0 = 0 75 | 23:3/0 = 0 76 | 24:3/0 = 0 77 | 25:3/0 = 0 78 | 26:3/0 = 0 79 | 9:4/0 = 0 80 | 12:4/0 = 0 81 | 13:4/0 = 0 82 | 14:4/0 = 0 83 | 15:4/0 = 0 84 | 16:4/0 = 0 85 | 18:4/0 = 0 86 | 19:4/0 = 0 87 | 20:4/0 = 0 88 | 21:4/0 = 0 89 | 22:4/0 = 0 90 | 23:4/0 = 0 91 | 24:4/0 = 0 92 | 25:4/0 = 0 93 | 26:4/0 = 0 94 | 1:5/0 = 0 95 | 2:5/0 = 0 96 | 3:5/0 = 0 97 | 5:5/0 = 0 98 | 6:5/0 = 0 99 | 7:5/0 = 0 100 | 8:5/0 = 0 101 | 9:5/0 = 0 102 | 10:5/0 = 0 103 | 12:5/0 = 0 104 | 13:5/0 = 0 105 | 14:5/0 = 0 106 | 15:5/0 = 0 107 | 16:5/0 = 0 108 | 18:5/0 = 0 109 | 19:5/0 = 0 110 | 20:5/0 = 0 111 | 21:5/0 = 0 112 | 22:5/0 = 0 113 | 23:5/0 = 0 114 | 24:5/0 = 0 115 | 25:5/0 = 0 116 | 26:5/0 = 0 117 | 5:6/0 = 0 118 | 7:6/0 = 0 119 | 8:6/0 = 0 120 | 9:6/0 = 0 121 | 10:6/0 = 0 122 | 12:6/0 = 0 123 | 13:6/0 = 0 124 | 14:6/0 = 0 125 | 15:6/0 = 0 126 | 16:6/0 = 0 127 | 18:6/0 = 0 128 | 19:6/0 = 0 129 | 20:6/0 = 0 130 | 21:6/0 = 0 131 | 22:6/0 = 0 132 | 23:6/0 = 0 133 | 24:6/0 = 0 134 | 25:6/0 = 0 135 | 26:6/0 = 0 136 | 1:7/0 = 0 137 | 2:7/0 = 0 138 | 3:7/0 = 0 139 | 5:7/0 = 0 140 | 6:7/0 = 0 141 | 7:7/0 = 0 142 | 8:7/0 = 0 143 | 9:7/0 = 0 144 | 10:7/0 = 0 145 | 12:7/0 = 0 146 | 13:7/0 = 0 147 | 14:7/0 = 0 148 | 15:7/0 = 0 149 | 16:7/0 = 0 150 | 18:7/0 = 0 151 | 19:7/0 = 0 152 | 20:7/0 = 0 153 | 21:7/0 = 0 154 | 22:7/0 = 0 155 | 23:7/0 = 0 156 | 24:7/0 = 0 157 | 25:7/0 = 0 158 | 26:7/0 = 0 159 | 8:8/0 = 0 160 | 9:8/0 = 0 161 | 10:8/0 = 0 162 | 12:8/0 = 0 163 | 13:8/0 = 0 164 | 14:8/0 = 0 165 | 15:8/0 = 0 166 | 16:8/0 = 0 167 | 18:8/0 = 0 168 | 19:8/0 = 0 169 | 20:8/0 = 0 170 | 21:8/0 = 0 171 | 22:8/0 = 0 172 | 23:8/0 = 0 173 | 24:8/0 = 0 174 | 25:8/0 = 0 175 | 26:8/0 = 0 176 | 1:9/0 = 0 177 | 2:9/0 = 0 178 | 3:9/0 = 0 179 | 5:9/0 = 0 180 | 6:9/0 = 0 181 | 7:9/0 = 0 182 | 8:9/0 = 0 183 | 9:9/0 = 0 184 | 10:9/0 = 0 185 | 12:9/0 = 0 186 | 13:9/0 = 0 187 | 14:9/0 = 0 188 | 15:9/0 = 0 189 | 16:9/0 = 0 190 | 18:9/0 = 0 191 | 19:9/0 = 0 192 | 20:9/0 = 0 193 | 21:9/0 = 0 194 | 22:9/0 = 0 195 | 23:9/0 = 0 196 | 24:9/0 = 0 197 | 25:9/0 = 0 198 | 26:9/0 = 0 199 | 1:10/0 = 0 200 | 3:10/0 = 0 201 | 5:10/0 = 0 202 | 6:10/0 = 0 203 | 7:10/0 = 0 204 | 8:10/0 = 0 205 | 9:10/0 = 0 206 | 10:10/0 = 0 207 | 12:10/0 = 0 208 | 13:10/0 = 0 209 | 14:10/0 = 0 210 | 15:10/0 = 0 211 | 16:10/0 = 0 212 | 18:10/0 = 0 213 | 19:10/0 = 0 214 | 20:10/0 = 0 215 | 21:10/0 = 0 216 | 22:10/0 = 0 217 | 23:10/0 = 0 218 | 24:10/0 = 0 219 | 25:10/0 = 0 220 | 26:10/0 = 0 221 | 8:11/0 = 0 222 | 9:11/0 = 0 223 | 10:11/0 = 0 224 | 12:11/0 = 0 225 | 13:11/0 = 0 226 | 14:11/0 = 0 227 | 15:11/0 = 0 228 | 16:11/0 = 0 229 | 18:11/0 = 0 230 | 19:11/0 = 0 231 | 20:11/0 = 0 232 | 21:11/0 = 0 233 | 22:11/0 = 0 234 | 23:11/0 = 0 235 | 24:11/0 = 0 236 | 25:11/0 = 0 237 | 26:11/0 = 0 238 | 1:12/0 = 0 239 | 2:12/0 = 0 240 | 3:12/0 = 0 241 | 5:12/0 = 0 242 | 6:12/0 = 0 243 | 7:12/0 = 0 244 | 8:12/0 = 0 245 | 9:12/0 = 0 246 | 10:12/0 = 0 247 | 12:12/0 = 0 248 | 13:12/0 = 0 249 | 14:12/0 = 0 250 | 15:12/0 = 0 251 | 16:12/0 = 0 252 | 18:12/0 = 0 253 | 19:12/0 = 0 254 | 20:12/0 = 0 255 | 21:12/0 = 0 256 | 22:12/0 = 0 257 | 23:12/0 = 0 258 | 24:12/0 = 0 259 | 25:12/0 = 0 260 | 26:12/0 = 0 261 | 1:13/0 = 0 262 | 3:13/0 = 0 263 | 8:13/0 = 0 264 | 9:13/0 = 0 265 | 10:13/0 = 0 266 | 12:13/0 = 0 267 | 13:13/0 = 0 268 | 14:13/0 = 0 269 | 15:13/0 = 0 270 | 16:13/0 = 0 271 | 18:13/0 = 0 272 | 19:13/0 = 0 273 | 20:13/0 = 0 274 | 21:13/0 = 0 275 | 22:13/0 = 0 276 | 23:13/0 = 0 277 | 24:13/0 = 0 278 | 25:13/0 = 0 279 | 26:13/0 = 0 280 | 1:14/0 = 0 281 | 2:14/0 = 0 282 | 3:14/0 = 0 283 | 4:14/0 = 0 284 | 5:14/0 = 0 285 | 6:14/0 = 0 286 | 7:14/0 = 0 287 | 12:14/0 = 0 288 | 13:14/0 = 0 289 | 14:14/0 = 0 290 | 15:14/0 = 0 291 | 16:14/0 = 0 292 | 18:14/0 = 0 293 | 19:14/0 = 0 294 | 20:14/0 = 0 295 | 21:14/0 = 0 296 | 22:14/0 = 0 297 | 23:14/0 = 0 298 | 24:14/0 = 0 299 | 25:14/0 = 0 300 | 26:14/0 = 0 301 | 1:15/0 = 0 302 | 3:15/0 = 0 303 | 4:15/0 = 0 304 | 12:15/0 = 0 305 | 13:15/0 = 0 306 | 14:15/0 = 0 307 | 15:15/0 = 0 308 | 16:15/0 = 0 309 | 18:15/0 = 0 310 | 19:15/0 = 0 311 | 20:15/0 = 0 312 | 21:15/0 = 0 313 | 22:15/0 = 0 314 | 23:15/0 = 0 315 | 24:15/0 = 0 316 | 25:15/0 = 0 317 | 26:15/0 = 0 318 | 1:16/0 = 0 319 | 3:16/0 = 0 320 | 4:16/0 = 0 321 | 12:16/0 = 0 322 | 13:16/0 = 0 323 | 14:16/0 = 0 324 | 15:16/0 = 0 325 | 16:16/0 = 0 326 | 18:16/0 = 0 327 | 19:16/0 = 0 328 | 20:16/0 = 0 329 | 21:16/0 = 0 330 | 22:16/0 = 0 331 | 23:16/0 = 0 332 | 24:16/0 = 0 333 | 25:16/0 = 0 334 | 26:16/0 = 0 335 | 336 | [sub_resource type="TileSet" id="TileSet_wtlbr"] 337 | sources/0 = SubResource("TileSetAtlasSource_awss8") 338 | 339 | [node name="Node2D" type="Node2D"] 340 | script = ExtResource("1_br64h") 341 | PlayerScene = ExtResource("2_7bveh") 342 | 343 | [node name="ParallaxBackgroundLayer6" type="Sprite2D" parent="."] 344 | texture_filter = 1 345 | position = Vector2(575, 324) 346 | scale = Vector2(2.25781, 2.24306) 347 | texture = ExtResource("1_07yi8") 348 | 349 | [node name="Building05" type="Sprite2D" parent="."] 350 | texture_filter = 1 351 | position = Vector2(266, 346) 352 | scale = Vector2(1.90625, 1.90625) 353 | texture = ExtResource("2_ncww1") 354 | 355 | [node name="Building04" type="Sprite2D" parent="Building05"] 356 | texture_filter = 1 357 | position = Vector2(123.803, 32.2623) 358 | texture = ExtResource("3_vfe3b") 359 | 360 | [node name="Building02" type="Sprite2D" parent="Building05"] 361 | texture_filter = 1 362 | position = Vector2(250.754, 38.8524) 363 | scale = Vector2(1.0123, 1.0123) 364 | texture = ExtResource("4_ds3ar") 365 | 366 | [node name="StaticBody2D" type="StaticBody2D" parent="."] 367 | 368 | [node name="Sprite2D" type="Sprite2D" parent="StaticBody2D"] 369 | visible = false 370 | position = Vector2(539, 582) 371 | scale = Vector2(6, 0.2) 372 | texture = ExtResource("1_0m6ke") 373 | 374 | [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] 375 | position = Vector2(537.5, 622) 376 | shape = SubResource("RectangleShape2D_bsyir") 377 | 378 | [node name="TileMap" type="TileMap" parent="."] 379 | tile_set = SubResource("TileSet_wtlbr") 380 | format = 2 381 | layer_0/tile_data = PackedInt32Array(2293769, 393216, 9, 2293770, 393216, 9, 2293771, 393216, 9, 2293772, 393216, 9, 2293773, 393216, 9, 2293774, 393216, 9, 2293775, 393216, 9, 2293776, 393216, 9, 2293777, 393216, 9, 2293778, 393216, 9, 2293779, 393216, 9, 2293780, 393216, 9, 2293781, 393216, 9, 2293782, 393216, 9, 2293783, 393216, 9, 2293784, 393216, 9, 2293785, 393216, 9, 2293786, 393216, 9, 2293787, 393216, 9, 2293788, 393216, 9, 2293789, 393216, 9, 2293790, 393216, 9, 2293791, 393216, 9, 2293792, 393216, 9, 2293793, 393216, 9, 2293794, 393216, 9, 2293795, 393216, 9, 2293796, 393216, 9, 2293797, 393216, 9, 2293798, 393216, 9, 2293799, 393216, 9, 2293800, 393216, 9, 2293801, 393216, 9, 2293802, 393216, 9, 2293803, 393216, 9, 2293804, 393216, 9, 2293805, 393216, 9, 2293806, 393216, 9, 2293807, 393216, 9, 2293808, 393216, 9, 2293809, 393216, 9, 2293810, 393216, 9, 2293811, 393216, 9, 2293812, 393216, 9, 2293813, 393216, 9, 2293814, 393216, 9, 2293815, 393216, 9, 2293816, 393216, 9, 2293817, 393216, 9, 2359306, 589824, 9, 2359307, 589824, 9, 2359308, 589824, 9, 2359309, 589824, 9, 2359310, 589824, 9, 2359311, 589824, 9, 2359312, 589824, 9, 2359313, 589824, 9, 2359314, 589824, 9, 2359315, 589824, 9, 2359316, 589824, 9, 2359317, 589824, 9, 2359318, 589824, 9, 2359319, 589824, 9, 2359320, 589824, 9, 2359321, 589824, 9, 2359322, 589824, 9, 2359323, 589824, 9, 2359324, 589824, 9, 2359325, 589824, 9, 2359326, 589824, 9, 2359327, 589824, 9, 2359328, 589824, 9, 2359329, 589824, 9, 2359330, 589824, 9, 2359331, 589824, 9, 2359332, 589824, 9, 2359333, 589824, 9, 2424870, 589824, 9, 2424871, 589824, 9, 2424872, 589824, 9, 2424873, 589824, 9, 2424874, 589824, 9, 2424875, 589824, 9, 2424876, 589824, 9, 2424877, 589824, 9, 2424878, 589824, 9, 2424879, 589824, 9, 2359343, 589824, 9, 2359344, 589824, 9, 2359345, 589824, 9, 2359346, 589824, 9, 2359347, 589824, 9, 2359348, 589824, 9, 2359349, 589824, 9, 2359350, 589824, 9, 2359351, 589824, 9, 2359352, 589824, 9, 2359342, 589824, 9, 2359341, 589824, 9, 2359340, 589824, 9, 2359339, 589824, 9, 2359338, 589824, 9, 2359337, 589824, 9, 2359336, 589824, 9, 2359335, 589824, 9, 2359334, 589824, 9, 2424869, 589824, 9, 2424868, 589824, 9, 2424867, 589824, 9, 2424866, 589824, 9, 2424865, 589824, 9, 2424864, 589824, 9, 2424863, 589824, 9, 2424862, 589824, 9, 2424861, 589824, 9, 2424860, 589824, 9, 2424859, 589824, 9, 2424858, 589824, 9, 2424857, 589824, 9, 2424856, 589824, 9, 2424855, 589824, 9, 2424854, 589824, 9, 2424853, 589824, 9, 2424852, 589824, 9, 2424851, 589824, 9, 2424850, 589824, 9, 2424849, 589824, 9, 2424848, 589824, 9, 2424847, 589824, 9, 2424846, 589824, 9, 2424845, 589824, 9, 2424844, 589824, 9, 2424843, 589824, 9, 2424842, 589824, 9, 2490378, 589824, 9, 2555914, 589824, 9, 2555915, 589824, 9, 2555916, 589824, 9, 2555917, 589824, 9, 2555918, 589824, 9, 2555919, 589824, 9, 2555920, 589824, 9, 2555921, 589824, 9, 2555922, 589824, 9, 2555923, 589824, 9, 2621460, 589824, 9, 2621461, 589824, 9, 2621462, 589824, 9, 2621463, 589824, 9, 2621464, 589824, 9, 2621465, 589824, 9, 2621466, 589824, 9, 2621467, 589824, 9, 2621468, 589824, 9, 2621469, 589824, 9, 2621470, 589824, 9, 2621471, 589824, 9, 2621472, 589824, 9, 2621473, 589824, 9, 2621474, 589824, 9, 2621475, 589824, 9, 2621476, 589824, 9, 2555941, 589824, 9, 2555942, 589824, 9, 2555943, 589824, 9, 2555944, 589824, 9, 2555945, 589824, 9, 2555946, 589824, 9, 2555947, 589824, 9, 2555948, 589824, 9, 2555949, 589824, 9, 2555950, 589824, 9, 2555951, 589824, 9, 2490416, 589824, 9, 2490417, 589824, 9, 2490418, 589824, 9, 2490419, 589824, 9, 2490420, 589824, 9, 2490421, 589824, 9, 2490422, 589824, 9, 2490423, 589824, 9, 2424887, 589824, 9, 2424884, 589824, 9, 2424883, 589824, 9, 2424882, 589824, 9, 2424881, 589824, 9, 2424880, 589824, 9, 2424885, 589824, 9, 2424886, 589824, 9, 2424888, 589824, 9, 2424889, 655360, 9, 2555955, 589824, 9, 2555954, 589824, 9, 2555953, 589824, 9, 2555952, 589824, 9, 2621485, 589824, 9, 2621484, 589824, 9, 2621482, 589824, 9, 2621481, 589824, 9, 2621480, 589824, 9, 2621479, 589824, 9, 2621478, 589824, 9, 2621483, 589824, 9, 2687013, 589824, 9, 2687012, 589824, 9, 2687011, 589824, 9, 2687010, 589824, 9, 2687009, 589824, 9, 2687008, 589824, 9, 2621477, 589824, 9, 2752544, 589824, 10, 2752545, 589824, 10, 2752546, 589824, 10, 2752547, 589824, 10, 2752548, 589824, 10, 2752549, 589824, 10, 2752550, 589824, 10, 2752551, 589824, 10, 2752552, 589824, 10, 2752553, 589824, 10, 2752554, 589824, 10, 2752555, 589824, 10, 2752556, 589824, 10, 2752557, 589824, 10, 2752558, 589824, 10, 2752559, 589824, 10, 2752560, 589824, 10, 2752561, 589824, 10, 2752562, 589824, 10, 2687027, 589824, 9, 2687028, 589824, 9, 2687029, 589824, 9, 2687030, 589824, 9, 2687031, 589824, 9, 2752563, 589824, 10, 2752564, 589824, 10, 2752565, 589824, 10, 2752566, 589824, 10, 2752567, 589824, 10, 2752568, 589824, 10, 2752569, 655360, 10, 2687033, 655360, 9, 2621497, 655360, 9, 2555961, 655360, 9, 2490425, 655360, 9, 2359353, 655360, 9, 2359305, 524288, 9, 2424841, 524288, 9, 2490377, 524288, 9, 2555913, 524288, 9, 2621449, 524288, 9, 2686985, 524288, 9, 2752543, 589824, 10, 2752542, 589824, 10, 2752541, 589824, 10, 2752540, 589824, 10, 2752539, 589824, 10, 2752538, 589824, 10, 2752537, 589824, 10, 2752536, 589824, 10, 2752535, 589824, 10, 2752534, 589824, 10, 2752533, 589824, 10, 2752532, 589824, 10, 2752531, 589824, 10, 2686994, 589824, 9, 2686993, 589824, 9, 2686992, 589824, 9, 2686991, 589824, 9, 2686990, 589824, 9, 2752526, 589824, 10, 2752525, 589824, 10, 2752530, 589824, 10, 2752529, 589824, 10, 2752527, 589824, 10, 2752528, 589824, 10, 2752524, 589824, 10, 2752523, 589824, 10, 2752522, 589824, 10, 2752521, 524288, 10, 2621451, 589824, 9, 2621450, 589824, 9, 2686986, 589824, 9, 2686987, 589824, 9, 2686988, 589824, 9, 2621452, 589824, 9, 2621453, 589824, 9, 2686989, 589824, 9, 2621454, 589824, 9, 2621455, 589824, 9, 2621456, 589824, 9, 2621457, 589824, 9, 2621458, 589824, 9, 2621459, 589824, 9, 2686995, 589824, 9, 2686996, 589824, 9, 2686997, 589824, 9, 2686998, 589824, 9, 2686999, 589824, 9, 2687000, 589824, 9, 2687001, 589824, 9, 2687002, 589824, 9, 2687003, 589824, 9, 2687004, 589824, 9, 2687005, 589824, 9, 2687006, 589824, 9, 2687007, 589824, 9, 2490390, 589824, 9, 2490389, 589824, 9, 2490388, 589824, 9, 2490387, 589824, 9, 2490386, 589824, 9, 2490385, 589824, 9, 2490384, 589824, 9, 2490383, 589824, 9, 2490382, 589824, 9, 2490381, 589824, 9, 2490380, 589824, 9, 2490379, 589824, 9, 2555924, 589824, 9, 2555925, 589824, 9, 2555926, 589824, 9, 2555927, 589824, 9, 2490391, 589824, 9, 2490392, 589824, 9, 2555928, 589824, 9, 2555929, 589824, 9, 2490393, 589824, 9, 2490394, 589824, 9, 2555930, 589824, 9, 2555931, 589824, 9, 2490395, 589824, 9, 2490396, 589824, 9, 2555932, 589824, 9, 2555933, 589824, 9, 2490397, 589824, 9, 2490398, 589824, 9, 2555934, 589824, 9, 2555935, 589824, 9, 2490399, 589824, 9, 2490400, 589824, 9, 2555936, 589824, 9, 2555937, 589824, 9, 2490401, 589824, 9, 2490402, 589824, 9, 2555938, 589824, 9, 2555939, 589824, 9, 2490403, 589824, 9, 2490404, 589824, 9, 2555940, 589824, 9, 2490405, 589824, 9, 2490406, 589824, 9, 2490407, 589824, 9, 2490408, 589824, 9, 2490409, 589824, 9, 2490410, 589824, 9, 2490411, 589824, 9, 2490412, 589824, 9, 2490413, 589824, 9, 2490414, 589824, 9, 2490415, 589824, 9, 2687023, 589824, 9, 2621487, 589824, 9, 2621486, 589824, 9, 2687022, 589824, 9, 2687021, 589824, 9, 2687020, 589824, 9, 2687019, 589824, 9, 2687018, 589824, 9, 2687017, 589824, 9, 2687016, 589824, 9, 2687015, 589824, 9, 2687014, 589824, 9, 2621488, 589824, 9, 2687024, 589824, 9, 2687025, 589824, 9, 2621489, 589824, 9, 2621490, 589824, 9, 2687026, 589824, 9, 2621491, 589824, 9, 2621492, 589824, 9, 2555956, 589824, 9, 2555957, 589824, 9, 2621493, 589824, 9, 2621494, 589824, 9, 2555958, 589824, 9, 2555959, 589824, 9, 2621495, 589824, 9, 2621496, 589824, 9, 2555960, 589824, 9, 2490424, 589824, 9, 2687032, 589824, 9) 382 | 383 | [node name="SpawnLocations" type="Node2D" parent="."] 384 | 385 | [node name="0" type="Node2D" parent="SpawnLocations" groups=["PlayerSpawnPoint"]] 386 | position = Vector2(227, 486) 387 | 388 | [node name="1" type="Node2D" parent="SpawnLocations" groups=["PlayerSpawnPoint"]] 389 | position = Vector2(769, 486) 390 | -------------------------------------------------------------------------------- /icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bh4xilvgu3miq" 6 | path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.svg" 14 | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=5 10 | 11 | [application] 12 | 13 | config/name="WebRTC with Godot Tutorial" 14 | config/features=PackedStringArray("4.1", "Forward Plus") 15 | 16 | [autoload] 17 | 18 | GameManager="*res://Multiplayer Tutorial Source Files/GameManager.gd" 19 | 20 | [input] 21 | 22 | Fire={ 23 | "deadzone": 0.5, 24 | "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(135, 18),"global_position":Vector2(140, 70),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) 25 | ] 26 | } 27 | --------------------------------------------------------------------------------