diff --git a/Godot/LICENSE b/Godot/LICENSE deleted file mode 100644 index bb9b409..0000000 --- a/Godot/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Peter DV - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Godot/addons/Todo_Manager/CONTRIBUTING.md b/Godot/addons/Todo_Manager/CONTRIBUTING.md deleted file mode 100644 index 5969b61..0000000 --- a/Godot/addons/Todo_Manager/CONTRIBUTING.md +++ /dev/null @@ -1,23 +0,0 @@ -## Contributing to TODO Manager -Firstly, thank you for being interested in contributing to the Godot TODO Manager plugin! -TODO Manager has benefitted greatly from enthusiastic users who have suggested new features, noticed bugs, and contributed code to the plugin. - -### Code Style Guide -For the sake of clarity, TODO Manager takes advantage of GDScripts optional static typing in most circumstances. -In particular, when declaring variables use colons to infer the type where possible: - -`todo := "#TODO"` - -If the type is not obvious then explicit typing is desirable: - -`items : PoolStringArray = todo.split()` - -Typed arguments and return values for functions are required: -``` -func example(name: String, amount: int) -> Array: - # code - return array_of_names -``` - -For more info on static typing in Godot please refer to the documentation. -https://docs.godotengine.org/en/stable/getting_started/scripting/gdscript/static_typing.html diff --git a/Godot/addons/Todo_Manager/ColourPicker.gd b/Godot/addons/Todo_Manager/ColourPicker.gd deleted file mode 100644 index 39a3f9a..0000000 --- a/Godot/addons/Todo_Manager/ColourPicker.gd +++ /dev/null @@ -1,17 +0,0 @@ -@tool -extends HBoxContainer - -var colour : Color -var title : String: - set = set_title -var index : int - -@onready var colour_picker := $TODOColourPickerButton - -func _ready() -> void: - $TODOColourPickerButton.color = colour - $Label.text = title - -func set_title(value: String) -> void: - title = value - $Label.text = value diff --git a/Godot/addons/Todo_Manager/Current.gd b/Godot/addons/Todo_Manager/Current.gd deleted file mode 100644 index d3961c9..0000000 --- a/Godot/addons/Todo_Manager/Current.gd +++ /dev/null @@ -1,44 +0,0 @@ -@tool -extends Panel - -signal tree_built # used for debugging - -const Todo := preload("res://addons/Todo_Manager/todo_class.gd") -const TodoItem := preload("res://addons/Todo_Manager/todoItem_class.gd") - -var _sort_alphabetical := true - -@onready var tree := $Tree as Tree - -func build_tree(todo_item : TodoItem, patterns : Array, cased_patterns : Array[String]) -> void: - tree.clear() - var root := tree.create_item() - root.set_text(0, "Scripts") - var script := tree.create_item(root) - script.set_text(0, todo_item.get_short_path() + " -------") - script.set_metadata(0, todo_item) - for todo in todo_item.todos: - var item := tree.create_item(script) - var content_header : String = todo.content - if "\n" in todo.content: - content_header = content_header.split("\n")[0] + "..." - item.set_text(0, "(%0) - %1".format([todo.line_number, content_header], "%_")) - item.set_tooltip_text(0, todo.content) - item.set_metadata(0, todo) - for i in range(0, len(cased_patterns)): - if cased_patterns[i] == todo.pattern: - item.set_custom_color(0, patterns[i][1]) - emit_signal("tree_built") - - -func sort_alphabetical(a, b) -> bool: - if a.script_path > b.script_path: - return true - else: - return false - -func sort_backwards(a, b) -> bool: - if a.script_path < b.script_path: - return true - else: - return false diff --git a/Godot/addons/Todo_Manager/Dock.gd b/Godot/addons/Todo_Manager/Dock.gd deleted file mode 100644 index c71b6b2..0000000 --- a/Godot/addons/Todo_Manager/Dock.gd +++ /dev/null @@ -1,297 +0,0 @@ -@tool -extends Control - -#signal tree_built # used for debugging -enum { CASE_INSENSITIVE, CASE_SENSITIVE } - -const Project := preload("res://addons/Todo_Manager/Project.gd") -const Current := preload("res://addons/Todo_Manager/Current.gd") - -const Todo := preload("res://addons/Todo_Manager/todo_class.gd") -const TodoItem := preload("res://addons/Todo_Manager/todoItem_class.gd") -const ColourPicker := preload("res://addons/Todo_Manager/UI/ColourPicker.tscn") -const Pattern := preload("res://addons/Todo_Manager/UI/Pattern.tscn") -const DEFAULT_PATTERNS := [["\\bTODO\\b", Color("96f1ad"), CASE_INSENSITIVE], ["\\bHACK\\b", Color("d5bc70"), CASE_INSENSITIVE], ["\\bFIXME\\b", Color("d57070"), CASE_INSENSITIVE]] -const DEFAULT_SCRIPT_COLOUR := Color("ccced3") -const DEFAULT_SCRIPT_NAME := false -const DEFAULT_SORT := true - -var plugin : EditorPlugin - -var todo_items : Array - -var script_colour := Color("ccced3") -var ignore_paths : Array[String] = [] -var full_path := false -var auto_refresh := true -var builtin_enabled := false -var _sort_alphabetical := true - -var patterns := [["\\bTODO\\b", Color("96f1ad"), CASE_INSENSITIVE], ["\\bHACK\\b", Color("d5bc70"), CASE_INSENSITIVE], ["\\bFIXME\\b", Color("d57070"), CASE_INSENSITIVE]] - - -@onready var tabs := $VBoxContainer/TabContainer as TabContainer -@onready var project := $VBoxContainer/TabContainer/Project as Project -@onready var current := $VBoxContainer/TabContainer/Current as Current -@onready var project_tree := $VBoxContainer/TabContainer/Project/Tree as Tree -@onready var current_tree := $VBoxContainer/TabContainer/Current/Tree as Tree -@onready var settings_panel := $VBoxContainer/TabContainer/Settings as Panel -@onready var colours_container := $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer3/Colours as VBoxContainer -@onready var pattern_container := $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Patterns as VBoxContainer -@onready var ignore_textbox := $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/IgnorePaths/TextEdit as LineEdit -@onready var auto_refresh_button := $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/RefreshCheckButton as CheckButton - -func _ready() -> void: - load_config() - populate_settings() - - -func build_tree() -> void: - if tabs: - match tabs.current_tab: - 0: - project.build_tree(todo_items, ignore_paths, patterns, plugin.cased_patterns, _sort_alphabetical, full_path) - create_config_file() - 1: - current.build_tree(get_active_script(), patterns, plugin.cased_patterns) - create_config_file() - 2: - pass - _: - pass - - -func get_active_script() -> TodoItem: - var current_script : Script = plugin.get_editor_interface().get_script_editor().get_current_script() - if current_script: - var script_path = current_script.resource_path - for todo_item in todo_items: - if todo_item.script_path == script_path: - return todo_item - - # nothing found - var todo_item := TodoItem.new(script_path, []) - return todo_item - else: - # not a script - var todo_item := TodoItem.new("res://Documentation", []) - return todo_item - - -func go_to_script(script_path: String, line_number : int = 0) -> void: - if plugin.get_editor_interface().get_editor_settings().get_setting("text_editor/external/use_external_editor"): - var exec_path = plugin.get_editor_interface().get_editor_settings().get_setting("text_editor/external/exec_path") - var args := get_exec_flags(exec_path, script_path, line_number) - OS.execute(exec_path, args) - else: - var script := load(script_path) - plugin.get_editor_interface().edit_resource(script) - plugin.get_editor_interface().get_script_editor().goto_line(line_number - 1) - -func get_exec_flags(editor_path : String, script_path : String, line_number : int) -> PackedStringArray: - var args : PackedStringArray - var script_global_path = ProjectSettings.globalize_path(script_path) - - if editor_path.ends_with("code.cmd") or editor_path.ends_with("code"): ## VS Code - args.append(ProjectSettings.globalize_path("res://")) - args.append("--goto") - args.append(script_global_path + ":" + str(line_number)) - - elif editor_path.ends_with("rider64.exe") or editor_path.ends_with("rider"): ## Rider - args.append("--line") - args.append(str(line_number)) - args.append(script_global_path) - - else: ## Atom / Sublime - args.append(script_global_path + ":" + str(line_number)) - - return args - -func sort_alphabetical(a, b) -> bool: - if a.script_path > b.script_path: - return true - else: - return false - -func sort_backwards(a, b) -> bool: - if a.script_path < b.script_path: - return true - else: - return false - - -func populate_settings() -> void: - for i in patterns.size(): - ## Create Colour Pickers - var colour_picker: Variant = ColourPicker.instantiate() - colour_picker.colour = patterns[i][1] - colour_picker.title = patterns[i][0] - colour_picker.index = i - colours_container.add_child(colour_picker) - colour_picker.colour_picker.color_changed.connect(change_colour.bind(i)) - - ## Create Patterns - var pattern_edit: Variant = Pattern.instantiate() - pattern_edit.text = patterns[i][0] - pattern_edit.index = i - pattern_container.add_child(pattern_edit) - pattern_edit.line_edit.text_changed.connect(change_pattern.bind(i, - colour_picker)) - pattern_edit.remove_button.pressed.connect(remove_pattern.bind(i, - pattern_edit, colour_picker)) - pattern_edit.case_checkbox.button_pressed = patterns[i][2] - pattern_edit.case_checkbox.toggled.connect(case_sensitive_pattern.bind(i)) - - var pattern_button := $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Patterns/AddPatternButton - $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Patterns.move_child(pattern_button, 0) - - # path filtering - var ignore_paths_field := ignore_textbox - if not ignore_paths_field.is_connected("text_changed", _on_ignore_paths_changed): - ignore_paths_field.connect("text_changed", _on_ignore_paths_changed) - var ignore_paths_text := "" - for path in ignore_paths: - ignore_paths_text += path + ", " - ignore_paths_text = ignore_paths_text.trim_suffix(", ") - ignore_paths_field.text = ignore_paths_text - - auto_refresh_button.button_pressed = auto_refresh - - -func rebuild_settings() -> void: - for node in colours_container.get_children(): - node.queue_free() - for node in pattern_container.get_children(): - if node is Button: - continue - node.queue_free() - populate_settings() - - -#### CONFIG FILE #### -func create_config_file() -> void: - var config = ConfigFile.new() - config.set_value("scripts", "full_path", full_path) - config.set_value("scripts", "sort_alphabetical", _sort_alphabetical) - config.set_value("scripts", "script_colour", script_colour) - config.set_value("scripts", "ignore_paths", ignore_paths) - - config.set_value("patterns", "patterns", patterns) - - config.set_value("config", "auto_refresh", auto_refresh) - config.set_value("config", "builtin_enabled", builtin_enabled) - - var err = config.save("res://addons/Todo_Manager/todo.cfg") - - -func load_config() -> void: - var config := ConfigFile.new() - if config.load("res://addons/Todo_Manager/todo.cfg") == OK: - full_path = config.get_value("scripts", "full_path", DEFAULT_SCRIPT_NAME) - _sort_alphabetical = config.get_value("scripts", "sort_alphabetical", DEFAULT_SORT) - script_colour = config.get_value("scripts", "script_colour", DEFAULT_SCRIPT_COLOUR) - ignore_paths = config.get_value("scripts", "ignore_paths", [] as Array[String]) - patterns = config.get_value("patterns", "patterns", DEFAULT_PATTERNS) - auto_refresh = config.get_value("config", "auto_refresh", true) - builtin_enabled = config.get_value("config", "builtin_enabled", false) - else: - create_config_file() - - -#### Events #### -func _on_SettingsButton_toggled(button_pressed: bool) -> void: - settings_panel.visible = button_pressed - if button_pressed == false: - create_config_file() -# plugin.find_tokens_from_path(plugin.script_cache) - if auto_refresh: - plugin.rescan_files(true) - -func _on_Tree_item_activated() -> void: - var item : TreeItem - match tabs.current_tab: - 0: - item = project_tree.get_selected() - 1: - item = current_tree.get_selected() - if item.get_metadata(0) is Todo: - var todo : Todo = item.get_metadata(0) - call_deferred("go_to_script", todo.script_path, todo.line_number) - else: - var todo_item = item.get_metadata(0) - call_deferred("go_to_script", todo_item.script_path) - -func _on_FullPathCheckBox_toggled(button_pressed: bool) -> void: - full_path = button_pressed - -func _on_ScriptColourPickerButton_color_changed(color: Color) -> void: - script_colour = color - -func _on_RescanButton_pressed() -> void: - plugin.rescan_files(true) - -func change_colour(colour: Color, index: int) -> void: - patterns[index][1] = colour - -func change_pattern(value: String, index: int, this_colour: Node) -> void: - patterns[index][0] = value - this_colour.title = value - plugin.rescan_files(true) - -func remove_pattern(index: int, this: Node, this_colour: Node) -> void: - patterns.remove_at(index) - this.queue_free() - this_colour.queue_free() - plugin.rescan_files(true) - -func case_sensitive_pattern(active: bool, index: int) -> void: - if active: - patterns[index][2] = CASE_SENSITIVE - else: - patterns[index][2] = CASE_INSENSITIVE - plugin.rescan_files(true) - -func _on_DefaultButton_pressed() -> void: - patterns = DEFAULT_PATTERNS.duplicate(true) - _sort_alphabetical = DEFAULT_SORT - script_colour = DEFAULT_SCRIPT_COLOUR - full_path = DEFAULT_SCRIPT_NAME - rebuild_settings() - plugin.rescan_files(true) - -func _on_AlphSortCheckBox_toggled(button_pressed: bool) -> void: - _sort_alphabetical = button_pressed - plugin.rescan_files(true) - -func _on_AddPatternButton_pressed() -> void: - patterns.append(["\\bplaceholder\\b", Color.WHITE, CASE_INSENSITIVE]) - rebuild_settings() - -func _on_RefreshCheckButton_toggled(button_pressed: bool) -> void: - auto_refresh = button_pressed - -func _on_Timer_timeout() -> void: - plugin.refresh_lock = false - -func _on_ignore_paths_changed(new_text: String) -> void: - var text = ignore_textbox.text - var split: Array = text.split(',') - ignore_paths.clear() - for elem in split: - if elem == " " || elem == "": - continue - ignore_paths.push_front(elem.lstrip(' ').rstrip(' ')) - # validate so no empty string slips through (all paths ignored) - var i := 0 - for path in ignore_paths: - if (path == "" || path == " "): - ignore_paths.remove_at(i) - i += 1 - plugin.rescan_files(true) - -func _on_TabContainer_tab_changed(tab: int) -> void: - build_tree() - -func _on_BuiltInCheckButton_toggled(button_pressed: bool) -> void: - builtin_enabled = button_pressed - plugin.rescan_files(true) diff --git a/Godot/addons/Todo_Manager/Pattern.gd b/Godot/addons/Todo_Manager/Pattern.gd deleted file mode 100644 index 4e610af..0000000 --- a/Godot/addons/Todo_Manager/Pattern.gd +++ /dev/null @@ -1,21 +0,0 @@ -@tool -extends HBoxContainer - - -var text : String : set = set_text -var disabled : bool -var index : int - -@onready var line_edit := $LineEdit as LineEdit -@onready var remove_button := $RemoveButton as Button -@onready var case_checkbox := %CaseSensativeCheckbox as CheckBox - -func _ready() -> void: - line_edit.text = text - remove_button.disabled = disabled - - -func set_text(value: String) -> void: - text = value - if line_edit: - line_edit.text = value diff --git a/Godot/addons/Todo_Manager/Project.gd b/Godot/addons/Todo_Manager/Project.gd deleted file mode 100644 index 4af0847..0000000 --- a/Godot/addons/Todo_Manager/Project.gd +++ /dev/null @@ -1,73 +0,0 @@ -@tool -extends Panel - -signal tree_built # used for debugging - -const Todo := preload("res://addons/Todo_Manager/todo_class.gd") - -var _sort_alphabetical := true -var _full_path := false - -@onready var tree := $Tree as Tree - -func build_tree(todo_items : Array, ignore_paths : Array, patterns : Array, cased_patterns: Array[String], sort_alphabetical : bool, full_path : bool) -> void: - _full_path = full_path - tree.clear() - if sort_alphabetical: - todo_items.sort_custom(Callable(self, "sort_alphabetical")) - else: - todo_items.sort_custom(Callable(self, "sort_backwards")) - var root := tree.create_item() - root.set_text(0, "Scripts") - for todo_item in todo_items: - var ignore := false - for ignore_path in ignore_paths: - var script_path : String = todo_item.script_path - if script_path.begins_with(ignore_path) or script_path.begins_with("res://" + ignore_path) or script_path.begins_with("res:///" + ignore_path): - ignore = true - break - if ignore: - continue - var script := tree.create_item(root) - if full_path: - script.set_text(0, todo_item.script_path + " -------") - else: - script.set_text(0, todo_item.get_short_path() + " -------") - script.set_metadata(0, todo_item) - for todo in todo_item.todos: - var item := tree.create_item(script) - var content_header : String = todo.content - if "\n" in todo.content: - content_header = content_header.split("\n")[0] + "..." - item.set_text(0, "(%0) - %1".format([todo.line_number, content_header], "%_")) - item.set_tooltip_text(0, todo.content) - item.set_metadata(0, todo) - for i in range(0, len(cased_patterns)): - if cased_patterns[i] == todo.pattern: - item.set_custom_color(0, patterns[i][1]) - emit_signal("tree_built") - - -func sort_alphabetical(a, b) -> bool: - if _full_path: - if a.script_path < b.script_path: - return true - else: - return false - else: - if a.get_short_path() < b.get_short_path(): - return true - else: - return false - -func sort_backwards(a, b) -> bool: - if _full_path: - if a.script_path > b.script_path: - return true - else: - return false - else: - if a.get_short_path() > b.get_short_path(): - return true - else: - return false diff --git a/Godot/addons/Todo_Manager/README.md b/Godot/addons/Todo_Manager/README.md deleted file mode 100644 index b723248..0000000 --- a/Godot/addons/Todo_Manager/README.md +++ /dev/null @@ -1,60 +0,0 @@ - -### Localised READMEs - - [简体中文](READMECN.md) (Simplified Chinese) - - -# TODO Manager - -![example_image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/example1.png) - -## Simple and flexible - -- Supports GDScript, C# and GDNative -- Seamlessly integrated into the Godot dock -- Lenient syntax. Write TODOs that suit your style -- Quickly jump to lines and launch external editors - -## Customizable - -![settings_example](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/example2.png) - -- Add your own RegEx patterns -- Set colours to your liking - -## Installation - -### Method 1 (Godot Asset Library) - -The most simple way to get started using TODO Manager is to use Godot's inbuilt Asset Library to install the plugin into your project. - -#### Step 1 - -Find TODO Manager in the Godot Asset Library. -![AssetLib image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/Instruct1.png) - -#### Step 2 - -Install the package. You may want to untick the /doc folder at this point as it is not necessary for the functions of the plugin. -![Filestrcture image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/Instruct3.png) - -#### Step 4 - -Enable the plugin in the project settings. -![Project image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/Instruct4.png) - -### Method 2 (GitHub) - -#### Step 1 - -Click Download ZIP from the 'Code' dropdown. -![GitHub image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/Instruct5.png) - -#### Step 2 - -- Unzip the file and add it into your project folder. Make sure 'addons' is a subdirectory of res:// -- DO NOT change the name of the 'addons' or 'Todo_Manager' folders as this will break the saving and loading of your settings. - -#### Step 3 - -Enable the plugin in the project settings. -![Project image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/Instruct4.png) diff --git a/Godot/addons/Todo_Manager/READMECN.md b/Godot/addons/Todo_Manager/READMECN.md deleted file mode 100644 index 7a248c8..0000000 --- a/Godot/addons/Todo_Manager/READMECN.md +++ /dev/null @@ -1,56 +0,0 @@ -# TODO Manager - - ![example_image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/example1.png) - -## 简单而灵活 - -- 支持 GDScript,C# 和 GDNative。 -- 无缝集成到 Godot dock 栏。 -- 宽松的语法,用适合你自己的风格写TODOs。 -- 快速跳转到某一行并启用外部编辑器。 - -## 可定制 - -![settings_example](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/example2.png) - -- 添加你自己的正则表达式。 -- 设置你喜欢的颜色。 - -## 安装 - -### 方法一 (Godot Asset Library) - -最简单的使用 TODO Manager 的方法,使用 Godot 内置的资源商店(Asset Library)来安装这个插件到你的项目。 - -#### 第一步 - -在资源商店搜索 TODO Manager。 -![AssetLib image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/Instruct1.png) - -#### 第二步 - -安装下载的插件,你可能需要取消勾选 /doc 文件夹,因为插件的功能不需要。 -![Filestrcture image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/Instruct3.png) - -#### 第三步 - -在项目设置里启用插件。 -![Project image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/Instruct4.png) - -### 方法二 (GitHub) - -#### 第一步 - -点击 Download ZIP。 -![GitHub image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/Instruct5.png) - -#### 第二步 - -- 解压文件并且放到你的项目文件夹。确保 “addons” 是 res:// 的子文件夹。 -- DO NOT change the name of the 'addons' or 'Todo_Manager' folders as this will break the saving and loading of your settings. -- 不要更改 “addons” 或 “Todo_Manager” 文件夹的名称,因为这会打破预设的保存和加载。 - -#### 第三步 - -在项目设置里启用这个插件。 -![Project image](https://github.com/OrigamiDev-Pete/TODO_Manager/blob/main/addons/Todo_Manager/doc/images/Instruct4.png) diff --git a/Godot/addons/Todo_Manager/UI/ColourPicker.tscn b/Godot/addons/Todo_Manager/UI/ColourPicker.tscn deleted file mode 100644 index 650899f..0000000 --- a/Godot/addons/Todo_Manager/UI/ColourPicker.tscn +++ /dev/null @@ -1,21 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://bie1xn8v1kd66"] - -[ext_resource type="Script" path="res://addons/Todo_Manager/ColourPicker.gd" id="1"] - -[node name="TODOColour" type="HBoxContainer"] -offset_right = 105.0 -offset_bottom = 31.0 -script = ExtResource("1") -metadata/_edit_use_custom_anchors = false - -[node name="Label" type="Label" parent="."] -offset_top = 4.0 -offset_right = 1.0 -offset_bottom = 27.0 - -[node name="TODOColourPickerButton" type="ColorPickerButton" parent="."] -custom_minimum_size = Vector2(40, 0) -offset_left = 65.0 -offset_right = 105.0 -offset_bottom = 31.0 -size_flags_horizontal = 10 diff --git a/Godot/addons/Todo_Manager/UI/Dock.tscn b/Godot/addons/Todo_Manager/UI/Dock.tscn deleted file mode 100644 index 096662a..0000000 --- a/Godot/addons/Todo_Manager/UI/Dock.tscn +++ /dev/null @@ -1,315 +0,0 @@ -[gd_scene load_steps=6 format=3 uid="uid://b6k0dtftankcx"] - -[ext_resource type="Script" path="res://addons/Todo_Manager/Dock.gd" id="1"] -[ext_resource type="Script" path="res://addons/Todo_Manager/Project.gd" id="2"] -[ext_resource type="Script" path="res://addons/Todo_Manager/Current.gd" id="3"] - -[sub_resource type="ButtonGroup" id="ButtonGroup_kqxcu"] - -[sub_resource type="ButtonGroup" id="ButtonGroup_kltg3"] - -[node name="Dock" type="Control"] -custom_minimum_size = Vector2(0, 200) -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_vertical = 3 -script = ExtResource("1") - -[node name="VBoxContainer" type="VBoxContainer" parent="."] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_top = 4.0 -grow_horizontal = 2 -grow_vertical = 2 -metadata/_edit_layout_mode = 1 - -[node name="Header" type="HBoxContainer" parent="VBoxContainer"] -visible = false -layout_mode = 2 - -[node name="HeaderLeft" type="HBoxContainer" parent="VBoxContainer/Header"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="Title" type="Label" parent="VBoxContainer/Header/HeaderLeft"] -layout_mode = 2 -text = "Todo Dock:" - -[node name="HeaderRight" type="HBoxContainer" parent="VBoxContainer/Header"] -layout_mode = 2 -size_flags_horizontal = 3 -alignment = 2 - -[node name="SettingsButton" type="Button" parent="VBoxContainer/Header/HeaderRight"] -visible = false -layout_mode = 2 -toggle_mode = true -text = "Settings" - -[node name="TabContainer" type="TabContainer" parent="VBoxContainer"] -layout_mode = 2 -size_flags_vertical = 3 - -[node name="Project" type="Panel" parent="VBoxContainer/TabContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 -script = ExtResource("2") - -[node name="Tree" type="Tree" parent="VBoxContainer/TabContainer/Project"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -hide_root = true - -[node name="Current" type="Panel" parent="VBoxContainer/TabContainer"] -visible = false -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 -script = ExtResource("3") - -[node name="Tree" type="Tree" parent="VBoxContainer/TabContainer/Current"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -hide_folding = true -hide_root = true - -[node name="Settings" type="Panel" parent="VBoxContainer/TabContainer"] -visible = false -layout_mode = 2 - -[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/TabContainer/Settings"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="Scripts" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Scripts"] -layout_mode = 2 -text = "Scripts:" - -[node name="HSeparator" type="HSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Scripts"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 5 - -[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer"] -layout_mode = 2 - -[node name="VSeparator" type="VSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2"] -layout_mode = 2 - -[node name="Scripts" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2"] -layout_mode = 2 - -[node name="ScriptName" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptName"] -layout_mode = 2 -text = "Script Name:" - -[node name="FullPathCheckBox" type="CheckBox" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptName"] -layout_mode = 2 -button_group = SubResource("ButtonGroup_kqxcu") -text = "Full path" - -[node name="ShortNameCheckBox" type="CheckBox" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptName"] -layout_mode = 2 -button_pressed = true -button_group = SubResource("ButtonGroup_kqxcu") -text = "Short name" - -[node name="ScriptSort" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptSort"] -layout_mode = 2 -text = "Sort Order:" - -[node name="AlphSortCheckBox" type="CheckBox" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptSort"] -layout_mode = 2 -button_pressed = true -button_group = SubResource("ButtonGroup_kltg3") -text = "Alphabetical" - -[node name="RAlphSortCheckBox" type="CheckBox" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptSort"] -layout_mode = 2 -button_group = SubResource("ButtonGroup_kltg3") -text = "Reverse Alphabetical" - -[node name="ScriptColour" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptColour"] -layout_mode = 2 -text = "Script Colour:" - -[node name="ScriptColourPickerButton" type="ColorPickerButton" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptColour"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -color = Color(0.8, 0.807843, 0.827451, 1) - -[node name="IgnorePaths" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/IgnorePaths"] -layout_mode = 2 -text = "Ignore Paths:" - -[node name="TextEdit" type="LineEdit" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/IgnorePaths"] -custom_minimum_size = Vector2(100, 0) -layout_mode = 2 -expand_to_text_length = true - -[node name="Label3" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/IgnorePaths"] -layout_mode = 2 -text = "(Separated by commas)" - -[node name="TODOColours" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/TODOColours"] -layout_mode = 2 -text = "TODO Colours:" - -[node name="HSeparator" type="HSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/TODOColours"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="HBoxContainer3" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="VSeparator" type="VSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer3"] -layout_mode = 2 - -[node name="Colours" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer3"] -layout_mode = 2 - -[node name="Patterns" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Patterns"] -layout_mode = 2 -text = "Patterns:" - -[node name="HSeparator" type="HSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Patterns"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="HBoxContainer4" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="VSeparator" type="VSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4"] -layout_mode = 2 - -[node name="Patterns" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="AddPatternButton" type="Button" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Patterns"] -layout_mode = 2 -size_flags_horizontal = 0 -text = "Add" - -[node name="Config" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Config"] -layout_mode = 2 -text = "Config:" - -[node name="HSeparator" type="HSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Config"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="HBoxContainer5" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="VSeparator" type="VSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5"] -layout_mode = 2 - -[node name="Patterns" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5"] -layout_mode = 2 - -[node name="RefreshCheckButton" type="CheckButton" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns"] -layout_mode = 2 -size_flags_horizontal = 0 -button_pressed = true -text = "Auto Refresh" - -[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns"] -layout_mode = 2 - -[node name="BuiltInCheckButton" type="CheckButton" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/HBoxContainer"] -layout_mode = 2 -text = "Scan Built-in Scripts" - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/HBoxContainer"] -layout_mode = 2 - -[node name="DefaultButton" type="Button" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns"] -layout_mode = 2 -size_flags_horizontal = 0 -text = "Reset to default" - -[node name="Timer" type="Timer" parent="."] -one_shot = true - -[node name="RescanButton" type="Button" parent="."] -layout_mode = 1 -anchors_preset = 1 -anchor_left = 1.0 -anchor_right = 1.0 -offset_left = -102.0 -offset_top = 3.0 -offset_bottom = 34.0 -grow_horizontal = 0 -text = "Rescan Files" -flat = true - -[connection signal="toggled" from="VBoxContainer/Header/HeaderRight/SettingsButton" to="." method="_on_SettingsButton_toggled"] -[connection signal="tab_changed" from="VBoxContainer/TabContainer" to="." method="_on_TabContainer_tab_changed"] -[connection signal="item_activated" from="VBoxContainer/TabContainer/Project/Tree" to="." method="_on_Tree_item_activated"] -[connection signal="item_activated" from="VBoxContainer/TabContainer/Current/Tree" to="." method="_on_Tree_item_activated"] -[connection signal="toggled" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptName/FullPathCheckBox" to="." method="_on_FullPathCheckBox_toggled"] -[connection signal="toggled" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptSort/AlphSortCheckBox" to="." method="_on_AlphSortCheckBox_toggled"] -[connection signal="color_changed" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptColour/ScriptColourPickerButton" to="." method="_on_ScriptColourPickerButton_color_changed"] -[connection signal="pressed" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Patterns/AddPatternButton" to="." method="_on_AddPatternButton_pressed"] -[connection signal="toggled" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/RefreshCheckButton" to="." method="_on_RefreshCheckButton_toggled"] -[connection signal="toggled" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/HBoxContainer/BuiltInCheckButton" to="." method="_on_BuiltInCheckButton_toggled"] -[connection signal="pressed" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/DefaultButton" to="." method="_on_DefaultButton_pressed"] -[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] -[connection signal="pressed" from="RescanButton" to="." method="_on_RescanButton_pressed"] diff --git a/Godot/addons/Todo_Manager/UI/Pattern.tscn b/Godot/addons/Todo_Manager/UI/Pattern.tscn deleted file mode 100644 index fb45615..0000000 --- a/Godot/addons/Todo_Manager/UI/Pattern.tscn +++ /dev/null @@ -1,26 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://bx11sel2q5wli"] - -[ext_resource type="Script" path="res://addons/Todo_Manager/Pattern.gd" id="1"] - -[node name="Pattern" type="HBoxContainer"] -script = ExtResource("1") - -[node name="LineEdit" type="LineEdit" parent="."] -layout_mode = 2 -size_flags_horizontal = 0 -expand_to_text_length = true - -[node name="RemoveButton" type="Button" parent="."] -layout_mode = 2 -text = "-" - -[node name="MarginContainer" type="MarginContainer" parent="."] -custom_minimum_size = Vector2(20, 0) -layout_mode = 2 -size_flags_horizontal = 0 - -[node name="CaseSensativeCheckbox" type="CheckBox" parent="."] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 0 -text = "Case Sensitive" diff --git a/Godot/addons/Todo_Manager/doc/example.gd b/Godot/addons/Todo_Manager/doc/example.gd deleted file mode 100644 index 859bbba..0000000 --- a/Godot/addons/Todo_Manager/doc/example.gd +++ /dev/null @@ -1,7 +0,0 @@ -extends Node - -# TODO: this is a TODO -# HACK: this is a HACK -# FIXME: this is a FIXME -# TODO this works too -#Hack any format will do diff --git a/Godot/addons/Todo_Manager/doc/images/Instruct1.png b/Godot/addons/Todo_Manager/doc/images/Instruct1.png deleted file mode 100644 index 99a8db0..0000000 Binary files a/Godot/addons/Todo_Manager/doc/images/Instruct1.png and /dev/null differ diff --git a/Godot/addons/Todo_Manager/doc/images/Instruct2.png b/Godot/addons/Todo_Manager/doc/images/Instruct2.png deleted file mode 100644 index 83798f9..0000000 Binary files a/Godot/addons/Todo_Manager/doc/images/Instruct2.png and /dev/null differ diff --git a/Godot/addons/Todo_Manager/doc/images/Instruct3.png b/Godot/addons/Todo_Manager/doc/images/Instruct3.png deleted file mode 100644 index 283c604..0000000 Binary files a/Godot/addons/Todo_Manager/doc/images/Instruct3.png and /dev/null differ diff --git a/Godot/addons/Todo_Manager/doc/images/Instruct4.png b/Godot/addons/Todo_Manager/doc/images/Instruct4.png deleted file mode 100644 index 66ef1c9..0000000 Binary files a/Godot/addons/Todo_Manager/doc/images/Instruct4.png and /dev/null differ diff --git a/Godot/addons/Todo_Manager/doc/images/Instruct5.png b/Godot/addons/Todo_Manager/doc/images/Instruct5.png deleted file mode 100644 index d418faf..0000000 Binary files a/Godot/addons/Todo_Manager/doc/images/Instruct5.png and /dev/null differ diff --git a/Godot/addons/Todo_Manager/doc/images/TODO_Manager_Logo.png b/Godot/addons/Todo_Manager/doc/images/TODO_Manager_Logo.png deleted file mode 100644 index 6d19fee..0000000 Binary files a/Godot/addons/Todo_Manager/doc/images/TODO_Manager_Logo.png and /dev/null differ diff --git a/Godot/addons/Todo_Manager/doc/images/TodoExternal.gif b/Godot/addons/Todo_Manager/doc/images/TodoExternal.gif deleted file mode 100644 index 25d0850..0000000 Binary files a/Godot/addons/Todo_Manager/doc/images/TodoExternal.gif and /dev/null differ diff --git a/Godot/addons/Todo_Manager/doc/images/example1.png b/Godot/addons/Todo_Manager/doc/images/example1.png deleted file mode 100644 index 786bd15..0000000 Binary files a/Godot/addons/Todo_Manager/doc/images/example1.png and /dev/null differ diff --git a/Godot/addons/Todo_Manager/doc/images/example2.png b/Godot/addons/Todo_Manager/doc/images/example2.png deleted file mode 100644 index 256d754..0000000 Binary files a/Godot/addons/Todo_Manager/doc/images/example2.png and /dev/null differ diff --git a/Godot/addons/Todo_Manager/plugin.cfg b/Godot/addons/Todo_Manager/plugin.cfg deleted file mode 100644 index 256be46..0000000 --- a/Godot/addons/Todo_Manager/plugin.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[plugin] - -name="Todo Manager" -description="Dock for housing TODO messages." -author="Peter de Vroom" -version="2.3.1" -script="plugin.gd" diff --git a/Godot/addons/Todo_Manager/plugin.gd b/Godot/addons/Todo_Manager/plugin.gd deleted file mode 100644 index 511458d..0000000 --- a/Godot/addons/Todo_Manager/plugin.gd +++ /dev/null @@ -1,286 +0,0 @@ -@tool -extends EditorPlugin - -const DockScene := preload("res://addons/Todo_Manager/UI/Dock.tscn") -const Dock := preload("res://addons/Todo_Manager/Dock.gd") -const Todo := preload("res://addons/Todo_Manager/todo_class.gd") -const TodoItem := preload("res://addons/Todo_Manager/todoItem_class.gd") - -var _dockUI : Dock - -class TodoCacheValue: - var todos: Array - var last_modified_time: int - - func _init(todos: Array, last_modified_time: int): - self.todos = todos - self.last_modified_time = last_modified_time - -var todo_cache : Dictionary # { key: script_path, value: TodoCacheValue } -var remove_queue : Array -var combined_pattern : String -var cased_patterns : Array[String] - -var refresh_lock := false # makes sure _on_filesystem_changed only triggers once - - -func _enter_tree() -> void: - _dockUI = DockScene.instantiate() as Control - add_control_to_bottom_panel(_dockUI, "TODO") - get_editor_interface().get_resource_filesystem().connect("filesystem_changed", - _on_filesystem_changed) - get_editor_interface().get_file_system_dock().connect("file_removed", queue_remove) - get_editor_interface().get_script_editor().connect("editor_script_changed", - _on_active_script_changed) - _dockUI.plugin = self - - combined_pattern = combine_patterns(_dockUI.patterns) - find_tokens_from_path(find_scripts()) - _dockUI.build_tree() - - -func _exit_tree() -> void: - _dockUI.create_config_file() - remove_control_from_bottom_panel(_dockUI) - _dockUI.free() - - -func queue_remove(file: String): - for i in _dockUI.todo_items.size() - 1: - if _dockUI.todo_items[i].script_path == file: - _dockUI.todo_items.remove_at(i) - - -func find_tokens_from_path(scripts: Array[String]) -> void: - for script_path in scripts: - var file := FileAccess.open(script_path, FileAccess.READ) - var contents := file.get_as_text() - if script_path.ends_with(".tscn"): - handle_built_in_scripts(contents, script_path) - else: - find_tokens(contents, script_path) - - -func handle_built_in_scripts(contents: String, resource_path: String): - var s := contents.split("sub_resource type=\"GDScript\"") - if s.size() <= 1: - return - for i in range(1, s.size()): - var script_components := s[i].split("script/source") - var script_name = script_components[0].substr(5, 14) - find_tokens(script_components[1], resource_path + "::" + script_name) - - -func find_tokens(text: String, script_path: String) -> void: - var cached_todos = get_cached_todos(script_path) - if cached_todos.size() != 0: -# var i := 0 -# for todo_item in _dockUI.todo_items: -# if todo_item.script_path == script_path: -# _dockUI.todo_items.remove_at(i) -# i += 1 - var todo_item := TodoItem.new(script_path, cached_todos) - _dockUI.todo_items.append(todo_item) - else: - var regex = RegEx.new() - # if regex.compile("#\\s*\\bTODO\\b.*|#\\s*\\bHACK\\b.*") == OK: - if regex.compile(combined_pattern) == OK: - var result : Array[RegExMatch] = regex.search_all(text) - if result.is_empty(): - for i in _dockUI.todo_items.size(): - if _dockUI.todo_items[i].script_path == script_path: - _dockUI.todo_items.remove_at(i) - return # No tokens found - var match_found : bool - var i := 0 - for todo_item in _dockUI.todo_items: - if todo_item.script_path == script_path: - match_found = true - var updated_todo_item := update_todo_item(todo_item, result, text, script_path) - _dockUI.todo_items.remove_at(i) - _dockUI.todo_items.insert(i, updated_todo_item) - break - i += 1 - if !match_found: - _dockUI.todo_items.append(create_todo_item(result, text, script_path)) - - -func create_todo_item(regex_results: Array[RegExMatch], text: String, script_path: String) -> TodoItem: - var todo_item = TodoItem.new(script_path, []) - todo_item.script_path = script_path - var last_line_number := 0 - var lines := text.split("\n") - for r in regex_results: - var new_todo : Todo = create_todo(r.get_string(), script_path) - new_todo.line_number = get_line_number(r.get_string(), text, last_line_number) - # GD Multiline comment - var trailing_line := new_todo.line_number - var should_break = false - while trailing_line < lines.size() and lines[trailing_line].dedent().begins_with("#"): - for other_r in regex_results: - if lines[trailing_line] in other_r.get_string(): - should_break = true - break - if should_break: - break - - new_todo.content += "\n" + lines[trailing_line] - trailing_line += 1 - - last_line_number = new_todo.line_number - todo_item.todos.append(new_todo) - cache_todos(todo_item.todos, script_path) - return todo_item - - -func update_todo_item(todo_item: TodoItem, regex_results: Array[RegExMatch], text: String, script_path: String) -> TodoItem: - todo_item.todos.clear() - var lines := text.split("\n") - for r in regex_results: - var new_todo : Todo = create_todo(r.get_string(), script_path) - new_todo.line_number = get_line_number(r.get_string(), text) - # GD Multiline comment - var trailing_line := new_todo.line_number - var should_break = false - while trailing_line < lines.size() and lines[trailing_line].dedent().begins_with("#"): - for other_r in regex_results: - if lines[trailing_line] in other_r.get_string(): - should_break = true - break - if should_break: - break - - new_todo.content += "\n" + lines[trailing_line] - trailing_line += 1 - todo_item.todos.append(new_todo) - return todo_item - - -func get_line_number(what: String, from: String, start := 0) -> int: - what = what.split('\n')[0] # Match first line of multiline C# comments - var temp_array := from.split('\n') - var lines := Array(temp_array) - var line_number# = lines.find(what) + 1 - for i in range(start, lines.size()): - if what in lines[i]: - line_number = i + 1 # +1 to account of 0-based array vs 1-based line numbers - break - else: - line_number = 0 # This is an error - return line_number - - -func _on_filesystem_changed() -> void: - if !refresh_lock: - if _dockUI.auto_refresh: - refresh_lock = true - _dockUI.get_node("Timer").start() - rescan_files(false) - - -func find_scripts() -> Array[String]: - var scripts : Array[String] - var directory_queue : Array[String] - var dir := DirAccess.open("res://") - if dir.get_open_error() == OK: - get_dir_contents(dir, scripts, directory_queue) - else: - printerr("TODO_Manager: There was an error during find_scripts()") - - while not directory_queue.is_empty(): - if dir.change_dir(directory_queue[0]) == OK: - get_dir_contents(dir, scripts, directory_queue) - else: - printerr("TODO_Manager: There was an error at: " + directory_queue[0]) - directory_queue.pop_front() - - return scripts - - -func cache_todos(todos: Array, script_path: String) -> void: - var last_modified_time = FileAccess.get_modified_time(script_path) - todo_cache[script_path] = TodoCacheValue.new(todos, last_modified_time) - - -func get_cached_todos(script_path: String) -> Array: - if todo_cache.has(script_path) and !script_path.contains("tscn::"): - var cached_value: TodoCacheValue = todo_cache[script_path] - if cached_value.last_modified_time == FileAccess.get_modified_time(script_path): - - return cached_value.todos - return [] - -func get_dir_contents(dir: DirAccess, scripts: Array[String], directory_queue: Array[String]) -> void: - dir.include_navigational = false - dir.include_hidden = false - dir.list_dir_begin() - var file_name : String = dir.get_next() - - while file_name != "": - if dir.current_is_dir(): - if file_name == ".import" or file_name == ".mono": # Skip .import folder which should never have scripts - pass - else: - directory_queue.append(dir.get_current_dir().path_join(file_name)) - else: - if file_name.ends_with(".gd") or file_name.ends_with(".cs") \ - or file_name.ends_with(".c") or file_name.ends_with(".cpp") or file_name.ends_with(".h") \ - or ((file_name.ends_with(".tscn") and _dockUI.builtin_enabled)): - scripts.append(dir.get_current_dir().path_join(file_name)) - file_name = dir.get_next() - - -func rescan_files(clear_cache: bool) -> void: - _dockUI.todo_items.clear() - if clear_cache: - todo_cache.clear() - combined_pattern = combine_patterns(_dockUI.patterns) - find_tokens_from_path(find_scripts()) - _dockUI.build_tree() - - -func combine_patterns(patterns: Array) -> String: - # Case Sensitivity - cased_patterns = [] - for pattern in patterns: - if pattern[2] == _dockUI.CASE_INSENSITIVE: - cased_patterns.append(pattern[0].insert(0, "((?i)") + ")") - else: - cased_patterns.append("(" + pattern[0] + ")") - - if patterns.size() == 1: - return cased_patterns[0] - else: - var pattern_string := "((\\/\\*)|(#|\\/\\/))\\s*(" - for i in range(patterns.size()): - if i == 0: - pattern_string += cased_patterns[i] - else: - pattern_string += "|" + cased_patterns[i] - pattern_string += ")(?(2)[\\s\\S]*?\\*\\/|.*)" - return pattern_string - - -func create_todo(todo_string: String, script_path: String) -> Todo: - var todo := Todo.new() - var regex = RegEx.new() - for pattern in cased_patterns: - if regex.compile(pattern) == OK: - var result : RegExMatch = regex.search(todo_string) - if result: - todo.pattern = pattern - todo.title = result.strings[0] - else: - continue - else: - printerr("Error compiling " + pattern) - - todo.content = todo_string - todo.script_path = script_path - return todo - - -func _on_active_script_changed(script) -> void: - if _dockUI: - if _dockUI.tabs.current_tab == 1: - _dockUI.build_tree() diff --git a/Godot/addons/Todo_Manager/todo.cfg b/Godot/addons/Todo_Manager/todo.cfg deleted file mode 100644 index acef3bc..0000000 --- a/Godot/addons/Todo_Manager/todo.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[scripts] - -full_path=false -sort_alphabetical=true -script_colour=Color(0.8, 0.807843, 0.827451, 1) -ignore_paths=Array[String]([]) - -[patterns] - -patterns=[["\\bTODO\\b", Color(0.588235, 0.945098, 0.678431, 1), 0], ["\\bHACK\\b", Color(0.835294, 0.737255, 0.439216, 1), 0], ["\\bFIXME\\b", Color(0.835294, 0.439216, 0.439216, 1), 0]] - -[config] - -auto_refresh=true -builtin_enabled=false diff --git a/Godot/addons/Todo_Manager/todoItem_class.gd b/Godot/addons/Todo_Manager/todoItem_class.gd deleted file mode 100644 index 9bcb000..0000000 --- a/Godot/addons/Todo_Manager/todoItem_class.gd +++ /dev/null @@ -1,18 +0,0 @@ -@tool -extends RefCounted - -var script_path : String -var todos : Array - -func _init(script_path: String, todos: Array): - self.script_path = script_path - self.todos = todos - -func get_short_path() -> String: - var temp_array := script_path.rsplit('/', false, 1) - var short_path : String - if not temp_array.size() > 1: - short_path = "(!)" + temp_array[0] - else: - short_path = temp_array[1] - return short_path diff --git a/Godot/addons/Todo_Manager/todo_class.gd b/Godot/addons/Todo_Manager/todo_class.gd deleted file mode 100644 index af6b26b..0000000 --- a/Godot/addons/Todo_Manager/todo_class.gd +++ /dev/null @@ -1,9 +0,0 @@ -@tool -extends RefCounted - - -var pattern : String -var title : String -var content : String -var script_path : String -var line_number : int diff --git a/Godot/addons/godot_rl_agents/controller/ai_controller_2d.gd b/Godot/addons/godot_rl_agents/controller/ai_controller_2d.gd deleted file mode 100644 index 0a32a64..0000000 --- a/Godot/addons/godot_rl_agents/controller/ai_controller_2d.gd +++ /dev/null @@ -1,119 +0,0 @@ -extends Node2D -class_name AIController2D - -enum ControlModes { INHERIT_FROM_SYNC, HUMAN, TRAINING, ONNX_INFERENCE, RECORD_EXPERT_DEMOS } -@export var control_mode: ControlModes = ControlModes.INHERIT_FROM_SYNC -@export var onnx_model_path := "" -@export var reset_after := 1000 - -@export_group("Record expert demos mode options") -## Path where the demos will be saved. The file can later be used for imitation learning. -@export var expert_demo_save_path: String -## The action that erases the last recorded episode from the currently recorded data. -@export var remove_last_episode_key: InputEvent -## Action will be repeated for n frames. Will introduce control lag if larger than 1. -## Can be used to ensure that action_repeat on inference and training matches -## the recorded demonstrations. -@export var action_repeat: int = 1 - -@export_group("Multi-policy mode options") -## Allows you to set certain agents to use different policies. -## Changing has no effect with default SB3 training. Works with Rllib example. -## Tutorial: https://github.com/edbeeching/godot_rl_agents/blob/main/docs/TRAINING_MULTIPLE_POLICIES.md -@export var policy_name: String = "shared_policy" - -var onnx_model: ONNXModel - -var heuristic := "human" -var done := false -var reward := 0.0 -var n_steps := 0 -var needs_reset := false - -var _player: Node2D - - -func _ready(): - add_to_group("AGENT") - - -func init(player: Node2D): - _player = player - - -#-- Methods that need implementing using the "extend script" option in Godot --# -func get_obs() -> Dictionary: - assert(false, "the get_obs method is not implemented when extending from ai_controller") - return {"obs": []} - - -func get_reward() -> float: - assert(false, "the get_reward method is not implemented when extending from ai_controller") - return 0.0 - - -func get_action_space() -> Dictionary: - assert( - false, - "the get get_action_space method is not implemented when extending from ai_controller" - ) - return { - "example_actions_continous": {"size": 2, "action_type": "continuous"}, - "example_actions_discrete": {"size": 2, "action_type": "discrete"}, - } - - -func set_action(action) -> void: - assert(false, "the set_action method is not implemented when extending from ai_controller") - - -#-----------------------------------------------------------------------------# - - -#-- Methods that sometimes need implementing using the "extend script" option in Godot --# -# Only needed if you are recording expert demos with this AIController -func get_action() -> Array: - assert(false, "the get_action method is not implemented in extended AIController but demo_recorder is used") - return [] - -# -----------------------------------------------------------------------------# - -func _physics_process(delta): - n_steps += 1 - if n_steps > reset_after: - needs_reset = true - - -func get_obs_space(): - # may need overriding if the obs space is complex - var obs = get_obs() - return { - "obs": {"size": [len(obs["obs"])], "space": "box"}, - } - - -func reset(): - n_steps = 0 - needs_reset = false - - -func reset_if_done(): - if done: - reset() - - -func set_heuristic(h): - # sets the heuristic from "human" or "model" nothing to change here - heuristic = h - - -func get_done(): - return done - - -func set_done_false(): - done = false - - -func zero_reward(): - reward = 0.0 diff --git a/Godot/addons/godot_rl_agents/controller/ai_controller_3d.gd b/Godot/addons/godot_rl_agents/controller/ai_controller_3d.gd deleted file mode 100644 index c77d9e0..0000000 --- a/Godot/addons/godot_rl_agents/controller/ai_controller_3d.gd +++ /dev/null @@ -1,120 +0,0 @@ -extends Node3D -class_name AIController3D - -enum ControlModes { INHERIT_FROM_SYNC, HUMAN, TRAINING, ONNX_INFERENCE, RECORD_EXPERT_DEMOS } -@export var control_mode: ControlModes = ControlModes.INHERIT_FROM_SYNC -@export var onnx_model_path := "" -@export var reset_after := 1000 - -@export_group("Record expert demos mode options") -## Path where the demos will be saved. The file can later be used for imitation learning. -@export var expert_demo_save_path: String -## The action that erases the last recorded episode from the currently recorded data. -@export var remove_last_episode_key: InputEvent -## Action will be repeated for n frames. Will introduce control lag if larger than 1. -## Can be used to ensure that action_repeat on inference and training matches -## the recorded demonstrations. -@export var action_repeat: int = 1 - -@export_group("Multi-policy mode options") -## Allows you to set certain agents to use different policies. -## Changing has no effect with default SB3 training. Works with Rllib example. -## Tutorial: https://github.com/edbeeching/godot_rl_agents/blob/main/docs/TRAINING_MULTIPLE_POLICIES.md -@export var policy_name: String = "shared_policy" - -var onnx_model: ONNXModel - -var heuristic := "human" -var done := false -var reward := 0.0 -var n_steps := 0 -var needs_reset := false - -var _player: Node3D - - -func _ready(): - add_to_group("AGENT") - - -func init(player: Node3D): - _player = player - - -#-- Methods that need implementing using the "extend script" option in Godot --# -func get_obs() -> Dictionary: - assert(false, "the get_obs method is not implemented when extending from ai_controller") - return {"obs": []} - - -func get_reward() -> float: - assert(false, "the get_reward method is not implemented when extending from ai_controller") - return 0.0 - - -func get_action_space() -> Dictionary: - assert( - false, - "the get_action_space method is not implemented when extending from ai_controller" - ) - return { - "example_actions_continous": {"size": 2, "action_type": "continuous"}, - "example_actions_discrete": {"size": 2, "action_type": "discrete"}, - } - - -func set_action(action) -> void: - assert(false, "the set_action method is not implemented when extending from ai_controller") - - -#-----------------------------------------------------------------------------# - - -#-- Methods that sometimes need implementing using the "extend script" option in Godot --# -# Only needed if you are recording expert demos with this AIController -func get_action() -> Array: - assert(false, "the get_action method is not implemented in extended AIController but demo_recorder is used") - return [] - -# -----------------------------------------------------------------------------# - - -func _physics_process(delta): - n_steps += 1 - if n_steps > reset_after: - needs_reset = true - - -func get_obs_space(): - # may need overriding if the obs space is complex - var obs = get_obs() - return { - "obs": {"size": [len(obs["obs"])], "space": "box"}, - } - - -func reset(): - n_steps = 0 - needs_reset = false - - -func reset_if_done(): - if done: - reset() - - -func set_heuristic(h): - # sets the heuristic from "human" or "model" nothing to change here - heuristic = h - - -func get_done(): - return done - - -func set_done_false(): - done = false - - -func zero_reward(): - reward = 0.0 diff --git a/Godot/addons/godot_rl_agents/godot_rl_agents.gd b/Godot/addons/godot_rl_agents/godot_rl_agents.gd deleted file mode 100644 index e4fe136..0000000 --- a/Godot/addons/godot_rl_agents/godot_rl_agents.gd +++ /dev/null @@ -1,16 +0,0 @@ -@tool -extends EditorPlugin - - -func _enter_tree(): - # Initialization of the plugin goes here. - # Add the new type with a name, a parent type, a script and an icon. - add_custom_type("Sync", "Node", preload("sync.gd"), preload("icon.png")) - #add_custom_type("RaycastSensor2D2", "Node", preload("raycast_sensor_2d.gd"), preload("icon.png")) - - -func _exit_tree(): - # Clean-up of the plugin goes here. - # Always remember to remove it from the engine when deactivated. - remove_custom_type("Sync") - #remove_custom_type("RaycastSensor2D2") diff --git a/Godot/addons/godot_rl_agents/icon.png b/Godot/addons/godot_rl_agents/icon.png deleted file mode 100644 index fd8190e..0000000 Binary files a/Godot/addons/godot_rl_agents/icon.png and /dev/null differ diff --git a/Godot/addons/godot_rl_agents/onnx/csharp/ONNXInference.cs b/Godot/addons/godot_rl_agents/onnx/csharp/ONNXInference.cs deleted file mode 100644 index 6dcfa18..0000000 --- a/Godot/addons/godot_rl_agents/onnx/csharp/ONNXInference.cs +++ /dev/null @@ -1,109 +0,0 @@ -using Godot; -using Microsoft.ML.OnnxRuntime; -using Microsoft.ML.OnnxRuntime.Tensors; -using System.Collections.Generic; -using System.Linq; - -namespace GodotONNX -{ - /// - public partial class ONNXInference : GodotObject - { - - private InferenceSession session; - /// - /// Path to the ONNX model. Use Initialize to change it. - /// - private string modelPath; - private int batchSize; - - private SessionOptions SessionOpt; - - /// - /// init function - /// - /// - /// - /// Returns the output size of the model - public int Initialize(string Path, int BatchSize) - { - modelPath = Path; - batchSize = BatchSize; - SessionOpt = SessionConfigurator.MakeConfiguredSessionOptions(); - session = LoadModel(modelPath); - return session.OutputMetadata["output"].Dimensions[1]; - } - - - /// - public Godot.Collections.Dictionary> RunInference(Godot.Collections.Array obs, int state_ins) - { - //Current model: Any (Godot Rl Agents) - //Expects a tensor of shape [batch_size, input_size] type float named obs and a tensor of shape [batch_size] type float named state_ins - - //Fill the input tensors - // create span from inputSize - var span = new float[obs.Count]; //There's probably a better way to do this - for (int i = 0; i < obs.Count; i++) - { - span[i] = obs[i]; - } - - IReadOnlyCollection inputs = new List - { - NamedOnnxValue.CreateFromTensor("obs", new DenseTensor(span, new int[] { batchSize, obs.Count })), - NamedOnnxValue.CreateFromTensor("state_ins", new DenseTensor(new float[] { state_ins }, new int[] { batchSize })) - }; - IReadOnlyCollection outputNames = new List { "output", "state_outs" }; //ONNX is sensible to these names, as well as the input names - - IDisposableReadOnlyCollection results; - //We do not use "using" here so we get a better exception explaination later - try - { - results = session.Run(inputs, outputNames); - } - catch (OnnxRuntimeException e) - { - //This error usually means that the model is not compatible with the input, beacause of the input shape (size) - GD.Print("Error at inference: ", e); - return null; - } - //Can't convert IEnumerable to Variant, so we have to convert it to an array or something - Godot.Collections.Dictionary> output = new Godot.Collections.Dictionary>(); - DisposableNamedOnnxValue output1 = results.First(); - DisposableNamedOnnxValue output2 = results.Last(); - Godot.Collections.Array output1Array = new Godot.Collections.Array(); - Godot.Collections.Array output2Array = new Godot.Collections.Array(); - - foreach (float f in output1.AsEnumerable()) - { - output1Array.Add(f); - } - - foreach (float f in output2.AsEnumerable()) - { - output2Array.Add(f); - } - - output.Add(output1.Name, output1Array); - output.Add(output2.Name, output2Array); - - //Output is a dictionary of arrays, ex: { "output" : [0.1, 0.2, 0.3, 0.4, ...], "state_outs" : [0.5, ...]} - results.Dispose(); - return output; - } - /// - public InferenceSession LoadModel(string Path) - { - using Godot.FileAccess file = FileAccess.Open(Path, Godot.FileAccess.ModeFlags.Read); - byte[] model = file.GetBuffer((int)file.GetLength()); - //file.Close(); file.Dispose(); //Close the file, then dispose the reference. - return new InferenceSession(model, SessionOpt); //Load the model - } - public void FreeDisposables() - { - session.Dispose(); - SessionOpt.Dispose(); - } - } -} diff --git a/Godot/addons/godot_rl_agents/onnx/csharp/SessionConfigurator.cs b/Godot/addons/godot_rl_agents/onnx/csharp/SessionConfigurator.cs deleted file mode 100644 index ad7a41c..0000000 --- a/Godot/addons/godot_rl_agents/onnx/csharp/SessionConfigurator.cs +++ /dev/null @@ -1,131 +0,0 @@ -using Godot; -using Microsoft.ML.OnnxRuntime; - -namespace GodotONNX -{ - /// - - public static class SessionConfigurator - { - public enum ComputeName - { - CUDA, - ROCm, - DirectML, - CoreML, - CPU - } - - /// - public static SessionOptions MakeConfiguredSessionOptions() - { - SessionOptions sessionOptions = new(); - SetOptions(sessionOptions); - return sessionOptions; - } - - private static void SetOptions(SessionOptions sessionOptions) - { - sessionOptions.LogSeverityLevel = OrtLoggingLevel.ORT_LOGGING_LEVEL_WARNING; - ApplySystemSpecificOptions(sessionOptions); - } - - /// - static public void ApplySystemSpecificOptions(SessionOptions sessionOptions) - { - //Most code for this function is verbose only, the only reason it exists is to track - //implementation progress of the different compute APIs. - - //December 2022: CUDA is not working. - - string OSName = OS.GetName(); //Get OS Name - - //ComputeName ComputeAPI = ComputeCheck(); //Get Compute API - // //TODO: Get CPU architecture - - //Linux can use OpenVINO (C#) on x64 and ROCm on x86 (GDNative/C++) - //Windows can use OpenVINO (C#) on x64 - //TODO: try TensorRT instead of CUDA - //TODO: Use OpenVINO for Intel Graphics - - // Temporarily using CPU on all platforms to avoid errors detected with DML - ComputeName ComputeAPI = ComputeName.CPU; - - //match OS and Compute API - GD.Print($"OS: {OSName} Compute API: {ComputeAPI}"); - - // CPU is set by default without appending necessary - // sessionOptions.AppendExecutionProvider_CPU(0); - - /* - switch (OSName) - { - case "Windows": //Can use CUDA, DirectML - if (ComputeAPI is ComputeName.CUDA) - { - //CUDA - //sessionOptions.AppendExecutionProvider_CUDA(0); - //sessionOptions.AppendExecutionProvider_DML(0); - } - else if (ComputeAPI is ComputeName.DirectML) - { - //DirectML - //sessionOptions.AppendExecutionProvider_DML(0); - } - break; - case "X11": //Can use CUDA, ROCm - if (ComputeAPI is ComputeName.CUDA) - { - //CUDA - //sessionOptions.AppendExecutionProvider_CUDA(0); - } - if (ComputeAPI is ComputeName.ROCm) - { - //ROCm, only works on x86 - //Research indicates that this has to be compiled as a GDNative plugin - //GD.Print("ROCm not supported yet, using CPU."); - //sessionOptions.AppendExecutionProvider_CPU(0); - } - break; - case "macOS": //Can use CoreML - if (ComputeAPI is ComputeName.CoreML) - { //CoreML - //TODO: Needs testing - //sessionOptions.AppendExecutionProvider_CoreML(0); - //CoreML on ARM64, out of the box, on x64 needs .tar file from GitHub - } - break; - default: - GD.Print("OS not Supported."); - break; - } - */ - } - - - /// - public static ComputeName ComputeCheck() - { - string adapterName = Godot.RenderingServer.GetVideoAdapterName(); - //string adapterVendor = Godot.RenderingServer.GetVideoAdapterVendor(); - adapterName = adapterName.ToUpper(new System.Globalization.CultureInfo("")); - //TODO: GPU vendors for MacOS, what do they even use these days? - - if (adapterName.Contains("INTEL")) - { - return ComputeName.DirectML; - } - if (adapterName.Contains("AMD") || adapterName.Contains("RADEON")) - { - return ComputeName.DirectML; - } - if (adapterName.Contains("NVIDIA")) - { - return ComputeName.CUDA; - } - - GD.Print("Graphics Card not recognized."); //Should use CPU - return ComputeName.CPU; - } - } -} diff --git a/Godot/addons/godot_rl_agents/onnx/csharp/docs/ONNXInference.xml b/Godot/addons/godot_rl_agents/onnx/csharp/docs/ONNXInference.xml deleted file mode 100644 index 91b07d6..0000000 --- a/Godot/addons/godot_rl_agents/onnx/csharp/docs/ONNXInference.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - The main ONNXInference Class that handles the inference process. - - - - - Starts the inference process. - - Path to the ONNX model, expects a path inside resources. - How many observations will the model recieve. - - - - Runs the given input through the model and returns the output. - - Dictionary containing all observations. - How many different agents are creating these observations. - A Dictionary of arrays, containing instructions based on the observations. - - - - Loads the given model into the inference process, using the best Execution provider available. - - Path to the ONNX model, expects a path inside resources. - InferenceSession ready to run. - - - \ No newline at end of file diff --git a/Godot/addons/godot_rl_agents/onnx/csharp/docs/SessionConfigurator.xml b/Godot/addons/godot_rl_agents/onnx/csharp/docs/SessionConfigurator.xml deleted file mode 100644 index f160c02..0000000 --- a/Godot/addons/godot_rl_agents/onnx/csharp/docs/SessionConfigurator.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - The main SessionConfigurator Class that handles the execution options and providers for the inference process. - - - - - Creates a SessionOptions with all available execution providers. - - SessionOptions with all available execution providers. - - - - Appends any execution provider available in the current system. - - - This function is mainly verbose for tracking implementation progress of different compute APIs. - - - - - Checks for available GPUs. - - An integer identifier for each compute platform. - - - \ No newline at end of file diff --git a/Godot/addons/godot_rl_agents/onnx/wrapper/ONNX_wrapper.gd b/Godot/addons/godot_rl_agents/onnx/wrapper/ONNX_wrapper.gd deleted file mode 100644 index e27f2c3..0000000 --- a/Godot/addons/godot_rl_agents/onnx/wrapper/ONNX_wrapper.gd +++ /dev/null @@ -1,51 +0,0 @@ -extends Resource -class_name ONNXModel -var inferencer_script = load("res://addons/godot_rl_agents/onnx/csharp/ONNXInference.cs") - -var inferencer = null - -## How many action values the model outputs -var action_output_size: int - -## Used to differentiate models -## that only output continuous action mean (e.g. sb3, cleanrl export) -## versus models that output mean and logstd (e.g. rllib export) -var action_means_only: bool - -## Whether action_means_value has been set already for this model -var action_means_only_set: bool - -# Must provide the path to the model and the batch size -func _init(model_path, batch_size): - inferencer = inferencer_script.new() - action_output_size = inferencer.Initialize(model_path, batch_size) - -# This function is the one that will be called from the game, -# requires the observation as an array and the state_ins as an int -# returns an Array containing the action the model takes. -func run_inference(obs: Array, state_ins: int) -> Dictionary: - if inferencer == null: - printerr("Inferencer not initialized") - return {} - return inferencer.RunInference(obs, state_ins) - - -func _notification(what): - if what == NOTIFICATION_PREDELETE: - inferencer.FreeDisposables() - inferencer.free() - -# Check whether agent uses a continuous actions model with only action means or not -func set_action_means_only(agent_action_space): - action_means_only_set = true - var continuous_only: bool = true - var continuous_actions: int - for action in agent_action_space: - if not agent_action_space[action]["action_type"] == "continuous": - continuous_only = false - break - else: - continuous_actions += agent_action_space[action]["size"] - if continuous_only: - if continuous_actions == action_output_size: - action_means_only = true diff --git a/Godot/addons/godot_rl_agents/plugin.cfg b/Godot/addons/godot_rl_agents/plugin.cfg deleted file mode 100644 index b1bc988..0000000 --- a/Godot/addons/godot_rl_agents/plugin.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[plugin] - -name="GodotRLAgents" -description="Custom nodes for the godot rl agents toolkit " -author="Edward Beeching" -version="0.1" -script="godot_rl_agents.gd" diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_2d/ExampleRaycastSensor2D.tscn b/Godot/addons/godot_rl_agents/sensors/sensors_2d/ExampleRaycastSensor2D.tscn deleted file mode 100644 index 5edb6c7..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_2d/ExampleRaycastSensor2D.tscn +++ /dev/null @@ -1,48 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://ddeq7mn1ealyc"] - -[ext_resource type="Script" path="res://addons/godot_rl_agents/sensors/sensors_2d/RaycastSensor2D.gd" id="1"] - -[sub_resource type="GDScript" id="2"] -script/source = "extends Node2D - - - -func _physics_process(delta: float) -> void: - print(\"step start\") - -" - -[sub_resource type="GDScript" id="1"] -script/source = "extends RayCast2D - -var steps = 1 - -func _physics_process(delta: float) -> void: - print(\"processing raycast\") - steps += 1 - if steps % 2: - force_raycast_update() - - print(is_colliding()) -" - -[sub_resource type="CircleShape2D" id="3"] - -[node name="ExampleRaycastSensor2D" type="Node2D"] -script = SubResource("2") - -[node name="ExampleAgent" type="Node2D" parent="."] -position = Vector2(573, 314) -rotation = 0.286234 - -[node name="RaycastSensor2D" type="Node2D" parent="ExampleAgent"] -script = ExtResource("1") - -[node name="TestRayCast2D" type="RayCast2D" parent="."] -script = SubResource("1") - -[node name="StaticBody2D" type="StaticBody2D" parent="."] -position = Vector2(1, 52) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] -shape = SubResource("3") diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_2d/GridSensor2D.gd b/Godot/addons/godot_rl_agents/sensors/sensors_2d/GridSensor2D.gd deleted file mode 100644 index da170ba..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_2d/GridSensor2D.gd +++ /dev/null @@ -1,235 +0,0 @@ -@tool -extends ISensor2D -class_name GridSensor2D - -@export var debug_view := false: - get: - return debug_view - set(value): - debug_view = value - _update() - -@export_flags_2d_physics var detection_mask := 0: - get: - return detection_mask - set(value): - detection_mask = value - _update() - -@export var collide_with_areas := false: - get: - return collide_with_areas - set(value): - collide_with_areas = value - _update() - -@export var collide_with_bodies := true: - get: - return collide_with_bodies - set(value): - collide_with_bodies = value - _update() - -@export_range(1, 200, 0.1) var cell_width := 20.0: - get: - return cell_width - set(value): - cell_width = value - _update() - -@export_range(1, 200, 0.1) var cell_height := 20.0: - get: - return cell_height - set(value): - cell_height = value - _update() - -@export_range(1, 21, 2, "or_greater") var grid_size_x := 3: - get: - return grid_size_x - set(value): - grid_size_x = value - _update() - -@export_range(1, 21, 2, "or_greater") var grid_size_y := 3: - get: - return grid_size_y - set(value): - grid_size_y = value - _update() - -var _obs_buffer: PackedFloat64Array -var _rectangle_shape: RectangleShape2D -var _collision_mapping: Dictionary -var _n_layers_per_cell: int - -var _highlighted_cell_color: Color -var _standard_cell_color: Color - - -func get_observation(): - return _obs_buffer - - -func _update(): - if Engine.is_editor_hint(): - if is_node_ready(): - _spawn_nodes() - - -func _ready() -> void: - _set_colors() - - if Engine.is_editor_hint(): - if get_child_count() == 0: - _spawn_nodes() - else: - _spawn_nodes() - - -func _set_colors() -> void: - _standard_cell_color = Color(100.0 / 255.0, 100.0 / 255.0, 100.0 / 255.0, 100.0 / 255.0) - _highlighted_cell_color = Color(255.0 / 255.0, 100.0 / 255.0, 100.0 / 255.0, 100.0 / 255.0) - - -func _get_collision_mapping() -> Dictionary: - # defines which layer is mapped to which cell obs index - var total_bits = 0 - var collision_mapping = {} - for i in 32: - var bit_mask = 2 ** i - if (detection_mask & bit_mask) > 0: - collision_mapping[i] = total_bits - total_bits += 1 - - return collision_mapping - - -func _spawn_nodes(): - for cell in get_children(): - cell.name = "_%s" % cell.name # Otherwise naming below will fail - cell.queue_free() - - _collision_mapping = _get_collision_mapping() - #prints("collision_mapping", _collision_mapping, len(_collision_mapping)) - # allocate memory for the observations - _n_layers_per_cell = len(_collision_mapping) - _obs_buffer = PackedFloat64Array() - _obs_buffer.resize(grid_size_x * grid_size_y * _n_layers_per_cell) - _obs_buffer.fill(0) - #prints(len(_obs_buffer), _obs_buffer ) - - _rectangle_shape = RectangleShape2D.new() - _rectangle_shape.set_size(Vector2(cell_width, cell_height)) - - var shift := Vector2( - -(grid_size_x / 2) * cell_width, - -(grid_size_y / 2) * cell_height, - ) - - for i in grid_size_x: - for j in grid_size_y: - var cell_position = Vector2(i * cell_width, j * cell_height) + shift - _create_cell(i, j, cell_position) - - -func _create_cell(i: int, j: int, position: Vector2): - var cell := Area2D.new() - cell.position = position - cell.name = "GridCell %s %s" % [i, j] - cell.modulate = _standard_cell_color - - if collide_with_areas: - cell.area_entered.connect(_on_cell_area_entered.bind(i, j)) - cell.area_exited.connect(_on_cell_area_exited.bind(i, j)) - - if collide_with_bodies: - cell.body_entered.connect(_on_cell_body_entered.bind(i, j)) - cell.body_exited.connect(_on_cell_body_exited.bind(i, j)) - - cell.collision_layer = 0 - cell.collision_mask = detection_mask - cell.monitorable = true - add_child(cell) - cell.set_owner(get_tree().edited_scene_root) - - var col_shape := CollisionShape2D.new() - col_shape.shape = _rectangle_shape - col_shape.name = "CollisionShape2D" - cell.add_child(col_shape) - col_shape.set_owner(get_tree().edited_scene_root) - - if debug_view: - var quad = MeshInstance2D.new() - quad.name = "MeshInstance2D" - var quad_mesh = QuadMesh.new() - - quad_mesh.set_size(Vector2(cell_width, cell_height)) - - quad.mesh = quad_mesh - cell.add_child(quad) - quad.set_owner(get_tree().edited_scene_root) - - -func _update_obs(cell_i: int, cell_j: int, collision_layer: int, entered: bool): - for key in _collision_mapping: - var bit_mask = 2 ** key - if (collision_layer & bit_mask) > 0: - var collison_map_index = _collision_mapping[key] - - var obs_index = ( - (cell_i * grid_size_x * _n_layers_per_cell) - + (cell_j * _n_layers_per_cell) - + collison_map_index - ) - #prints(obs_index, cell_i, cell_j) - if entered: - _obs_buffer[obs_index] += 1 - else: - _obs_buffer[obs_index] -= 1 - - -func _toggle_cell(cell_i: int, cell_j: int): - var cell = get_node_or_null("GridCell %s %s" % [cell_i, cell_j]) - - if cell == null: - print("cell not found, returning") - - var n_hits = 0 - var start_index = (cell_i * grid_size_x * _n_layers_per_cell) + (cell_j * _n_layers_per_cell) - for i in _n_layers_per_cell: - n_hits += _obs_buffer[start_index + i] - - if n_hits > 0: - cell.modulate = _highlighted_cell_color - else: - cell.modulate = _standard_cell_color - - -func _on_cell_area_entered(area: Area2D, cell_i: int, cell_j: int): - #prints("_on_cell_area_entered", cell_i, cell_j) - _update_obs(cell_i, cell_j, area.collision_layer, true) - if debug_view: - _toggle_cell(cell_i, cell_j) - #print(_obs_buffer) - - -func _on_cell_area_exited(area: Area2D, cell_i: int, cell_j: int): - #prints("_on_cell_area_exited", cell_i, cell_j) - _update_obs(cell_i, cell_j, area.collision_layer, false) - if debug_view: - _toggle_cell(cell_i, cell_j) - - -func _on_cell_body_entered(body: Node2D, cell_i: int, cell_j: int): - #prints("_on_cell_body_entered", cell_i, cell_j) - _update_obs(cell_i, cell_j, body.collision_layer, true) - if debug_view: - _toggle_cell(cell_i, cell_j) - - -func _on_cell_body_exited(body: Node2D, cell_i: int, cell_j: int): - #prints("_on_cell_body_exited", cell_i, cell_j) - _update_obs(cell_i, cell_j, body.collision_layer, false) - if debug_view: - _toggle_cell(cell_i, cell_j) diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_2d/ISensor2D.gd b/Godot/addons/godot_rl_agents/sensors/sensors_2d/ISensor2D.gd deleted file mode 100644 index 67669a1..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_2d/ISensor2D.gd +++ /dev/null @@ -1,25 +0,0 @@ -extends Node2D -class_name ISensor2D - -var _obs: Array = [] -var _active := false - - -func get_observation(): - pass - - -func activate(): - _active = true - - -func deactivate(): - _active = false - - -func _update_observation(): - pass - - -func reset(): - pass diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_2d/RaycastSensor2D.gd b/Godot/addons/godot_rl_agents/sensors/sensors_2d/RaycastSensor2D.gd deleted file mode 100644 index 9bb54ed..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_2d/RaycastSensor2D.gd +++ /dev/null @@ -1,118 +0,0 @@ -@tool -extends ISensor2D -class_name RaycastSensor2D - -@export_flags_2d_physics var collision_mask := 1: - get: - return collision_mask - set(value): - collision_mask = value - _update() - -@export var collide_with_areas := false: - get: - return collide_with_areas - set(value): - collide_with_areas = value - _update() - -@export var collide_with_bodies := true: - get: - return collide_with_bodies - set(value): - collide_with_bodies = value - _update() - -@export var n_rays := 16.0: - get: - return n_rays - set(value): - n_rays = value - _update() - -@export_range(5, 3000, 5.0) var ray_length := 200: - get: - return ray_length - set(value): - ray_length = value - _update() -@export_range(5, 360, 5.0) var cone_width := 360.0: - get: - return cone_width - set(value): - cone_width = value - _update() - -@export var debug_draw := true: - get: - return debug_draw - set(value): - debug_draw = value - _update() - -var _angles = [] -var rays := [] - - -func _update(): - if Engine.is_editor_hint(): - if debug_draw: - _spawn_nodes() - else: - for ray in get_children(): - if ray is RayCast2D: - remove_child(ray) - - -func _ready() -> void: - _spawn_nodes() - - -func _spawn_nodes(): - for ray in rays: - ray.queue_free() - rays = [] - - _angles = [] - var step = cone_width / (n_rays) - var start = step / 2 - cone_width / 2 - - for i in n_rays: - var angle = start + i * step - var ray = RayCast2D.new() - ray.set_target_position( - Vector2(ray_length * cos(deg_to_rad(angle)), ray_length * sin(deg_to_rad(angle))) - ) - ray.set_name("node_" + str(i)) - ray.enabled = false - ray.collide_with_areas = collide_with_areas - ray.collide_with_bodies = collide_with_bodies - ray.collision_mask = collision_mask - add_child(ray) - rays.append(ray) - - _angles.append(start + i * step) - - -func get_observation() -> Array: - return self.calculate_raycasts() - - -func calculate_raycasts() -> Array: - var result = [] - for ray in rays: - ray.enabled = true - ray.force_raycast_update() - var distance = _get_raycast_distance(ray) - result.append(distance) - ray.enabled = false - return result - - -func _get_raycast_distance(ray: RayCast2D) -> float: - if !ray.is_colliding(): - return 0.0 - - var distance = (global_position - ray.get_collision_point()).length() - distance = clamp(distance, 0.0, ray_length) - return (ray_length - distance) / ray_length diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_2d/RaycastSensor2D.tscn b/Godot/addons/godot_rl_agents/sensors/sensors_2d/RaycastSensor2D.tscn deleted file mode 100644 index 5ca402c..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_2d/RaycastSensor2D.tscn +++ /dev/null @@ -1,7 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://drvfihk5esgmv"] - -[ext_resource type="Script" path="res://addons/godot_rl_agents/sensors/sensors_2d/RaycastSensor2D.gd" id="1"] - -[node name="RaycastSensor2D" type="Node2D"] -script = ExtResource("1") -n_rays = 17.0 diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_3d/ExampleRaycastSensor3D.tscn b/Godot/addons/godot_rl_agents/sensors/sensors_3d/ExampleRaycastSensor3D.tscn deleted file mode 100644 index a8057c7..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_3d/ExampleRaycastSensor3D.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene format=3 uid="uid://biu787qh4woik"] - -[node name="ExampleRaycastSensor3D" type="Node3D"] - -[node name="Camera3D" type="Camera3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.804183, 0, 2.70146) diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_3d/GridSensor3D.gd b/Godot/addons/godot_rl_agents/sensors/sensors_3d/GridSensor3D.gd deleted file mode 100644 index 03593cc..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_3d/GridSensor3D.gd +++ /dev/null @@ -1,258 +0,0 @@ -@tool -extends ISensor3D -class_name GridSensor3D - -@export var debug_view := false: - get: - return debug_view - set(value): - debug_view = value - _update() - -@export_flags_3d_physics var detection_mask := 0: - get: - return detection_mask - set(value): - detection_mask = value - _update() - -@export var collide_with_areas := false: - get: - return collide_with_areas - set(value): - collide_with_areas = value - _update() - -@export var collide_with_bodies := false: - # NOTE! The sensor will not detect StaticBody3D, add an area to static bodies to detect them - get: - return collide_with_bodies - set(value): - collide_with_bodies = value - _update() - -@export_range(0.1, 2, 0.1) var cell_width := 1.0: - get: - return cell_width - set(value): - cell_width = value - _update() - -@export_range(0.1, 2, 0.1) var cell_height := 1.0: - get: - return cell_height - set(value): - cell_height = value - _update() - -@export_range(1, 21, 2, "or_greater") var grid_size_x := 3: - get: - return grid_size_x - set(value): - grid_size_x = value - _update() - -@export_range(1, 21, 2, "or_greater") var grid_size_z := 3: - get: - return grid_size_z - set(value): - grid_size_z = value - _update() - -var _obs_buffer: PackedFloat64Array -var _box_shape: BoxShape3D -var _collision_mapping: Dictionary -var _n_layers_per_cell: int - -var _highlighted_box_material: StandardMaterial3D -var _standard_box_material: StandardMaterial3D - - -func get_observation(): - return _obs_buffer - - -func reset(): - _obs_buffer.fill(0) - - -func _update(): - if Engine.is_editor_hint(): - if is_node_ready(): - _spawn_nodes() - - -func _ready() -> void: - _make_materials() - - if Engine.is_editor_hint(): - if get_child_count() == 0: - _spawn_nodes() - else: - _spawn_nodes() - - -func _make_materials() -> void: - if _highlighted_box_material != null and _standard_box_material != null: - return - - _standard_box_material = StandardMaterial3D.new() - _standard_box_material.set_transparency(1) # ALPHA - _standard_box_material.albedo_color = Color( - 100.0 / 255.0, 100.0 / 255.0, 100.0 / 255.0, 100.0 / 255.0 - ) - - _highlighted_box_material = StandardMaterial3D.new() - _highlighted_box_material.set_transparency(1) # ALPHA - _highlighted_box_material.albedo_color = Color( - 255.0 / 255.0, 100.0 / 255.0, 100.0 / 255.0, 100.0 / 255.0 - ) - - -func _get_collision_mapping() -> Dictionary: - # defines which layer is mapped to which cell obs index - var total_bits = 0 - var collision_mapping = {} - for i in 32: - var bit_mask = 2 ** i - if (detection_mask & bit_mask) > 0: - collision_mapping[i] = total_bits - total_bits += 1 - - return collision_mapping - - -func _spawn_nodes(): - for cell in get_children(): - cell.name = "_%s" % cell.name # Otherwise naming below will fail - cell.queue_free() - - _collision_mapping = _get_collision_mapping() - #prints("collision_mapping", _collision_mapping, len(_collision_mapping)) - # allocate memory for the observations - _n_layers_per_cell = len(_collision_mapping) - _obs_buffer = PackedFloat64Array() - _obs_buffer.resize(grid_size_x * grid_size_z * _n_layers_per_cell) - _obs_buffer.fill(0) - #prints(len(_obs_buffer), _obs_buffer ) - - _box_shape = BoxShape3D.new() - _box_shape.set_size(Vector3(cell_width, cell_height, cell_width)) - - var shift := Vector3( - -(grid_size_x / 2) * cell_width, - 0, - -(grid_size_z / 2) * cell_width, - ) - - for i in grid_size_x: - for j in grid_size_z: - var cell_position = Vector3(i * cell_width, 0.0, j * cell_width) + shift - _create_cell(i, j, cell_position) - - -func _create_cell(i: int, j: int, position: Vector3): - var cell := Area3D.new() - cell.position = position - cell.name = "GridCell %s %s" % [i, j] - - if collide_with_areas: - cell.area_entered.connect(_on_cell_area_entered.bind(i, j)) - cell.area_exited.connect(_on_cell_area_exited.bind(i, j)) - - if collide_with_bodies: - cell.body_entered.connect(_on_cell_body_entered.bind(i, j)) - cell.body_exited.connect(_on_cell_body_exited.bind(i, j)) - -# cell.body_shape_entered.connect(_on_cell_body_shape_entered.bind(i, j)) -# cell.body_shape_exited.connect(_on_cell_body_shape_exited.bind(i, j)) - - cell.collision_layer = 0 - cell.collision_mask = detection_mask - cell.monitorable = true - cell.input_ray_pickable = false - add_child(cell) - cell.set_owner(get_tree().edited_scene_root) - - var col_shape := CollisionShape3D.new() - col_shape.shape = _box_shape - col_shape.name = "CollisionShape3D" - cell.add_child(col_shape) - col_shape.set_owner(get_tree().edited_scene_root) - - if debug_view: - var box = MeshInstance3D.new() - box.name = "MeshInstance3D" - var box_mesh = BoxMesh.new() - - box_mesh.set_size(Vector3(cell_width, cell_height, cell_width)) - box_mesh.material = _standard_box_material - - box.mesh = box_mesh - cell.add_child(box) - box.set_owner(get_tree().edited_scene_root) - - -func _update_obs(cell_i: int, cell_j: int, collision_layer: int, entered: bool): - for key in _collision_mapping: - var bit_mask = 2 ** key - if (collision_layer & bit_mask) > 0: - var collison_map_index = _collision_mapping[key] - - var obs_index = ( - (cell_i * grid_size_x * _n_layers_per_cell) - + (cell_j * _n_layers_per_cell) - + collison_map_index - ) - #prints(obs_index, cell_i, cell_j) - if entered: - _obs_buffer[obs_index] += 1 - else: - _obs_buffer[obs_index] -= 1 - - -func _toggle_cell(cell_i: int, cell_j: int): - var cell = get_node_or_null("GridCell %s %s" % [cell_i, cell_j]) - - if cell == null: - print("cell not found, returning") - - var n_hits = 0 - var start_index = (cell_i * grid_size_x * _n_layers_per_cell) + (cell_j * _n_layers_per_cell) - for i in _n_layers_per_cell: - n_hits += _obs_buffer[start_index + i] - - var cell_mesh = cell.get_node_or_null("MeshInstance3D") - if n_hits > 0: - cell_mesh.mesh.material = _highlighted_box_material - else: - cell_mesh.mesh.material = _standard_box_material - - -func _on_cell_area_entered(area: Area3D, cell_i: int, cell_j: int): - #prints("_on_cell_area_entered", cell_i, cell_j) - _update_obs(cell_i, cell_j, area.collision_layer, true) - if debug_view: - _toggle_cell(cell_i, cell_j) - #print(_obs_buffer) - - -func _on_cell_area_exited(area: Area3D, cell_i: int, cell_j: int): - #prints("_on_cell_area_exited", cell_i, cell_j) - _update_obs(cell_i, cell_j, area.collision_layer, false) - if debug_view: - _toggle_cell(cell_i, cell_j) - - -func _on_cell_body_entered(body: Node3D, cell_i: int, cell_j: int): - #prints("_on_cell_body_entered", cell_i, cell_j) - _update_obs(cell_i, cell_j, body.collision_layer, true) - if debug_view: - _toggle_cell(cell_i, cell_j) - - -func _on_cell_body_exited(body: Node3D, cell_i: int, cell_j: int): - #prints("_on_cell_body_exited", cell_i, cell_j) - _update_obs(cell_i, cell_j, body.collision_layer, false) - if debug_view: - _toggle_cell(cell_i, cell_j) diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_3d/ISensor3D.gd b/Godot/addons/godot_rl_agents/sensors/sensors_3d/ISensor3D.gd deleted file mode 100644 index aca3c2d..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_3d/ISensor3D.gd +++ /dev/null @@ -1,25 +0,0 @@ -extends Node3D -class_name ISensor3D - -var _obs: Array = [] -var _active := false - - -func get_observation(): - pass - - -func activate(): - _active = true - - -func deactivate(): - _active = false - - -func _update_observation(): - pass - - -func reset(): - pass diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_3d/RGBCameraSensor3D.gd b/Godot/addons/godot_rl_agents/sensors/sensors_3d/RGBCameraSensor3D.gd deleted file mode 100644 index 1037e97..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_3d/RGBCameraSensor3D.gd +++ /dev/null @@ -1,21 +0,0 @@ -extends Node3D -class_name RGBCameraSensor3D -var camera_pixels = null - -@onready var camera_texture := $Control/TextureRect/CameraTexture as Sprite2D -@onready var sub_viewport := $SubViewport as SubViewport - - -func get_camera_pixel_encoding(): - return camera_texture.get_texture().get_image().get_data().hex_encode() - - -func get_camera_shape() -> Array: - assert( - sub_viewport.size.x >= 36 and sub_viewport.size.y >= 36, - "SubViewport size must be 36x36 or larger." - ) - if sub_viewport.transparent_bg: - return [4, sub_viewport.size.y, sub_viewport.size.x] - else: - return [3, sub_viewport.size.y, sub_viewport.size.x] diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_3d/RGBCameraSensor3D.tscn b/Godot/addons/godot_rl_agents/sensors/sensors_3d/RGBCameraSensor3D.tscn deleted file mode 100644 index 052b557..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_3d/RGBCameraSensor3D.tscn +++ /dev/null @@ -1,41 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://baaywi3arsl2m"] - -[ext_resource type="Script" path="res://addons/godot_rl_agents/sensors/sensors_3d/RGBCameraSensor3D.gd" id="1"] - -[sub_resource type="ViewportTexture" id="1"] -viewport_path = NodePath("SubViewport") - -[node name="RGBCameraSensor3D" type="Node3D"] -script = ExtResource("1") - -[node name="RemoteTransform3D" type="RemoteTransform3D" parent="."] -remote_path = NodePath("../SubViewport/Camera3D") - -[node name="SubViewport" type="SubViewport" parent="."] -size = Vector2i(32, 32) -render_target_update_mode = 3 - -[node name="Camera3D" type="Camera3D" parent="SubViewport"] -near = 0.5 - -[node name="Control" type="Control" parent="."] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="TextureRect" type="ColorRect" parent="Control"] -layout_mode = 0 -offset_left = 1096.0 -offset_top = 534.0 -offset_right = 1114.0 -offset_bottom = 552.0 -scale = Vector2(10, 10) -color = Color(0.00784314, 0.00784314, 0.00784314, 1) - -[node name="CameraTexture" type="Sprite2D" parent="Control/TextureRect"] -texture = SubResource("1") -offset = Vector2(9, 9) -flip_v = true diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_3d/RaycastSensor3D.gd b/Godot/addons/godot_rl_agents/sensors/sensors_3d/RaycastSensor3D.gd deleted file mode 100644 index 1357529..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_3d/RaycastSensor3D.gd +++ /dev/null @@ -1,185 +0,0 @@ -@tool -extends ISensor3D -class_name RayCastSensor3D -@export_flags_3d_physics var collision_mask = 1: - get: - return collision_mask - set(value): - collision_mask = value - _update() -@export_flags_3d_physics var boolean_class_mask = 1: - get: - return boolean_class_mask - set(value): - boolean_class_mask = value - _update() - -@export var n_rays_width := 6.0: - get: - return n_rays_width - set(value): - n_rays_width = value - _update() - -@export var n_rays_height := 6.0: - get: - return n_rays_height - set(value): - n_rays_height = value - _update() - -@export var ray_length := 10.0: - get: - return ray_length - set(value): - ray_length = value - _update() - -@export var cone_width := 60.0: - get: - return cone_width - set(value): - cone_width = value - _update() - -@export var cone_height := 60.0: - get: - return cone_height - set(value): - cone_height = value - _update() - -@export var collide_with_areas := false: - get: - return collide_with_areas - set(value): - collide_with_areas = value - _update() - -@export var collide_with_bodies := true: - get: - return collide_with_bodies - set(value): - collide_with_bodies = value - _update() - -@export var class_sensor := false - -var rays := [] -var geo = null - - -func _update(): - if Engine.is_editor_hint(): - if is_node_ready(): - _spawn_nodes() - - -func _ready() -> void: - if Engine.is_editor_hint(): - if get_child_count() == 0: - _spawn_nodes() - else: - _spawn_nodes() - - -func _spawn_nodes(): - print("spawning nodes") - for ray in get_children(): - ray.queue_free() - if geo: - geo.clear() - #$Lines.remove_points() - rays = [] - - var horizontal_step = cone_width / (n_rays_width) - var vertical_step = cone_height / (n_rays_height) - - var horizontal_start = horizontal_step / 2 - cone_width / 2 - var vertical_start = vertical_step / 2 - cone_height / 2 - - var points = [] - - for i in n_rays_width: - for j in n_rays_height: - var angle_w = horizontal_start + i * horizontal_step - var angle_h = vertical_start + j * vertical_step - #angle_h = 0.0 - var ray = RayCast3D.new() - var cast_to = to_spherical_coords(ray_length, angle_w, angle_h) - ray.set_target_position(cast_to) - - points.append(cast_to) - - ray.set_name("node_" + str(i) + " " + str(j)) - ray.enabled = true - ray.collide_with_bodies = collide_with_bodies - ray.collide_with_areas = collide_with_areas - ray.collision_mask = collision_mask - add_child(ray) - ray.set_owner(get_tree().edited_scene_root) - rays.append(ray) - ray.force_raycast_update() - - -# if Engine.editor_hint: -# _create_debug_lines(points) - - -func _create_debug_lines(points): - if not geo: - geo = ImmediateMesh.new() - add_child(geo) - - geo.clear() - geo.begin(Mesh.PRIMITIVE_LINES) - for point in points: - geo.set_color(Color.AQUA) - geo.add_vertex(Vector3.ZERO) - geo.add_vertex(point) - geo.end() - - -func display(): - if geo: - geo.display() - - -func to_spherical_coords(r, inc, azimuth) -> Vector3: - return Vector3( - r * sin(deg_to_rad(inc)) * cos(deg_to_rad(azimuth)), - r * sin(deg_to_rad(azimuth)), - r * cos(deg_to_rad(inc)) * cos(deg_to_rad(azimuth)) - ) - - -func get_observation() -> Array: - return self.calculate_raycasts() - - -func calculate_raycasts() -> Array: - var result = [] - for ray in rays: - ray.set_enabled(true) - ray.force_raycast_update() - var distance = _get_raycast_distance(ray) - - result.append(distance) - if class_sensor: - var hit_class: float = 0 - if ray.get_collider(): - var hit_collision_layer = ray.get_collider().collision_layer - hit_collision_layer = hit_collision_layer & collision_mask - hit_class = (hit_collision_layer & boolean_class_mask) > 0 - result.append(float(hit_class)) - ray.set_enabled(false) - return result - - -func _get_raycast_distance(ray: RayCast3D) -> float: - if !ray.is_colliding(): - return 0.0 - - var distance = (global_transform.origin - ray.get_collision_point()).length() - distance = clamp(distance, 0.0, ray_length) - return (ray_length - distance) / ray_length diff --git a/Godot/addons/godot_rl_agents/sensors/sensors_3d/RaycastSensor3D.tscn b/Godot/addons/godot_rl_agents/sensors/sensors_3d/RaycastSensor3D.tscn deleted file mode 100644 index 35f9796..0000000 --- a/Godot/addons/godot_rl_agents/sensors/sensors_3d/RaycastSensor3D.tscn +++ /dev/null @@ -1,27 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://b803cbh1fmy66"] - -[ext_resource type="Script" path="res://addons/godot_rl_agents/sensors/sensors_3d/RaycastSensor3D.gd" id="1"] - -[node name="RaycastSensor3D" type="Node3D"] -script = ExtResource("1") -n_rays_width = 4.0 -n_rays_height = 2.0 -ray_length = 11.0 - -[node name="node_1 0" type="RayCast3D" parent="."] -target_position = Vector3(-1.38686, -2.84701, 10.5343) - -[node name="node_1 1" type="RayCast3D" parent="."] -target_position = Vector3(-1.38686, 2.84701, 10.5343) - -[node name="node_2 0" type="RayCast3D" parent="."] -target_position = Vector3(1.38686, -2.84701, 10.5343) - -[node name="node_2 1" type="RayCast3D" parent="."] -target_position = Vector3(1.38686, 2.84701, 10.5343) - -[node name="node_3 0" type="RayCast3D" parent="."] -target_position = Vector3(4.06608, -2.84701, 9.81639) - -[node name="node_3 1" type="RayCast3D" parent="."] -target_position = Vector3(4.06608, 2.84701, 9.81639) diff --git a/Godot/addons/godot_rl_agents/sync.gd b/Godot/addons/godot_rl_agents/sync.gd deleted file mode 100644 index 889127a..0000000 --- a/Godot/addons/godot_rl_agents/sync.gd +++ /dev/null @@ -1,579 +0,0 @@ -extends Node - -# --fixed-fps 2000 --disable-render-loop - -enum ControlModes { HUMAN, TRAINING, ONNX_INFERENCE } -@export var control_mode: ControlModes = ControlModes.TRAINING -@export_range(1, 10, 1, "or_greater") var action_repeat := 8 -@export_range(0, 10, 0.1, "or_greater") var speed_up := 1.0 -@export var onnx_model_path := "" - -# Onnx model stored for each requested path -var onnx_models: Dictionary - -@onready var start_time = Time.get_ticks_msec() - -const MAJOR_VERSION := "0" -const MINOR_VERSION := "7" -const DEFAULT_PORT := "11008" -const DEFAULT_SEED := "1" -var stream: StreamPeerTCP = null -var connected = false -var message_center -var should_connect = true - -var all_agents: Array -var agents_training: Array -## Policy name of each agent, for use with multi-policy multi-agent RL cases -var agents_training_policy_names: Array[String] = ["shared_policy"] -var agents_inference: Array -var agents_heuristic: Array - -## For recording expert demos -var agent_demo_record: Node -## File path for writing recorded trajectories -var expert_demo_save_path: String -## Stores recorded trajectories -var demo_trajectories: Array -## A trajectory includes obs: Array, acts: Array, terminal (set in Python env instead) -var current_demo_trajectory: Array - -var need_to_send_obs = false -var args = null -var initialized = false -var just_reset = false -var onnx_model = null -var n_action_steps = 0 - -var _action_space_training: Array[Dictionary] = [] -var _action_space_inference: Array[Dictionary] = [] -var _obs_space_training: Array[Dictionary] = [] - -# Called when the node enters the scene tree for the first time. -func _ready(): - await get_tree().root.ready - get_tree().set_pause(true) - _initialize() - await get_tree().create_timer(1.0).timeout - get_tree().set_pause(false) - - -func _initialize(): - _get_agents() - args = _get_args() - Engine.physics_ticks_per_second = _get_speedup() * 60 # Replace with function body. - Engine.time_scale = _get_speedup() * 1.0 - prints( - "physics ticks", - Engine.physics_ticks_per_second, - Engine.time_scale, - _get_speedup(), - speed_up - ) - - _set_heuristic("human", all_agents) - - _initialize_training_agents() - _initialize_inference_agents() - _initialize_demo_recording() - - _set_seed() - _set_action_repeat() - initialized = true - - -func _initialize_training_agents(): - if agents_training.size() > 0: - _obs_space_training.resize(agents_training.size()) - _action_space_training.resize(agents_training.size()) - for agent_idx in range(0, agents_training.size()): - _obs_space_training[agent_idx] = agents_training[agent_idx].get_obs_space() - _action_space_training[agent_idx] = agents_training[agent_idx].get_action_space() - connected = connect_to_server() - if connected: - _set_heuristic("model", agents_training) - _handshake() - _send_env_info() - else: - push_warning( - "Couldn't connect to Python server, using human controls instead. ", - "Did you start the training server using e.g. `gdrl` from the console?" - ) - - -func _initialize_inference_agents(): - if agents_inference.size() > 0: - if control_mode == ControlModes.ONNX_INFERENCE: - assert( - FileAccess.file_exists(onnx_model_path), - "Onnx Model Path set on Sync node does not exist: %s" % onnx_model_path - ) - onnx_models[onnx_model_path] = ONNXModel.new(onnx_model_path, 1) - - for agent in agents_inference: - var action_space = agent.get_action_space() - _action_space_inference.append(action_space) - - var agent_onnx_model: ONNXModel - if agent.onnx_model_path.is_empty(): - assert( - onnx_models.has(onnx_model_path), - ( - "Node %s has no onnx model path set " % agent.get_path() - + "and sync node's control mode is not set to OnnxInference. " - + "Either add the path to the AIController, " - + "or if you want to use the path set on sync node instead, " - + "set control mode to OnnxInference." - ) - ) - prints( - "Info: AIController %s" % agent.get_path(), - "has no onnx model path set.", - "Using path set on the sync node instead." - ) - agent_onnx_model = onnx_models[onnx_model_path] - else: - if not onnx_models.has(agent.onnx_model_path): - assert( - FileAccess.file_exists(agent.onnx_model_path), - ( - "Onnx Model Path set on %s node does not exist: %s" - % [agent.get_path(), agent.onnx_model_path] - ) - ) - onnx_models[agent.onnx_model_path] = ONNXModel.new(agent.onnx_model_path, 1) - agent_onnx_model = onnx_models[agent.onnx_model_path] - - agent.onnx_model = agent_onnx_model - if not agent_onnx_model.action_means_only_set: - agent_onnx_model.set_action_means_only(action_space) - - _set_heuristic("model", agents_inference) - - -func _initialize_demo_recording(): - if agent_demo_record: - expert_demo_save_path = agent_demo_record.expert_demo_save_path - assert( - not expert_demo_save_path.is_empty(), - "Expert demo save path set in %s is empty." % agent_demo_record.get_path() - ) - - InputMap.add_action("RemoveLastDemoEpisode") - InputMap.action_add_event( - "RemoveLastDemoEpisode", agent_demo_record.remove_last_episode_key - ) - current_demo_trajectory.resize(2) - current_demo_trajectory[0] = [] - current_demo_trajectory[1] = [] - agent_demo_record.heuristic = "demo_record" - - -func _physics_process(_delta): - # two modes, human control, agent control - # pause tree, send obs, get actions, set actions, unpause tree - - _demo_record_process() - - if n_action_steps % action_repeat != 0: - n_action_steps += 1 - return - - n_action_steps += 1 - - _training_process() - _inference_process() - _heuristic_process() - - -func _training_process(): - if connected: - get_tree().set_pause(true) - - if just_reset: - just_reset = false - var obs = _get_obs_from_agents(agents_training) - - var reply = {"type": "reset", "obs": obs} - _send_dict_as_json_message(reply) - # this should go straight to getting the action and setting it checked the agent, no need to perform one phyics tick - get_tree().set_pause(false) - return - - if need_to_send_obs: - need_to_send_obs = false - var reward = _get_reward_from_agents() - var done = _get_done_from_agents() - #_reset_agents_if_done() # this ensures the new observation is from the next env instance : NEEDS REFACTOR - - var obs = _get_obs_from_agents(agents_training) - - var reply = {"type": "step", "obs": obs, "reward": reward, "done": done} - _send_dict_as_json_message(reply) - - var handled = handle_message() - - -func _inference_process(): - if agents_inference.size() > 0: - var obs: Array = _get_obs_from_agents(agents_inference) - var actions = [] - - for agent_id in range(0, agents_inference.size()): - var model: ONNXModel = agents_inference[agent_id].onnx_model - var action = model.run_inference( - obs[agent_id]["obs"], 1.0 - ) - var action_dict = _extract_action_dict( - action["output"], _action_space_inference[agent_id], model.action_means_only - ) - actions.append(action_dict) - - _set_agent_actions(actions, agents_inference) - _reset_agents_if_done(agents_inference) - get_tree().set_pause(false) - - -func _demo_record_process(): - if not agent_demo_record: - return - - if Input.is_action_just_pressed("RemoveLastDemoEpisode"): - print("[Sync script][Demo recorder] Removing last recorded episode.") - demo_trajectories.remove_at(demo_trajectories.size() - 1) - print("Remaining episode count: %d" % demo_trajectories.size()) - - if n_action_steps % agent_demo_record.action_repeat != 0: - return - - var obs_dict: Dictionary = agent_demo_record.get_obs() - - # Get the current obs from the agent - assert( - obs_dict.has("obs"), - "Demo recorder needs an 'obs' key in get_obs() returned dictionary to record obs from." - ) - current_demo_trajectory[0].append(obs_dict.obs) - - # Get the action applied for the current obs from the agent - agent_demo_record.set_action() - var acts = agent_demo_record.get_action() - - var terminal = agent_demo_record.get_done() - # Record actions only for non-terminal states - if terminal: - agent_demo_record.set_done_false() - else: - current_demo_trajectory[1].append(acts) - - if terminal: - #current_demo_trajectory[2].append(true) - demo_trajectories.append(current_demo_trajectory.duplicate(true)) - print("[Sync script][Demo recorder] Recorded episode count: %d" % demo_trajectories.size()) - current_demo_trajectory[0].clear() - current_demo_trajectory[1].clear() - - -func _heuristic_process(): - for agent in agents_heuristic: - _reset_agents_if_done(agents_heuristic) - - -func _extract_action_dict(action_array: Array, action_space: Dictionary, action_means_only: bool): - var index = 0 - var result = {} - for key in action_space.keys(): - var size = action_space[key]["size"] - var action_type = action_space[key]["action_type"] - if action_type == "discrete": - var largest_logit: float # Value of the largest logit for this action in the actions array - var largest_logit_idx: int # Index of the largest logit for this action in the actions array - for logit_idx in range(0, size): - var logit_value = action_array[index + logit_idx] - if logit_value > largest_logit: - largest_logit = logit_value - largest_logit_idx = logit_idx - result[key] = largest_logit_idx # Index of the largest logit is the discrete action value - index += size - elif action_type == "continuous": - # For continous actions, we only take the action mean values - result[key] = clamp_array(action_array.slice(index, index + size), -1.0, 1.0) - if action_means_only: - index += size # model only outputs action means, so we move index by size - else: - index += size * 2 # model outputs logstd after action mean, we skip the logstd part - - else: - assert(false, 'Only "discrete" and "continuous" action types supported. Found: %s action type set.' % action_type) - - - return result - - -## For AIControllers that inherit mode from sync, sets the correct mode. -func _set_agent_mode(agent: Node): - var agent_inherits_mode: bool = agent.control_mode == agent.ControlModes.INHERIT_FROM_SYNC - - if agent_inherits_mode: - match control_mode: - ControlModes.HUMAN: - agent.control_mode = agent.ControlModes.HUMAN - ControlModes.TRAINING: - agent.control_mode = agent.ControlModes.TRAINING - ControlModes.ONNX_INFERENCE: - agent.control_mode = agent.ControlModes.ONNX_INFERENCE - - -func _get_agents(): - all_agents = get_tree().get_nodes_in_group("AGENT") - for agent in all_agents: - _set_agent_mode(agent) - - if agent.control_mode == agent.ControlModes.TRAINING: - agents_training.append(agent) - elif agent.control_mode == agent.ControlModes.ONNX_INFERENCE: - agents_inference.append(agent) - elif agent.control_mode == agent.ControlModes.HUMAN: - agents_heuristic.append(agent) - elif agent.control_mode == agent.ControlModes.RECORD_EXPERT_DEMOS: - assert( - not agent_demo_record, - "Currently only a single AIController can be used for recording expert demos." - ) - agent_demo_record = agent - - var training_agent_count = agents_training.size() - agents_training_policy_names.resize(training_agent_count) - for i in range(0, training_agent_count): - agents_training_policy_names[i] = agents_training[i].policy_name - - -func _set_heuristic(heuristic, agents: Array): - for agent in agents: - agent.set_heuristic(heuristic) - - -func _handshake(): - print("performing handshake") - - var json_dict = _get_dict_json_message() - assert(json_dict["type"] == "handshake") - var major_version = json_dict["major_version"] - var minor_version = json_dict["minor_version"] - if major_version != MAJOR_VERSION: - print("WARNING: major verison mismatch ", major_version, " ", MAJOR_VERSION) - if minor_version != MINOR_VERSION: - print("WARNING: minor verison mismatch ", minor_version, " ", MINOR_VERSION) - - print("handshake complete") - - -func _get_dict_json_message(): - # returns a dictionary from of the most recent message - # this is not waiting - while stream.get_available_bytes() == 0: - stream.poll() - if stream.get_status() != 2: - print("server disconnected status, closing") - get_tree().quit() - return null - - OS.delay_usec(10) - - var message = stream.get_string() - var json_data = JSON.parse_string(message) - - return json_data - - -func _send_dict_as_json_message(dict): - stream.put_string(JSON.stringify(dict, "", false)) - - -func _send_env_info(): - var json_dict = _get_dict_json_message() - assert(json_dict["type"] == "env_info") - - var message = { - "type": "env_info", - "observation_space": _obs_space_training, - "action_space": _action_space_training, - "n_agents": len(agents_training), - "agent_policy_names": agents_training_policy_names - } - _send_dict_as_json_message(message) - - -func connect_to_server(): - print("Waiting for one second to allow server to start") - OS.delay_msec(1000) - print("trying to connect to server") - stream = StreamPeerTCP.new() - - # "localhost" was not working on windows VM, had to use the IP - var ip = "127.0.0.1" - var port = _get_port() - var connect = stream.connect_to_host(ip, port) - stream.set_no_delay(true) # TODO check if this improves performance or not - stream.poll() - # Fetch the status until it is either connected (2) or failed to connect (3) - while stream.get_status() < 2: - stream.poll() - return stream.get_status() == 2 - - -func _get_args(): - print("getting command line arguments") - var arguments = {} - for argument in OS.get_cmdline_args(): - print(argument) - if argument.find("=") > -1: - var key_value = argument.split("=") - arguments[key_value[0].lstrip("--")] = key_value[1] - else: - # Options without an argument will be present in the dictionary, - # with the value set to an empty string. - arguments[argument.lstrip("--")] = "" - - return arguments - - -func _get_speedup(): - print(args) - return args.get("speedup", str(speed_up)).to_float() - - -func _get_port(): - return args.get("port", DEFAULT_PORT).to_int() - - -func _set_seed(): - var _seed = args.get("env_seed", DEFAULT_SEED).to_int() - seed(_seed) - - -func _set_action_repeat(): - action_repeat = args.get("action_repeat", str(action_repeat)).to_int() - - -func disconnect_from_server(): - stream.disconnect_from_host() - - -func handle_message() -> bool: - # get json message: reset, step, close - var message = _get_dict_json_message() - if message["type"] == "close": - print("received close message, closing game") - get_tree().quit() - get_tree().set_pause(false) - return true - - if message["type"] == "reset": - print("resetting all agents") - _reset_agents() - just_reset = true - get_tree().set_pause(false) - #print("resetting forcing draw") -# RenderingServer.force_draw() -# var obs = _get_obs_from_agents() -# print("obs ", obs) -# var reply = { -# "type": "reset", -# "obs": obs -# } -# _send_dict_as_json_message(reply) - return true - - if message["type"] == "call": - var method = message["method"] - var returns = _call_method_on_agents(method) - var reply = {"type": "call", "returns": returns} - print("calling method from Python") - _send_dict_as_json_message(reply) - return handle_message() - - if message["type"] == "action": - var action = message["action"] - _set_agent_actions(action, agents_training) - need_to_send_obs = true - get_tree().set_pause(false) - return true - - print("message was not handled") - return false - - -func _call_method_on_agents(method): - var returns = [] - for agent in all_agents: - returns.append(agent.call(method)) - - return returns - - -func _reset_agents_if_done(agents = all_agents): - for agent in agents: - if agent.get_done(): - agent.set_done_false() - - -func _reset_agents(agents = all_agents): - for agent in agents: - agent.needs_reset = true - #agent.reset() - - -func _get_obs_from_agents(agents: Array = all_agents): - var obs = [] - for agent in agents: - obs.append(agent.get_obs()) - return obs - - -func _get_reward_from_agents(agents: Array = agents_training): - var rewards = [] - for agent in agents: - rewards.append(agent.get_reward()) - agent.zero_reward() - return rewards - - -func _get_done_from_agents(agents: Array = agents_training): - var dones = [] - for agent in agents: - var done = agent.get_done() - if done: - agent.set_done_false() - dones.append(done) - return dones - - -func _set_agent_actions(actions, agents: Array = all_agents): - for i in range(len(actions)): - agents[i].set_action(actions[i]) - - -func clamp_array(arr: Array, min: float, max: float): - var output: Array = [] - for a in arr: - output.append(clamp(a, min, max)) - return output - - -## Save recorded export demos on window exit (Close game window instead of "Stop" button in Godot Editor) -func _notification(what): - if demo_trajectories.size() == 0 or expert_demo_save_path.is_empty(): - return - - if what == NOTIFICATION_PREDELETE: - var json_string = JSON.stringify(demo_trajectories, "", false) - var file = FileAccess.open(expert_demo_save_path, FileAccess.WRITE) - - if not file: - var error: Error = FileAccess.get_open_error() - assert(not error, "There was an error opening the file: %d" % error) - - file.store_line(json_string) - var error = file.get_error() - assert(not error, "There was an error after trying to write to the file: %d" % error) diff --git a/Godot/agent.py b/Godot/agent.py deleted file mode 100644 index a7aa494..0000000 --- a/Godot/agent.py +++ /dev/null @@ -1,159 +0,0 @@ -import args -import os -import pathlib - -import torch as T -import torch.nn as nn - -from typing import Callable - -from stable_baselines3 import PPO -from stable_baselines3.common.callbacks import CheckpointCallback -from stable_baselines3.common.vec_env.vec_monitor import VecMonitor - -from godot_rl.core.utils import can_import -from godot_rl.wrappers.onnx.stable_baselines_export import export_ppo_model_as_onnx -from godot_rl.wrappers.stable_baselines_wrapper import StableBaselinesGodotEnv - -def main(policy_name=None, policy=None, parseargs=None): - if can_import("ray"): - print("WARNING: SB3 and ray[rllib] are not compatible.") - - args, extras = parseargs - # args, extras = args.parse_args() - - def handle_onnx_export(): - ''' - Enforces the onnx and zip extentions when saving models. - This avoids potential conflicts in case of identical names and extentions - ''' - if args.onnx_export_path is not None: - path_onnx = pathlib.Path(args.onnx_export_path).with_suffix(".onnx") - print(f"Exporting onnx to: {os.path.abspath(path_onnx)}") - export_ppo_model_as_onnx(model, str(path_onnx)) - - def handle_model_save(): - if args.save_model_path is not None: - zip_save_path = pathlib.Path(Args.save_model_path).with_suffix(".zip") - print(f"Saving model to: {os.path.abspath(zip_save_path)}") - model.save(zip_save_path) - - def close_env(): - try: - print("Closing env...") - env.close() - except Exception as e: - print(f"Exception while closing env: {e}") - - if policy_name is None: - path_checkpoint = os.path.join(args.exper_dir, f"{args.exper_name}_checkpoints") - else: - path_checkpoint = os.path.join(args.exper_dir, f"{policy_name}_checkpoints") - - abs_path_checkpoint = os.path.abspath(path_checkpoint) - - if args.save_checkpoint_frequency is not None and os.path.isdir(path_checkpoint): - raise RuntimeError( - f"{abs_path_checkpoint} already exists." - "Use a different directory or different name." - "If you want to override previous checkpoints you have to delete them manually." - ) - - if args.inference and args.resume_model_path is None: - raise parser.error( - "Using --inference requires --resume_model_path to be set." - ) - - if args.env_path is None and args.viz: - print("Info: using --viz without --env_path set has no effect.") - print("\nIn editor training will always render.") - - env = StableBaselinesGodotEnv( - env_path=args.env_path, - show_window=args.viz, - seed=args.seed, - n_parallel=args.n_parallel, - speedup=args.speedup - ) - env = VecMonitor(env) - - # LR schedule code snippet from: - # https://stable-baselines3.readthedocs.io/en/master/guide/examples.html#learning-rate-schedule - def linear_schedule(initial_value: float) -> Callable[[float], float]: - """ - Linear learning rate schedule. - - :param initial_value: Initial learning rate. - :return: schedule that computes - current learning rate depending on remaining progress - """ - - def func(progress_remaining: float) -> float: - """ - Progress will decrease from 1 (beginning) to 0. - - :param progress_remaining: - :return: current learning rate - """ - return progress_remaining * initial_value - - return func - - if args.resume_model_path is None: - if not args.linear_lr_schedule: - learning_rate = 0.0003 - else: - linear_schedule(0.0003) - - model: PPO = PPO( - # 'MultiInputPolicy' serves as an alias for MultiInputActorCriticPolicy - "MultiInputPolicy", - env, - batch_size=64, - ent_coef=0.01, - verbose=2, - n_steps=256, - tensorboard_log=args.exper_dir, - learning_rate=learning_rate, - policy_kwargs=policy, - ) - else: - path_zip = pathlib.Path(args.resume_model_path) - print(f"Loading model: {os.path.abspath(pathzip)}") - model: PPO = PPO.load( - path_zip, - env=env, - tensorboard_log=args.exper_dir - ) - - if args.inference: - obs = env.reset() - for i in range(args.timesteps): - action, _state = model.predict(obs, deterministic=True) - obs, reward, done, info = env.step(action) - else: - learn_arguments = dict( - total_timesteps=args.timesteps, - tb_log_name=policy_name - ) - if args.save_checkpoint_frequency: - print("Checkpoint saving enabled.") - print(f"\nCheckpoints will be saved to {abs_path_checkpoint}") - checkpoint_callback = CheckpointCallback( - save_freq=(args.save_checkpoint_frequency // env.num_envs), - save_path=path_checkpoint, - name_prefix=policy_name - ) - learn_arguments["callback"] = checkpoint_callback - try: - model.learn(**learn_arguments) - except KeyboardInterrupt: - print( - """ - Training interrupted by user. Will save if --save_model_path was set and/or export if --onnx_export was set. - """ - ) - - close_env() - handle_onnx_export() - handle_model_save() diff --git a/Godot/args.py b/Godot/args.py deleted file mode 100644 index 78a3483..0000000 --- a/Godot/args.py +++ /dev/null @@ -1,109 +0,0 @@ -import argparse - -def parse_args(): - - parser = argparse.ArgumentParser( - prog='Pneuma', - allow_abbrev=False, - description='A Reinforcement Learning platform made with Godot', - ) - parser.add_argument( - "--env_path", - default=None, - type=str, - help="The Godot binary to use, do not include for in editor training", - ) - parser.add_argument( - "--exper_dir", - default="logs/sb3", - type=str, - help="The name of the experiment directory, in which the tensorboard logs and checkpoints (if enabled) are " - "getting stored.", - ) - parser.add_argument( - "--exper_name", - default="experiment", - type=str, - help="The name of the experiment, which will be displayed in tensorboard and " - "for checkpoint directory and name (if enabled).", - ) - parser.add_argument( - "--seed", - type=int, - default=1, - help="seed of the experiment" - ) - parser.add_argument( - "--resume_model_path", - default=None, - type=str, - help="The path to a model file previously saved using --save_model_path or a checkpoint saved using " - "--save_checkpoints_frequency. Use this to resume training or infer from a saved model.", - ) - parser.add_argument( - "--save_model_path", - default=None, - type=str, - help="The path to use for saving the trained sb3 model after training is complete. Saved model can be used later " - "to resume training. Extension will be set to .zip", - ) - parser.add_argument( - "--save_checkpoint_frequency", - default=None, - type=int, - help=( - "If set, will save checkpoints every 'frequency' environment steps. " - "Requires a unique --experiment_name or --experiment_dir for each run. " - "Does not need --save_model_path to be set. " - ), - ) - parser.add_argument( - "--onnx_export_path", - default=None, - type=str, - help="If included, will export onnx file after training to the path specified.", - ) - parser.add_argument( - "--timesteps", - default=1_000_000, - type=int, - help="The number of environment steps to train for, default is 1_000_000. If resuming from a saved model, " - "it will continue training for this amount of steps from the saved state without counting previously trained " - "steps", - ) - parser.add_argument( - "--inference", - default=False, - action="store_true", - help="Instead of training, it will run inference on a loaded model for --timesteps steps. " - "Requires --resume_model_path to be set.", - ) - parser.add_argument( - "--linear_lr_schedule", - default=False, - action="store_true", - help="Use a linear LR schedule for training. If set, learning rate will decrease until it reaches 0 at " - "--timesteps" - "value. Note: On resuming training, the schedule will reset. If disabled, constant LR will be used.", - ) - parser.add_argument( - "--viz", - action="store_true", - help="If set, the simulation will be displayed in a window during training. Otherwise " - "training will run without rendering the simulation. This setting does not apply to in-editor training.", - default=False, - ) - parser.add_argument( - "--speedup", - default=1, - type=int, - help="Whether to speed up the physics in the env" - ) - parser.add_argument( - "--n_parallel", - default=1, - type=int, - help="How many instances of the environment executable to " "launch - requires --env_path to be set if > 1.", - ) - - return parser.parse_known_args() diff --git a/Godot/assets/audio/Fire.wav b/Godot/assets/audio/Fire.wav deleted file mode 100644 index 97bb0e4..0000000 Binary files a/Godot/assets/audio/Fire.wav and /dev/null differ diff --git a/Godot/assets/audio/attack/claw.wav b/Godot/assets/audio/attack/claw.wav deleted file mode 100644 index 1a98889..0000000 Binary files a/Godot/assets/audio/attack/claw.wav and /dev/null differ diff --git a/Godot/assets/audio/attack/fireball.wav b/Godot/assets/audio/attack/fireball.wav deleted file mode 100644 index dc2c852..0000000 Binary files a/Godot/assets/audio/attack/fireball.wav and /dev/null differ diff --git a/Godot/assets/audio/attack/slash.wav b/Godot/assets/audio/attack/slash.wav deleted file mode 100644 index 942aeb0..0000000 Binary files a/Godot/assets/audio/attack/slash.wav and /dev/null differ diff --git a/Godot/assets/audio/death.wav b/Godot/assets/audio/death.wav deleted file mode 100644 index ef03ab1..0000000 Binary files a/Godot/assets/audio/death.wav and /dev/null differ diff --git a/Godot/assets/audio/heal.wav b/Godot/assets/audio/heal.wav deleted file mode 100644 index e94bab0..0000000 Binary files a/Godot/assets/audio/heal.wav and /dev/null differ diff --git a/Godot/assets/audio/hit.wav b/Godot/assets/audio/hit.wav deleted file mode 100644 index 435b317..0000000 Binary files a/Godot/assets/audio/hit.wav and /dev/null differ diff --git a/Godot/assets/audio/main.ogg b/Godot/assets/audio/main.ogg deleted file mode 100644 index da5d252..0000000 Binary files a/Godot/assets/audio/main.ogg and /dev/null differ diff --git a/Godot/assets/audio/sword.wav b/Godot/assets/audio/sword.wav deleted file mode 100644 index 2e962d0..0000000 Binary files a/Godot/assets/audio/sword.wav and /dev/null differ diff --git a/Godot/assets/graphics/test/player.png b/Godot/assets/graphics/test/player.png deleted file mode 100644 index dbbe852..0000000 Binary files a/Godot/assets/graphics/test/player.png and /dev/null differ diff --git a/Godot/assets/graphics/test/rock.png b/Godot/assets/graphics/test/rock.png deleted file mode 100644 index 30a74e5..0000000 Binary files a/Godot/assets/graphics/test/rock.png and /dev/null differ diff --git a/Godot/code/AIController2D.gd b/Godot/code/AIController2D.gd deleted file mode 100644 index efbd446..0000000 --- a/Godot/code/AIController2D.gd +++ /dev/null @@ -1,53 +0,0 @@ -extends AIController2D - -# meta-name: AI Controller Logic -# meta-description: Methods that need implementing for AI controllers -# meta-default: true - -#-- Methods that need implementing using the "extend script" option in Godot --# - -@onready var player = $".." -@onready var bamboos = $"../../../Bamboos" -@onready var move: int - -func get_obs() -> Dictionary: - var dict = {"obs":[ - player.position.x, - player.position.y, - player.health, - player.experience, - ]} - for bamboo in bamboos.get_children(): - dict["obs"].append(bamboo.position.x) - dict["obs"].append(bamboo.position.y) - dict["obs"].append(bamboo.health) - dict["obs"].append(bamboo.position.direction_to(player.position).x) - dict["obs"].append(bamboo.position.direction_to(player.position).y) - return dict - -func get_reward() -> float: - return reward - -func get_action_space() -> Dictionary: - return { - "move" : { - "size": 5, - "action_type": "discrete" - } - } - -func set_action(action) -> void: - move = action["move"] -# -----------------------------------------------------------------------------# - -#-- Methods that can be overridden if needed --# - -#func get_obs_space() -> Dictionary: -# May need overriding if the obs space is complex -# var obs = get_obs() -# return { -# "obs": { -# "size": [len(obs["obs"])], -# "space": "box" -# }, -# } diff --git a/Godot/code/bamboo.gd b/Godot/code/bamboo.gd deleted file mode 100644 index 3c44d52..0000000 --- a/Godot/code/bamboo.gd +++ /dev/null @@ -1,98 +0,0 @@ -extends CharacterBody2D - -const SPEED = 150 -const DAMAGE = 7 -const EXP_AMOUNT = 1 - -@onready var knockback_timer = $KnockbackTimer -@onready var attack_timer = $AttackTimer -@onready var notice = $Notice -@onready var attack = $Attack - -@onready var animation_player = $AnimationPlayer - -@export var health = 100 - -var knockback = Vector2.ZERO -var near_player = false -var is_attacking = false -var is_knocked = false -var is_dead = false -var can_move = true - -signal death - - -func change_hp(dmg): - if not is_dead: - health += dmg - if health <= 0: - health = 0 - for body in attack.get_overlapping_bodies(): - body.change_hp(DAMAGE) - body.add_exp(EXP_AMOUNT) - is_dead = true - death.emit() - -func _on_notice_body_entered(body): - near_player = true - body.ai_controller.reward += 1 - - -func _on_notice_body_exited(body): - near_player = false - -func _on_attack_body_entered(body): - is_attacking = false - body.ai_controller.reward += 1 - -func _on_attack_body_exited(body): - is_attacking = true - -func _physics_process(delta): - if near_player and not is_dead: - if not is_knocked: - for body in notice.get_overlapping_bodies(): - if self.to_local(body.global_position).x > 30: - velocity.x = SPEED - elif self.to_local(body.global_position).x < -30: - velocity.x = -SPEED - else: - velocity.x = move_toward(velocity.x, 0, SPEED) - - if self.to_local(body.global_position).y > 30: - velocity.y = SPEED - elif self.to_local(body.global_position).y < -30: - velocity.y = -SPEED - else: - velocity.y = move_toward(velocity.y, 0, SPEED) - - if not is_attacking: - for enemy in attack.get_overlapping_bodies(): - enemy.change_hp(-DAMAGE) - attack_timer.start() - is_attacking = true - - - else: - if can_move: - self.velocity = knockback - knockback_timer.start() - can_move = false - else: - velocity.x = move_toward(velocity.x, 0, SPEED) - velocity.y = move_toward(velocity.y, 0, SPEED) - - move_and_slide() - - -func _on_attack_timer_timeout(): - is_attacking = false - -func _on_knockback_timer_timeout(): - knockback = Vector2.ZERO - is_knocked = false - can_move = true - -func _on_death(): - animation_player.play("death") diff --git a/Godot/code/exp.gd b/Godot/code/exp.gd deleted file mode 100644 index 2bf741f..0000000 --- a/Godot/code/exp.gd +++ /dev/null @@ -1,3 +0,0 @@ -extends Label - - diff --git a/Godot/code/killzone.gd b/Godot/code/killzone.gd deleted file mode 100644 index 65bb34d..0000000 --- a/Godot/code/killzone.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends Area2D - -func _on_body_entered(body): - body.death.emit() diff --git a/Godot/code/main.gd b/Godot/code/main.gd deleted file mode 100644 index 8d0814e..0000000 --- a/Godot/code/main.gd +++ /dev/null @@ -1,62 +0,0 @@ -extends Node2D - -@onready var main_camera = %Overworld -@onready var timer = %WorldTimer - -@onready var players = $Players -#TODO: Fix camera -@onready var player_camera = $Players/Player/Camera -@onready var bamboos = $Bamboos - -@onready var player_starting_pos = [] -@onready var bamboo_starting_pos = [] - - - -# Called when the node enters the scene tree for the first time. -func _ready(): - main_camera.make_current() - for player in players.get_children(): - player_starting_pos.append(player.position) - for bamboo in bamboos.get_children(): - bamboo_starting_pos.append(bamboo.position) - timer.start() - -func _input(event): - if event.is_action_pressed("reset_camera"): - main_camera.make_current() - player_camera.visible = false - -func _process(delta): - var dead_state = 0 - var i=0 - - for bamboo in bamboos.get_children(): - if bamboo.is_dead: - dead_state += 1 - - if dead_state == bamboos.get_children().size(): - for player in players.get_children(): - player.change_hp(-1000) - -func _on_player_death(): - var i = 0 - for player in players.get_children(): - player.position = player_starting_pos[i] - player.health = 100 - player.ai_controller.done = true - player.ai_controller.reset() - i += 1 - var j = 0 - for bamboo in bamboos.get_children(): - bamboo.position = bamboo_starting_pos[j] - bamboo.health = 40 - bamboo.is_dead = false - bamboo.animation_player.play("RESET") - j += 1 - -func _on_timer_timeout(): - for player in players.get_children(): - player.change_hp(-1000) - timer.start() - diff --git a/Godot/code/player.gd b/Godot/code/player.gd deleted file mode 100644 index 783ae3a..0000000 --- a/Godot/code/player.gd +++ /dev/null @@ -1,190 +0,0 @@ -extends CharacterBody2D - -const SPEED = 300.0 - -var is_attacking = false -var last_action = 0 -var cooldown_start = false - -var zoomed_in = false - -var starting_position = self.position - -signal death - -@onready var ai_controller = $AIController2D - -@onready var animated_sprite = $AnimatedSprite2D - -@onready var overworld = %Overworld - -@onready var camera = $Camera -@onready var exp_label = $Camera/ExpPanel/ExpLabel -@onready var hp_label = $Camera/HPPanel/HPLabel - -@onready var attack_timer = $AttackTimer -@onready var weapon = $Weapon -@onready var weapon_player = $Weapon/AnimationPlayer - - -@export var health = 100 -@export var experience = 0 - - -func _ready(): - exp_label.text = "Experience\n"+str(experience) - hp_label.text = "Health\n"+str(health) - -func add_exp(exp_amount): - experience += exp_amount - ai_controller.reward = experience - exp_label.text = "Experience\n"+str(experience) - - -func change_hp(dmg): - health += dmg - #ai_controller.reward += dmg/10 - if health <= 0: - health = 0 - add_exp(-1) - death.emit() - hp_label.text = "Health\n"+str(health) - -func move_left(): - last_action = 1 - velocity.x = -SPEED -func move_right(): - last_action = 3 - velocity.x = SPEED -func move_up(): - last_action = 2 - velocity.y = -SPEED -func move_down(): - last_action = 0 - velocity.y = SPEED - -func _physics_process(_delta): - velocity.x = move_toward(velocity.x, 0, SPEED) - velocity.y = move_toward(velocity.y, 0, SPEED) - - # Get the input direction and handle the movement/deceleration. - if not is_attacking: - # Handle and movement - ## X Axis - if Input.is_action_pressed("move_right") or ai_controller.move == 3: - move_right() - if Input.is_action_pressed("move_left") or ai_controller.move == 1: - move_left() - - ## Y Axis - if Input.is_action_pressed("move_up") or ai_controller.move == 2: - move_up() - if Input.is_action_pressed("move_down") or ai_controller.move == 0: - move_down() - - # Handle animations - if velocity.x > 0: - animated_sprite.play("move_right") - elif velocity.x < 0: - animated_sprite.play("move_left") - elif velocity.y > 0 : - animated_sprite.play("move_down") - elif velocity.y < 0: - animated_sprite.play("move_up") - - # Stop movement or change direction (left/right or up/down) - if Input.is_action_just_released("move_right"): - if Input.is_action_pressed("move_left"): - move_left() - else: - last_action = 3 - velocity.x = move_toward(velocity.x, 0, SPEED) - animated_sprite.play("idle_right") - if Input.is_action_just_released("move_left"): - if Input.is_action_pressed("move_right"): - move_right() - else: - last_action = 1 - velocity.x = move_toward(velocity.x, 0, SPEED) - animated_sprite.play("idle_left") - - if Input.is_action_just_released("move_up"): - if Input.is_action_pressed("move_down"): - move_down() - else: - last_action = 2 - velocity.y = move_toward(velocity.y, 0, SPEED) - animated_sprite.play("idle_up") - if Input.is_action_just_released("move_down"): - if Input.is_action_pressed("move_up"): - move_up() - else: - last_action = 0 - velocity.y = move_toward(velocity.y, 0, SPEED) - animated_sprite.play("idle_down") - - # Handle attacking and magic - if Input.is_action_just_pressed("attack") or ai_controller.move == 4: - - is_attacking = true - if last_action == 1: - weapon.position = Vector2i(-54,14) - weapon.rotation_degrees = 90*last_action - animated_sprite.play("attack_left") - weapon_player.play("attack") - elif last_action == 2: - weapon.position = Vector2i(8,-44) - animated_sprite.play("attack_up") - weapon.rotation_degrees = 90*last_action - weapon_player.play("attack") - elif last_action == 3: - weapon.rotation_degrees = 90*last_action - weapon.position = Vector2i(54,14) - animated_sprite.play("attack_right") - weapon_player.play("attack") - else: - weapon.position = Vector2i(-12,52) - animated_sprite.play("attack_down") - weapon.rotation_degrees = 90*last_action - weapon_player.play("attack") -# - ## TODO: Fix magic - #elif Input.is_action_just_pressed("cast_magic"): - #is_attacking = true - #velocity.x = move_toward(velocity.x, 0, SPEED) - #velocity.y = move_toward(velocity.y, 0, SPEED) - #if last_action == 1: - #animated_sprite.play("attack_right") - #elif last_action == 2: - #animated_sprite.play("attack_left") - #elif last_action == 3: - #animated_sprite.play("attack_up") - #else: - #animated_sprite.play("attack_down") - - move_and_slide() - - else: - attack_cooldown() - -func attack_cooldown(): - if cooldown_start == false: - attack_timer.start() - cooldown_start = true - -# TODO: Find more elegant way to go back -func _on_button_pressed(): - if not zoomed_in: - camera.visible = true - camera.make_current() - zoomed_in = true - else: - camera.visible = false - overworld.make_current() - zoomed_in = false - - -func _on_attack_timer_timeout(): - is_attacking = false - cooldown_start = false - weapon_player.play("RESET") diff --git a/Godot/code/weapon.gd b/Godot/code/weapon.gd deleted file mode 100644 index 7151c3b..0000000 --- a/Godot/code/weapon.gd +++ /dev/null @@ -1,12 +0,0 @@ -extends Area2D - -const DAMAGE = 20 -const KNOCKBACK_STR = 120 - -func _on_body_entered(body): - var direction = self.global_position.direction_to(body.global_position) - var knockback_force = direction * KNOCKBACK_STR - if not body.is_dead: - body.change_hp(-DAMAGE) - body.knockback = knockback_force - body.is_knocked = true diff --git a/Godot/default_bus_layout.tres b/Godot/default_bus_layout.tres deleted file mode 100644 index 23bf494..0000000 --- a/Godot/default_bus_layout.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="AudioBusLayout" format=3 uid="uid://crne71jxj5jib"] - -[resource] -bus/1/name = &"SFX" -bus/1/solo = false -bus/1/mute = false -bus/1/bypass_fx = false -bus/1/volume_db = -5.32994 -bus/1/send = &"Master" diff --git a/Godot/icon.svg b/Godot/icon.svg deleted file mode 100644 index fcfa04a..0000000 --- a/Godot/icon.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - -Created with Fabric.js 5.2.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Godot/logs/sb3/basic_sb3/events.out.tfevents.1716039274.valanixos.5296.0 b/Godot/logs/sb3/basic_sb3/events.out.tfevents.1716039274.valanixos.5296.0 deleted file mode 100644 index 36f9f80..0000000 Binary files a/Godot/logs/sb3/basic_sb3/events.out.tfevents.1716039274.valanixos.5296.0 and /dev/null differ diff --git a/Godot/logs/sb3/experiment_1/events.out.tfevents.1716072142.valanixos.132214.0 b/Godot/logs/sb3/experiment_1/events.out.tfevents.1716072142.valanixos.132214.0 deleted file mode 100644 index f9ffd02..0000000 Binary files a/Godot/logs/sb3/experiment_1/events.out.tfevents.1716072142.valanixos.132214.0 and /dev/null differ diff --git a/Godot/logs/sb3/experiment_2/events.out.tfevents.1716141463.valanixos.1153942.0 b/Godot/logs/sb3/experiment_2/events.out.tfevents.1716141463.valanixos.1153942.0 deleted file mode 100644 index 339b7cc..0000000 Binary files a/Godot/logs/sb3/experiment_2/events.out.tfevents.1716141463.valanixos.1153942.0 and /dev/null differ diff --git a/Godot/logs/sb3/policy_small_1/events.out.tfevents.1716193022.valanixos.22227.0 b/Godot/logs/sb3/policy_small_1/events.out.tfevents.1716193022.valanixos.22227.0 deleted file mode 100644 index e9efcf9..0000000 Binary files a/Godot/logs/sb3/policy_small_1/events.out.tfevents.1716193022.valanixos.22227.0 and /dev/null differ diff --git a/Godot/logs/sb3/sb3_bigger_net/events.out.tfevents.1716047196.valanixos.40801.0 b/Godot/logs/sb3/sb3_bigger_net/events.out.tfevents.1716047196.valanixos.40801.0 deleted file mode 100644 index 54e8f5f..0000000 Binary files a/Godot/logs/sb3/sb3_bigger_net/events.out.tfevents.1716047196.valanixos.40801.0 and /dev/null differ diff --git a/Godot/logs/sb3/sb3_bigger_net_tanh/events.out.tfevents.1716062748.valanixos.97391.0 b/Godot/logs/sb3/sb3_bigger_net_tanh/events.out.tfevents.1716062748.valanixos.97391.0 deleted file mode 100644 index ef34e74..0000000 Binary files a/Godot/logs/sb3/sb3_bigger_net_tanh/events.out.tfevents.1716062748.valanixos.97391.0 and /dev/null differ diff --git a/Godot/main.py b/Godot/main.py deleted file mode 100644 index ead1e90..0000000 --- a/Godot/main.py +++ /dev/null @@ -1,6 +0,0 @@ -from policy import policies -from agent import main -import args - -for policy_name, policy in policies.items(): - main(policy_name=policy_name, policy=policy, parseargs=args.parse_args()) diff --git a/Godot/pneuma.sh b/Godot/pneuma.sh deleted file mode 100755 index f448f3b..0000000 --- a/Godot/pneuma.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -echo -ne '\033c\033]0;Pneuma\a' -base_path="$(dirname "$(realpath "$0")")" -"$base_path/pneuma.x86_64" "$@" diff --git a/Godot/poetry.lock b/Godot/poetry.lock deleted file mode 100644 index cd5ded8..0000000 --- a/Godot/poetry.lock +++ /dev/null @@ -1,2207 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. - -[[package]] -name = "absl-py" -version = "2.1.0" -description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." -optional = false -python-versions = ">=3.7" -files = [ - {file = "absl-py-2.1.0.tar.gz", hash = "sha256:7820790efbb316739cde8b4e19357243fc3608a152024288513dd968d7d959ff"}, - {file = "absl_py-2.1.0-py3-none-any.whl", hash = "sha256:526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308"}, -] - -[[package]] -name = "certifi" -version = "2024.2.2" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "cloudpickle" -version = "3.0.0" -description = "Pickler class to extend the standard pickle.Pickler functionality" -optional = false -python-versions = ">=3.8" -files = [ - {file = "cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7"}, - {file = "cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882"}, -] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coloredlogs" -version = "15.0.1" -description = "Colored terminal output for Python's logging module" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, - {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, -] - -[package.dependencies] -humanfriendly = ">=9.1" - -[package.extras] -cron = ["capturer (>=2.4)"] - -[[package]] -name = "contourpy" -version = "1.2.1" -description = "Python library for calculating contours of 2D quadrilateral grids" -optional = false -python-versions = ">=3.9" -files = [ - {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, - {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, - {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, - {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, - {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, - {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, - {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, - {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"}, - {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"}, - {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"}, - {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"}, - {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"}, - {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"}, - {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"}, - {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"}, - {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"}, - {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"}, - {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"}, - {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"}, - {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"}, - {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"}, - {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"}, - {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"}, - {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"}, - {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"}, - {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"}, - {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"}, - {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"}, - {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"}, - {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"}, - {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"}, - {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"}, - {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"}, - {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"}, - {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"}, - {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"}, - {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"}, - {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"}, - {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"}, - {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"}, - {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, -] - -[package.dependencies] -numpy = ">=1.20" - -[package.extras] -bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"] -test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] - -[[package]] -name = "cycler" -version = "0.12.1" -description = "Composable style cycles" -optional = false -python-versions = ">=3.8" -files = [ - {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, - {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, -] - -[package.extras] -docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] -tests = ["pytest", "pytest-cov", "pytest-xdist"] - -[[package]] -name = "dm-tree" -version = "0.1.8" -description = "Tree is a library for working with nested data structures." -optional = false -python-versions = "*" -files = [ - {file = "dm-tree-0.1.8.tar.gz", hash = "sha256:0fcaabbb14e7980377439e7140bd05552739ca5e515ecb3119f234acee4b9430"}, - {file = "dm_tree-0.1.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:35cc164a79336bfcfafb47e5f297898359123bbd3330c1967f0c4994f9cf9f60"}, - {file = "dm_tree-0.1.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39070ba268c0491af9fe7a58644d99e8b4f2cde6e5884ba3380bddc84ed43d5f"}, - {file = "dm_tree-0.1.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2869228d9c619074de501a3c10dc7f07c75422f8fab36ecdcb859b6f1b1ec3ef"}, - {file = "dm_tree-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d20f2faa3672b52e5013f4077117bfb99c4cfc0b445d3bde1584c34032b57436"}, - {file = "dm_tree-0.1.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5483dca4d7eb1a0d65fe86d3b6a53ae717face83c1f17e0887b1a4a64ae5c410"}, - {file = "dm_tree-0.1.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d7c26e431fc93cc7e0cba867eb000db6a05f6f2b25af11ac4e9dada88fc5bca"}, - {file = "dm_tree-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d714371bb08839e4e5e29024fc95832d9affe129825ef38836b143028bd144"}, - {file = "dm_tree-0.1.8-cp310-cp310-win_amd64.whl", hash = "sha256:d40fa4106ca6edc66760246a08f500ec0c85ef55c762fb4a363f6ee739ba02ee"}, - {file = "dm_tree-0.1.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad16ceba90a56ec47cf45b21856d14962ac314787975ef786efb5e6e9ca75ec7"}, - {file = "dm_tree-0.1.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:803bfc53b4659f447ac694dbd04235f94a73ef7c1fd1e0df7c84ac41e0bc963b"}, - {file = "dm_tree-0.1.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:378cc8ad93c5fe3590f405a309980721f021c790ca1bdf9b15bb1d59daec57f5"}, - {file = "dm_tree-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1607ce49aa42f010d1e5e616d92ce899d66835d4d8bea49679582435285515de"}, - {file = "dm_tree-0.1.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:343a4a4ebaa127451ff971254a4be4084eb4bdc0b2513c32b46f6f728fd03f9e"}, - {file = "dm_tree-0.1.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa42a605d099ee7d41ba2b5fb75e21423951fd26e5d50583a00471238fb3021d"}, - {file = "dm_tree-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83b7764de0d855338abefc6e3ee9fe40d301668310aa3baea3f778ff051f4393"}, - {file = "dm_tree-0.1.8-cp311-cp311-win_amd64.whl", hash = "sha256:a5d819c38c03f0bb5b3b3703c60e4b170355a0fc6b5819325bf3d4ceb3ae7e80"}, - {file = "dm_tree-0.1.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ea9e59e0451e7d29aece402d9f908f2e2a80922bcde2ebfd5dcb07750fcbfee8"}, - {file = "dm_tree-0.1.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:94d3f0826311f45ee19b75f5b48c99466e4218a0489e81c0f0167bda50cacf22"}, - {file = "dm_tree-0.1.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:435227cf3c5dc63f4de054cf3d00183790bd9ead4c3623138c74dde7f67f521b"}, - {file = "dm_tree-0.1.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09964470f76a5201aff2e8f9b26842976de7889300676f927930f6285e256760"}, - {file = "dm_tree-0.1.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75c5d528bb992981c20793b6b453e91560784215dffb8a5440ba999753c14ceb"}, - {file = "dm_tree-0.1.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a94aba18a35457a1b5cd716fd7b46c5dafdc4cf7869b4bae665b91c4682a8e"}, - {file = "dm_tree-0.1.8-cp312-cp312-win_amd64.whl", hash = "sha256:96a548a406a6fb15fe58f6a30a57ff2f2aafbf25f05afab00c8f5e5977b6c715"}, - {file = "dm_tree-0.1.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8c60a7eadab64c2278861f56bca320b2720f163dca9d7558103c3b77f2416571"}, - {file = "dm_tree-0.1.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af4b3d372f2477dcd89a6e717e4a575ca35ccc20cc4454a8a4b6f8838a00672d"}, - {file = "dm_tree-0.1.8-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de287fabc464b8734be251e46e06aa9aa1001f34198da2b6ce07bd197172b9cb"}, - {file = "dm_tree-0.1.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:054b461f8176f4bce7a21f7b1870f873a1ced3bdbe1282c816c550bb43c71fa6"}, - {file = "dm_tree-0.1.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f7915660f59c09068e428613c480150180df1060561fd0d1470684ae7007bd1"}, - {file = "dm_tree-0.1.8-cp37-cp37m-win_amd64.whl", hash = "sha256:b9f89a454e98806b44fe9d40ec9eee61f848388f7e79ac2371a55679bd5a3ac6"}, - {file = "dm_tree-0.1.8-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0e9620ccf06393eb6b613b5e366469304622d4ea96ae6540b28a33840e6c89cf"}, - {file = "dm_tree-0.1.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b095ba4f8ca1ba19350fd53cf1f8f3eb0bd406aa28af64a6dfc86707b32a810a"}, - {file = "dm_tree-0.1.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b9bd9b9ccb59409d33d51d84b7668010c04c2af7d4a371632874c1ca356cff3d"}, - {file = "dm_tree-0.1.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d3172394079a86c3a759179c65f64c48d1a42b89495fcf38976d11cc3bb952c"}, - {file = "dm_tree-0.1.8-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1612fcaecd79023dbc6a6ae48d51a80beb5c385d6f3f6d71688e57bc8d07de8"}, - {file = "dm_tree-0.1.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5c8c12e3fda754ef6af94161bacdaeda816d941995fac415d6855c6c386af68"}, - {file = "dm_tree-0.1.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:694c3654cfd2a81552c08ec66bb5c4a3d48fa292b9a181880fb081c36c5b9134"}, - {file = "dm_tree-0.1.8-cp38-cp38-win_amd64.whl", hash = "sha256:bb2d109f42190225112da899b9f3d46d0d5f26aef501c61e43529fe9322530b5"}, - {file = "dm_tree-0.1.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d16e1f2a073604cfcc09f7131ae8d534674f43c3aef4c25742eae295bc60d04f"}, - {file = "dm_tree-0.1.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:250b692fb75f45f02e2f58fbef9ab338904ef334b90557565621fa251df267cf"}, - {file = "dm_tree-0.1.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81fce77f22a302d7a5968aebdf4efafef4def7ce96528719a354e6990dcd49c7"}, - {file = "dm_tree-0.1.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7ac31b9aecccb2c6e1ab29706f6ded3eba0c2c69c770322c9c685929c3d6afb"}, - {file = "dm_tree-0.1.8-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fe962015b2fe1282892b28ebe962faed53c7f98d942da9a4625cbf27baef913"}, - {file = "dm_tree-0.1.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c52cbf4f8b3dbd0beaedf44f69fa85eec5e9dede612e08035e06ada6ec9426"}, - {file = "dm_tree-0.1.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:181c35521d480d0365f39300542cb6cd7fd2b77351bb43d7acfda15aef63b317"}, - {file = "dm_tree-0.1.8-cp39-cp39-win_amd64.whl", hash = "sha256:8ed3564abed97c806db122c2d3e1a2b64c74a63debe9903aad795167cc301368"}, -] - -[[package]] -name = "farama-notifications" -version = "0.0.4" -description = "Notifications for all Farama Foundation maintained libraries." -optional = false -python-versions = "*" -files = [ - {file = "Farama-Notifications-0.0.4.tar.gz", hash = "sha256:13fceff2d14314cf80703c8266462ebf3733c7d165336eee998fc58e545efd18"}, - {file = "Farama_Notifications-0.0.4-py3-none-any.whl", hash = "sha256:14de931035a41961f7c056361dc7f980762a143d05791ef5794a751a2caf05ae"}, -] - -[[package]] -name = "filelock" -version = "3.14.0" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.8" -files = [ - {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, - {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] - -[[package]] -name = "flatbuffers" -version = "24.3.25" -description = "The FlatBuffers serialization format for Python" -optional = false -python-versions = "*" -files = [ - {file = "flatbuffers-24.3.25-py2.py3-none-any.whl", hash = "sha256:8dbdec58f935f3765e4f7f3cf635ac3a77f83568138d6a2311f524ec96364812"}, - {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"}, -] - -[[package]] -name = "fonttools" -version = "4.51.0" -description = "Tools to manipulate font files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, - {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, - {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, - {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, - {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, - {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, - {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, - {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, - {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, - {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, - {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, - {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, - {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, - {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, - {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, - {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, - {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, - {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, - {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, - {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, - {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, - {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, - {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, - {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, - {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, - {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, - {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, - {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, - {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, - {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, - {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, - {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, - {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, - {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, - {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, - {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, - {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, - {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, - {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, - {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, - {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, - {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "pycairo", "scipy"] -lxml = ["lxml (>=4.0)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] -symfont = ["sympy"] -type1 = ["xattr"] -ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.1.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] - -[[package]] -name = "fsspec" -version = "2024.3.1" -description = "File-system specification" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512"}, - {file = "fsspec-2024.3.1.tar.gz", hash = "sha256:f39780e282d7d117ffb42bb96992f8a90795e4d0fb0f661a70ca39fe9c43ded9"}, -] - -[package.extras] -abfs = ["adlfs"] -adl = ["adlfs"] -arrow = ["pyarrow (>=1)"] -dask = ["dask", "distributed"] -devel = ["pytest", "pytest-cov"] -dropbox = ["dropbox", "dropboxdrivefs", "requests"] -full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] -fuse = ["fusepy"] -gcs = ["gcsfs"] -git = ["pygit2"] -github = ["requests"] -gs = ["gcsfs"] -gui = ["panel"] -hdfs = ["pyarrow (>=1)"] -http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] -libarchive = ["libarchive-c"] -oci = ["ocifs"] -s3 = ["s3fs"] -sftp = ["paramiko"] -smb = ["smbprotocol"] -ssh = ["paramiko"] -tqdm = ["tqdm"] - -[[package]] -name = "godot_rl" -version = "0.7.0" -description = "A Deep Reinforcement Learning package for the Godot game engine" -optional = false -python-versions = ">=3.7" -files = [ - {file = "main.zip", hash = "sha256:06fb53a2d74205f67c3bd46337727f382ceef7781aff37b50d13e685e0e4e6e9"}, -] - -[package.dependencies] -gymnasium = "*" -huggingface-hub = ">=0.10" -huggingface-sb3 = "*" -numpy = "*" -onnx = "*" -onnxruntime = "*" -stable-baselines3 = ">=2.0.0" -tensorboard = "*" -wget = "*" - -[package.extras] -cleanrl = ["wandb"] -dev = ["black", "flake8", "isort", "pytest (>=6.0)", "pytest-xdist", "pyyaml (>=5.3.1)"] -rllib = ["ray[rllib]"] -sf = ["sample-factory"] -test = ["pytest (>=6.0)", "pytest-xdist"] - -[package.source] -type = "url" -url = "https://github.com/edbeeching/godot_rl_agents/archive/refs/heads/main.zip" - -[[package]] -name = "grpcio" -version = "1.63.0" -description = "HTTP/2-based RPC framework" -optional = false -python-versions = ">=3.8" -files = [ - {file = "grpcio-1.63.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:2e93aca840c29d4ab5db93f94ed0a0ca899e241f2e8aec6334ab3575dc46125c"}, - {file = "grpcio-1.63.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:91b73d3f1340fefa1e1716c8c1ec9930c676d6b10a3513ab6c26004cb02d8b3f"}, - {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b3afbd9d6827fa6f475a4f91db55e441113f6d3eb9b7ebb8fb806e5bb6d6bd0d"}, - {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f3f6883ce54a7a5f47db43289a0a4c776487912de1a0e2cc83fdaec9685cc9f"}, - {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf8dae9cc0412cb86c8de5a8f3be395c5119a370f3ce2e69c8b7d46bb9872c8d"}, - {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08e1559fd3b3b4468486b26b0af64a3904a8dbc78d8d936af9c1cf9636eb3e8b"}, - {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5c039ef01516039fa39da8a8a43a95b64e288f79f42a17e6c2904a02a319b357"}, - {file = "grpcio-1.63.0-cp310-cp310-win32.whl", hash = "sha256:ad2ac8903b2eae071055a927ef74121ed52d69468e91d9bcbd028bd0e554be6d"}, - {file = "grpcio-1.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:b2e44f59316716532a993ca2966636df6fbe7be4ab6f099de6815570ebe4383a"}, - {file = "grpcio-1.63.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:f28f8b2db7b86c77916829d64ab21ff49a9d8289ea1564a2b2a3a8ed9ffcccd3"}, - {file = "grpcio-1.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:65bf975639a1f93bee63ca60d2e4951f1b543f498d581869922910a476ead2f5"}, - {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:b5194775fec7dc3dbd6a935102bb156cd2c35efe1685b0a46c67b927c74f0cfb"}, - {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4cbb2100ee46d024c45920d16e888ee5d3cf47c66e316210bc236d5bebc42b3"}, - {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff737cf29b5b801619f10e59b581869e32f400159e8b12d7a97e7e3bdeee6a2"}, - {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd1e68776262dd44dedd7381b1a0ad09d9930ffb405f737d64f505eb7f77d6c7"}, - {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:93f45f27f516548e23e4ec3fbab21b060416007dbe768a111fc4611464cc773f"}, - {file = "grpcio-1.63.0-cp311-cp311-win32.whl", hash = "sha256:878b1d88d0137df60e6b09b74cdb73db123f9579232c8456f53e9abc4f62eb3c"}, - {file = "grpcio-1.63.0-cp311-cp311-win_amd64.whl", hash = "sha256:756fed02dacd24e8f488f295a913f250b56b98fb793f41d5b2de6c44fb762434"}, - {file = "grpcio-1.63.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:93a46794cc96c3a674cdfb59ef9ce84d46185fe9421baf2268ccb556f8f81f57"}, - {file = "grpcio-1.63.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a7b19dfc74d0be7032ca1eda0ed545e582ee46cd65c162f9e9fc6b26ef827dc6"}, - {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:8064d986d3a64ba21e498b9a376cbc5d6ab2e8ab0e288d39f266f0fca169b90d"}, - {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:219bb1848cd2c90348c79ed0a6b0ea51866bc7e72fa6e205e459fedab5770172"}, - {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2d60cd1d58817bc5985fae6168d8b5655c4981d448d0f5b6194bbcc038090d2"}, - {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9e350cb096e5c67832e9b6e018cf8a0d2a53b2a958f6251615173165269a91b0"}, - {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:56cdf96ff82e3cc90dbe8bac260352993f23e8e256e063c327b6cf9c88daf7a9"}, - {file = "grpcio-1.63.0-cp312-cp312-win32.whl", hash = "sha256:3a6d1f9ea965e750db7b4ee6f9fdef5fdf135abe8a249e75d84b0a3e0c668a1b"}, - {file = "grpcio-1.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:d2497769895bb03efe3187fb1888fc20e98a5f18b3d14b606167dacda5789434"}, - {file = "grpcio-1.63.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:fdf348ae69c6ff484402cfdb14e18c1b0054ac2420079d575c53a60b9b2853ae"}, - {file = "grpcio-1.63.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a3abfe0b0f6798dedd2e9e92e881d9acd0fdb62ae27dcbbfa7654a57e24060c0"}, - {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:6ef0ad92873672a2a3767cb827b64741c363ebaa27e7f21659e4e31f4d750280"}, - {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b416252ac5588d9dfb8a30a191451adbf534e9ce5f56bb02cd193f12d8845b7f"}, - {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3b77eaefc74d7eb861d3ffbdf91b50a1bb1639514ebe764c47773b833fa2d91"}, - {file = "grpcio-1.63.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b005292369d9c1f80bf70c1db1c17c6c342da7576f1c689e8eee4fb0c256af85"}, - {file = "grpcio-1.63.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cdcda1156dcc41e042d1e899ba1f5c2e9f3cd7625b3d6ebfa619806a4c1aadda"}, - {file = "grpcio-1.63.0-cp38-cp38-win32.whl", hash = "sha256:01799e8649f9e94ba7db1aeb3452188048b0019dc37696b0f5ce212c87c560c3"}, - {file = "grpcio-1.63.0-cp38-cp38-win_amd64.whl", hash = "sha256:6a1a3642d76f887aa4009d92f71eb37809abceb3b7b5a1eec9c554a246f20e3a"}, - {file = "grpcio-1.63.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:75f701ff645858a2b16bc8c9fc68af215a8bb2d5a9b647448129de6e85d52bce"}, - {file = "grpcio-1.63.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cacdef0348a08e475a721967f48206a2254a1b26ee7637638d9e081761a5ba86"}, - {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:0697563d1d84d6985e40ec5ec596ff41b52abb3fd91ec240e8cb44a63b895094"}, - {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6426e1fb92d006e47476d42b8f240c1d916a6d4423c5258ccc5b105e43438f61"}, - {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48cee31bc5f5a31fb2f3b573764bd563aaa5472342860edcc7039525b53e46a"}, - {file = "grpcio-1.63.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:50344663068041b34a992c19c600236e7abb42d6ec32567916b87b4c8b8833b3"}, - {file = "grpcio-1.63.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:259e11932230d70ef24a21b9fb5bb947eb4703f57865a404054400ee92f42f5d"}, - {file = "grpcio-1.63.0-cp39-cp39-win32.whl", hash = "sha256:a44624aad77bf8ca198c55af811fd28f2b3eaf0a50ec5b57b06c034416ef2d0a"}, - {file = "grpcio-1.63.0-cp39-cp39-win_amd64.whl", hash = "sha256:166e5c460e5d7d4656ff9e63b13e1f6029b122104c1633d5f37eaea348d7356d"}, - {file = "grpcio-1.63.0.tar.gz", hash = "sha256:f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.63.0)"] - -[[package]] -name = "gymnasium" -version = "0.28.1" -description = "A standard API for reinforcement learning and a diverse set of reference environments (formerly Gym)." -optional = false -python-versions = ">=3.7" -files = [ - {file = "gymnasium-0.28.1-py3-none-any.whl", hash = "sha256:7bc9a5bce1022f997d1dbc152fc91d1ac977bad9cc7794cdc25437010867cabf"}, - {file = "gymnasium-0.28.1.tar.gz", hash = "sha256:4c2c745808792c8f45c6e88ad0a5504774394e0c126f6e3db555e720d3da6f24"}, -] - -[package.dependencies] -cloudpickle = ">=1.2.0" -farama-notifications = ">=0.0.1" -jax-jumpy = ">=1.0.0" -numpy = ">=1.21.0" -typing-extensions = ">=4.3.0" - -[package.extras] -accept-rom-license = ["autorom[accept-rom-license] (>=0.4.2,<0.5.0)"] -all = ["box2d-py (==2.3.5)", "imageio (>=2.14.1)", "jax (==0.3.24)", "jaxlib (==0.3.24)", "lz4 (>=3.1.0)", "matplotlib (>=3.0)", "moviepy (>=1.0.0)", "mujoco (>=2.3.2)", "mujoco-py (>=2.1,<2.2)", "opencv-python (>=3.0)", "pygame (==2.1.3)", "shimmy[atari] (>=0.1.0,<1.0)", "swig (==4.*)", "torch (>=1.0.0)"] -atari = ["shimmy[atari] (>=0.1.0,<1.0)"] -box2d = ["box2d-py (==2.3.5)", "pygame (==2.1.3)", "swig (==4.*)"] -classic-control = ["pygame (==2.1.3)", "pygame (==2.1.3)"] -jax = ["jax (==0.3.24)", "jaxlib (==0.3.24)"] -mujoco = ["imageio (>=2.14.1)", "mujoco (>=2.3.2)"] -mujoco-py = ["mujoco-py (>=2.1,<2.2)", "mujoco-py (>=2.1,<2.2)"] -other = ["lz4 (>=3.1.0)", "matplotlib (>=3.0)", "moviepy (>=1.0.0)", "opencv-python (>=3.0)", "torch (>=1.0.0)"] -testing = ["pytest (==7.1.3)", "scipy (==1.7.3)"] -toy-text = ["pygame (==2.1.3)", "pygame (==2.1.3)"] - -[[package]] -name = "huggingface-hub" -version = "0.23.0" -description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "huggingface_hub-0.23.0-py3-none-any.whl", hash = "sha256:075c30d48ee7db2bba779190dc526d2c11d422aed6f9044c5e2fdc2c432fdb91"}, - {file = "huggingface_hub-0.23.0.tar.gz", hash = "sha256:7126dedd10a4c6fac796ced4d87a8cf004efc722a5125c2c09299017fa366fa9"}, -] - -[package.dependencies] -filelock = "*" -fsspec = ">=2023.5.0" -packaging = ">=20.9" -pyyaml = ">=5.1" -requests = "*" -tqdm = ">=4.42.1" -typing-extensions = ">=3.7.4.3" - -[package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] -cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] -fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] -hf-transfer = ["hf-transfer (>=0.1.4)"] -inference = ["aiohttp", "minijinja (>=1.0)"] -quality = ["mypy (==1.5.1)", "ruff (>=0.3.0)"] -tensorflow = ["graphviz", "pydot", "tensorflow"] -tensorflow-testing = ["keras (<3.0)", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] -torch = ["safetensors", "torch"] -typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] - -[[package]] -name = "huggingface-sb3" -version = "3.0" -description = "Additional code for Stable-baselines3 to load and upload models from the Hub." -optional = false -python-versions = "*" -files = [ - {file = "huggingface_sb3-3.0-py3-none-any.whl", hash = "sha256:f543f1e5d840425044b9f83cd6915da77cc308c1a7dd4585208f17efad1e8321"}, - {file = "huggingface_sb3-3.0.tar.gz", hash = "sha256:abaf901808dc5827976e3029646e463da65536068d910cd8ef4a8e985087d515"}, -] - -[package.dependencies] -cloudpickle = ">=1.6" -huggingface-hub = ">=0.8,<1.0" -numpy = "*" -pyyaml = ">=6.0,<7.0" -wasabi = "*" - -[package.extras] -quality = ["black (>=22.0,<23.0)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"] - -[[package]] -name = "humanfriendly" -version = "10.0" -description = "Human friendly output for text interfaces using Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, - {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, -] - -[package.dependencies] -pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} - -[[package]] -name = "idna" -version = "3.7" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, -] - -[[package]] -name = "imageio" -version = "2.34.1" -description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." -optional = false -python-versions = ">=3.8" -files = [ - {file = "imageio-2.34.1-py3-none-any.whl", hash = "sha256:408c1d4d62f72c9e8347e7d1ca9bc11d8673328af3913868db3b828e28b40a4c"}, - {file = "imageio-2.34.1.tar.gz", hash = "sha256:f13eb76e4922f936ac4a7fec77ce8a783e63b93543d4ea3e40793a6cabd9ac7d"}, -] - -[package.dependencies] -numpy = "*" -pillow = ">=8.3.2" - -[package.extras] -all-plugins = ["astropy", "av", "imageio-ffmpeg", "pillow-heif", "psutil", "tifffile"] -all-plugins-pypy = ["av", "imageio-ffmpeg", "pillow-heif", "psutil", "tifffile"] -build = ["wheel"] -dev = ["black", "flake8", "fsspec[github]", "pytest", "pytest-cov"] -docs = ["numpydoc", "pydata-sphinx-theme", "sphinx (<6)"] -ffmpeg = ["imageio-ffmpeg", "psutil"] -fits = ["astropy"] -full = ["astropy", "av", "black", "flake8", "fsspec[github]", "gdal", "imageio-ffmpeg", "itk", "numpydoc", "pillow-heif", "psutil", "pydata-sphinx-theme", "pytest", "pytest-cov", "sphinx (<6)", "tifffile", "wheel"] -gdal = ["gdal"] -itk = ["itk"] -linting = ["black", "flake8"] -pillow-heif = ["pillow-heif"] -pyav = ["av"] -test = ["fsspec[github]", "pytest", "pytest-cov"] -tifffile = ["tifffile"] - -[[package]] -name = "intel-openmp" -version = "2021.4.0" -description = "Intel OpenMP* Runtime Library" -optional = false -python-versions = "*" -files = [ - {file = "intel_openmp-2021.4.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:41c01e266a7fdb631a7609191709322da2bbf24b252ba763f125dd651bcc7675"}, - {file = "intel_openmp-2021.4.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:3b921236a38384e2016f0f3d65af6732cf2c12918087128a9163225451e776f2"}, - {file = "intel_openmp-2021.4.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:e2240ab8d01472fed04f3544a878cda5da16c26232b7ea1b59132dbfb48b186e"}, - {file = "intel_openmp-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:6e863d8fd3d7e8ef389d52cf97a50fe2afe1a19247e8c0d168ce021546f96fc9"}, - {file = "intel_openmp-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:eef4c8bcc8acefd7f5cd3b9384dbf73d59e2c99fc56545712ded913f43c4a94f"}, -] - -[[package]] -name = "jax-jumpy" -version = "1.0.0" -description = "Common backend for Jax or Numpy." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jax-jumpy-1.0.0.tar.gz", hash = "sha256:195fb955cc4c2b7f0b1453e3cb1fb1c414a51a407ffac7a51e69a73cb30d59ad"}, - {file = "jax_jumpy-1.0.0-py3-none-any.whl", hash = "sha256:ab7e01454bba462de3c4d098e3e585c302a8f06bc36d9182ab4e7e4aa7067c5e"}, -] - -[package.dependencies] -numpy = ">=1.18.0" - -[package.extras] -jax = ["jax (>=0.3.24)", "jaxlib (>=0.3.24)"] -testing = ["pytest (==7.1.3)"] - -[[package]] -name = "jinja2" -version = "3.1.4" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "kiwisolver" -version = "1.4.5" -description = "A fast implementation of the Cassowary constraint solver" -optional = false -python-versions = ">=3.7" -files = [ - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, - {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, -] - -[[package]] -name = "lazy-loader" -version = "0.4" -description = "Makes it easy to load subpackages and functions on demand." -optional = false -python-versions = ">=3.7" -files = [ - {file = "lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc"}, - {file = "lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1"}, -] - -[package.dependencies] -packaging = "*" - -[package.extras] -dev = ["changelist (==0.5)"] -lint = ["pre-commit (==3.7.0)"] -test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"] - -[[package]] -name = "lz4" -version = "4.3.3" -description = "LZ4 Bindings for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "lz4-4.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b891880c187e96339474af2a3b2bfb11a8e4732ff5034be919aa9029484cd201"}, - {file = "lz4-4.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:222a7e35137d7539c9c33bb53fcbb26510c5748779364014235afc62b0ec797f"}, - {file = "lz4-4.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f76176492ff082657ada0d0f10c794b6da5800249ef1692b35cf49b1e93e8ef7"}, - {file = "lz4-4.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1d18718f9d78182c6b60f568c9a9cec8a7204d7cb6fad4e511a2ef279e4cb05"}, - {file = "lz4-4.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cdc60e21ec70266947a48839b437d46025076eb4b12c76bd47f8e5eb8a75dcc"}, - {file = "lz4-4.3.3-cp310-cp310-win32.whl", hash = "sha256:c81703b12475da73a5d66618856d04b1307e43428a7e59d98cfe5a5d608a74c6"}, - {file = "lz4-4.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:43cf03059c0f941b772c8aeb42a0813d68d7081c009542301637e5782f8a33e2"}, - {file = "lz4-4.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:30e8c20b8857adef7be045c65f47ab1e2c4fabba86a9fa9a997d7674a31ea6b6"}, - {file = "lz4-4.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2f7b1839f795315e480fb87d9bc60b186a98e3e5d17203c6e757611ef7dcef61"}, - {file = "lz4-4.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edfd858985c23523f4e5a7526ca6ee65ff930207a7ec8a8f57a01eae506aaee7"}, - {file = "lz4-4.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e9c410b11a31dbdc94c05ac3c480cb4b222460faf9231f12538d0074e56c563"}, - {file = "lz4-4.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2507ee9c99dbddd191c86f0e0c8b724c76d26b0602db9ea23232304382e1f21"}, - {file = "lz4-4.3.3-cp311-cp311-win32.whl", hash = "sha256:f180904f33bdd1e92967923a43c22899e303906d19b2cf8bb547db6653ea6e7d"}, - {file = "lz4-4.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:b14d948e6dce389f9a7afc666d60dd1e35fa2138a8ec5306d30cd2e30d36b40c"}, - {file = "lz4-4.3.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e36cd7b9d4d920d3bfc2369840da506fa68258f7bb176b8743189793c055e43d"}, - {file = "lz4-4.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:31ea4be9d0059c00b2572d700bf2c1bc82f241f2c3282034a759c9a4d6ca4dc2"}, - {file = "lz4-4.3.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33c9a6fd20767ccaf70649982f8f3eeb0884035c150c0b818ea660152cf3c809"}, - {file = "lz4-4.3.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca8fccc15e3add173da91be8f34121578dc777711ffd98d399be35487c934bf"}, - {file = "lz4-4.3.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d84b479ddf39fe3ea05387f10b779155fc0990125f4fb35d636114e1c63a2e"}, - {file = "lz4-4.3.3-cp312-cp312-win32.whl", hash = "sha256:337cb94488a1b060ef1685187d6ad4ba8bc61d26d631d7ba909ee984ea736be1"}, - {file = "lz4-4.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:5d35533bf2cee56f38ced91f766cd0038b6abf46f438a80d50c52750088be93f"}, - {file = "lz4-4.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:363ab65bf31338eb364062a15f302fc0fab0a49426051429866d71c793c23394"}, - {file = "lz4-4.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a136e44a16fc98b1abc404fbabf7f1fada2bdab6a7e970974fb81cf55b636d0"}, - {file = "lz4-4.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abc197e4aca8b63f5ae200af03eb95fb4b5055a8f990079b5bdf042f568469dd"}, - {file = "lz4-4.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56f4fe9c6327adb97406f27a66420b22ce02d71a5c365c48d6b656b4aaeb7775"}, - {file = "lz4-4.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0e822cd7644995d9ba248cb4b67859701748a93e2ab7fc9bc18c599a52e4604"}, - {file = "lz4-4.3.3-cp38-cp38-win32.whl", hash = "sha256:24b3206de56b7a537eda3a8123c644a2b7bf111f0af53bc14bed90ce5562d1aa"}, - {file = "lz4-4.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:b47839b53956e2737229d70714f1d75f33e8ac26e52c267f0197b3189ca6de24"}, - {file = "lz4-4.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6756212507405f270b66b3ff7f564618de0606395c0fe10a7ae2ffcbbe0b1fba"}, - {file = "lz4-4.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee9ff50557a942d187ec85462bb0960207e7ec5b19b3b48949263993771c6205"}, - {file = "lz4-4.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b901c7784caac9a1ded4555258207d9e9697e746cc8532129f150ffe1f6ba0d"}, - {file = "lz4-4.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d9ec061b9eca86e4dcc003d93334b95d53909afd5a32c6e4f222157b50c071"}, - {file = "lz4-4.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4c7bf687303ca47d69f9f0133274958fd672efaa33fb5bcde467862d6c621f0"}, - {file = "lz4-4.3.3-cp39-cp39-win32.whl", hash = "sha256:054b4631a355606e99a42396f5db4d22046a3397ffc3269a348ec41eaebd69d2"}, - {file = "lz4-4.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:eac9af361e0d98335a02ff12fb56caeb7ea1196cf1a49dbf6f17828a131da807"}, - {file = "lz4-4.3.3.tar.gz", hash = "sha256:01fe674ef2889dbb9899d8a67361e0c4a2c833af5aeb37dd505727cf5d2a131e"}, -] - -[package.extras] -docs = ["sphinx (>=1.6.0)", "sphinx-bootstrap-theme"] -flake8 = ["flake8"] -tests = ["psutil", "pytest (!=3.3.0)", "pytest-cov"] - -[[package]] -name = "markdown" -version = "3.6" -description = "Python implementation of John Gruber's Markdown." -optional = false -python-versions = ">=3.8" -files = [ - {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, - {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, -] - -[package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] -testing = ["coverage", "pyyaml"] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markupsafe" -version = "2.1.5" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, -] - -[[package]] -name = "matplotlib" -version = "3.8.4" -description = "Python plotting package" -optional = false -python-versions = ">=3.9" -files = [ - {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"}, - {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"}, - {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1edd9f5383b504dbc26eeea404ed0a00656c526638129028b758fd43fc5f10"}, - {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd79298550cba13a43c340581a3ec9c707bd895a6a061a78fa2524660482fc0"}, - {file = "matplotlib-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:90df07db7b599fe7035d2f74ab7e438b656528c68ba6bb59b7dc46af39ee48ef"}, - {file = "matplotlib-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:ac24233e8f2939ac4fd2919eed1e9c0871eac8057666070e94cbf0b33dd9c338"}, - {file = "matplotlib-3.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:72f9322712e4562e792b2961971891b9fbbb0e525011e09ea0d1f416c4645661"}, - {file = "matplotlib-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:232ce322bfd020a434caaffbd9a95333f7c2491e59cfc014041d95e38ab90d1c"}, - {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6addbd5b488aedb7f9bc19f91cd87ea476206f45d7116fcfe3d31416702a82fa"}, - {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4ccdc64e3039fc303defd119658148f2349239871db72cd74e2eeaa9b80b71"}, - {file = "matplotlib-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b7a2a253d3b36d90c8993b4620183b55665a429da8357a4f621e78cd48b2b30b"}, - {file = "matplotlib-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:8080d5081a86e690d7688ffa542532e87f224c38a6ed71f8fbed34dd1d9fedae"}, - {file = "matplotlib-3.8.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6485ac1f2e84676cff22e693eaa4fbed50ef5dc37173ce1f023daef4687df616"}, - {file = "matplotlib-3.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c89ee9314ef48c72fe92ce55c4e95f2f39d70208f9f1d9db4e64079420d8d732"}, - {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50bac6e4d77e4262c4340d7a985c30912054745ec99756ce213bfbc3cb3808eb"}, - {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f51c4c869d4b60d769f7b4406eec39596648d9d70246428745a681c327a8ad30"}, - {file = "matplotlib-3.8.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b12ba985837e4899b762b81f5b2845bd1a28f4fdd1a126d9ace64e9c4eb2fb25"}, - {file = "matplotlib-3.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7a6769f58ce51791b4cb8b4d7642489df347697cd3e23d88266aaaee93b41d9a"}, - {file = "matplotlib-3.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:843cbde2f0946dadd8c5c11c6d91847abd18ec76859dc319362a0964493f0ba6"}, - {file = "matplotlib-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c13f041a7178f9780fb61cc3a2b10423d5e125480e4be51beaf62b172413b67"}, - {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb44f53af0a62dc80bba4443d9b27f2fde6acfdac281d95bc872dc148a6509cc"}, - {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606e3b90897554c989b1e38a258c626d46c873523de432b1462f295db13de6f9"}, - {file = "matplotlib-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9bb0189011785ea794ee827b68777db3ca3f93f3e339ea4d920315a0e5a78d54"}, - {file = "matplotlib-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:6209e5c9aaccc056e63b547a8152661324404dd92340a6e479b3a7f24b42a5d0"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7064120a59ce6f64103c9cefba8ffe6fba87f2c61d67c401186423c9a20fd35"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0e47eda4eb2614300fc7bb4657fced3e83d6334d03da2173b09e447418d499f"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:493e9f6aa5819156b58fce42b296ea31969f2aab71c5b680b4ea7a3cb5c07d94"}, - {file = "matplotlib-3.8.4.tar.gz", hash = "sha256:8aac397d5e9ec158960e31c381c5ffc52ddd52bd9a47717e2a694038167dffea"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -kiwisolver = ">=1.3.1" -numpy = ">=1.21" -packaging = ">=20.0" -pillow = ">=8" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "mkl" -version = "2021.4.0" -description = "Intel® oneAPI Math Kernel Library" -optional = false -python-versions = "*" -files = [ - {file = "mkl-2021.4.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:67460f5cd7e30e405b54d70d1ed3ca78118370b65f7327d495e9c8847705e2fb"}, - {file = "mkl-2021.4.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:636d07d90e68ccc9630c654d47ce9fdeb036bb46e2b193b3a9ac8cfea683cce5"}, - {file = "mkl-2021.4.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:398dbf2b0d12acaf54117a5210e8f191827f373d362d796091d161f610c1ebfb"}, - {file = "mkl-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:439c640b269a5668134e3dcbcea4350459c4a8bc46469669b2d67e07e3d330e8"}, - {file = "mkl-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:ceef3cafce4c009dd25f65d7ad0d833a0fbadc3d8903991ec92351fe5de1e718"}, -] - -[package.dependencies] -intel-openmp = "==2021.*" -tbb = "==2021.*" - -[[package]] -name = "mpmath" -version = "1.3.0" -description = "Python library for arbitrary-precision floating-point arithmetic" -optional = false -python-versions = "*" -files = [ - {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, - {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, -] - -[package.extras] -develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] -docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4)"] -tests = ["pytest (>=4.6)"] - -[[package]] -name = "networkx" -version = "3.3" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.10" -files = [ - {file = "networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2"}, - {file = "networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9"}, -] - -[package.extras] -default = ["matplotlib (>=3.6)", "numpy (>=1.23)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["myst-nb (>=1.0)", "numpydoc (>=1.7)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=2.0)", "pygraphviz (>=1.12)", "sympy (>=1.10)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] - -[[package]] -name = "numpy" -version = "1.26.4" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, -] - -[[package]] -name = "nvidia-cublas-cu12" -version = "12.1.3.1" -description = "CUBLAS native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728"}, - {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-win_amd64.whl", hash = "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906"}, -] - -[[package]] -name = "nvidia-cuda-cupti-cu12" -version = "12.1.105" -description = "CUDA profiling tools runtime libs." -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e"}, - {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4"}, -] - -[[package]] -name = "nvidia-cuda-nvrtc-cu12" -version = "12.1.105" -description = "NVRTC native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2"}, - {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed"}, -] - -[[package]] -name = "nvidia-cuda-runtime-cu12" -version = "12.1.105" -description = "CUDA Runtime native Libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40"}, - {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344"}, -] - -[[package]] -name = "nvidia-cudnn-cu12" -version = "8.9.2.26" -description = "cuDNN runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl", hash = "sha256:5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9"}, -] - -[package.dependencies] -nvidia-cublas-cu12 = "*" - -[[package]] -name = "nvidia-cufft-cu12" -version = "11.0.2.54" -description = "CUFFT native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56"}, - {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-win_amd64.whl", hash = "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253"}, -] - -[[package]] -name = "nvidia-curand-cu12" -version = "10.3.2.106" -description = "CURAND native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0"}, - {file = "nvidia_curand_cu12-10.3.2.106-py3-none-win_amd64.whl", hash = "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a"}, -] - -[[package]] -name = "nvidia-cusolver-cu12" -version = "11.4.5.107" -description = "CUDA solver native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd"}, - {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-win_amd64.whl", hash = "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5"}, -] - -[package.dependencies] -nvidia-cublas-cu12 = "*" -nvidia-cusparse-cu12 = "*" -nvidia-nvjitlink-cu12 = "*" - -[[package]] -name = "nvidia-cusparse-cu12" -version = "12.1.0.106" -description = "CUSPARSE native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c"}, - {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-win_amd64.whl", hash = "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a"}, -] - -[package.dependencies] -nvidia-nvjitlink-cu12 = "*" - -[[package]] -name = "nvidia-nccl-cu12" -version = "2.20.5" -description = "NVIDIA Collective Communication Library (NCCL) Runtime" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1fc150d5c3250b170b29410ba682384b14581db722b2531b0d8d33c595f33d01"}, - {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:057f6bf9685f75215d0c53bf3ac4a10b3e6578351de307abad9e18a99182af56"}, -] - -[[package]] -name = "nvidia-nvjitlink-cu12" -version = "12.4.127" -description = "Nvidia JIT LTO Library" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"}, - {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:fd9020c501d27d135f983c6d3e244b197a7ccad769e34df53a42e276b0e25fa1"}, -] - -[[package]] -name = "nvidia-nvtx-cu12" -version = "12.1.105" -description = "NVIDIA Tools Extension" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5"}, - {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, -] - -[[package]] -name = "onnx" -version = "1.16.0" -description = "Open Neural Network Exchange" -optional = false -python-versions = ">=3.8" -files = [ - {file = "onnx-1.16.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:9eadbdce25b19d6216f426d6d99b8bc877a65ed92cbef9707751c6669190ba4f"}, - {file = "onnx-1.16.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:034ae21a2aaa2e9c14119a840d2926d213c27aad29e5e3edaa30145a745048e1"}, - {file = "onnx-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec22a43d74eb1f2303373e2fbe7fbcaa45fb225f4eb146edfed1356ada7a9aea"}, - {file = "onnx-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:298f28a2b5ac09145fa958513d3d1e6b349ccf86a877dbdcccad57713fe360b3"}, - {file = "onnx-1.16.0-cp310-cp310-win32.whl", hash = "sha256:66300197b52beca08bc6262d43c103289c5d45fde43fb51922ed1eb83658cf0c"}, - {file = "onnx-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:ae0029f5e47bf70a1a62e7f88c80bca4ef39b844a89910039184221775df5e43"}, - {file = "onnx-1.16.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:f51179d4af3372b4f3800c558d204b592c61e4b4a18b8f61e0eea7f46211221a"}, - {file = "onnx-1.16.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:5202559070afec5144332db216c20f2fff8323cf7f6512b0ca11b215eacc5bf3"}, - {file = "onnx-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77579e7c15b4df39d29465b216639a5f9b74026bdd9e4b6306cd19a32dcfe67c"}, - {file = "onnx-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e60ca76ac24b65c25860d0f2d2cdd96d6320d062a01dd8ce87c5743603789b8"}, - {file = "onnx-1.16.0-cp311-cp311-win32.whl", hash = "sha256:81b4ee01bc554e8a2b11ac6439882508a5377a1c6b452acd69a1eebb83571117"}, - {file = "onnx-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:7449241e70b847b9c3eb8dae622df8c1b456d11032a9d7e26e0ee8a698d5bf86"}, - {file = "onnx-1.16.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:03a627488b1a9975d95d6a55582af3e14c7f3bb87444725b999935ddd271d352"}, - {file = "onnx-1.16.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c392faeabd9283ee344ccb4b067d1fea9dfc614fa1f0de7c47589efd79e15e78"}, - {file = "onnx-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0efeb46985de08f0efe758cb54ad3457e821a05c2eaf5ba2ccb8cd1602c08084"}, - {file = "onnx-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddf14a3d32234f23e44abb73a755cb96a423fac7f004e8f046f36b10214151ee"}, - {file = "onnx-1.16.0-cp312-cp312-win32.whl", hash = "sha256:62a2e27ae8ba5fc9b4a2620301446a517b5ffaaf8566611de7a7c2160f5bcf4c"}, - {file = "onnx-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:3e0860fea94efde777e81a6f68f65761ed5e5f3adea2e050d7fbe373a9ae05b3"}, - {file = "onnx-1.16.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:70a90649318f3470985439ea078277c9fb2a2e6e2fd7c8f3f2b279402ad6c7e6"}, - {file = "onnx-1.16.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:71839546b7f93be4fa807995b182ab4b4414c9dbf049fee11eaaced16fcf8df2"}, - {file = "onnx-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7665217c45a61eb44718c8e9349d2ad004efa0cb9fbc4be5c6d5e18b9fe12b52"}, - {file = "onnx-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5752bbbd5717304a7643643dba383a2fb31e8eb0682f4e7b7d141206328a73b"}, - {file = "onnx-1.16.0-cp38-cp38-win32.whl", hash = "sha256:257858cbcb2055284f09fa2ae2b1cfd64f5850367da388d6e7e7b05920a40c90"}, - {file = "onnx-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:209fe84995a28038e29ae8369edd35f33e0ef1ebc3bddbf6584629823469deb1"}, - {file = "onnx-1.16.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:8cf3e518b1b1b960be542e7c62bed4e5219e04c85d540817b7027029537dec92"}, - {file = "onnx-1.16.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:30f02beaf081c7d9fa3a8c566a912fc4408e28fc33b1452d58f890851691d364"}, - {file = "onnx-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fb29a9a692b522deef1f6b8f2145da62c0c43ea1ed5b4c0f66f827fdc28847d"}, - {file = "onnx-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7755cbd5f4e47952e37276ea5978a46fc8346684392315902b5ed4a719d87d06"}, - {file = "onnx-1.16.0-cp39-cp39-win32.whl", hash = "sha256:7532343dc5b8b5e7c3e3efa441a3100552f7600155c4db9120acd7574f64ffbf"}, - {file = "onnx-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:d7886c05aa6d583ec42f6287678923c1e343afc4350e49d5b36a0023772ffa22"}, - {file = "onnx-1.16.0.tar.gz", hash = "sha256:237c6987c6c59d9f44b6136f5819af79574f8d96a760a1fa843bede11f3822f7"}, -] - -[package.dependencies] -numpy = ">=1.20" -protobuf = ">=3.20.2" - -[package.extras] -reference = ["Pillow", "google-re2"] - -[[package]] -name = "onnxruntime" -version = "1.17.3" -description = "ONNX Runtime is a runtime accelerator for Machine Learning models" -optional = false -python-versions = "*" -files = [ - {file = "onnxruntime-1.17.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d86dde9c0bb435d709e51bd25991c9fe5b9a5b168df45ce119769edc4d198b15"}, - {file = "onnxruntime-1.17.3-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9d87b68bf931ac527b2d3c094ead66bb4381bac4298b65f46c54fe4d1e255865"}, - {file = "onnxruntime-1.17.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26e950cf0333cf114a155f9142e71da344d2b08dfe202763a403ae81cc02ebd1"}, - {file = "onnxruntime-1.17.3-cp310-cp310-win32.whl", hash = "sha256:0962a4d0f5acebf62e1f0bf69b6e0adf16649115d8de854c1460e79972324d68"}, - {file = "onnxruntime-1.17.3-cp310-cp310-win_amd64.whl", hash = "sha256:468ccb8a0faa25c681a41787b1594bf4448b0252d3efc8b62fd8b2411754340f"}, - {file = "onnxruntime-1.17.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e8cd90c1c17d13d47b89ab076471e07fb85467c01dcd87a8b8b5cdfbcb40aa51"}, - {file = "onnxruntime-1.17.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a058b39801baefe454eeb8acf3ada298c55a06a4896fafc224c02d79e9037f60"}, - {file = "onnxruntime-1.17.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f823d5eb4807007f3da7b27ca972263df6a1836e6f327384eb266274c53d05d"}, - {file = "onnxruntime-1.17.3-cp311-cp311-win32.whl", hash = "sha256:b66b23f9109e78ff2791628627a26f65cd335dcc5fbd67ff60162733a2f7aded"}, - {file = "onnxruntime-1.17.3-cp311-cp311-win_amd64.whl", hash = "sha256:570760ca53a74cdd751ee49f13de70d1384dcf73d9888b8deac0917023ccda6d"}, - {file = "onnxruntime-1.17.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:77c318178d9c16e9beadd9a4070d8aaa9f57382c3f509b01709f0f010e583b99"}, - {file = "onnxruntime-1.17.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23da8469049b9759082e22c41a444f44a520a9c874b084711b6343672879f50b"}, - {file = "onnxruntime-1.17.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2949730215af3f9289008b2e31e9bbef952012a77035b911c4977edea06f3f9e"}, - {file = "onnxruntime-1.17.3-cp312-cp312-win32.whl", hash = "sha256:6c7555a49008f403fb3b19204671efb94187c5085976ae526cb625f6ede317bc"}, - {file = "onnxruntime-1.17.3-cp312-cp312-win_amd64.whl", hash = "sha256:58672cf20293a1b8a277a5c6c55383359fcdf6119b2f14df6ce3b140f5001c39"}, - {file = "onnxruntime-1.17.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:4395ba86e3c1e93c794a00619ef1aec597ab78f5a5039f3c6d2e9d0695c0a734"}, - {file = "onnxruntime-1.17.3-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdf354c04344ec38564fc22394e1fe08aa6d70d790df00159205a0055c4a4d3f"}, - {file = "onnxruntime-1.17.3-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a94b600b7af50e922d44b95a57981e3e35103c6e3693241a03d3ca204740bbda"}, - {file = "onnxruntime-1.17.3-cp38-cp38-win32.whl", hash = "sha256:5a335c76f9c002a8586c7f38bc20fe4b3725ced21f8ead835c3e4e507e42b2ab"}, - {file = "onnxruntime-1.17.3-cp38-cp38-win_amd64.whl", hash = "sha256:8f56a86fbd0ddc8f22696ddeda0677b041381f4168a2ca06f712ef6ec6050d6d"}, - {file = "onnxruntime-1.17.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:e0ae39f5452278cd349520c296e7de3e90d62dc5b0157c6868e2748d7f28b871"}, - {file = "onnxruntime-1.17.3-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ff2dc012bd930578aff5232afd2905bf16620815f36783a941aafabf94b3702"}, - {file = "onnxruntime-1.17.3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf6c37483782e4785019b56e26224a25e9b9a35b849d0169ce69189867a22bb1"}, - {file = "onnxruntime-1.17.3-cp39-cp39-win32.whl", hash = "sha256:351bf5a1140dcc43bfb8d3d1a230928ee61fcd54b0ea664c8e9a889a8e3aa515"}, - {file = "onnxruntime-1.17.3-cp39-cp39-win_amd64.whl", hash = "sha256:57a3de15778da8d6cc43fbf6cf038e1e746146300b5f0b1fbf01f6f795dc6440"}, -] - -[package.dependencies] -coloredlogs = "*" -flatbuffers = "*" -numpy = ">=1.21.6" -packaging = "*" -protobuf = "*" -sympy = "*" - -[[package]] -name = "packaging" -version = "24.0" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, -] - -[[package]] -name = "pandas" -version = "2.2.2" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, - {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, - {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, - {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, - {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, - {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, - {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, - {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, - {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, - {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, - {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, - {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, - {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, - {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, - {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, - {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, - {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, - {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, - {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, - {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, - {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, - {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, - {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, - {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, - {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, - {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, - {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, - {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, - {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, -] -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tzdata = ">=2022.7" - -[package.extras] -all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] -aws = ["s3fs (>=2022.11.0)"] -clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] -compression = ["zstandard (>=0.19.0)"] -computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] -consortium-standard = ["dataframe-api-compat (>=0.1.7)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] -feather = ["pyarrow (>=10.0.1)"] -fss = ["fsspec (>=2022.11.0)"] -gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] -hdf5 = ["tables (>=3.8.0)"] -html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] -mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] -parquet = ["pyarrow (>=10.0.1)"] -performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] -plot = ["matplotlib (>=3.6.3)"] -postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] -pyarrow = ["pyarrow (>=10.0.1)"] -spss = ["pyreadstat (>=1.2.0)"] -sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] -test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.9.2)"] - -[[package]] -name = "pettingzoo" -version = "1.24.3" -description = "Gymnasium for multi-agent reinforcement learning." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pettingzoo-1.24.3-py3-none-any.whl", hash = "sha256:23ed90517d2e8a7098bdaf5e31234b3a7f7b73ca578d70d1ca7b9d0cb0e37982"}, - {file = "pettingzoo-1.24.3.tar.gz", hash = "sha256:91f9094f18e06fb74b98f4099cd22e8ae4396125e51719d50b30c9f1c7ab07e6"}, -] - -[package.dependencies] -gymnasium = ">=0.28.0" -numpy = ">=1.21.0" - -[package.extras] -all = ["box2d-py (==2.3.5)", "chess (==1.9.4)", "multi-agent-ale-py (==0.1.11)", "pillow (>=8.0.1)", "pygame (==2.3.0)", "pymunk (==6.2.0)", "rlcard (==1.0.5)", "scipy (>=1.4.1)", "shimmy[openspiel] (>=1.2.0)"] -atari = ["multi-agent-ale-py (==0.1.11)", "pygame (==2.3.0)"] -butterfly = ["pygame (==2.3.0)", "pymunk (==6.2.0)"] -classic = ["chess (==1.9.4)", "pygame (==2.3.0)", "rlcard (==1.0.5)", "shimmy[openspiel] (>=1.2.0)"] -mpe = ["pygame (==2.3.0)"] -other = ["pillow (>=8.0.1)"] -sisl = ["box2d-py (==2.3.5)", "pygame (==2.3.0)", "pymunk (==6.2.0)", "scipy (>=1.4.1)"] -testing = ["AutoROM", "pre-commit", "pynput", "pytest", "pytest-cov", "pytest-markdown-docs", "pytest-xdist"] - -[[package]] -name = "pillow" -version = "10.3.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, - {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, - {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, - {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, - {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, - {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, - {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, - {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, - {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, - {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, - {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, - {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, - {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, - {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, - {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, - {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, - {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] -fpx = ["olefile"] -mic = ["olefile"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] -typing = ["typing-extensions"] -xmp = ["defusedxml"] - -[[package]] -name = "protobuf" -version = "5.26.1" -description = "" -optional = false -python-versions = ">=3.8" -files = [ - {file = "protobuf-5.26.1-cp310-abi3-win32.whl", hash = "sha256:3c388ea6ddfe735f8cf69e3f7dc7611e73107b60bdfcf5d0f024c3ccd3794e23"}, - {file = "protobuf-5.26.1-cp310-abi3-win_amd64.whl", hash = "sha256:e6039957449cb918f331d32ffafa8eb9255769c96aa0560d9a5bf0b4e00a2a33"}, - {file = "protobuf-5.26.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:38aa5f535721d5bb99861166c445c4105c4e285c765fbb2ac10f116e32dcd46d"}, - {file = "protobuf-5.26.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:fbfe61e7ee8c1860855696e3ac6cfd1b01af5498facc6834fcc345c9684fb2ca"}, - {file = "protobuf-5.26.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:f7417703f841167e5a27d48be13389d52ad705ec09eade63dfc3180a959215d7"}, - {file = "protobuf-5.26.1-cp38-cp38-win32.whl", hash = "sha256:d693d2504ca96750d92d9de8a103102dd648fda04540495535f0fec7577ed8fc"}, - {file = "protobuf-5.26.1-cp38-cp38-win_amd64.whl", hash = "sha256:9b557c317ebe6836835ec4ef74ec3e994ad0894ea424314ad3552bc6e8835b4e"}, - {file = "protobuf-5.26.1-cp39-cp39-win32.whl", hash = "sha256:b9ba3ca83c2e31219ffbeb9d76b63aad35a3eb1544170c55336993d7a18ae72c"}, - {file = "protobuf-5.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ee014c2c87582e101d6b54260af03b6596728505c79f17c8586e7523aaa8f8c"}, - {file = "protobuf-5.26.1-py3-none-any.whl", hash = "sha256:da612f2720c0183417194eeaa2523215c4fcc1a1949772dc65f05047e08d5932"}, - {file = "protobuf-5.26.1.tar.gz", hash = "sha256:8ca2a1d97c290ec7b16e4e5dff2e5ae150cc1582f55b5ab300d45cb0dfa90e51"}, -] - -[[package]] -name = "pygments" -version = "2.18.0" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, -] - -[package.extras] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "pyparsing" -version = "3.1.2" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, - {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pyreadline3" -version = "3.4.1" -description = "A python implementation of GNU readline." -optional = false -python-versions = "*" -files = [ - {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, - {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "pytz" -version = "2024.1" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, -] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rich" -version = "13.7.1" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, - {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "scikit-image" -version = "0.23.2" -description = "Image processing in Python" -optional = false -python-versions = ">=3.10" -files = [ - {file = "scikit_image-0.23.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9a8db6c52f8d0e1474ea8320d7b8db442b4d6baa29dd0acbd02f8a49572f18a"}, - {file = "scikit_image-0.23.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:524b51a7440e46ed2ebbde7bc288bf2dde1dee2caafdd9513b2aca38a48223b7"}, - {file = "scikit_image-0.23.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b335c229170d787b3fb8c60d220f72049ccf862d5191a3cfda6ac84b995ac4e"}, - {file = "scikit_image-0.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08b10781efbd6b084f3c847ff4049b657241ea866b9e331b14bf791dcb3e6661"}, - {file = "scikit_image-0.23.2-cp310-cp310-win_amd64.whl", hash = "sha256:a207352e9a1956dda1424bbe872c7795345187138118e8be6a421aef3b988c2a"}, - {file = "scikit_image-0.23.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ee83fdb1843ee938eabdfeb9498623282935ea30aa20dffc5d5d16698efb4b2a"}, - {file = "scikit_image-0.23.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:a158f50d3df4867bbd1c698520ede8bc493e430ad83f54ac1f0d8f57b328779b"}, - {file = "scikit_image-0.23.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55de3326be124334b89314e9e04c8971ad98d6681e11a243f71bfb85ef9554b0"}, - {file = "scikit_image-0.23.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fce619a6d84fe40c1208fa579b646e93ce13ef0afc3652a23e9782b2c183291a"}, - {file = "scikit_image-0.23.2-cp311-cp311-win_amd64.whl", hash = "sha256:ee65669aa586e110346f567ed5c92d1bd63799a19e951cb83da3f54b0caf7c52"}, - {file = "scikit_image-0.23.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:15bfb4e8d7bd90a967e6a3c3ab6be678063fc45e950b730684a8db46a02ff892"}, - {file = "scikit_image-0.23.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5736e66d01b11cd90988ec24ab929c80a03af28f690189c951886891ebf63154"}, - {file = "scikit_image-0.23.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3597ac5d8f51dafbcb7433ef1fdefdefb535f50745b2002ae0a5d651df4f063b"}, - {file = "scikit_image-0.23.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1978be2abe3c3c3189a99a411d48bbb1306f7c2debb3aefbf426e23947f26623"}, - {file = "scikit_image-0.23.2-cp312-cp312-win_amd64.whl", hash = "sha256:ae32bf0cb02b672ed74d28880ca6f88928ae8dd794d67e04fa3ff4836feb9bd6"}, - {file = "scikit_image-0.23.2.tar.gz", hash = "sha256:c9da4b2c3117e3e30364a3d14496ee5c72b09eb1a4ab1292b302416faa360590"}, -] - -[package.dependencies] -imageio = ">=2.33" -lazy-loader = ">=0.4" -networkx = ">=2.8" -numpy = ">=1.23" -packaging = ">=21" -pillow = ">=9.1" -scipy = ">=1.9" -tifffile = ">=2022.8.12" - -[package.extras] -build = ["Cython (>=3.0.4)", "build", "meson-python (>=0.15)", "ninja", "numpy (>=2.0.0rc1)", "packaging (>=21)", "pythran", "setuptools (>=67)", "spin (==0.8)", "wheel"] -data = ["pooch (>=1.6.0)"] -developer = ["ipython", "pre-commit", "tomli"] -docs = ["PyWavelets (>=1.1.1)", "dask[array] (>=2022.9.2)", "ipykernel", "ipywidgets", "kaleido", "matplotlib (>=3.6)", "myst-parser", "numpydoc (>=1.7)", "pandas (>=1.5)", "plotly (>=5.10)", "pooch (>=1.6)", "pydata-sphinx-theme (>=0.15.2)", "pytest-doctestplus", "pytest-runner", "scikit-learn (>=1.1)", "seaborn (>=0.11)", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-gallery (>=0.14)", "sphinx_design (>=0.5)", "tifffile (>=2022.8.12)"] -optional = ["PyWavelets (>=1.1.1)", "SimpleITK", "astropy (>=5.0)", "cloudpickle (>=0.2.1)", "dask[array] (>=2021.1.0)", "matplotlib (>=3.6)", "pooch (>=1.6.0)", "pyamg", "scikit-learn (>=1.1)"] -test = ["asv", "numpydoc (>=1.7)", "pooch (>=1.6.0)", "pytest (>=7.0)", "pytest-cov (>=2.11.0)", "pytest-doctestplus", "pytest-faulthandler", "pytest-localserver"] - -[[package]] -name = "scipy" -version = "1.13.0" -description = "Fundamental algorithms for scientific computing in Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, - {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, - {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, - {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, - {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, - {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, - {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, - {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, - {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, - {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, - {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, - {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, - {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, - {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, - {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, - {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, - {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, - {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, - {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, - {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, - {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, - {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, - {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, - {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, - {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, -] - -[package.dependencies] -numpy = ">=1.22.4,<2.3" - -[package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] - -[[package]] -name = "setuptools" -version = "69.5.1" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, - {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "shellingham" -version = "1.5.4" -description = "Tool to Detect Surrounding Shell" -optional = false -python-versions = ">=3.7" -files = [ - {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, - {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, -] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "stable-baselines3" -version = "2.3.2" -description = "Pytorch version of Stable Baselines, implementations of reinforcement learning algorithms." -optional = false -python-versions = ">=3.8" -files = [ - {file = "stable_baselines3-2.3.2-py3-none-any.whl", hash = "sha256:a1cafff6ec23bd4e8f4f20dd829008dc1af58ec2d5d8fc0cd0929b4b4544c9b2"}, - {file = "stable_baselines3-2.3.2.tar.gz", hash = "sha256:2f8188916e607571c4c24f88a9ff6f84edafb2cf22d5d24f9c199563c12ff168"}, -] - -[package.dependencies] -cloudpickle = "*" -gymnasium = ">=0.28.1,<0.30" -matplotlib = "*" -numpy = ">=1.20" -pandas = "*" -torch = ">=1.13" - -[package.extras] -docs = ["sphinx (>=5,<8)", "sphinx-autobuild", "sphinx-copybutton", "sphinx-rtd-theme (>=1.3.0)", "sphinxcontrib.spelling"] -extra = ["autorom[accept-rom-license] (>=0.6.1,<0.7.0)", "opencv-python", "pillow", "psutil", "pygame", "rich", "shimmy[atari] (>=1.3.0,<1.4.0)", "tensorboard (>=2.9.1)", "tqdm"] -extra-no-roms = ["opencv-python", "pillow", "psutil", "pygame", "rich", "shimmy[atari] (>=1.3.0,<1.4.0)", "tensorboard (>=2.9.1)", "tqdm"] -tests = ["black (>=24.2.0,<25)", "mypy", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "ruff (>=0.3.1)"] - -[[package]] -name = "sympy" -version = "1.12" -description = "Computer algebra system (CAS) in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, - {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, -] - -[package.dependencies] -mpmath = ">=0.19" - -[[package]] -name = "tbb" -version = "2021.12.0" -description = "Intel® oneAPI Threading Building Blocks (oneTBB)" -optional = false -python-versions = "*" -files = [ - {file = "tbb-2021.12.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:f2cc9a7f8ababaa506cbff796ce97c3bf91062ba521e15054394f773375d81d8"}, - {file = "tbb-2021.12.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:a925e9a7c77d3a46ae31c34b0bb7f801c4118e857d137b68f68a8e458fcf2bd7"}, - {file = "tbb-2021.12.0-py3-none-win32.whl", hash = "sha256:b1725b30c174048edc8be70bd43bb95473f396ce895d91151a474d0fa9f450a8"}, - {file = "tbb-2021.12.0-py3-none-win_amd64.whl", hash = "sha256:fc2772d850229f2f3df85f1109c4844c495a2db7433d38200959ee9265b34789"}, -] - -[[package]] -name = "tensorboard" -version = "2.16.2" -description = "TensorBoard lets you watch Tensors Flow" -optional = false -python-versions = ">=3.9" -files = [ - {file = "tensorboard-2.16.2-py3-none-any.whl", hash = "sha256:9f2b4e7dad86667615c0e5cd072f1ea8403fc032a299f0072d6f74855775cc45"}, -] - -[package.dependencies] -absl-py = ">=0.4" -grpcio = ">=1.48.2" -markdown = ">=2.6.8" -numpy = ">=1.12.0" -protobuf = ">=3.19.6,<4.24.0 || >4.24.0" -setuptools = ">=41.0.0" -six = ">1.9" -tensorboard-data-server = ">=0.7.0,<0.8.0" -werkzeug = ">=1.0.1" - -[[package]] -name = "tensorboard-data-server" -version = "0.7.2" -description = "Fast data loading for TensorBoard" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb"}, - {file = "tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60"}, - {file = "tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530"}, -] - -[[package]] -name = "tifffile" -version = "2024.5.10" -description = "Read and write TIFF files" -optional = false -python-versions = ">=3.9" -files = [ - {file = "tifffile-2024.5.10-py3-none-any.whl", hash = "sha256:4154f091aa24d4e75bfad9ab2d5424a68c70e67b8220188066dc61946d4551bd"}, - {file = "tifffile-2024.5.10.tar.gz", hash = "sha256:aa1e1b12be952ab20717d6848bd6d4a5ee88d2aa319f1152bff4354ad728ec86"}, -] - -[package.dependencies] -numpy = "*" - -[package.extras] -all = ["defusedxml", "fsspec", "imagecodecs (>=2023.8.12)", "lxml", "matplotlib", "zarr"] - -[[package]] -name = "torch" -version = "2.3.0" -description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "torch-2.3.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:d8ea5a465dbfd8501f33c937d1f693176c9aef9d1c1b0ca1d44ed7b0a18c52ac"}, - {file = "torch-2.3.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:09c81c5859a5b819956c6925a405ef1cdda393c9d8a01ce3851453f699d3358c"}, - {file = "torch-2.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:1bf023aa20902586f614f7682fedfa463e773e26c58820b74158a72470259459"}, - {file = "torch-2.3.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:758ef938de87a2653bba74b91f703458c15569f1562bf4b6c63c62d9c5a0c1f5"}, - {file = "torch-2.3.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:493d54ee2f9df100b5ce1d18c96dbb8d14908721f76351e908c9d2622773a788"}, - {file = "torch-2.3.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:bce43af735c3da16cc14c7de2be7ad038e2fbf75654c2e274e575c6c05772ace"}, - {file = "torch-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:729804e97b7cf19ae9ab4181f91f5e612af07956f35c8b2c8e9d9f3596a8e877"}, - {file = "torch-2.3.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:d24e328226d8e2af7cf80fcb1d2f1d108e0de32777fab4aaa2b37b9765d8be73"}, - {file = "torch-2.3.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:b0de2bdc0486ea7b14fc47ff805172df44e421a7318b7c4d92ef589a75d27410"}, - {file = "torch-2.3.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a306c87a3eead1ed47457822c01dfbd459fe2920f2d38cbdf90de18f23f72542"}, - {file = "torch-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:f9b98bf1a3c8af2d4c41f0bf1433920900896c446d1ddc128290ff146d1eb4bd"}, - {file = "torch-2.3.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:dca986214267b34065a79000cee54232e62b41dff1ec2cab9abc3fc8b3dee0ad"}, - {file = "torch-2.3.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:20572f426965dd8a04e92a473d7e445fa579e09943cc0354f3e6fef6130ce061"}, - {file = "torch-2.3.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e65ba85ae292909cde0dde6369826d51165a3fc8823dc1854cd9432d7f79b932"}, - {file = "torch-2.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:5515503a193781fd1b3f5c474e89c9dfa2faaa782b2795cc4a7ab7e67de923f6"}, - {file = "torch-2.3.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:6ae9f64b09516baa4ef890af0672dc981c20b1f0d829ce115d4420a247e88fba"}, - {file = "torch-2.3.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cd0dc498b961ab19cb3f8dbf0c6c50e244f2f37dbfa05754ab44ea057c944ef9"}, - {file = "torch-2.3.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:e05f836559251e4096f3786ee99f4a8cbe67bc7fbedba8ad5e799681e47c5e80"}, - {file = "torch-2.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:4fb27b35dbb32303c2927da86e27b54a92209ddfb7234afb1949ea2b3effffea"}, - {file = "torch-2.3.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:760f8bedff506ce9e6e103498f9b1e9e15809e008368594c3a66bf74a8a51380"}, -] - -[package.dependencies] -filelock = "*" -fsspec = "*" -jinja2 = "*" -mkl = {version = ">=2021.1.1,<=2021.4.0", markers = "platform_system == \"Windows\""} -networkx = "*" -nvidia-cublas-cu12 = {version = "12.1.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-cupti-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-nvrtc-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-runtime-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cudnn-cu12 = {version = "8.9.2.26", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cufft-cu12 = {version = "11.0.2.54", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-curand-cu12 = {version = "10.3.2.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cusolver-cu12 = {version = "11.4.5.107", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nccl-cu12 = {version = "2.20.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -sympy = "*" -triton = {version = "2.3.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} -typing-extensions = ">=4.8.0" - -[package.extras] -opt-einsum = ["opt-einsum (>=3.3)"] -optree = ["optree (>=0.9.1)"] - -[[package]] -name = "tqdm" -version = "4.66.4" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, - {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "triton" -version = "2.3.0" -description = "A language and compiler for custom Deep Learning operations" -optional = false -python-versions = "*" -files = [ - {file = "triton-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ce4b8ff70c48e47274c66f269cce8861cf1dc347ceeb7a67414ca151b1822d8"}, - {file = "triton-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c3d9607f85103afdb279938fc1dd2a66e4f5999a58eb48a346bd42738f986dd"}, - {file = "triton-2.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:218d742e67480d9581bafb73ed598416cc8a56f6316152e5562ee65e33de01c0"}, - {file = "triton-2.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381ec6b3dac06922d3e4099cfc943ef032893b25415de295e82b1a82b0359d2c"}, - {file = "triton-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038e06a09c06a164fef9c48de3af1e13a63dc1ba3c792871e61a8e79720ea440"}, - {file = "triton-2.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8f636e0341ac348899a47a057c3daea99ea7db31528a225a3ba4ded28ccc65"}, -] - -[package.dependencies] -filelock = "*" - -[package.extras] -build = ["cmake (>=3.20)", "lit"] -tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)", "torch"] -tutorials = ["matplotlib", "pandas", "tabulate", "torch"] - -[[package]] -name = "typer" -version = "0.12.3" -description = "Typer, build great CLIs. Easy to code. Based on Python type hints." -optional = false -python-versions = ">=3.7" -files = [ - {file = "typer-0.12.3-py3-none-any.whl", hash = "sha256:070d7ca53f785acbccba8e7d28b08dcd88f79f1fbda035ade0aecec71ca5c914"}, - {file = "typer-0.12.3.tar.gz", hash = "sha256:49e73131481d804288ef62598d97a1ceef3058905aa536a1134f90891ba35482"}, -] - -[package.dependencies] -click = ">=8.0.0" -rich = ">=10.11.0" -shellingham = ">=1.3.0" -typing-extensions = ">=3.7.4.3" - -[[package]] -name = "typing-extensions" -version = "4.11.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, -] - -[[package]] -name = "tzdata" -version = "2024.1" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, - {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, -] - -[[package]] -name = "urllib3" -version = "2.2.1" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "wasabi" -version = "1.1.2" -description = "A lightweight console printing and formatting toolkit" -optional = false -python-versions = ">=3.6" -files = [ - {file = "wasabi-1.1.2-py3-none-any.whl", hash = "sha256:0a3f933c4bf0ed3f93071132c1b87549733256d6c8de6473c5f7ed2e171b5cf9"}, - {file = "wasabi-1.1.2.tar.gz", hash = "sha256:1aaef3aceaa32edb9c91330d29d3936c0c39fdb965743549c173cb54b16c30b5"}, -] - -[package.dependencies] -colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\" and python_version >= \"3.7\""} - -[[package]] -name = "werkzeug" -version = "3.0.3" -description = "The comprehensive WSGI web application library." -optional = false -python-versions = ">=3.8" -files = [ - {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, - {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, -] - -[package.dependencies] -MarkupSafe = ">=2.1.1" - -[package.extras] -watchdog = ["watchdog (>=2.3)"] - -[[package]] -name = "wget" -version = "3.2" -description = "pure python download utility" -optional = false -python-versions = "*" -files = [ - {file = "wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061"}, -] - -[metadata] -lock-version = "2.0" -python-versions = "^3.11" -content-hash = "2d575ca622be4eb61953716f1811accd9330cdbd4ad0ceee31700058e486e7e6" diff --git a/Godot/policy.py b/Godot/policy.py deleted file mode 100644 index de39514..0000000 --- a/Godot/policy.py +++ /dev/null @@ -1,131 +0,0 @@ -import torch as T -import torch.nn as nn - -policy_small=dict( - net_arch=dict( - pi=[256], - vf=[256] - ) -) - -policy_small_optim=dict( - net_arch=dict( - pi=[256], - vf=[256] - ), - optimizer_kwargs=dict( - betas=(0.9, 0.9), - eps=1e-5, - ), -) - -policy_small_tanh=dict( - activation_fn=nn.Tanh, - net_arch=dict( - pi=[256], - vf=[256] - ) -) - -policy_small_optim_tanh=dict( - net_arch=dict( - pi=[256], - vf=[256] - ), - optimizer_class=T.optim.Adam, - optimizer_kwargs=dict( - betas=(0.9, 0.9), - eps=1e-5, - ), -) - -policy_mid=dict( - net_arch=dict( - pi=[512], - vf=[2048, 2048] - ) -) - -policy_mid_tanh=dict( - activation_fn=nn.Tanh, - net_arch=dict( - pi=[512], - vf=[2048, 2048] - ) -) - -policy_mid_optim=dict( - net_arch=dict( - pi=[512], - vf=[2048, 2048] - ), - optimizer_kwargs=dict( - betas=(0.9,0.9), - eps=1e-5 - ) -) - -policy_mid_optim_tanh=dict( - activation_fn=nn.Tanh, - net_arch=dict( - pi=[512], - vf=[2048, 2048] - ), - optimizer_kwargs=dict( - betas=(0.9,0.9), - eps=1e-5 - ) -) - -policy_big=dict( - net_arch=dict( - pi=[1024, 1024], - vf=[4096, 4096, 4096, 4096] - ) -) - -policy_big_tanh=dict( - activation_fn=nn.Tanh, - net_arch=dict( - pi=[1024, 1024], - vf=[4096, 4096, 4096, 4096] - ) -) - -policy_big_optim=dict( - net_arch=dict( - pi=[1024, 1024], - vf=[4096, 4096, 4096, 4096] - ), - optimizer_kwargs=dict( - betas=(0.9, 0.9), - eps=1e-5, - ), -) - -policy_big_optim_tanh = dict( - activation_fn=nn.Tanh, - net_arch=dict( - pi=[1024, 1024], - vf=[4096, 4096, 4096, 4096], - ), - optimizer_kwargs=dict( - betas=(0.9, 0.9), - eps=1e-5, - ), -) - -policies={ - "policy_small": policy_small, - "policy_small_optim": policy_small_optim, - "policy_small_tanh": policy_small_tanh, - "policy_small_optim_tanh": policy_small_optim_tanh, - "policy_mid": policy_mid, - "policy_mid_optim": policy_mid_optim, - "policy_mid_tanh": policy_mid_tanh, - "policy_mid_optim_tanh": policy_mid_optim_tanh, - "policy_big": policy_big, - "policy_big_optim": policy_big_optim, - "policy_big_tanh": policy_big_tanh, - "policy_big_optim_tanh": policy_big_optim_tanh, -} diff --git a/Godot/project.godot b/Godot/project.godot deleted file mode 100644 index 896b36d..0000000 --- a/Godot/project.godot +++ /dev/null @@ -1,70 +0,0 @@ -; Engine configuration file. -; It's best edited using the editor UI and not directly, -; since the parameters that go here are not all obvious. -; -; Format: -; [section] ; section goes between [] -; param=value ; assign values to parameters - -config_version=5 - -[application] - -config/name="Pneuma" -run/main_scene="res://scenes/main.tscn" -config/features=PackedStringArray("4.2", "Forward Plus") -config/icon="res://icon.svg" - -[dotnet] - -project/assembly_name="Pneuma" - -[editor_plugins] - -enabled=PackedStringArray("res://addons/Todo_Manager/plugin.cfg", "res://addons/godot_rl_agents/plugin.cfg") - -[input] - -move_left={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null) -] -} -move_right={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null) -] -} -move_up={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null) -] -} -move_down={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null) -] -} -attack={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"script":null) -] -} -cast_magic={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"echo":false,"script":null) -] -} -reset_camera={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null) -] -} - -[rendering] - -textures/canvas_textures/default_texture_filter=0 diff --git a/Godot/pyproject.toml b/Godot/pyproject.toml deleted file mode 100644 index d49e673..0000000 --- a/Godot/pyproject.toml +++ /dev/null @@ -1,22 +0,0 @@ -[tool.poetry] -name = "pneumarl" -version = "0.1.0" -description = "Godot training env for MARL" -authors = ["Vasilis Valatsos "] -readme = "README.md" -package-mode = false - -[tool.poetry.dependencies] -python = "^3.11" -dm-tree = "^0.1.8" -typer = "^0.12.3" -scikit-image = "^0.23.2" -lz4 = "^4.3.3" -godot-rl = {url = "https://github.com/edbeeching/godot_rl_agents/archive/refs/heads/main.zip"} -pettingzoo = "^1.24.3" -tensorboard = "^2.16.2" - - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" diff --git a/Godot/rllib_config.yaml b/Godot/rllib_config.yaml deleted file mode 100644 index c105612..0000000 --- a/Godot/rllib_config.yaml +++ /dev/null @@ -1,60 +0,0 @@ -algorithm: PPO - -# Multi-agent-env setting: -# If true: -# - Any AIController with done = true will receive zeroes as action values until all AIControllers are done, an episode ends at that point. -# - ai_controller.needs_reset will also be set to true every time a new episode begins (but you can ignore it in your env if needed). -# If false: -# - AIControllers auto-reset in Godot and will receive actions after setting done = true. -# - Each AIController has its own episodes that can end/reset at any point. -# Set to false if you have a single policy name for all agents set in AIControllers -env_is_multiagent: false - -checkpoint_frequency: 20 - -# You can set one or more stopping criteria -stop: - #episode_reward_mean: 0 - #training_iteration: 1000 - #timesteps_total: 10000 - time_total_s: 10000000 - -config: - env: godot - env_config: - env_path: '/home/valapeos/Projects/pneumarl/pneuma.x86_64' # Set your env path here (exported executable from Godot) - e.g. env_path: 'env_path.exe' on Windows - action_repeat: null # Doesn't need to be set here, you can set this in sync node in Godot editor as well - show_window: true # Displays game window while training. Might be faster when false in some cases, turning off also reduces GPU usage if you don't need rendering. - speedup: 30 # Speeds up Godot physics - - framework: torch # ONNX models exported with torch are compatible with the current Godot RL Agents Plugin - - lr: 0.0003 - lambda: 0.95 - gamma: 0.99 - - vf_loss_coeff: 0.5 - vf_clip_param: .inf - #clip_param: 0.2 - entropy_coeff: 0.0001 - entropy_coeff_schedule: null - #grad_clip: 0.5 - - normalize_actions: False - clip_actions: True # During onnx inference we simply clip the actions to [-1.0, 1.0] range, set here to match - - rollout_fragment_length: 32 - sgd_minibatch_size: 128 - num_workers: 4 - num_envs_per_worker: 1 # This will be set automatically if not multi-agent. If multi-agent, changing this changes how many envs to launch per worker. - # The value below needs changing per env - # Basic calculation for this value can be rollout_fragment_length * num_workers * num_envs_per_worker (how many AIControllers you have if not multi_agent, otherwise the value you set) - train_batch_size: 2048 - - num_sgd_iter: 4 - batch_mode: truncate_episodes - - num_gpus: 0 - model: - vf_share_layers: False - fcnet_hiddens: [64, 64] diff --git a/Godot/run_tests.sh b/Godot/run_tests.sh deleted file mode 100755 index e6597f2..0000000 --- a/Godot/run_tests.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -python main.py --env_path="/home/valapeos/Projects/thesis/Godot/pneuma.x86_64" --speedup=200 --n_parallel=4 --exper_dir="logs/sb3_full_1" && - -python main.py --env_path="/home/valapeos/Projects/thesis/Godot/pneuma.x86_64" --speedup=200 --n_parallel=4 --exper_dir="logs/sb3_full_2" && - -python main.py --env_path="/home/valapeos/Projects/thesis/Godot/pneuma.x86_64" --speedup=200 --n_parallel=4 --exper_dir="logs/sb3_full_3" && - -python main.py --env_path="/home/valapeos/Projects/thesis/Godot/pneuma.x86_64" --speedup=200 --n_parallel=4 --exper_dir="logs/sb3_full_4" diff --git a/Godot/scenes/attack.tscn b/Godot/scenes/attack.tscn deleted file mode 100644 index 616dc07..0000000 --- a/Godot/scenes/attack.tscn +++ /dev/null @@ -1,4 +0,0 @@ -[gd_scene format=3 uid="uid://c1i0nirxfagfh"] - -[node name="Attack" type="Area2D"] -collision_mask = 2 diff --git a/Godot/scenes/bamboo.tscn b/Godot/scenes/bamboo.tscn deleted file mode 100644 index 348bf2c..0000000 --- a/Godot/scenes/bamboo.tscn +++ /dev/null @@ -1,249 +0,0 @@ -[gd_scene load_steps=20 format=3 uid="uid://bsjy4oejfrg81"] - -[ext_resource type="Texture2D" uid="uid://d4d34das0e3j0" path="res://assets/graphics/monsters/bamboo/idle/0.png" id="1_em175"] -[ext_resource type="Texture2D" uid="uid://l0bk7j8xiqur" path="res://assets/graphics/monsters/bamboo/idle/1.png" id="2_i1h6v"] -[ext_resource type="Texture2D" uid="uid://bwe7pi6shcc2x" path="res://assets/graphics/monsters/bamboo/attack/0.png" id="2_tihvn"] -[ext_resource type="Texture2D" uid="uid://damt0mr2bvcjv" path="res://assets/graphics/monsters/bamboo/idle/2.png" id="3_5ekod"] -[ext_resource type="Texture2D" uid="uid://b11yb3x6h5oas" path="res://assets/graphics/monsters/bamboo/idle/3.png" id="4_0fhpn"] -[ext_resource type="Script" path="res://code/bamboo.gd" id="5_ib85v"] -[ext_resource type="Texture2D" uid="uid://q8yev438ec6r" path="res://assets/graphics/monsters/bamboo/move/0.png" id="7_8n247"] -[ext_resource type="Texture2D" uid="uid://dqr075ilm3tu8" path="res://assets/graphics/monsters/bamboo/move/1.png" id="8_c5akp"] -[ext_resource type="Texture2D" uid="uid://hcm2s3v12pkw" path="res://assets/graphics/monsters/bamboo/move/2.png" id="9_t18yx"] -[ext_resource type="Texture2D" uid="uid://dqa5hvprf3kdp" path="res://assets/graphics/monsters/bamboo/move/3.png" id="10_gsrg3"] -[ext_resource type="PackedScene" uid="uid://dxwjan054vgw0" path="res://scenes/notice.tscn" id="11_d502u"] -[ext_resource type="PackedScene" uid="uid://c1i0nirxfagfh" path="res://scenes/attack.tscn" id="12_27c4n"] - -[sub_resource type="RectangleShape2D" id="RectangleShape2D_iyhjt"] -size = Vector2(24, 50) - -[sub_resource type="CircleShape2D" id="CircleShape2D_wx6w8"] -radius = 300.0 - -[sub_resource type="CircleShape2D" id="CircleShape2D_crbjt"] -radius = 40.0 - -[sub_resource type="SpriteFrames" id="SpriteFrames_2w0pn"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": ExtResource("2_tihvn") -}], -"loop": true, -"name": &"attack", -"speed": 7.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("1_em175") -}, { -"duration": 1.0, -"texture": ExtResource("2_i1h6v") -}, { -"duration": 1.0, -"texture": ExtResource("3_5ekod") -}, { -"duration": 1.0, -"texture": ExtResource("4_0fhpn") -}], -"loop": true, -"name": &"idle", -"speed": 7.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("7_8n247") -}, { -"duration": 1.0, -"texture": ExtResource("8_c5akp") -}, { -"duration": 1.0, -"texture": ExtResource("9_t18yx") -}, { -"duration": 1.0, -"texture": ExtResource("10_gsrg3") -}], -"loop": true, -"name": &"move", -"speed": 7.0 -}] - -[sub_resource type="Animation" id="Animation_lrur3"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("CollisionShape2D:disabled") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath(".:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("Attack:monitoring") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/3/type = "value" -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/path = NodePath("Notice:monitoring") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/4/type = "value" -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/path = NodePath(".:collision_mask") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [6] -} - -[sub_resource type="Animation" id="Animation_3xlxe"] -resource_name = "death" -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("CollisionShape2D:disabled") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath(".:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("Attack:monitoring") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/3/type = "value" -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/path = NodePath("Notice:monitoring") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/4/type = "value" -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/path = NodePath(".:collision_mask") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [0] -} - -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ftwl3"] -_data = { -"RESET": SubResource("Animation_lrur3"), -"death": SubResource("Animation_3xlxe") -} - -[node name="Bamboo" type="CharacterBody2D"] -z_index = 5 -y_sort_enabled = true -position = Vector2(0, -33) -collision_layer = 4 -collision_mask = 6 -script = ExtResource("5_ib85v") -health = 40 - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(0, 2) -shape = SubResource("RectangleShape2D_iyhjt") - -[node name="Notice" parent="." instance=ExtResource("11_d502u")] -position = Vector2(0, 7) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="Notice"] -shape = SubResource("CircleShape2D_wx6w8") - -[node name="Attack" parent="." instance=ExtResource("12_27c4n")] -position = Vector2(0, 5) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="Attack"] -shape = SubResource("CircleShape2D_crbjt") - -[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] -sprite_frames = SubResource("SpriteFrames_2w0pn") -animation = &"idle" -autoplay = "idle" - -[node name="AttackTimer" type="Timer" parent="."] - -[node name="KnockbackTimer" type="Timer" parent="."] -wait_time = 0.5 -one_shot = true - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ftwl3") -} - -[connection signal="death" from="." to="." method="_on_death"] -[connection signal="body_entered" from="Notice" to="." method="_on_notice_body_entered"] -[connection signal="body_exited" from="Notice" to="." method="_on_notice_body_exited"] -[connection signal="body_entered" from="Attack" to="." method="_on_attack_body_entered"] -[connection signal="body_exited" from="Attack" to="." method="_on_attack_body_exited"] -[connection signal="timeout" from="AttackTimer" to="." method="_on_attack_timer_timeout"] -[connection signal="timeout" from="KnockbackTimer" to="." method="_on_knockback_timer_timeout"] diff --git a/Godot/scenes/camera.tscn b/Godot/scenes/camera.tscn deleted file mode 100644 index 5526776..0000000 --- a/Godot/scenes/camera.tscn +++ /dev/null @@ -1,51 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://bj4ap7bw0imhy"] - -[ext_resource type="FontFile" uid="uid://bbe5csaxy5g3c" path="res://assets/graphics/font/joystix.ttf" id="1_kqyoj"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0lqnv"] -bg_color = Color(0, 0, 0, 1) -border_width_left = 4 -border_width_top = 4 -border_width_right = 4 -border_width_bottom = 4 -border_color = Color(1, 1, 1, 1) - -[node name="Camera" type="Camera2D"] - -[node name="ExpPanel" type="PanelContainer" parent="."] -offset_left = 187.0 -offset_top = 227.0 -offset_right = 568.0 -offset_bottom = 316.0 -theme_override_styles/panel = SubResource("StyleBoxFlat_0lqnv") - -[node name="ExpLabel" type="Label" parent="ExpPanel"] -layout_mode = 2 -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/outline_size = 8 -theme_override_fonts/font = ExtResource("1_kqyoj") -theme_override_font_sizes/font_size = 32 -text = "EXP POINTS - " -horizontal_alignment = 1 -vertical_alignment = 1 -max_lines_visible = 2 - -[node name="HPPanel" type="PanelContainer" parent="."] -offset_left = -569.0 -offset_top = 223.0 -offset_right = -188.0 -offset_bottom = 318.0 -theme_override_styles/panel = SubResource("StyleBoxFlat_0lqnv") - -[node name="HPLabel" type="Label" parent="HPPanel"] -layout_mode = 2 -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/outline_size = 8 -theme_override_fonts/font = ExtResource("1_kqyoj") -theme_override_font_sizes/font_size = 32 -text = "HEALTH -" -horizontal_alignment = 1 -vertical_alignment = 1 -max_lines_visible = 2 diff --git a/Godot/scenes/killzone.tscn b/Godot/scenes/killzone.tscn deleted file mode 100644 index d88fa05..0000000 --- a/Godot/scenes/killzone.tscn +++ /dev/null @@ -1,13 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://cuvs5tobahf0x"] - -[ext_resource type="Script" path="res://code/killzone.gd" id="1_nmw5v"] - -[node name="Killzone" type="Area2D"] -script = ExtResource("1_nmw5v") - -[node name="Timer" type="Timer" parent="."] -wait_time = 0.6 -one_shot = true - -[connection signal="body_entered" from="." to="." method="_on_body_entered"] -[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"] diff --git a/Godot/scenes/main.tscn b/Godot/scenes/main.tscn deleted file mode 100644 index c7acd44..0000000 --- a/Godot/scenes/main.tscn +++ /dev/null @@ -1,1406 +0,0 @@ -[gd_scene load_steps=16 format=3 uid="uid://ldrqgub8ip13"] - -[ext_resource type="Script" path="res://code/main.gd" id="1_l8nqt"] -[ext_resource type="PackedScene" uid="uid://c7rps714eqdg5" path="res://scenes/player.tscn" id="1_ykwem"] -[ext_resource type="Texture2D" uid="uid://bd03f5p0dd3em" path="res://assets/graphics/tilemap/Floor.png" id="2_2lxw0"] -[ext_resource type="Texture2D" uid="uid://b5qncrso5bd14" path="res://assets/graphics/tilemap/details.png" id="3_72u1m"] -[ext_resource type="PackedScene" uid="uid://bsjy4oejfrg81" path="res://scenes/bamboo.tscn" id="4_8jerw"] -[ext_resource type="PackedScene" uid="uid://cuvs5tobahf0x" path="res://scenes/killzone.tscn" id="5_3xrri"] -[ext_resource type="Script" path="res://addons/godot_rl_agents/sync.gd" id="7_c27o5"] - -[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_auqfk"] -texture = ExtResource("2_2lxw0") -texture_region_size = Vector2i(64, 64) -0:0/0 = 0 -0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:0/0/physics_layer_0/angular_velocity = 0.0 -1:0/0 = 0 -1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:0/0/physics_layer_0/angular_velocity = 0.0 -2:0/0 = 0 -2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:0/0/physics_layer_0/angular_velocity = 0.0 -3:0/0 = 0 -3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:0/0/physics_layer_0/angular_velocity = 0.0 -4:0/0 = 0 -4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:0/0/physics_layer_0/angular_velocity = 0.0 -5:0/0 = 0 -5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:0/0/physics_layer_0/angular_velocity = 0.0 -6:0/0 = 0 -6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:0/0/physics_layer_0/angular_velocity = 0.0 -7:0/0 = 0 -7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:0/0/physics_layer_0/angular_velocity = 0.0 -8:0/0 = 0 -8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:0/0/physics_layer_0/angular_velocity = 0.0 -9:0/0 = 0 -9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:0/0/physics_layer_0/angular_velocity = 0.0 -11:0/0 = 0 -11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -11:0/0/physics_layer_0/angular_velocity = 0.0 -11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -12:0/0 = 0 -12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -12:0/0/physics_layer_0/angular_velocity = 0.0 -12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -13:0/0 = 0 -13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:0/0/physics_layer_0/angular_velocity = 0.0 -13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -14:0/0 = 0 -14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:0/0/physics_layer_0/angular_velocity = 0.0 -15:0/0 = 0 -15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:0/0/physics_layer_0/angular_velocity = 0.0 -16:0/0 = 0 -16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:0/0/physics_layer_0/angular_velocity = 0.0 -17:0/0 = 0 -17:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:0/0/physics_layer_0/angular_velocity = 0.0 -18:0/0 = 0 -18:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:0/0/physics_layer_0/angular_velocity = 0.0 -19:0/0 = 0 -19:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:0/0/physics_layer_0/angular_velocity = 0.0 -20:0/0 = 0 -20:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:0/0/physics_layer_0/angular_velocity = 0.0 -0:1/0 = 0 -0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:1/0/physics_layer_0/angular_velocity = 0.0 -1:1/0 = 0 -1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:1/0/physics_layer_0/angular_velocity = 0.0 -2:1/0 = 0 -2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:1/0/physics_layer_0/angular_velocity = 0.0 -3:1/0 = 0 -3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:1/0/physics_layer_0/angular_velocity = 0.0 -4:1/0 = 0 -4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:1/0/physics_layer_0/angular_velocity = 0.0 -5:1/0 = 0 -5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:1/0/physics_layer_0/angular_velocity = 0.0 -6:1/0 = 0 -6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:1/0/physics_layer_0/angular_velocity = 0.0 -7:1/0 = 0 -7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:1/0/physics_layer_0/angular_velocity = 0.0 -8:1/0 = 0 -8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:1/0/physics_layer_0/angular_velocity = 0.0 -9:1/0 = 0 -9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:1/0/physics_layer_0/angular_velocity = 0.0 -11:1/0 = 0 -11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -11:1/0/physics_layer_0/angular_velocity = 0.0 -11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -12:1/0 = 0 -12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -12:1/0/physics_layer_0/angular_velocity = 0.0 -13:1/0 = 0 -13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:1/0/physics_layer_0/angular_velocity = 0.0 -13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -14:1/0 = 0 -14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:1/0/physics_layer_0/angular_velocity = 0.0 -15:1/0 = 0 -15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:1/0/physics_layer_0/angular_velocity = 0.0 -16:1/0 = 0 -16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:1/0/physics_layer_0/angular_velocity = 0.0 -16:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -17:1/0 = 0 -17:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:1/0/physics_layer_0/angular_velocity = 0.0 -17:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -18:1/0 = 0 -18:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:1/0/physics_layer_0/angular_velocity = 0.0 -19:1/0 = 0 -19:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:1/0/physics_layer_0/angular_velocity = 0.0 -20:1/0 = 0 -20:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:1/0/physics_layer_0/angular_velocity = 0.0 -0:2/0 = 0 -0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:2/0/physics_layer_0/angular_velocity = 0.0 -1:2/0 = 0 -1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:2/0/physics_layer_0/angular_velocity = 0.0 -2:2/0 = 0 -2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:2/0/physics_layer_0/angular_velocity = 0.0 -3:2/0 = 0 -3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:2/0/physics_layer_0/angular_velocity = 0.0 -4:2/0 = 0 -4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:2/0/physics_layer_0/angular_velocity = 0.0 -5:2/0 = 0 -5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:2/0/physics_layer_0/angular_velocity = 0.0 -6:2/0 = 0 -6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:2/0/physics_layer_0/angular_velocity = 0.0 -7:2/0 = 0 -7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:2/0/physics_layer_0/angular_velocity = 0.0 -8:2/0 = 0 -8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:2/0/physics_layer_0/angular_velocity = 0.0 -9:2/0 = 0 -9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:2/0/physics_layer_0/angular_velocity = 0.0 -10:2/0 = 0 -10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -10:2/0/physics_layer_0/angular_velocity = 0.0 -11:2/0 = 0 -11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -11:2/0/physics_layer_0/angular_velocity = 0.0 -11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -12:2/0 = 0 -12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -12:2/0/physics_layer_0/angular_velocity = 0.0 -12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -13:2/0 = 0 -13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:2/0/physics_layer_0/angular_velocity = 0.0 -13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -14:2/0 = 0 -14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:2/0/physics_layer_0/angular_velocity = 0.0 -15:2/0 = 0 -15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:2/0/physics_layer_0/angular_velocity = 0.0 -16:2/0 = 0 -16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:2/0/physics_layer_0/angular_velocity = 0.0 -16:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -17:2/0 = 0 -17:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:2/0/physics_layer_0/angular_velocity = 0.0 -17:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -18:2/0 = 0 -18:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:2/0/physics_layer_0/angular_velocity = 0.0 -19:2/0 = 0 -19:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:2/0/physics_layer_0/angular_velocity = 0.0 -20:2/0 = 0 -20:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:2/0/physics_layer_0/angular_velocity = 0.0 -21:2/0 = 0 -21:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:2/0/physics_layer_0/angular_velocity = 0.0 -0:3/0 = 0 -0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:3/0/physics_layer_0/angular_velocity = 0.0 -1:3/0 = 0 -1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:3/0/physics_layer_0/angular_velocity = 0.0 -2:3/0 = 0 -2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:3/0/physics_layer_0/angular_velocity = 0.0 -3:3/0 = 0 -3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:3/0/physics_layer_0/angular_velocity = 0.0 -4:3/0 = 0 -4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:3/0/physics_layer_0/angular_velocity = 0.0 -5:3/0 = 0 -5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:3/0/physics_layer_0/angular_velocity = 0.0 -6:3/0 = 0 -6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:3/0/physics_layer_0/angular_velocity = 0.0 -7:3/0 = 0 -7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:3/0/physics_layer_0/angular_velocity = 0.0 -8:3/0 = 0 -8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:3/0/physics_layer_0/angular_velocity = 0.0 -9:3/0 = 0 -9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:3/0/physics_layer_0/angular_velocity = 0.0 -10:3/0 = 0 -10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -10:3/0/physics_layer_0/angular_velocity = 0.0 -11:3/0 = 0 -11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -11:3/0/physics_layer_0/angular_velocity = 0.0 -12:3/0 = 0 -12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -12:3/0/physics_layer_0/angular_velocity = 0.0 -13:3/0 = 0 -13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:3/0/physics_layer_0/angular_velocity = 0.0 -14:3/0 = 0 -14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:3/0/physics_layer_0/angular_velocity = 0.0 -15:3/0 = 0 -15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:3/0/physics_layer_0/angular_velocity = 0.0 -16:3/0 = 0 -16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:3/0/physics_layer_0/angular_velocity = 0.0 -17:3/0 = 0 -17:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:3/0/physics_layer_0/angular_velocity = 0.0 -18:3/0 = 0 -18:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:3/0/physics_layer_0/angular_velocity = 0.0 -19:3/0 = 0 -19:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:3/0/physics_layer_0/angular_velocity = 0.0 -20:3/0 = 0 -20:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:3/0/physics_layer_0/angular_velocity = 0.0 -21:3/0 = 0 -21:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:3/0/physics_layer_0/angular_velocity = 0.0 -0:4/0 = 0 -0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:4/0/physics_layer_0/angular_velocity = 0.0 -1:4/0 = 0 -1:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:4/0/physics_layer_0/angular_velocity = 0.0 -4:4/0 = 0 -4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:4/0/physics_layer_0/angular_velocity = 0.0 -5:4/0 = 0 -5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:4/0/physics_layer_0/angular_velocity = 0.0 -6:4/0 = 0 -6:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:4/0/physics_layer_0/angular_velocity = 0.0 -7:4/0 = 0 -7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:4/0/physics_layer_0/angular_velocity = 0.0 -8:4/0 = 0 -8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:4/0/physics_layer_0/angular_velocity = 0.0 -15:4/0 = 0 -15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:4/0/physics_layer_0/angular_velocity = 0.0 -16:4/0 = 0 -16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:4/0/physics_layer_0/angular_velocity = 0.0 -17:4/0 = 0 -17:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:4/0/physics_layer_0/angular_velocity = 0.0 -18:4/0 = 0 -18:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:4/0/physics_layer_0/angular_velocity = 0.0 -19:4/0 = 0 -19:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:4/0/physics_layer_0/angular_velocity = 0.0 -0:5/0 = 0 -0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:5/0/physics_layer_0/angular_velocity = 0.0 -1:5/0 = 0 -1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:5/0/physics_layer_0/angular_velocity = 0.0 -2:5/0 = 0 -2:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:5/0/physics_layer_0/angular_velocity = 0.0 -3:5/0 = 0 -3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:5/0/physics_layer_0/angular_velocity = 0.0 -4:5/0 = 0 -4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:5/0/physics_layer_0/angular_velocity = 0.0 -11:5/0 = 0 -11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) -11:5/0/physics_layer_0/angular_velocity = 0.0 -0:6/0 = 0 -0:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:6/0/physics_layer_0/angular_velocity = 0.0 -1:6/0 = 0 -1:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:6/0/physics_layer_0/angular_velocity = 0.0 -2:6/0 = 0 -2:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:6/0/physics_layer_0/angular_velocity = 0.0 -3:6/0 = 0 -3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:6/0/physics_layer_0/angular_velocity = 0.0 -4:6/0 = 0 -4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:6/0/physics_layer_0/angular_velocity = 0.0 -5:6/0 = 0 -5:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:6/0/physics_layer_0/angular_velocity = 0.0 -11:6/0 = 0 -11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -11:6/0/physics_layer_0/angular_velocity = 0.0 -11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -12:6/0 = 0 -12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -12:6/0/physics_layer_0/angular_velocity = 0.0 -12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -13:6/0 = 0 -13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:6/0/physics_layer_0/angular_velocity = 0.0 -13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -14:6/0 = 0 -14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:6/0/physics_layer_0/angular_velocity = 0.0 -15:6/0 = 0 -15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:6/0/physics_layer_0/angular_velocity = 0.0 -16:6/0 = 0 -16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:6/0/physics_layer_0/angular_velocity = 0.0 -17:6/0 = 0 -17:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:6/0/physics_layer_0/angular_velocity = 0.0 -18:6/0 = 0 -18:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:6/0/physics_layer_0/angular_velocity = 0.0 -19:6/0 = 0 -19:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:6/0/physics_layer_0/angular_velocity = 0.0 -20:6/0 = 0 -20:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:6/0/physics_layer_0/angular_velocity = 0.0 -0:7/0 = 0 -0:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:7/0/physics_layer_0/angular_velocity = 0.0 -1:7/0 = 0 -1:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:7/0/physics_layer_0/angular_velocity = 0.0 -2:7/0 = 0 -2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:7/0/physics_layer_0/angular_velocity = 0.0 -3:7/0 = 0 -3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:7/0/physics_layer_0/angular_velocity = 0.0 -4:7/0 = 0 -4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:7/0/physics_layer_0/angular_velocity = 0.0 -5:7/0 = 0 -5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:7/0/physics_layer_0/angular_velocity = 0.0 -6:7/0 = 0 -6:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:7/0/physics_layer_0/angular_velocity = 0.0 -7:7/0 = 0 -7:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:7/0/physics_layer_0/angular_velocity = 0.0 -8:7/0 = 0 -8:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:7/0/physics_layer_0/angular_velocity = 0.0 -9:7/0 = 0 -9:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:7/0/physics_layer_0/angular_velocity = 0.0 -11:7/0 = 0 -11:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -11:7/0/physics_layer_0/angular_velocity = 0.0 -11:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -12:7/0 = 0 -12:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -12:7/0/physics_layer_0/angular_velocity = 0.0 -13:7/0 = 0 -13:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:7/0/physics_layer_0/angular_velocity = 0.0 -13:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -14:7/0 = 0 -14:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:7/0/physics_layer_0/angular_velocity = 0.0 -15:7/0 = 0 -15:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:7/0/physics_layer_0/angular_velocity = 0.0 -16:7/0 = 0 -16:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:7/0/physics_layer_0/angular_velocity = 0.0 -16:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -17:7/0 = 0 -17:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:7/0/physics_layer_0/angular_velocity = 0.0 -17:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -18:7/0 = 0 -18:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:7/0/physics_layer_0/angular_velocity = 0.0 -19:7/0 = 0 -19:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:7/0/physics_layer_0/angular_velocity = 0.0 -20:7/0 = 0 -20:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:7/0/physics_layer_0/angular_velocity = 0.0 -0:8/0 = 0 -0:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:8/0/physics_layer_0/angular_velocity = 0.0 -1:8/0 = 0 -1:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:8/0/physics_layer_0/angular_velocity = 0.0 -2:8/0 = 0 -2:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:8/0/physics_layer_0/angular_velocity = 0.0 -3:8/0 = 0 -3:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:8/0/physics_layer_0/angular_velocity = 0.0 -4:8/0 = 0 -4:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:8/0/physics_layer_0/angular_velocity = 0.0 -5:8/0 = 0 -5:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:8/0/physics_layer_0/angular_velocity = 0.0 -6:8/0 = 0 -6:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:8/0/physics_layer_0/angular_velocity = 0.0 -7:8/0 = 0 -7:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:8/0/physics_layer_0/angular_velocity = 0.0 -8:8/0 = 0 -8:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:8/0/physics_layer_0/angular_velocity = 0.0 -9:8/0 = 0 -9:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:8/0/physics_layer_0/angular_velocity = 0.0 -11:8/0 = 0 -11:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -11:8/0/physics_layer_0/angular_velocity = 0.0 -11:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -12:8/0 = 0 -12:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -12:8/0/physics_layer_0/angular_velocity = 0.0 -12:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -13:8/0 = 0 -13:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:8/0/physics_layer_0/angular_velocity = 0.0 -13:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -14:8/0 = 0 -14:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:8/0/physics_layer_0/angular_velocity = 0.0 -15:8/0 = 0 -15:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:8/0/physics_layer_0/angular_velocity = 0.0 -16:8/0 = 0 -16:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:8/0/physics_layer_0/angular_velocity = 0.0 -16:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -17:8/0 = 0 -17:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:8/0/physics_layer_0/angular_velocity = 0.0 -17:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -18:8/0 = 0 -18:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:8/0/physics_layer_0/angular_velocity = 0.0 -19:8/0 = 0 -19:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:8/0/physics_layer_0/angular_velocity = 0.0 -20:8/0 = 0 -20:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:8/0/physics_layer_0/angular_velocity = 0.0 -21:8/0 = 0 -21:8/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:8/0/physics_layer_0/angular_velocity = 0.0 -0:9/0 = 0 -0:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:9/0/physics_layer_0/angular_velocity = 0.0 -1:9/0 = 0 -1:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:9/0/physics_layer_0/angular_velocity = 0.0 -2:9/0 = 0 -2:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:9/0/physics_layer_0/angular_velocity = 0.0 -3:9/0 = 0 -3:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:9/0/physics_layer_0/angular_velocity = 0.0 -4:9/0 = 0 -4:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:9/0/physics_layer_0/angular_velocity = 0.0 -5:9/0 = 0 -5:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:9/0/physics_layer_0/angular_velocity = 0.0 -6:9/0 = 0 -6:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:9/0/physics_layer_0/angular_velocity = 0.0 -7:9/0 = 0 -7:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:9/0/physics_layer_0/angular_velocity = 0.0 -8:9/0 = 0 -8:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:9/0/physics_layer_0/angular_velocity = 0.0 -9:9/0 = 0 -9:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:9/0/physics_layer_0/angular_velocity = 0.0 -10:9/0 = 0 -10:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -10:9/0/physics_layer_0/angular_velocity = 0.0 -11:9/0 = 0 -11:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -11:9/0/physics_layer_0/angular_velocity = 0.0 -12:9/0 = 0 -12:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -12:9/0/physics_layer_0/angular_velocity = 0.0 -13:9/0 = 0 -13:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:9/0/physics_layer_0/angular_velocity = 0.0 -14:9/0 = 0 -14:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:9/0/physics_layer_0/angular_velocity = 0.0 -15:9/0 = 0 -15:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:9/0/physics_layer_0/angular_velocity = 0.0 -16:9/0 = 0 -16:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:9/0/physics_layer_0/angular_velocity = 0.0 -17:9/0 = 0 -17:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:9/0/physics_layer_0/angular_velocity = 0.0 -18:9/0 = 0 -18:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:9/0/physics_layer_0/angular_velocity = 0.0 -19:9/0 = 0 -19:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:9/0/physics_layer_0/angular_velocity = 0.0 -20:9/0 = 0 -20:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:9/0/physics_layer_0/angular_velocity = 0.0 -21:9/0 = 0 -21:9/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:9/0/physics_layer_0/angular_velocity = 0.0 -0:10/0 = 0 -0:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:10/0/physics_layer_0/angular_velocity = 0.0 -1:10/0 = 0 -1:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:10/0/physics_layer_0/angular_velocity = 0.0 -2:10/0 = 0 -2:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:10/0/physics_layer_0/angular_velocity = 0.0 -3:10/0 = 0 -3:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:10/0/physics_layer_0/angular_velocity = 0.0 -4:10/0 = 0 -4:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:10/0/physics_layer_0/angular_velocity = 0.0 -5:10/0 = 0 -5:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:10/0/physics_layer_0/angular_velocity = 0.0 -6:10/0 = 0 -6:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:10/0/physics_layer_0/angular_velocity = 0.0 -7:10/0 = 0 -7:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:10/0/physics_layer_0/angular_velocity = 0.0 -8:10/0 = 0 -8:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:10/0/physics_layer_0/angular_velocity = 0.0 -9:10/0 = 0 -9:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:10/0/physics_layer_0/angular_velocity = 0.0 -10:10/0 = 0 -10:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -10:10/0/physics_layer_0/angular_velocity = 0.0 -15:10/0 = 0 -15:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:10/0/physics_layer_0/angular_velocity = 0.0 -16:10/0 = 0 -16:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:10/0/physics_layer_0/angular_velocity = 0.0 -17:10/0 = 0 -17:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:10/0/physics_layer_0/angular_velocity = 0.0 -18:10/0 = 0 -18:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:10/0/physics_layer_0/angular_velocity = 0.0 -19:10/0 = 0 -19:10/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:10/0/physics_layer_0/angular_velocity = 0.0 -0:11/0 = 0 -0:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:11/0/physics_layer_0/angular_velocity = 0.0 -1:11/0 = 0 -1:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:11/0/physics_layer_0/angular_velocity = 0.0 -2:11/0 = 0 -2:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:11/0/physics_layer_0/angular_velocity = 0.0 -3:11/0 = 0 -3:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:11/0/physics_layer_0/angular_velocity = 0.0 -4:11/0 = 0 -4:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:11/0/physics_layer_0/angular_velocity = 0.0 -5:11/0 = 0 -5:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:11/0/physics_layer_0/angular_velocity = 0.0 -6:11/0 = 0 -6:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:11/0/physics_layer_0/angular_velocity = 0.0 -7:11/0 = 0 -7:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:11/0/physics_layer_0/angular_velocity = 0.0 -8:11/0 = 0 -8:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:11/0/physics_layer_0/angular_velocity = 0.0 -9:11/0 = 0 -9:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:11/0/physics_layer_0/angular_velocity = 0.0 -10:11/0 = 0 -10:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -10:11/0/physics_layer_0/angular_velocity = 0.0 -19:11/0 = 0 -19:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:11/0/physics_layer_0/angular_velocity = 0.0 -20:11/0 = 0 -20:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:11/0/physics_layer_0/angular_velocity = 0.0 -21:11/0 = 0 -21:11/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:11/0/physics_layer_0/angular_velocity = 0.0 -0:12/0 = 0 -0:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:12/0/physics_layer_0/angular_velocity = 0.0 -1:12/0 = 0 -1:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:12/0/physics_layer_0/angular_velocity = 0.0 -2:12/0 = 0 -2:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:12/0/physics_layer_0/angular_velocity = 0.0 -3:12/0 = 0 -3:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:12/0/physics_layer_0/angular_velocity = 0.0 -4:12/0 = 0 -4:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:12/0/physics_layer_0/angular_velocity = 0.0 -6:12/0 = 0 -6:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:12/0/physics_layer_0/angular_velocity = 0.0 -7:12/0 = 0 -7:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:12/0/physics_layer_0/angular_velocity = 0.0 -8:12/0 = 0 -8:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:12/0/physics_layer_0/angular_velocity = 0.0 -9:12/0 = 0 -9:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:12/0/physics_layer_0/angular_velocity = 0.0 -10:12/0 = 0 -10:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -10:12/0/physics_layer_0/angular_velocity = 0.0 -19:12/0 = 0 -19:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:12/0/physics_layer_0/angular_velocity = 0.0 -20:12/0 = 0 -20:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:12/0/physics_layer_0/angular_velocity = 0.0 -21:12/0 = 0 -21:12/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:12/0/physics_layer_0/angular_velocity = 0.0 -0:13/0 = 0 -0:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:13/0/physics_layer_0/angular_velocity = 0.0 -0:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, -20.5, -32, -20, 32, -32, 32) -1:13/0 = 0 -1:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:13/0/physics_layer_0/angular_velocity = 0.0 -2:13/0 = 0 -2:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:13/0/physics_layer_0/angular_velocity = 0.0 -2:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(20.5, -32, 32, -32, 32, 32, 20.5, 32) -3:13/0 = 0 -3:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:13/0/physics_layer_0/angular_velocity = 0.0 -4:13/0 = 0 -4:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:13/0/physics_layer_0/angular_velocity = 0.0 -5:13/0 = 0 -5:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:13/0/physics_layer_0/angular_velocity = 0.0 -6:13/0 = 0 -6:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:13/0/physics_layer_0/angular_velocity = 0.0 -7:13/0 = 0 -7:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:13/0/physics_layer_0/angular_velocity = 0.0 -8:13/0 = 0 -8:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:13/0/physics_layer_0/angular_velocity = 0.0 -9:13/0 = 0 -9:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:13/0/physics_layer_0/angular_velocity = 0.0 -19:13/0 = 0 -19:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:13/0/physics_layer_0/angular_velocity = 0.0 -20:13/0 = 0 -20:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:13/0/physics_layer_0/angular_velocity = 0.0 -21:13/0 = 0 -21:13/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:13/0/physics_layer_0/angular_velocity = 0.0 -0:14/0 = 0 -0:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:14/0/physics_layer_0/angular_velocity = 0.0 -0:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, -20.5, -32, -20, 32, -32, 32) -1:14/0 = 0 -1:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:14/0/physics_layer_0/angular_velocity = 0.0 -2:14/0 = 0 -2:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:14/0/physics_layer_0/angular_velocity = 0.0 -2:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(20.5, -32, 32, -32, 32, 32, 20.5, 32) -3:14/0 = 0 -3:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:14/0/physics_layer_0/angular_velocity = 0.0 -4:14/0 = 0 -4:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:14/0/physics_layer_0/angular_velocity = 0.0 -5:14/0 = 0 -5:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:14/0/physics_layer_0/angular_velocity = 0.0 -6:14/0 = 0 -6:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:14/0/physics_layer_0/angular_velocity = 0.0 -7:14/0 = 0 -7:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:14/0/physics_layer_0/angular_velocity = 0.0 -8:14/0 = 0 -8:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:14/0/physics_layer_0/angular_velocity = 0.0 -9:14/0 = 0 -9:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:14/0/physics_layer_0/angular_velocity = 0.0 -19:14/0 = 0 -19:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:14/0/physics_layer_0/angular_velocity = 0.0 -20:14/0 = 0 -20:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:14/0/physics_layer_0/angular_velocity = 0.0 -21:14/0 = 0 -21:14/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:14/0/physics_layer_0/angular_velocity = 0.0 -0:15/0 = 0 -0:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:15/0/physics_layer_0/angular_velocity = 0.0 -0:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, -20.5, -32, -20, 32, -32, 32) -1:15/0 = 0 -1:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:15/0/physics_layer_0/angular_velocity = 0.0 -2:15/0 = 0 -2:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:15/0/physics_layer_0/angular_velocity = 0.0 -2:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(20.5, -32, 32, -32, 32, 32, 20.5, 32) -3:15/0 = 0 -3:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:15/0/physics_layer_0/angular_velocity = 0.0 -4:15/0 = 0 -4:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:15/0/physics_layer_0/angular_velocity = 0.0 -5:15/0 = 0 -5:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:15/0/physics_layer_0/angular_velocity = 0.0 -6:15/0 = 0 -6:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:15/0/physics_layer_0/angular_velocity = 0.0 -7:15/0 = 0 -7:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:15/0/physics_layer_0/angular_velocity = 0.0 -8:15/0 = 0 -8:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:15/0/physics_layer_0/angular_velocity = 0.0 -9:15/0 = 0 -9:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:15/0/physics_layer_0/angular_velocity = 0.0 -10:15/0 = 0 -10:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -10:15/0/physics_layer_0/angular_velocity = 0.0 -19:15/0 = 0 -19:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:15/0/physics_layer_0/angular_velocity = 0.0 -20:15/0 = 0 -20:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:15/0/physics_layer_0/angular_velocity = 0.0 -21:15/0 = 0 -21:15/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:15/0/physics_layer_0/angular_velocity = 0.0 -0:16/0 = 0 -0:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:16/0/physics_layer_0/angular_velocity = 0.0 -1:16/0 = 0 -1:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:16/0/physics_layer_0/angular_velocity = 0.0 -2:16/0 = 0 -2:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:16/0/physics_layer_0/angular_velocity = 0.0 -3:16/0 = 0 -3:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:16/0/physics_layer_0/angular_velocity = 0.0 -4:16/0 = 0 -4:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:16/0/physics_layer_0/angular_velocity = 0.0 -5:16/0 = 0 -5:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:16/0/physics_layer_0/angular_velocity = 0.0 -6:16/0 = 0 -6:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:16/0/physics_layer_0/angular_velocity = 0.0 -7:16/0 = 0 -7:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:16/0/physics_layer_0/angular_velocity = 0.0 -8:16/0 = 0 -8:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:16/0/physics_layer_0/angular_velocity = 0.0 -9:16/0 = 0 -9:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:16/0/physics_layer_0/angular_velocity = 0.0 -10:16/0 = 0 -10:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -10:16/0/physics_layer_0/angular_velocity = 0.0 -19:16/0 = 0 -19:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:16/0/physics_layer_0/angular_velocity = 0.0 -20:16/0 = 0 -20:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:16/0/physics_layer_0/angular_velocity = 0.0 -21:16/0 = 0 -21:16/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:16/0/physics_layer_0/angular_velocity = 0.0 -0:17/0 = 0 -0:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:17/0/physics_layer_0/angular_velocity = 0.0 -1:17/0 = 0 -1:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:17/0/physics_layer_0/angular_velocity = 0.0 -2:17/0 = 0 -2:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:17/0/physics_layer_0/angular_velocity = 0.0 -3:17/0 = 0 -3:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:17/0/physics_layer_0/angular_velocity = 0.0 -4:17/0 = 0 -4:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:17/0/physics_layer_0/angular_velocity = 0.0 -5:17/0 = 0 -5:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:17/0/physics_layer_0/angular_velocity = 0.0 -6:17/0 = 0 -6:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:17/0/physics_layer_0/angular_velocity = 0.0 -7:17/0 = 0 -7:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:17/0/physics_layer_0/angular_velocity = 0.0 -8:17/0 = 0 -8:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:17/0/physics_layer_0/angular_velocity = 0.0 -16:17/0 = 0 -16:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:17/0/physics_layer_0/angular_velocity = 0.0 -17:17/0 = 0 -17:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:17/0/physics_layer_0/angular_velocity = 0.0 -18:17/0 = 0 -18:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:17/0/physics_layer_0/angular_velocity = 0.0 -19:17/0 = 0 -19:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:17/0/physics_layer_0/angular_velocity = 0.0 -20:17/0 = 0 -20:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:17/0/physics_layer_0/angular_velocity = 0.0 -21:17/0 = 0 -21:17/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:17/0/physics_layer_0/angular_velocity = 0.0 -0:18/0 = 0 -0:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:18/0/physics_layer_0/angular_velocity = 0.0 -1:18/0 = 0 -1:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:18/0/physics_layer_0/angular_velocity = 0.0 -2:18/0 = 0 -2:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:18/0/physics_layer_0/angular_velocity = 0.0 -3:18/0 = 0 -3:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:18/0/physics_layer_0/angular_velocity = 0.0 -4:18/0 = 0 -4:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:18/0/physics_layer_0/angular_velocity = 0.0 -5:18/0 = 0 -5:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:18/0/physics_layer_0/angular_velocity = 0.0 -6:18/0 = 0 -6:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:18/0/physics_layer_0/angular_velocity = 0.0 -7:18/0 = 0 -7:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:18/0/physics_layer_0/angular_velocity = 0.0 -8:18/0 = 0 -8:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:18/0/physics_layer_0/angular_velocity = 0.0 -9:18/0 = 0 -9:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:18/0/physics_layer_0/angular_velocity = 0.0 -13:18/0 = 0 -13:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:18/0/physics_layer_0/angular_velocity = 0.0 -14:18/0 = 0 -14:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:18/0/physics_layer_0/angular_velocity = 0.0 -14:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -15:18/0 = 0 -15:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:18/0/physics_layer_0/angular_velocity = 0.0 -15:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -16:18/0 = 0 -16:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:18/0/physics_layer_0/angular_velocity = 0.0 -16:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -17:18/0 = 0 -17:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:18/0/physics_layer_0/angular_velocity = 0.0 -17:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -18:18/0 = 0 -18:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:18/0/physics_layer_0/angular_velocity = 0.0 -18:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -19:18/0 = 0 -19:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:18/0/physics_layer_0/angular_velocity = 0.0 -19:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -20:18/0 = 0 -20:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:18/0/physics_layer_0/angular_velocity = 0.0 -21:18/0 = 0 -21:18/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:18/0/physics_layer_0/angular_velocity = 0.0 -21:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -0:19/0 = 0 -0:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:19/0/physics_layer_0/angular_velocity = 0.0 -1:19/0 = 0 -1:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:19/0/physics_layer_0/angular_velocity = 0.0 -2:19/0 = 0 -2:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:19/0/physics_layer_0/angular_velocity = 0.0 -3:19/0 = 0 -3:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:19/0/physics_layer_0/angular_velocity = 0.0 -4:19/0 = 0 -4:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:19/0/physics_layer_0/angular_velocity = 0.0 -5:19/0 = 0 -5:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:19/0/physics_layer_0/angular_velocity = 0.0 -6:19/0 = 0 -6:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:19/0/physics_layer_0/angular_velocity = 0.0 -7:19/0 = 0 -7:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:19/0/physics_layer_0/angular_velocity = 0.0 -8:19/0 = 0 -8:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:19/0/physics_layer_0/angular_velocity = 0.0 -9:19/0 = 0 -9:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:19/0/physics_layer_0/angular_velocity = 0.0 -13:19/0 = 0 -13:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:19/0/physics_layer_0/angular_velocity = 0.0 -14:19/0 = 0 -14:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:19/0/physics_layer_0/angular_velocity = 0.0 -14:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -15:19/0 = 0 -15:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:19/0/physics_layer_0/angular_velocity = 0.0 -16:19/0 = 0 -16:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:19/0/physics_layer_0/angular_velocity = 0.0 -16:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -17:19/0 = 0 -17:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:19/0/physics_layer_0/angular_velocity = 0.0 -17:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -18:19/0 = 0 -18:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:19/0/physics_layer_0/angular_velocity = 0.0 -18:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -19:19/0 = 0 -19:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:19/0/physics_layer_0/angular_velocity = 0.0 -19:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -20:19/0 = 0 -20:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:19/0/physics_layer_0/angular_velocity = 0.0 -21:19/0 = 0 -21:19/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:19/0/physics_layer_0/angular_velocity = 0.0 -21:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -0:20/0 = 0 -0:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:20/0/physics_layer_0/angular_velocity = 0.0 -1:20/0 = 0 -1:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:20/0/physics_layer_0/angular_velocity = 0.0 -2:20/0 = 0 -2:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:20/0/physics_layer_0/angular_velocity = 0.0 -3:20/0 = 0 -3:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:20/0/physics_layer_0/angular_velocity = 0.0 -4:20/0 = 0 -4:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:20/0/physics_layer_0/angular_velocity = 0.0 -5:20/0 = 0 -5:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:20/0/physics_layer_0/angular_velocity = 0.0 -6:20/0 = 0 -6:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:20/0/physics_layer_0/angular_velocity = 0.0 -7:20/0 = 0 -7:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:20/0/physics_layer_0/angular_velocity = 0.0 -8:20/0 = 0 -8:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:20/0/physics_layer_0/angular_velocity = 0.0 -9:20/0 = 0 -9:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:20/0/physics_layer_0/angular_velocity = 0.0 -10:20/0 = 0 -10:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -10:20/0/physics_layer_0/angular_velocity = 0.0 -13:20/0 = 0 -13:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:20/0/physics_layer_0/angular_velocity = 0.0 -14:20/0 = 0 -14:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:20/0/physics_layer_0/angular_velocity = 0.0 -14:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -15:20/0 = 0 -15:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:20/0/physics_layer_0/angular_velocity = 0.0 -15:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -16:20/0 = 0 -16:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:20/0/physics_layer_0/angular_velocity = 0.0 -16:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -17:20/0 = 0 -17:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:20/0/physics_layer_0/angular_velocity = 0.0 -17:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -18:20/0 = 0 -18:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:20/0/physics_layer_0/angular_velocity = 0.0 -18:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -19:20/0 = 0 -19:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:20/0/physics_layer_0/angular_velocity = 0.0 -19:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -20:20/0 = 0 -20:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -20:20/0/physics_layer_0/angular_velocity = 0.0 -21:20/0 = 0 -21:20/0/physics_layer_0/linear_velocity = Vector2(0, 0) -21:20/0/physics_layer_0/angular_velocity = 0.0 -21:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -32, 32, -32, 32, 32, -32, 32) -0:21/0 = 0 -0:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:21/0/physics_layer_0/angular_velocity = 0.0 -1:21/0 = 0 -1:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:21/0/physics_layer_0/angular_velocity = 0.0 -2:21/0 = 0 -2:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:21/0/physics_layer_0/angular_velocity = 0.0 -3:21/0 = 0 -3:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:21/0/physics_layer_0/angular_velocity = 0.0 -4:21/0 = 0 -4:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:21/0/physics_layer_0/angular_velocity = 0.0 -5:21/0 = 0 -5:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:21/0/physics_layer_0/angular_velocity = 0.0 -6:21/0 = 0 -6:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:21/0/physics_layer_0/angular_velocity = 0.0 -7:21/0 = 0 -7:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:21/0/physics_layer_0/angular_velocity = 0.0 -8:21/0 = 0 -8:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:21/0/physics_layer_0/angular_velocity = 0.0 -9:21/0 = 0 -9:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -9:21/0/physics_layer_0/angular_velocity = 0.0 -10:21/0 = 0 -10:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -10:21/0/physics_layer_0/angular_velocity = 0.0 -13:21/0 = 0 -13:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:21/0/physics_layer_0/angular_velocity = 0.0 -14:21/0 = 0 -14:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:21/0/physics_layer_0/angular_velocity = 0.0 -15:21/0 = 0 -15:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:21/0/physics_layer_0/angular_velocity = 0.0 -16:21/0 = 0 -16:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:21/0/physics_layer_0/angular_velocity = 0.0 -17:21/0 = 0 -17:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:21/0/physics_layer_0/angular_velocity = 0.0 -18:21/0 = 0 -18:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:21/0/physics_layer_0/angular_velocity = 0.0 -19:21/0 = 0 -19:21/0/physics_layer_0/linear_velocity = Vector2(0, 0) -19:21/0/physics_layer_0/angular_velocity = 0.0 -0:22/0 = 0 -0:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:22/0/physics_layer_0/angular_velocity = 0.0 -1:22/0 = 0 -1:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:22/0/physics_layer_0/angular_velocity = 0.0 -3:22/0 = 0 -3:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:22/0/physics_layer_0/angular_velocity = 0.0 -4:22/0 = 0 -4:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:22/0/physics_layer_0/angular_velocity = 0.0 -5:22/0 = 0 -5:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:22/0/physics_layer_0/angular_velocity = 0.0 -6:22/0 = 0 -6:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -6:22/0/physics_layer_0/angular_velocity = 0.0 -7:22/0 = 0 -7:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -7:22/0/physics_layer_0/angular_velocity = 0.0 -8:22/0 = 0 -8:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -8:22/0/physics_layer_0/angular_velocity = 0.0 -13:22/0 = 0 -13:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -13:22/0/physics_layer_0/angular_velocity = 0.0 -14:22/0 = 0 -14:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -14:22/0/physics_layer_0/angular_velocity = 0.0 -15:22/0 = 0 -15:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -15:22/0/physics_layer_0/angular_velocity = 0.0 -16:22/0 = 0 -16:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -16:22/0/physics_layer_0/angular_velocity = 0.0 -17:22/0 = 0 -17:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -17:22/0/physics_layer_0/angular_velocity = 0.0 -18:22/0 = 0 -18:22/0/physics_layer_0/linear_velocity = Vector2(0, 0) -18:22/0/physics_layer_0/angular_velocity = 0.0 -0:23/0 = 0 -0:23/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:23/0/physics_layer_0/angular_velocity = 0.0 -1:23/0 = 0 -1:23/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:23/0/physics_layer_0/angular_velocity = 0.0 -2:23/0 = 0 -2:23/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:23/0/physics_layer_0/angular_velocity = 0.0 -3:23/0 = 0 -3:23/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:23/0/physics_layer_0/angular_velocity = 0.0 -4:23/0 = 0 -4:23/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:23/0/physics_layer_0/angular_velocity = 0.0 -0:24/0 = 0 -0:24/0/physics_layer_0/linear_velocity = Vector2(0, 0) -0:24/0/physics_layer_0/angular_velocity = 0.0 -1:24/0 = 0 -1:24/0/physics_layer_0/linear_velocity = Vector2(0, 0) -1:24/0/physics_layer_0/angular_velocity = 0.0 -2:24/0 = 0 -2:24/0/physics_layer_0/linear_velocity = Vector2(0, 0) -2:24/0/physics_layer_0/angular_velocity = 0.0 -3:24/0 = 0 -3:24/0/physics_layer_0/linear_velocity = Vector2(0, 0) -3:24/0/physics_layer_0/angular_velocity = 0.0 -4:24/0 = 0 -4:24/0/physics_layer_0/linear_velocity = Vector2(0, 0) -4:24/0/physics_layer_0/angular_velocity = 0.0 -5:24/0 = 0 -5:24/0/physics_layer_0/linear_velocity = Vector2(0, 0) -5:24/0/physics_layer_0/angular_velocity = 0.0 - -[sub_resource type="TileSet" id="TileSet_xdu0j"] -tile_size = Vector2i(64, 64) -physics_layer_0/collision_layer = 1 -physics_layer_0/collision_mask = 6 -sources/0 = SubResource("TileSetAtlasSource_auqfk") - -[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_m24ei"] -texture = ExtResource("3_72u1m") -texture_region_size = Vector2i(64, 64) -0:3/0 = 0 -1:3/0 = 0 -2:3/0 = 0 -3:3/0 = 0 -4:3/0 = 0 -5:3/0 = 0 -6:3/0 = 0 -7:3/0 = 0 -7:2/0 = 0 -6:2/0 = 0 -5:2/0 = 0 -4:2/0 = 0 -3:2/0 = 0 -2:2/0 = 0 -1:2/0 = 0 -0:2/0 = 0 -0:1/0 = 0 -0:0/0 = 0 -1:0/0 = 0 -2:0/0 = 0 -3:0/0 = 0 -4:0/0 = 0 -5:0/0 = 0 -6:0/0 = 0 -7:0/0 = 0 -8:0/0 = 0 -9:0/0 = 0 -10:0/0 = 0 -11:0/0 = 0 -12:0/0 = 0 -13:0/0 = 0 -14:0/0 = 0 -15:0/0 = 0 - -[sub_resource type="TileSet" id="TileSet_orc4v"] -tile_size = Vector2i(64, 64) -sources/0 = SubResource("TileSetAtlasSource_m24ei") - -[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_5dw0q"] -distance = -250.0 - -[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_7ioaa"] -normal = Vector2(-1, 0) -distance = -1724.0 - -[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_fq7i5"] -normal = Vector2(0, 1) -distance = -1727.0 - -[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_kp00i"] -normal = Vector2(1, 0) -distance = -1921.0 - -[node name="Main" type="Node2D"] -script = ExtResource("1_l8nqt") - -[node name="Map" type="Node" parent="."] - -[node name="Terrain" type="TileMap" parent="Map"] -position = Vector2(0, 1) -tile_set = SubResource("TileSet_xdu0j") -rendering_quadrant_size = 64 -format = 2 -layer_0/tile_data = PackedInt32Array(458760, 131072, 13, 458759, 0, 13, 524295, 0, 14, 589831, 0, 14, 655367, 0, 14, 720903, 0, 15, 720904, 131072, 15, 655368, 131072, 14, 589832, 131072, 14, 524296, 131072, 14, 720900, 1048576, 1, 655372, 1048576, 1, 851971, 1048576, 1, 917506, 1048576, 1, 983041, 1048576, 1, 851972, 851968, 2, 720908, 851968, 2, 655374, 851968, 2, 589840, 851968, 2, 720901, 786432, 2, 720902, 786432, 2, 720905, 786432, 2, 720906, 786432, 2, 720907, 786432, 2, 655373, 786432, 2, 589839, 786432, 2, 786436, 851968, 1, 917507, 851968, 2, 983042, 851968, 2, 1048577, 851968, 2, 1114112, 851968, 2, 1048576, 1048576, 1, 1179647, 1048576, 1, 1245183, 851968, 1, 1310719, 1048576, 2, 1245184, 786432, 0, 1245185, 786432, 0, 1245186, 786432, 0, 1245187, 786432, 0, 1245188, 851968, 0, 1310725, 786432, 0, 1310726, 786432, 0, 1310724, 1048576, 2, 1310727, 1114112, 2, 1245191, 720896, 0, 1245192, 786432, 0, 1245193, 851968, 0, 1310729, 1048576, 2, 1310730, 786432, 0, 1310731, 786432, 0, 1310732, 786432, 0, 1310733, 786432, 0, 1310734, 786432, 0, 1310735, 786432, 0, 1310736, 786432, 0, 1310737, 851968, 0, 1376273, 1048576, 2, 1376274, 786432, 0, 1376275, 1114112, 2, 1310739, 720896, 0, 1310740, 1114112, 2, 1245204, 720896, 1, 1179668, 720896, 0, 1179669, 1114112, 2, 1114133, 720896, 1, 1048597, 720896, 1, 983061, 720896, 0, 983062, 1114112, 2, 917526, 720896, 1, 851990, 720896, 1, 720917, 720896, 1, 655381, 720896, 1, 589845, 720896, 1, 524309, 720896, 1, 458773, 720896, 1, 393237, 720896, 1, 786453, 720896, 2, 786454, 1114112, 1, 327701, 1114112, 1, 327700, 786432, 2, 327699, 1048576, 1, 393234, 1048576, 1, 458769, 1048576, 1, 524304, 1048576, 1, 589838, 1048576, 1, 524305, 851968, 2, 458770, 851968, 2, 393235, 851968, 2, 1245206, 655360, 11, 1245205, 655360, 12, 1310741, 655360, 12, 1376277, 655360, 12, 1441813, 655360, 12, 1441814, 655360, 12, 1441815, 655360, 12, 1441816, 655360, 12, 1441817, 655360, 12, 1441818, 655360, 12, 1376282, 655360, 12, 1310746, 655360, 12, 1245210, 655360, 12, 1179674, 655360, 12, 1048602, 655360, 12, 983066, 655360, 12, 917530, 655360, 12, 786458, 655360, 12, 720922, 655360, 12, 524314, 655360, 12, 458778, 655360, 12, 327706, 655360, 12, 262170, 655360, 12, 196634, 655360, 12, 65562, 655360, 12, -65510, 655360, 12, -131046, 655360, 12, -196582, 655360, 12, -262118, 655360, 12, -327654, 655360, 12, -393190, 655360, 12, -524262, 655360, 12, -589798, 655360, 12, -655334, 655360, 12, -720870, 589824, 12, -786406, 655360, 12, -851942, 655360, 12, -917478, 655360, 12, -983014, 655360, 12, -1179622, 655360, 12, -1441766, 655360, 12, -1507302, 655360, 12, -1703910, 655360, 12, -1769446, 655360, 12, -1769447, 655360, 12, -1769448, 655360, 12, -1769449, 655360, 12, -1769450, 655360, 12, -1769451, 655360, 12, -1769452, 655360, 12, -1769453, 655360, 12, -1769454, 655360, 12, -1769455, 655360, 12, -1769456, 655360, 12, -1769457, 655360, 12, -1769458, 655360, 12, -1769459, 655360, 12, -1769460, 655360, 12, -1769461, 655360, 12, -1769462, 655360, 12, -1769463, 458752, 12, -1769464, 655360, 12, -1769465, 458752, 12, -1769466, 655360, 12, -1769467, 655360, 12, -1638374, 655360, 12, -1572838, 655360, 12, -1376230, 655360, 12, -1310694, 655360, 12, -1245158, 655360, 12, -1048550, 655360, 12, -1114086, 655360, 12, -458726, 655360, 12, 26, 589824, 12, 131098, 655360, 12, 393242, 655360, 12, 589850, 655360, 12, 655386, 655360, 12, 851994, 655360, 12, 1114138, 655360, 12, 1441812, 655360, 12, 1441811, 655360, 12, 1441810, 655360, 12, 1441809, 458752, 12, 1441808, 655360, 12, 1441807, 655360, 12, 1441806, 655360, 12, 1441805, 655360, 12, 1441804, 655360, 12, 1441803, 655360, 12, 1441802, 655360, 12, 1441801, 655360, 12, 1441800, 655360, 12, 1441799, 655360, 12, 1441798, 655360, 12, 1441797, 458752, 12, 1441796, 655360, 12, 1441795, 655360, 12, 1441794, 655360, 12, 1441793, 655360, 12, 1507324, 655360, 12, 1507325, 655360, 12, 1507326, 655360, 12, 1507327, 655360, 12, 1441792, 655360, 12, 1507322, 655360, 12, 1507321, 655360, 12, 1507320, 655360, 12, 1507319, 655360, 12, 1507318, 655360, 12, 1507317, 589824, 12, 1507316, 655360, 12, 1507315, 655360, 12, 1507314, 655360, 12, 1507313, 655360, 12, 1507312, 655360, 12, 1507311, 655360, 12, 1507310, 589824, 12, 1507309, 655360, 12, 1507308, 655360, 12, 1507307, 655360, 12, 1507306, 655360, 12, 1507305, 655360, 12, 1507304, 655360, 12, 1507303, 655360, 12, 1507302, 655360, 12, 1507301, 655360, 12, 1507300, 655360, 12, 1507299, 655360, 12, 1507298, 655360, 12, 1441762, 655360, 12, 1376226, 655360, 12, 1310690, 655360, 12, 1245154, 655360, 12, 1179618, 655360, 12, 1114082, 655360, 12, 1048546, 655360, 12, 983010, 655360, 12, 917474, 655360, 12, 851938, 655360, 12, 786402, 655360, 12, 720866, 655360, 12, 655330, 655360, 12, 589794, 655360, 12, 524258, 655360, 12, 458722, 655360, 12, 393186, 655360, 12, 327650, 655360, 12, 262114, 655360, 12, 196578, 655360, 12, 131042, 655360, 12, 65506, 655360, 12, -30, 589824, 12, -65566, 655360, 12, -131102, 655360, 12, -196638, 655360, 12, -262174, 655360, 12, -327710, 655360, 12, -393246, 655360, 12, -458782, 655360, 12, -524318, 655360, 12, -589854, 655360, 12, -655390, 655360, 12, -720926, 655360, 12, -786462, 655360, 12, -851998, 655360, 12, -917534, 655360, 12, -983070, 655360, 12, -1048606, 655360, 12, -1114142, 655360, 12, -1179678, 655360, 12, -1245214, 655360, 12, -1310750, 655360, 12, -1376286, 655360, 12, -1441822, 655360, 12, -1507358, 458752, 12, -1572894, 655360, 12, -1638430, 655360, 12, -1703966, 655360, 12, -1703965, 655360, 12, -1703964, 655360, 12, -1703963, 655360, 12, -1703962, 655360, 12, -1703961, 655360, 12, -1703960, 655360, 12, -1703959, 655360, 12, -1703958, 655360, 12, -1703957, 655360, 12, -1703956, 655360, 12, -1703955, 655360, 12, -1703954, 655360, 12, -1703953, 655360, 12, -1703952, 655360, 12, -1703951, 655360, 12, -1703949, 655360, 12, -1703948, 655360, 12, -1703947, 655360, 12, -1703946, 655360, 12, -1703945, 655360, 12, -1703944, 655360, 12, -1703943, 655360, 12, -1703942, 655360, 12, -1703941, 655360, 12, -1703940, 655360, 12, -1703939, 655360, 12, -1703938, 655360, 12, -1703937, 655360, 12, -1769472, 655360, 12, -1769470, 655360, 12, -1769469, 655360, 12, -1769468, 655360, 12, 917517, 720896, 5, 851981, 720896, 5, 786445, 720896, 5, 720909, 720896, 5, 720910, 720896, 5, 786446, 720896, 5, 851982, 720896, 5, 917518, 327680, 1, 983054, 131072, 2, 983053, 65536, 2, 983052, 327680, 1, 917516, 720896, 5, 851980, 720896, 5, 786444, 720896, 5, 786443, 720896, 5, 786442, 393216, 1, 786441, 0, 2, 786440, 262144, 5, 786439, 131072, 5, 786438, 131072, 2, 786437, 327680, 1, 851973, 131072, 1, 917509, 131072, 1, 917508, 720896, 5, 983044, 720896, 5, 983043, 720896, 5, 1048579, 720896, 5, 1048578, 720896, 5, 1114114, 720896, 5, 1114113, 720896, 5, 1179649, 720896, 5, 1179648, 720896, 5, 1179650, 720896, 5, 1179651, 720896, 5, 1114115, 720896, 5, 1114116, 720896, 5, 1048580, 720896, 5, 1048581, 720896, 5, 983045, 327680, 2, 983046, 131072, 0, 917510, 0, 5, 851974, 131072, 5, 851975, 0, 5, 917511, 65536, 5, 983047, 262144, 5, 1048583, 65536, 0, 1048582, 327680, 2, 1114118, 720896, 5, 1114117, 720896, 5, 1179653, 720896, 5, 1179652, 720896, 5, 1245189, 720896, 5, 1245190, 720896, 5, 1179654, 720896, 5, 1179655, 720896, 5, 1114119, 720896, 5, 1114120, 720896, 5, 1048584, 393216, 2, 983048, 0, 0, 917512, 0, 5, 851976, 196608, 5, 851977, 0, 5, 917513, 0, 0, 983049, 393216, 2, 1048585, 720896, 5, 1114121, 720896, 5, 1179657, 720896, 5, 1179656, 720896, 5, 1179658, 720896, 5, 1114122, 720896, 5, 1048586, 720896, 5, 983050, 720896, 5, 917514, 393216, 2, 851978, 0, 1, 851979, 720896, 5, 917515, 720896, 5, 983051, 720896, 5, 1048587, 720896, 5, 1114123, 720896, 5, 1179659, 720896, 5, 1245195, 720896, 5, 1245194, 720896, 5, 1245196, 720896, 5, 1179660, 720896, 5, 1114124, 327680, 2, 1048588, 131072, 1, 1048589, 0, 5, 1114125, 131072, 0, 1179661, 327680, 2, 1245197, 720896, 5, 1245198, 720896, 5, 1179662, 65536, 0, 1114126, 0, 5, 1048590, 131072, 5, 1048591, 262144, 5, 983055, 0, 5, 917519, 65536, 2, 851983, 720896, 5, 786447, 720896, 5, 720911, 720896, 5, 655375, 720896, 5, 655376, 720896, 5, 720912, 720896, 5, 786448, 720896, 5, 851984, 720896, 5, 917520, 65536, 2, 983056, 262144, 5, 1048592, 262144, 5, 1114128, 65536, 5, 1114127, 131072, 5, 1179663, 65536, 0, 1245199, 720896, 5, 1245200, 720896, 5, 1179664, 65536, 0, 1179665, 393216, 2, 1114129, 0, 0, 1048593, 131072, 5, 983057, 0, 2, 917521, 393216, 1, 851985, 720896, 5, 786449, 720896, 5, 720913, 720896, 5, 655377, 720896, 5, 589841, 720896, 5, 589842, 720896, 5, 524306, 720896, 5, 524307, 720896, 5, 458771, 720896, 5, 458772, 720896, 5, 393236, 720896, 5, 524308, 720896, 5, 589844, 720896, 5, 589843, 720896, 5, 655379, 720896, 5, 655378, 720896, 5, 720914, 720896, 5, 786450, 720896, 5, 851986, 720896, 5, 917522, 720896, 5, 983058, 393216, 1, 1048594, 0, 1, 1114130, 393216, 2, 1179666, 720896, 5, 1245202, 720896, 5, 1245201, 720896, 5, 1310738, 720896, 5, 1245203, 720896, 5, 1179667, 720896, 5, 1114131, 720896, 5, 1048595, 720896, 5, 983059, 720896, 5, 917523, 720896, 5, 851987, 720896, 5, 786451, 720896, 5, 720915, 720896, 5, 720916, 720896, 5, 655380, 720896, 5, 786452, 720896, 5, 851988, 720896, 5, 917524, 720896, 5, 983060, 720896, 5, 1048596, 720896, 5, 1114132, 720896, 5, 917525, 720896, 5, 851989, 720896, 5, 1376263, 655360, 11, 1376245, 655360, 11, 655364, 655360, 11, 524299, 655360, 11, 589847, 655360, 11, 65557, 655360, 11, -786415, 655360, 11, 1441782, 655360, 12, 1441783, 655360, 12, 1441784, 655360, 12, 1441785, 655360, 12, 1441786, 655360, 12, 1441787, 655360, 12, 1441788, 655360, 12, 1441789, 655360, 12, 1441790, 655360, 12, 1441791, 655360, 12, 1376256, 655360, 12, 1376257, 655360, 12, 1376258, 655360, 12, 1376259, 655360, 12, 1376260, 655360, 12, 1376261, 589824, 12, 1376262, 655360, 12, 1376264, 655360, 12, 1376265, 655360, 12, 1376266, 655360, 12, 1376267, 655360, 12, 1376268, 655360, 12, 1376269, 655360, 12, 1376270, 655360, 12, 1376271, 655360, 12, 1376272, 655360, 12, 1376276, 655360, 12, 1376278, 655360, 12, 1376279, 655360, 12, 1376280, 655360, 12, 1376281, 655360, 12, 1310745, 655360, 12, 1245209, 655360, 12, 1179673, 655360, 12, 1114137, 655360, 12, 1048601, 655360, 12, 983065, 655360, 12, 917529, 655360, 12, 851993, 655360, 12, 786457, 655360, 12, 720921, 655360, 12, 655385, 655360, 12, 589849, 655360, 12, 524313, 655360, 12, 458777, 655360, 12, 393241, 655360, 12, 327705, 655360, 12, 262169, 655360, 12, 196633, 655360, 12, 131097, 655360, 12, -983040, 1310720, 13, -983039, 1310720, 13, -1048575, 1310720, 12, -1048576, 1310720, 12, -1114112, 1310720, 11, -1114111, 1310720, 11, -1048577, 1245184, 18, -983041, 1245184, 19, -917505, 1245184, 20, -1048578, 1179648, 18, -983042, 1179648, 19, -917506, 1179648, 20, -1048579, 1179648, 18, -983043, 1179648, 19, -917507, 1179648, 20, -1048580, 1179648, 18, -983044, 1179648, 19, -917508, 1179648, 20, -1048581, 1179648, 18, -983045, 1179648, 19, -917509, 1179648, 20, -1048582, 1179648, 18, -983046, 1179648, 19, -917510, 1179648, 20, -1048583, 1179648, 18, -983047, 1179648, 19, -917511, 1179648, 20, -1114109, 1179648, 18, -1048573, 1179648, 19, -983037, 1179648, 20, -1114108, 1179648, 18, -1048572, 1179648, 19, -983036, 1179648, 20, -1114107, 1179648, 18, -1048571, 1179648, 19, -983035, 1179648, 20, -1114106, 1179648, 18, -1048570, 1179648, 19, -983034, 1179648, 20, -1114105, 1179648, 18, -1048569, 1179648, 19, -983033, 1179648, 20, -1114104, 1179648, 18, -1048568, 1179648, 19, -983032, 1179648, 20, -1114103, 1245184, 18, -1048567, 1245184, 19, -983031, 1245184, 20, -1048584, 1114112, 18, -983048, 1114112, 19, -917512, 1114112, 20, -1114110, 1114112, 18, -1048574, 1114112, 19, -983038, 1114112, 20, -1114120, 917504, 19, -1179656, 917504, 19, -1245192, 917504, 19, -1310728, 917504, 19, -1376264, 917504, 19, -1441800, 917504, 19, -1507336, 917504, 18, -1572871, 917504, 18, -1638406, 917504, 18, -1703936, 1048576, 18, -1638397, 1048576, 18, -1572860, 1048576, 18, -1507321, 1048576, 18, -1441783, 1048576, 18, -1441784, 983040, 18, -1507323, 983040, 18, -1507322, 983040, 18, -1638398, 983040, 18, -1638399, 983040, 18, -1638401, 983040, 18, -1638402, 983040, 18, -1638403, 983040, 18, -1638404, 983040, 18, -1638405, 983040, 18, -1507335, 851968, 21, -1572870, 851968, 21, -1638400, 917504, 21, -1572861, 917504, 21, -1507324, 917504, 21, -1441785, 917504, 21, -1376247, 1048576, 19, -1310711, 1048576, 19, -1245175, 1048576, 19, -1179639, 1048576, 19, -1310718, 65536, 20, -1376254, 65536, 19, -1441790, 65536, 19, -1507326, 327680, 20, -1572862, 131072, 18, -1572863, 65536, 18, -1572864, 65536, 18, -1507329, 327680, 20, -1572865, 131072, 18, -1572866, 65536, 18, -1572867, 65536, 18, -1572868, 65536, 18, -1572869, 0, 18, -1507333, 393216, 20, -1507334, 0, 18, -1441798, 393216, 20, -1441799, 0, 18, -1376263, 0, 19, -1310727, 0, 19, -1245191, 0, 20, -1179655, 0, 23, -1114119, 131072, 23, -1114118, 0, 23, -1179654, 0, 20, -1245190, 393216, 19, -1310726, 65536, 19, -1376262, 65536, 19, -1376261, 65536, 19, -1441797, 65536, 19, -1441796, 65536, 19, -1507332, 65536, 19, -1507331, 65536, 19, -1441795, 65536, 19, -1376259, 65536, 19, -1376260, 65536, 19, -1310724, 65536, 19, -1310725, 65536, 19, -1245189, 65536, 19, -1179653, 65536, 20, -1114117, 0, 23, -1114116, 0, 23, -1179652, 65536, 20, -1245188, 65536, 19, -1245187, 65536, 19, -1310723, 65536, 22, -1310722, 65536, 19, -1376258, 65536, 19, -1441794, 65536, 19, -1507330, 65536, 19, -1441793, 65536, 19, -1376257, 65536, 19, -1310721, 65536, 19, -1245185, 65536, 19, -1245186, 65536, 19, -1179650, 65536, 20, -1179651, 65536, 20, -1114115, 0, 23, -1114114, 0, 23, -1114113, 0, 23, -1179649, 65536, 20, -1245184, 65536, 20, -1310720, 65536, 19, -1376256, 65536, 19, -1441792, 65536, 19, -1507328, 65536, 19, -1507327, 65536, 19, -1441791, 65536, 19, -1376255, 65536, 19, -1310719, 327680, 19, -1245183, 131072, 20, -1179647, 196608, 23, -1179648, 0, 23, -1179646, 0, 23, -1245182, 0, 23, -1245181, 0, 23, -1310717, 65536, 20, -1376253, 65536, 19, -1441789, 327680, 20, -1507325, 131072, 18, -1441788, 65536, 18, -1376252, 65536, 19, -1310716, 65536, 20, -1245180, 262144, 23, -1179644, 0, 23, -1179645, 0, 23, -1179643, 0, 23, -1245179, 0, 23, -1310715, 131072, 20, -1376251, 131072, 19, -1441787, 131072, 18, -1441786, 262144, 23, -1376250, 0, 23, -1310714, 0, 23, -1245178, 0, 23, -1179642, 0, 23, -1179641, 0, 23, -1245177, 0, 23, -1310713, 65536, 23, -1376249, 0, 23, -1376248, 0, 23, -1310712, 0, 23, -1245176, 196608, 23, -1179640, 0, 23, -917513, 786432, 8, -917514, 786432, 8, -917515, 786432, 8, -917516, 786432, 8, -917517, 720896, 8, -983053, 720896, 7, -1048589, 720896, 6, -1048588, 1114112, 8, -1114124, 720896, 6, -1114123, 1114112, 8, -1179659, 720896, 7, -1245195, 720896, 7, -1310731, 720896, 7, -1376267, 1114112, 7, -1376268, 720896, 8, -1441804, 720896, 7, -1507340, 1114112, 7, -1507341, 786432, 8, -1507342, 786432, 8, -1507343, 720896, 8, -1572879, 1114112, 7, -1572880, 786432, 8, -1572881, 786432, 8, -1507347, 786432, 8, -1441813, 786432, 8, -1441814, 786432, 8, -1441815, 786432, 8, -1441816, 786432, 8, -720917, 786432, 8, -589806, 786432, 8, -983025, 786432, 8, -983026, 786432, 8, -983027, 786432, 8, -983028, 786432, 8, -983029, 786432, 8, -983030, 786432, 8, -983024, 1114112, 7, -589805, 1114112, 7, -655343, 1114112, 7, -720880, 1114112, 7, -1572882, 1048576, 7, -1507348, 1048576, 7, -1441817, 1048576, 7, -851988, 1048576, 7, -720918, 1048576, 7, -589847, 1048576, 7, -458776, 1048576, 7, -393241, 1048576, 7, -262170, 1048576, 7, -917488, 1114112, 8, -65517, 1114112, 8, 131090, 1114112, 8, 196625, 1114112, 8, 262160, 1114112, 8, 327694, 1114112, 8, 393229, 1114112, 8, 458764, 1114112, 8, 524292, 1114112, 8, 589826, 1114112, 8, 655361, 1114112, 8, 786432, 1114112, 8, 917503, 1114112, 8, 983038, 1114112, 8, 1114107, 1114112, 8, -1376281, 851968, 7, -1310745, 851968, 7, -917523, 851968, 7, -786452, 851968, 7, -655382, 851968, 7, -524311, 851968, 7, -196634, 851968, 7, -131098, 851968, 7, -65562, 851968, 7, -26, 851968, 7, 65510, 851968, 7, -327705, 851968, 7, 196583, 851968, 7, 262119, 851968, 7, 327655, 851968, 7, 720879, 851968, 7, 786415, 851968, 7, 851951, 851968, 7, 1048571, 720896, 7, 720896, 720896, 7, 18, 720896, 7, 65554, 720896, 7, -131053, 720896, 7, -196589, 720896, 7, -262125, 720896, 7, -327661, 720896, 7, -393197, 720896, 7, -458733, 720896, 7, -524269, 720896, 7, -786417, 720896, 7, -851953, 720896, 7, -720881, 0, 12, -655344, 720896, 8, -589807, 720896, 8, -917489, 720896, 6, -65518, 720896, 6, 131089, 720896, 6, 196624, 720896, 6, 262158, 720896, 6, 327693, 720896, 6, 393228, 720896, 6, 458756, 720896, 6, 524290, 720896, 6, 589825, 720896, 6, 655360, 720896, 6, 851967, 720896, 6, 917502, 720896, 6, 983035, 720896, 6, 983036, 786432, 6, 983037, 786432, 6, 655342, 786432, 6, 1114099, 786432, 6, 1114100, 786432, 6, 1114101, 786432, 6, 1114102, 786432, 6, 1114103, 786432, 6, 1114104, 786432, 6, 1114105, 786432, 6, 1114106, 786432, 6, 393192, 786432, 6, -1179671, 786432, 6, -1179670, 786432, 6, -1245209, 1048576, 8, -1179672, 1048576, 8, 131046, 1048576, 8, 393191, 1048576, 8, 458729, 1048576, 8, 524266, 1048576, 8, 589803, 1048576, 8, 655341, 1048576, 8, 917487, 1048576, 8, 1114098, 1048576, 8, 1048561, 1048576, 8, 983024, 1048576, 8, 589804, 786432, 6, 589805, 851968, 6, 655343, 851968, 6, 393193, 851968, 6, 458730, 851968, 6, 524267, 851968, 6, 131047, 851968, 6, -1179669, 851968, 6, -1114132, 851968, 6, -983059, 851968, 6, -1048596, 851968, 7, -1114133, 1048576, 8, -983060, 1048576, 8, -1245208, 851968, 6, -1441812, 851968, 8, -1507346, 851968, 8, 458757, 786432, 6, 458758, 786432, 6, 458761, 786432, 6, 458762, 786432, 6, 458763, 786432, 6, 262159, 786432, 6, 524291, 786432, 6, 983025, 851968, 6, 1048562, 851968, 6, 917488, 851968, 6, 393205, 131072, 11, 327669, 262144, 10, 262133, 196608, 8, 196597, 196608, 8, 131061, 196608, 8, 65525, 196608, 8, -11, 196608, 8, -65547, 196608, 8, -131083, 196608, 8, -196619, 196608, 8, -262155, 262144, 7, -327691, 131072, 12, -393227, 262144, 12, -458763, 262144, 12, -524299, 131072, 11, -589835, 0, 12, -655371, 262144, 12, -720907, 196608, 12, -786443, 131072, 11, -851979, 196608, 11, -851980, 196608, 11, -851981, 196608, 11, -851982, 131072, 11, -917518, 196608, 11, -983054, 262144, 12, -1048590, 262144, 12, -1114126, 196608, 11, -1179662, 196608, 11, -1245198, 262144, 12, -1310734, 262144, 12, -1376270, 131072, 11, -1441806, 65536, 12, -1441807, 131072, 12, -1441808, 262144, 12, -1507344, 196608, 11, -1507345, 262144, 12, -1441809, 262144, 12, -1441810, 262144, 12, -1441811, 65536, 12, -1376275, 262144, 12, -1376276, 262144, 12, -1376277, 196608, 12, -1376278, 131072, 11, -1376279, 262144, 12, -1376280, 196608, 12, -1310744, 131072, 12, -1310743, 262144, 12, -1245207, 196608, 12, -1245206, 131072, 12, -1310742, 262144, 12, -1310741, 262144, 12, -1245205, 262144, 12, -1245204, 196608, 12, -1310740, 65536, 12, -1310739, 131072, 11, -1245203, 196608, 12, -1179667, 131072, 11, -1179668, 131072, 12, -1114131, 131072, 11, -1048595, 196608, 11, -1048594, 131072, 12, -1114130, 65536, 12, -1179666, 131072, 12, -1245202, 196608, 12, -1310738, 262144, 12, -1376274, 196608, 12, -1376273, 131072, 11, -1310737, 131072, 11, -1245201, 196608, 11, -1179665, 262144, 12, -1114129, 0, 12, -1048593, 262144, 12, -983057, 262144, 12, -983058, 131072, 11, -917522, 196608, 11, -851986, 196608, 11, -851987, 851968, 8, -786451, 196608, 11, -720915, 262144, 12, -720916, 851968, 8, -655380, 131072, 11, -655381, 65536, 12, -589845, 65536, 12, -589846, 851968, 8, -524310, 262144, 12, -458774, 196608, 12, -458775, 851968, 8, -393239, 262144, 12, -393240, 851968, 8, -327704, 131072, 12, -262168, 196608, 11, -262169, 851968, 8, -196633, 262144, 12, -131097, 196608, 12, -65561, 65536, 12, -25, 196608, 11, 65511, 196608, 11, 65512, 0, 12, -24, 196608, 11, -65560, 262144, 12, -131096, 196608, 11, -196632, 196608, 11, -196631, 131072, 12, -262167, 262144, 12, -327703, 196608, 11, -327702, 65536, 12, -393238, 131072, 12, -393237, 196608, 11, -458773, 196608, 11, -524309, 196608, 11, -524308, 196608, 12, -589844, 65536, 12, -589843, 262144, 12, -655379, 131072, 12, -655378, 196608, 12, -720914, 0, 12, -786450, 262144, 12, -786449, 131072, 12, -851985, 196608, 11, -917521, 131072, 12, -917520, 262144, 12, -983056, 196608, 11, -1048592, 262144, 12, -1114128, 131072, 12, -1179664, 196608, 11, -1245200, 131072, 11, -1310736, 196608, 11, -1376272, 65536, 12, -1376271, 0, 12, -1310735, 0, 12, -1245199, 262144, 12, -1179663, 131072, 12, -1114127, 262144, 12, -1048591, 131072, 11, -983055, 0, 12, -917519, 0, 12, -851983, 262144, 12, -851984, 262144, 12, -786448, 131072, 11, -720912, 65536, 12, -720913, 196608, 11, -655377, 262144, 12, -589841, 262144, 12, -589842, 262144, 12, -524306, 262144, 12, -524307, 262144, 12, -458771, 131072, 11, -458772, 196608, 12, -393236, 196608, 11, -327700, 0, 12, -327701, 131072, 12, -262165, 196608, 11, -262166, 0, 12, -196630, 65536, 12, -131094, 131072, 12, -131095, 0, 12, -65559, 131072, 12, -23, 262144, 12, 65513, 131072, 11, 131049, 131072, 11, 131048, 196608, 12, 196584, 196608, 12, 262120, 196608, 11, 327656, 262144, 12, 327657, 196608, 11, 262121, 196608, 12, 196585, 262144, 12, 196586, 262144, 12, 131050, 131072, 11, 65514, 131072, 12, -22, 196608, 11, -65558, 262144, 12, -65557, 0, 12, -131093, 262144, 12, -196629, 0, 12, -196628, 65536, 12, -262164, 131072, 11, -262163, 262144, 12, -327699, 0, 12, -393235, 131072, 11, -393234, 65536, 12, -458770, 262144, 12, -458769, 0, 12, -524305, 0, 12, -524304, 196608, 11, -589840, 0, 12, -655376, 131072, 11, -655375, 196608, 11, -720911, 131072, 11, -786447, 196608, 11, -786446, 196608, 11, -720910, 196608, 11, -655374, 262144, 12, -589838, 196608, 11, -589839, 262144, 12, -524303, 131072, 12, -458767, 262144, 12, -458768, 262144, 12, -393232, 262144, 12, -393233, 131072, 11, -327697, 262144, 12, -327698, 196608, 12, -262162, 131072, 12, -196626, 196608, 12, -196627, 262144, 12, -131091, 262144, 12, -131092, 196608, 11, -65556, 196608, 11, -20, 262144, 12, -21, 131072, 11, 65515, 65536, 12, 131051, 131072, 11, 196587, 262144, 12, 262123, 131072, 11, 262122, 196608, 11, 327658, 0, 12, 393194, 262144, 12, 393195, 262144, 12, 327659, 262144, 12, 327660, 262144, 12, 262124, 65536, 12, 196588, 262144, 12, 131052, 0, 12, 65516, 196608, 11, 65517, 196608, 11, -19, 262144, 12, -65555, 262144, 12, -65554, 0, 12, -131090, 131072, 11, -131089, 196608, 11, -196625, 262144, 12, -262161, 196608, 12, -262160, 131072, 11, -327696, 65536, 12, -327695, 196608, 12, -393231, 196608, 11, -393230, 0, 12, -458766, 65536, 12, -524302, 65536, 12, -524301, 65536, 12, -589837, 65536, 12, -655373, 131072, 11, -720909, 131072, 11, -786445, 131072, 12, -786444, 131072, 12, -720908, 196608, 11, -655372, 196608, 11, -589836, 196608, 12, -524300, 196608, 11, -458764, 131072, 11, -458765, 196608, 11, -393229, 196608, 12, -327693, 131072, 12, -327694, 196608, 12, -262158, 196608, 12, -262159, 131072, 11, -196623, 131072, 12, -196624, 196608, 12, -131088, 0, 12, -65552, 131072, 11, -65553, 262144, 12, -17, 131072, 12, -18, 196608, 11, 65518, 131072, 12, 131054, 0, 12, 131053, 262144, 12, 196589, 196608, 12, 262125, 131072, 12, 327661, 0, 12, 393197, 131072, 11, 393196, 196608, 11, 458732, 196608, 11, 458731, 131072, 11, 524268, 196608, 11, 524269, 196608, 11, 458733, 131072, 12, 458734, 262144, 12, 393198, 196608, 11, 327662, 196608, 11, 262126, 0, 12, 196590, 196608, 12, 196591, 262144, 12, 131055, 262144, 12, 65519, 0, 12, 65520, 196608, 12, -16, 196608, 12, -15, 262144, 12, -65551, 0, 12, -131087, 131072, 12, -131086, 0, 12, -196622, 262144, 12, -196621, 0, 12, -262157, 262144, 12, -262156, 131072, 12, -327692, 196608, 11, -393228, 196608, 11, -196620, 65536, 12, -131084, 262144, 12, -131085, 131072, 12, -65549, 0, 12, -65550, 262144, 12, -14, 65536, 12, 65522, 65536, 12, 65521, 65536, 12, 131057, 131072, 12, 131056, 196608, 11, 196592, 262144, 12, 262128, 131072, 12, 262127, 196608, 12, 327663, 262144, 12, 393199, 262144, 12, 458735, 65536, 12, 524271, 131072, 12, 524270, 262144, 12, 589806, 131072, 11, 589807, 262144, 12, 589808, 196608, 12, 524272, 196608, 11, 458736, 262144, 12, 393200, 131072, 11, 327664, 262144, 12, 327665, 131072, 11, 262129, 262144, 12, 196593, 65536, 12, 196594, 262144, 12, 131058, 196608, 11, 131059, 0, 12, 65523, 131072, 11, -13, 262144, 12, -12, 196608, 12, -65548, 196608, 11, 65524, 196608, 12, 131060, 65536, 12, 196596, 196608, 11, 196595, 131072, 11, 262131, 131072, 12, 262130, 65536, 12, 327666, 262144, 12, 393202, 131072, 11, 393201, 196608, 11, 458737, 0, 12, 524273, 196608, 11, 589809, 65536, 12, 655345, 131072, 11, 655344, 262144, 12, 720880, 131072, 11, 786416, 196608, 11, 851952, 0, 12, 851953, 0, 12, 786417, 262144, 12, 720881, 131072, 12, 720882, 196608, 11, 655346, 131072, 11, 589810, 196608, 11, 524274, 0, 12, 458738, 131072, 12, 458739, 131072, 12, 393203, 262144, 12, 327667, 262144, 12, 327668, 131072, 12, 262132, 196608, 11, 393204, 262144, 12, 458740, 0, 12, 524276, 196608, 11, 524275, 196608, 12, 589811, 262144, 12, 655347, 0, 12, 720883, 196608, 11, 786419, 0, 12, 786418, 262144, 12, 851954, 262144, 12, 917490, 131072, 11, 917489, 0, 12, 983026, 0, 12, 983027, 196608, 12, 917491, 131072, 12, 851955, 131072, 11, 851956, 131072, 11, 786420, 262144, 12, 720884, 262144, 12, 655348, 0, 12, 589812, 0, 12, 589813, 0, 12, 524277, 0, 12, 458741, 65536, 12, 458742, 0, 12, 393206, 196608, 12, 327670, 131072, 10, 262134, 262144, 12, 196598, 0, 12, 131062, 196608, 12, 65526, 262144, 12, -10, 131072, 11, -65546, 262144, 12, -131082, 196608, 11, -196618, 262144, 12, -262154, 458752, 10, -327690, 196608, 8, -393226, 262144, 7, -458762, 196608, 11, -524298, 131072, 11, -589834, 262144, 12, -655370, 131072, 12, -720906, 262144, 12, -786442, 65536, 12, -851978, 196608, 11, -851977, 131072, 12, -786441, 131072, 12, -720905, 196608, 12, -655369, 262144, 12, -589833, 196608, 12, -524297, 0, 12, -458761, 262144, 12, -393225, 65536, 10, -327689, 262144, 12, -262153, 65536, 12, -196617, 131072, 11, -131081, 131072, 12, -65545, 131072, 11, -9, 262144, 12, 65527, 262144, 12, 131063, 131072, 12, 196599, 262144, 12, 262135, 262144, 12, 327671, 196608, 11, 393207, 262144, 12, 458743, 131072, 11, 524279, 262144, 12, 524278, 262144, 12, 589814, 131072, 11, 655350, 131072, 11, 655349, 196608, 11, 720885, 0, 12, 786421, 65536, 12, 851957, 131072, 12, 917493, 65536, 12, 917492, 131072, 12, 983028, 131072, 11, 1048564, 131072, 11, 1048563, 0, 12, 1048565, 262144, 12, 983029, 131072, 12, 983030, 0, 12, 917494, 0, 12, 851958, 196608, 12, 786422, 262144, 12, 720886, 0, 12, 720887, 65536, 12, 655351, 196608, 11, 589815, 65536, 12, 589816, 131072, 12, 524280, 262144, 12, 458744, 196608, 12, 393208, 262144, 12, 327672, 131072, 12, 262136, 0, 12, 196600, 131072, 11, 131064, 262144, 12, 65528, 196608, 11, -8, 262144, 12, -65544, 262144, 12, -131080, 196608, 12, -196616, 131072, 12, -262152, 196608, 11, -327688, 65536, 12, -393224, 65536, 10, -458760, 196608, 11, -524296, 65536, 12, -589832, 131072, 11, -655368, 196608, 11, -720904, 196608, 11, -786440, 262144, 12, -851976, 131072, 11, -851975, 0, 12, -786439, 65536, 12, -720903, 131072, 11, -655367, 0, 12, -589831, 262144, 12, -524295, 131072, 12, -458759, 65536, 12, -393223, 65536, 10, -327687, 0, 12, -262151, 196608, 11, -196615, 262144, 12, -131079, 131072, 12, -65543, 196608, 11, -7, 65536, 12, 65529, 65536, 12, 131065, 196608, 12, 196601, 131072, 11, 262137, 131072, 11, 327673, 65536, 12, 393209, 262144, 12, 458745, 196608, 12, 524281, 262144, 12, 589817, 262144, 12, 655353, 0, 12, 655352, 262144, 12, 720888, 0, 12, 786424, 196608, 12, 786423, 196608, 11, 851959, 65536, 12, 917495, 196608, 11, 983031, 196608, 11, 1048567, 131072, 12, 1048566, 196608, 11, 1048568, 0, 12, 983032, 65536, 12, 917496, 0, 12, 851960, 196608, 12, 851961, 0, 12, 786425, 196608, 12, 720889, 0, 12, 720890, 131072, 12, 655354, 131072, 11, 589818, 131072, 12, 524282, 262144, 12, 458746, 65536, 12, 393210, 262144, 12, 327674, 196608, 11, 262138, 262144, 12, 196602, 65536, 12, 131066, 262144, 12, 65530, 0, 12, -6, 131072, 11, -65542, 196608, 12, -131078, 196608, 11, -196614, 196608, 12, -262150, 131072, 12, -327686, 262144, 12, -393222, 65536, 10, -458758, 65536, 12, -524294, 196608, 11, -589830, 262144, 12, -655366, 262144, 12, -720902, 262144, 12, -786438, 131072, 11, -851974, 131072, 12, -851973, 262144, 12, -786437, 196608, 11, -720901, 131072, 12, -655365, 65536, 12, -589829, 262144, 12, -524293, 262144, 12, -458757, 131072, 12, -393221, 65536, 10, -327685, 196608, 12, -262149, 131072, 12, -196613, 131072, 11, -131077, 196608, 12, -65541, 262144, 12, -5, 0, 12, 65531, 131072, 12, 131067, 65536, 12, 196603, 262144, 12, 262139, 262144, 12, 327675, 196608, 11, 393211, 262144, 12, 458747, 262144, 12, 524283, 131072, 11, 589819, 65536, 12, 655355, 262144, 12, 720891, 0, 12, 786427, 0, 12, 786426, 262144, 12, 851962, 0, 12, 917498, 262144, 12, 917497, 65536, 12, 983033, 196608, 12, 1048569, 65536, 12, 1048570, 131072, 12, 983034, 196608, 12, 917499, 262144, 12, 851963, 262144, 12, 851964, 0, 12, 786428, 262144, 12, 720892, 0, 12, 655356, 196608, 12, 589820, 131072, 11, 524284, 196608, 12, 458748, 131072, 11, 393212, 196608, 11, 327676, 0, 12, 262140, 196608, 12, 196604, 196608, 12, 131068, 262144, 12, 65532, 196608, 11, -4, 262144, 12, -65540, 65536, 12, -131076, 65536, 12, -196612, 262144, 12, -262148, 262144, 12, -327684, 196608, 11, -393220, 65536, 10, -458756, 0, 12, -524292, 65536, 12, -589828, 0, 12, -655364, 262144, 12, -720900, 196608, 11, -786436, 0, 12, -851972, 131072, 11, -851971, 262144, 12, -786435, 131072, 11, -720899, 262144, 12, -655363, 196608, 12, -589827, 131072, 12, -524291, 0, 12, -458755, 131072, 11, -393219, 65536, 10, -327683, 131072, 11, -262147, 131072, 12, -196611, 262144, 12, -131075, 262144, 12, -65539, 196608, 11, -3, 131072, 12, 65533, 262144, 12, 131069, 196608, 11, 196605, 65536, 12, 262141, 0, 12, 327677, 196608, 11, 393213, 131072, 11, 458749, 262144, 12, 524285, 262144, 12, 589821, 262144, 12, 655357, 262144, 12, 720893, 131072, 11, 786429, 65536, 12, 851965, 65536, 12, 917501, 196608, 11, 917500, 196608, 12, 851966, 131072, 12, 786430, 65536, 12, 720894, 0, 12, 655358, 131072, 11, 589822, 65536, 12, 524286, 131072, 12, 458750, 196608, 11, 393214, 131072, 12, 327678, 131072, 12, 262142, 196608, 11, 196606, 262144, 12, 131070, 196608, 11, 65534, 0, 12, -2, 196608, 12, -65538, 196608, 12, -131074, 65536, 12, -196610, 262144, 12, -262146, 131072, 12, -327682, 196608, 11, -393218, 65536, 10, -458754, 262144, 12, -524290, 262144, 12, -589826, 262144, 12, -655362, 262144, 12, -720898, 131072, 12, -786434, 0, 12, -851970, 65536, 12, -851969, 196608, 11, -786433, 196608, 12, -720897, 131072, 11, -655361, 65536, 12, -589825, 262144, 12, -524289, 65536, 12, -458753, 262144, 12, -393217, 65536, 10, -327681, 196608, 11, -262145, 196608, 12, -196609, 0, 12, -131073, 196608, 12, -65537, 262144, 12, -1, 262144, 12, 65535, 0, 12, 131071, 131072, 12, 196607, 196608, 11, 262143, 65536, 12, 327679, 131072, 11, 393215, 0, 12, 458751, 131072, 11, 524287, 131072, 12, 589823, 131072, 11, 655359, 131072, 12, 720895, 196608, 11, 786431, 131072, 12, 589824, 196608, 11, 524288, 0, 12, 458752, 131072, 11, 393216, 196608, 12, 327680, 196608, 12, 262144, 131072, 11, 196608, 262144, 12, 131072, 131072, 11, 65536, 0, 12, 0, 196608, 12, -65536, 196608, 11, -131072, 131072, 11, -196608, 131072, 11, -262144, 0, 9, -327680, 0, 8, -393216, 0, 8, -458752, 393216, 11, -524288, 0, 8, -589824, 0, 8, -655360, 0, 8, -720896, 0, 8, -786432, 0, 8, -851968, 0, 8, -917504, 0, 7, -917503, 131072, 7, -851967, 131072, 8, -786431, 131072, 8, -720895, 131072, 8, -655359, 131072, 8, -589823, 131072, 8, -524287, 131072, 8, -458751, 131072, 8, -393215, 131072, 8, -327679, 327680, 9, -262143, 65536, 9, -196607, 262144, 12, -131071, 131072, 12, -65535, 196608, 12, 1, 262144, 12, 65537, 196608, 11, 131073, 131072, 11, 196609, 196608, 11, 262145, 131072, 11, 327681, 262144, 12, 393217, 131072, 11, 458753, 196608, 11, 524289, 262144, 12, 458754, 65536, 12, 393218, 196608, 12, 327682, 131072, 12, 262146, 262144, 12, 196610, 262144, 12, 131074, 196608, 11, 65538, 65536, 12, 2, 65536, 12, -65534, 65536, 12, -131070, 262144, 12, -196606, 262144, 12, -262142, 65536, 9, -327678, 65536, 7, -393214, 196608, 11, -458750, 131072, 11, -524286, 65536, 12, -589822, 131072, 12, -655358, 65536, 12, -720894, 262144, 12, -786430, 262144, 12, -851966, 196608, 11, -917502, 65536, 12, -917501, 262144, 12, -851965, 196608, 11, -786429, 65536, 12, -720893, 196608, 12, -655357, 196608, 12, -589821, 196608, 11, -524285, 196608, 11, -458749, 262144, 12, -393213, 65536, 12, -327677, 65536, 7, -262141, 65536, 9, -196605, 196608, 12, -131069, 262144, 12, -65533, 262144, 12, 3, 262144, 12, 65539, 131072, 11, 131075, 196608, 12, 196611, 262144, 12, 262147, 196608, 11, 327683, 65536, 12, 393219, 131072, 12, 458755, 262144, 12, 393220, 196608, 11, 327684, 262144, 12, 262148, 196608, 11, 196612, 0, 12, 131076, 65536, 12, 65540, 131072, 12, 4, 196608, 11, -65532, 131072, 11, -131068, 262144, 12, -196604, 262144, 12, -262140, 65536, 9, -327676, 65536, 7, -393212, 196608, 11, -458748, 262144, 12, -524284, 196608, 11, -589820, 131072, 12, -655356, 262144, 12, -720892, 196608, 11, -786428, 65536, 12, -851964, 262144, 12, -917500, 262144, 12, -917499, 0, 12, -851963, 196608, 11, -786427, 131072, 12, -720891, 0, 12, -655355, 0, 12, -589819, 196608, 11, -524283, 262144, 12, -458747, 0, 12, -393211, 0, 12, -327675, 65536, 7, -262139, 393216, 8, -196603, 0, 8, -131067, 0, 8, -65531, 0, 8, 5, 0, 8, 65541, 0, 9, 131077, 65536, 12, 196613, 262144, 12, 262149, 262144, 12, 327685, 131072, 11, 393221, 131072, 11, 393222, 131072, 12, 327686, 262144, 12, 262150, 262144, 12, 196614, 0, 12, 131078, 131072, 11, 65542, 65536, 9, 6, 327680, 9, -65530, 131072, 8, -131066, 131072, 8, -196602, 131072, 8, -262138, 131072, 8, -327674, 131072, 7, -393210, 0, 12, -458746, 262144, 12, -524282, 262144, 12, -589818, 131072, 12, -655354, 262144, 12, -720890, 131072, 11, -786426, 131072, 11, -851962, 262144, 12, -917498, 196608, 11, -917497, 262144, 12, -851961, 0, 12, -786425, 196608, 12, -720889, 65536, 12, -655353, 262144, 12, -589817, 0, 12, -524281, 131072, 11, -458745, 262144, 12, -393209, 131072, 11, -327673, 131072, 11, -262137, 0, 12, -196601, 262144, 12, -131065, 196608, 11, -65529, 196608, 11, 7, 65536, 7, 65543, 393216, 8, 131079, 0, 8, 196615, 0, 8, 262151, 0, 8, 327687, 0, 8, 393223, 0, 9, 393224, 131072, 9, 327688, 131072, 8, 262152, 131072, 8, 196616, 131072, 8, 131080, 131072, 8, 65544, 131072, 8, 8, 131072, 7, -65528, 196608, 11, -131064, 65536, 12, -196600, 131072, 12, -262136, 196608, 12, -327672, 196608, 11, -393208, 262144, 12, -458744, 262144, 12, -524280, 0, 12, -589816, 262144, 12, -655352, 0, 12, -720888, 65536, 12, -786424, 131072, 11, -851960, 196608, 11, -917496, 196608, 11, -917495, 131072, 12, -851959, 131072, 11, -786423, 196608, 12, -720887, 131072, 11, -655351, 196608, 12, -589815, 196608, 11, -524279, 0, 12, -458743, 196608, 11, -393207, 65536, 12, -327671, 196608, 11, -262135, 131072, 11, -196599, 196608, 12, -131063, 65536, 12, -65527, 65536, 12, 9, 262144, 12, 65545, 196608, 12, 131081, 262144, 12, 196617, 262144, 12, 262153, 131072, 12, 327689, 262144, 12, 393225, 131072, 11, 393226, 196608, 11, 327690, 131072, 11, 262154, 196608, 11, 196618, 196608, 11, 131082, 131072, 12, 65546, 262144, 12, 10, 131072, 11, -65526, 196608, 11, -131062, 196608, 11, -196598, 262144, 12, -262134, 0, 12, -327670, 0, 12, -393206, 131072, 12, -458742, 131072, 12, -524278, 65536, 12, -589814, 131072, 11, -655350, 262144, 12, -720886, 131072, 11, -786422, 0, 12, -851958, 262144, 12, -917494, 131072, 11, -917493, 131072, 12, -851957, 196608, 11, -786421, 131072, 12, -720885, 196608, 11, -655349, 262144, 12, -589813, 131072, 12, -524277, 0, 12, -458741, 196608, 11, -393205, 131072, 11, -327669, 131072, 12, -262133, 196608, 12, -196597, 262144, 12, -131061, 65536, 12, -65525, 262144, 12, 11, 262144, 12, 65547, 262144, 12, 131083, 262144, 12, 196619, 196608, 11, 262155, 131072, 12, 327691, 131072, 12, 393227, 65536, 12, 327692, 196608, 11, 262156, 131072, 11, 196620, 131072, 12, 131084, 131072, 11, 65548, 131072, 12, 12, 262144, 12, -65524, 262144, 12, -131060, 131072, 12, -196596, 196608, 11, -262132, 131072, 11, -327668, 262144, 12, -393204, 196608, 11, -458740, 262144, 12, -524276, 0, 12, -589812, 262144, 12, -655348, 65536, 12, -720884, 65536, 12, -786420, 0, 12, -851956, 131072, 11, -917492, 65536, 12, -917491, 262144, 12, -851955, 0, 12, -786419, 0, 12, -720883, 65536, 12, -655347, 262144, 12, -589811, 262144, 12, -524275, 262144, 12, -458739, 196608, 11, -393203, 196608, 11, -327667, 65536, 12, -262131, 262144, 12, -196595, 196608, 11, -131059, 131072, 12, -65523, 262144, 12, 13, 0, 12, 65549, 131072, 12, 131085, 131072, 12, 196621, 196608, 11, 262157, 131072, 11, 196622, 65536, 12, 131086, 65536, 12, 65550, 131072, 11, 14, 131072, 12, -65522, 131072, 11, -131058, 196608, 12, -196594, 262144, 12, -262130, 196608, 11, -327666, 131072, 11, -393202, 131072, 12, -458738, 0, 12, -524274, 196608, 11, -589810, 0, 12, -655346, 262144, 12, -720882, 196608, 11, -786418, 131072, 12, -851954, 196608, 12, -917490, 196608, 11, -655345, 0, 12, -589809, 0, 12, -524273, 262144, 12, -458737, 131072, 11, -393201, 262144, 12, -327665, 196608, 11, -262129, 196608, 12, -196593, 262144, 12, -131057, 196608, 11, -65521, 262144, 12, 15, 262144, 12, 65551, 131072, 11, 131087, 196608, 11, 196623, 65536, 12, 131088, 196608, 12, 65552, 0, 12, 16, 65536, 12, -65520, 196608, 11, -131056, 131072, 11, -196592, 262144, 12, -262128, 131072, 12, -327664, 65536, 12, -393200, 262144, 12, -458736, 65536, 12, -524272, 196608, 11, -589808, 0, 12, -524271, 262144, 12, -458735, 262144, 12, -393199, 262144, 12, -327663, 262144, 12, -262127, 196608, 11, -196591, 65536, 12, -131055, 196608, 12, -65519, 131072, 12, 17, 262144, 12, 65553, 196608, 11, -131054, 131072, 12, -196590, 65536, 12, -262126, 131072, 11, -327662, 262144, 12, -393198, 0, 12, -458734, 196608, 11, -524270, 262144, 12, -1441805, 262144, 12, -1376269, 131072, 11, -1310733, 262144, 12, -1245197, 262144, 12, -1179661, 262144, 12, -1114125, 262144, 12, -1179660, 0, 12, -1245196, 262144, 12, -1310732, 262144, 12, 917480, 655360, 12, 851944, 655360, 12, 786408, 655360, 12, 720872, 655360, 12, 655336, 655360, 12, 589800, 655360, 12, 524264, 655360, 12, 458728, 655360, 12, 458727, 655360, 12, 458726, 655360, 12, 393190, 655360, 12, 327654, 655360, 12, 262118, 655360, 12, 196582, 655360, 12, 196581, 655360, 12, 131045, 655360, 12, 65509, 655360, 12, -27, 655360, 12, -65563, 655360, 12, -131099, 655360, 12, -196635, 655360, 12, -262171, 655360, 12, -327707, 655360, 12, -393243, 655360, 12, -458779, 655360, 12, -524315, 655360, 12, -589851, 655360, 12, -655387, 655360, 12, -720923, 655360, 12, -786459, 655360, 12, -851995, 655360, 12, -917531, 655360, 12, -983067, 655360, 12, -1048603, 655360, 12, -1114139, 655360, 12, -1179675, 655360, 12, -1245211, 655360, 12, -1310747, 655360, 12, -1376283, 655360, 12, -1441819, 655360, 12, -1507355, 655360, 12, -1572891, 655360, 12, -1638427, 655360, 12, -1638428, 655360, 12, -1638429, 655360, 12, -1572893, 655360, 12, -1507357, 655360, 12, -1441821, 655360, 12, -1376285, 655360, 12, -1310749, 655360, 12, -1245213, 655360, 12, -1179677, 655360, 12, -1114141, 655360, 12, -1048605, 655360, 12, -983069, 655360, 12, -917533, 655360, 12, -851997, 655360, 12, -786461, 655360, 12, -720925, 655360, 12, -655389, 589824, 12, -589853, 655360, 12, -524317, 655360, 12, -458781, 458752, 12, -393245, 655360, 12, -327709, 655360, 12, -262173, 655360, 12, -196637, 655360, 12, -131101, 655360, 12, -65565, 655360, 12, -29, 655360, 12, 65507, 655360, 12, 131043, 655360, 12, 196579, 655360, 12, 262115, 655360, 12, 327651, 655360, 12, 393187, 655360, 12, 458723, 589824, 12, 524259, 655360, 12, 589795, 458752, 12, 655331, 655360, 12, 720867, 655360, 12, 786403, 655360, 12, 851939, 655360, 12, 917475, 655360, 12, 983011, 655360, 12, 1048547, 655360, 12, 1114083, 655360, 12, 1179619, 655360, 12, 1245155, 589824, 12, 1310691, 655360, 12, 1376227, 655360, 12, 1441763, 655360, 12, 1441764, 458752, 12, 1376228, 589824, 12, 1310692, 589824, 12, 1245156, 655360, 12, 1179620, 655360, 12, 1114084, 655360, 12, 1048548, 655360, 12, 983012, 655360, 12, 917476, 655360, 12, 851940, 655360, 12, 786404, 655360, 12, 720868, 655360, 12, 655332, 655360, 12, 589796, 655360, 12, 524260, 655360, 12, 458724, 655360, 12, 393188, 655360, 12, 327652, 655360, 12, 262116, 655360, 12, 196580, 655360, 12, 131044, 655360, 12, 65508, 655360, 12, -28, 655360, 12, -65564, 655360, 12, -131100, 655360, 12, -196636, 655360, 12, -262172, 655360, 12, -327708, 655360, 12, -393244, 655360, 12, -458780, 655360, 12, -524316, 655360, 12, -589852, 655360, 12, -655388, 655360, 12, -720924, 655360, 12, -786460, 655360, 12, -851996, 655360, 12, -917532, 655360, 12, -983068, 655360, 12, -1048604, 655360, 12, -1114140, 655360, 12, -1179676, 655360, 12, -1245212, 655360, 12, -1310748, 655360, 12, -1376284, 655360, 12, -1441820, 655360, 12, -1507356, 655360, 12, -1572892, 655360, 12, 262117, 655360, 12, 327653, 655360, 12, 393189, 655360, 12, 458725, 655360, 12, 524261, 458752, 12, 589797, 655360, 12, 655333, 655360, 12, 720869, 655360, 12, 786405, 655360, 12, 851941, 655360, 12, 917477, 655360, 12, 983013, 655360, 12, 1048549, 655360, 12, 1114085, 655360, 12, 1179621, 655360, 12, 1245157, 655360, 12, 1310693, 655360, 12, 1376229, 655360, 12, 1441765, 655360, 12, 1441766, 655360, 12, 1376230, 458752, 12, 1310694, 655360, 12, 1245158, 655360, 12, 1179622, 655360, 12, 1114086, 655360, 12, 1048550, 655360, 12, 983014, 655360, 12, 917478, 655360, 12, 851942, 655360, 12, 786406, 655360, 12, 720870, 655360, 12, 655334, 655360, 12, 589798, 655360, 12, 524262, 655360, 12, 524263, 655360, 12, 589799, 655360, 12, 655335, 655360, 12, 720871, 655360, 12, 786407, 655360, 12, 851943, 655360, 12, 917479, 655360, 12, 983015, 655360, 12, 1048551, 655360, 12, 1114087, 655360, 12, 1179623, 655360, 12, 1245159, 655360, 12, 1310695, 655360, 12, 1376231, 655360, 12, 1441767, 655360, 12, 1441768, 655360, 12, 1376232, 655360, 12, 1310696, 655360, 12, 1245160, 655360, 12, 1179624, 655360, 12, 1114088, 458752, 12, 1048552, 655360, 12, 983016, 655360, 12, 983017, 655360, 12, 917481, 655360, 12, 851945, 655360, 12, 786409, 655360, 12, 720873, 655360, 12, 655337, 655360, 12, 589801, 655360, 12, 524265, 655360, 12, 589802, 589824, 12, 655338, 655360, 12, 720874, 655360, 12, 786410, 655360, 12, 851946, 655360, 12, 917482, 655360, 12, 983018, 655360, 12, 1048554, 655360, 12, 1048553, 655360, 12, 1114089, 589824, 12, 1179625, 655360, 12, 1245161, 655360, 12, 1310697, 655360, 12, 1376233, 655360, 12, 1441769, 655360, 12, 1441770, 655360, 12, 1376234, 655360, 12, 1310698, 655360, 12, 1245162, 655360, 12, 1179626, 655360, 12, 1114090, 655360, 12, 1114091, 655360, 12, 1048555, 655360, 12, 983019, 655360, 12, 917483, 655360, 12, 851947, 655360, 12, 786411, 655360, 12, 720875, 655360, 12, 655339, 655360, 12, 655340, 458752, 12, 720876, 655360, 12, 786412, 655360, 12, 851948, 655360, 12, 917484, 655360, 12, 983020, 655360, 12, 1048556, 655360, 12, 1114092, 655360, 12, 1179628, 655360, 12, 1179627, 655360, 12, 1245163, 655360, 12, 1310699, 655360, 12, 1376235, 655360, 12, 1441771, 655360, 12, 1441772, 655360, 12, 1376236, 655360, 12, 1310700, 655360, 12, 1245164, 655360, 12, 1245165, 655360, 12, 1179629, 655360, 12, 1114093, 655360, 12, 1048557, 655360, 12, 983021, 655360, 12, 917485, 655360, 12, 851949, 655360, 12, 786413, 655360, 12, 720877, 655360, 12, 720878, 655360, 12, 786414, 655360, 12, 851950, 655360, 12, 917486, 655360, 12, 983022, 655360, 12, 1048558, 655360, 12, 1114094, 655360, 12, 1179630, 655360, 12, 1245166, 655360, 12, 1310702, 655360, 12, 1310701, 655360, 12, 1376237, 655360, 12, 1441773, 655360, 12, 1441774, 655360, 12, 1376238, 655360, 12, 1376239, 655360, 12, 1310703, 655360, 12, 1245167, 655360, 12, 1179631, 655360, 12, 1114095, 655360, 12, 1048559, 655360, 12, 983023, 655360, 12, 1048560, 655360, 12, 1114096, 589824, 12, 1179632, 655360, 12, 1245168, 655360, 12, 1310704, 655360, 12, 1376240, 655360, 12, 1441776, 655360, 12, 1441775, 655360, 12, 1441777, 655360, 12, 1376241, 655360, 12, 1310705, 655360, 12, 1245169, 589824, 12, 1179633, 655360, 12, 1114097, 655360, 12, 1179634, 655360, 12, 1245170, 655360, 12, 1310706, 655360, 12, 1376242, 589824, 12, 1441778, 655360, 12, 1441779, 655360, 12, 1376243, 655360, 12, 1310707, 655360, 12, 1245171, 655360, 12, 1179635, 655360, 12, 1179636, 655360, 12, 1245172, 655360, 12, 1310708, 655360, 12, 1376244, 655360, 12, 1441780, 655360, 12, 1441781, 655360, 12, 1310709, 655360, 12, 1245173, 655360, 12, 1179637, 655360, 12, 1179638, 655360, 12, 1245174, 655360, 12, 1310710, 655360, 12, 1376246, 655360, 12, 1376247, 655360, 12, 1310711, 589824, 12, 1245175, 655360, 12, 1179639, 655360, 12, 1179640, 655360, 12, 1245176, 655360, 12, 1310712, 655360, 12, 1376248, 655360, 12, 1376249, 655360, 12, 1310713, 655360, 12, 1245177, 655360, 12, 1179641, 655360, 12, 1179642, 655360, 12, 1245178, 655360, 12, 1310714, 655360, 12, 1376250, 655360, 12, 1376251, 655360, 12, 1310715, 655360, 12, 1245179, 655360, 12, 1179643, 655360, 12, 1179644, 655360, 12, 1114108, 655360, 12, 1048572, 655360, 12, 1048573, 655360, 12, 1114109, 655360, 12, 1179645, 655360, 12, 1245181, 655360, 12, 1245180, 589824, 12, 1310716, 589824, 12, 1376252, 655360, 12, 1376253, 655360, 12, 1310717, 655360, 12, 1310718, 655360, 12, 1245182, 655360, 12, 1179646, 655360, 12, 1114110, 655360, 12, 1048574, 655360, 12, 1048575, 655360, 12, 983039, 655360, 12, 917504, 655360, 12, 851968, 655360, 12, 851969, 655360, 12, 786433, 655360, 12, 720897, 655360, 12, 720898, 655360, 12, 655362, 589824, 12, 655363, 655360, 12, 589827, 655360, 12, 589828, 655360, 12, 589829, 655360, 12, 524293, 655360, 12, 524294, 589824, 12, 589830, 655360, 12, 655366, 655360, 12, 655365, 655360, 12, 720899, 655360, 12, 786435, 655360, 12, 786434, 655360, 12, 851970, 655360, 12, 917505, 655360, 12, 983040, 655360, 12, 1114111, 655360, 12, 1376254, 655360, 12, 1376255, 458752, 12, 1310720, 655360, 12, 1310721, 655360, 12, 1310722, 655360, 12, 1310723, 655360, 12, -1638426, 655360, 12, -1572890, 655360, 12, -1507354, 655360, 12, -1441818, 655360, 12, -1376282, 655360, 12, -1310746, 655360, 12, -1245210, 458752, 12, -1179674, 655360, 12, -1114138, 655360, 12, -1048602, 655360, 12, -983066, 655360, 12, -917530, 655360, 12, -851994, 655360, 12, -786458, 655360, 12, -720922, 655360, 12, -655386, 655360, 12, -589850, 655360, 12, -524314, 655360, 12, -458778, 655360, 12, -393242, 655360, 12, -327706, 655360, 12, -458777, 655360, 12, -524313, 655360, 12, -589849, 655360, 12, -655385, 655360, 12, -720921, 655360, 12, -786457, 655360, 12, -851993, 655360, 12, -917529, 458752, 12, -983065, 655360, 12, -1048601, 655360, 12, -1114137, 655360, 12, -1179673, 655360, 12, -1114136, 655360, 12, -1048600, 655360, 12, -983064, 655360, 12, -917528, 655360, 12, -851992, 655360, 12, -786456, 655360, 12, -720920, 655360, 12, -655384, 655360, 12, -589848, 655360, 12, -524312, 655360, 12, -655383, 655360, 12, -720919, 655360, 12, -786455, 655360, 12, -851991, 655360, 12, -917527, 655360, 12, -983063, 655360, 12, -1048599, 655360, 12, -1114135, 655360, 12, -1114134, 655360, 12, -1048598, 655360, 12, -983062, 655360, 12, -917526, 655360, 12, -851990, 458752, 12, -786454, 655360, 12, -786453, 655360, 12, -851989, 655360, 12, -917525, 655360, 12, -983061, 655360, 12, -1048597, 655360, 12, -917524, 655360, 12, -1507353, 655360, 12, -1572889, 655360, 12, -1638425, 655360, 12, -1638424, 655360, 12, -1572888, 655360, 12, -1507352, 655360, 12, -1507351, 655360, 12, -1572887, 655360, 12, -1638423, 655360, 12, -1638422, 655360, 12, -1572886, 655360, 12, -1507350, 655360, 12, -1507349, 458752, 12, -1572885, 655360, 12, -1638421, 655360, 12, -1638420, 655360, 12, -1572884, 655360, 12, -1572883, 655360, 12, -1638419, 655360, 12, -1638418, 655360, 12, -1638417, 655360, 12, -1638416, 655360, 12, -1638415, 655360, 12, -1638414, 655360, 12, -1703950, 655360, 12, -1572878, 655360, 12, -1572877, 655360, 12, -1638413, 655360, 12, -1638412, 655360, 12, -1572876, 655360, 12, -1572875, 655360, 12, -1638411, 655360, 12, -1638410, 655360, 12, -1572874, 655360, 12, -1507338, 655360, 12, -1507339, 458752, 12, -1441803, 655360, 12, -1441802, 655360, 12, -1376266, 655360, 12, -1310730, 655360, 12, -1245194, 655360, 12, -1179658, 655360, 12, -1114122, 655360, 12, -1048586, 655360, 12, -1048587, 655360, 12, -983051, 655360, 12, -983052, 655360, 12, -983050, 655360, 12, -983049, 655360, 12, -1048585, 655360, 12, -1114121, 655360, 12, -1179657, 655360, 12, -1245193, 655360, 12, -1310729, 655360, 12, -1376265, 655360, 12, -1441801, 655360, 12, -1507337, 655360, 12, -1572873, 655360, 12, -1638409, 655360, 12, -1638408, 655360, 12, -1572872, 655360, 12, -1638407, 655360, 12, -524266, 589824, 12, -589802, 655360, 12, -655338, 655360, 12, -720874, 655360, 12, -786410, 655360, 12, -851946, 655360, 12, -917482, 655360, 12, -983018, 655360, 12, -1048554, 655360, 12, -1114090, 655360, 12, -1179626, 655360, 12, -1245162, 655360, 12, -1310698, 655360, 12, -1376234, 589824, 12, -1441770, 655360, 12, -1507306, 655360, 12, -1572842, 655360, 12, -1638378, 655360, 12, -1703914, 655360, 12, -1703915, 655360, 12, -1703916, 655360, 12, -1703917, 655360, 12, -1703918, 589824, 12, -1703919, 655360, 12, -1703920, 655360, 12, -1703921, 655360, 12, -1703922, 655360, 12, -1703923, 655360, 12, -1703924, 458752, 12, -1703925, 655360, 12, -1703926, 458752, 12, -1703927, 655360, 12, -1703928, 655360, 12, -1703929, 655360, 12, -1703930, 655360, 12, -1703931, 655360, 12, -1703932, 655360, 12, -1703933, 655360, 12, -1703934, 655360, 12, -1703935, 655360, 12, -1769471, 655360, 12, -1638396, 655360, 12, -1638395, 655360, 12, -1572859, 655360, 12, -1572858, 655360, 12, -1638394, 655360, 12, -1638393, 655360, 12, -1572857, 655360, 12, -1572856, 655360, 12, -1638392, 655360, 12, -1638391, 655360, 12, -1572855, 655360, 12, -1507319, 655360, 12, -1507320, 655360, 12, -1507318, 655360, 12, -1572854, 655360, 12, -1638390, 655360, 12, -1638389, 655360, 12, -1572853, 655360, 12, -1507317, 655360, 12, -1441781, 655360, 12, -1441782, 655360, 12, -1376246, 655360, 12, -1310710, 655360, 12, -1245174, 655360, 12, -1179638, 655360, 12, -1114102, 655360, 12, -1048566, 655360, 12, -1048565, 655360, 12, -1114101, 655360, 12, -1179637, 655360, 12, -1245173, 655360, 12, -1310709, 655360, 12, -1376245, 655360, 12, -1376244, 655360, 12, -1441780, 655360, 12, -1507316, 655360, 12, -1572852, 655360, 12, -1638388, 655360, 12, -1638387, 655360, 12, -1572851, 655360, 12, -1507315, 655360, 12, -1441779, 655360, 12, -1376243, 655360, 12, -1310707, 655360, 12, -1310708, 655360, 12, -1245172, 655360, 12, -1179636, 655360, 12, -1114100, 655360, 12, -1048564, 655360, 12, -1048563, 655360, 12, -1114099, 655360, 12, -1179635, 655360, 12, -1245171, 655360, 12, -1245170, 655360, 12, -1310706, 655360, 12, -1376242, 655360, 12, -1441778, 655360, 12, -1507314, 655360, 12, -1572850, 655360, 12, -1638386, 655360, 12, -1638385, 655360, 12, -1572849, 655360, 12, -1507313, 655360, 12, -1441777, 655360, 12, -1376241, 655360, 12, -1310705, 655360, 12, -1245169, 655360, 12, -1179633, 655360, 12, -1179634, 655360, 12, -1114098, 655360, 12, -1048562, 589824, 12, -1048561, 655360, 12, -1114097, 655360, 12, -1114096, 655360, 12, -1179632, 655360, 12, -1245168, 655360, 12, -1310704, 655360, 12, -1376240, 655360, 12, -1441776, 655360, 12, -1507312, 655360, 12, -1572848, 655360, 12, -1638384, 655360, 12, -1638383, 655360, 12, -1572847, 655360, 12, -1507311, 655360, 12, -1441775, 655360, 12, -1376239, 655360, 12, -1310703, 655360, 12, -1245167, 655360, 12, -1179631, 655360, 12, -1114095, 655360, 12, -1048559, 655360, 12, -1048560, 655360, 12, -983023, 655360, 12, -917487, 655360, 12, -851951, 655360, 12, -851952, 655360, 12, -786416, 655360, 12, -851950, 589824, 12, -917486, 655360, 12, -983022, 655360, 12, -1048558, 655360, 12, -1114094, 655360, 12, -1179630, 655360, 12, -1245166, 655360, 12, -1310702, 655360, 12, -1376238, 589824, 12, -1441774, 655360, 12, -1507310, 655360, 12, -1572846, 655360, 12, -1638382, 655360, 12, -1638381, 655360, 12, -1572845, 655360, 12, -1507309, 655360, 12, -1441773, 655360, 12, -1376237, 655360, 12, -1310701, 655360, 12, -1245165, 655360, 12, -1179629, 655360, 12, -1114093, 655360, 12, -1048557, 655360, 12, -983021, 655360, 12, -917485, 655360, 12, -851949, 655360, 12, -786413, 655360, 12, -786414, 655360, 12, -720878, 655360, 12, -720879, 655360, 12, -655342, 655360, 12, -655341, 655360, 12, -720877, 655360, 12, -720876, 655360, 12, -786412, 655360, 12, -851948, 655360, 12, -917484, 655360, 12, -983020, 655360, 12, -1048556, 655360, 12, -1114092, 655360, 12, -1179628, 655360, 12, -1245164, 655360, 12, -1310700, 655360, 12, -1376236, 655360, 12, -1441772, 655360, 12, -1507308, 655360, 12, -1572844, 655360, 12, -1638380, 655360, 12, -1638379, 655360, 12, -1572843, 655360, 12, -1507307, 655360, 12, -1441771, 655360, 12, -1376235, 655360, 12, -1310699, 655360, 12, -1245163, 655360, 12, -1179627, 655360, 12, -1114091, 655360, 12, -1048555, 655360, 12, -983019, 655360, 12, -917483, 655360, 12, -851947, 589824, 12, -786411, 655360, 12, -720875, 655360, 12, -655339, 589824, 12, -655340, 655360, 12, -589804, 655360, 12, -524268, 655360, 12, -458732, 655360, 12, -393196, 655360, 12, -327660, 655360, 12, -262124, 655360, 12, -196588, 655360, 12, -131052, 655360, 12, -65516, 458752, 12, 20, 655360, 12, 19, 589824, 12, 65555, 655360, 12, 131091, 655360, 12, 196627, 655360, 12, 196626, 655360, 12, 262162, 655360, 12, 262161, 655360, 12, 327697, 458752, 12, 327696, 655360, 12, 327695, 655360, 12, 393231, 655360, 12, 393230, 655360, 12, 458766, 655360, 12, 458765, 655360, 12, 524301, 655360, 12, 524300, 655360, 12, 589836, 655360, 12, 589835, 655360, 12, 589834, 655360, 12, 524298, 655360, 12, 524297, 655360, 12, 589833, 655360, 12, 655369, 655360, 12, 655370, 655360, 12, 655371, 655360, 12, 589837, 655360, 12, 524302, 655360, 12, 524303, 655360, 12, 458767, 655360, 12, 458768, 655360, 12, 393232, 655360, 12, 393233, 655360, 12, 327698, 655360, 12, 262163, 655360, 12, 262164, 655360, 12, 196628, 655360, 12, 131092, 458752, 12, 65556, 655360, 12, 131093, 655360, 12, 196629, 655360, 12, 262165, 655360, 12, 262166, 655360, 12, 196630, 655360, 12, 131094, 655360, 12, 65558, 655360, 12, 22, 589824, 12, -65514, 655360, 12, -131050, 655360, 12, -196586, 655360, 12, -262122, 655360, 12, -327658, 655360, 12, -393194, 655360, 12, -458730, 655360, 12, -458731, 655360, 12, -524267, 655360, 12, -589803, 655360, 12, -393195, 655360, 12, -327659, 655360, 12, -262123, 655360, 12, -196587, 655360, 12, -131051, 655360, 12, -65515, 655360, 12, 21, 655360, 12, -458729, 655360, 12, -524265, 655360, 12, -589801, 655360, 12, -655337, 655360, 12, -720873, 655360, 12, -786409, 655360, 12, -851945, 655360, 12, -917481, 655360, 12, -983017, 655360, 12, -1048553, 655360, 12, -1114089, 655360, 12, -1179625, 655360, 12, -1245161, 655360, 12, -1310697, 655360, 12, -1376233, 655360, 12, -1441769, 655360, 12, -1507305, 655360, 12, -1572841, 655360, 12, -1638377, 655360, 12, -1703913, 655360, 12, -1703912, 655360, 12, -1638376, 655360, 12, -1572840, 655360, 12, -1507304, 458752, 12, -1441768, 655360, 12, -1376232, 655360, 12, -1310696, 655360, 12, -1245160, 655360, 12, -1179624, 655360, 12, -1114088, 655360, 12, -1048552, 655360, 12, -983016, 655360, 12, -917480, 655360, 12, -851944, 655360, 12, -786408, 655360, 12, -720872, 655360, 12, -655336, 655360, 12, -589800, 655360, 12, -524264, 655360, 12, -458728, 655360, 12, -393192, 655360, 12, -393193, 655360, 12, -327657, 655360, 12, -262121, 589824, 12, -196585, 655360, 12, -131049, 655360, 12, -65513, 589824, 12, 23, 458752, 12, 65559, 655360, 12, 131095, 655360, 12, 196631, 655360, 12, 262167, 655360, 12, 327703, 655360, 12, 327702, 655360, 12, 393238, 655360, 12, 458774, 655360, 12, 524310, 655360, 12, 589846, 655360, 12, 655382, 655360, 12, 720918, 655360, 12, 720919, 655360, 12, 655383, 655360, 12, 655384, 655360, 12, 589848, 655360, 12, 524312, 655360, 12, 458776, 655360, 12, 393240, 655360, 12, 327704, 458752, 12, 262168, 655360, 12, 196632, 655360, 12, 131096, 655360, 12, 65560, 655360, 12, 24, 655360, 12, -65512, 655360, 12, -131048, 655360, 12, -196584, 655360, 12, -262120, 655360, 12, -327656, 655360, 12, -327655, 655360, 12, -393191, 655360, 12, -458727, 655360, 12, -524263, 655360, 12, -589799, 655360, 12, -655335, 655360, 12, -720871, 655360, 12, -786407, 655360, 12, -851943, 655360, 12, -917479, 655360, 12, -983015, 655360, 12, -1048551, 655360, 12, -1114087, 655360, 12, -1179623, 655360, 12, -1245159, 655360, 12, -1310695, 655360, 12, -1376231, 655360, 12, -1441767, 655360, 12, -1507303, 655360, 12, -1572839, 655360, 12, -1638375, 655360, 12, -1703911, 655360, 12, -262119, 458752, 12, -196583, 655360, 12, -131047, 655360, 12, -65511, 655360, 12, 25, 458752, 12, 65561, 655360, 12, 393239, 655360, 12, 458775, 655360, 12, 524311, 655360, 12, 720920, 458752, 12, 786456, 655360, 12, 786455, 655360, 12, 851991, 655360, 12, 917527, 458752, 12, 983063, 655360, 12, 1048599, 655360, 12, 1048598, 655360, 12, 1114134, 655360, 12, 1179670, 655360, 12, 1179671, 655360, 12, 1114135, 655360, 12, 1114136, 655360, 12, 1048600, 655360, 12, 983064, 655360, 12, 917528, 655360, 12, 851992, 655360, 12, 1179672, 655360, 12, 1245208, 655360, 12, 1245207, 655360, 12, 1310743, 655360, 12, 1310742, 655360, 12, 1310744, 655360, 12, 1507323, 655360, 12, 1310728, 655360, 12) - -[node name="Details" type="TileMap" parent="Map"] -tile_set = SubResource("TileSet_orc4v") -format = 2 -layer_0/tile_data = PackedInt32Array(786437, 720896, 0, 1245199, 65536, 0, 983050, 65536, 0, 720916, 65536, 0, 983059, 851968, 0, 1048596, 327680, 0, 917523, 393216, 0, 983043, 393216, 0, 1114115, 458752, 0, 1179653, 524288, 0, 1114120, 262144, 0, -1114117, 393216, 3, -1179655, 327680, 3, -1179648, 65536, 3, -1179643, 327680, 3, -1638399, 196608, 3, -1507324, 0, 3, -1507322, 458752, 3, -1310712, 65536, 3, -1310714, 0, 3, -1114129, 131072, 2, -1179660, 131072, 2, -458762, 131072, 2, -65557, 131072, 2, 262126, 131072, 2, 655348, 131072, 2, 458740, 131072, 2, 917496, 131072, 2, 851964, 131072, 2, 720894, 131072, 2, -327684, 131072, 2, -720881, 131072, 2, 458737, 196608, 2, -196621, 196608, 2, 262136, 196608, 2, 917494, 196608, 2, 327676, 196608, 2, 196612, 196608, 2, 196614, 196608, 2, -786420, 196608, 2, -65554, 327680, 2, -65551, 327680, 2, 983026, 327680, 2, -524293, 327680, 2, -458755, 327680, 2, 393222, 327680, 2, 13, 327680, 2, -458747, 327680, 2, -524279, 327680, 2, -589810, 327680, 2, -917499, 0, 0, -917519, 393216, 2, -589835, 393216, 2, -851975, 393216, 2, -131088, 393216, 2, -5, 262144, 2, 589812, 393216, 2, 917489, 131072, 0, 1048563, 131072, 0, 786419, 131072, 0, 655347, 131072, 0, 720886, 131072, 0, 655350, 131072, 0, 655353, 131072, 0, 786427, 131072, 0, 851962, 131072, 0, 1048568, 131072, 0, 983030, 131072, 0, 262141, 393216, 2, -589828, 393216, 2, -655345, 393216, 2, -589809, 393216, 2, -393210, 393216, 2, 393215, 393216, 2, 720888, 458752, 2, 851961, 262144, 2, 786423, 262144, 2, 458742, 458752, 2, -262166, 458752, 2, -851961, 458752, 2, -851955, 262144, 2, 851952, 393216, 2, -1114126, 0, 2, -458769, 65536, 2, -327699, 0, 2, 131052, 65536, 2, -327692, 0, 2, -65549, 65536, 2, 65534, 0, 2, -131080, 65536, 2, 65530, 131072, 0, 65536, 131072, 0, -458760, 131072, 0, -786435, 131072, 0, -720891, 131072, 0, -524280, 131072, 0, -393211, 131072, 0, -655355, 0, 2, -786422, 0, 2, -786419, 0, 2, -589808, 65536, 2, -65537, 393216, 2, -262145, 393216, 2, -262149, 65536, 2, 262139, 65536, 2, 393211, 0, 2, 262142, 0, 2) - -[node name="Bamboos" type="Node" parent="."] - -[node name="Bamboo" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(-538, -531) - -[node name="Bamboo2" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(-724, -311) - -[node name="Bamboo3" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(-566, 124) - -[node name="Bamboo4" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(-1211, 187) - -[node name="Bamboo5" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(-1233, -351) - -[node name="Bamboo6" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(-922, -786) - -[node name="Bamboo7" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(-741, 577) - -[node name="Bamboo8" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(-164, 554) - -[node name="Bamboo9" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(758, 192) - -[node name="Bamboo10" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(763, -713) - -[node name="Bamboo11" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(-158, -96) - -[node name="Bamboo12" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(967, -238) - -[node name="Bamboo13" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(294, -594) - -[node name="Bamboo14" parent="Bamboos" instance=ExtResource("4_8jerw")] -position = Vector2(560, -141) - -[node name="Killzone" parent="." instance=ExtResource("5_3xrri")] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="Killzone"] -position = Vector2(-3, 1217) -shape = SubResource("WorldBoundaryShape2D_5dw0q") - -[node name="CollisionShape2D2" type="CollisionShape2D" parent="Killzone"] -shape = SubResource("WorldBoundaryShape2D_7ioaa") - -[node name="CollisionShape2D3" type="CollisionShape2D" parent="Killzone"] -shape = SubResource("WorldBoundaryShape2D_fq7i5") - -[node name="CollisionShape2D4" type="CollisionShape2D" parent="Killzone"] -shape = SubResource("WorldBoundaryShape2D_kp00i") - -[node name="Players" type="Node" parent="."] - -[node name="Player" parent="Players" instance=ExtResource("1_ykwem")] -position = Vector2(204, -105) -collision_mask = 7 - -[node name="Overworld" type="Camera2D" parent="."] -unique_name_in_owner = true -position = Vector2(955, -128) -zoom = Vector2(0.21, 0.21) - -[node name="Sync" type="Node" parent="."] -script = ExtResource("7_c27o5") -speed_up = 20.0 - -[node name="WorldTimer" type="Timer" parent="."] -unique_name_in_owner = true -wait_time = 1000.0 -autostart = true - -[connection signal="death" from="Players/Player" to="." method="_on_player_death"] -[connection signal="timeout" from="WorldTimer" to="." method="_on_timer_timeout"] diff --git a/Godot/scenes/notice.tscn b/Godot/scenes/notice.tscn deleted file mode 100644 index 852e08a..0000000 --- a/Godot/scenes/notice.tscn +++ /dev/null @@ -1,4 +0,0 @@ -[gd_scene format=3 uid="uid://dxwjan054vgw0"] - -[node name="Notice" type="Area2D"] -collision_mask = 2 diff --git a/Godot/scenes/player.tscn b/Godot/scenes/player.tscn deleted file mode 100644 index f75cb4b..0000000 --- a/Godot/scenes/player.tscn +++ /dev/null @@ -1,252 +0,0 @@ -[gd_scene load_steps=41 format=3 uid="uid://c7rps714eqdg5"] - -[ext_resource type="Script" path="res://code/player.gd" id="1_iepw4"] -[ext_resource type="Texture2D" uid="uid://b30lhx6f0uy74" path="res://assets/graphics/player/down_attack/attack_down.png" id="2_nre2m"] -[ext_resource type="Texture2D" uid="uid://dxtdtufshr3tw" path="res://assets/graphics/player/left_attack/attack_left.png" id="3_byxsk"] -[ext_resource type="Texture2D" uid="uid://bsocx4vc2sb6s" path="res://assets/graphics/player/right_attack/attack_right.png" id="4_8jqr7"] -[ext_resource type="Texture2D" uid="uid://spquud6cue2l" path="res://assets/graphics/player/up_attack/attack_up.png" id="5_jmjp6"] -[ext_resource type="Texture2D" uid="uid://dij0wyugh24b" path="res://assets/graphics/player/down_idle/idle_down.png" id="6_1snvs"] -[ext_resource type="Texture2D" uid="uid://s31ghurbke8i" path="res://assets/graphics/player/left_idle/idle_left.png" id="7_5uysv"] -[ext_resource type="Texture2D" uid="uid://dh3tuae2rueb" path="res://assets/graphics/player/right_idle/idle_right.png" id="8_i2d7d"] -[ext_resource type="Texture2D" uid="uid://clmyffqm3bmo7" path="res://assets/graphics/player/up_idle/idle_up.png" id="9_vygid"] -[ext_resource type="Texture2D" uid="uid://cs8hfdfrcj3ym" path="res://assets/graphics/player/down/down_0.png" id="10_ix4yj"] -[ext_resource type="Texture2D" uid="uid://5sv3w4si1nrt" path="res://assets/graphics/player/down/down_1.png" id="11_n0p7r"] -[ext_resource type="Texture2D" uid="uid://bmijyqm6i1c1c" path="res://assets/graphics/player/down/down_2.png" id="12_ewi2q"] -[ext_resource type="Texture2D" uid="uid://c81kxx6dryb36" path="res://assets/graphics/player/down/down_3.png" id="13_uvjce"] -[ext_resource type="Texture2D" uid="uid://bdbd32x12d60" path="res://assets/graphics/player/left/left_0.png" id="14_1ggki"] -[ext_resource type="Texture2D" uid="uid://8jvqhpphj6np" path="res://assets/graphics/player/left/left_1.png" id="15_0b7dq"] -[ext_resource type="Texture2D" uid="uid://cam3122hb8vfa" path="res://assets/graphics/player/left/left_2.png" id="16_4yut5"] -[ext_resource type="Texture2D" uid="uid://b801fr00dpw8u" path="res://assets/graphics/player/left/left_3.png" id="17_xafwe"] -[ext_resource type="Texture2D" uid="uid://3bsrlfk4poo1" path="res://assets/graphics/player/right/right_0.png" id="18_g74n4"] -[ext_resource type="Texture2D" uid="uid://bjjcymlv4lkps" path="res://assets/graphics/player/right/right_1.png" id="19_r3xtt"] -[ext_resource type="Texture2D" uid="uid://cfo77c6bv322j" path="res://assets/graphics/player/right/right_2.png" id="20_5b8or"] -[ext_resource type="Texture2D" uid="uid://debleuxlf6kdt" path="res://assets/graphics/player/right/right_3.png" id="21_qn80v"] -[ext_resource type="Texture2D" uid="uid://cbou2pxybkt4d" path="res://assets/graphics/player/up/up_0.png" id="22_5nuot"] -[ext_resource type="Texture2D" uid="uid://o78bod3x5qss" path="res://assets/graphics/player/up/up_1.png" id="23_vkm2w"] -[ext_resource type="Texture2D" uid="uid://crspttjaijn4g" path="res://assets/graphics/player/up/up_2.png" id="24_j1lfm"] -[ext_resource type="Texture2D" uid="uid://b20c4l52ey54t" path="res://assets/graphics/player/up/up_3.png" id="25_mui4y"] -[ext_resource type="PackedScene" uid="uid://dh6xtqap2c2j4" path="res://scenes/weapon.tscn" id="26_5p1ew"] -[ext_resource type="PackedScene" uid="uid://bj4ap7bw0imhy" path="res://scenes/camera.tscn" id="27_dsoxo"] -[ext_resource type="Script" path="res://code/AIController2D.gd" id="28_cl3w8"] - -[sub_resource type="AtlasTexture" id="AtlasTexture_n5xny"] -atlas = ExtResource("6_1snvs") -region = Rect2(0, 0, 64, 64) - -[sub_resource type="AtlasTexture" id="AtlasTexture_1pcxv"] -atlas = ExtResource("10_ix4yj") -region = Rect2(0, 0, 64, 64) - -[sub_resource type="AtlasTexture" id="AtlasTexture_hc3sy"] -atlas = ExtResource("11_n0p7r") -region = Rect2(0, 0, 64, 64) - -[sub_resource type="AtlasTexture" id="AtlasTexture_ae5o2"] -atlas = ExtResource("12_ewi2q") -region = Rect2(0, 0, 64, 64) - -[sub_resource type="AtlasTexture" id="AtlasTexture_dvqaa"] -atlas = ExtResource("13_uvjce") -region = Rect2(0, 0, 64, 64) - -[sub_resource type="AtlasTexture" id="AtlasTexture_i6fhi"] -atlas = ExtResource("14_1ggki") -region = Rect2(0, 0, 64, 64) - -[sub_resource type="AtlasTexture" id="AtlasTexture_b6l7h"] -atlas = ExtResource("22_5nuot") -region = Rect2(0, 0, 64, 64) - -[sub_resource type="AtlasTexture" id="AtlasTexture_43afb"] -atlas = ExtResource("23_vkm2w") -region = Rect2(0, 0, 64, 64) - -[sub_resource type="AtlasTexture" id="AtlasTexture_kib0g"] -atlas = ExtResource("24_j1lfm") -region = Rect2(0, 0, 64, 64) - -[sub_resource type="AtlasTexture" id="AtlasTexture_3nifw"] -atlas = ExtResource("25_mui4y") -region = Rect2(0, 0, 64, 64) - -[sub_resource type="SpriteFrames" id="SpriteFrames_bjuky"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": ExtResource("2_nre2m") -}], -"loop": false, -"name": &"attack_down", -"speed": 2.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("3_byxsk") -}], -"loop": false, -"name": &"attack_left", -"speed": 2.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("4_8jqr7") -}], -"loop": false, -"name": &"attack_right", -"speed": 2.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("5_jmjp6") -}], -"loop": false, -"name": &"attack_up", -"speed": 2.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": SubResource("AtlasTexture_n5xny") -}], -"loop": false, -"name": &"idle_down", -"speed": 10.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("7_5uysv") -}], -"loop": false, -"name": &"idle_left", -"speed": 10.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("8_i2d7d") -}], -"loop": false, -"name": &"idle_right", -"speed": 10.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("9_vygid") -}], -"loop": false, -"name": &"idle_up", -"speed": 10.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": SubResource("AtlasTexture_1pcxv") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_hc3sy") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_ae5o2") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_dvqaa") -}], -"loop": true, -"name": &"move_down", -"speed": 10.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": SubResource("AtlasTexture_i6fhi") -}, { -"duration": 1.0, -"texture": ExtResource("15_0b7dq") -}, { -"duration": 1.0, -"texture": ExtResource("16_4yut5") -}, { -"duration": 1.0, -"texture": ExtResource("17_xafwe") -}], -"loop": true, -"name": &"move_left", -"speed": 10.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("18_g74n4") -}, { -"duration": 1.0, -"texture": ExtResource("19_r3xtt") -}, { -"duration": 1.0, -"texture": ExtResource("20_5b8or") -}, { -"duration": 1.0, -"texture": ExtResource("21_qn80v") -}], -"loop": true, -"name": &"move_right", -"speed": 10.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": SubResource("AtlasTexture_b6l7h") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_43afb") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_kib0g") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_3nifw") -}], -"loop": true, -"name": &"move_up", -"speed": 10.0 -}] - -[sub_resource type="RectangleShape2D" id="RectangleShape2D_ilpv0"] -size = Vector2(47, 48) - -[node name="Player" type="CharacterBody2D"] -z_index = 5 -position = Vector2(0, -31) -collision_layer = 2 -collision_mask = 6 -script = ExtResource("1_iepw4") - -[node name="Button" type="Button" parent="."] -modulate = Color(1, 1, 1, 0) -self_modulate = Color(1, 1, 1, 0) -offset_left = -85.0 -offset_top = -86.0 -offset_right = 85.0 -offset_bottom = 93.0 -icon_alignment = 1 - -[node name="Weapon" parent="." instance=ExtResource("26_5p1ew")] -position = Vector2(-10, 48) - -[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] -position = Vector2(0, -1) -sprite_frames = SubResource("SpriteFrames_bjuky") -animation = &"idle_down" -autoplay = "idle_down" - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(-1.5, 2) -shape = SubResource("RectangleShape2D_ilpv0") - -[node name="AttackTimer" type="Timer" parent="."] -wait_time = 0.4 -one_shot = true - -[node name="Camera" parent="." instance=ExtResource("27_dsoxo")] -visible = false -position = Vector2(-2, 18) - -[node name="AIController2D" type="Node2D" parent="."] -script = ExtResource("28_cl3w8") - -[connection signal="pressed" from="Button" to="." method="_on_button_pressed"] -[connection signal="toggled" from="Button" to="." method="_on_button_toggled"] -[connection signal="timeout" from="AttackTimer" to="." method="_on_attack_timer_timeout"] diff --git a/Godot/scenes/weapon.tscn b/Godot/scenes/weapon.tscn deleted file mode 100644 index 3d0463f..0000000 --- a/Godot/scenes/weapon.tscn +++ /dev/null @@ -1,100 +0,0 @@ -[gd_scene load_steps=8 format=3 uid="uid://dh6xtqap2c2j4"] - -[ext_resource type="Texture2D" uid="uid://bpobfwslfc3qy" path="res://assets/graphics/weapons/sword/down.png" id="1_1yw4v"] -[ext_resource type="Script" path="res://code/weapon.gd" id="1_utwve"] - -[sub_resource type="SpriteFrames" id="SpriteFrames_4n6kd"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": ExtResource("1_1yw4v") -}], -"loop": true, -"name": &"down", -"speed": 5.0 -}] - -[sub_resource type="RectangleShape2D" id="RectangleShape2D_iedax"] -size = Vector2(51, 79) - -[sub_resource type="Animation" id="Animation_0n3f6"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("AnimatedSprite2D:visible") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("CollisionShape2D:disabled") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} - -[sub_resource type="Animation" id="Animation_vwacy"] -resource_name = "attack" -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("AnimatedSprite2D:visible") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("CollisionShape2D:disabled") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} - -[sub_resource type="AnimationLibrary" id="AnimationLibrary_sb3pq"] -_data = { -"RESET": SubResource("Animation_0n3f6"), -"attack": SubResource("Animation_vwacy") -} - -[node name="Weapon" type="Area2D"] -collision_mask = 4 -script = ExtResource("1_utwve") - -[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] -visible = false -sprite_frames = SubResource("SpriteFrames_4n6kd") -animation = &"down" -flip_h = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(10.5, -15.5) -shape = SubResource("RectangleShape2D_iedax") -disabled = true - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_sb3pq") -} - -[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/Godot/script_templates/AIController/controller_template.gd b/Godot/script_templates/AIController/controller_template.gd deleted file mode 100644 index ea1ddf1..0000000 --- a/Godot/script_templates/AIController/controller_template.gd +++ /dev/null @@ -1,43 +0,0 @@ -# meta-name: AI Controller Logic -# meta-description: Methods that need implementing for AI controllers -# meta-default: true -extends _BASE_ - -#-- Methods that need implementing using the "extend script" option in Godot --# - -func get_obs() -> Dictionary: - assert(false, "the get_obs method is not implemented when extending from ai_controller") - return {"obs":[]} - -func get_reward() -> float: - assert(false, "the get_reward method is not implemented when extending from ai_controller") - return 0.0 - -func get_action_space() -> Dictionary: - assert(false, "the get get_action_space method is not implemented when extending from ai_controller") - return { - "example_actions_continous" : { - "size": 2, - "action_type": "continuous" - }, - "example_actions_discrete" : { - "size": 2, - "action_type": "discrete" - }, - } - -func set_action(action) -> void: - assert(false, "the get set_action method is not implemented when extending from ai_controller") -# -----------------------------------------------------------------------------# - -#-- Methods that can be overridden if needed --# - -#func get_obs_space() -> Dictionary: -# May need overriding if the obs space is complex -# var obs = get_obs() -# return { -# "obs": { -# "size": [len(obs["obs"])], -# "space": "box" -# }, -# } diff --git a/Godot/shell.nix b/Godot/shell.nix deleted file mode 100644 index d59ccc7..0000000 --- a/Godot/shell.nix +++ /dev/null @@ -1,33 +0,0 @@ -with import {}; - -pkgs.mkShell rec { - - dotnetPkg = (with dotnetCorePackages; combinePackages [ - sdk_9_0 - ]); - - NIX_LD_LIBRARY_PATH = lib.makeLibraryPath ([ - stdenv.cc.cc - ] ++ deps); - - NIX_LD = "${pkgs.stdenv.cc.libc_bin}/bin/ld.so"; - - nativeBuildInputs = [] ++ deps; - - shellHook = '' - export LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH - DOTNET_ROOT="${dotnetPkg}" - ''; - - packages = [ - dotnet-sdk - xorg.libX11 - ]; - - deps = [ - zlib - zlib.dev - openssl - dotnetPkg - ]; -} diff --git a/Godot/stable_baselines3_example.py b/Godot/stable_baselines3_example.py deleted file mode 100644 index 4697ab9..0000000 --- a/Godot/stable_baselines3_example.py +++ /dev/null @@ -1,225 +0,0 @@ -import argparse -import os -import pathlib -from typing import Callable - -from stable_baselines3 import PPO -from stable_baselines3.common.callbacks import CheckpointCallback -from stable_baselines3.common.vec_env.vec_monitor import VecMonitor - -from godot_rl.core.utils import can_import -from godot_rl.wrappers.onnx.stable_baselines_export import export_ppo_model_as_onnx -from godot_rl.wrappers.stable_baselines_wrapper import StableBaselinesGodotEnv - -# To download the env source and binary: -# 1. gdrl.env_from_hub -r edbeeching/godot_rl_BallChase -# 2. chmod +x examples/godot_rl_BallChase/bin/BallChase.x86_64 -if can_import("ray"): - print("WARNING, stable baselines and ray[rllib] are not compatible") - -parser = argparse.ArgumentParser(allow_abbrev=False) -parser.add_argument( - "--env_path", - default=None, - type=str, - help="The Godot binary to use, do not include for in editor training", -) -parser.add_argument( - "--experiment_dir", - default="logs/sb3", - type=str, - help="The name of the experiment directory, in which the tensorboard logs and checkpoints (if enabled) are " - "getting stored.", -) -parser.add_argument( - "--experiment_name", - default="experiment", - type=str, - help="The name of the experiment, which will be displayed in tensorboard and " - "for checkpoint directory and name (if enabled).", -) -parser.add_argument("--seed", type=int, default=0, help="seed of the experiment") -parser.add_argument( - "--resume_model_path", - default=None, - type=str, - help="The path to a model file previously saved using --save_model_path or a checkpoint saved using " - "--save_checkpoints_frequency. Use this to resume training or infer from a saved model.", -) -parser.add_argument( - "--save_model_path", - default=None, - type=str, - help="The path to use for saving the trained sb3 model after training is complete. Saved model can be used later " - "to resume training. Extension will be set to .zip", -) -parser.add_argument( - "--save_checkpoint_frequency", - default=None, - type=int, - help=( - "If set, will save checkpoints every 'frequency' environment steps. " - "Requires a unique --experiment_name or --experiment_dir for each run. " - "Does not need --save_model_path to be set. " - ), -) -parser.add_argument( - "--onnx_export_path", - default=None, - type=str, - help="If included, will export onnx file after training to the path specified.", -) -parser.add_argument( - "--timesteps", - default=1_000_000, - type=int, - help="The number of environment steps to train for, default is 1_000_000. If resuming from a saved model, " - "it will continue training for this amount of steps from the saved state without counting previously trained " - "steps", -) -parser.add_argument( - "--inference", - default=False, - action="store_true", - help="Instead of training, it will run inference on a loaded model for --timesteps steps. " - "Requires --resume_model_path to be set.", -) -parser.add_argument( - "--linear_lr_schedule", - default=False, - action="store_true", - help="Use a linear LR schedule for training. If set, learning rate will decrease until it reaches 0 at " - "--timesteps" - "value. Note: On resuming training, the schedule will reset. If disabled, constant LR will be used.", -) -parser.add_argument( - "--viz", - action="store_true", - help="If set, the simulation will be displayed in a window during training. Otherwise " - "training will run without rendering the simulation. This setting does not apply to in-editor training.", - default=False, -) -parser.add_argument("--speedup", default=1, type=int, help="Whether to speed up the physics in the env") -parser.add_argument( - "--n_parallel", - default=1, - type=int, - help="How many instances of the environment executable to " "launch - requires --env_path to be set if > 1.", -) -args, extras = parser.parse_known_args() - - -def handle_onnx_export(): - # Enforce the extension of onnx and zip when saving model to avoid potential conflicts in case of same name - # and extension used for both - if args.onnx_export_path is not None: - path_onnx = pathlib.Path(args.onnx_export_path).with_suffix(".onnx") - print("Exporting onnx to: " + os.path.abspath(path_onnx)) - export_ppo_model_as_onnx(model, str(path_onnx)) - - -def handle_model_save(): - if args.save_model_path is not None: - zip_save_path = pathlib.Path(args.save_model_path).with_suffix(".zip") - print("Saving model to: " + os.path.abspath(zip_save_path)) - model.save(zip_save_path) - - -def close_env(): - try: - print("closing env") - env.close() - except Exception as e: - print("Exception while closing env: ", e) - - -path_checkpoint = os.path.join(args.experiment_dir, args.experiment_name + "_checkpoints") -abs_path_checkpoint = os.path.abspath(path_checkpoint) - -# Prevent overwriting existing checkpoints when starting a new experiment if checkpoint saving is enabled -if args.save_checkpoint_frequency is not None and os.path.isdir(path_checkpoint): - raise RuntimeError( - abs_path_checkpoint + " folder already exists. " - "Use a different --experiment_dir, or --experiment_name," - "or if previous checkpoints are not needed anymore, " - "remove the folder containing the checkpoints. " - ) - -if args.inference and args.resume_model_path is None: - raise parser.error("Using --inference requires --resume_model_path to be set.") - -if args.env_path is None and args.viz: - print("Info: Using --viz without --env_path set has no effect, in-editor training will always render.") - -env = StableBaselinesGodotEnv( - env_path=args.env_path, show_window=args.viz, seed=args.seed, n_parallel=args.n_parallel, speedup=args.speedup -) -env = VecMonitor(env) - - -# LR schedule code snippet from: -# https://stable-baselines3.readthedocs.io/en/master/guide/examples.html#learning-rate-schedule -def linear_schedule(initial_value: float) -> Callable[[float], float]: - """ - Linear learning rate schedule. - - :param initial_value: Initial learning rate. - :return: schedule that computes - current learning rate depending on remaining progress - """ - - def func(progress_remaining: float) -> float: - """ - Progress will decrease from 1 (beginning) to 0. - - :param progress_remaining: - :return: current learning rate - """ - return progress_remaining * initial_value - - return func - - -if args.resume_model_path is None: - learning_rate = 0.0003 if not args.linear_lr_schedule else linear_schedule(0.0003) - model: PPO = PPO( - "MultiInputPolicy", - env, - batch_size=128, - ent_coef=0.001, - verbose=2, - n_steps=32, - tensorboard_log=args.experiment_dir, - learning_rate=learning_rate, - ) -else: - path_zip = pathlib.Path(args.resume_model_path) - print("Loading model: " + os.path.abspath(path_zip)) - model = PPO.load(path_zip, env=env, tensorboard_log=args.experiment_dir) - -if args.inference: - obs = env.reset() - for i in range(args.timesteps): - action, _state = model.predict(obs, deterministic=True) - obs, reward, done, info = env.step(action) -else: - learn_arguments = dict(total_timesteps=args.timesteps, tb_log_name=args.experiment_name) - if args.save_checkpoint_frequency: - print("Checkpoint saving enabled. Checkpoints will be saved to: " + abs_path_checkpoint) - checkpoint_callback = CheckpointCallback( - save_freq=(args.save_checkpoint_frequency // env.num_envs), - save_path=path_checkpoint, - name_prefix=args.experiment_name, - ) - learn_arguments["callback"] = checkpoint_callback - try: - model.learn(**learn_arguments) - except KeyboardInterrupt: - print( - """Training interrupted by user. Will save if --save_model_path was - used and/or export if --onnx_export_path was used.""" - ) - -close_env() -handle_onnx_export() -handle_model_save() diff --git a/PyGame/LICENSE b/LICENSE similarity index 100% rename from PyGame/LICENSE rename to LICENSE diff --git a/PyGame/assets/font/joystix.ttf b/PyGame/assets/font/joystix.ttf deleted file mode 100644 index 5fd36a5..0000000 Binary files a/PyGame/assets/font/joystix.ttf and /dev/null differ diff --git a/PyGame/assets/graphics/grass/grass_1.png b/PyGame/assets/graphics/grass/grass_1.png deleted file mode 100644 index e59c1d4..0000000 Binary files a/PyGame/assets/graphics/grass/grass_1.png and /dev/null differ diff --git a/PyGame/assets/graphics/grass/grass_2.png b/PyGame/assets/graphics/grass/grass_2.png deleted file mode 100644 index 74c656a..0000000 Binary files a/PyGame/assets/graphics/grass/grass_2.png and /dev/null differ diff --git a/PyGame/assets/graphics/grass/grass_3.png b/PyGame/assets/graphics/grass/grass_3.png deleted file mode 100644 index da65a05..0000000 Binary files a/PyGame/assets/graphics/grass/grass_3.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/bamboo/attack/0.png b/PyGame/assets/graphics/monsters/bamboo/attack/0.png deleted file mode 100644 index c14d75b..0000000 Binary files a/PyGame/assets/graphics/monsters/bamboo/attack/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/bamboo/idle/0.png b/PyGame/assets/graphics/monsters/bamboo/idle/0.png deleted file mode 100644 index c14d75b..0000000 Binary files a/PyGame/assets/graphics/monsters/bamboo/idle/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/bamboo/idle/1.png b/PyGame/assets/graphics/monsters/bamboo/idle/1.png deleted file mode 100644 index 9dd1acc..0000000 Binary files a/PyGame/assets/graphics/monsters/bamboo/idle/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/bamboo/idle/2.png b/PyGame/assets/graphics/monsters/bamboo/idle/2.png deleted file mode 100644 index c14d75b..0000000 Binary files a/PyGame/assets/graphics/monsters/bamboo/idle/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/bamboo/idle/3.png b/PyGame/assets/graphics/monsters/bamboo/idle/3.png deleted file mode 100644 index 6411298..0000000 Binary files a/PyGame/assets/graphics/monsters/bamboo/idle/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/bamboo/move/0.png b/PyGame/assets/graphics/monsters/bamboo/move/0.png deleted file mode 100644 index c14d75b..0000000 Binary files a/PyGame/assets/graphics/monsters/bamboo/move/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/bamboo/move/1.png b/PyGame/assets/graphics/monsters/bamboo/move/1.png deleted file mode 100644 index 9dd1acc..0000000 Binary files a/PyGame/assets/graphics/monsters/bamboo/move/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/bamboo/move/2.png b/PyGame/assets/graphics/monsters/bamboo/move/2.png deleted file mode 100644 index c14d75b..0000000 Binary files a/PyGame/assets/graphics/monsters/bamboo/move/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/bamboo/move/3.png b/PyGame/assets/graphics/monsters/bamboo/move/3.png deleted file mode 100644 index 6411298..0000000 Binary files a/PyGame/assets/graphics/monsters/bamboo/move/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/attack/0.png b/PyGame/assets/graphics/monsters/raccoon/attack/0.png deleted file mode 100644 index 2e53f25..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/attack/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/attack/1.png b/PyGame/assets/graphics/monsters/raccoon/attack/1.png deleted file mode 100644 index 21c4d49..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/attack/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/attack/2.png b/PyGame/assets/graphics/monsters/raccoon/attack/2.png deleted file mode 100644 index 3319c79..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/attack/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/attack/3.png b/PyGame/assets/graphics/monsters/raccoon/attack/3.png deleted file mode 100644 index aa2d58f..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/attack/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/idle/0.png b/PyGame/assets/graphics/monsters/raccoon/idle/0.png deleted file mode 100644 index cf0fb7f..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/idle/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/idle/1.png b/PyGame/assets/graphics/monsters/raccoon/idle/1.png deleted file mode 100644 index cf0fb7f..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/idle/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/idle/2.png b/PyGame/assets/graphics/monsters/raccoon/idle/2.png deleted file mode 100644 index 8d16e08..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/idle/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/idle/3.png b/PyGame/assets/graphics/monsters/raccoon/idle/3.png deleted file mode 100644 index dc57a96..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/idle/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/idle/4.png b/PyGame/assets/graphics/monsters/raccoon/idle/4.png deleted file mode 100644 index fb12e6c..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/idle/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/idle/5.png b/PyGame/assets/graphics/monsters/raccoon/idle/5.png deleted file mode 100644 index c0ede56..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/idle/5.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/move/0.png b/PyGame/assets/graphics/monsters/raccoon/move/0.png deleted file mode 100644 index a60b9d0..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/move/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/move/1.png b/PyGame/assets/graphics/monsters/raccoon/move/1.png deleted file mode 100644 index 34410ca..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/move/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/move/2.png b/PyGame/assets/graphics/monsters/raccoon/move/2.png deleted file mode 100644 index c299286..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/move/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/move/3.png b/PyGame/assets/graphics/monsters/raccoon/move/3.png deleted file mode 100644 index 7d9ee77..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/move/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/raccoon/move/4.png b/PyGame/assets/graphics/monsters/raccoon/move/4.png deleted file mode 100644 index 656981c..0000000 Binary files a/PyGame/assets/graphics/monsters/raccoon/move/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/spirit/attack/0.png b/PyGame/assets/graphics/monsters/spirit/attack/0.png deleted file mode 100644 index 0afa8f1..0000000 Binary files a/PyGame/assets/graphics/monsters/spirit/attack/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/spirit/idle/0.png b/PyGame/assets/graphics/monsters/spirit/idle/0.png deleted file mode 100644 index 0aee4b5..0000000 Binary files a/PyGame/assets/graphics/monsters/spirit/idle/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/spirit/idle/1.png b/PyGame/assets/graphics/monsters/spirit/idle/1.png deleted file mode 100644 index efe735c..0000000 Binary files a/PyGame/assets/graphics/monsters/spirit/idle/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/spirit/idle/2.png b/PyGame/assets/graphics/monsters/spirit/idle/2.png deleted file mode 100644 index a46d5e2..0000000 Binary files a/PyGame/assets/graphics/monsters/spirit/idle/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/spirit/idle/3.png b/PyGame/assets/graphics/monsters/spirit/idle/3.png deleted file mode 100644 index 15e5d4c..0000000 Binary files a/PyGame/assets/graphics/monsters/spirit/idle/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/spirit/move/0.png b/PyGame/assets/graphics/monsters/spirit/move/0.png deleted file mode 100644 index 0afa8f1..0000000 Binary files a/PyGame/assets/graphics/monsters/spirit/move/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/spirit/move/1.png b/PyGame/assets/graphics/monsters/spirit/move/1.png deleted file mode 100644 index bf8f85b..0000000 Binary files a/PyGame/assets/graphics/monsters/spirit/move/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/spirit/move/2.png b/PyGame/assets/graphics/monsters/spirit/move/2.png deleted file mode 100644 index 809ebc2..0000000 Binary files a/PyGame/assets/graphics/monsters/spirit/move/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/spirit/move/3.png b/PyGame/assets/graphics/monsters/spirit/move/3.png deleted file mode 100644 index 463875f..0000000 Binary files a/PyGame/assets/graphics/monsters/spirit/move/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/attack/0 - Copy (2).png b/PyGame/assets/graphics/monsters/squid/attack/0 - Copy (2).png deleted file mode 100644 index 644197e..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/attack/0 - Copy (2).png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/attack/0 - Copy (3).png b/PyGame/assets/graphics/monsters/squid/attack/0 - Copy (3).png deleted file mode 100644 index 644197e..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/attack/0 - Copy (3).png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/attack/0 - Copy.png b/PyGame/assets/graphics/monsters/squid/attack/0 - Copy.png deleted file mode 100644 index 644197e..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/attack/0 - Copy.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/attack/0.png b/PyGame/assets/graphics/monsters/squid/attack/0.png deleted file mode 100644 index 644197e..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/attack/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/idle/0.png b/PyGame/assets/graphics/monsters/squid/idle/0.png deleted file mode 100644 index a9beba8..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/idle/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/idle/1.png b/PyGame/assets/graphics/monsters/squid/idle/1.png deleted file mode 100644 index f854919..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/idle/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/idle/2.png b/PyGame/assets/graphics/monsters/squid/idle/2.png deleted file mode 100644 index a9beba8..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/idle/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/idle/3.png b/PyGame/assets/graphics/monsters/squid/idle/3.png deleted file mode 100644 index 9c588e1..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/idle/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/idle/4.png b/PyGame/assets/graphics/monsters/squid/idle/4.png deleted file mode 100644 index 9c588e1..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/idle/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/move/0.png b/PyGame/assets/graphics/monsters/squid/move/0.png deleted file mode 100644 index a9beba8..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/move/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/move/1.png b/PyGame/assets/graphics/monsters/squid/move/1.png deleted file mode 100644 index f854919..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/move/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/move/2.png b/PyGame/assets/graphics/monsters/squid/move/2.png deleted file mode 100644 index 9c588e1..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/move/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/monsters/squid/move/3.png b/PyGame/assets/graphics/monsters/squid/move/3.png deleted file mode 100644 index 9c588e1..0000000 Binary files a/PyGame/assets/graphics/monsters/squid/move/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/0.png b/PyGame/assets/graphics/objects/0.png deleted file mode 100644 index 05fc485..0000000 Binary files a/PyGame/assets/graphics/objects/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/01.png b/PyGame/assets/graphics/objects/01.png deleted file mode 100644 index 3fa3af9..0000000 Binary files a/PyGame/assets/graphics/objects/01.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/02.png b/PyGame/assets/graphics/objects/02.png deleted file mode 100644 index c91ceec..0000000 Binary files a/PyGame/assets/graphics/objects/02.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/03.png b/PyGame/assets/graphics/objects/03.png deleted file mode 100644 index 186ff45..0000000 Binary files a/PyGame/assets/graphics/objects/03.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/04.png b/PyGame/assets/graphics/objects/04.png deleted file mode 100644 index f3a3e7a..0000000 Binary files a/PyGame/assets/graphics/objects/04.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/05.png b/PyGame/assets/graphics/objects/05.png deleted file mode 100644 index eab8994..0000000 Binary files a/PyGame/assets/graphics/objects/05.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/06.png b/PyGame/assets/graphics/objects/06.png deleted file mode 100644 index a7859b7..0000000 Binary files a/PyGame/assets/graphics/objects/06.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/07.png b/PyGame/assets/graphics/objects/07.png deleted file mode 100644 index a436b83..0000000 Binary files a/PyGame/assets/graphics/objects/07.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/08.png b/PyGame/assets/graphics/objects/08.png deleted file mode 100644 index 7fde04e..0000000 Binary files a/PyGame/assets/graphics/objects/08.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/09.png b/PyGame/assets/graphics/objects/09.png deleted file mode 100644 index fbd0ebb..0000000 Binary files a/PyGame/assets/graphics/objects/09.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/10.png b/PyGame/assets/graphics/objects/10.png deleted file mode 100644 index 067a503..0000000 Binary files a/PyGame/assets/graphics/objects/10.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/11.png b/PyGame/assets/graphics/objects/11.png deleted file mode 100644 index 37edc1e..0000000 Binary files a/PyGame/assets/graphics/objects/11.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/12.png b/PyGame/assets/graphics/objects/12.png deleted file mode 100644 index d1967c2..0000000 Binary files a/PyGame/assets/graphics/objects/12.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/13.png b/PyGame/assets/graphics/objects/13.png deleted file mode 100644 index f01d839..0000000 Binary files a/PyGame/assets/graphics/objects/13.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/14.png b/PyGame/assets/graphics/objects/14.png deleted file mode 100644 index 6a7b4bc..0000000 Binary files a/PyGame/assets/graphics/objects/14.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/15.png b/PyGame/assets/graphics/objects/15.png deleted file mode 100644 index 783c417..0000000 Binary files a/PyGame/assets/graphics/objects/15.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/16.png b/PyGame/assets/graphics/objects/16.png deleted file mode 100644 index 69b3119..0000000 Binary files a/PyGame/assets/graphics/objects/16.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/17.png b/PyGame/assets/graphics/objects/17.png deleted file mode 100644 index 23cfa85..0000000 Binary files a/PyGame/assets/graphics/objects/17.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/18.png b/PyGame/assets/graphics/objects/18.png deleted file mode 100644 index 8497695..0000000 Binary files a/PyGame/assets/graphics/objects/18.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/19.png b/PyGame/assets/graphics/objects/19.png deleted file mode 100644 index 425d16f..0000000 Binary files a/PyGame/assets/graphics/objects/19.png and /dev/null differ diff --git a/PyGame/assets/graphics/objects/20.png b/PyGame/assets/graphics/objects/20.png deleted file mode 100644 index 7028a89..0000000 Binary files a/PyGame/assets/graphics/objects/20.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/aura/0.png b/PyGame/assets/graphics/particles/aura/0.png deleted file mode 100644 index ca3080c..0000000 Binary files a/PyGame/assets/graphics/particles/aura/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/aura/1.png b/PyGame/assets/graphics/particles/aura/1.png deleted file mode 100644 index 587df6e..0000000 Binary files a/PyGame/assets/graphics/particles/aura/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/aura/2.png b/PyGame/assets/graphics/particles/aura/2.png deleted file mode 100644 index 345b25a..0000000 Binary files a/PyGame/assets/graphics/particles/aura/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/aura/3.png b/PyGame/assets/graphics/particles/aura/3.png deleted file mode 100644 index f5aa4c5..0000000 Binary files a/PyGame/assets/graphics/particles/aura/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/bamboo/0.png b/PyGame/assets/graphics/particles/bamboo/0.png deleted file mode 100644 index a28b25a..0000000 Binary files a/PyGame/assets/graphics/particles/bamboo/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/bamboo/1.png b/PyGame/assets/graphics/particles/bamboo/1.png deleted file mode 100644 index 234355a..0000000 Binary files a/PyGame/assets/graphics/particles/bamboo/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/claw/0.png b/PyGame/assets/graphics/particles/claw/0.png deleted file mode 100644 index b9af05a..0000000 Binary files a/PyGame/assets/graphics/particles/claw/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/claw/1.png b/PyGame/assets/graphics/particles/claw/1.png deleted file mode 100644 index 60ab800..0000000 Binary files a/PyGame/assets/graphics/particles/claw/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/claw/2.png b/PyGame/assets/graphics/particles/claw/2.png deleted file mode 100644 index e3c239b..0000000 Binary files a/PyGame/assets/graphics/particles/claw/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/claw/3.png b/PyGame/assets/graphics/particles/claw/3.png deleted file mode 100644 index 2a579b7..0000000 Binary files a/PyGame/assets/graphics/particles/claw/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/fire.png b/PyGame/assets/graphics/particles/flame/fire.png deleted file mode 100644 index 2fb9ffc..0000000 Binary files a/PyGame/assets/graphics/particles/flame/fire.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/0.png b/PyGame/assets/graphics/particles/flame/frames/0.png deleted file mode 100644 index fe33ae5..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/01.png b/PyGame/assets/graphics/particles/flame/frames/01.png deleted file mode 100644 index 734a74f..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/01.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/02.png b/PyGame/assets/graphics/particles/flame/frames/02.png deleted file mode 100644 index 63536a7..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/02.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/03.png b/PyGame/assets/graphics/particles/flame/frames/03.png deleted file mode 100644 index 49c4995..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/03.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/04.png b/PyGame/assets/graphics/particles/flame/frames/04.png deleted file mode 100644 index 77e0474..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/04.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/05.png b/PyGame/assets/graphics/particles/flame/frames/05.png deleted file mode 100644 index 04691a5..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/05.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/06.png b/PyGame/assets/graphics/particles/flame/frames/06.png deleted file mode 100644 index 4738aa7..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/06.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/07.png b/PyGame/assets/graphics/particles/flame/frames/07.png deleted file mode 100644 index 1faa1d3..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/07.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/08.png b/PyGame/assets/graphics/particles/flame/frames/08.png deleted file mode 100644 index 44b7e28..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/08.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/09.png b/PyGame/assets/graphics/particles/flame/frames/09.png deleted file mode 100644 index cd35c03..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/09.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/10.png b/PyGame/assets/graphics/particles/flame/frames/10.png deleted file mode 100644 index 7164544..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/10.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/flame/frames/11.png b/PyGame/assets/graphics/particles/flame/frames/11.png deleted file mode 100644 index 5555377..0000000 Binary files a/PyGame/assets/graphics/particles/flame/frames/11.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/heal/frames/0.png b/PyGame/assets/graphics/particles/heal/frames/0.png deleted file mode 100644 index cd93684..0000000 Binary files a/PyGame/assets/graphics/particles/heal/frames/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/heal/frames/1.png b/PyGame/assets/graphics/particles/heal/frames/1.png deleted file mode 100644 index 83b4cf1..0000000 Binary files a/PyGame/assets/graphics/particles/heal/frames/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/heal/frames/2.png b/PyGame/assets/graphics/particles/heal/frames/2.png deleted file mode 100644 index de0b9bd..0000000 Binary files a/PyGame/assets/graphics/particles/heal/frames/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/heal/frames/3.png b/PyGame/assets/graphics/particles/heal/frames/3.png deleted file mode 100644 index d5ab576..0000000 Binary files a/PyGame/assets/graphics/particles/heal/frames/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/heal/frames/4.png b/PyGame/assets/graphics/particles/heal/frames/4.png deleted file mode 100644 index e26afd3..0000000 Binary files a/PyGame/assets/graphics/particles/heal/frames/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/heal/heal.png b/PyGame/assets/graphics/particles/heal/heal.png deleted file mode 100644 index ad7de97..0000000 Binary files a/PyGame/assets/graphics/particles/heal/heal.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00000.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00000.png deleted file mode 100644 index b3d34ea..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00000.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00001.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00001.png deleted file mode 100644 index 22fce58..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00001.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00002.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00002.png deleted file mode 100644 index f8d2b65..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00002.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00003.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00003.png deleted file mode 100644 index e3e59b6..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00003.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00004.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00004.png deleted file mode 100644 index a703f36..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00004.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00005.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00005.png deleted file mode 100644 index 39e159a..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00005.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00006.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00006.png deleted file mode 100644 index a83b3d0..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00006.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00007.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00007.png deleted file mode 100644 index ed3fca8..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00007.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00008.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00008.png deleted file mode 100644 index f6bf4c9..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00008.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00009.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00009.png deleted file mode 100644 index 1e27176..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00009.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00010.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00010.png deleted file mode 100644 index 4be9658..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00010.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf1/leaf1_00011.png b/PyGame/assets/graphics/particles/leaf1/leaf1_00011.png deleted file mode 100644 index 57f0d06..0000000 Binary files a/PyGame/assets/graphics/particles/leaf1/leaf1_00011.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00000.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00000.png deleted file mode 100644 index bd43308..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00000.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00001.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00001.png deleted file mode 100644 index 3013b91..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00001.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00002.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00002.png deleted file mode 100644 index 30300af..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00002.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00003.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00003.png deleted file mode 100644 index 8f0b661..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00003.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00004.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00004.png deleted file mode 100644 index 8248fba..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00004.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00005.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00005.png deleted file mode 100644 index ecf4ffa..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00005.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00006.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00006.png deleted file mode 100644 index ece22b8..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00006.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00007.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00007.png deleted file mode 100644 index 1f1f7ee..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00007.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00008.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00008.png deleted file mode 100644 index 33f28bd..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00008.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00009.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00009.png deleted file mode 100644 index 6d6ff48..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00009.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00010.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00010.png deleted file mode 100644 index d1a770e..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00010.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00011.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00011.png deleted file mode 100644 index 0435cea..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00011.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf2/leaf1_00012.png b/PyGame/assets/graphics/particles/leaf2/leaf1_00012.png deleted file mode 100644 index 3848e8d..0000000 Binary files a/PyGame/assets/graphics/particles/leaf2/leaf1_00012.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf3/leaf1_00000.png b/PyGame/assets/graphics/particles/leaf3/leaf1_00000.png deleted file mode 100644 index c31c69f..0000000 Binary files a/PyGame/assets/graphics/particles/leaf3/leaf1_00000.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf3/leaf1_00001.png b/PyGame/assets/graphics/particles/leaf3/leaf1_00001.png deleted file mode 100644 index ad36fe5..0000000 Binary files a/PyGame/assets/graphics/particles/leaf3/leaf1_00001.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf3/leaf1_00002.png b/PyGame/assets/graphics/particles/leaf3/leaf1_00002.png deleted file mode 100644 index 8338ffd..0000000 Binary files a/PyGame/assets/graphics/particles/leaf3/leaf1_00002.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf3/leaf1_00003.png b/PyGame/assets/graphics/particles/leaf3/leaf1_00003.png deleted file mode 100644 index 444a0e1..0000000 Binary files a/PyGame/assets/graphics/particles/leaf3/leaf1_00003.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf3/leaf1_00004.png b/PyGame/assets/graphics/particles/leaf3/leaf1_00004.png deleted file mode 100644 index 4f62188..0000000 Binary files a/PyGame/assets/graphics/particles/leaf3/leaf1_00004.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf3/leaf1_00005.png b/PyGame/assets/graphics/particles/leaf3/leaf1_00005.png deleted file mode 100644 index 99dc366..0000000 Binary files a/PyGame/assets/graphics/particles/leaf3/leaf1_00005.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf3/leaf1_00006.png b/PyGame/assets/graphics/particles/leaf3/leaf1_00006.png deleted file mode 100644 index 50c0d9a..0000000 Binary files a/PyGame/assets/graphics/particles/leaf3/leaf1_00006.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf3/leaf1_00007.png b/PyGame/assets/graphics/particles/leaf3/leaf1_00007.png deleted file mode 100644 index d7a7a37..0000000 Binary files a/PyGame/assets/graphics/particles/leaf3/leaf1_00007.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf3/leaf1_00008.png b/PyGame/assets/graphics/particles/leaf3/leaf1_00008.png deleted file mode 100644 index 8df60d4..0000000 Binary files a/PyGame/assets/graphics/particles/leaf3/leaf1_00008.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf3/leaf1_00009.png b/PyGame/assets/graphics/particles/leaf3/leaf1_00009.png deleted file mode 100644 index d14ee99..0000000 Binary files a/PyGame/assets/graphics/particles/leaf3/leaf1_00009.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00000.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00000.png deleted file mode 100644 index a6309fe..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00000.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00001.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00001.png deleted file mode 100644 index 3d31420..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00001.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00002.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00002.png deleted file mode 100644 index cfcc565..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00002.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00003.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00003.png deleted file mode 100644 index af077e3..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00003.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00004.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00004.png deleted file mode 100644 index 7b0be93..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00004.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00005.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00005.png deleted file mode 100644 index 7b5ac2a..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00005.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00006.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00006.png deleted file mode 100644 index 8229334..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00006.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00007.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00007.png deleted file mode 100644 index 1915fab..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00007.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00008.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00008.png deleted file mode 100644 index 157a04a..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00008.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00009.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00009.png deleted file mode 100644 index 27fb1fd..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00009.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf4/leaf1_00010.png b/PyGame/assets/graphics/particles/leaf4/leaf1_00010.png deleted file mode 100644 index 5030b8c..0000000 Binary files a/PyGame/assets/graphics/particles/leaf4/leaf1_00010.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf5/leaf1_00000.png b/PyGame/assets/graphics/particles/leaf5/leaf1_00000.png deleted file mode 100644 index b0e81b0..0000000 Binary files a/PyGame/assets/graphics/particles/leaf5/leaf1_00000.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf5/leaf1_00001.png b/PyGame/assets/graphics/particles/leaf5/leaf1_00001.png deleted file mode 100644 index b7828b6..0000000 Binary files a/PyGame/assets/graphics/particles/leaf5/leaf1_00001.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf5/leaf1_00002.png b/PyGame/assets/graphics/particles/leaf5/leaf1_00002.png deleted file mode 100644 index ccc2714..0000000 Binary files a/PyGame/assets/graphics/particles/leaf5/leaf1_00002.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf5/leaf1_00003.png b/PyGame/assets/graphics/particles/leaf5/leaf1_00003.png deleted file mode 100644 index f1fd9b1..0000000 Binary files a/PyGame/assets/graphics/particles/leaf5/leaf1_00003.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf5/leaf1_00004.png b/PyGame/assets/graphics/particles/leaf5/leaf1_00004.png deleted file mode 100644 index de90457..0000000 Binary files a/PyGame/assets/graphics/particles/leaf5/leaf1_00004.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf5/leaf1_00005.png b/PyGame/assets/graphics/particles/leaf5/leaf1_00005.png deleted file mode 100644 index 661a16a..0000000 Binary files a/PyGame/assets/graphics/particles/leaf5/leaf1_00005.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf5/leaf1_00006.png b/PyGame/assets/graphics/particles/leaf5/leaf1_00006.png deleted file mode 100644 index 996ed74..0000000 Binary files a/PyGame/assets/graphics/particles/leaf5/leaf1_00006.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf5/leaf1_00007.png b/PyGame/assets/graphics/particles/leaf5/leaf1_00007.png deleted file mode 100644 index bc0ab50..0000000 Binary files a/PyGame/assets/graphics/particles/leaf5/leaf1_00007.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf5/leaf1_00008.png b/PyGame/assets/graphics/particles/leaf5/leaf1_00008.png deleted file mode 100644 index 9de760e..0000000 Binary files a/PyGame/assets/graphics/particles/leaf5/leaf1_00008.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf5/leaf1_00009.png b/PyGame/assets/graphics/particles/leaf5/leaf1_00009.png deleted file mode 100644 index ec73497..0000000 Binary files a/PyGame/assets/graphics/particles/leaf5/leaf1_00009.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00000.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00000.png deleted file mode 100644 index 4969977..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00000.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00001.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00001.png deleted file mode 100644 index 4212765..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00001.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00002.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00002.png deleted file mode 100644 index 7237076..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00002.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00003.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00003.png deleted file mode 100644 index a03d0fe..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00003.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00004.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00004.png deleted file mode 100644 index e585fb4..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00004.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00005.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00005.png deleted file mode 100644 index 13d8d55..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00005.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00006.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00006.png deleted file mode 100644 index 8b153dc..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00006.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00007.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00007.png deleted file mode 100644 index aab3b60..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00007.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00008.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00008.png deleted file mode 100644 index 9d32aa9..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00008.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00009.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00009.png deleted file mode 100644 index 1f87666..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00009.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00010.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00010.png deleted file mode 100644 index c54c793..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00010.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf6/leaf1_00011.png b/PyGame/assets/graphics/particles/leaf6/leaf1_00011.png deleted file mode 100644 index 3659600..0000000 Binary files a/PyGame/assets/graphics/particles/leaf6/leaf1_00011.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf_attack/0.png b/PyGame/assets/graphics/particles/leaf_attack/0.png deleted file mode 100644 index a9dc64d..0000000 Binary files a/PyGame/assets/graphics/particles/leaf_attack/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf_attack/1.png b/PyGame/assets/graphics/particles/leaf_attack/1.png deleted file mode 100644 index 2cfe1a5..0000000 Binary files a/PyGame/assets/graphics/particles/leaf_attack/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf_attack/2.png b/PyGame/assets/graphics/particles/leaf_attack/2.png deleted file mode 100644 index 19eabbd..0000000 Binary files a/PyGame/assets/graphics/particles/leaf_attack/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf_attack/3.png b/PyGame/assets/graphics/particles/leaf_attack/3.png deleted file mode 100644 index b7c453f..0000000 Binary files a/PyGame/assets/graphics/particles/leaf_attack/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf_attack/4.png b/PyGame/assets/graphics/particles/leaf_attack/4.png deleted file mode 100644 index d26d38e..0000000 Binary files a/PyGame/assets/graphics/particles/leaf_attack/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf_attack/5.png b/PyGame/assets/graphics/particles/leaf_attack/5.png deleted file mode 100644 index 73c1f4f..0000000 Binary files a/PyGame/assets/graphics/particles/leaf_attack/5.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/leaf_attack/6.png b/PyGame/assets/graphics/particles/leaf_attack/6.png deleted file mode 100644 index d68a09d..0000000 Binary files a/PyGame/assets/graphics/particles/leaf_attack/6.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/nova/0.png b/PyGame/assets/graphics/particles/nova/0.png deleted file mode 100644 index fdcc423..0000000 Binary files a/PyGame/assets/graphics/particles/nova/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/nova/1.png b/PyGame/assets/graphics/particles/nova/1.png deleted file mode 100644 index 320b930..0000000 Binary files a/PyGame/assets/graphics/particles/nova/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/nova/2.png b/PyGame/assets/graphics/particles/nova/2.png deleted file mode 100644 index 91766d8..0000000 Binary files a/PyGame/assets/graphics/particles/nova/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/nova/3.png b/PyGame/assets/graphics/particles/nova/3.png deleted file mode 100644 index 98371b1..0000000 Binary files a/PyGame/assets/graphics/particles/nova/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/nova/4.png b/PyGame/assets/graphics/particles/nova/4.png deleted file mode 100644 index 26924ab..0000000 Binary files a/PyGame/assets/graphics/particles/nova/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/nova/5.png b/PyGame/assets/graphics/particles/nova/5.png deleted file mode 100644 index f6aae60..0000000 Binary files a/PyGame/assets/graphics/particles/nova/5.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/raccoon/0.png b/PyGame/assets/graphics/particles/raccoon/0.png deleted file mode 100644 index cc1a9eb..0000000 Binary files a/PyGame/assets/graphics/particles/raccoon/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/raccoon/1.png b/PyGame/assets/graphics/particles/raccoon/1.png deleted file mode 100644 index 7385737..0000000 Binary files a/PyGame/assets/graphics/particles/raccoon/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/raccoon/2.png b/PyGame/assets/graphics/particles/raccoon/2.png deleted file mode 100644 index 8b384be..0000000 Binary files a/PyGame/assets/graphics/particles/raccoon/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/raccoon/3.png b/PyGame/assets/graphics/particles/raccoon/3.png deleted file mode 100644 index d6feaf3..0000000 Binary files a/PyGame/assets/graphics/particles/raccoon/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/raccoon/4.png b/PyGame/assets/graphics/particles/raccoon/4.png deleted file mode 100644 index e550c15..0000000 Binary files a/PyGame/assets/graphics/particles/raccoon/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/raccoon/5.png b/PyGame/assets/graphics/particles/raccoon/5.png deleted file mode 100644 index 13797ad..0000000 Binary files a/PyGame/assets/graphics/particles/raccoon/5.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/slash/0.png b/PyGame/assets/graphics/particles/slash/0.png deleted file mode 100644 index 75b73d5..0000000 Binary files a/PyGame/assets/graphics/particles/slash/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/slash/1.png b/PyGame/assets/graphics/particles/slash/1.png deleted file mode 100644 index 011e4a9..0000000 Binary files a/PyGame/assets/graphics/particles/slash/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/slash/2.png b/PyGame/assets/graphics/particles/slash/2.png deleted file mode 100644 index 922e970..0000000 Binary files a/PyGame/assets/graphics/particles/slash/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/slash/3.png b/PyGame/assets/graphics/particles/slash/3.png deleted file mode 100644 index 58821d9..0000000 Binary files a/PyGame/assets/graphics/particles/slash/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke/0.png b/PyGame/assets/graphics/particles/smoke/0.png deleted file mode 100644 index 73e9a59..0000000 Binary files a/PyGame/assets/graphics/particles/smoke/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke/1.png b/PyGame/assets/graphics/particles/smoke/1.png deleted file mode 100644 index f21e130..0000000 Binary files a/PyGame/assets/graphics/particles/smoke/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke/2.png b/PyGame/assets/graphics/particles/smoke/2.png deleted file mode 100644 index 8e2ecb9..0000000 Binary files a/PyGame/assets/graphics/particles/smoke/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke/3.png b/PyGame/assets/graphics/particles/smoke/3.png deleted file mode 100644 index 244b1a1..0000000 Binary files a/PyGame/assets/graphics/particles/smoke/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke/4.png b/PyGame/assets/graphics/particles/smoke/4.png deleted file mode 100644 index e60a29b..0000000 Binary files a/PyGame/assets/graphics/particles/smoke/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke/5.png b/PyGame/assets/graphics/particles/smoke/5.png deleted file mode 100644 index 6475ce3..0000000 Binary files a/PyGame/assets/graphics/particles/smoke/5.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke2/0.png b/PyGame/assets/graphics/particles/smoke2/0.png deleted file mode 100644 index c3267c0..0000000 Binary files a/PyGame/assets/graphics/particles/smoke2/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke2/1.png b/PyGame/assets/graphics/particles/smoke2/1.png deleted file mode 100644 index f392845..0000000 Binary files a/PyGame/assets/graphics/particles/smoke2/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke2/2.png b/PyGame/assets/graphics/particles/smoke2/2.png deleted file mode 100644 index d611b6f..0000000 Binary files a/PyGame/assets/graphics/particles/smoke2/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke2/3.png b/PyGame/assets/graphics/particles/smoke2/3.png deleted file mode 100644 index c817380..0000000 Binary files a/PyGame/assets/graphics/particles/smoke2/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke2/4.png b/PyGame/assets/graphics/particles/smoke2/4.png deleted file mode 100644 index abd4af8..0000000 Binary files a/PyGame/assets/graphics/particles/smoke2/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke2/5.png b/PyGame/assets/graphics/particles/smoke2/5.png deleted file mode 100644 index c89158a..0000000 Binary files a/PyGame/assets/graphics/particles/smoke2/5.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke_orange/0.png b/PyGame/assets/graphics/particles/smoke_orange/0.png deleted file mode 100644 index e4baa13..0000000 Binary files a/PyGame/assets/graphics/particles/smoke_orange/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke_orange/1.png b/PyGame/assets/graphics/particles/smoke_orange/1.png deleted file mode 100644 index 7cce227..0000000 Binary files a/PyGame/assets/graphics/particles/smoke_orange/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke_orange/2.png b/PyGame/assets/graphics/particles/smoke_orange/2.png deleted file mode 100644 index 4425e33..0000000 Binary files a/PyGame/assets/graphics/particles/smoke_orange/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke_orange/3.png b/PyGame/assets/graphics/particles/smoke_orange/3.png deleted file mode 100644 index a817e8d..0000000 Binary files a/PyGame/assets/graphics/particles/smoke_orange/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke_orange/4.png b/PyGame/assets/graphics/particles/smoke_orange/4.png deleted file mode 100644 index b6ff7a5..0000000 Binary files a/PyGame/assets/graphics/particles/smoke_orange/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/smoke_orange/5.png b/PyGame/assets/graphics/particles/smoke_orange/5.png deleted file mode 100644 index 3dfab88..0000000 Binary files a/PyGame/assets/graphics/particles/smoke_orange/5.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/sparkle/0.png b/PyGame/assets/graphics/particles/sparkle/0.png deleted file mode 100644 index 2bc0bf2..0000000 Binary files a/PyGame/assets/graphics/particles/sparkle/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/sparkle/1.png b/PyGame/assets/graphics/particles/sparkle/1.png deleted file mode 100644 index 5b3a810..0000000 Binary files a/PyGame/assets/graphics/particles/sparkle/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/sparkle/2.png b/PyGame/assets/graphics/particles/sparkle/2.png deleted file mode 100644 index d13930a..0000000 Binary files a/PyGame/assets/graphics/particles/sparkle/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/sparkle/3.png b/PyGame/assets/graphics/particles/sparkle/3.png deleted file mode 100644 index 8384774..0000000 Binary files a/PyGame/assets/graphics/particles/sparkle/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/sparkle/4.png b/PyGame/assets/graphics/particles/sparkle/4.png deleted file mode 100644 index b07148f..0000000 Binary files a/PyGame/assets/graphics/particles/sparkle/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/thunder/0.png b/PyGame/assets/graphics/particles/thunder/0.png deleted file mode 100644 index 781f52b..0000000 Binary files a/PyGame/assets/graphics/particles/thunder/0.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/thunder/1.png b/PyGame/assets/graphics/particles/thunder/1.png deleted file mode 100644 index ac1fa39..0000000 Binary files a/PyGame/assets/graphics/particles/thunder/1.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/thunder/2.png b/PyGame/assets/graphics/particles/thunder/2.png deleted file mode 100644 index c4bb34b..0000000 Binary files a/PyGame/assets/graphics/particles/thunder/2.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/thunder/3.png b/PyGame/assets/graphics/particles/thunder/3.png deleted file mode 100644 index 91c92a3..0000000 Binary files a/PyGame/assets/graphics/particles/thunder/3.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/thunder/4.png b/PyGame/assets/graphics/particles/thunder/4.png deleted file mode 100644 index 0d51893..0000000 Binary files a/PyGame/assets/graphics/particles/thunder/4.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/thunder/5.png b/PyGame/assets/graphics/particles/thunder/5.png deleted file mode 100644 index 55d2698..0000000 Binary files a/PyGame/assets/graphics/particles/thunder/5.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/thunder/6.png b/PyGame/assets/graphics/particles/thunder/6.png deleted file mode 100644 index 4d79092..0000000 Binary files a/PyGame/assets/graphics/particles/thunder/6.png and /dev/null differ diff --git a/PyGame/assets/graphics/particles/thunder/7.png b/PyGame/assets/graphics/particles/thunder/7.png deleted file mode 100644 index 0b8b41c..0000000 Binary files a/PyGame/assets/graphics/particles/thunder/7.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/down/down_0.png b/PyGame/assets/graphics/player/down/down_0.png deleted file mode 100644 index dbbe852..0000000 Binary files a/PyGame/assets/graphics/player/down/down_0.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/down/down_1.png b/PyGame/assets/graphics/player/down/down_1.png deleted file mode 100644 index 8545561..0000000 Binary files a/PyGame/assets/graphics/player/down/down_1.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/down/down_2.png b/PyGame/assets/graphics/player/down/down_2.png deleted file mode 100644 index dbbe852..0000000 Binary files a/PyGame/assets/graphics/player/down/down_2.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/down/down_3.png b/PyGame/assets/graphics/player/down/down_3.png deleted file mode 100644 index eb692a2..0000000 Binary files a/PyGame/assets/graphics/player/down/down_3.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/down_attack/attack_down.png b/PyGame/assets/graphics/player/down_attack/attack_down.png deleted file mode 100644 index 0ecc144..0000000 Binary files a/PyGame/assets/graphics/player/down_attack/attack_down.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/down_idle/idle_down.png b/PyGame/assets/graphics/player/down_idle/idle_down.png deleted file mode 100644 index dbbe852..0000000 Binary files a/PyGame/assets/graphics/player/down_idle/idle_down.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/left/left_0.png b/PyGame/assets/graphics/player/left/left_0.png deleted file mode 100644 index dafb10b..0000000 Binary files a/PyGame/assets/graphics/player/left/left_0.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/left/left_1.png b/PyGame/assets/graphics/player/left/left_1.png deleted file mode 100644 index b84ec9c..0000000 Binary files a/PyGame/assets/graphics/player/left/left_1.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/left/left_2.png b/PyGame/assets/graphics/player/left/left_2.png deleted file mode 100644 index 0e22f2e..0000000 Binary files a/PyGame/assets/graphics/player/left/left_2.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/left/left_3.png b/PyGame/assets/graphics/player/left/left_3.png deleted file mode 100644 index b771463..0000000 Binary files a/PyGame/assets/graphics/player/left/left_3.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/left_attack/attack_left.png b/PyGame/assets/graphics/player/left_attack/attack_left.png deleted file mode 100644 index 0b6c05a..0000000 Binary files a/PyGame/assets/graphics/player/left_attack/attack_left.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/left_idle/idle_left.png b/PyGame/assets/graphics/player/left_idle/idle_left.png deleted file mode 100644 index dafb10b..0000000 Binary files a/PyGame/assets/graphics/player/left_idle/idle_left.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/right/right_0.png b/PyGame/assets/graphics/player/right/right_0.png deleted file mode 100644 index fe82409..0000000 Binary files a/PyGame/assets/graphics/player/right/right_0.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/right/right_1.png b/PyGame/assets/graphics/player/right/right_1.png deleted file mode 100644 index 983fbc9..0000000 Binary files a/PyGame/assets/graphics/player/right/right_1.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/right/right_2.png b/PyGame/assets/graphics/player/right/right_2.png deleted file mode 100644 index 8fcb491..0000000 Binary files a/PyGame/assets/graphics/player/right/right_2.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/right/right_3.png b/PyGame/assets/graphics/player/right/right_3.png deleted file mode 100644 index 0a7a454..0000000 Binary files a/PyGame/assets/graphics/player/right/right_3.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/right_attack/attack_right.png b/PyGame/assets/graphics/player/right_attack/attack_right.png deleted file mode 100644 index 9fa1657..0000000 Binary files a/PyGame/assets/graphics/player/right_attack/attack_right.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/right_idle/idle_right.png b/PyGame/assets/graphics/player/right_idle/idle_right.png deleted file mode 100644 index fe82409..0000000 Binary files a/PyGame/assets/graphics/player/right_idle/idle_right.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/up/up_0.png b/PyGame/assets/graphics/player/up/up_0.png deleted file mode 100644 index d0dae1c..0000000 Binary files a/PyGame/assets/graphics/player/up/up_0.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/up/up_1.png b/PyGame/assets/graphics/player/up/up_1.png deleted file mode 100644 index 2b0de88..0000000 Binary files a/PyGame/assets/graphics/player/up/up_1.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/up/up_2.png b/PyGame/assets/graphics/player/up/up_2.png deleted file mode 100644 index d0dae1c..0000000 Binary files a/PyGame/assets/graphics/player/up/up_2.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/up/up_3.png b/PyGame/assets/graphics/player/up/up_3.png deleted file mode 100644 index b6ebf56..0000000 Binary files a/PyGame/assets/graphics/player/up/up_3.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/up_attack/attack_up.png b/PyGame/assets/graphics/player/up_attack/attack_up.png deleted file mode 100644 index d165d7c..0000000 Binary files a/PyGame/assets/graphics/player/up_attack/attack_up.png and /dev/null differ diff --git a/PyGame/assets/graphics/player/up_idle/idle_up.png b/PyGame/assets/graphics/player/up_idle/idle_up.png deleted file mode 100644 index d0dae1c..0000000 Binary files a/PyGame/assets/graphics/player/up_idle/idle_up.png and /dev/null differ diff --git a/PyGame/assets/graphics/tilemap/Floor.png b/PyGame/assets/graphics/tilemap/Floor.png deleted file mode 100644 index 2971cdd..0000000 Binary files a/PyGame/assets/graphics/tilemap/Floor.png and /dev/null differ diff --git a/PyGame/assets/graphics/tilemap/details.png b/PyGame/assets/graphics/tilemap/details.png deleted file mode 100644 index 8e43aaa..0000000 Binary files a/PyGame/assets/graphics/tilemap/details.png and /dev/null differ diff --git a/PyGame/assets/graphics/tilemap/ground.png b/PyGame/assets/graphics/tilemap/ground.png deleted file mode 100644 index 548b57f..0000000 Binary files a/PyGame/assets/graphics/tilemap/ground.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/axe/down.png b/PyGame/assets/graphics/weapons/axe/down.png deleted file mode 100644 index 66761cd..0000000 Binary files a/PyGame/assets/graphics/weapons/axe/down.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/axe/full.png b/PyGame/assets/graphics/weapons/axe/full.png deleted file mode 100644 index 99f0318..0000000 Binary files a/PyGame/assets/graphics/weapons/axe/full.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/axe/left.png b/PyGame/assets/graphics/weapons/axe/left.png deleted file mode 100644 index fbd9b02..0000000 Binary files a/PyGame/assets/graphics/weapons/axe/left.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/axe/right.png b/PyGame/assets/graphics/weapons/axe/right.png deleted file mode 100644 index 72c1d42..0000000 Binary files a/PyGame/assets/graphics/weapons/axe/right.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/axe/up.png b/PyGame/assets/graphics/weapons/axe/up.png deleted file mode 100644 index 5f49b89..0000000 Binary files a/PyGame/assets/graphics/weapons/axe/up.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/lance/down.png b/PyGame/assets/graphics/weapons/lance/down.png deleted file mode 100644 index f58aeba..0000000 Binary files a/PyGame/assets/graphics/weapons/lance/down.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/lance/full.png b/PyGame/assets/graphics/weapons/lance/full.png deleted file mode 100644 index 76ce170..0000000 Binary files a/PyGame/assets/graphics/weapons/lance/full.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/lance/left.png b/PyGame/assets/graphics/weapons/lance/left.png deleted file mode 100644 index b961b43..0000000 Binary files a/PyGame/assets/graphics/weapons/lance/left.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/lance/right.png b/PyGame/assets/graphics/weapons/lance/right.png deleted file mode 100644 index af7fd12..0000000 Binary files a/PyGame/assets/graphics/weapons/lance/right.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/lance/up.png b/PyGame/assets/graphics/weapons/lance/up.png deleted file mode 100644 index 96040e5..0000000 Binary files a/PyGame/assets/graphics/weapons/lance/up.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/rapier/down.png b/PyGame/assets/graphics/weapons/rapier/down.png deleted file mode 100644 index dd103a5..0000000 Binary files a/PyGame/assets/graphics/weapons/rapier/down.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/rapier/full.png b/PyGame/assets/graphics/weapons/rapier/full.png deleted file mode 100644 index a5f2835..0000000 Binary files a/PyGame/assets/graphics/weapons/rapier/full.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/rapier/left.png b/PyGame/assets/graphics/weapons/rapier/left.png deleted file mode 100644 index 31f5b8b..0000000 Binary files a/PyGame/assets/graphics/weapons/rapier/left.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/rapier/right.png b/PyGame/assets/graphics/weapons/rapier/right.png deleted file mode 100644 index 30910a2..0000000 Binary files a/PyGame/assets/graphics/weapons/rapier/right.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/rapier/up.png b/PyGame/assets/graphics/weapons/rapier/up.png deleted file mode 100644 index 5839792..0000000 Binary files a/PyGame/assets/graphics/weapons/rapier/up.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/sai/down.png b/PyGame/assets/graphics/weapons/sai/down.png deleted file mode 100644 index bda7e15..0000000 Binary files a/PyGame/assets/graphics/weapons/sai/down.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/sai/full.png b/PyGame/assets/graphics/weapons/sai/full.png deleted file mode 100644 index 6f752d6..0000000 Binary files a/PyGame/assets/graphics/weapons/sai/full.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/sai/left.png b/PyGame/assets/graphics/weapons/sai/left.png deleted file mode 100644 index c9847e2..0000000 Binary files a/PyGame/assets/graphics/weapons/sai/left.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/sai/right.png b/PyGame/assets/graphics/weapons/sai/right.png deleted file mode 100644 index 0631803..0000000 Binary files a/PyGame/assets/graphics/weapons/sai/right.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/sai/up.png b/PyGame/assets/graphics/weapons/sai/up.png deleted file mode 100644 index 366e70b..0000000 Binary files a/PyGame/assets/graphics/weapons/sai/up.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/sword/down.png b/PyGame/assets/graphics/weapons/sword/down.png deleted file mode 100644 index ebcfa93..0000000 Binary files a/PyGame/assets/graphics/weapons/sword/down.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/sword/full.png b/PyGame/assets/graphics/weapons/sword/full.png deleted file mode 100644 index 3b395d8..0000000 Binary files a/PyGame/assets/graphics/weapons/sword/full.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/sword/left.png b/PyGame/assets/graphics/weapons/sword/left.png deleted file mode 100644 index 34abbfa..0000000 Binary files a/PyGame/assets/graphics/weapons/sword/left.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/sword/right.png b/PyGame/assets/graphics/weapons/sword/right.png deleted file mode 100644 index fd96c2c..0000000 Binary files a/PyGame/assets/graphics/weapons/sword/right.png and /dev/null differ diff --git a/PyGame/assets/graphics/weapons/sword/up.png b/PyGame/assets/graphics/weapons/sword/up.png deleted file mode 100644 index 5cac8d4..0000000 Binary files a/PyGame/assets/graphics/weapons/sword/up.png and /dev/null differ diff --git a/PyGame/README.md b/README.md similarity index 100% rename from PyGame/README.md rename to README.md diff --git a/PyGame/__init__.py b/__init__.py similarity index 100% rename from PyGame/__init__.py rename to __init__.py diff --git a/PyGame/args.py b/args.py similarity index 100% rename from PyGame/args.py rename to args.py diff --git a/Godot/assets/graphics/font/joystix.ttf b/assets/font/joystix.ttf similarity index 100% rename from Godot/assets/graphics/font/joystix.ttf rename to assets/font/joystix.ttf diff --git a/Godot/assets/graphics/grass/grass_1.png b/assets/graphics/grass/grass_1.png similarity index 100% rename from Godot/assets/graphics/grass/grass_1.png rename to assets/graphics/grass/grass_1.png diff --git a/Godot/assets/graphics/grass/grass_2.png b/assets/graphics/grass/grass_2.png similarity index 100% rename from Godot/assets/graphics/grass/grass_2.png rename to assets/graphics/grass/grass_2.png diff --git a/Godot/assets/graphics/grass/grass_3.png b/assets/graphics/grass/grass_3.png similarity index 100% rename from Godot/assets/graphics/grass/grass_3.png rename to assets/graphics/grass/grass_3.png diff --git a/PyGame/assets/graphics/icon.png b/assets/graphics/icon.png similarity index 100% rename from PyGame/assets/graphics/icon.png rename to assets/graphics/icon.png diff --git a/Godot/assets/graphics/monsters/bamboo/attack/0.png b/assets/graphics/monsters/bamboo/attack/0.png similarity index 100% rename from Godot/assets/graphics/monsters/bamboo/attack/0.png rename to assets/graphics/monsters/bamboo/attack/0.png diff --git a/Godot/assets/graphics/monsters/bamboo/idle/0.png b/assets/graphics/monsters/bamboo/idle/0.png similarity index 100% rename from Godot/assets/graphics/monsters/bamboo/idle/0.png rename to assets/graphics/monsters/bamboo/idle/0.png diff --git a/Godot/assets/graphics/monsters/bamboo/idle/1.png b/assets/graphics/monsters/bamboo/idle/1.png similarity index 100% rename from Godot/assets/graphics/monsters/bamboo/idle/1.png rename to assets/graphics/monsters/bamboo/idle/1.png diff --git a/Godot/assets/graphics/monsters/bamboo/idle/2.png b/assets/graphics/monsters/bamboo/idle/2.png similarity index 100% rename from Godot/assets/graphics/monsters/bamboo/idle/2.png rename to assets/graphics/monsters/bamboo/idle/2.png diff --git a/Godot/assets/graphics/monsters/bamboo/idle/3.png b/assets/graphics/monsters/bamboo/idle/3.png similarity index 100% rename from Godot/assets/graphics/monsters/bamboo/idle/3.png rename to assets/graphics/monsters/bamboo/idle/3.png diff --git a/Godot/assets/graphics/monsters/bamboo/move/0.png b/assets/graphics/monsters/bamboo/move/0.png similarity index 100% rename from Godot/assets/graphics/monsters/bamboo/move/0.png rename to assets/graphics/monsters/bamboo/move/0.png diff --git a/Godot/assets/graphics/monsters/bamboo/move/1.png b/assets/graphics/monsters/bamboo/move/1.png similarity index 100% rename from Godot/assets/graphics/monsters/bamboo/move/1.png rename to assets/graphics/monsters/bamboo/move/1.png diff --git a/Godot/assets/graphics/monsters/bamboo/move/2.png b/assets/graphics/monsters/bamboo/move/2.png similarity index 100% rename from Godot/assets/graphics/monsters/bamboo/move/2.png rename to assets/graphics/monsters/bamboo/move/2.png diff --git a/Godot/assets/graphics/monsters/bamboo/move/3.png b/assets/graphics/monsters/bamboo/move/3.png similarity index 100% rename from Godot/assets/graphics/monsters/bamboo/move/3.png rename to assets/graphics/monsters/bamboo/move/3.png diff --git a/Godot/assets/graphics/monsters/raccoon/attack/0.png b/assets/graphics/monsters/raccoon/attack/0.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/attack/0.png rename to assets/graphics/monsters/raccoon/attack/0.png diff --git a/Godot/assets/graphics/monsters/raccoon/attack/1.png b/assets/graphics/monsters/raccoon/attack/1.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/attack/1.png rename to assets/graphics/monsters/raccoon/attack/1.png diff --git a/Godot/assets/graphics/monsters/raccoon/attack/2.png b/assets/graphics/monsters/raccoon/attack/2.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/attack/2.png rename to assets/graphics/monsters/raccoon/attack/2.png diff --git a/Godot/assets/graphics/monsters/raccoon/attack/3.png b/assets/graphics/monsters/raccoon/attack/3.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/attack/3.png rename to assets/graphics/monsters/raccoon/attack/3.png diff --git a/Godot/assets/graphics/monsters/raccoon/idle/0.png b/assets/graphics/monsters/raccoon/idle/0.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/idle/0.png rename to assets/graphics/monsters/raccoon/idle/0.png diff --git a/Godot/assets/graphics/monsters/raccoon/idle/1.png b/assets/graphics/monsters/raccoon/idle/1.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/idle/1.png rename to assets/graphics/monsters/raccoon/idle/1.png diff --git a/Godot/assets/graphics/monsters/raccoon/idle/2.png b/assets/graphics/monsters/raccoon/idle/2.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/idle/2.png rename to assets/graphics/monsters/raccoon/idle/2.png diff --git a/Godot/assets/graphics/monsters/raccoon/idle/3.png b/assets/graphics/monsters/raccoon/idle/3.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/idle/3.png rename to assets/graphics/monsters/raccoon/idle/3.png diff --git a/Godot/assets/graphics/monsters/raccoon/idle/4.png b/assets/graphics/monsters/raccoon/idle/4.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/idle/4.png rename to assets/graphics/monsters/raccoon/idle/4.png diff --git a/Godot/assets/graphics/monsters/raccoon/idle/5.png b/assets/graphics/monsters/raccoon/idle/5.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/idle/5.png rename to assets/graphics/monsters/raccoon/idle/5.png diff --git a/Godot/assets/graphics/monsters/raccoon/move/0.png b/assets/graphics/monsters/raccoon/move/0.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/move/0.png rename to assets/graphics/monsters/raccoon/move/0.png diff --git a/Godot/assets/graphics/monsters/raccoon/move/1.png b/assets/graphics/monsters/raccoon/move/1.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/move/1.png rename to assets/graphics/monsters/raccoon/move/1.png diff --git a/Godot/assets/graphics/monsters/raccoon/move/2.png b/assets/graphics/monsters/raccoon/move/2.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/move/2.png rename to assets/graphics/monsters/raccoon/move/2.png diff --git a/Godot/assets/graphics/monsters/raccoon/move/3.png b/assets/graphics/monsters/raccoon/move/3.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/move/3.png rename to assets/graphics/monsters/raccoon/move/3.png diff --git a/Godot/assets/graphics/monsters/raccoon/move/4.png b/assets/graphics/monsters/raccoon/move/4.png similarity index 100% rename from Godot/assets/graphics/monsters/raccoon/move/4.png rename to assets/graphics/monsters/raccoon/move/4.png diff --git a/Godot/assets/graphics/monsters/spirit/attack/0.png b/assets/graphics/monsters/spirit/attack/0.png similarity index 100% rename from Godot/assets/graphics/monsters/spirit/attack/0.png rename to assets/graphics/monsters/spirit/attack/0.png diff --git a/Godot/assets/graphics/monsters/spirit/idle/0.png b/assets/graphics/monsters/spirit/idle/0.png similarity index 100% rename from Godot/assets/graphics/monsters/spirit/idle/0.png rename to assets/graphics/monsters/spirit/idle/0.png diff --git a/Godot/assets/graphics/monsters/spirit/idle/1.png b/assets/graphics/monsters/spirit/idle/1.png similarity index 100% rename from Godot/assets/graphics/monsters/spirit/idle/1.png rename to assets/graphics/monsters/spirit/idle/1.png diff --git a/Godot/assets/graphics/monsters/spirit/idle/2.png b/assets/graphics/monsters/spirit/idle/2.png similarity index 100% rename from Godot/assets/graphics/monsters/spirit/idle/2.png rename to assets/graphics/monsters/spirit/idle/2.png diff --git a/Godot/assets/graphics/monsters/spirit/idle/3.png b/assets/graphics/monsters/spirit/idle/3.png similarity index 100% rename from Godot/assets/graphics/monsters/spirit/idle/3.png rename to assets/graphics/monsters/spirit/idle/3.png diff --git a/Godot/assets/graphics/monsters/spirit/move/0.png b/assets/graphics/monsters/spirit/move/0.png similarity index 100% rename from Godot/assets/graphics/monsters/spirit/move/0.png rename to assets/graphics/monsters/spirit/move/0.png diff --git a/Godot/assets/graphics/monsters/spirit/move/1.png b/assets/graphics/monsters/spirit/move/1.png similarity index 100% rename from Godot/assets/graphics/monsters/spirit/move/1.png rename to assets/graphics/monsters/spirit/move/1.png diff --git a/Godot/assets/graphics/monsters/spirit/move/2.png b/assets/graphics/monsters/spirit/move/2.png similarity index 100% rename from Godot/assets/graphics/monsters/spirit/move/2.png rename to assets/graphics/monsters/spirit/move/2.png diff --git a/Godot/assets/graphics/monsters/spirit/move/3.png b/assets/graphics/monsters/spirit/move/3.png similarity index 100% rename from Godot/assets/graphics/monsters/spirit/move/3.png rename to assets/graphics/monsters/spirit/move/3.png diff --git a/Godot/assets/graphics/monsters/squid/attack/0 - Copy (2).png b/assets/graphics/monsters/squid/attack/0 - Copy (2).png similarity index 100% rename from Godot/assets/graphics/monsters/squid/attack/0 - Copy (2).png rename to assets/graphics/monsters/squid/attack/0 - Copy (2).png diff --git a/Godot/assets/graphics/monsters/squid/attack/0 - Copy (3).png b/assets/graphics/monsters/squid/attack/0 - Copy (3).png similarity index 100% rename from Godot/assets/graphics/monsters/squid/attack/0 - Copy (3).png rename to assets/graphics/monsters/squid/attack/0 - Copy (3).png diff --git a/Godot/assets/graphics/monsters/squid/attack/0 - Copy.png b/assets/graphics/monsters/squid/attack/0 - Copy.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/attack/0 - Copy.png rename to assets/graphics/monsters/squid/attack/0 - Copy.png diff --git a/Godot/assets/graphics/monsters/squid/attack/0.png b/assets/graphics/monsters/squid/attack/0.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/attack/0.png rename to assets/graphics/monsters/squid/attack/0.png diff --git a/Godot/assets/graphics/monsters/squid/idle/0.png b/assets/graphics/monsters/squid/idle/0.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/idle/0.png rename to assets/graphics/monsters/squid/idle/0.png diff --git a/Godot/assets/graphics/monsters/squid/idle/1.png b/assets/graphics/monsters/squid/idle/1.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/idle/1.png rename to assets/graphics/monsters/squid/idle/1.png diff --git a/Godot/assets/graphics/monsters/squid/idle/2.png b/assets/graphics/monsters/squid/idle/2.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/idle/2.png rename to assets/graphics/monsters/squid/idle/2.png diff --git a/Godot/assets/graphics/monsters/squid/idle/3.png b/assets/graphics/monsters/squid/idle/3.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/idle/3.png rename to assets/graphics/monsters/squid/idle/3.png diff --git a/Godot/assets/graphics/monsters/squid/idle/4.png b/assets/graphics/monsters/squid/idle/4.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/idle/4.png rename to assets/graphics/monsters/squid/idle/4.png diff --git a/Godot/assets/graphics/monsters/squid/move/0.png b/assets/graphics/monsters/squid/move/0.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/move/0.png rename to assets/graphics/monsters/squid/move/0.png diff --git a/Godot/assets/graphics/monsters/squid/move/1.png b/assets/graphics/monsters/squid/move/1.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/move/1.png rename to assets/graphics/monsters/squid/move/1.png diff --git a/Godot/assets/graphics/monsters/squid/move/2.png b/assets/graphics/monsters/squid/move/2.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/move/2.png rename to assets/graphics/monsters/squid/move/2.png diff --git a/Godot/assets/graphics/monsters/squid/move/3.png b/assets/graphics/monsters/squid/move/3.png similarity index 100% rename from Godot/assets/graphics/monsters/squid/move/3.png rename to assets/graphics/monsters/squid/move/3.png diff --git a/Godot/assets/graphics/objects/0.png b/assets/graphics/objects/0.png similarity index 100% rename from Godot/assets/graphics/objects/0.png rename to assets/graphics/objects/0.png diff --git a/Godot/assets/graphics/objects/01.png b/assets/graphics/objects/01.png similarity index 100% rename from Godot/assets/graphics/objects/01.png rename to assets/graphics/objects/01.png diff --git a/Godot/assets/graphics/objects/02.png b/assets/graphics/objects/02.png similarity index 100% rename from Godot/assets/graphics/objects/02.png rename to assets/graphics/objects/02.png diff --git a/Godot/assets/graphics/objects/03.png b/assets/graphics/objects/03.png similarity index 100% rename from Godot/assets/graphics/objects/03.png rename to assets/graphics/objects/03.png diff --git a/Godot/assets/graphics/objects/04.png b/assets/graphics/objects/04.png similarity index 100% rename from Godot/assets/graphics/objects/04.png rename to assets/graphics/objects/04.png diff --git a/Godot/assets/graphics/objects/05.png b/assets/graphics/objects/05.png similarity index 100% rename from Godot/assets/graphics/objects/05.png rename to assets/graphics/objects/05.png diff --git a/Godot/assets/graphics/objects/06.png b/assets/graphics/objects/06.png similarity index 100% rename from Godot/assets/graphics/objects/06.png rename to assets/graphics/objects/06.png diff --git a/Godot/assets/graphics/objects/07.png b/assets/graphics/objects/07.png similarity index 100% rename from Godot/assets/graphics/objects/07.png rename to assets/graphics/objects/07.png diff --git a/Godot/assets/graphics/objects/08.png b/assets/graphics/objects/08.png similarity index 100% rename from Godot/assets/graphics/objects/08.png rename to assets/graphics/objects/08.png diff --git a/Godot/assets/graphics/objects/09.png b/assets/graphics/objects/09.png similarity index 100% rename from Godot/assets/graphics/objects/09.png rename to assets/graphics/objects/09.png diff --git a/Godot/assets/graphics/objects/10.png b/assets/graphics/objects/10.png similarity index 100% rename from Godot/assets/graphics/objects/10.png rename to assets/graphics/objects/10.png diff --git a/Godot/assets/graphics/objects/11.png b/assets/graphics/objects/11.png similarity index 100% rename from Godot/assets/graphics/objects/11.png rename to assets/graphics/objects/11.png diff --git a/Godot/assets/graphics/objects/12.png b/assets/graphics/objects/12.png similarity index 100% rename from Godot/assets/graphics/objects/12.png rename to assets/graphics/objects/12.png diff --git a/Godot/assets/graphics/objects/13.png b/assets/graphics/objects/13.png similarity index 100% rename from Godot/assets/graphics/objects/13.png rename to assets/graphics/objects/13.png diff --git a/Godot/assets/graphics/objects/14.png b/assets/graphics/objects/14.png similarity index 100% rename from Godot/assets/graphics/objects/14.png rename to assets/graphics/objects/14.png diff --git a/Godot/assets/graphics/objects/15.png b/assets/graphics/objects/15.png similarity index 100% rename from Godot/assets/graphics/objects/15.png rename to assets/graphics/objects/15.png diff --git a/Godot/assets/graphics/objects/16.png b/assets/graphics/objects/16.png similarity index 100% rename from Godot/assets/graphics/objects/16.png rename to assets/graphics/objects/16.png diff --git a/Godot/assets/graphics/objects/17.png b/assets/graphics/objects/17.png similarity index 100% rename from Godot/assets/graphics/objects/17.png rename to assets/graphics/objects/17.png diff --git a/Godot/assets/graphics/objects/18.png b/assets/graphics/objects/18.png similarity index 100% rename from Godot/assets/graphics/objects/18.png rename to assets/graphics/objects/18.png diff --git a/Godot/assets/graphics/objects/19.png b/assets/graphics/objects/19.png similarity index 100% rename from Godot/assets/graphics/objects/19.png rename to assets/graphics/objects/19.png diff --git a/Godot/assets/graphics/objects/20.png b/assets/graphics/objects/20.png similarity index 100% rename from Godot/assets/graphics/objects/20.png rename to assets/graphics/objects/20.png diff --git a/PyGame/assets/graphics/observer.png b/assets/graphics/observer.png similarity index 100% rename from PyGame/assets/graphics/observer.png rename to assets/graphics/observer.png diff --git a/Godot/assets/graphics/particles/aura/0.png b/assets/graphics/particles/aura/0.png similarity index 100% rename from Godot/assets/graphics/particles/aura/0.png rename to assets/graphics/particles/aura/0.png diff --git a/Godot/assets/graphics/particles/aura/1.png b/assets/graphics/particles/aura/1.png similarity index 100% rename from Godot/assets/graphics/particles/aura/1.png rename to assets/graphics/particles/aura/1.png diff --git a/Godot/assets/graphics/particles/aura/2.png b/assets/graphics/particles/aura/2.png similarity index 100% rename from Godot/assets/graphics/particles/aura/2.png rename to assets/graphics/particles/aura/2.png diff --git a/Godot/assets/graphics/particles/aura/3.png b/assets/graphics/particles/aura/3.png similarity index 100% rename from Godot/assets/graphics/particles/aura/3.png rename to assets/graphics/particles/aura/3.png diff --git a/Godot/assets/graphics/particles/bamboo/0.png b/assets/graphics/particles/bamboo/0.png similarity index 100% rename from Godot/assets/graphics/particles/bamboo/0.png rename to assets/graphics/particles/bamboo/0.png diff --git a/Godot/assets/graphics/particles/bamboo/1.png b/assets/graphics/particles/bamboo/1.png similarity index 100% rename from Godot/assets/graphics/particles/bamboo/1.png rename to assets/graphics/particles/bamboo/1.png diff --git a/Godot/assets/graphics/particles/claw/0.png b/assets/graphics/particles/claw/0.png similarity index 100% rename from Godot/assets/graphics/particles/claw/0.png rename to assets/graphics/particles/claw/0.png diff --git a/Godot/assets/graphics/particles/claw/1.png b/assets/graphics/particles/claw/1.png similarity index 100% rename from Godot/assets/graphics/particles/claw/1.png rename to assets/graphics/particles/claw/1.png diff --git a/Godot/assets/graphics/particles/claw/2.png b/assets/graphics/particles/claw/2.png similarity index 100% rename from Godot/assets/graphics/particles/claw/2.png rename to assets/graphics/particles/claw/2.png diff --git a/Godot/assets/graphics/particles/claw/3.png b/assets/graphics/particles/claw/3.png similarity index 100% rename from Godot/assets/graphics/particles/claw/3.png rename to assets/graphics/particles/claw/3.png diff --git a/Godot/assets/graphics/particles/flame/fire.png b/assets/graphics/particles/flame/fire.png similarity index 100% rename from Godot/assets/graphics/particles/flame/fire.png rename to assets/graphics/particles/flame/fire.png diff --git a/Godot/assets/graphics/particles/flame/frames/0.png b/assets/graphics/particles/flame/frames/0.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/0.png rename to assets/graphics/particles/flame/frames/0.png diff --git a/Godot/assets/graphics/particles/flame/frames/01.png b/assets/graphics/particles/flame/frames/01.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/01.png rename to assets/graphics/particles/flame/frames/01.png diff --git a/Godot/assets/graphics/particles/flame/frames/02.png b/assets/graphics/particles/flame/frames/02.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/02.png rename to assets/graphics/particles/flame/frames/02.png diff --git a/Godot/assets/graphics/particles/flame/frames/03.png b/assets/graphics/particles/flame/frames/03.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/03.png rename to assets/graphics/particles/flame/frames/03.png diff --git a/Godot/assets/graphics/particles/flame/frames/04.png b/assets/graphics/particles/flame/frames/04.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/04.png rename to assets/graphics/particles/flame/frames/04.png diff --git a/Godot/assets/graphics/particles/flame/frames/05.png b/assets/graphics/particles/flame/frames/05.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/05.png rename to assets/graphics/particles/flame/frames/05.png diff --git a/Godot/assets/graphics/particles/flame/frames/06.png b/assets/graphics/particles/flame/frames/06.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/06.png rename to assets/graphics/particles/flame/frames/06.png diff --git a/Godot/assets/graphics/particles/flame/frames/07.png b/assets/graphics/particles/flame/frames/07.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/07.png rename to assets/graphics/particles/flame/frames/07.png diff --git a/Godot/assets/graphics/particles/flame/frames/08.png b/assets/graphics/particles/flame/frames/08.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/08.png rename to assets/graphics/particles/flame/frames/08.png diff --git a/Godot/assets/graphics/particles/flame/frames/09.png b/assets/graphics/particles/flame/frames/09.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/09.png rename to assets/graphics/particles/flame/frames/09.png diff --git a/Godot/assets/graphics/particles/flame/frames/10.png b/assets/graphics/particles/flame/frames/10.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/10.png rename to assets/graphics/particles/flame/frames/10.png diff --git a/Godot/assets/graphics/particles/flame/frames/11.png b/assets/graphics/particles/flame/frames/11.png similarity index 100% rename from Godot/assets/graphics/particles/flame/frames/11.png rename to assets/graphics/particles/flame/frames/11.png diff --git a/Godot/assets/graphics/particles/heal/frames/0.png b/assets/graphics/particles/heal/frames/0.png similarity index 100% rename from Godot/assets/graphics/particles/heal/frames/0.png rename to assets/graphics/particles/heal/frames/0.png diff --git a/Godot/assets/graphics/particles/heal/frames/1.png b/assets/graphics/particles/heal/frames/1.png similarity index 100% rename from Godot/assets/graphics/particles/heal/frames/1.png rename to assets/graphics/particles/heal/frames/1.png diff --git a/Godot/assets/graphics/particles/heal/frames/2.png b/assets/graphics/particles/heal/frames/2.png similarity index 100% rename from Godot/assets/graphics/particles/heal/frames/2.png rename to assets/graphics/particles/heal/frames/2.png diff --git a/Godot/assets/graphics/particles/heal/frames/3.png b/assets/graphics/particles/heal/frames/3.png similarity index 100% rename from Godot/assets/graphics/particles/heal/frames/3.png rename to assets/graphics/particles/heal/frames/3.png diff --git a/Godot/assets/graphics/particles/heal/frames/4.png b/assets/graphics/particles/heal/frames/4.png similarity index 100% rename from Godot/assets/graphics/particles/heal/frames/4.png rename to assets/graphics/particles/heal/frames/4.png diff --git a/Godot/assets/graphics/particles/heal/heal.png b/assets/graphics/particles/heal/heal.png similarity index 100% rename from Godot/assets/graphics/particles/heal/heal.png rename to assets/graphics/particles/heal/heal.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00000.png b/assets/graphics/particles/leaf1/leaf1_00000.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00000.png rename to assets/graphics/particles/leaf1/leaf1_00000.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00001.png b/assets/graphics/particles/leaf1/leaf1_00001.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00001.png rename to assets/graphics/particles/leaf1/leaf1_00001.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00002.png b/assets/graphics/particles/leaf1/leaf1_00002.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00002.png rename to assets/graphics/particles/leaf1/leaf1_00002.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00003.png b/assets/graphics/particles/leaf1/leaf1_00003.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00003.png rename to assets/graphics/particles/leaf1/leaf1_00003.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00004.png b/assets/graphics/particles/leaf1/leaf1_00004.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00004.png rename to assets/graphics/particles/leaf1/leaf1_00004.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00005.png b/assets/graphics/particles/leaf1/leaf1_00005.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00005.png rename to assets/graphics/particles/leaf1/leaf1_00005.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00006.png b/assets/graphics/particles/leaf1/leaf1_00006.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00006.png rename to assets/graphics/particles/leaf1/leaf1_00006.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00007.png b/assets/graphics/particles/leaf1/leaf1_00007.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00007.png rename to assets/graphics/particles/leaf1/leaf1_00007.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00008.png b/assets/graphics/particles/leaf1/leaf1_00008.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00008.png rename to assets/graphics/particles/leaf1/leaf1_00008.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00009.png b/assets/graphics/particles/leaf1/leaf1_00009.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00009.png rename to assets/graphics/particles/leaf1/leaf1_00009.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00010.png b/assets/graphics/particles/leaf1/leaf1_00010.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00010.png rename to assets/graphics/particles/leaf1/leaf1_00010.png diff --git a/Godot/assets/graphics/particles/leaf1/leaf1_00011.png b/assets/graphics/particles/leaf1/leaf1_00011.png similarity index 100% rename from Godot/assets/graphics/particles/leaf1/leaf1_00011.png rename to assets/graphics/particles/leaf1/leaf1_00011.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00000.png b/assets/graphics/particles/leaf2/leaf1_00000.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00000.png rename to assets/graphics/particles/leaf2/leaf1_00000.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00001.png b/assets/graphics/particles/leaf2/leaf1_00001.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00001.png rename to assets/graphics/particles/leaf2/leaf1_00001.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00002.png b/assets/graphics/particles/leaf2/leaf1_00002.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00002.png rename to assets/graphics/particles/leaf2/leaf1_00002.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00003.png b/assets/graphics/particles/leaf2/leaf1_00003.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00003.png rename to assets/graphics/particles/leaf2/leaf1_00003.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00004.png b/assets/graphics/particles/leaf2/leaf1_00004.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00004.png rename to assets/graphics/particles/leaf2/leaf1_00004.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00005.png b/assets/graphics/particles/leaf2/leaf1_00005.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00005.png rename to assets/graphics/particles/leaf2/leaf1_00005.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00006.png b/assets/graphics/particles/leaf2/leaf1_00006.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00006.png rename to assets/graphics/particles/leaf2/leaf1_00006.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00007.png b/assets/graphics/particles/leaf2/leaf1_00007.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00007.png rename to assets/graphics/particles/leaf2/leaf1_00007.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00008.png b/assets/graphics/particles/leaf2/leaf1_00008.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00008.png rename to assets/graphics/particles/leaf2/leaf1_00008.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00009.png b/assets/graphics/particles/leaf2/leaf1_00009.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00009.png rename to assets/graphics/particles/leaf2/leaf1_00009.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00010.png b/assets/graphics/particles/leaf2/leaf1_00010.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00010.png rename to assets/graphics/particles/leaf2/leaf1_00010.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00011.png b/assets/graphics/particles/leaf2/leaf1_00011.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00011.png rename to assets/graphics/particles/leaf2/leaf1_00011.png diff --git a/Godot/assets/graphics/particles/leaf2/leaf1_00012.png b/assets/graphics/particles/leaf2/leaf1_00012.png similarity index 100% rename from Godot/assets/graphics/particles/leaf2/leaf1_00012.png rename to assets/graphics/particles/leaf2/leaf1_00012.png diff --git a/Godot/assets/graphics/particles/leaf3/leaf1_00000.png b/assets/graphics/particles/leaf3/leaf1_00000.png similarity index 100% rename from Godot/assets/graphics/particles/leaf3/leaf1_00000.png rename to assets/graphics/particles/leaf3/leaf1_00000.png diff --git a/Godot/assets/graphics/particles/leaf3/leaf1_00001.png b/assets/graphics/particles/leaf3/leaf1_00001.png similarity index 100% rename from Godot/assets/graphics/particles/leaf3/leaf1_00001.png rename to assets/graphics/particles/leaf3/leaf1_00001.png diff --git a/Godot/assets/graphics/particles/leaf3/leaf1_00002.png b/assets/graphics/particles/leaf3/leaf1_00002.png similarity index 100% rename from Godot/assets/graphics/particles/leaf3/leaf1_00002.png rename to assets/graphics/particles/leaf3/leaf1_00002.png diff --git a/Godot/assets/graphics/particles/leaf3/leaf1_00003.png b/assets/graphics/particles/leaf3/leaf1_00003.png similarity index 100% rename from Godot/assets/graphics/particles/leaf3/leaf1_00003.png rename to assets/graphics/particles/leaf3/leaf1_00003.png diff --git a/Godot/assets/graphics/particles/leaf3/leaf1_00004.png b/assets/graphics/particles/leaf3/leaf1_00004.png similarity index 100% rename from Godot/assets/graphics/particles/leaf3/leaf1_00004.png rename to assets/graphics/particles/leaf3/leaf1_00004.png diff --git a/Godot/assets/graphics/particles/leaf3/leaf1_00005.png b/assets/graphics/particles/leaf3/leaf1_00005.png similarity index 100% rename from Godot/assets/graphics/particles/leaf3/leaf1_00005.png rename to assets/graphics/particles/leaf3/leaf1_00005.png diff --git a/Godot/assets/graphics/particles/leaf3/leaf1_00006.png b/assets/graphics/particles/leaf3/leaf1_00006.png similarity index 100% rename from Godot/assets/graphics/particles/leaf3/leaf1_00006.png rename to assets/graphics/particles/leaf3/leaf1_00006.png diff --git a/Godot/assets/graphics/particles/leaf3/leaf1_00007.png b/assets/graphics/particles/leaf3/leaf1_00007.png similarity index 100% rename from Godot/assets/graphics/particles/leaf3/leaf1_00007.png rename to assets/graphics/particles/leaf3/leaf1_00007.png diff --git a/Godot/assets/graphics/particles/leaf3/leaf1_00008.png b/assets/graphics/particles/leaf3/leaf1_00008.png similarity index 100% rename from Godot/assets/graphics/particles/leaf3/leaf1_00008.png rename to assets/graphics/particles/leaf3/leaf1_00008.png diff --git a/Godot/assets/graphics/particles/leaf3/leaf1_00009.png b/assets/graphics/particles/leaf3/leaf1_00009.png similarity index 100% rename from Godot/assets/graphics/particles/leaf3/leaf1_00009.png rename to assets/graphics/particles/leaf3/leaf1_00009.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00000.png b/assets/graphics/particles/leaf4/leaf1_00000.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00000.png rename to assets/graphics/particles/leaf4/leaf1_00000.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00001.png b/assets/graphics/particles/leaf4/leaf1_00001.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00001.png rename to assets/graphics/particles/leaf4/leaf1_00001.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00002.png b/assets/graphics/particles/leaf4/leaf1_00002.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00002.png rename to assets/graphics/particles/leaf4/leaf1_00002.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00003.png b/assets/graphics/particles/leaf4/leaf1_00003.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00003.png rename to assets/graphics/particles/leaf4/leaf1_00003.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00004.png b/assets/graphics/particles/leaf4/leaf1_00004.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00004.png rename to assets/graphics/particles/leaf4/leaf1_00004.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00005.png b/assets/graphics/particles/leaf4/leaf1_00005.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00005.png rename to assets/graphics/particles/leaf4/leaf1_00005.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00006.png b/assets/graphics/particles/leaf4/leaf1_00006.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00006.png rename to assets/graphics/particles/leaf4/leaf1_00006.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00007.png b/assets/graphics/particles/leaf4/leaf1_00007.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00007.png rename to assets/graphics/particles/leaf4/leaf1_00007.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00008.png b/assets/graphics/particles/leaf4/leaf1_00008.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00008.png rename to assets/graphics/particles/leaf4/leaf1_00008.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00009.png b/assets/graphics/particles/leaf4/leaf1_00009.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00009.png rename to assets/graphics/particles/leaf4/leaf1_00009.png diff --git a/Godot/assets/graphics/particles/leaf4/leaf1_00010.png b/assets/graphics/particles/leaf4/leaf1_00010.png similarity index 100% rename from Godot/assets/graphics/particles/leaf4/leaf1_00010.png rename to assets/graphics/particles/leaf4/leaf1_00010.png diff --git a/Godot/assets/graphics/particles/leaf5/leaf1_00000.png b/assets/graphics/particles/leaf5/leaf1_00000.png similarity index 100% rename from Godot/assets/graphics/particles/leaf5/leaf1_00000.png rename to assets/graphics/particles/leaf5/leaf1_00000.png diff --git a/Godot/assets/graphics/particles/leaf5/leaf1_00001.png b/assets/graphics/particles/leaf5/leaf1_00001.png similarity index 100% rename from Godot/assets/graphics/particles/leaf5/leaf1_00001.png rename to assets/graphics/particles/leaf5/leaf1_00001.png diff --git a/Godot/assets/graphics/particles/leaf5/leaf1_00002.png b/assets/graphics/particles/leaf5/leaf1_00002.png similarity index 100% rename from Godot/assets/graphics/particles/leaf5/leaf1_00002.png rename to assets/graphics/particles/leaf5/leaf1_00002.png diff --git a/Godot/assets/graphics/particles/leaf5/leaf1_00003.png b/assets/graphics/particles/leaf5/leaf1_00003.png similarity index 100% rename from Godot/assets/graphics/particles/leaf5/leaf1_00003.png rename to assets/graphics/particles/leaf5/leaf1_00003.png diff --git a/Godot/assets/graphics/particles/leaf5/leaf1_00004.png b/assets/graphics/particles/leaf5/leaf1_00004.png similarity index 100% rename from Godot/assets/graphics/particles/leaf5/leaf1_00004.png rename to assets/graphics/particles/leaf5/leaf1_00004.png diff --git a/Godot/assets/graphics/particles/leaf5/leaf1_00005.png b/assets/graphics/particles/leaf5/leaf1_00005.png similarity index 100% rename from Godot/assets/graphics/particles/leaf5/leaf1_00005.png rename to assets/graphics/particles/leaf5/leaf1_00005.png diff --git a/Godot/assets/graphics/particles/leaf5/leaf1_00006.png b/assets/graphics/particles/leaf5/leaf1_00006.png similarity index 100% rename from Godot/assets/graphics/particles/leaf5/leaf1_00006.png rename to assets/graphics/particles/leaf5/leaf1_00006.png diff --git a/Godot/assets/graphics/particles/leaf5/leaf1_00007.png b/assets/graphics/particles/leaf5/leaf1_00007.png similarity index 100% rename from Godot/assets/graphics/particles/leaf5/leaf1_00007.png rename to assets/graphics/particles/leaf5/leaf1_00007.png diff --git a/Godot/assets/graphics/particles/leaf5/leaf1_00008.png b/assets/graphics/particles/leaf5/leaf1_00008.png similarity index 100% rename from Godot/assets/graphics/particles/leaf5/leaf1_00008.png rename to assets/graphics/particles/leaf5/leaf1_00008.png diff --git a/Godot/assets/graphics/particles/leaf5/leaf1_00009.png b/assets/graphics/particles/leaf5/leaf1_00009.png similarity index 100% rename from Godot/assets/graphics/particles/leaf5/leaf1_00009.png rename to assets/graphics/particles/leaf5/leaf1_00009.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00000.png b/assets/graphics/particles/leaf6/leaf1_00000.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00000.png rename to assets/graphics/particles/leaf6/leaf1_00000.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00001.png b/assets/graphics/particles/leaf6/leaf1_00001.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00001.png rename to assets/graphics/particles/leaf6/leaf1_00001.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00002.png b/assets/graphics/particles/leaf6/leaf1_00002.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00002.png rename to assets/graphics/particles/leaf6/leaf1_00002.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00003.png b/assets/graphics/particles/leaf6/leaf1_00003.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00003.png rename to assets/graphics/particles/leaf6/leaf1_00003.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00004.png b/assets/graphics/particles/leaf6/leaf1_00004.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00004.png rename to assets/graphics/particles/leaf6/leaf1_00004.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00005.png b/assets/graphics/particles/leaf6/leaf1_00005.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00005.png rename to assets/graphics/particles/leaf6/leaf1_00005.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00006.png b/assets/graphics/particles/leaf6/leaf1_00006.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00006.png rename to assets/graphics/particles/leaf6/leaf1_00006.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00007.png b/assets/graphics/particles/leaf6/leaf1_00007.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00007.png rename to assets/graphics/particles/leaf6/leaf1_00007.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00008.png b/assets/graphics/particles/leaf6/leaf1_00008.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00008.png rename to assets/graphics/particles/leaf6/leaf1_00008.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00009.png b/assets/graphics/particles/leaf6/leaf1_00009.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00009.png rename to assets/graphics/particles/leaf6/leaf1_00009.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00010.png b/assets/graphics/particles/leaf6/leaf1_00010.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00010.png rename to assets/graphics/particles/leaf6/leaf1_00010.png diff --git a/Godot/assets/graphics/particles/leaf6/leaf1_00011.png b/assets/graphics/particles/leaf6/leaf1_00011.png similarity index 100% rename from Godot/assets/graphics/particles/leaf6/leaf1_00011.png rename to assets/graphics/particles/leaf6/leaf1_00011.png diff --git a/Godot/assets/graphics/particles/leaf_attack/0.png b/assets/graphics/particles/leaf_attack/0.png similarity index 100% rename from Godot/assets/graphics/particles/leaf_attack/0.png rename to assets/graphics/particles/leaf_attack/0.png diff --git a/Godot/assets/graphics/particles/leaf_attack/1.png b/assets/graphics/particles/leaf_attack/1.png similarity index 100% rename from Godot/assets/graphics/particles/leaf_attack/1.png rename to assets/graphics/particles/leaf_attack/1.png diff --git a/Godot/assets/graphics/particles/leaf_attack/2.png b/assets/graphics/particles/leaf_attack/2.png similarity index 100% rename from Godot/assets/graphics/particles/leaf_attack/2.png rename to assets/graphics/particles/leaf_attack/2.png diff --git a/Godot/assets/graphics/particles/leaf_attack/3.png b/assets/graphics/particles/leaf_attack/3.png similarity index 100% rename from Godot/assets/graphics/particles/leaf_attack/3.png rename to assets/graphics/particles/leaf_attack/3.png diff --git a/Godot/assets/graphics/particles/leaf_attack/4.png b/assets/graphics/particles/leaf_attack/4.png similarity index 100% rename from Godot/assets/graphics/particles/leaf_attack/4.png rename to assets/graphics/particles/leaf_attack/4.png diff --git a/Godot/assets/graphics/particles/leaf_attack/5.png b/assets/graphics/particles/leaf_attack/5.png similarity index 100% rename from Godot/assets/graphics/particles/leaf_attack/5.png rename to assets/graphics/particles/leaf_attack/5.png diff --git a/Godot/assets/graphics/particles/leaf_attack/6.png b/assets/graphics/particles/leaf_attack/6.png similarity index 100% rename from Godot/assets/graphics/particles/leaf_attack/6.png rename to assets/graphics/particles/leaf_attack/6.png diff --git a/Godot/assets/graphics/particles/nova/0.png b/assets/graphics/particles/nova/0.png similarity index 100% rename from Godot/assets/graphics/particles/nova/0.png rename to assets/graphics/particles/nova/0.png diff --git a/Godot/assets/graphics/particles/nova/1.png b/assets/graphics/particles/nova/1.png similarity index 100% rename from Godot/assets/graphics/particles/nova/1.png rename to assets/graphics/particles/nova/1.png diff --git a/Godot/assets/graphics/particles/nova/2.png b/assets/graphics/particles/nova/2.png similarity index 100% rename from Godot/assets/graphics/particles/nova/2.png rename to assets/graphics/particles/nova/2.png diff --git a/Godot/assets/graphics/particles/nova/3.png b/assets/graphics/particles/nova/3.png similarity index 100% rename from Godot/assets/graphics/particles/nova/3.png rename to assets/graphics/particles/nova/3.png diff --git a/Godot/assets/graphics/particles/nova/4.png b/assets/graphics/particles/nova/4.png similarity index 100% rename from Godot/assets/graphics/particles/nova/4.png rename to assets/graphics/particles/nova/4.png diff --git a/Godot/assets/graphics/particles/nova/5.png b/assets/graphics/particles/nova/5.png similarity index 100% rename from Godot/assets/graphics/particles/nova/5.png rename to assets/graphics/particles/nova/5.png diff --git a/Godot/assets/graphics/particles/raccoon/0.png b/assets/graphics/particles/raccoon/0.png similarity index 100% rename from Godot/assets/graphics/particles/raccoon/0.png rename to assets/graphics/particles/raccoon/0.png diff --git a/Godot/assets/graphics/particles/raccoon/1.png b/assets/graphics/particles/raccoon/1.png similarity index 100% rename from Godot/assets/graphics/particles/raccoon/1.png rename to assets/graphics/particles/raccoon/1.png diff --git a/Godot/assets/graphics/particles/raccoon/2.png b/assets/graphics/particles/raccoon/2.png similarity index 100% rename from Godot/assets/graphics/particles/raccoon/2.png rename to assets/graphics/particles/raccoon/2.png diff --git a/Godot/assets/graphics/particles/raccoon/3.png b/assets/graphics/particles/raccoon/3.png similarity index 100% rename from Godot/assets/graphics/particles/raccoon/3.png rename to assets/graphics/particles/raccoon/3.png diff --git a/Godot/assets/graphics/particles/raccoon/4.png b/assets/graphics/particles/raccoon/4.png similarity index 100% rename from Godot/assets/graphics/particles/raccoon/4.png rename to assets/graphics/particles/raccoon/4.png diff --git a/Godot/assets/graphics/particles/raccoon/5.png b/assets/graphics/particles/raccoon/5.png similarity index 100% rename from Godot/assets/graphics/particles/raccoon/5.png rename to assets/graphics/particles/raccoon/5.png diff --git a/Godot/assets/graphics/particles/slash/0.png b/assets/graphics/particles/slash/0.png similarity index 100% rename from Godot/assets/graphics/particles/slash/0.png rename to assets/graphics/particles/slash/0.png diff --git a/Godot/assets/graphics/particles/slash/1.png b/assets/graphics/particles/slash/1.png similarity index 100% rename from Godot/assets/graphics/particles/slash/1.png rename to assets/graphics/particles/slash/1.png diff --git a/Godot/assets/graphics/particles/slash/2.png b/assets/graphics/particles/slash/2.png similarity index 100% rename from Godot/assets/graphics/particles/slash/2.png rename to assets/graphics/particles/slash/2.png diff --git a/Godot/assets/graphics/particles/slash/3.png b/assets/graphics/particles/slash/3.png similarity index 100% rename from Godot/assets/graphics/particles/slash/3.png rename to assets/graphics/particles/slash/3.png diff --git a/Godot/assets/graphics/particles/smoke/0.png b/assets/graphics/particles/smoke/0.png similarity index 100% rename from Godot/assets/graphics/particles/smoke/0.png rename to assets/graphics/particles/smoke/0.png diff --git a/Godot/assets/graphics/particles/smoke/1.png b/assets/graphics/particles/smoke/1.png similarity index 100% rename from Godot/assets/graphics/particles/smoke/1.png rename to assets/graphics/particles/smoke/1.png diff --git a/Godot/assets/graphics/particles/smoke/2.png b/assets/graphics/particles/smoke/2.png similarity index 100% rename from Godot/assets/graphics/particles/smoke/2.png rename to assets/graphics/particles/smoke/2.png diff --git a/Godot/assets/graphics/particles/smoke/3.png b/assets/graphics/particles/smoke/3.png similarity index 100% rename from Godot/assets/graphics/particles/smoke/3.png rename to assets/graphics/particles/smoke/3.png diff --git a/Godot/assets/graphics/particles/smoke/4.png b/assets/graphics/particles/smoke/4.png similarity index 100% rename from Godot/assets/graphics/particles/smoke/4.png rename to assets/graphics/particles/smoke/4.png diff --git a/Godot/assets/graphics/particles/smoke/5.png b/assets/graphics/particles/smoke/5.png similarity index 100% rename from Godot/assets/graphics/particles/smoke/5.png rename to assets/graphics/particles/smoke/5.png diff --git a/Godot/assets/graphics/particles/smoke2/0.png b/assets/graphics/particles/smoke2/0.png similarity index 100% rename from Godot/assets/graphics/particles/smoke2/0.png rename to assets/graphics/particles/smoke2/0.png diff --git a/Godot/assets/graphics/particles/smoke2/1.png b/assets/graphics/particles/smoke2/1.png similarity index 100% rename from Godot/assets/graphics/particles/smoke2/1.png rename to assets/graphics/particles/smoke2/1.png diff --git a/Godot/assets/graphics/particles/smoke2/2.png b/assets/graphics/particles/smoke2/2.png similarity index 100% rename from Godot/assets/graphics/particles/smoke2/2.png rename to assets/graphics/particles/smoke2/2.png diff --git a/Godot/assets/graphics/particles/smoke2/3.png b/assets/graphics/particles/smoke2/3.png similarity index 100% rename from Godot/assets/graphics/particles/smoke2/3.png rename to assets/graphics/particles/smoke2/3.png diff --git a/Godot/assets/graphics/particles/smoke2/4.png b/assets/graphics/particles/smoke2/4.png similarity index 100% rename from Godot/assets/graphics/particles/smoke2/4.png rename to assets/graphics/particles/smoke2/4.png diff --git a/Godot/assets/graphics/particles/smoke2/5.png b/assets/graphics/particles/smoke2/5.png similarity index 100% rename from Godot/assets/graphics/particles/smoke2/5.png rename to assets/graphics/particles/smoke2/5.png diff --git a/Godot/assets/graphics/particles/smoke_orange/0.png b/assets/graphics/particles/smoke_orange/0.png similarity index 100% rename from Godot/assets/graphics/particles/smoke_orange/0.png rename to assets/graphics/particles/smoke_orange/0.png diff --git a/Godot/assets/graphics/particles/smoke_orange/1.png b/assets/graphics/particles/smoke_orange/1.png similarity index 100% rename from Godot/assets/graphics/particles/smoke_orange/1.png rename to assets/graphics/particles/smoke_orange/1.png diff --git a/Godot/assets/graphics/particles/smoke_orange/2.png b/assets/graphics/particles/smoke_orange/2.png similarity index 100% rename from Godot/assets/graphics/particles/smoke_orange/2.png rename to assets/graphics/particles/smoke_orange/2.png diff --git a/Godot/assets/graphics/particles/smoke_orange/3.png b/assets/graphics/particles/smoke_orange/3.png similarity index 100% rename from Godot/assets/graphics/particles/smoke_orange/3.png rename to assets/graphics/particles/smoke_orange/3.png diff --git a/Godot/assets/graphics/particles/smoke_orange/4.png b/assets/graphics/particles/smoke_orange/4.png similarity index 100% rename from Godot/assets/graphics/particles/smoke_orange/4.png rename to assets/graphics/particles/smoke_orange/4.png diff --git a/Godot/assets/graphics/particles/smoke_orange/5.png b/assets/graphics/particles/smoke_orange/5.png similarity index 100% rename from Godot/assets/graphics/particles/smoke_orange/5.png rename to assets/graphics/particles/smoke_orange/5.png diff --git a/Godot/assets/graphics/particles/sparkle/0.png b/assets/graphics/particles/sparkle/0.png similarity index 100% rename from Godot/assets/graphics/particles/sparkle/0.png rename to assets/graphics/particles/sparkle/0.png diff --git a/Godot/assets/graphics/particles/sparkle/1.png b/assets/graphics/particles/sparkle/1.png similarity index 100% rename from Godot/assets/graphics/particles/sparkle/1.png rename to assets/graphics/particles/sparkle/1.png diff --git a/Godot/assets/graphics/particles/sparkle/2.png b/assets/graphics/particles/sparkle/2.png similarity index 100% rename from Godot/assets/graphics/particles/sparkle/2.png rename to assets/graphics/particles/sparkle/2.png diff --git a/Godot/assets/graphics/particles/sparkle/3.png b/assets/graphics/particles/sparkle/3.png similarity index 100% rename from Godot/assets/graphics/particles/sparkle/3.png rename to assets/graphics/particles/sparkle/3.png diff --git a/Godot/assets/graphics/particles/sparkle/4.png b/assets/graphics/particles/sparkle/4.png similarity index 100% rename from Godot/assets/graphics/particles/sparkle/4.png rename to assets/graphics/particles/sparkle/4.png diff --git a/Godot/assets/graphics/particles/thunder/0.png b/assets/graphics/particles/thunder/0.png similarity index 100% rename from Godot/assets/graphics/particles/thunder/0.png rename to assets/graphics/particles/thunder/0.png diff --git a/Godot/assets/graphics/particles/thunder/1.png b/assets/graphics/particles/thunder/1.png similarity index 100% rename from Godot/assets/graphics/particles/thunder/1.png rename to assets/graphics/particles/thunder/1.png diff --git a/Godot/assets/graphics/particles/thunder/2.png b/assets/graphics/particles/thunder/2.png similarity index 100% rename from Godot/assets/graphics/particles/thunder/2.png rename to assets/graphics/particles/thunder/2.png diff --git a/Godot/assets/graphics/particles/thunder/3.png b/assets/graphics/particles/thunder/3.png similarity index 100% rename from Godot/assets/graphics/particles/thunder/3.png rename to assets/graphics/particles/thunder/3.png diff --git a/Godot/assets/graphics/particles/thunder/4.png b/assets/graphics/particles/thunder/4.png similarity index 100% rename from Godot/assets/graphics/particles/thunder/4.png rename to assets/graphics/particles/thunder/4.png diff --git a/Godot/assets/graphics/particles/thunder/5.png b/assets/graphics/particles/thunder/5.png similarity index 100% rename from Godot/assets/graphics/particles/thunder/5.png rename to assets/graphics/particles/thunder/5.png diff --git a/Godot/assets/graphics/particles/thunder/6.png b/assets/graphics/particles/thunder/6.png similarity index 100% rename from Godot/assets/graphics/particles/thunder/6.png rename to assets/graphics/particles/thunder/6.png diff --git a/Godot/assets/graphics/particles/thunder/7.png b/assets/graphics/particles/thunder/7.png similarity index 100% rename from Godot/assets/graphics/particles/thunder/7.png rename to assets/graphics/particles/thunder/7.png diff --git a/Godot/assets/graphics/player/down/down_0.png b/assets/graphics/player/down/down_0.png similarity index 100% rename from Godot/assets/graphics/player/down/down_0.png rename to assets/graphics/player/down/down_0.png diff --git a/Godot/assets/graphics/player/down/down_1.png b/assets/graphics/player/down/down_1.png similarity index 100% rename from Godot/assets/graphics/player/down/down_1.png rename to assets/graphics/player/down/down_1.png diff --git a/Godot/assets/graphics/player/down/down_2.png b/assets/graphics/player/down/down_2.png similarity index 100% rename from Godot/assets/graphics/player/down/down_2.png rename to assets/graphics/player/down/down_2.png diff --git a/Godot/assets/graphics/player/down/down_3.png b/assets/graphics/player/down/down_3.png similarity index 100% rename from Godot/assets/graphics/player/down/down_3.png rename to assets/graphics/player/down/down_3.png diff --git a/Godot/assets/graphics/player/down_attack/attack_down.png b/assets/graphics/player/down_attack/attack_down.png similarity index 100% rename from Godot/assets/graphics/player/down_attack/attack_down.png rename to assets/graphics/player/down_attack/attack_down.png diff --git a/Godot/assets/graphics/player/down_idle/idle_down.png b/assets/graphics/player/down_idle/idle_down.png similarity index 100% rename from Godot/assets/graphics/player/down_idle/idle_down.png rename to assets/graphics/player/down_idle/idle_down.png diff --git a/Godot/assets/graphics/player/left/left_0.png b/assets/graphics/player/left/left_0.png similarity index 100% rename from Godot/assets/graphics/player/left/left_0.png rename to assets/graphics/player/left/left_0.png diff --git a/Godot/assets/graphics/player/left/left_1.png b/assets/graphics/player/left/left_1.png similarity index 100% rename from Godot/assets/graphics/player/left/left_1.png rename to assets/graphics/player/left/left_1.png diff --git a/Godot/assets/graphics/player/left/left_2.png b/assets/graphics/player/left/left_2.png similarity index 100% rename from Godot/assets/graphics/player/left/left_2.png rename to assets/graphics/player/left/left_2.png diff --git a/Godot/assets/graphics/player/left/left_3.png b/assets/graphics/player/left/left_3.png similarity index 100% rename from Godot/assets/graphics/player/left/left_3.png rename to assets/graphics/player/left/left_3.png diff --git a/Godot/assets/graphics/player/left_attack/attack_left.png b/assets/graphics/player/left_attack/attack_left.png similarity index 100% rename from Godot/assets/graphics/player/left_attack/attack_left.png rename to assets/graphics/player/left_attack/attack_left.png diff --git a/Godot/assets/graphics/player/left_idle/idle_left.png b/assets/graphics/player/left_idle/idle_left.png similarity index 100% rename from Godot/assets/graphics/player/left_idle/idle_left.png rename to assets/graphics/player/left_idle/idle_left.png diff --git a/Godot/assets/graphics/player/right/right_0.png b/assets/graphics/player/right/right_0.png similarity index 100% rename from Godot/assets/graphics/player/right/right_0.png rename to assets/graphics/player/right/right_0.png diff --git a/Godot/assets/graphics/player/right/right_1.png b/assets/graphics/player/right/right_1.png similarity index 100% rename from Godot/assets/graphics/player/right/right_1.png rename to assets/graphics/player/right/right_1.png diff --git a/Godot/assets/graphics/player/right/right_2.png b/assets/graphics/player/right/right_2.png similarity index 100% rename from Godot/assets/graphics/player/right/right_2.png rename to assets/graphics/player/right/right_2.png diff --git a/Godot/assets/graphics/player/right/right_3.png b/assets/graphics/player/right/right_3.png similarity index 100% rename from Godot/assets/graphics/player/right/right_3.png rename to assets/graphics/player/right/right_3.png diff --git a/Godot/assets/graphics/player/right_attack/attack_right.png b/assets/graphics/player/right_attack/attack_right.png similarity index 100% rename from Godot/assets/graphics/player/right_attack/attack_right.png rename to assets/graphics/player/right_attack/attack_right.png diff --git a/Godot/assets/graphics/player/right_idle/idle_right.png b/assets/graphics/player/right_idle/idle_right.png similarity index 100% rename from Godot/assets/graphics/player/right_idle/idle_right.png rename to assets/graphics/player/right_idle/idle_right.png diff --git a/Godot/assets/graphics/player/up/up_0.png b/assets/graphics/player/up/up_0.png similarity index 100% rename from Godot/assets/graphics/player/up/up_0.png rename to assets/graphics/player/up/up_0.png diff --git a/Godot/assets/graphics/player/up/up_1.png b/assets/graphics/player/up/up_1.png similarity index 100% rename from Godot/assets/graphics/player/up/up_1.png rename to assets/graphics/player/up/up_1.png diff --git a/Godot/assets/graphics/player/up/up_2.png b/assets/graphics/player/up/up_2.png similarity index 100% rename from Godot/assets/graphics/player/up/up_2.png rename to assets/graphics/player/up/up_2.png diff --git a/Godot/assets/graphics/player/up/up_3.png b/assets/graphics/player/up/up_3.png similarity index 100% rename from Godot/assets/graphics/player/up/up_3.png rename to assets/graphics/player/up/up_3.png diff --git a/Godot/assets/graphics/player/up_attack/attack_up.png b/assets/graphics/player/up_attack/attack_up.png similarity index 100% rename from Godot/assets/graphics/player/up_attack/attack_up.png rename to assets/graphics/player/up_attack/attack_up.png diff --git a/Godot/assets/graphics/player/up_idle/idle_up.png b/assets/graphics/player/up_idle/idle_up.png similarity index 100% rename from Godot/assets/graphics/player/up_idle/idle_up.png rename to assets/graphics/player/up_idle/idle_up.png diff --git a/Godot/assets/graphics/tilemap/Floor.png b/assets/graphics/tilemap/Floor.png similarity index 100% rename from Godot/assets/graphics/tilemap/Floor.png rename to assets/graphics/tilemap/Floor.png diff --git a/Godot/assets/graphics/tilemap/details.png b/assets/graphics/tilemap/details.png similarity index 100% rename from Godot/assets/graphics/tilemap/details.png rename to assets/graphics/tilemap/details.png diff --git a/Godot/assets/graphics/tilemap/ground.png b/assets/graphics/tilemap/ground.png similarity index 100% rename from Godot/assets/graphics/tilemap/ground.png rename to assets/graphics/tilemap/ground.png diff --git a/Godot/assets/graphics/weapons/axe/down.png b/assets/graphics/weapons/axe/down.png similarity index 100% rename from Godot/assets/graphics/weapons/axe/down.png rename to assets/graphics/weapons/axe/down.png diff --git a/Godot/assets/graphics/weapons/axe/full.png b/assets/graphics/weapons/axe/full.png similarity index 100% rename from Godot/assets/graphics/weapons/axe/full.png rename to assets/graphics/weapons/axe/full.png diff --git a/Godot/assets/graphics/weapons/axe/left.png b/assets/graphics/weapons/axe/left.png similarity index 100% rename from Godot/assets/graphics/weapons/axe/left.png rename to assets/graphics/weapons/axe/left.png diff --git a/Godot/assets/graphics/weapons/axe/right.png b/assets/graphics/weapons/axe/right.png similarity index 100% rename from Godot/assets/graphics/weapons/axe/right.png rename to assets/graphics/weapons/axe/right.png diff --git a/Godot/assets/graphics/weapons/axe/up.png b/assets/graphics/weapons/axe/up.png similarity index 100% rename from Godot/assets/graphics/weapons/axe/up.png rename to assets/graphics/weapons/axe/up.png diff --git a/Godot/assets/graphics/weapons/lance/down.png b/assets/graphics/weapons/lance/down.png similarity index 100% rename from Godot/assets/graphics/weapons/lance/down.png rename to assets/graphics/weapons/lance/down.png diff --git a/Godot/assets/graphics/weapons/lance/full.png b/assets/graphics/weapons/lance/full.png similarity index 100% rename from Godot/assets/graphics/weapons/lance/full.png rename to assets/graphics/weapons/lance/full.png diff --git a/Godot/assets/graphics/weapons/lance/left.png b/assets/graphics/weapons/lance/left.png similarity index 100% rename from Godot/assets/graphics/weapons/lance/left.png rename to assets/graphics/weapons/lance/left.png diff --git a/Godot/assets/graphics/weapons/lance/right.png b/assets/graphics/weapons/lance/right.png similarity index 100% rename from Godot/assets/graphics/weapons/lance/right.png rename to assets/graphics/weapons/lance/right.png diff --git a/Godot/assets/graphics/weapons/lance/up.png b/assets/graphics/weapons/lance/up.png similarity index 100% rename from Godot/assets/graphics/weapons/lance/up.png rename to assets/graphics/weapons/lance/up.png diff --git a/Godot/assets/graphics/weapons/rapier/down.png b/assets/graphics/weapons/rapier/down.png similarity index 100% rename from Godot/assets/graphics/weapons/rapier/down.png rename to assets/graphics/weapons/rapier/down.png diff --git a/Godot/assets/graphics/weapons/rapier/full.png b/assets/graphics/weapons/rapier/full.png similarity index 100% rename from Godot/assets/graphics/weapons/rapier/full.png rename to assets/graphics/weapons/rapier/full.png diff --git a/Godot/assets/graphics/weapons/rapier/left.png b/assets/graphics/weapons/rapier/left.png similarity index 100% rename from Godot/assets/graphics/weapons/rapier/left.png rename to assets/graphics/weapons/rapier/left.png diff --git a/Godot/assets/graphics/weapons/rapier/right.png b/assets/graphics/weapons/rapier/right.png similarity index 100% rename from Godot/assets/graphics/weapons/rapier/right.png rename to assets/graphics/weapons/rapier/right.png diff --git a/Godot/assets/graphics/weapons/rapier/up.png b/assets/graphics/weapons/rapier/up.png similarity index 100% rename from Godot/assets/graphics/weapons/rapier/up.png rename to assets/graphics/weapons/rapier/up.png diff --git a/Godot/assets/graphics/weapons/sai/down.png b/assets/graphics/weapons/sai/down.png similarity index 100% rename from Godot/assets/graphics/weapons/sai/down.png rename to assets/graphics/weapons/sai/down.png diff --git a/Godot/assets/graphics/weapons/sai/full.png b/assets/graphics/weapons/sai/full.png similarity index 100% rename from Godot/assets/graphics/weapons/sai/full.png rename to assets/graphics/weapons/sai/full.png diff --git a/Godot/assets/graphics/weapons/sai/left.png b/assets/graphics/weapons/sai/left.png similarity index 100% rename from Godot/assets/graphics/weapons/sai/left.png rename to assets/graphics/weapons/sai/left.png diff --git a/Godot/assets/graphics/weapons/sai/right.png b/assets/graphics/weapons/sai/right.png similarity index 100% rename from Godot/assets/graphics/weapons/sai/right.png rename to assets/graphics/weapons/sai/right.png diff --git a/Godot/assets/graphics/weapons/sai/up.png b/assets/graphics/weapons/sai/up.png similarity index 100% rename from Godot/assets/graphics/weapons/sai/up.png rename to assets/graphics/weapons/sai/up.png diff --git a/Godot/assets/graphics/weapons/sword/down.png b/assets/graphics/weapons/sword/down.png similarity index 100% rename from Godot/assets/graphics/weapons/sword/down.png rename to assets/graphics/weapons/sword/down.png diff --git a/Godot/assets/graphics/weapons/sword/full.png b/assets/graphics/weapons/sword/full.png similarity index 100% rename from Godot/assets/graphics/weapons/sword/full.png rename to assets/graphics/weapons/sword/full.png diff --git a/Godot/assets/graphics/weapons/sword/left.png b/assets/graphics/weapons/sword/left.png similarity index 100% rename from Godot/assets/graphics/weapons/sword/left.png rename to assets/graphics/weapons/sword/left.png diff --git a/Godot/assets/graphics/weapons/sword/right.png b/assets/graphics/weapons/sword/right.png similarity index 100% rename from Godot/assets/graphics/weapons/sword/right.png rename to assets/graphics/weapons/sword/right.png diff --git a/Godot/assets/graphics/weapons/sword/up.png b/assets/graphics/weapons/sword/up.png similarity index 100% rename from Godot/assets/graphics/weapons/sword/up.png rename to assets/graphics/weapons/sword/up.png diff --git a/PyGame/assets/map/Entities.csv b/assets/map/Entities.csv similarity index 100% rename from PyGame/assets/map/Entities.csv rename to assets/map/Entities.csv diff --git a/PyGame/assets/map/FloorBlocks.csv b/assets/map/FloorBlocks.csv similarity index 100% rename from PyGame/assets/map/FloorBlocks.csv rename to assets/map/FloorBlocks.csv diff --git a/PyGame/assets/map/Grass.csv b/assets/map/Grass.csv similarity index 100% rename from PyGame/assets/map/Grass.csv rename to assets/map/Grass.csv diff --git a/PyGame/assets/map/Objects.csv b/assets/map/Objects.csv similarity index 100% rename from PyGame/assets/map/Objects.csv rename to assets/map/Objects.csv diff --git a/PyGame/camera.py b/camera.py similarity index 100% rename from PyGame/camera.py rename to camera.py diff --git a/PyGame/config/__init__.py b/config/__init__.py similarity index 100% rename from PyGame/config/__init__.py rename to config/__init__.py diff --git a/PyGame/config/game/__init__.py b/config/game/__init__.py similarity index 100% rename from PyGame/config/game/__init__.py rename to config/game/__init__.py diff --git a/PyGame/config/game/monster_config.py b/config/game/monster_config.py similarity index 100% rename from PyGame/config/game/monster_config.py rename to config/game/monster_config.py diff --git a/PyGame/config/game/player_config.py b/config/game/player_config.py similarity index 100% rename from PyGame/config/game/player_config.py rename to config/game/player_config.py diff --git a/PyGame/config/game/spell_config.py b/config/game/spell_config.py similarity index 100% rename from PyGame/config/game/spell_config.py rename to config/game/spell_config.py diff --git a/PyGame/config/game/weapon_config.py b/config/game/weapon_config.py similarity index 100% rename from PyGame/config/game/weapon_config.py rename to config/game/weapon_config.py diff --git a/PyGame/config/system/window.py b/config/system/window.py similarity index 100% rename from PyGame/config/system/window.py rename to config/system/window.py diff --git a/PyGame/effects/__init__.py b/effects/__init__.py similarity index 100% rename from PyGame/effects/__init__.py rename to effects/__init__.py diff --git a/PyGame/effects/magic_effects.py b/effects/magic_effects.py similarity index 100% rename from PyGame/effects/magic_effects.py rename to effects/magic_effects.py diff --git a/PyGame/effects/particle_effects.py b/effects/particle_effects.py similarity index 100% rename from PyGame/effects/particle_effects.py rename to effects/particle_effects.py diff --git a/PyGame/effects/weapon_effects.py b/effects/weapon_effects.py similarity index 100% rename from PyGame/effects/weapon_effects.py rename to effects/weapon_effects.py diff --git a/PyGame/entities/__init__.py b/entities/__init__.py similarity index 100% rename from PyGame/entities/__init__.py rename to entities/__init__.py diff --git a/PyGame/entities/components/__init__.py b/entities/components/__init__.py similarity index 100% rename from PyGame/entities/components/__init__.py rename to entities/components/__init__.py diff --git a/PyGame/entities/components/_input.py b/entities/components/_input.py similarity index 100% rename from PyGame/entities/components/_input.py rename to entities/components/_input.py diff --git a/PyGame/entities/components/animation.py b/entities/components/animation.py similarity index 100% rename from PyGame/entities/components/animation.py rename to entities/components/animation.py diff --git a/PyGame/entities/components/combat.py b/entities/components/combat.py similarity index 100% rename from PyGame/entities/components/combat.py rename to entities/components/combat.py diff --git a/PyGame/entities/components/movement.py b/entities/components/movement.py similarity index 100% rename from PyGame/entities/components/movement.py rename to entities/components/movement.py diff --git a/PyGame/entities/components/stats.py b/entities/components/stats.py similarity index 100% rename from PyGame/entities/components/stats.py rename to entities/components/stats.py diff --git a/PyGame/entities/enemy.py b/entities/enemy.py similarity index 100% rename from PyGame/entities/enemy.py rename to entities/enemy.py diff --git a/PyGame/entities/entity.py b/entities/entity.py similarity index 100% rename from PyGame/entities/entity.py rename to entities/entity.py diff --git a/PyGame/entities/observer.py b/entities/observer.py similarity index 100% rename from PyGame/entities/observer.py rename to entities/observer.py diff --git a/PyGame/entities/player.py b/entities/player.py similarity index 100% rename from PyGame/entities/player.py rename to entities/player.py diff --git a/PyGame/entities/terrain.py b/entities/terrain.py similarity index 100% rename from PyGame/entities/terrain.py rename to entities/terrain.py diff --git a/PyGame/folder_struct.py b/folder_struct.py similarity index 100% rename from PyGame/folder_struct.py rename to folder_struct.py diff --git a/PyGame/game.py b/game.py similarity index 100% rename from PyGame/game.py rename to game.py diff --git a/PyGame/interface/__init__.py b/interface/__init__.py similarity index 100% rename from PyGame/interface/__init__.py rename to interface/__init__.py diff --git a/PyGame/interface/ui.py b/interface/ui.py similarity index 100% rename from PyGame/interface/ui.py rename to interface/ui.py diff --git a/PyGame/interface/ui_settings.py b/interface/ui_settings.py similarity index 100% rename from PyGame/interface/ui_settings.py rename to interface/ui_settings.py diff --git a/PyGame/interface/upgrade.py b/interface/upgrade.py similarity index 100% rename from PyGame/interface/upgrade.py rename to interface/upgrade.py diff --git a/PyGame/level.py b/level.py similarity index 100% rename from PyGame/level.py rename to level.py diff --git a/PyGame/main.py b/main.py similarity index 100% rename from PyGame/main.py rename to main.py diff --git a/PyGame/ml/ppo/__init__.py b/ml/ppo/__init__.py similarity index 100% rename from PyGame/ml/ppo/__init__.py rename to ml/ppo/__init__.py diff --git a/PyGame/ml/ppo/agent.py b/ml/ppo/agent.py similarity index 100% rename from PyGame/ml/ppo/agent.py rename to ml/ppo/agent.py diff --git a/PyGame/ml/ppo/brain.py b/ml/ppo/brain.py similarity index 100% rename from PyGame/ml/ppo/brain.py rename to ml/ppo/brain.py diff --git a/PyGame/poetry.lock b/poetry.lock similarity index 100% rename from PyGame/poetry.lock rename to poetry.lock diff --git a/PyGame/pyproject.toml b/pyproject.toml similarity index 100% rename from PyGame/pyproject.toml rename to pyproject.toml diff --git a/PyGame/utils/__init__.py b/utils/__init__.py similarity index 100% rename from PyGame/utils/__init__.py rename to utils/__init__.py diff --git a/PyGame/utils/debug.py b/utils/debug.py similarity index 100% rename from PyGame/utils/debug.py rename to utils/debug.py diff --git a/PyGame/utils/hyperparams.py b/utils/hyperparams.py similarity index 100% rename from PyGame/utils/hyperparams.py rename to utils/hyperparams.py diff --git a/PyGame/utils/metrics.py b/utils/metrics.py similarity index 100% rename from PyGame/utils/metrics.py rename to utils/metrics.py diff --git a/PyGame/utils/resource_loader.py b/utils/resource_loader.py similarity index 100% rename from PyGame/utils/resource_loader.py rename to utils/resource_loader.py diff --git a/PyGame/utils/seeds.py b/utils/seeds.py similarity index 100% rename from PyGame/utils/seeds.py rename to utils/seeds.py