## freeftf ## Copyright (C) 2024 Patrick_Pluto ## ## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License along with this program. If not, see . extends Node var settings = {"save_version" = 4, "fps_counter" = 1, "port" = 35000, "ip" = "127.0.0.1", "username" = "DefaultName"} var computers = 0 var players = 0 var map_name = "mansion" var is_running = false var frozen = 0 var dead = 0 var escaped = 0 var player_escaped = false var is_beast = false var character = preload("res://objects/player.tscn") # Server Variables var player_name var room_name var is_server = false var player_list = {} func _ready(): if FileAccess.file_exists("user://settings.json"): var temp = Load.loadJSON("user://settings.json") if !(temp is Dictionary) or settings["save_version"] != temp["save_version"]: Save.saveJSON("user://settings.json", settings) else: settings = temp else: Save.saveJSON("user://settings.json", settings) if OS.is_debug_build(): settings["fps_counter"] = 1 func freeze(): players -= 1 frozen += 1 func unfreeze(): players += 1 frozen -= 1 func died(): frozen -= 1 dead += 1 func has_escaped(): players -= 1 escaped += 1 func _process(_delta): if is_running and players <= 0: get_tree().change_scene_to_file("res://menus/result.tscn") Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) is_running = false func reset(): computers = 0 players = 0 is_running = false frozen = 0 dead = 0 escaped = 0 player_escaped = false is_beast = false player_name = null player_list = {} room_name = null is_server = false multiplayer.multiplayer_peer = Client.offline Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) func save_setting(setting_name, value): settings[setting_name] = value Save.saveJSON("user://settings.json", settings) print("saved") func apply_settings(): players = player_list.size() - 1 is_running = true func start_game(): get_tree().change_scene_to_file("res://maps/"+map_name+".tscn") while !get_tree().root.has_node("./"+map_name+"/"): await get_tree().create_timer(0.001).timeout var map = get_tree().root.get_node("./"+map_name+"/") var i = 0 for w in player_list: var player = character.instantiate() player.name = "player" + str(i) i += 1 player.position.z = -i*2.5 player.position.y = 1 map.add_child(player) if is_server: var random = randi() % player_list.size() for id in player_list: Client.rpc_id(id,"sync_beast",random) apply_settings() func player_hit(target, beast): target = get_tree().root.get_node("./"+map_name+"/"+target) beast = get_tree().root.get_node("./"+map_name+"/"+beast) if !target.is_frozen: target.captured(beast) beast.got_one(target) func sync_player(node_name, position, rotation): if get_tree().root.has_node("./"+map_name+"/"+node_name): var current_character = get_tree().root.get_node("./"+map_name+"/"+node_name) current_character.position = position current_character.rotation = rotation func sync_hammer(node_name, rotation): var current_character = get_tree().root.get_node("./"+map_name+"/"+node_name+"/hammer") current_character.rotation = rotation func sync_computers(node_name, current): var current_character = get_tree().root.get_node("./"+map_name+"/computers/"+node_name) current_character.current = current func sync_beast(player): while !get_tree().root.has_node("./"+map_name+"/player"+str(player)): await get_tree().create_timer(0.001).timeout var current_character = get_tree().root.get_node("./"+map_name+"/player"+str(player)) current_character.beast_init()