From 46f7d93dd05648aa57ec799234ceb0a0b19b3bf5 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Wed, 6 Nov 2024 19:43:06 +0100 Subject: [PATCH 01/22] Hide content lists --- .../ContentManager/Scripts/contenteditor.gd | 54 +++++++++++++++++++ Scenes/ContentManager/contenteditor.tscn | 17 ++++-- 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/Scenes/ContentManager/Scripts/contenteditor.gd b/Scenes/ContentManager/Scripts/contenteditor.gd index 5a8b5869..c8ee22a7 100644 --- a/Scenes/ContentManager/Scripts/contenteditor.gd +++ b/Scenes/ContentManager/Scripts/contenteditor.gd @@ -16,6 +16,7 @@ extends Control @export var overmapareaEditor: PackedScene = null @export var content: VBoxContainer = null @export var tabContainer: TabContainer = null +@export var type_selector_menu_button: MenuButton = null var selectedMod: String = "Core" # This function will load the contents of the data into the contentListInstance @@ -33,6 +34,8 @@ func _ready(): load_content_list(Gamedata.ContentType.SKILLS, "Skills") load_content_list(Gamedata.ContentType.QUESTS, "Quests") load_content_list(Gamedata.ContentType.OVERMAPAREAS, "Overmap areas") + # Populate the type_selector_menu_button with items + populate_type_selector_menu_button() func load_content_list(type: Gamedata.ContentType, strHeader: String): @@ -154,3 +157,54 @@ func instantiate_editor(type: Gamedata.ContentType, itemID: String, newEditor: P _: print("Unknown content type:", type) + + +# Function to populate the type_selector_menu_button with content list headers +func populate_type_selector_menu_button(): + var popup_menu = type_selector_menu_button.get_popup() + popup_menu.clear() # Clear any existing items + + # Define a list of headers to add to the menu button + var headers = [ + "Maps", "Tactical Maps", "Items", "Terrain Tiles", "Mobs", + "Furniture", "Item Groups", "Player Attributes", "Wearable Slots", + "Stats", "Skills", "Quests", "Overmap areas" + ] + + for i in headers.size(): + var item_text = headers[i] + popup_menu.add_check_item(item_text, i) # Add a checkable item + popup_menu.set_item_checked(i, true) # Check each item by default + + # Optional: Connect item selection signal if needed + popup_menu.id_pressed.connect(_on_type_selected) + + +# Function to handle item selection from the popup menu +func _on_type_selected(id): + var popup_menu = type_selector_menu_button.get_popup() + var item_text = popup_menu.get_item_text(id) + + # Toggle the checked state of the item + var is_checked = popup_menu.is_item_checked(id) + popup_menu.set_item_checked(id, not is_checked) + + # Show or hide the content list based on the checked state + if not is_checked: + show_content_list(item_text) + else: + hide_content_list(item_text) + +# Function to show a content list with the given header text +func show_content_list(header_text: String): + for child in content.get_children(): + if child is Control and child.header == header_text: + child.visible = true + break + +# Function to hide a content list with the given header text +func hide_content_list(header_text: String): + for child in content.get_children(): + if child is Control and child.header == header_text: + child.visible = false + break diff --git a/Scenes/ContentManager/contenteditor.tscn b/Scenes/ContentManager/contenteditor.tscn index a7c3074c..cb8f358e 100644 --- a/Scenes/ContentManager/contenteditor.tscn +++ b/Scenes/ContentManager/contenteditor.tscn @@ -16,7 +16,7 @@ [ext_resource type="PackedScene" uid="uid://b07i30w3ey3aa" path="res://Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn" id="14_uu117"] [ext_resource type="PackedScene" uid="uid://b3ggaal1e2obk" path="res://Scenes/ContentManager/Custom_Editors/OvermapAreaEditor.tscn" id="15_qbq5b"] -[node name="contenteditor" type="Control" node_paths=PackedStringArray("content", "tabContainer")] +[node name="contenteditor" type="Control" node_paths=PackedStringArray("content", "tabContainer", "type_selector_menu_button")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -38,8 +38,9 @@ skillsEditor = ExtResource("12_orpls") questsEditor = ExtResource("13_gv2y0") playerattributesEditor = ExtResource("14_uu117") overmapareaEditor = ExtResource("15_qbq5b") -content = NodePath("HSplitContainer/ContentLists/TabContainer2/Content") +content = NodePath("HSplitContainer/ContentLists/TabContainer2/Content/ContentList") tabContainer = NodePath("HSplitContainer/TabContainer") +type_selector_menu_button = NodePath("HSplitContainer/ContentLists/TabContainer2/Content/Toolbar/TypeSelectorMenuButton") [node name="HSplitContainer" type="HSplitContainer" parent="."] layout_mode = 1 @@ -74,10 +75,20 @@ size_flags_vertical = 3 current_tab = 0 [node name="Content" type="VBoxContainer" parent="HSplitContainer/ContentLists/TabContainer2"] -custom_minimum_size = Vector2(0, 200) layout_mode = 2 metadata/_tab_index = 0 +[node name="Toolbar" type="HBoxContainer" parent="HSplitContainer/ContentLists/TabContainer2/Content"] +layout_mode = 2 + +[node name="TypeSelectorMenuButton" type="MenuButton" parent="HSplitContainer/ContentLists/TabContainer2/Content/Toolbar"] +layout_mode = 2 +text = "☰" + +[node name="ContentList" type="VBoxContainer" parent="HSplitContainer/ContentLists/TabContainer2/Content"] +custom_minimum_size = Vector2(0, 200) +layout_mode = 2 + [node name="Recent" type="ItemList" parent="HSplitContainer/ContentLists/TabContainer2"] visible = false custom_minimum_size = Vector2(200, 200) From f7919be59651db5bdb684917979eedaf32ce5baa Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Wed, 6 Nov 2024 21:22:12 +0100 Subject: [PATCH 02/22] Save content list visibility state --- .../ContentManager/Scripts/contenteditor.gd | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/Scenes/ContentManager/Scripts/contenteditor.gd b/Scenes/ContentManager/Scripts/contenteditor.gd index c8ee22a7..77705a88 100644 --- a/Scenes/ContentManager/Scripts/contenteditor.gd +++ b/Scenes/ContentManager/Scripts/contenteditor.gd @@ -159,11 +159,15 @@ func instantiate_editor(type: Gamedata.ContentType, itemID: String, newEditor: P print("Unknown content type:", type) -# Function to populate the type_selector_menu_button with content list headers +# Function to populate the type_selector_menu_button with content list headers and load their state func populate_type_selector_menu_button(): var popup_menu = type_selector_menu_button.get_popup() popup_menu.clear() # Clear any existing items + var config = ConfigFile.new() + var path = "user://settings.cfg" + config.load(path) # Load existing settings if available + # Define a list of headers to add to the menu button var headers = [ "Maps", "Tactical Maps", "Items", "Terrain Tiles", "Mobs", @@ -174,13 +178,22 @@ func populate_type_selector_menu_button(): for i in headers.size(): var item_text = headers[i] popup_menu.add_check_item(item_text, i) # Add a checkable item - popup_menu.set_item_checked(i, true) # Check each item by default - # Optional: Connect item selection signal if needed + # Load saved state or default to checked if not found + var is_checked = config.get_value("type_selector", item_text, true) + popup_menu.set_item_checked(i, is_checked) + + # Show or hide the content list based on the state + if is_checked: + show_content_list(item_text) + else: + hide_content_list(item_text) + + # Connect item selection signal to save state when changed popup_menu.id_pressed.connect(_on_type_selected) -# Function to handle item selection from the popup menu +# Function to handle item selection from the popup menu and save the state func _on_type_selected(id): var popup_menu = type_selector_menu_button.get_popup() var item_text = popup_menu.get_item_text(id) @@ -195,6 +208,9 @@ func _on_type_selected(id): else: hide_content_list(item_text) + # Save the new state to the configuration file + save_item_state(item_text, not is_checked) + # Function to show a content list with the given header text func show_content_list(header_text: String): for child in content.get_children(): @@ -208,3 +224,17 @@ func hide_content_list(header_text: String): if child is Control and child.header == header_text: child.visible = false break + +# Function to save the state of an item to the configuration file +func save_item_state(item_text: String, is_checked: bool): + var config = ConfigFile.new() + var path = "user://settings.cfg" + + # Load existing settings to not overwrite them + var err = config.load(path) + if err != OK and err != ERR_FILE_NOT_FOUND: + print("Failed to load settings:", err) + return + + config.set_value("type_selector", item_text, is_checked) + config.save(path) From b5207032cd9fc84a70a427597f2f2d7f8f53ba73 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Sat, 9 Nov 2024 00:27:53 +0100 Subject: [PATCH 03/22] Add drain attributes to editor --- .../Custom_Editors/PlayerAttributeEditor.tscn | 103 ++++++++++++----- .../Scripts/PlayerAttributeEditor.gd | 105 ++++++++++++++++++ Scripts/Gamedata/DPlayerAttribute.gd | 31 ++++++ export_presets.cfg | 40 +++++++ 4 files changed, 254 insertions(+), 25 deletions(-) diff --git a/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn b/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn index 291ab5c7..63886acc 100644 --- a/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn @@ -1,10 +1,12 @@ -[gd_scene load_steps=4 format=3 uid="uid://b07i30w3ey3aa"] +[gd_scene load_steps=5 format=3 uid="uid://b07i30w3ey3aa"] [ext_resource type="Script" path="res://Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd" id="1_720us"] [ext_resource type="Texture2D" uid="uid://c8ragmxitca47" path="res://Scenes/ContentManager/Mapeditor/Images/emptyTile.png" id="2_72bbp"] [ext_resource type="PackedScene" uid="uid://d1h1rpwt8f807" path="res://Scenes/ContentManager/Custom_Widgets/Sprite_Selector_Popup.tscn" id="3_pwtky"] -[node name="PlayerAttributeEditor" type="Control" node_paths=PackedStringArray("icon_rect", "id_text_label", "path_text_label", "name_text_edit", "description_text_edit", "sprite_selector", "min_amount_spinbox", "max_amount_spinbox", "current_amount_spinbox", "depletion_rate_spinbox", "depletion_effect", "ui_color_picker", "mode_tab_container", "fixed_grid", "fixed_amount_spin_box", "default_grid")] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5jqmb"] + +[node name="PlayerAttributeEditor" type="Control" node_paths=PackedStringArray("icon_rect", "id_text_label", "path_text_label", "name_text_edit", "description_text_edit", "sprite_selector", "min_amount_spinbox", "max_amount_spinbox", "current_amount_spinbox", "depletion_rate_spinbox", "depletion_effect", "ui_color_picker", "mode_tab_container", "fixed_grid", "fixed_amount_spin_box", "default_grid", "hide_when_empty_check_box", "depleting_effect_option_button", "drain_attribute_grid_container")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -18,16 +20,19 @@ path_text_label = NodePath("VBoxContainer/FormGrid/PathTextLabel") name_text_edit = NodePath("VBoxContainer/FormGrid/NameTextEdit") description_text_edit = NodePath("VBoxContainer/FormGrid/DescriptionTextEdit") sprite_selector = NodePath("Sprite_selector") -min_amount_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/MinAmountSpinBox") -max_amount_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/MaxAmountSpinBox") -current_amount_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/CurrentAmountSpinBox") -depletion_rate_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DepletionRateSpinBox") -depletion_effect = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DepletionEffectOptionButton") -ui_color_picker = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/UIColorPicker") +min_amount_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/MinAmountSpinBox") +max_amount_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/MaxAmountSpinBox") +current_amount_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/CurrentAmountSpinBox") +depletion_rate_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/DepletionRateSpinBox") +depletion_effect = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/DepletionEffectOptionButton") +ui_color_picker = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/UIColorPicker") mode_tab_container = NodePath("VBoxContainer/FormGrid/ModeTabContainer") fixed_grid = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Fixed") fixed_amount_spin_box = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Fixed/FixedAmountSpinBox") -default_grid = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default") +default_grid = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid") +hide_when_empty_check_box = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/HideWhenEmptyCheckBox") +depleting_effect_option_button = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/DepletingEffectOptionButton") +drain_attribute_grid_container = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DrainAttributePanelContainer/DrainAttributesVBoxContainer/DrainAttributeGridContainer") [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 1 @@ -129,70 +134,90 @@ text = "Mode" [node name="ModeTabContainer" type="TabContainer" parent="VBoxContainer/FormGrid"] layout_mode = 2 -current_tab = 1 +size_flags_horizontal = 3 +size_flags_vertical = 3 +current_tab = 0 -[node name="Default" type="GridContainer" parent="VBoxContainer/FormGrid/ModeTabContainer"] -visible = false +[node name="Default" type="HBoxContainer" parent="VBoxContainer/FormGrid/ModeTabContainer"] layout_mode = 2 -columns = 2 metadata/_tab_index = 0 -[node name="MinAmountLabel2" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="DefaultGrid" type="GridContainer" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +layout_mode = 2 +columns = 2 + +[node name="MinAmountLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 text = "Min amount" -[node name="MinAmountSpinBox" type="SpinBox" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="MinAmountSpinBox" type="SpinBox" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 tooltip_text = "The minimum amount this attribute can be. Once the current amount reaches this value, it is considered depleted." max_value = 1000.0 -[node name="MaxAmountLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="MaxAmountLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 text = "Max amount" -[node name="MaxAmountSpinBox" type="SpinBox" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="MaxAmountSpinBox" type="SpinBox" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 tooltip_text = "The maximum amount this attribute can be. When the current amount reaches this value, it is considered full." max_value = 1000.0 value = 100.0 -[node name="CurrentAmountLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="CurrentAmountLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 text = "Starting amount" -[node name="CurrentAmountSpinBox" type="SpinBox" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="CurrentAmountSpinBox" type="SpinBox" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 tooltip_text = "The amount the player starts with." max_value = 1000.0 value = 99.0 -[node name="DepletionRateLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="DepletionRateLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 text = "Depletion rate" -[node name="DepletionRateSpinBox" type="SpinBox" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="DepletionRateSpinBox" type="SpinBox" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 tooltip_text = "The amount to subtract each second. With a \"max amount\" of 100 and a depletion rate of 0.02, it will take over an hour real time to deplete." step = 0.01 value = 0.02 -[node name="DepletionEffectLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="DepletionEffectLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 text = "Depletion effect" -[node name="DepletionEffectOptionButton" type="OptionButton" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="DepletionEffectOptionButton" type="OptionButton" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 +tooltip_text = "The effect that occurs when this attribute is completely depleted." selected = 0 item_count = 2 popup/item_0/text = "none" popup/item_1/text = "death" popup/item_1/id = 1 -[node name="UIColorLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="DepletingEffectLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] +layout_mode = 2 +text = "Depleting effect" + +[node name="DepletingEffectOptionButton" type="OptionButton" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] +layout_mode = 2 +tooltip_text = "The effect that this attribute produces while it is depleting. +The effect starts when this attribute has a value greater +then 0. The effect ends when this attribute has a value of 0." +selected = 0 +item_count = 2 +popup/item_0/text = "none" +popup/item_1/text = "drain other attributes" +popup/item_1/id = 1 + +[node name="UIColorLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 text = "UI color" -[node name="UIColorPicker" type="ColorPicker" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +[node name="UIColorPicker" type="ColorPicker" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 tooltip_text = "The color this attribute will have if it's displayed in the UI. In case this attribute is displayed by a progressbar, the progressbar will assume this color." color = Color(0.933994, 0.202531, 0.220332, 1) @@ -202,7 +227,35 @@ sliders_visible = false hex_visible = false presets_visible = false +[node name="HideWhenEmptyLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] +layout_mode = 2 +text = "Hide" + +[node name="HideWhenEmptyCheckBox" type="CheckBox" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] +layout_mode = 2 +tooltip_text = "When this is on, the attribute will be hidden from the UI when it is +empty. When this is off, the attribute will always be shown on the UI." +text = "When empty" + +[node name="DrainAttributePanelContainer" type="PanelContainer" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +layout_mode = 2 +size_flags_horizontal = 3 +tooltip_text = "Drop other attributes onto this area to add them. " +theme_override_styles/panel = SubResource("StyleBoxFlat_5jqmb") + +[node name="DrainAttributesVBoxContainer" type="VBoxContainer" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DrainAttributePanelContainer"] +layout_mode = 2 + +[node name="DrainAttributesLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DrainAttributePanelContainer/DrainAttributesVBoxContainer"] +layout_mode = 2 +text = "Drain these attributes:" + +[node name="DrainAttributeGridContainer" type="GridContainer" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DrainAttributePanelContainer/DrainAttributesVBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 + [node name="Fixed" type="GridContainer" parent="VBoxContainer/FormGrid/ModeTabContainer"] +visible = false layout_mode = 2 columns = 2 metadata/_tab_index = 1 diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd index 5ef24bc7..40a941e5 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd @@ -26,6 +26,9 @@ extends Control @export var fixed_amount_spin_box: SpinBox = null # Shows controls for default properties and is the first child of mode_tab_container @export var default_grid: GridContainer = null +@export var hide_when_empty_check_box: CheckBox = null +@export var depleting_effect_option_button: OptionButton = null +@export var drain_attribute_grid_container: GridContainer = null signal data_changed() @@ -79,10 +82,15 @@ func process_default_mode() -> void: # Load the UI color into the color picker if ui_color_picker != null: ui_color_picker.color = Color.html(dplayerattribute.default_mode.ui_color) + + # Load drain attributes into the grid container + if dplayerattribute.drain_attributes: + _load_drain_attributes_into_ui(dplayerattribute.drain_attributes) else: mode_tab_container.set_current_tab(0) # Hide default_mode tab if it doesn't exist + # Function to handle loading and showing fixed mode func process_fixed_mode() -> void: if dplayerattribute.fixed_mode: @@ -138,6 +146,9 @@ func save_default_mode() -> void: dplayerattribute.default_mode.depletion_effect = depletion_effect.get_item_text(depletion_effect.selected) dplayerattribute.default_mode.ui_color = ui_color_picker.color.to_html() + # Save drain attributes from the UI into dplayerattribute + dplayerattribute.drain_attributes = _get_drain_attributes_from_ui() + # Delete fixed_mode if it exists if dplayerattribute.fixed_mode: dplayerattribute.fixed_mode = null @@ -166,3 +177,97 @@ func _on_sprite_selector_sprite_selected_ok(clicked_sprite) -> void: var playerattributeTexture: Resource = clicked_sprite.get_texture() icon_rect.texture = playerattributeTexture path_text_label.text = playerattributeTexture.resource_path.get_file() + +# Load drain attributes into the drain_attribute_grid_container +func _load_drain_attributes_into_ui(drain_attributes: Dictionary) -> void: + # Clear existing entries + for child in drain_attribute_grid_container.get_children(): + child.queue_free() + + # Populate the container with attributes from the provided dictionary + for attribute_id in drain_attributes.keys(): + _add_drain_attribute_entry(attribute_id, drain_attributes[attribute_id]) + + +# Get the current drain attributes from the UI +func _get_drain_attributes_from_ui() -> Dictionary: + var drain_attributes = {} + var children = drain_attribute_grid_container.get_children() + for i in range(0, children.size(), 4): # Step by 4 to handle sprite-label-spinbox-deleteButton + var label = children[i + 1] as Label + var spinbox = children[i + 2] as SpinBox + if label and spinbox: + drain_attributes[label.text] = spinbox.value + return drain_attributes + + +# Add a new drain attribute entry to the drain_attribute_grid_container +func _add_drain_attribute_entry(attribute_id: String, amount: float) -> void: + var attribute_data = Gamedata.playerattributes.by_id(attribute_id) + + # Create a TextureRect for the sprite + var texture_rect = TextureRect.new() + texture_rect.texture = attribute_data.sprite + texture_rect.custom_minimum_size = Vector2(32, 32) + texture_rect.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED + drain_attribute_grid_container.add_child(texture_rect) + + # Create a Label for the attribute ID + var label = Label.new() + label.text = attribute_id + drain_attribute_grid_container.add_child(label) + + # Create a SpinBox for the amount to be drained + var spinbox = SpinBox.new() + spinbox.min_value = 0 + spinbox.max_value = 100 # Adjust max value as needed + spinbox.step = 0.1 + spinbox.value = amount + drain_attribute_grid_container.add_child(spinbox) + + # Create a Button to delete the attribute entry + var delete_button = Button.new() + delete_button.text = "X" + delete_button.pressed.connect(_delete_drain_attribute_entry.bind([texture_rect, label, spinbox, delete_button])) + drain_attribute_grid_container.add_child(delete_button) + + +# Delete an attribute entry from the drain_attribute_grid_container +func _delete_drain_attribute_entry(elements_to_remove: Array) -> void: + for element in elements_to_remove: + drain_attribute_grid_container.remove_child(element) + element.queue_free() + + +# Function to determine if the dragged data can be dropped in the drain_attribute_grid_container +func _can_drop_attribute_data(_newpos, data) -> bool: + if not data or not data.has("id"): + return false + if not Gamedata.playerattributes.has_id(data["id"]): + return false + + # Ensure the attribute ID isn't already in the grid + for i in range(1, drain_attribute_grid_container.get_children().size(), 4): + var label = drain_attribute_grid_container.get_children()[i] as Label + if label and label.text == data["id"]: + return false + + return true + + +# Handle data being dropped in the drain_attribute_grid_container +func _drop_attribute_data(newpos, data) -> void: + if _can_drop_attribute_data(newpos, data): + _handle_drain_attribute_drop(data) + + +# Add a dropped attribute to the drain_attribute_grid_container +func _handle_drain_attribute_drop(dropped_data) -> void: + if dropped_data and "id" in dropped_data: + var attribute_id = dropped_data["id"] + if Gamedata.playerattributes.has_id(attribute_id): + _add_drain_attribute_entry(attribute_id, 1.0) # Default value for new attributes + else: + print_debug("Invalid attribute ID: " + attribute_id) + else: + print_debug("Dropped data does not contain a valid 'id' key.") diff --git a/Scripts/Gamedata/DPlayerAttribute.gd b/Scripts/Gamedata/DPlayerAttribute.gd index 67f64289..bc040b35 100644 --- a/Scripts/Gamedata/DPlayerAttribute.gd +++ b/Scripts/Gamedata/DPlayerAttribute.gd @@ -4,6 +4,37 @@ extends RefCounted # This class represents data of a player attribute with its properties like health, stamina, etc. # This does not have any functionality for controlling the attribute itself, it only holds data +# Example data: +# { +# "default_mode": { +# "color": "258d1bff", +# "current_amount": 100, +# "depletion_effect": "death", +# "depleting_effect": "drain", +# "depletion_rate": 0.02, +# "max_amount": 100, +# "min_amount": 0, +# "hide_when_empty": false, +# "drain_attributes": { +# "torso_health": 1.0, +# "head_health": 1.0, +# } +# }, +# "description": "You starve when this is empty. You are full when this is full.", +# "id": "food", +# "name": "Food", +# "references": { +# "core": { +# "items": [ +# "canned_food", +# "tofu" +# ] +# } +# }, +# "sprite": "apple_32.png" +# } + + # Attribute ID (unique identifier) var id: String diff --git a/export_presets.cfg b/export_presets.cfg index f9bc63b6..8565e6bd 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -316,3 +316,43 @@ open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}" ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\") rm -rf \"{temp_dir}\"" + +[preset.2] + +name="Linux" +platform="Linux" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="../../../Downloads/dimensionfallexport/DimensionfallWindows.x86_64" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.2.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=0 +binary_format/embed_pck=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +binary_format/architecture="x86_64" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" From f51333f8d448c7482734411d3dcf97cf4f2f8dc3 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Sat, 9 Nov 2024 01:05:18 +0100 Subject: [PATCH 04/22] Add depleting effect to data --- .../Custom_Editors/PlayerAttributeEditor.tscn | 3 ++- .../Scripts/PlayerAttributeEditor.gd | 27 ++++++++++++++++--- Scripts/Gamedata/DPlayerAttribute.gd | 15 +++++++++-- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn b/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn index 63886acc..81da76f5 100644 --- a/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn @@ -6,7 +6,7 @@ [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5jqmb"] -[node name="PlayerAttributeEditor" type="Control" node_paths=PackedStringArray("icon_rect", "id_text_label", "path_text_label", "name_text_edit", "description_text_edit", "sprite_selector", "min_amount_spinbox", "max_amount_spinbox", "current_amount_spinbox", "depletion_rate_spinbox", "depletion_effect", "ui_color_picker", "mode_tab_container", "fixed_grid", "fixed_amount_spin_box", "default_grid", "hide_when_empty_check_box", "depleting_effect_option_button", "drain_attribute_grid_container")] +[node name="PlayerAttributeEditor" type="Control" node_paths=PackedStringArray("icon_rect", "id_text_label", "path_text_label", "name_text_edit", "description_text_edit", "sprite_selector", "min_amount_spinbox", "max_amount_spinbox", "current_amount_spinbox", "depletion_rate_spinbox", "depletion_effect", "ui_color_picker", "mode_tab_container", "fixed_grid", "fixed_amount_spin_box", "default_grid", "hide_when_empty_check_box", "depleting_effect_option_button", "drain_attribute_grid_container", "drain_attribute_panel_container")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -33,6 +33,7 @@ default_grid = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/Default hide_when_empty_check_box = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/HideWhenEmptyCheckBox") depleting_effect_option_button = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/DepletingEffectOptionButton") drain_attribute_grid_container = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DrainAttributePanelContainer/DrainAttributesVBoxContainer/DrainAttributeGridContainer") +drain_attribute_panel_container = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DrainAttributePanelContainer") [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 1 diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd index 40a941e5..fc6fb3d2 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd @@ -29,6 +29,7 @@ extends Control @export var hide_when_empty_check_box: CheckBox = null @export var depleting_effect_option_button: OptionButton = null @export var drain_attribute_grid_container: GridContainer = null +@export var drain_attribute_panel_container: PanelContainer = null signal data_changed() @@ -44,6 +45,14 @@ var dplayerattribute: DPlayerAttribute: olddata = DPlayerAttribute.new(dplayerattribute.get_data().duplicate(true)) +func _ready() -> void: + # Set drag forwarding for the drain_attribute_grid_container + drain_attribute_grid_container.set_drag_forwarding(Callable(), _can_drop_attribute_data, _drop_attribute_data) + + # Connect the signal for when the depleting effect option changes + depleting_effect_option_button.item_selected.connect(_on_depleting_effect_option_changed) + + # This function updates the form based on the DPlayerAttribute data that has been loaded func load_playerattribute_data() -> void: if not icon_rect == null and dplayerattribute.sprite: @@ -82,15 +91,16 @@ func process_default_mode() -> void: # Load the UI color into the color picker if ui_color_picker != null: ui_color_picker.color = Color.html(dplayerattribute.default_mode.ui_color) + if hide_when_empty_check_box != null: + hide_when_empty_check_box.button_pressed = dplayerattribute.default_mode.hide_when_empty # Load drain attributes into the grid container if dplayerattribute.drain_attributes: - _load_drain_attributes_into_ui(dplayerattribute.drain_attributes) + _load_drain_attributes_into_ui(dplayerattribute.default_mode.drain_attributes) else: mode_tab_container.set_current_tab(0) # Hide default_mode tab if it doesn't exist - # Function to handle loading and showing fixed mode func process_fixed_mode() -> void: if dplayerattribute.fixed_mode: @@ -147,7 +157,9 @@ func save_default_mode() -> void: dplayerattribute.default_mode.ui_color = ui_color_picker.color.to_html() # Save drain attributes from the UI into dplayerattribute - dplayerattribute.drain_attributes = _get_drain_attributes_from_ui() + dplayerattribute.default_mode.drain_attributes = _get_drain_attributes_from_ui() + # Save the value of hide_when_empty_check_box + dplayerattribute.default_mode.hide_when_empty = hide_when_empty_check_box.pressed # Delete fixed_mode if it exists if dplayerattribute.fixed_mode: @@ -271,3 +283,12 @@ func _handle_drain_attribute_drop(dropped_data) -> void: print_debug("Invalid attribute ID: " + attribute_id) else: print_debug("Dropped data does not contain a valid 'id' key.") + + +# Called when the depleting effect option is changed +func _on_depleting_effect_option_changed(index: int) -> void: + var selected_text = depleting_effect_option_button.get_item_text(index) + if selected_text == "drain other attribute": + drain_attribute_panel_container.visible = true + else: + drain_attribute_panel_container.visible = false diff --git a/Scripts/Gamedata/DPlayerAttribute.gd b/Scripts/Gamedata/DPlayerAttribute.gd index bc040b35..f6da664b 100644 --- a/Scripts/Gamedata/DPlayerAttribute.gd +++ b/Scripts/Gamedata/DPlayerAttribute.gd @@ -59,6 +59,9 @@ class DefaultMode: var depletion_rate: float # The rate at which the amount depletes every second var ui_color: String # Variable to store the UI color as a string (e.g., "ffffffff" for white) var depletion_effect: String # The effect that will happen when depleted + var depleting_effect: String # New property for handling the effect when depleting + var hide_when_empty: bool # New property to determine if the attribute should hide when empty + var drain_attributes: Dictionary # New property for drain attributes # Constructor to initialize the properties from a dictionary func _init(data: Dictionary): @@ -68,17 +71,25 @@ class DefaultMode: depletion_rate = data.get("depletion_rate", 0.02) # Default to 0.02 if not provided ui_color = data.get("color", "ffffffff") # Default to white if not provided depletion_effect = data.get("depletion_effect", "none") + depleting_effect = data.get("depleting_effect", "none") # Initialize from data + hide_when_empty = data.get("hide_when_empty", false) # Initialize from data + drain_attributes = data.get("drain_attributes", {}) # Initialize from data # Get data function to return a dictionary of properties func get_data() -> Dictionary: - return { + var new_data: Dictionary = { "min_amount": min_amount, "max_amount": max_amount, "current_amount": current_amount, "depletion_rate": depletion_rate, "color": ui_color, - "depletion_effect": depletion_effect + "depletion_effect": depletion_effect, + "depleting_effect": depleting_effect, # Include in output + "hide_when_empty": hide_when_empty } + if not drain_attributes.is_empty(): + new_data["drain_attributes"] = drain_attributes + return new_data # Inner class for FixedMode properties From 38c664b913321ca2313878aa9352ee610c7ec6d0 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Sat, 9 Nov 2024 01:50:07 +0100 Subject: [PATCH 05/22] Add poison attribute --- .../PlayerAttributes/PlayerAttributes.json | 40 ++++++++++++++++++ .../Core/PlayerAttributes/skull_poison_32.png | Bin 0 -> 1835 bytes .../skull_poison_32.png.import | 34 +++++++++++++++ .../Custom_Editors/PlayerAttributeEditor.tscn | 22 +++++++--- .../Scripts/PlayerAttributeEditor.gd | 21 +++++---- .../{exportmapdata.gd => exportdata.gd} | 0 .../{exportmapdata.tscn => exportdata.tscn} | 10 +++-- .../ModMaintenance/modmaintenance.tscn | 4 +- Scenes/ContentManager/contenteditor.tscn | 1 + 9 files changed, 110 insertions(+), 22 deletions(-) create mode 100644 Mods/Core/PlayerAttributes/skull_poison_32.png create mode 100644 Mods/Core/PlayerAttributes/skull_poison_32.png.import rename Scenes/ContentManager/ModMaintenance/Scripts/{exportmapdata.gd => exportdata.gd} (100%) rename Scenes/ContentManager/ModMaintenance/{exportmapdata.tscn => exportdata.tscn} (83%) diff --git a/Mods/Core/PlayerAttributes/PlayerAttributes.json b/Mods/Core/PlayerAttributes/PlayerAttributes.json index 989ef707..1b255b0a 100644 --- a/Mods/Core/PlayerAttributes/PlayerAttributes.json +++ b/Mods/Core/PlayerAttributes/PlayerAttributes.json @@ -3,8 +3,10 @@ "default_mode": { "color": "258d1bff", "current_amount": 100, + "depleting_effect": "none", "depletion_effect": "death", "depletion_rate": 0.02, + "hide_when_empty": false, "max_amount": 100, "min_amount": 0 }, @@ -48,8 +50,10 @@ "default_mode": { "color": "2e3195ff", "current_amount": 100, + "depleting_effect": "none", "depletion_effect": "death", "depletion_rate": 0.02, + "hide_when_empty": false, "max_amount": 100, "min_amount": 0 }, @@ -81,8 +85,10 @@ "default_mode": { "color": "ff0000ff", "current_amount": 100, + "depleting_effect": "none", "depletion_effect": "death", "depletion_rate": 0, + "hide_when_empty": false, "max_amount": 100, "min_amount": 0 }, @@ -116,8 +122,10 @@ "default_mode": { "color": "ff9900ff", "current_amount": 100, + "depleting_effect": "none", "depletion_effect": "death", "depletion_rate": 0, + "hide_when_empty": false, "max_amount": 100, "min_amount": 0 }, @@ -151,8 +159,10 @@ "default_mode": { "color": "33cc33ff", "current_amount": 100, + "depleting_effect": "none", "depletion_effect": "none", "depletion_rate": 0, + "hide_when_empty": false, "max_amount": 100, "min_amount": 0 }, @@ -186,8 +196,10 @@ "default_mode": { "color": "33cc33ff", "current_amount": 100, + "depleting_effect": "none", "depletion_effect": "none", "depletion_rate": 0, + "hide_when_empty": false, "max_amount": 100, "min_amount": 0 }, @@ -221,8 +233,10 @@ "default_mode": { "color": "0099ffff", "current_amount": 100, + "depleting_effect": "none", "depletion_effect": "none", "depletion_rate": 0, + "hide_when_empty": false, "max_amount": 100, "min_amount": 0 }, @@ -256,8 +270,10 @@ "default_mode": { "color": "0099ffff", "current_amount": 100, + "depleting_effect": "none", "depletion_effect": "none", "depletion_rate": 0, + "hide_when_empty": false, "max_amount": 100, "min_amount": 0 }, @@ -305,5 +321,29 @@ } }, "sprite": "playerattribuge_inventory_space_32.png" + }, + { + "default_mode": { + "color": "37632eff", + "current_amount": 0, + "depleting_effect": "drain other attributes", + "depletion_effect": "none", + "depletion_rate": 0.1, + "drain_attributes": { + "head_health": 1, + "left_arm_health": 1, + "left_leg_health": 1, + "right_arm_health": 1, + "right_leg_health": 1, + "torso_health": 1 + }, + "hide_when_empty": true, + "max_amount": 100, + "min_amount": 0 + }, + "description": "You are poisoned! Your health will be drained until the poison is cured or wears out.", + "id": "poison", + "name": "Poison", + "sprite": "skull_poison_32.png" } ] \ No newline at end of file diff --git a/Mods/Core/PlayerAttributes/skull_poison_32.png b/Mods/Core/PlayerAttributes/skull_poison_32.png new file mode 100644 index 0000000000000000000000000000000000000000..5af6f2cf8d2c707476340d245cfa5c58db08b27f GIT binary patch literal 1835 zcmbuAX;f3!7RPTO${+!hzA`8nkU_>IK$$G_P=X~;h8Q1O2x+ABB_t+{p+xEcM5tmw zC^HK|suZYFu{;e#hFDPBNc6`g2E>zy0OD&3 znTSZD6KM!P3L%M1Oh}|7VoAh=uZT2TYJ4h@gr_CilJWFJFynu5M|%eXjfhW7q7kE= z9I2_%NTl6f?kT{i5-g{;Th0%kNCfPW_KpY?3W0QmBT;Vlj&2V2bS!jtpW3@Q5%FXq zfJD0e)lu_Z=AB?nWpBGQJQzeZvwtxM5o{Ovf`o<#{v%)SEQ-Ovf!#njftWx9_Qq-B zvqd1**~MXdul3&|cJ|I1#5*wnu+IVQ=N*Al%lMrWR(Mi-|HRp=R=US@b*`v7a14Ew zZG&xsBOJd#g(7`e8k~KL0lv?=yQ};L-kn%kU1r7!+$x(&E5wx&=D1iUOSZ4TSa59K zZ;$PKzhiCJI{js(0GowBe#JXoN=i?aZ!Bs5>=LlJ^+G(&8gO{}d;g$AeYDunMWJwy zUs#8-IGl>!QI%CS`#zI*H;4m*t@cUACDg=glGEv^s4{RlA@=d3N9oB`rANacYEQIT z?rkZ_$-Hu*P`nL0mI)D7v^90k9Pvt$O zRsFLCw{G1sA$xfESDPILXcO|4*?y&>v+!9Yb6s*)RvKP`cWJWS`ta75u5Zq7jz-kX zG@kJ|z%GNj$V%G-uU%ex_6)s`TCF@tdb+vEILIyxEGPS{ZmlmCcwSHx?$n1=-Mtz+ zOBbdMX>PQL!KWX1dQtq9P40blxN7YoHib-%RKDx)^8*aE+1ne`6ZHw)iEU(l1d445 z+a9hD`Pb2#7;fFk;@&|$R^~eE#f|(hv$l6jE#~DFmP+yuAAaUp-|>oH$X3jaG~9{7 z1lfe-bg{#*D+*&2Yv#E?fYZYjYz? zKJf2=-=?1zzt1$ztPO&7p;vYuuJ-vN5jf_8Juo&0--#)G13Gaiy;@0`IoLihdof%k0x z_KYoTS7u3z&%aZ=#)J&5VF&%O^kA)YR;qmArXW0N#X;zerwr?Z#;B!6}UD`!dzoXhO8D z_4VNVS_2?E*Hp&i1-xv_nu*}akci@qUp!{@mGDIh5hp!7Mzma*(%}9KP|AbWn9_kU zgJgcb=;0r_;UV|DO$#hH zAe>S`n^>QczI?eRwX^XUX?cxI+up3EnMuGys5^EXqd|?D)R;b@GeJx6OoA2EE=0O> zqz=v1Bk9B0cq}oc=Uhu#Pwp{BwUv(HuVqgpUbA${2x}_p`FgXzzO%FQ^Ve3UUQmcI zX1p=zqD4sMNBMJqkW!Btxicadv1`kA?OK5*E)Bl=CQ~OSZe5BGQVrdb%jjn3^&SMY zVsHD1pz7MxaZ=al=wnp|;hQxw%35093DG-UE|-amDNEOmWv%t(>RNO# zx9=(oHVSRG#-(jsPo~^uFh{+vCPN`5A0LY(@?K@1%gAUn6a2`P&r2kHC)a80xt<)j zC593b)j71##yb_V5tj!IoBYO3lT9U62{wlWRA;3fX|iNlx1E=_Q$$Lf=L#mPWUGLE-25j=Wdb=rZ(Q*7 z^!WA9vYm3=TfdAp8cr9E$4;iqL}^PiN{R{wr!3OGC1}NLirUL_`#ml2vh}5(Ub=x_ S*Z=?D1)%*geoa0x7ykqb)H>b( literal 0 HcmV?d00001 diff --git a/Mods/Core/PlayerAttributes/skull_poison_32.png.import b/Mods/Core/PlayerAttributes/skull_poison_32.png.import new file mode 100644 index 00000000..bdb7293d --- /dev/null +++ b/Mods/Core/PlayerAttributes/skull_poison_32.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://chj0yshbsryjl" +path="res://.godot/imported/skull_poison_32.png-c8ea8ad29237124c834f0c01bd628b8e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Mods/Core/PlayerAttributes/skull_poison_32.png" +dest_files=["res://.godot/imported/skull_poison_32.png-c8ea8ad29237124c834f0c01bd628b8e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn b/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn index 81da76f5..22a4fc67 100644 --- a/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn @@ -6,7 +6,7 @@ [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5jqmb"] -[node name="PlayerAttributeEditor" type="Control" node_paths=PackedStringArray("icon_rect", "id_text_label", "path_text_label", "name_text_edit", "description_text_edit", "sprite_selector", "min_amount_spinbox", "max_amount_spinbox", "current_amount_spinbox", "depletion_rate_spinbox", "depletion_effect", "ui_color_picker", "mode_tab_container", "fixed_grid", "fixed_amount_spin_box", "default_grid", "hide_when_empty_check_box", "depleting_effect_option_button", "drain_attribute_grid_container", "drain_attribute_panel_container")] +[node name="PlayerAttributeEditor" type="Control" node_paths=PackedStringArray("icon_rect", "id_text_label", "path_text_label", "name_text_edit", "description_text_edit", "sprite_selector", "min_amount_spinbox", "max_amount_spinbox", "current_amount_spinbox", "depletion_rate_spinbox", "depletion_effect", "ui_color_picker", "mode_tab_container", "fixed_grid", "fixed_amount_spin_box", "hide_when_empty_check_box", "depleting_effect_option_button", "drain_attribute_grid_container", "drain_attribute_panel_container", "default_grid")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -29,11 +29,11 @@ ui_color_picker = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/Defa mode_tab_container = NodePath("VBoxContainer/FormGrid/ModeTabContainer") fixed_grid = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Fixed") fixed_amount_spin_box = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Fixed/FixedAmountSpinBox") -default_grid = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid") hide_when_empty_check_box = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/HideWhenEmptyCheckBox") depleting_effect_option_button = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/DepletingEffectOptionButton") drain_attribute_grid_container = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DrainAttributePanelContainer/DrainAttributesVBoxContainer/DrainAttributeGridContainer") drain_attribute_panel_container = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DrainAttributePanelContainer") +default_grid = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default") [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 1 @@ -192,7 +192,9 @@ text = "Depletion effect" [node name="DepletionEffectOptionButton" type="OptionButton" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 -tooltip_text = "The effect that occurs when this attribute is completely depleted." +tooltip_text = "The effect that occurs when this attribute is completely depleted. +none: No effect will occur when this attribute is depleted +death: the player dies when the attribute is depleted." selected = 0 item_count = 2 popup/item_0/text = "none" @@ -205,9 +207,10 @@ text = "Depleting effect" [node name="DepletingEffectOptionButton" type="OptionButton" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 -tooltip_text = "The effect that this attribute produces while it is depleting. -The effect starts when this attribute has a value greater -then 0. The effect ends when this attribute has a value of 0." +tooltip_text = "The effect that this attribute produces while it is depleting. The effect starts when this +attribute has a value greater then 0. The effect ends when this attribute has a value of 0. +none: There is no effect while depleting +drain other attributes: The specified attributes get drained every second until this attribute is depleted." selected = 0 item_count = 2 popup/item_0/text = "none" @@ -239,9 +242,13 @@ empty. When this is off, the attribute will always be shown on the UI." text = "When empty" [node name="DrainAttributePanelContainer" type="PanelContainer" parent="VBoxContainer/FormGrid/ModeTabContainer/Default"] +visible = false layout_mode = 2 size_flags_horizontal = 3 -tooltip_text = "Drop other attributes onto this area to add them. " +tooltip_text = "Drop other attributes onto this area to add them. Each attribute will be drained every +second by the amount specified. This requires the \"depleting effect\" to be set to \"drain\". If +the drain amount is high and the depletion rate of the attribute is low, a lot will be drained! +If the drain amount is low and the depletion rate is high, not much will be drained." theme_override_styles/panel = SubResource("StyleBoxFlat_5jqmb") [node name="DrainAttributesVBoxContainer" type="VBoxContainer" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DrainAttributePanelContainer"] @@ -254,6 +261,7 @@ text = "Drain these attributes:" [node name="DrainAttributeGridContainer" type="GridContainer" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DrainAttributePanelContainer/DrainAttributesVBoxContainer"] layout_mode = 2 size_flags_vertical = 3 +columns = 4 [node name="Fixed" type="GridContainer" parent="VBoxContainer/FormGrid/ModeTabContainer"] visible = false diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd index fc6fb3d2..f8a6f4db 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd @@ -24,12 +24,11 @@ extends Control # Shows controls for fixed_mode properties and is the second child of mode_tab_container @export var fixed_grid: GridContainer = null @export var fixed_amount_spin_box: SpinBox = null -# Shows controls for default properties and is the first child of mode_tab_container -@export var default_grid: GridContainer = null @export var hide_when_empty_check_box: CheckBox = null @export var depleting_effect_option_button: OptionButton = null @export var drain_attribute_grid_container: GridContainer = null @export var drain_attribute_panel_container: PanelContainer = null +@export var default_grid: HBoxContainer = null signal data_changed() @@ -87,7 +86,10 @@ func process_default_mode() -> void: if depletion_rate_spinbox != null: depletion_rate_spinbox.value = dplayerattribute.default_mode.depletion_rate if depletion_effect != null: - update_depleted_effect_option(dplayerattribute.default_mode.depletion_effect) + select_optionbutton_item_by_text(dplayerattribute.default_mode.depletion_effect, depletion_effect) + if depleting_effect_option_button != null: + select_optionbutton_item_by_text(dplayerattribute.default_mode.depleting_effect, depleting_effect_option_button) + _on_depleting_effect_option_changed(depleting_effect_option_button.selected) # Load the UI color into the color picker if ui_color_picker != null: ui_color_picker.color = Color.html(dplayerattribute.default_mode.ui_color) @@ -118,11 +120,11 @@ func _on_close_button_button_up() -> void: # Update the selected option in the SlotOptionButton to match the specified slot name -func update_depleted_effect_option(effectname: String): - var items = depletion_effect.get_item_count() +func select_optionbutton_item_by_text(mytext: String, optionbutton: OptionButton): + var items = optionbutton.get_item_count() for i in range(items): - if depletion_effect.get_item_text(i) == effectname: - depletion_effect.selected = i + if optionbutton.get_item_text(i) == mytext: + optionbutton.selected = i return @@ -154,12 +156,13 @@ func save_default_mode() -> void: dplayerattribute.default_mode.current_amount = current_amount_spinbox.value dplayerattribute.default_mode.depletion_rate = depletion_rate_spinbox.value dplayerattribute.default_mode.depletion_effect = depletion_effect.get_item_text(depletion_effect.selected) + dplayerattribute.default_mode.depleting_effect = depleting_effect_option_button.get_item_text(depleting_effect_option_button.selected) dplayerattribute.default_mode.ui_color = ui_color_picker.color.to_html() # Save drain attributes from the UI into dplayerattribute dplayerattribute.default_mode.drain_attributes = _get_drain_attributes_from_ui() # Save the value of hide_when_empty_check_box - dplayerattribute.default_mode.hide_when_empty = hide_when_empty_check_box.pressed + dplayerattribute.default_mode.hide_when_empty = hide_when_empty_check_box.button_pressed # Delete fixed_mode if it exists if dplayerattribute.fixed_mode: @@ -288,7 +291,7 @@ func _handle_drain_attribute_drop(dropped_data) -> void: # Called when the depleting effect option is changed func _on_depleting_effect_option_changed(index: int) -> void: var selected_text = depleting_effect_option_button.get_item_text(index) - if selected_text == "drain other attribute": + if selected_text == "drain other attributes": drain_attribute_panel_container.visible = true else: drain_attribute_panel_container.visible = false diff --git a/Scenes/ContentManager/ModMaintenance/Scripts/exportmapdata.gd b/Scenes/ContentManager/ModMaintenance/Scripts/exportdata.gd similarity index 100% rename from Scenes/ContentManager/ModMaintenance/Scripts/exportmapdata.gd rename to Scenes/ContentManager/ModMaintenance/Scripts/exportdata.gd diff --git a/Scenes/ContentManager/ModMaintenance/exportmapdata.tscn b/Scenes/ContentManager/ModMaintenance/exportdata.tscn similarity index 83% rename from Scenes/ContentManager/ModMaintenance/exportmapdata.tscn rename to Scenes/ContentManager/ModMaintenance/exportdata.tscn index 90ce5592..63b1c1d5 100644 --- a/Scenes/ContentManager/ModMaintenance/exportmapdata.tscn +++ b/Scenes/ContentManager/ModMaintenance/exportdata.tscn @@ -1,15 +1,15 @@ [gd_scene load_steps=2 format=3 uid="uid://ba7nwjvy7m2t5"] -[ext_resource type="Script" path="res://Scenes/ContentManager/ModMaintenance/Scripts/exportmapdata.gd" id="1_jmctw"] +[ext_resource type="Script" path="res://Scenes/ContentManager/ModMaintenance/Scripts/exportdata.gd" id="1_rq3k5"] -[node name="Exportmapdata" type="Control" node_paths=PackedStringArray("output_text_edit", "type_option_button")] +[node name="Exportdata" type="Control" node_paths=PackedStringArray("output_text_edit", "type_option_button")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -script = ExtResource("1_jmctw") +script = ExtResource("1_rq3k5") output_text_edit = NodePath("VBoxContainer/OutputTextEdit") type_option_button = NodePath("VBoxContainer/HBoxContainer/TypeOptionButton") @@ -31,12 +31,14 @@ text = "Type:" [node name="TypeOptionButton" type="OptionButton" parent="VBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 -item_count = 3 +item_count = 4 popup/item_0/text = "maps" popup/item_1/text = "items" popup/item_1/id = 1 popup/item_2/text = "mobs" popup/item_2/id = 2 +popup/item_3/text = "playerattributes" +popup/item_3/id = 3 [node name="ExportButton" type="Button" parent="VBoxContainer/HBoxContainer"] layout_mode = 2 diff --git a/Scenes/ContentManager/ModMaintenance/modmaintenance.tscn b/Scenes/ContentManager/ModMaintenance/modmaintenance.tscn index 74ce341a..50ea26f1 100644 --- a/Scenes/ContentManager/ModMaintenance/modmaintenance.tscn +++ b/Scenes/ContentManager/ModMaintenance/modmaintenance.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=4 format=3 uid="uid://6d7nhwfk088o"] [ext_resource type="Script" path="res://Scenes/ContentManager/Scripts/modmaintenance.gd" id="1_qyerb"] -[ext_resource type="PackedScene" uid="uid://ba7nwjvy7m2t5" path="res://Scenes/ContentManager/ModMaintenance/exportmapdata.tscn" id="2_o3o7x"] +[ext_resource type="PackedScene" uid="uid://ba7nwjvy7m2t5" path="res://Scenes/ContentManager/ModMaintenance/exportdata.tscn" id="2_o3o7x"] [sub_resource type="LabelSettings" id="LabelSettings_avegi"] font_size = 42 @@ -56,7 +56,7 @@ text = "Selected script:" layout_mode = 2 selected = 0 item_count = 1 -popup/item_0/text = "export map data" +popup/item_0/text = "export data" [node name="Exportmapdata" parent="VBoxContainer" instance=ExtResource("2_o3o7x")] layout_mode = 2 diff --git a/Scenes/ContentManager/contenteditor.tscn b/Scenes/ContentManager/contenteditor.tscn index cb8f358e..ae36ddfd 100644 --- a/Scenes/ContentManager/contenteditor.tscn +++ b/Scenes/ContentManager/contenteditor.tscn @@ -88,6 +88,7 @@ text = "☰" [node name="ContentList" type="VBoxContainer" parent="HSplitContainer/ContentLists/TabContainer2/Content"] custom_minimum_size = Vector2(0, 200) layout_mode = 2 +size_flags_vertical = 3 [node name="Recent" type="ItemList" parent="HSplitContainer/ContentLists/TabContainer2"] visible = false From 0047b2b9b043af177be5ae97491b5ef568941006 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Sat, 9 Nov 2024 03:54:17 +0100 Subject: [PATCH 06/22] Add drain to playerattribute --- .../Scripts/PlayerAttributeEditor.gd | 1 + Scripts/AttributesWindow.gd | 11 ++++- Scripts/PlayerAttribute.gd | 15 +++++- Scripts/player.gd | 48 +++++++++++-------- 4 files changed, 51 insertions(+), 24 deletions(-) diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd index f8a6f4db..6d37fa07 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd @@ -237,6 +237,7 @@ func _add_drain_attribute_entry(attribute_id: String, amount: float) -> void: spinbox.min_value = 0 spinbox.max_value = 100 # Adjust max value as needed spinbox.step = 0.1 + spinbox.tooltip_text = "The amount to drain each second." spinbox.value = amount drain_attribute_grid_container.add_child(spinbox) diff --git a/Scripts/AttributesWindow.gd b/Scripts/AttributesWindow.gd index 0c42b077..51fa8211 100644 --- a/Scripts/AttributesWindow.gd +++ b/Scripts/AttributesWindow.gd @@ -51,10 +51,19 @@ class AttributeDisplay: hbox.add_child(progress_bar) - # Update the ProgressBar value + # Update the ProgressBar value and visibility func update(attribute: PlayerAttribute) -> void: + if attribute.default_mode.hide_when_empty and attribute.default_mode.current_amount < 1: + set_visibility(false) + else: + set_visibility(true) progress_bar.value = attribute.default_mode.current_amount + func set_visibility(is_visible: bool) -> void: + progress_bar.visible = is_visible + hbox.visible = is_visible + + # Update the minimum value of the ProgressBar func update_min_amount(min_amount: float) -> void: progress_bar.min_value = min_amount diff --git a/Scripts/PlayerAttribute.gd b/Scripts/PlayerAttribute.gd index 5b28ac74..7b2542cd 100644 --- a/Scripts/PlayerAttribute.gd +++ b/Scripts/PlayerAttribute.gd @@ -23,8 +23,11 @@ class DefaultMode: var max_amount: float var current_amount: float var depletion_effect: String + var depleting_effect: String var depletion_rate: float = 0.02 var depletion_timer: Timer + var hide_when_empty: bool # Property to determine if the attribute should hide when empty + var drain_attributes: Dictionary # Property for drain attributes # Reference to the player instance var player: Node var playerattr: PlayerAttribute @@ -36,19 +39,27 @@ class DefaultMode: current_amount = data.get("current_amount", max_amount) depletion_rate = data.get("depletion_rate", 0.02) # Default to 0.02 depletion_effect = data.get("depletion_effect", "none") + depleting_effect = data.get("depleting_effect", "none") + hide_when_empty = data.get("hide_when_empty", false) # Initialize from data + drain_attributes = data.get("drain_attributes", {}) # Initialize from data player = playernode playerattr = myplayerattr start_depletion() # Get data function to return the properties in a dictionary func get_data() -> Dictionary: - return { + var new_data: Dictionary = { "min_amount": min_amount, "max_amount": max_amount, "current_amount": current_amount, "depletion_rate": depletion_rate, - "depletion_effect": depletion_effect + "depletion_effect": depletion_effect, + "depleting_effect": depleting_effect, # Include in output + "hide_when_empty": hide_when_empty } + if not drain_attributes.is_empty(): + new_data["drain_attributes"] = drain_attributes + return new_data # Start depletion for DefaultMode func start_depletion(): diff --git a/Scripts/player.gd b/Scripts/player.gd index fc78344a..307d73bc 100644 --- a/Scripts/player.gd +++ b/Scripts/player.gd @@ -230,6 +230,7 @@ func _check_for_interaction() -> void: func _get_hit(attributeid: String, damage: float): attributes[attributeid].reduce_amount(damage) + func die(): if is_alive: print("Player died") @@ -300,15 +301,21 @@ func _apply_specific_attribute_amounts(medattributes: Array) -> bool: return was_used + # Function to apply the general medical amount from the pool # See the DItem class and its Medical subclass for the properties of DItem.Medical func _apply_general_medical_amount(medical: DItem.Medical) -> bool: - var was: Dictionary = {"used": false} # Keep track of whether the item was used + var was: Dictionary = {"used": false} # Keep track of whether the item was used var pool = medical.amount - - # Get the matching PlayerAttributes based on medical attributes - var matching_player_attributes = get_matching_player_attributes(medical.attributes) - + + # Collect the IDs from medical attributes into an array + var med_attribute_ids = [] + for med_attr in medical.attributes: + med_attribute_ids.append(med_attr.get("id", "")) + + # Get the matching PlayerAttributes based on the collected attribute IDs + var matching_player_attributes = get_matching_player_attributes(med_attribute_ids) + # Separate attributes based on depletion_effect == "death" var death_effect_attributes: Array[PlayerAttribute] = [] var other_attributes: Array[PlayerAttribute] = [] @@ -318,17 +325,19 @@ func _apply_general_medical_amount(medical: DItem.Medical) -> bool: death_effect_attributes.append(playerattribute) else: other_attributes.append(playerattribute) - + # First, apply the pool to attributes with the death effect var sorted_death_attributes = _sort_player_attributes_by_order(death_effect_attributes, medical.order) pool = _apply_pool_to_attributes(sorted_death_attributes, pool, was) - + # Then, apply the remaining pool to the other attributes var sorted_other_attributes = _sort_player_attributes_by_order(other_attributes, medical.order) pool = _apply_pool_to_attributes(sorted_other_attributes, pool, was) - + return was.used + + # Helper function to apply the pool to a given array of PlayerAttributes func _apply_pool_to_attributes(myattributes: Array[PlayerAttribute], pool: float, was: Dictionary) -> float: for playerattribute in myattributes: @@ -386,19 +395,17 @@ func _compare_player_attributes_by_current_amount_descending(a: PlayerAttribute, return a.current_amount > b.current_amount -# Function to retrieve PlayerAttributes that match the IDs in medical.attributes -func get_matching_player_attributes(med_attributes: Array) -> Array[PlayerAttribute]: +# Function to retrieve PlayerAttributes that match the provided IDs in the array +func get_matching_player_attributes(attribute_ids: Array[String]) -> Array[PlayerAttribute]: var matching_attributes: Array[PlayerAttribute] = [] - # Loop over each attribute in the medical item's attributes - for med_attr in med_attributes: - var attr_id = med_attr.get("id", "") - + # Loop over each attribute ID provided + for attr_id in attribute_ids: # Check if the player has an attribute with the same ID if attributes.has(attr_id): # Add the corresponding PlayerAttribute to the array matching_attributes.append(attributes[attr_id]) - + return matching_attributes @@ -474,8 +481,6 @@ func _on_craft_successful(_item: DItem, recipe: DItem.CraftRecipe): add_skill_xp(recipe.skill_progression.id, recipe.skill_progression.xp) - - # Method to retrieve the current state of the player as a dictionary func get_state() -> Dictionary: var attribute_data = {} @@ -495,7 +500,6 @@ func get_state() -> Dictionary: } - # Method to set the player's state from a dictionary func set_state(state: Dictionary) -> void: is_alive = state.get("is_alive", is_alive) @@ -521,7 +525,7 @@ func set_state(state: Dictionary) -> void: # Function to handle adding or subtracting player attribute amounts when equipping/unequipping # When fixed_mode.amount is updated, it will send it's own signal for further processing -func _modify_player_attribute(wearableItem: InventoryItem, is_equipping: bool): +func _modify_player_attribute_on_equip(wearableItem: InventoryItem, is_equipping: bool): # Check if the wearable item has a Wearable property if not wearableItem or not wearableItem.get_property("Wearable"): return @@ -546,10 +550,12 @@ func _modify_player_attribute(wearableItem: InventoryItem, is_equipping: bool): else: player_attribute.modify_temp_amount(-amount) + # Function for handling when a wearable is equipped func _on_wearable_was_equipped(wearableItem: InventoryItem, _wearableSlot: Control): - _modify_player_attribute(wearableItem, true) # true for equipping + _modify_player_attribute_on_equip(wearableItem, true) # true for equipping + # Function for handling when a wearable is unequipped func _on_wearable_was_unequipped(wearableItem: InventoryItem, _wearableSlot: Control): - _modify_player_attribute(wearableItem, false) # false for unequipping + _modify_player_attribute_on_equip(wearableItem, false) # false for unequipping From 814b5b18b870dbc89e134b1b8dea5203a1e8679b Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Sat, 9 Nov 2024 04:12:28 +0100 Subject: [PATCH 07/22] Deplete other attributes --- Scripts/PlayerAttribute.gd | 18 +++++++++++++++++- Scripts/player.gd | 1 - 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Scripts/PlayerAttribute.gd b/Scripts/PlayerAttribute.gd index 7b2542cd..eec644d7 100644 --- a/Scripts/PlayerAttribute.gd +++ b/Scripts/PlayerAttribute.gd @@ -27,7 +27,8 @@ class DefaultMode: var depletion_rate: float = 0.02 var depletion_timer: Timer var hide_when_empty: bool # Property to determine if the attribute should hide when empty - var drain_attributes: Dictionary # Property for drain attributes + # Property for drain attributes. Example: "drain_attributes": {"torso_health": 1.0,"head_health": 1.0} + var drain_attributes: Dictionary # Reference to the player instance var player: Node var playerattr: PlayerAttribute @@ -96,11 +97,26 @@ class DefaultMode: func _on_deplete_tick(): modify_current_amount(-depletion_rate) + # Check if depleting_effect is set to "drain other attributes" + if depleting_effect == "drain other attributes" and not drain_attributes.is_empty(): + # Collect the attribute IDs from the drain_attributes dictionary + var attribute_ids = drain_attributes.keys() + + # Get the matching player attributes + var attributes_to_drain = player.get_matching_player_attributes(attribute_ids) + + # Drain the specified amount from each attribute + for attr in attributes_to_drain: + if attr: + var drain_amount = drain_attributes.get(attr.id, 0.0) + attr.modify_current_amount(-drain_amount) + # Stop depletion if at min if is_at_min(): stop_depletion() + # Inner class for FixedMode. This is used in the background to control some game mechanics # but can be influenced by items and game events. For example, # inventory_space may be altered by equipping items diff --git a/Scripts/player.gd b/Scripts/player.gd index 307d73bc..bdbee37f 100644 --- a/Scripts/player.gd +++ b/Scripts/player.gd @@ -337,7 +337,6 @@ func _apply_general_medical_amount(medical: DItem.Medical) -> bool: return was.used - # Helper function to apply the pool to a given array of PlayerAttributes func _apply_pool_to_attributes(myattributes: Array[PlayerAttribute], pool: float, was: Dictionary) -> float: for playerattribute in myattributes: From 70ff42bbea4f0fa04b50ec09c3456e3b50a446c2 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Sat, 9 Nov 2024 18:53:01 +0100 Subject: [PATCH 08/22] Give poison attack --- Mods/Core/Mobs/Mobs.json | 19 ++--------- .../PlayerAttributes/PlayerAttributes.json | 33 ++++++++++--------- .../Custom_Editors/MobEditor.tscn | 1 + .../Custom_Editors/Scripts/MobEditor.gd | 4 +-- .../Scripts/PlayerAttributeEditor.gd | 4 +-- 5 files changed, 24 insertions(+), 37 deletions(-) diff --git a/Mods/Core/Mobs/Mobs.json b/Mods/Core/Mobs/Mobs.json index 66ed3ba5..5415249c 100644 --- a/Mods/Core/Mobs/Mobs.json +++ b/Mods/Core/Mobs/Mobs.json @@ -238,7 +238,7 @@ "id": "venom_crawler", "idle_move_speed": 0.6, "loot_group": "mob_loot", - "melee_damage": 10, + "melee_damage": -10, "melee_range": 1, "move_speed": 2.8, "name": "Venom Crawler", @@ -247,22 +247,7 @@ "sprite": "venom_crawler_48.png", "targetattributes": [ { - "id": "head_health" - }, - { - "id": "torso_health" - }, - { - "id": "left_arm_health" - }, - { - "id": "right_arm_health" - }, - { - "id": "left_leg_health" - }, - { - "id": "right_leg_health" + "id": "poison" } ] }, diff --git a/Mods/Core/PlayerAttributes/PlayerAttributes.json b/Mods/Core/PlayerAttributes/PlayerAttributes.json index 1b255b0a..f131250f 100644 --- a/Mods/Core/PlayerAttributes/PlayerAttributes.json +++ b/Mods/Core/PlayerAttributes/PlayerAttributes.json @@ -111,7 +111,6 @@ "scavenger_skitter", "iron_stalker", "disruptor_drone", - "venom_crawler", "outpost_guardian" ] } @@ -148,8 +147,7 @@ "scavenger_skitter", "iron_stalker", "disruptor_drone", - "outpost_guardian", - "venom_crawler" + "outpost_guardian" ] } }, @@ -185,8 +183,7 @@ "scavenger_skitter", "iron_stalker", "outpost_guardian", - "disruptor_drone", - "venom_crawler" + "disruptor_drone" ] } }, @@ -222,8 +219,7 @@ "scavenger_skitter", "iron_stalker", "outpost_guardian", - "disruptor_drone", - "venom_crawler" + "disruptor_drone" ] } }, @@ -259,7 +255,6 @@ "scavenger_skitter", "iron_stalker", "disruptor_drone", - "venom_crawler", "outpost_guardian" ] } @@ -296,7 +291,6 @@ "scavenger_skitter", "iron_stalker", "disruptor_drone", - "venom_crawler", "outpost_guardian" ] } @@ -328,14 +322,14 @@ "current_amount": 0, "depleting_effect": "drain other attributes", "depletion_effect": "none", - "depletion_rate": 0.1, + "depletion_rate": 1, "drain_attributes": { - "head_health": 1, - "left_arm_health": 1, - "left_leg_health": 1, - "right_arm_health": 1, - "right_leg_health": 1, - "torso_health": 1 + "head_health": 0.1, + "left_arm_health": 0.1, + "left_leg_health": 0.1, + "right_arm_health": 0.1, + "right_leg_health": 0.1, + "torso_health": 0.1 }, "hide_when_empty": true, "max_amount": 100, @@ -344,6 +338,13 @@ "description": "You are poisoned! Your health will be drained until the poison is cured or wears out.", "id": "poison", "name": "Poison", + "references": { + "core": { + "mobs": [ + "venom_crawler" + ] + } + }, "sprite": "skull_poison_32.png" } ] \ No newline at end of file diff --git a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn index 65029f44..2169adac 100644 --- a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn @@ -154,6 +154,7 @@ text = "Damage" [node name="MeleeDamageSpinBox" type="SpinBox" parent="VBoxContainer/FormGrid/MeleeHBoxContainer"] layout_mode = 2 +min_value = -100.0 value = 20.0 [node name="MeleeRangeLabel" type="Label" parent="VBoxContainer/FormGrid/MeleeHBoxContainer"] diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd index 6fb15ee1..2aeb96a8 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd @@ -109,14 +109,14 @@ func _on_save_button_button_up() -> void: dmob.loot_group = ItemGroupTextEdit.text if ItemGroupTextEdit.text else "" # Set dash special move data based on checkbox - if dash_check_box.pressed: + if dash_check_box.button_pressed: dmob.special_moves["dash"] = { "speed_multiplier": dash_speed_multiplier_spin_box.value, "cooldown": dash_cooldown_spin_box.value, "duration": dash_duration_spin_box.value } else: - dmob.special_moves["dash"] = {} # Clear dash if checkbox is unchecked + dmob.special_moves = {} # Clear dash if checkbox is unchecked # Save attributes dmob.targetattributes = _get_attributes_from_ui() diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd index 6d37fa07..e3edd88b 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd @@ -97,7 +97,7 @@ func process_default_mode() -> void: hide_when_empty_check_box.button_pressed = dplayerattribute.default_mode.hide_when_empty # Load drain attributes into the grid container - if dplayerattribute.drain_attributes: + if dplayerattribute.default_mode.drain_attributes: _load_drain_attributes_into_ui(dplayerattribute.default_mode.drain_attributes) else: mode_tab_container.set_current_tab(0) # Hide default_mode tab if it doesn't exist @@ -110,7 +110,7 @@ func process_fixed_mode() -> void: if fixed_amount_spin_box != null: fixed_amount_spin_box.value = dplayerattribute.fixed_mode.amount else: - mode_tab_container.set_current_tab(1) # Hide fixed_mode tab if it doesn't exist + mode_tab_container.set_current_tab(0) # Hide fixed_mode tab if it doesn't exist # The editor is closed, destroy the instance From e58a024c03484fd88f4f74fb12728bf302366034 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Sat, 9 Nov 2024 19:21:12 +0100 Subject: [PATCH 09/22] Add maxed effect --- .../PlayerAttributes/PlayerAttributes.json | 11 ++++++++++- .../Custom_Editors/PlayerAttributeEditor.tscn | 18 +++++++++++++++++- .../Scripts/PlayerAttributeEditor.gd | 4 ++++ Scripts/Gamedata/DPlayerAttribute.gd | 6 +++++- Scripts/PlayerAttribute.gd | 12 ++++++++++-- Scripts/player.gd | 2 +- 6 files changed, 47 insertions(+), 6 deletions(-) diff --git a/Mods/Core/PlayerAttributes/PlayerAttributes.json b/Mods/Core/PlayerAttributes/PlayerAttributes.json index f131250f..1b4be950 100644 --- a/Mods/Core/PlayerAttributes/PlayerAttributes.json +++ b/Mods/Core/PlayerAttributes/PlayerAttributes.json @@ -8,6 +8,7 @@ "depletion_rate": 0.02, "hide_when_empty": false, "max_amount": 100, + "maxed_effect": "none", "min_amount": 0 }, "description": "You starve when this is empty. You are full when this is full.", @@ -55,6 +56,7 @@ "depletion_rate": 0.02, "hide_when_empty": false, "max_amount": 100, + "maxed_effect": "none", "min_amount": 0 }, "description": "The amount of water the player has in their body. Running out will mean death.", @@ -90,6 +92,7 @@ "depletion_rate": 0, "hide_when_empty": false, "max_amount": 100, + "maxed_effect": "none", "min_amount": 0 }, "description": "The health of the player's head. Critical for survival.", @@ -126,6 +129,7 @@ "depletion_rate": 0, "hide_when_empty": false, "max_amount": 100, + "maxed_effect": "none", "min_amount": 0 }, "description": "The health of the player's torso. Vital for survival.", @@ -162,6 +166,7 @@ "depletion_rate": 0, "hide_when_empty": false, "max_amount": 100, + "maxed_effect": "none", "min_amount": 0 }, "description": "The health of the player's left arm.", @@ -198,6 +203,7 @@ "depletion_rate": 0, "hide_when_empty": false, "max_amount": 100, + "maxed_effect": "none", "min_amount": 0 }, "description": "The health of the player's right arm.", @@ -234,6 +240,7 @@ "depletion_rate": 0, "hide_when_empty": false, "max_amount": 100, + "maxed_effect": "none", "min_amount": 0 }, "description": "The health of the player's left leg.", @@ -270,6 +277,7 @@ "depletion_rate": 0, "hide_when_empty": false, "max_amount": 100, + "maxed_effect": "none", "min_amount": 0 }, "description": "The health of the player's right leg.", @@ -333,9 +341,10 @@ }, "hide_when_empty": true, "max_amount": 100, + "maxed_effect": "death", "min_amount": 0 }, - "description": "You are poisoned! Your health will be drained until the poison is cured or wears out.", + "description": "You are poisoned! Your health will be drained until the poison is cured or wears out. If your body is full of poison, you die!", "id": "poison", "name": "Poison", "references": { diff --git a/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn b/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn index 22a4fc67..df9d4480 100644 --- a/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn @@ -6,7 +6,7 @@ [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5jqmb"] -[node name="PlayerAttributeEditor" type="Control" node_paths=PackedStringArray("icon_rect", "id_text_label", "path_text_label", "name_text_edit", "description_text_edit", "sprite_selector", "min_amount_spinbox", "max_amount_spinbox", "current_amount_spinbox", "depletion_rate_spinbox", "depletion_effect", "ui_color_picker", "mode_tab_container", "fixed_grid", "fixed_amount_spin_box", "hide_when_empty_check_box", "depleting_effect_option_button", "drain_attribute_grid_container", "drain_attribute_panel_container", "default_grid")] +[node name="PlayerAttributeEditor" type="Control" node_paths=PackedStringArray("icon_rect", "id_text_label", "path_text_label", "name_text_edit", "description_text_edit", "sprite_selector", "min_amount_spinbox", "max_amount_spinbox", "current_amount_spinbox", "depletion_rate_spinbox", "depletion_effect", "maxed_effect_option_button", "ui_color_picker", "mode_tab_container", "fixed_grid", "fixed_amount_spin_box", "hide_when_empty_check_box", "depleting_effect_option_button", "drain_attribute_grid_container", "drain_attribute_panel_container", "default_grid")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -25,6 +25,7 @@ max_amount_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/D current_amount_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/CurrentAmountSpinBox") depletion_rate_spinbox = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/DepletionRateSpinBox") depletion_effect = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/DepletionEffectOptionButton") +maxed_effect_option_button = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/MaxedEffectOptionButton") ui_color_picker = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid/UIColorPicker") mode_tab_container = NodePath("VBoxContainer/FormGrid/ModeTabContainer") fixed_grid = NodePath("VBoxContainer/FormGrid/ModeTabContainer/Fixed") @@ -186,6 +187,21 @@ tooltip_text = "The amount to subtract each second. With a \"max amount\" of 100 step = 0.01 value = 0.02 +[node name="MaxedEffectLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] +layout_mode = 2 +text = "Maxed effect" + +[node name="MaxedEffectOptionButton" type="OptionButton" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] +layout_mode = 2 +tooltip_text = "The effect that occurs when this attribute has reached the maximum value. +none: No effect will occur when this attribute is maxed +death: the player dies when the attribute is maxed." +selected = 0 +item_count = 2 +popup/item_0/text = "none" +popup/item_1/text = "death" +popup/item_1/id = 1 + [node name="DepletionEffectLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 text = "Depletion effect" diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd index e3edd88b..59659ee3 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/PlayerAttributeEditor.gd @@ -17,6 +17,7 @@ extends Control @export var current_amount_spinbox: SpinBox = null @export var depletion_rate_spinbox: SpinBox = null @export var depletion_effect: OptionButton = null +@export var maxed_effect_option_button: OptionButton = null @export var ui_color_picker: ColorPicker = null # An attribute can have either default mode or fixed mode. The tab that is visible will get # saved into the dplayerattribute's data. @@ -85,6 +86,8 @@ func process_default_mode() -> void: current_amount_spinbox.value = dplayerattribute.default_mode.current_amount if depletion_rate_spinbox != null: depletion_rate_spinbox.value = dplayerattribute.default_mode.depletion_rate + if maxed_effect_option_button != null: + select_optionbutton_item_by_text(dplayerattribute.default_mode.maxed_effect, maxed_effect_option_button) if depletion_effect != null: select_optionbutton_item_by_text(dplayerattribute.default_mode.depletion_effect, depletion_effect) if depleting_effect_option_button != null: @@ -155,6 +158,7 @@ func save_default_mode() -> void: dplayerattribute.default_mode.max_amount = max_amount_spinbox.value dplayerattribute.default_mode.current_amount = current_amount_spinbox.value dplayerattribute.default_mode.depletion_rate = depletion_rate_spinbox.value + dplayerattribute.default_mode.maxed_effect = maxed_effect_option_button.get_item_text(maxed_effect_option_button.selected) dplayerattribute.default_mode.depletion_effect = depletion_effect.get_item_text(depletion_effect.selected) dplayerattribute.default_mode.depleting_effect = depleting_effect_option_button.get_item_text(depleting_effect_option_button.selected) dplayerattribute.default_mode.ui_color = ui_color_picker.color.to_html() diff --git a/Scripts/Gamedata/DPlayerAttribute.gd b/Scripts/Gamedata/DPlayerAttribute.gd index f6da664b..09bf2889 100644 --- a/Scripts/Gamedata/DPlayerAttribute.gd +++ b/Scripts/Gamedata/DPlayerAttribute.gd @@ -9,6 +9,7 @@ extends RefCounted # "default_mode": { # "color": "258d1bff", # "current_amount": 100, +# "maxed_effect": "death", # "depletion_effect": "death", # "depleting_effect": "drain", # "depletion_rate": 0.02, @@ -58,6 +59,7 @@ class DefaultMode: var current_amount: float # Current value of the attribute (e.g., current health level) var depletion_rate: float # The rate at which the amount depletes every second var ui_color: String # Variable to store the UI color as a string (e.g., "ffffffff" for white) + var maxed_effect: String var depletion_effect: String # The effect that will happen when depleted var depleting_effect: String # New property for handling the effect when depleting var hide_when_empty: bool # New property to determine if the attribute should hide when empty @@ -70,6 +72,7 @@ class DefaultMode: current_amount = data.get("current_amount", max_amount) # Default to max amount if not provided depletion_rate = data.get("depletion_rate", 0.02) # Default to 0.02 if not provided ui_color = data.get("color", "ffffffff") # Default to white if not provided + maxed_effect = data.get("maxed_effect", "none") depletion_effect = data.get("depletion_effect", "none") depleting_effect = data.get("depleting_effect", "none") # Initialize from data hide_when_empty = data.get("hide_when_empty", false) # Initialize from data @@ -83,8 +86,9 @@ class DefaultMode: "current_amount": current_amount, "depletion_rate": depletion_rate, "color": ui_color, + "maxed_effect": maxed_effect, "depletion_effect": depletion_effect, - "depleting_effect": depleting_effect, # Include in output + "depleting_effect": depleting_effect, "hide_when_empty": hide_when_empty } if not drain_attributes.is_empty(): diff --git a/Scripts/PlayerAttribute.gd b/Scripts/PlayerAttribute.gd index eec644d7..9f8eea52 100644 --- a/Scripts/PlayerAttribute.gd +++ b/Scripts/PlayerAttribute.gd @@ -22,6 +22,7 @@ class DefaultMode: var min_amount: float var max_amount: float var current_amount: float + var maxed_effect: String var depletion_effect: String var depleting_effect: String var depletion_rate: float = 0.02 @@ -39,6 +40,7 @@ class DefaultMode: max_amount = data.get("max_amount", 100.0) current_amount = data.get("current_amount", max_amount) depletion_rate = data.get("depletion_rate", 0.02) # Default to 0.02 + maxed_effect = data.get("maxed_effect", "none") depletion_effect = data.get("depletion_effect", "none") depleting_effect = data.get("depleting_effect", "none") hide_when_empty = data.get("hide_when_empty", false) # Initialize from data @@ -54,6 +56,7 @@ class DefaultMode: "max_amount": max_amount, "current_amount": current_amount, "depletion_rate": depletion_rate, + "maxed_effect": maxed_effect, "depletion_effect": depletion_effect, "depleting_effect": depleting_effect, # Include in output "hide_when_empty": hide_when_empty @@ -88,11 +91,16 @@ class DefaultMode: func is_at_min() -> bool: return current_amount <= min_amount - # Function to modify the current amount safely (for DefaultMode) + # Modify the `modify_current_amount` function to restart depletion when needed func modify_current_amount(amount: float): + var was_at_min = is_at_min() # Check if the attribute was at min before modifying current_amount = clamp(current_amount + amount, min_amount, max_amount) _on_attribute_changed() + # If the attribute was previously at min but now is above min, restart depletion + if was_at_min and current_amount > min_amount: + start_depletion() + # Function that gets called every tick to decrease the attribute func _on_deplete_tick(): modify_current_amount(-depletion_rate) @@ -100,7 +108,7 @@ class DefaultMode: # Check if depleting_effect is set to "drain other attributes" if depleting_effect == "drain other attributes" and not drain_attributes.is_empty(): # Collect the attribute IDs from the drain_attributes dictionary - var attribute_ids = drain_attributes.keys() + var attribute_ids: Array = drain_attributes.keys() # Get the matching player attributes var attributes_to_drain = player.get_matching_player_attributes(attribute_ids) diff --git a/Scripts/player.gd b/Scripts/player.gd index bdbee37f..b3bcbda2 100644 --- a/Scripts/player.gd +++ b/Scripts/player.gd @@ -395,7 +395,7 @@ func _compare_player_attributes_by_current_amount_descending(a: PlayerAttribute, # Function to retrieve PlayerAttributes that match the provided IDs in the array -func get_matching_player_attributes(attribute_ids: Array[String]) -> Array[PlayerAttribute]: +func get_matching_player_attributes(attribute_ids: Array) -> Array[PlayerAttribute]: var matching_attributes: Array[PlayerAttribute] = [] # Loop over each attribute ID provided From fd67c252feed49f2415d1e387f09bf6764b80361 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Sat, 9 Nov 2024 19:29:56 +0100 Subject: [PATCH 10/22] player dies full of poison --- Scripts/PlayerAttribute.gd | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Scripts/PlayerAttribute.gd b/Scripts/PlayerAttribute.gd index 9f8eea52..7d6ebc41 100644 --- a/Scripts/PlayerAttribute.gd +++ b/Scripts/PlayerAttribute.gd @@ -80,12 +80,21 @@ class DefaultMode: depletion_timer.stop() depletion_timer.queue_free() - # Function to handle when the attribute changes (e.g., health drops to 0) + # Function to handle when the attribute changes (e.g., health drops to 0 or reaches max) func _on_attribute_changed(): Helper.signal_broker.player_attribute_changed.emit(player, playerattr) + # Trigger the depletion effect if amount drops to min and the effect is "death" if is_at_min() and depletion_effect == "death": player.die() + + # Trigger the maxed effect if the amount reaches max and the effect is "death" + if is_at_max() and maxed_effect == "death": + player.die() + + # Function to check if the attribute is at maximum value (for DefaultMode) + func is_at_max() -> bool: + return current_amount >= max_amount # Function to check if the attribute is at minimum value (for DefaultMode) func is_at_min() -> bool: From 0ab6c779e1b77961ca96eb3a31e8722914919ed6 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Sun, 10 Nov 2024 23:08:55 +0100 Subject: [PATCH 11/22] Add antidote --- ItemProtosets.tres | 37 +++++++++++++++--- Mods/Core/Itemgroups/Itemgroups.json | 20 ++++------ Mods/Core/Items/Items.json | 37 +++++++++++++++--- Mods/Core/Items/antidote_32.png | Bin 0 -> 1615 bytes Mods/Core/Items/antidote_32.png.import | 34 ++++++++++++++++ .../PlayerAttributes/PlayerAttributes.json | 3 ++ Scripts/player.gd | 14 +++---- 7 files changed, 115 insertions(+), 30 deletions(-) create mode 100644 Mods/Core/Items/antidote_32.png create mode 100644 Mods/Core/Items/antidote_32.png.import diff --git a/ItemProtosets.tres b/ItemProtosets.tres index 153366aa..24a36b87 100644 --- a/ItemProtosets.tres +++ b/ItemProtosets.tres @@ -44,7 +44,6 @@ json_data = "[ \"mob_loot\", \"destroyed_furniture_medium\", \"disassembled_furniture_medium\", - \"test_items\", \"debris_urban\" ], \"items\": [ @@ -3041,8 +3040,7 @@ json_data = "[ \"core\": { \"itemgroups\": [ \"tree_destroyed\", - \"generic_forest_finds\", - \"test_items\" + \"generic_forest_finds\" ], \"items\": [ \"stone_spear\" @@ -3067,8 +3065,7 @@ json_data = "[ \"references\": { \"core\": { \"itemgroups\": [ - \"generic_field_finds\", - \"test_items\" + \"generic_field_finds\" ], \"items\": [ \"stone_spear\" @@ -3299,5 +3296,35 @@ json_data = "[ \"two_handed\": false, \"volume\": 150, \"weight\": 5 + }, + { + \"Medical\": { + \"amount\": -50, + \"attributes\": [ + { + \"amount\": 0, + \"id\": \"poison\" + } + ], + \"order\": \"Lowest first\" + }, + \"description\": \"A small bottle that contains antidote. It helps to recover from poison.\", + \"id\": \"bottle_antidote\", + \"image\": \"./Mods/Core/Items/antidote_32.png\", + \"max_stack_size\": 5, + \"name\": \"Bottle of antidote\", + \"references\": { + \"core\": { + \"itemgroups\": [ + \"test_items\", + \"kitchen_cupboard\" + ] + } + }, + \"sprite\": \"antidote_32.png\", + \"stack_size\": 1, + \"two_handed\": false, + \"volume\": 5, + \"weight\": 0.1 } ]" diff --git a/Mods/Core/Itemgroups/Itemgroups.json b/Mods/Core/Itemgroups/Itemgroups.json index 64aa4b4c..dac3c52d 100644 --- a/Mods/Core/Itemgroups/Itemgroups.json +++ b/Mods/Core/Itemgroups/Itemgroups.json @@ -50,6 +50,12 @@ "max": 1, "min": 1, "probability": 20 + }, + { + "id": "bottle_antidote", + "max": 1, + "min": 1, + "probability": 20 } ], "mode": "Collection", @@ -1055,22 +1061,10 @@ "probability": 100 }, { - "id": "long_stick", - "max": 1, - "min": 1, - "probability": 100 - }, - { - "id": "sharp_stone", + "id": "bottle_antidote", "max": 1, "min": 1, "probability": 100 - }, - { - "id": "steel_scrap", - "max": 22, - "min": 22, - "probability": 100 } ], "mode": "Collection", diff --git a/Mods/Core/Items/Items.json b/Mods/Core/Items/Items.json index b6ce5909..0c54e6d6 100644 --- a/Mods/Core/Items/Items.json +++ b/Mods/Core/Items/Items.json @@ -38,7 +38,6 @@ "mob_loot", "destroyed_furniture_medium", "disassembled_furniture_medium", - "test_items", "debris_urban" ], "items": [ @@ -3035,8 +3034,7 @@ "core": { "itemgroups": [ "tree_destroyed", - "generic_forest_finds", - "test_items" + "generic_forest_finds" ], "items": [ "stone_spear" @@ -3061,8 +3059,7 @@ "references": { "core": { "itemgroups": [ - "generic_field_finds", - "test_items" + "generic_field_finds" ], "items": [ "stone_spear" @@ -3293,5 +3290,35 @@ "two_handed": false, "volume": 150, "weight": 5 + }, + { + "Medical": { + "amount": -50, + "attributes": [ + { + "amount": 0, + "id": "poison" + } + ], + "order": "Lowest first" + }, + "description": "A small bottle that contains antidote. It helps to recover from poison.", + "id": "bottle_antidote", + "image": "./Mods/Core/Items/antidote_32.png", + "max_stack_size": 5, + "name": "Bottle of antidote", + "references": { + "core": { + "itemgroups": [ + "test_items", + "kitchen_cupboard" + ] + } + }, + "sprite": "antidote_32.png", + "stack_size": 1, + "two_handed": false, + "volume": 5, + "weight": 0.1 } ] \ No newline at end of file diff --git a/Mods/Core/Items/antidote_32.png b/Mods/Core/Items/antidote_32.png new file mode 100644 index 0000000000000000000000000000000000000000..6821dd12ad7cf46f109e8f9f59dc57bdee2e026e GIT binary patch literal 1615 zcmbu9c{J2(7{`Azk|-U~*qg|jZ5Cw9R%4km!;m8DU}Tt~StK&DQ_8hwiH0_}qNchO zB4S38J+fvpha&gTmF5a{f8*ZM{p>LCkw3XZ0d zBAECG5xI9B6D886Lr;ND{D_XVm?!fLKn1-8Y~0?+_zn zV_7+0a{$Mu+=gXcvsW+x6%~q#cx_y}DC}-*$e(|svSRo7>HVft%dw>^adU#Ulv~yEFh&~eLyVo9Oet2JGL-)N z_XBuTcH2D|G5i@$?(scIEoU(UE1pY@eN*_gf#h~zD|6Q_c~Q~pTX^r8?ia2&>+untvtR?Dm5_CYu908Xg7ye z(?ifyx8f~icIvSvFLFyNmtH8dkGidQmd(n1E?Gi!+I`rZr0M@=jo4IVJlQ!co?3OlhewCo`HPU<)_6?lm}WF&Gq%2R$Sj|jqxv` zv?Mqj9#^&h(#yq^X&6lx-XRnUhZyxGL>It^>s_zO!}u)UGHR?;HG$r7QPYmnhksx{ z_Ox5pXjHg9@$TJh-2BVP63sK!6H0XySe2&(pIWywY{CX6el&XhfgN8fCwVE$$y_|;0NPpAZ7rhF(nH3hbGxP0=wyu6L z8}OE`z6nXT)-RoQD{pfoVeJVxFI+*f3N>hV)@-L)r8YLxzN)GUpYDm* z&S$b%dm>#+L8|w9@WSNfmO#urHsVHKGiG75N(#StvnMTGh(S%FK~p7vJPq zu+F_7w}YqYCZ==b#d0X`Z*0iK6@G>3VEf4Fz`$<)k-9ZDZJafOtMYjMNWf<6jAa$; z^4F{rJ%Epjx@yV$zq9C9=D*UbIf^+Al|lg z_-q+WPfI>D`}3Hmfh;PwjYqy+o&aCyN=dFG#Al4glsI_Yo58F_%XAjDbBP*ZQ&8!? z9DaRc<1)K%d6^MlF=d|suMUm0@M#s39BhFek+3YsUpcfOM>65Jj!w{6D_Fre3_ngs=mssG+ z+d&5|N{lmH1Z~5<+7*(?M+s=ncL*D=B>TGy9UnieJKa4O{q2#k)(EDau um|^f_ab&j5XzyyFjvr6o^_%UdovWN%PRIuE2m1g2JAie-W9}acO#TbdTAY&r literal 0 HcmV?d00001 diff --git a/Mods/Core/Items/antidote_32.png.import b/Mods/Core/Items/antidote_32.png.import new file mode 100644 index 00000000..c67f8c52 --- /dev/null +++ b/Mods/Core/Items/antidote_32.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dfaljl61p1krn" +path="res://.godot/imported/antidote_32.png-843f603b8918b33ff96475b54885794d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Mods/Core/Items/antidote_32.png" +dest_files=["res://.godot/imported/antidote_32.png-843f603b8918b33ff96475b54885794d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Mods/Core/PlayerAttributes/PlayerAttributes.json b/Mods/Core/PlayerAttributes/PlayerAttributes.json index 1b4be950..80e00765 100644 --- a/Mods/Core/PlayerAttributes/PlayerAttributes.json +++ b/Mods/Core/PlayerAttributes/PlayerAttributes.json @@ -349,6 +349,9 @@ "name": "Poison", "references": { "core": { + "items": [ + "bottle_antidote" + ], "mobs": [ "venom_crawler" ] diff --git a/Scripts/player.gd b/Scripts/player.gd index b3bcbda2..09cd572d 100644 --- a/Scripts/player.gd +++ b/Scripts/player.gd @@ -287,9 +287,9 @@ func _apply_specific_attribute_amounts(medattributes: Array) -> bool: for medattribute in medattributes: # Get the values from the current player's attribute var playerattribute: PlayerAttribute = attributes[medattribute.id] - var current_amount = playerattribute.current_amount - var max_amount = playerattribute.max_amount - var min_amount = playerattribute.min_amount + var current_amount = playerattribute.default_mode.current_amount + var max_amount = playerattribute.default_mode.max_amount + var min_amount = playerattribute.default_mode.min_amount # Make sure we don't add or subtract more then the min and max amount var new_amount = clamp(current_amount + medattribute.amount, min_amount, max_amount) @@ -321,7 +321,7 @@ func _apply_general_medical_amount(medical: DItem.Medical) -> bool: var other_attributes: Array[PlayerAttribute] = [] for playerattribute in matching_player_attributes: - if playerattribute.depletion_effect == "death": + if playerattribute.default_mode.depletion_effect == "death": death_effect_attributes.append(playerattribute) else: other_attributes.append(playerattribute) @@ -340,9 +340,9 @@ func _apply_general_medical_amount(medical: DItem.Medical) -> bool: # Helper function to apply the pool to a given array of PlayerAttributes func _apply_pool_to_attributes(myattributes: Array[PlayerAttribute], pool: float, was: Dictionary) -> float: for playerattribute in myattributes: - var current_amount = playerattribute.current_amount - var max_amount = playerattribute.max_amount - var min_amount = playerattribute.min_amount + var current_amount = playerattribute.default_mode.current_amount + var max_amount = playerattribute.default_mode.max_amount + var min_amount = playerattribute.default_mode.min_amount # Calculate how much can actually be added from the pool var additional_amount = min(pool, max_amount - current_amount) From 30e02e377fadde77d9cacc498d13d9125a119772 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Sun, 10 Nov 2024 23:35:45 +0100 Subject: [PATCH 12/22] Mob editor extra attributes --- .../PlayerAttributes/PlayerAttributes.json | 17 +++++ Mods/Core/PlayerAttributes/trapping_32.png | Bin 0 -> 1159 bytes .../PlayerAttributes/trapping_32.png.import | 34 ++++++++++ .../Custom_Editors/MobEditor.tscn | 61 ++++++++++++++++-- .../Custom_Editors/PlayerAttributeEditor.tscn | 4 +- 5 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 Mods/Core/PlayerAttributes/trapping_32.png create mode 100644 Mods/Core/PlayerAttributes/trapping_32.png.import diff --git a/Mods/Core/PlayerAttributes/PlayerAttributes.json b/Mods/Core/PlayerAttributes/PlayerAttributes.json index 80e00765..a126baf0 100644 --- a/Mods/Core/PlayerAttributes/PlayerAttributes.json +++ b/Mods/Core/PlayerAttributes/PlayerAttributes.json @@ -358,5 +358,22 @@ } }, "sprite": "skull_poison_32.png" + }, + { + "default_mode": { + "color": "a6a6a6ff", + "current_amount": 0, + "depleting_effect": "stun", + "depletion_effect": "none", + "depletion_rate": 10, + "hide_when_empty": true, + "max_amount": 10, + "maxed_effect": "none", + "min_amount": 0 + }, + "description": "You are stunned and can't move!", + "id": "stun", + "name": "Stun", + "sprite": "trapping_32.png" } ] \ No newline at end of file diff --git a/Mods/Core/PlayerAttributes/trapping_32.png b/Mods/Core/PlayerAttributes/trapping_32.png new file mode 100644 index 0000000000000000000000000000000000000000..e250e21699d307ee224227626a8249e0da6b790d GIT binary patch literal 1159 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWND40;< z8d2hwnUl)kY!wq)oLW>2CSzRk%ky&b6H|&~l5$e>Qc{a_3oIrN*0?6jbPebu%RQB>?S`0NLe|Sdz+MWME{XZ(yo#Xry3dY-M0%Wn_~3 zT(uRbMgXKHBr`Xa!N9-@iVWWzRyzcgV+XsnC=n=WxPHeZ(7Cv6ZmbCxB6Dq?PCTa&Ir0kQQt<-j3 zSGdjbO^MZ3(FEnQ6I~SMe^j`8ovm*}*p|wSl>PVne=A;VxZOWz*6yi4zI`kE`{&Ob zfAQYAcbYQTOyuXv@FyknJI8%{wfKH>!~OgBR}^|~T5l&!g|l>~>`eH|my#zt zA?Dw$_7{Ku)~?BX`9x$lwa(!6$ zeAlBFp9C4O+W#z=@Z?hWyd$@x8yX83BNw|GbKXhHl>VIZ%*f@edcPb`Lfq~atC<1G zqMHR>C#vq@yE^ml^*=YGAM~#6Tz6%m&$(l!$GxZfZY|$^cWp?$$>#rU^OQ_I$V#+xt`{ZN6axTZ-L8p+7pe9p1WYeBN?0Hp=$L z>(|+<=jJo~`N$XPqQoq4I(R~Z!1rm7*VkIFnc4nXSjX&LLvM|%#F2=+V=jJP$=A;+ za9Gq7Z`!%lx_FP}=is0N&u)lp$g~sds?e7>l6Z0||8a|rv-s_*Stc=BFz!3LMbjzy zae<)Oqm|W5{zpx|I(adF*L}7KCWQ+54O34){d7JcVU75kmoGE7nHtPmEXaRp?{794 z2i+BMRx@uz@m0iG`0L5{_V7ONI27h{;CPv~DWBiI^OE+i`=oew+p{nK$$z&i;?2E_ zH}1;z`^59U_qX!?7Ns*gWBE0+`cQ9|<#RcY^)8Li{nNAd>51FVijT9Mh|pEbi&x literal 0 HcmV?d00001 diff --git a/Mods/Core/PlayerAttributes/trapping_32.png.import b/Mods/Core/PlayerAttributes/trapping_32.png.import new file mode 100644 index 00000000..eb6c9584 --- /dev/null +++ b/Mods/Core/PlayerAttributes/trapping_32.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cunhuukh4cpay" +path="res://.godot/imported/trapping_32.png-13f1368492e20b8fd68e4ea744470d2d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Mods/Core/PlayerAttributes/trapping_32.png" +dest_files=["res://.godot/imported/trapping_32.png-13f1368492e20b8fd68e4ea744470d2d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn index 2169adac..d4769d0a 100644 --- a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn @@ -47,7 +47,7 @@ dash_check_box = NodePath("VBoxContainer/FormGrid/SpecialMovesHBoxContainer3/Das dash_speed_multiplier_spin_box = NodePath("VBoxContainer/FormGrid/SpecialMovesHBoxContainer3/SpeedMultiplierSpinBox") dash_duration_spin_box = NodePath("VBoxContainer/FormGrid/SpecialMovesHBoxContainer3/DurationSpinBox") dash_cooldown_spin_box = NodePath("VBoxContainer/FormGrid/SpecialMovesHBoxContainer3/CooldownSpinBox") -attributesGridContainer = NodePath("VBoxContainer/FormGrid/PanelContainer/AttributesGridContainer") +attributesGridContainer = NodePath("VBoxContainer/FormGrid/AttributesHBoxContainer/AnyOfPanelContainer/AnyOfVBoxContainer/AnyOfAttributesGridContainer") [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 1 @@ -167,6 +167,25 @@ tooltip_text = "The maximum distance it can reach when attacking in melee" step = 0.5 value = 1.5 +[node name="MeleeCooldownLabel" type="Label" parent="VBoxContainer/FormGrid/MeleeHBoxContainer"] +layout_mode = 2 +text = "Cooldown" + +[node name="MeleeCooldownSpinbox" type="SpinBox" parent="VBoxContainer/FormGrid/MeleeHBoxContainer"] +layout_mode = 2 +tooltip_text = "The cooldown in seconds. During the cooldown, the mob cannot perform another melee attack." +step = 0.5 +value = 1.5 + +[node name="MeleeKnockbackLabel" type="Label" parent="VBoxContainer/FormGrid/MeleeHBoxContainer"] +layout_mode = 2 +text = "Knockback" + +[node name="MeleeKnockbackSpinbox" type="SpinBox" parent="VBoxContainer/FormGrid/MeleeHBoxContainer"] +layout_mode = 2 +tooltip_text = "The number of tiles that the player will be knocked back. If the value is 0, no knockback will be applied." +step = 0.5 + [node name="SpeedLabel" type="Label" parent="VBoxContainer/FormGrid"] layout_mode = 2 text = "Speed" @@ -298,17 +317,51 @@ value = 5.0 layout_mode = 2 text = "Target attributes" -[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer/FormGrid"] +[node name="AttributesHBoxContainer" type="HBoxContainer" parent="VBoxContainer/FormGrid"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="AnyOfPanelContainer" type="PanelContainer" parent="VBoxContainer/FormGrid/AttributesHBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +mouse_filter = 1 +theme_override_styles/panel = SubResource("StyleBoxFlat_apoql") + +[node name="AnyOfVBoxContainer" type="VBoxContainer" parent="VBoxContainer/FormGrid/AttributesHBoxContainer/AnyOfPanelContainer"] +layout_mode = 2 + +[node name="AnyOfLabel" type="Label" parent="VBoxContainer/FormGrid/AttributesHBoxContainer/AnyOfPanelContainer/AnyOfVBoxContainer"] +layout_mode = 2 +text = "Any of:" + +[node name="AnyOfAttributesGridContainer" type="GridContainer" parent="VBoxContainer/FormGrid/AttributesHBoxContainer/AnyOfPanelContainer/AnyOfVBoxContainer"] +custom_minimum_size = Vector2(200, 200) +layout_mode = 2 +tooltip_text = "Enter the target player attributes that this mob will attack. You +can drag body parts to this field to have the mob target them. +Selecting multiple will have the mob attack one part at a time at random." +columns = 3 + +[node name="AllOfPanelContainer" type="PanelContainer" parent="VBoxContainer/FormGrid/AttributesHBoxContainer"] layout_mode = 2 +size_flags_horizontal = 3 mouse_filter = 1 theme_override_styles/panel = SubResource("StyleBoxFlat_apoql") -[node name="AttributesGridContainer" type="GridContainer" parent="VBoxContainer/FormGrid/PanelContainer"] +[node name="AllOfVBoxContainer" type="VBoxContainer" parent="VBoxContainer/FormGrid/AttributesHBoxContainer/AllOfPanelContainer"] +layout_mode = 2 + +[node name="AllOfLabel" type="Label" parent="VBoxContainer/FormGrid/AttributesHBoxContainer/AllOfPanelContainer/AllOfVBoxContainer"] +layout_mode = 2 +text = "All of:" + +[node name="AllOfAttributesGridContainer" type="GridContainer" parent="VBoxContainer/FormGrid/AttributesHBoxContainer/AllOfPanelContainer/AllOfVBoxContainer"] custom_minimum_size = Vector2(200, 200) layout_mode = 2 tooltip_text = "Enter the target player attributes that this mob will attack. You can drag body parts to this field to have the mob target them. -Selecting multiple will have the mob attack each at random." +All attributes listed here will be attacked every time." columns = 3 [node name="Sprite_selector" parent="." instance=ExtResource("3_847a0")] diff --git a/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn b/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn index df9d4480..067a8049 100644 --- a/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/PlayerAttributeEditor.tscn @@ -228,10 +228,12 @@ attribute has a value greater then 0. The effect ends when this attribute has a none: There is no effect while depleting drain other attributes: The specified attributes get drained every second until this attribute is depleted." selected = 0 -item_count = 2 +item_count = 3 popup/item_0/text = "none" popup/item_1/text = "drain other attributes" popup/item_1/id = 1 +popup/item_2/text = "stun" +popup/item_2/id = 2 [node name="UIColorLabel" type="Label" parent="VBoxContainer/FormGrid/ModeTabContainer/Default/DefaultGrid"] layout_mode = 2 From ff0fa9b4d549b456e2b24cf3b927e32c8365909d Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:28:58 +0100 Subject: [PATCH 13/22] Restructure attributes --- Mods/Core/Mobs/Mobs.json | 264 +++++++++--------- .../Custom_Editors/Scripts/MobEditor.gd | 73 +++-- Scripts/Gamedata/DMob.gd | 34 ++- 3 files changed, 214 insertions(+), 157 deletions(-) diff --git a/Mods/Core/Mobs/Mobs.json b/Mods/Core/Mobs/Mobs.json index 5415249c..903ff3be 100644 --- a/Mods/Core/Mobs/Mobs.json +++ b/Mods/Core/Mobs/Mobs.json @@ -34,26 +34,28 @@ "sense_range": 50, "sight_range": 200, "sprite": "scrapwalker64.png", - "targetattributes": [ - { - "id": "head_health" - }, - { - "id": "torso_health" - }, - { - "id": "left_arm_health" - }, - { - "id": "right_arm_health" - }, - { - "id": "left_leg_health" - }, - { - "id": "right_leg_health" - } - ] + "targetattributes": { + "any_of": [ + { + "id": "head_health" + }, + { + "id": "torso_health" + }, + { + "id": "left_arm_health" + }, + { + "id": "right_arm_health" + }, + { + "id": "left_leg_health" + }, + { + "id": "right_leg_health" + } + ] + } }, { "description": "A slightly more advanced robot but still considered a weaker enemy in the robot faction. The Rust Sentinel stands tall and imposing, with a sturdy build. Its design incorporates rusted and recycled metal parts, giving it a rugged, battle-worn appearance.\n\nThe Rust Sentinel features a broad, slightly dome-shaped head with glowing red eyes that serve as visual sensors. Its torso is bulkier, reinforced with scrap metal plates, and it has two powerful arms ending in claws. The legs are designed for stability and power rather than speed. Its color scheme is a mix of rusted orange, steel gray, and hints of worn-out blue paint, suggesting it was once part of a larger machinery or vehicle.\n\nThe Rust Sentinel moves with deliberate, heavy steps, making it slower but more resilient. It's equipped with basic tools and weaponry, which it uses to scavenges and patrol.", @@ -84,26 +86,28 @@ "sense_range": 50, "sight_range": 200, "sprite": "rust_sentinel_72.png", - "targetattributes": [ - { - "id": "head_health" - }, - { - "id": "torso_health" - }, - { - "id": "left_arm_health" - }, - { - "id": "right_arm_health" - }, - { - "id": "left_leg_health" - }, - { - "id": "right_leg_health" - } - ] + "targetattributes": { + "any_of": [ + { + "id": "head_health" + }, + { + "id": "torso_health" + }, + { + "id": "left_arm_health" + }, + { + "id": "right_arm_health" + }, + { + "id": "left_leg_health" + }, + { + "id": "right_leg_health" + } + ] + } }, { "description": "A swift, dog-sized robot equipped with sharp claws and sensors. The Scavenger Skitter patrols ruins, darting quickly to attack when it detects motion. Its lightweight build allows it to move at high speeds but makes it vulnerable to powerful attacks.", @@ -133,26 +137,28 @@ } }, "sprite": "scavenger_skitter_48.png", - "targetattributes": [ - { - "id": "head_health" - }, - { - "id": "torso_health" - }, - { - "id": "left_leg_health" - }, - { - "id": "right_leg_health" - }, - { - "id": "right_arm_health" - }, - { - "id": "left_arm_health" - } - ] + "targetattributes": { + "any_of": [ + { + "id": "head_health" + }, + { + "id": "torso_health" + }, + { + "id": "left_leg_health" + }, + { + "id": "right_leg_health" + }, + { + "id": "right_arm_health" + }, + { + "id": "left_arm_health" + } + ] + } }, { "description": "A heavily armored robot that advances slowly but relentlessly. The Iron Stalker is outfitted with reinforced plating, making it resistant to bullets and physical attacks. It uses a powerful hydraulic punch that can stagger players if hit.", @@ -168,26 +174,28 @@ "sense_range": 60, "sight_range": 150, "sprite": "iron_stalker_64.png", - "targetattributes": [ - { - "id": "head_health" - }, - { - "id": "torso_health" - }, - { - "id": "left_arm_health" - }, - { - "id": "right_arm_health" - }, - { - "id": "left_leg_health" - }, - { - "id": "right_leg_health" - } - ] + "targetattributes": { + "any_of": [ + { + "id": "head_health" + }, + { + "id": "torso_health" + }, + { + "id": "left_arm_health" + }, + { + "id": "right_arm_health" + }, + { + "id": "left_leg_health" + }, + { + "id": "right_leg_health" + } + ] + } }, { "description": "A mid-sized drone that hovers silently above the ground. The Disruptor Drone can emit a pulse to disable nearby electronic equipment temporarily, making it dangerous for players who rely on tech.", @@ -210,26 +218,28 @@ "sense_range": 80, "sight_range": 300, "sprite": "disruptor_drone_48.png", - "targetattributes": [ - { - "id": "head_health" - }, - { - "id": "torso_health" - }, - { - "id": "left_arm_health" - }, - { - "id": "right_arm_health" - }, - { - "id": "left_leg_health" - }, - { - "id": "right_leg_health" - } - ] + "targetattributes": { + "any_of": [ + { + "id": "head_health" + }, + { + "id": "torso_health" + }, + { + "id": "left_arm_health" + }, + { + "id": "right_arm_health" + }, + { + "id": "left_leg_health" + }, + { + "id": "right_leg_health" + } + ] + } }, { "description": "A compact, spider-like bot specialized in ambush tactics. The Venom Crawler injects a corrosive fluid into its target, damaging armor and slowly weakening the player over time.", @@ -245,11 +255,13 @@ "sense_range": 80, "sight_range": 200, "sprite": "venom_crawler_48.png", - "targetattributes": [ - { - "id": "poison" - } - ] + "targetattributes": { + "any_of": [ + { + "id": "poison" + } + ] + } }, { "description": "A towering, sentinel-like robot with a focus on ranged combat. The Outpost Guardian uses built-in projectile launchers to strike players from afar, aiming at any perceived threat.", @@ -265,25 +277,27 @@ "sense_range": 100, "sight_range": 400, "sprite": "outpost_guardian_72.png", - "targetattributes": [ - { - "id": "head_health" - }, - { - "id": "torso_health" - }, - { - "id": "left_arm_health" - }, - { - "id": "right_arm_health" - }, - { - "id": "left_leg_health" - }, - { - "id": "right_leg_health" - } - ] + "targetattributes": { + "any_of": [ + { + "id": "head_health" + }, + { + "id": "torso_health" + }, + { + "id": "left_arm_health" + }, + { + "id": "right_arm_health" + }, + { + "id": "left_leg_health" + }, + { + "id": "right_leg_health" + } + ] + } } ] \ No newline at end of file diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd index 2aeb96a8..329301f9 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd @@ -24,7 +24,10 @@ extends Control @export var dash_speed_multiplier_spin_box: SpinBox = null @export var dash_duration_spin_box: SpinBox = null @export var dash_cooldown_spin_box: SpinBox = null -@export var attributesGridContainer: GridContainer = null +@export var any_of_attributes_grid_container: GridContainer = null +@export var all_of_attributes_grid_container: GridContainer = null + + signal data_changed() var olddata: DMob # Remember what the value of the data was before editing @@ -42,7 +45,7 @@ var dmob: DMob: # Forward drag-and-drop functionality to the attributesGridContainer func _ready() -> void: - attributesGridContainer.set_drag_forwarding(Callable(), _can_drop_attribute_data, _drop_attribute_data) + any_of_attributes_grid_container.set_drag_forwarding(Callable(), _can_drop_attribute_data, _drop_attribute_data) # This function update the form based on the DMob data that has been loaded func load_mob_data() -> void: @@ -83,8 +86,12 @@ func load_mob_data() -> void: # Enable or disable dash controls based on checkbox state _on_dash_check_box_toggled(dash_check_box.is_pressed()) - # Load attributes into the UI - _load_attributes_into_ui(dmob.targetattributes) + # Load 'any_of' and 'all_of' attributes into their respective grids + if dmob.targetattributes.has("any_of"): + _load_attributes_into_grid(any_of_attributes_grid_container, dmob.targetattributes["any_of"]) + if dmob.targetattributes.has("all_of"): + _load_attributes_into_grid(all_of_attributes_grid_container, dmob.targetattributes["all_of"]) + # The editor is closed, destroy the instance # TODO: Check for unsaved changes @@ -171,28 +178,39 @@ func _on_item_group_clear_button_button_up(): ItemGroupTextEdit.clear() -# Load attributes into the attributesGridContainer -func _load_attributes_into_ui(attributes: Array) -> void: +# Helper function to load attributes into a specified grid container +func _load_attributes_into_grid(container: GridContainer, attributes: Array) -> void: # Clear previous entries - for child in attributesGridContainer.get_children(): + for child in container.get_children(): child.queue_free() - + # Populate the container with attributes for attribute in attributes: - _add_attribute_entry(attribute) + _add_attribute_entry_to_grid(container, attribute) -# Get the current attributes from the UI -func _get_attributes_from_ui() -> Array: - var attributes = [] - var children = attributesGridContainer.get_children() - for i in range(1, children.size(), 3): # Step by 3 to handle sprite-label-deleteButton triples - var label = children[i] as Label - attributes.append({"id": label.text}) - return attributes +# Modified function to gather attributes from the UI and structure them as a dictionary +func _get_attributes_from_ui() -> Dictionary: + var target_attributes: Dictionary = {"any_of": [], "all_of": []} + + # Collect attributes from 'any_of' grid container + var any_of_children = any_of_attributes_grid_container.get_children() + for i in range(1, any_of_children.size(), 3): # Step by 3 to handle sprite-label-deleteButton triples + var label = any_of_children[i] as Label + target_attributes["any_of"].append({"id": label.text}) + + # Collect attributes from 'all_of' grid container + var all_of_children = all_of_attributes_grid_container.get_children() + for i in range(1, all_of_children.size(), 3): # Step by 3 to handle sprite-label-deleteButton triples + var label = all_of_children[i] as Label + # Assuming damage value is handled elsewhere; modify this as needed. + target_attributes["all_of"].append({"id": label.text, "damage": 10}) -# Add a new attribute entry to the attributesGridContainer -func _add_attribute_entry(attribute: Dictionary) -> void: + return target_attributes + + +# Modified function to add a new attribute entry to a specified grid container +func _add_attribute_entry_to_grid(container: GridContainer, attribute: Dictionary) -> void: var myattribute: DPlayerAttribute = Gamedata.playerattributes.by_id(attribute.id) # Create a TextureRect for the sprite @@ -200,25 +218,28 @@ func _add_attribute_entry(attribute: Dictionary) -> void: texture_rect.texture = myattribute.sprite texture_rect.custom_minimum_size = Vector2(32, 32) # Ensure the texture is 32x32 texture_rect.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED # Keep the aspect ratio centered - attributesGridContainer.add_child(texture_rect) + container.add_child(texture_rect) # Create a Label for the attribute name var label = Label.new() label.text = myattribute.id - attributesGridContainer.add_child(label) + container.add_child(label) # Create a Button to delete the attribute entry var deleteButton = Button.new() deleteButton.text = "X" deleteButton.pressed.connect(_delete_attribute_entry.bind([texture_rect, label, deleteButton])) - attributesGridContainer.add_child(deleteButton) + container.add_child(deleteButton) -# Delete an attribute entry from the attributesGridContainer +# Delete an attribute entry from a specified grid container func _delete_attribute_entry(elements_to_remove: Array) -> void: - for element in elements_to_remove: - attributesGridContainer.remove_child(element) - element.queue_free() # Properly free the node to avoid memory leaks + var parent_container = elements_to_remove[0].get_parent() # Get the parent container dynamically + if parent_container in [any_of_attributes_grid_container, all_of_attributes_grid_container]: + for element in elements_to_remove: + parent_container.remove_child(element) + element.queue_free() # Properly free the node to avoid memory leaks + # Function to determine if the dragged data can be dropped in the attributesGridContainer diff --git a/Scripts/Gamedata/DMob.gd b/Scripts/Gamedata/DMob.gd index a415a356..6862942d 100644 --- a/Scripts/Gamedata/DMob.gd +++ b/Scripts/Gamedata/DMob.gd @@ -36,6 +36,26 @@ extends RefCounted # "special_moves": { # "dash": {"speed_multiplier":2,"cooldown":5,"duration":0.5} # }, +# "targetattributes": { +# "any_of": [ +# { +# "id": "head_health" +# }, +# { +# "id": "torso_health" +# } +# ], +# "all_of": [ +# { +# "id": "poison", +# "damage": 10 +# }, +# { +# "id": "stun", +# "damage": 10 +# } +# ] +# } # "spriteid": "scrapwalker64.png" # } @@ -55,7 +75,8 @@ var sight_range: int var special_moves: Dictionary = {} # Holds special moves like {"dash":{"speed_multiplier":2,"cooldown":5,"duration":0.5}} var spriteid: String var sprite: Texture -var targetattributes: Array +# Updated targetattributes variable to use the new data structure +var targetattributes: Dictionary = {} var references: Dictionary = {} # Constructor to initialize mob properties from a dictionary @@ -76,7 +97,7 @@ func _init(data: Dictionary): special_moves = data.get("special_moves", {}) spriteid = data.get("sprite", "") - targetattributes = [] + # Initialize targetattributes based on the new format if data.has("targetattributes"): targetattributes = data["targetattributes"] references = data.get("references", {}) @@ -107,11 +128,13 @@ func get_data() -> Dictionary: return data - -# Function to return an array of all "id" values in the attributes array +# Function to return an array of all "id" values in the targetattributes func get_attr_ids() -> Array: var ids: Array = [] - for attribute in targetattributes: + for attribute in targetattributes.get("any_of", []): + if attribute.has("id"): + ids.append(attribute["id"]) + for attribute in targetattributes.get("all_of", []): if attribute.has("id"): ids.append(attribute["id"]) return ids @@ -174,7 +197,6 @@ func execute_callable_on_references_of_type(module: String, type: String, callab callable.call(ref_id) - # Collects all attributes defined in an item and updates the references to that attribute func update_mob_attribute_references(olddata: DMob): # Collect skill IDs from old and new data From 1d25642b104f57e30708fb2175a8d2c700ef5f3a Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:41:32 +0100 Subject: [PATCH 14/22] Support both grids --- .../Custom_Editors/MobEditor.tscn | 5 +- .../Custom_Editors/Scripts/MobEditor.gd | 48 +++++++++++-------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn index d4769d0a..e1e8116c 100644 --- a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn @@ -20,7 +20,7 @@ corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 -[node name="MobEditor" type="Control" node_paths=PackedStringArray("mobImageDisplay", "IDTextLabel", "PathTextLabel", "NameTextEdit", "DescriptionTextEdit", "mobSelector", "melee_damage_numedit", "melee_range_numedit", "health_numedit", "moveSpeed_numedit", "idle_move_speed_numedit", "sightRange_numedit", "senseRange_numedit", "hearingRange_numedit", "ItemGroupTextEdit", "dash_check_box", "dash_speed_multiplier_spin_box", "dash_duration_spin_box", "dash_cooldown_spin_box", "attributesGridContainer")] +[node name="MobEditor" type="Control" node_paths=PackedStringArray("mobImageDisplay", "IDTextLabel", "PathTextLabel", "NameTextEdit", "DescriptionTextEdit", "mobSelector", "melee_damage_numedit", "melee_range_numedit", "health_numedit", "moveSpeed_numedit", "idle_move_speed_numedit", "sightRange_numedit", "senseRange_numedit", "hearingRange_numedit", "ItemGroupTextEdit", "dash_check_box", "dash_speed_multiplier_spin_box", "dash_duration_spin_box", "dash_cooldown_spin_box", "any_of_attributes_grid_container", "all_of_attributes_grid_container")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -47,7 +47,8 @@ dash_check_box = NodePath("VBoxContainer/FormGrid/SpecialMovesHBoxContainer3/Das dash_speed_multiplier_spin_box = NodePath("VBoxContainer/FormGrid/SpecialMovesHBoxContainer3/SpeedMultiplierSpinBox") dash_duration_spin_box = NodePath("VBoxContainer/FormGrid/SpecialMovesHBoxContainer3/DurationSpinBox") dash_cooldown_spin_box = NodePath("VBoxContainer/FormGrid/SpecialMovesHBoxContainer3/CooldownSpinBox") -attributesGridContainer = NodePath("VBoxContainer/FormGrid/AttributesHBoxContainer/AnyOfPanelContainer/AnyOfVBoxContainer/AnyOfAttributesGridContainer") +any_of_attributes_grid_container = NodePath("VBoxContainer/FormGrid/AttributesHBoxContainer/AnyOfPanelContainer/AnyOfVBoxContainer/AnyOfAttributesGridContainer") +all_of_attributes_grid_container = NodePath("VBoxContainer/FormGrid/AttributesHBoxContainer/AllOfPanelContainer/AllOfVBoxContainer/AllOfAttributesGridContainer") [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 1 diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd index 329301f9..f3cdd079 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd @@ -45,7 +45,8 @@ var dmob: DMob: # Forward drag-and-drop functionality to the attributesGridContainer func _ready() -> void: - any_of_attributes_grid_container.set_drag_forwarding(Callable(), _can_drop_attribute_data, _drop_attribute_data) + any_of_attributes_grid_container.set_drag_forwarding(Callable(), _can_drop_attribute_data, _drop_any_of_attribute_data) + all_of_attributes_grid_container.set_drag_forwarding(Callable(), _can_drop_attribute_data, _drop_all_of_attribute_data) # This function update the form based on the DMob data that has been loaded func load_mob_data() -> void: @@ -241,8 +242,7 @@ func _delete_attribute_entry(elements_to_remove: Array) -> void: element.queue_free() # Properly free the node to avoid memory leaks - -# Function to determine if the dragged data can be dropped in the attributesGridContainer +# Function to determine if the dragged data can be dropped in the attribute grid container func _can_drop_attribute_data(_newpos, data) -> bool: # Check if the data dictionary has the 'id' property if not data or not data.has("id"): @@ -252,36 +252,42 @@ func _can_drop_attribute_data(_newpos, data) -> bool: if not Gamedata.playerattributes.has_id(data["id"]): return false - # Check if the attribute ID already exists in the attributes grid - var children = attributesGridContainer.get_children() - for i in range(1, children.size(), 3): # Step by 3 to handle sprite-label-deleteButton triples - var label = children[i] as Label - if label and label.text == data["id"]: - # Return false if this attribute ID already exists in the attributes grid - return false + # Check if the attribute ID already exists in either of the attribute grids + for grid in [any_of_attributes_grid_container, all_of_attributes_grid_container]: + var children = grid.get_children() + for i in range(1, children.size(), 3): # Step by 3 to handle sprite-label-deleteButton triples + var label = children[i] as Label + if label and label.text == data["id"]: + # Return false if this attribute ID already exists in any of the grids + return false # If all checks pass, return true return true -# Function to handle the data being dropped in the attributesGridContainer -func _drop_attribute_data(newpos, data) -> void: + +# Function to handle the data being dropped in the any_of_attributes_grid_container +func _drop_any_of_attribute_data(newpos, data) -> void: if _can_drop_attribute_data(newpos, data): - _handle_attribute_drop(data, newpos) + _handle_attribute_drop(data, any_of_attributes_grid_container) -# Called when the user has successfully dropped data onto the attributesGridContainer -# We have to check the dropped_data for the id property -func _handle_attribute_drop(dropped_data, _newpos) -> void: - # dropped_data is a Dictionary that includes an 'id' +# Function to handle the data being dropped in the all_of_attributes_grid_container +func _drop_all_of_attribute_data(newpos, data) -> void: + if _can_drop_attribute_data(newpos, data): + _handle_attribute_drop(data, all_of_attributes_grid_container) + + +# Called when the user has successfully dropped data onto an attribute grid container +# We have to check the dropped_data for the id property and add it to the appropriate container +func _handle_attribute_drop(dropped_data, container: GridContainer) -> void: if dropped_data and "id" in dropped_data: var attribute_id = dropped_data["id"] if not Gamedata.playerattributes.has_id(attribute_id): print_debug("No attribute data found for ID: " + attribute_id) return - - # Add the attribute entry using the new function - _add_attribute_entry({"id":attribute_id}) - # Here you would update your data structure if needed, similar to how you did for resources + + # Add the attribute entry to the specified container + _add_attribute_entry_to_grid(container, {"id": attribute_id}) else: print_debug("Dropped data does not contain an 'id' key.") From 74307087bda5137893ef96e5b23f283df943751a Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:49:17 +0100 Subject: [PATCH 15/22] Add damage spinbox --- Mods/Core/Mobs/Mobs.json | 7 +++ .../Custom_Editors/MobEditor.tscn | 4 +- .../Custom_Editors/Scripts/MobEditor.gd | 54 +++++++++++-------- Scripts/Gamedata/DMob.gd | 6 ++- 4 files changed, 46 insertions(+), 25 deletions(-) diff --git a/Mods/Core/Mobs/Mobs.json b/Mods/Core/Mobs/Mobs.json index 903ff3be..6b0fa17c 100644 --- a/Mods/Core/Mobs/Mobs.json +++ b/Mods/Core/Mobs/Mobs.json @@ -175,23 +175,30 @@ "sight_range": 150, "sprite": "iron_stalker_64.png", "targetattributes": { + "all_of": [], "any_of": [ { + "damage": 40, "id": "head_health" }, { + "damage": 40, "id": "torso_health" }, { + "damage": 40, "id": "left_arm_health" }, { + "damage": 40, "id": "right_arm_health" }, { + "damage": 40, "id": "left_leg_health" }, { + "damage": 40, "id": "right_leg_health" } ] diff --git a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn index e1e8116c..4b096156 100644 --- a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn @@ -342,7 +342,7 @@ layout_mode = 2 tooltip_text = "Enter the target player attributes that this mob will attack. You can drag body parts to this field to have the mob target them. Selecting multiple will have the mob attack one part at a time at random." -columns = 3 +columns = 4 [node name="AllOfPanelContainer" type="PanelContainer" parent="VBoxContainer/FormGrid/AttributesHBoxContainer"] layout_mode = 2 @@ -363,7 +363,7 @@ layout_mode = 2 tooltip_text = "Enter the target player attributes that this mob will attack. You can drag body parts to this field to have the mob target them. All attributes listed here will be attacked every time." -columns = 3 +columns = 4 [node name="Sprite_selector" parent="." instance=ExtResource("3_847a0")] visible = false diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd index f3cdd079..2df9407b 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd @@ -190,26 +190,6 @@ func _load_attributes_into_grid(container: GridContainer, attributes: Array) -> _add_attribute_entry_to_grid(container, attribute) -# Modified function to gather attributes from the UI and structure them as a dictionary -func _get_attributes_from_ui() -> Dictionary: - var target_attributes: Dictionary = {"any_of": [], "all_of": []} - - # Collect attributes from 'any_of' grid container - var any_of_children = any_of_attributes_grid_container.get_children() - for i in range(1, any_of_children.size(), 3): # Step by 3 to handle sprite-label-deleteButton triples - var label = any_of_children[i] as Label - target_attributes["any_of"].append({"id": label.text}) - - # Collect attributes from 'all_of' grid container - var all_of_children = all_of_attributes_grid_container.get_children() - for i in range(1, all_of_children.size(), 3): # Step by 3 to handle sprite-label-deleteButton triples - var label = all_of_children[i] as Label - # Assuming damage value is handled elsewhere; modify this as needed. - target_attributes["all_of"].append({"id": label.text, "damage": 10}) - - return target_attributes - - # Modified function to add a new attribute entry to a specified grid container func _add_attribute_entry_to_grid(container: GridContainer, attribute: Dictionary) -> void: var myattribute: DPlayerAttribute = Gamedata.playerattributes.by_id(attribute.id) @@ -226,13 +206,45 @@ func _add_attribute_entry_to_grid(container: GridContainer, attribute: Dictionar label.text = myattribute.id container.add_child(label) + # Create a SpinBox for the damage amount + var spinbox = SpinBox.new() + spinbox.min_value = -100 + spinbox.max_value = 100 + spinbox.value = attribute.get("damage", 0) # Default to 0 if not provided + spinbox.tooltip_text = "The amount of damage this attribute will receive" + container.add_child(spinbox) + # Create a Button to delete the attribute entry var deleteButton = Button.new() deleteButton.text = "X" - deleteButton.pressed.connect(_delete_attribute_entry.bind([texture_rect, label, deleteButton])) + deleteButton.pressed.connect(_delete_attribute_entry.bind([texture_rect, label, spinbox, deleteButton])) container.add_child(deleteButton) +# Modified function to gather attributes from the UI and structure them as a dictionary +func _get_attributes_from_ui() -> Dictionary: + var target_attributes: Dictionary = {"any_of": [], "all_of": []} + + # Collect attributes from 'any_of' grid container + var any_of_children = any_of_attributes_grid_container.get_children() + for i in range(1, any_of_children.size(), 4): # Step by 4 to handle sprite-label-spinbox-deleteButton + var label = any_of_children[i] as Label + var spinbox = any_of_children[i + 1] as SpinBox + if label and spinbox: + target_attributes["any_of"].append({"id": label.text, "damage": spinbox.value}) + + # Collect attributes from 'all_of' grid container + var all_of_children = all_of_attributes_grid_container.get_children() + for i in range(1, all_of_children.size(), 4): # Step by 4 to handle sprite-label-spinbox-deleteButton + var label = all_of_children[i] as Label + var spinbox = all_of_children[i + 1] as SpinBox + if label and spinbox: + target_attributes["all_of"].append({"id": label.text, "damage": spinbox.value}) + + return target_attributes + + + # Delete an attribute entry from a specified grid container func _delete_attribute_entry(elements_to_remove: Array) -> void: var parent_container = elements_to_remove[0].get_parent() # Get the parent container dynamically diff --git a/Scripts/Gamedata/DMob.gd b/Scripts/Gamedata/DMob.gd index 6862942d..ee1783a2 100644 --- a/Scripts/Gamedata/DMob.gd +++ b/Scripts/Gamedata/DMob.gd @@ -39,10 +39,12 @@ extends RefCounted # "targetattributes": { # "any_of": [ # { -# "id": "head_health" +# "id": "head_health", +# "damage": 10 # }, # { -# "id": "torso_health" +# "id": "torso_health", +# "damage": 10 # } # ], # "all_of": [ From 3a64b2177fd5b412c8e3a39b98aa07bfa5cac815 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:00:53 +0100 Subject: [PATCH 16/22] replace melee damage --- Mods/Core/Mobs/Mobs.json | 7 ++++- .../PlayerAttributes/PlayerAttributes.json | 7 +++++ .../Custom_Editors/MobEditor.tscn | 12 +------- .../Custom_Editors/Scripts/MobEditor.gd | 6 +--- Scripts/Gamedata/DMob.gd | 4 --- Scripts/Mob/MobAttack.gd | 28 +++++++++++++++---- 6 files changed, 38 insertions(+), 26 deletions(-) diff --git a/Mods/Core/Mobs/Mobs.json b/Mods/Core/Mobs/Mobs.json index 6b0fa17c..7e4cfcfe 100644 --- a/Mods/Core/Mobs/Mobs.json +++ b/Mods/Core/Mobs/Mobs.json @@ -175,7 +175,12 @@ "sight_range": 150, "sprite": "iron_stalker_64.png", "targetattributes": { - "all_of": [], + "all_of": [ + { + "damage": 10, + "id": "stun" + } + ], "any_of": [ { "damage": 40, diff --git a/Mods/Core/PlayerAttributes/PlayerAttributes.json b/Mods/Core/PlayerAttributes/PlayerAttributes.json index a126baf0..b95f1e82 100644 --- a/Mods/Core/PlayerAttributes/PlayerAttributes.json +++ b/Mods/Core/PlayerAttributes/PlayerAttributes.json @@ -374,6 +374,13 @@ "description": "You are stunned and can't move!", "id": "stun", "name": "Stun", + "references": { + "core": { + "mobs": [ + "iron_stalker" + ] + } + }, "sprite": "trapping_32.png" } ] \ No newline at end of file diff --git a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn index 4b096156..4cf6eec8 100644 --- a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn @@ -20,7 +20,7 @@ corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 -[node name="MobEditor" type="Control" node_paths=PackedStringArray("mobImageDisplay", "IDTextLabel", "PathTextLabel", "NameTextEdit", "DescriptionTextEdit", "mobSelector", "melee_damage_numedit", "melee_range_numedit", "health_numedit", "moveSpeed_numedit", "idle_move_speed_numedit", "sightRange_numedit", "senseRange_numedit", "hearingRange_numedit", "ItemGroupTextEdit", "dash_check_box", "dash_speed_multiplier_spin_box", "dash_duration_spin_box", "dash_cooldown_spin_box", "any_of_attributes_grid_container", "all_of_attributes_grid_container")] +[node name="MobEditor" type="Control" node_paths=PackedStringArray("mobImageDisplay", "IDTextLabel", "PathTextLabel", "NameTextEdit", "DescriptionTextEdit", "mobSelector", "melee_range_numedit", "health_numedit", "moveSpeed_numedit", "idle_move_speed_numedit", "sightRange_numedit", "senseRange_numedit", "hearingRange_numedit", "ItemGroupTextEdit", "dash_check_box", "dash_speed_multiplier_spin_box", "dash_duration_spin_box", "dash_cooldown_spin_box", "any_of_attributes_grid_container", "all_of_attributes_grid_container")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -34,7 +34,6 @@ PathTextLabel = NodePath("VBoxContainer/FormGrid/PathTextLabel") NameTextEdit = NodePath("VBoxContainer/FormGrid/NameTextEdit") DescriptionTextEdit = NodePath("VBoxContainer/FormGrid/DescriptionTextEdit") mobSelector = NodePath("Sprite_selector") -melee_damage_numedit = NodePath("VBoxContainer/FormGrid/MeleeHBoxContainer/MeleeDamageSpinBox") melee_range_numedit = NodePath("VBoxContainer/FormGrid/MeleeHBoxContainer/MeleeRangeSpinbox") health_numedit = NodePath("VBoxContainer/FormGrid/HealthSpinBox") moveSpeed_numedit = NodePath("VBoxContainer/FormGrid/SpeedHBoxContainer/MoveSpeedSpinBox") @@ -149,15 +148,6 @@ text = "Melee" [node name="MeleeHBoxContainer" type="HBoxContainer" parent="VBoxContainer/FormGrid"] layout_mode = 2 -[node name="MeleeDamageLabel" type="Label" parent="VBoxContainer/FormGrid/MeleeHBoxContainer"] -layout_mode = 2 -text = "Damage" - -[node name="MeleeDamageSpinBox" type="SpinBox" parent="VBoxContainer/FormGrid/MeleeHBoxContainer"] -layout_mode = 2 -min_value = -100.0 -value = 20.0 - [node name="MeleeRangeLabel" type="Label" parent="VBoxContainer/FormGrid/MeleeHBoxContainer"] layout_mode = 2 text = "Range" diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd index 2df9407b..7a6cf920 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd @@ -11,7 +11,6 @@ extends Control @export var NameTextEdit: TextEdit = null @export var DescriptionTextEdit: TextEdit = null @export var mobSelector: Popup = null -@export var melee_damage_numedit: SpinBox @export var melee_range_numedit: SpinBox @export var health_numedit: SpinBox @export var moveSpeed_numedit: SpinBox @@ -59,8 +58,6 @@ func load_mob_data() -> void: NameTextEdit.text = dmob.name if DescriptionTextEdit != null: DescriptionTextEdit.text = dmob.description - if melee_damage_numedit != null: - melee_damage_numedit.value = dmob.melee_damage if melee_range_numedit != null: melee_range_numedit.value = dmob.melee_range if health_numedit != null: @@ -106,7 +103,6 @@ func _on_save_button_button_up() -> void: dmob.sprite = mobImageDisplay.texture dmob.name = NameTextEdit.text dmob.description = DescriptionTextEdit.text - dmob.melee_damage = int(melee_damage_numedit.value) dmob.melee_range = melee_range_numedit.value dmob.health = int(health_numedit.value) dmob.move_speed = moveSpeed_numedit.value @@ -267,7 +263,7 @@ func _can_drop_attribute_data(_newpos, data) -> bool: # Check if the attribute ID already exists in either of the attribute grids for grid in [any_of_attributes_grid_container, all_of_attributes_grid_container]: var children = grid.get_children() - for i in range(1, children.size(), 3): # Step by 3 to handle sprite-label-deleteButton triples + for i in range(1, children.size(), 4): # Step by 3 to handle sprite-label-deleteButton triples var label = children[i] as Label if label and label.text == data["id"]: # Return false if this attribute ID already exists in any of the grids diff --git a/Scripts/Gamedata/DMob.gd b/Scripts/Gamedata/DMob.gd index ee1783a2..fc2e1b29 100644 --- a/Scripts/Gamedata/DMob.gd +++ b/Scripts/Gamedata/DMob.gd @@ -16,7 +16,6 @@ extends RefCounted # "id": "scrapwalker", # "idle_move_speed": 0.5, # "loot_group": "mob_loot", -# "melee_damage": 20, # "melee_range": 1.5, # "move_speed": 2.1, # "name": "Scrap walker", @@ -69,7 +68,6 @@ var health: int var hearing_range: int var idle_move_speed: float var loot_group: String -var melee_damage: int var melee_range: float var move_speed: float var sense_range: int @@ -90,7 +88,6 @@ func _init(data: Dictionary): hearing_range = data.get("hearing_range", 1000) idle_move_speed = data.get("idle_move_speed", 0.5) loot_group = data.get("loot_group", "") - melee_damage = data.get("melee_damage", 20) melee_range = data.get("melee_range", 1.5) move_speed = data.get("move_speed", 1.0) sense_range = data.get("sense_range", 50) @@ -114,7 +111,6 @@ func get_data() -> Dictionary: "hearing_range": hearing_range, "idle_move_speed": idle_move_speed, "loot_group": loot_group, - "melee_damage": melee_damage, "melee_range": melee_range, "move_speed": move_speed, "sense_range": sense_range, diff --git a/Scripts/Mob/MobAttack.gd b/Scripts/Mob/MobAttack.gd index d3b1e252..a717362c 100644 --- a/Scripts/Mob/MobAttack.gd +++ b/Scripts/Mob/MobAttack.gd @@ -53,18 +53,36 @@ func Physics_Update(_delta: float): else: is_in_attack_mode = false stop_attacking() - + + func try_to_attack(): print("Trying to attack...") attack_timer.start() +# The mob is going to attack. func attack(): print("Attacking!") - var targetattribute: Dictionary = mob.dmob.targetattributes.pick_random() - var attributeid: String = targetattribute.id - if targeted_player and targeted_player.has_method("_get_hit"): - targeted_player._get_hit(attributeid, mob.melee_damage) + # Apply damage to a randomly selected attribute from 'any_of' + if mob.dmob.targetattributes.has("any_of") and not mob.dmob.targetattributes["any_of"].is_empty(): + var any_of_attributes: Array = mob.dmob.targetattributes["any_of"] + var selected_attribute: Dictionary = any_of_attributes.pick_random() + var attribute_id: String = selected_attribute["id"] + var damage: float = selected_attribute["damage"] + + if targeted_player and targeted_player.has_method("_get_hit"): + targeted_player._get_hit(attribute_id, damage) + + # Apply damage to each attribute in 'all_of' + if mob.dmob.targetattributes.has("all_of"): + var all_of_attributes: Array = mob.dmob.targetattributes["all_of"] + for attribute in all_of_attributes: + var attribute_id: String = attribute["id"] + var damage: float = attribute["damage"] + + if targeted_player and targeted_player.has_method("_get_hit"): + targeted_player._get_hit(attribute_id, damage) + func stop_attacking(): From 89d9d89678b4a48046445690d89b695462a90c6e Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:12:48 +0100 Subject: [PATCH 17/22] Cooldown and knockback --- Mods/Core/Mobs/Mobs.json | 58 ++++++++++++++++--- .../Custom_Editors/MobEditor.tscn | 4 +- .../Custom_Editors/Scripts/MobEditor.gd | 8 +++ Scripts/Gamedata/DMob.gd | 10 +++- 4 files changed, 71 insertions(+), 9 deletions(-) diff --git a/Mods/Core/Mobs/Mobs.json b/Mods/Core/Mobs/Mobs.json index 7e4cfcfe..5c6b2e8b 100644 --- a/Mods/Core/Mobs/Mobs.json +++ b/Mods/Core/Mobs/Mobs.json @@ -6,7 +6,8 @@ "id": "scrapwalker", "idle_move_speed": 0.5, "loot_group": "mob_loot", - "melee_damage": 20, + "melee_cooldown": 1, + "melee_knockback": 0, "melee_range": 1.5, "move_speed": 2.1, "name": "Scrap walker", @@ -35,23 +36,30 @@ "sight_range": 200, "sprite": "scrapwalker64.png", "targetattributes": { + "all_of": [], "any_of": [ { + "damage": 20, "id": "head_health" }, { + "damage": 20, "id": "torso_health" }, { + "damage": 20, "id": "left_arm_health" }, { + "damage": 20, "id": "right_arm_health" }, { + "damage": 20, "id": "left_leg_health" }, { + "damage": 20, "id": "right_leg_health" } ] @@ -64,7 +72,8 @@ "id": "rust_sentinel", "idle_move_speed": 0.4, "loot_group": "mob_loot", - "melee_damage": 20, + "melee_cooldown": 1, + "melee_knockback": 0, "melee_range": 1.5, "move_speed": 1.8, "name": "Rust sentinel", @@ -87,23 +96,30 @@ "sight_range": 200, "sprite": "rust_sentinel_72.png", "targetattributes": { + "all_of": [], "any_of": [ { + "damage": 20, "id": "head_health" }, { + "damage": 20, "id": "torso_health" }, { + "damage": 20, "id": "left_arm_health" }, { + "damage": 20, "id": "right_arm_health" }, { + "damage": 20, "id": "left_leg_health" }, { + "damage": 20, "id": "right_leg_health" } ] @@ -116,7 +132,8 @@ "id": "scavenger_skitter", "idle_move_speed": 1, "loot_group": "mob_loot", - "melee_damage": 15, + "melee_cooldown": 1, + "melee_knockback": 0, "melee_range": 1, "move_speed": 3.5, "name": "Scavenger Skitter", @@ -138,23 +155,30 @@ }, "sprite": "scavenger_skitter_48.png", "targetattributes": { + "all_of": [], "any_of": [ { + "damage": 15, "id": "head_health" }, { + "damage": 15, "id": "torso_health" }, { + "damage": 15, "id": "left_leg_health" }, { + "damage": 15, "id": "right_leg_health" }, { + "damage": 15, "id": "right_arm_health" }, { + "damage": 15, "id": "left_arm_health" } ] @@ -167,7 +191,8 @@ "id": "iron_stalker", "idle_move_speed": 0.3, "loot_group": "mob_loot", - "melee_damage": 40, + "melee_cooldown": 2, + "melee_knockback": 2, "melee_range": 2, "move_speed": 1, "name": "Iron Stalker", @@ -216,7 +241,8 @@ "id": "disruptor_drone", "idle_move_speed": 0.8, "loot_group": "mob_loot", - "melee_damage": 0, + "melee_cooldown": 1, + "melee_knockback": 0, "melee_range": 1.5, "move_speed": 2.5, "name": "Disruptor Drone", @@ -231,23 +257,30 @@ "sight_range": 300, "sprite": "disruptor_drone_48.png", "targetattributes": { + "all_of": [], "any_of": [ { + "damage": 0, "id": "head_health" }, { + "damage": 0, "id": "torso_health" }, { + "damage": 0, "id": "left_arm_health" }, { + "damage": 0, "id": "right_arm_health" }, { + "damage": 0, "id": "left_leg_health" }, { + "damage": 0, "id": "right_leg_health" } ] @@ -260,7 +293,8 @@ "id": "venom_crawler", "idle_move_speed": 0.6, "loot_group": "mob_loot", - "melee_damage": -10, + "melee_cooldown": 1, + "melee_knockback": 0, "melee_range": 1, "move_speed": 2.8, "name": "Venom Crawler", @@ -268,8 +302,10 @@ "sight_range": 200, "sprite": "venom_crawler_48.png", "targetattributes": { + "all_of": [], "any_of": [ { + "damage": -10, "id": "poison" } ] @@ -282,7 +318,8 @@ "id": "outpost_guardian", "idle_move_speed": 0.4, "loot_group": "mob_loot", - "melee_damage": 30, + "melee_cooldown": 1, + "melee_knockback": 0, "melee_range": 1.5, "move_speed": 1.3, "name": "Outpost Guardian", @@ -290,23 +327,30 @@ "sight_range": 400, "sprite": "outpost_guardian_72.png", "targetattributes": { + "all_of": [], "any_of": [ { + "damage": 30, "id": "head_health" }, { + "damage": 30, "id": "torso_health" }, { + "damage": 30, "id": "left_arm_health" }, { + "damage": 30, "id": "right_arm_health" }, { + "damage": 30, "id": "left_leg_health" }, { + "damage": 30, "id": "right_leg_health" } ] diff --git a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn index 4cf6eec8..69c9a553 100644 --- a/Scenes/ContentManager/Custom_Editors/MobEditor.tscn +++ b/Scenes/ContentManager/Custom_Editors/MobEditor.tscn @@ -20,7 +20,7 @@ corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 -[node name="MobEditor" type="Control" node_paths=PackedStringArray("mobImageDisplay", "IDTextLabel", "PathTextLabel", "NameTextEdit", "DescriptionTextEdit", "mobSelector", "melee_range_numedit", "health_numedit", "moveSpeed_numedit", "idle_move_speed_numedit", "sightRange_numedit", "senseRange_numedit", "hearingRange_numedit", "ItemGroupTextEdit", "dash_check_box", "dash_speed_multiplier_spin_box", "dash_duration_spin_box", "dash_cooldown_spin_box", "any_of_attributes_grid_container", "all_of_attributes_grid_container")] +[node name="MobEditor" type="Control" node_paths=PackedStringArray("mobImageDisplay", "IDTextLabel", "PathTextLabel", "NameTextEdit", "DescriptionTextEdit", "mobSelector", "melee_range_numedit", "melee_cooldown_spinbox", "melee_knockback_spinbox", "health_numedit", "moveSpeed_numedit", "idle_move_speed_numedit", "sightRange_numedit", "senseRange_numedit", "hearingRange_numedit", "ItemGroupTextEdit", "dash_check_box", "dash_speed_multiplier_spin_box", "dash_duration_spin_box", "dash_cooldown_spin_box", "any_of_attributes_grid_container", "all_of_attributes_grid_container")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -35,6 +35,8 @@ NameTextEdit = NodePath("VBoxContainer/FormGrid/NameTextEdit") DescriptionTextEdit = NodePath("VBoxContainer/FormGrid/DescriptionTextEdit") mobSelector = NodePath("Sprite_selector") melee_range_numedit = NodePath("VBoxContainer/FormGrid/MeleeHBoxContainer/MeleeRangeSpinbox") +melee_cooldown_spinbox = NodePath("VBoxContainer/FormGrid/MeleeHBoxContainer/MeleeCooldownSpinbox") +melee_knockback_spinbox = NodePath("VBoxContainer/FormGrid/MeleeHBoxContainer/MeleeKnockbackSpinbox") health_numedit = NodePath("VBoxContainer/FormGrid/HealthSpinBox") moveSpeed_numedit = NodePath("VBoxContainer/FormGrid/SpeedHBoxContainer/MoveSpeedSpinBox") idle_move_speed_numedit = NodePath("VBoxContainer/FormGrid/SpeedHBoxContainer/IdleMoveSpeedSpinBox") diff --git a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd index 7a6cf920..17b12260 100644 --- a/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd +++ b/Scenes/ContentManager/Custom_Editors/Scripts/MobEditor.gd @@ -12,6 +12,8 @@ extends Control @export var DescriptionTextEdit: TextEdit = null @export var mobSelector: Popup = null @export var melee_range_numedit: SpinBox +@export var melee_cooldown_spinbox: SpinBox = null +@export var melee_knockback_spinbox: SpinBox = null @export var health_numedit: SpinBox @export var moveSpeed_numedit: SpinBox @export var idle_move_speed_numedit: SpinBox @@ -60,6 +62,10 @@ func load_mob_data() -> void: DescriptionTextEdit.text = dmob.description if melee_range_numedit != null: melee_range_numedit.value = dmob.melee_range + if melee_cooldown_spinbox != null: + melee_cooldown_spinbox.value = dmob.melee_cooldown + if melee_knockback_spinbox != null: + melee_knockback_spinbox.value = dmob.melee_knockback if health_numedit != null: health_numedit.value = dmob.health if moveSpeed_numedit != null: @@ -104,6 +110,8 @@ func _on_save_button_button_up() -> void: dmob.name = NameTextEdit.text dmob.description = DescriptionTextEdit.text dmob.melee_range = melee_range_numedit.value + dmob.melee_cooldown = melee_cooldown_spinbox.value + dmob.melee_knockback = melee_knockback_spinbox.value dmob.health = int(health_numedit.value) dmob.move_speed = moveSpeed_numedit.value dmob.idle_move_speed = idle_move_speed_numedit.value diff --git a/Scripts/Gamedata/DMob.gd b/Scripts/Gamedata/DMob.gd index fc2e1b29..711cf798 100644 --- a/Scripts/Gamedata/DMob.gd +++ b/Scripts/Gamedata/DMob.gd @@ -16,8 +16,10 @@ extends RefCounted # "id": "scrapwalker", # "idle_move_speed": 0.5, # "loot_group": "mob_loot", -# "melee_range": 1.5, # "move_speed": 2.1, +# "melee_range": 1.5, +# "melee_knockback": 2.0, +# "melee_cooldown": 2.0, # "name": "Scrap walker", # "references": { # "core": { @@ -69,6 +71,8 @@ var hearing_range: int var idle_move_speed: float var loot_group: String var melee_range: float +var melee_knockback: float # New property for melee knockback +var melee_cooldown: float # New property for melee cooldown var move_speed: float var sense_range: int var sight_range: int @@ -89,6 +93,8 @@ func _init(data: Dictionary): idle_move_speed = data.get("idle_move_speed", 0.5) loot_group = data.get("loot_group", "") melee_range = data.get("melee_range", 1.5) + melee_knockback = data.get("melee_knockback", 2.0) # Initialize with default value + melee_cooldown = data.get("melee_cooldown", 2.0) # Initialize with default value move_speed = data.get("move_speed", 1.0) sense_range = data.get("sense_range", 50) sight_range = data.get("sight_range", 200) @@ -112,6 +118,8 @@ func get_data() -> Dictionary: "idle_move_speed": idle_move_speed, "loot_group": loot_group, "melee_range": melee_range, + "melee_knockback": melee_knockback, # Add to data output + "melee_cooldown": melee_cooldown, # Add to data output "move_speed": move_speed, "sense_range": sense_range, "sight_range": sight_range, From b691fb3f66ada5dc6026c54576e3c662fb336f77 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:34:45 +0100 Subject: [PATCH 18/22] Implement knockback --- Scripts/Mob/MobAttack.gd | 33 ++++++++++++++++++++++----------- Scripts/player.gd | 31 +++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/Scripts/Mob/MobAttack.gd b/Scripts/Mob/MobAttack.gd index a717362c..6cf7da8f 100644 --- a/Scripts/Mob/MobAttack.gd +++ b/Scripts/Mob/MobAttack.gd @@ -61,28 +61,39 @@ func try_to_attack(): # The mob is going to attack. +# attack: a dictionary like this: +# { +# "attributeid": "torso_health", # The PlayerAttribute that is targeted by this attack +# "damage": 20, # The amount to subtract from the target attribute +# "knockback": 2, # The number of tiles to push the player away +# "mobposition": Vector3(17, 1, 219) # The global position of the mob +# } func attack(): print("Attacking!") + # Apply damage to a randomly selected attribute from 'any_of' if mob.dmob.targetattributes.has("any_of") and not mob.dmob.targetattributes["any_of"].is_empty(): var any_of_attributes: Array = mob.dmob.targetattributes["any_of"] var selected_attribute: Dictionary = any_of_attributes.pick_random() - var attribute_id: String = selected_attribute["id"] - var damage: float = selected_attribute["damage"] - - if targeted_player and targeted_player.has_method("_get_hit"): - targeted_player._get_hit(attribute_id, damage) + _apply_attack_to_player(selected_attribute) # Apply damage to each attribute in 'all_of' if mob.dmob.targetattributes.has("all_of"): var all_of_attributes: Array = mob.dmob.targetattributes["all_of"] for attribute in all_of_attributes: - var attribute_id: String = attribute["id"] - var damage: float = attribute["damage"] - - if targeted_player and targeted_player.has_method("_get_hit"): - targeted_player._get_hit(attribute_id, damage) - + _apply_attack_to_player(attribute) + + +# Helper function to send attack data to the player's _get_hit method +func _apply_attack_to_player(attribute: Dictionary) -> void: + if targeted_player and targeted_player.has_method("_get_hit"): + var attack_data: Dictionary = { + "attributeid": attribute["id"], + "damage": attribute["damage"], + "knockback": mob.dmob.melee_knockback, + "mobposition": mob.global_position + } + targeted_player._get_hit(attack_data) func stop_attacking(): diff --git a/Scripts/player.gd b/Scripts/player.gd index 09cd572d..493e1ffd 100644 --- a/Scripts/player.gd +++ b/Scripts/player.gd @@ -225,10 +225,19 @@ func _check_for_interaction() -> void: # The player gets hit by an attack -# attributeid: The PlayerAttribute that is targeted by this attack -# damage: The amount to subtract from the target attribute -func _get_hit(attributeid: String, damage: float): - attributes[attributeid].reduce_amount(damage) +# attack: a dictionary like this: +# { +# "attributeid": "torso_health", # The PlayerAttribute that is targeted by this attack +# "damage": 20, # The amount to subtract from the target attribute +# "knockback": 2, # The number of tiles to push the player away +# "mobposition": Vector3(17, 1, 219) # The global position of the mob +# } +func _get_hit(attack: Dictionary): + if attack.has("attributeid") and attributes.has(attack["attributeid"]): + attributes[attack["attributeid"]].reduce_amount(attack["damage"]) + + if attack.has("knockback") and attack["knockback"] > 0 and attack.has("mobposition"): + _perform_knockback(attack["knockback"], attack["mobposition"]) func die(): @@ -386,10 +395,12 @@ func _sort_player_attributes_by_order(myattributes: Array[PlayerAttribute], orde pass return myattributes + # Custom sorting functions for PlayerAttributes func _compare_player_attributes_by_current_amount_ascending(a: PlayerAttribute, b: PlayerAttribute) -> bool: return a.current_amount < b.current_amount + func _compare_player_attributes_by_current_amount_descending(a: PlayerAttribute, b: PlayerAttribute) -> bool: return a.current_amount > b.current_amount @@ -558,3 +569,15 @@ func _on_wearable_was_equipped(wearableItem: InventoryItem, _wearableSlot: Contr # Function for handling when a wearable is unequipped func _on_wearable_was_unequipped(wearableItem: InventoryItem, _wearableSlot: Control): _modify_player_attribute_on_equip(wearableItem, false) # false for unequipping + + +# Function to handle knockback +# knockback_distance: The number of tiles (units) to push the player back +# mob_position: The global position of the mob that initiated the knockback +func _perform_knockback(knockback_distance: float, mob_position: Vector3): + var direction_vector = (global_position - mob_position).normalized() + var knockback_vector = direction_vector * knockback_distance + + # Move the player by the knockback vector at 3 times the player's current speed + velocity += knockback_vector * speed * 3.0 + move_and_slide() From a02ee65117b66056b8dd3058a2804b6bf02f5a49 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Mon, 11 Nov 2024 04:06:08 +0100 Subject: [PATCH 19/22] Add stun and knockback --- Scripts/Mob/Mob.gd | 3 -- Scripts/player.gd | 120 +++++++++++++++++++++++++++------------------ 2 files changed, 71 insertions(+), 52 deletions(-) diff --git a/Scripts/Mob/Mob.gd b/Scripts/Mob/Mob.gd index e576a98b..48afd550 100644 --- a/Scripts/Mob/Mob.gd +++ b/Scripts/Mob/Mob.gd @@ -14,7 +14,6 @@ var last_rotation: int var last_chunk: Vector2 var current_chunk: Vector2 -var melee_damage: float = 20.0 var melee_range: float = 1.5 var health: float = 100.0 var current_health: float @@ -243,7 +242,6 @@ func set_sprite(newSprite: Resource): # If it is created from a saved game, it might have lower health for example func apply_stats_from_dmob() -> void: set_sprite(dmob.sprite) - melee_damage = dmob.melee_damage melee_range = dmob.melee_range health = dmob.health current_health = dmob.health @@ -301,7 +299,6 @@ func get_data() -> Dictionary: "global_position_y": last_position.y, "global_position_z": last_position.z, "rotation": last_rotation, - "melee_damage": melee_damage, "melee_range": melee_range, "health": health, "current_health": current_health, diff --git a/Scripts/player.gd b/Scripts/player.gd index 493e1ffd..ed51c6b7 100644 --- a/Scripts/player.gd +++ b/Scripts/player.gd @@ -29,8 +29,11 @@ var attributes = {} var time_since_ready = 0.0 var delay_before_movement = 2.0 # 2 second delay -# Variable to store the last recorded y level -var last_y_level: int = 0 + +# Variables to handle knockback +var knockback_active = false +var knockback_velocity: Vector3 = Vector3.ZERO +var knockback_distance_remaining: float = 0.0 @export var sprite : Sprite3D @export var collision_detector : Area3D # Used for detecting collision with furniture @@ -123,10 +126,6 @@ func _process(_delta): var current_y_level = global_position.y RenderingServer.global_shader_parameter_set("player_y_level", current_y_level) -# if is_progress_bar_well_progressing_i_guess: -# get_node(progress_bar_filling).scale.x = lerp(1, 0, get_node(progress_bar_timer).time_left / progress_bar_timer_max_time) - - func _physics_process(delta): time_since_ready += delta @@ -141,44 +140,61 @@ func _physics_process(delta): move_and_slide() if is_alive: - var input_dir = Input.get_vector("left", "right", "up", "down") - var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() - - # Athletics skill level - var athletics_level = get_skill_level("athletics") - - # Calculate run multiplier based on athletics skill level - run_multiplier = 1.1 + (athletics_level / 100.0) * (2.0 - 1.1) - - # Calculate stamina lost while running based on athletics skill level - stamina_lost_while_running_per_sec = 15 - (athletics_level / 100.0) * (15 - 5) - - # Calculate stamina regeneration while standing still based on athletics skill level - stamina_regen_while_standing_still = 3 + (athletics_level / 100.0) * (8 - 3) - - # Check if the player is pushing furniture - if pushing_furniture and furniture_body: - # Apply resistance based on the mass of the furniture collider - var mass = PhysicsServer3D.body_get_param(furniture_body, PhysicsServer3D.BODY_PARAM_MASS) - var resistance = 1.0 / mass - velocity = direction * speed * resistance - else: - if not is_running or current_stamina <= 0: - velocity = direction * speed - elif is_running and current_stamina > 0: - velocity = direction * speed * run_multiplier - - if velocity.length() > 0: - current_stamina -= delta * stamina_lost_while_running_per_sec - # Add XP for running - add_skill_xp("athletics", 0.01) - - if velocity.length() < 0.1: - current_stamina += delta * stamina_regen_while_standing_still - if current_stamina > stamina: - current_stamina = stamina - - update_stamina_HUD.emit(current_stamina) + # Handle knockback movement if active + if knockback_active: + # Set the knockback velocity for this frame + velocity = knockback_velocity + move_and_slide() # Call without arguments + + # Update the remaining knockback distance + knockback_distance_remaining -= knockback_velocity.length() * delta + + # Check if knockback is complete + if knockback_distance_remaining <= 0.0: + knockback_active = false + velocity = Vector3.ZERO # Reset velocity + + # Check if the player is stunned; if so, prevent control-based movement + if is_stunned(): + move_and_slide() # Keep moving with existing velocity but no input-based movement + return # Prevent further processing for player control + + # Player control movement + if not knockback_active: + var input_dir = Input.get_vector("left", "right", "up", "down") + var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() + + # Athletics skill level + var athletics_level = get_skill_level("athletics") + + # Calculate run multiplier and stamina modifications + run_multiplier = 1.1 + (athletics_level / 100.0) * (2.0 - 1.1) + stamina_lost_while_running_per_sec = 15 - (athletics_level / 100.0) * (15 - 5) + stamina_regen_while_standing_still = 3 + (athletics_level / 100.0) * (8 - 3) + + # Check if the player is pushing furniture + if pushing_furniture and furniture_body: + # Apply resistance based on the mass of the furniture collider + var mass = PhysicsServer3D.body_get_param(furniture_body, PhysicsServer3D.BODY_PARAM_MASS) + var resistance = 1.0 / mass + velocity = direction * speed * resistance + else: + # Movement logic + if not is_running or current_stamina <= 0: + velocity = direction * speed + elif is_running and current_stamina > 0: + velocity = direction * speed * run_multiplier + if velocity.length() > 0: + current_stamina -= delta * stamina_lost_while_running_per_sec + add_skill_xp("athletics", 0.01) + + # Stamina regeneration when standing still + if velocity.length() < 0.1: + current_stamina += delta * stamina_regen_while_standing_still + if current_stamina > stamina: + current_stamina = stamina + + update_stamina_HUD.emit(current_stamina) move_and_slide() @@ -571,13 +587,19 @@ func _on_wearable_was_unequipped(wearableItem: InventoryItem, _wearableSlot: Con _modify_player_attribute_on_equip(wearableItem, false) # false for unequipping -# Function to handle knockback +# Function to handle knockback, initializing the velocity and distance # knockback_distance: The number of tiles (units) to push the player back # mob_position: The global position of the mob that initiated the knockback func _perform_knockback(knockback_distance: float, mob_position: Vector3): + knockback_active = true var direction_vector = (global_position - mob_position).normalized() - var knockback_vector = direction_vector * knockback_distance + knockback_velocity = direction_vector * speed * 3.0 # Adjust this factor as needed + knockback_distance_remaining = knockback_distance - # Move the player by the knockback vector at 3 times the player's current speed - velocity += knockback_vector * speed * 3.0 - move_and_slide() + +# Function to check if the "stun" attribute's current amount is greater than 0 +func is_stunned() -> bool: + if attributes.has("stun"): + var stun_attribute: PlayerAttribute = attributes["stun"] + return stun_attribute.default_mode.current_amount > 0 + return false From 2dce25abcbf1d006024382e32dd5cd7a9c398166 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Mon, 11 Nov 2024 14:18:27 +0100 Subject: [PATCH 20/22] Implement mob attack cooldown --- Mods/Core/Maps/parking_garage.json | 2986 ++++++++++++++++- Mods/Core/Maps/store_electronic_clothing.json | 12 +- Mods/Core/Mobs/Mobs.json | 23 +- Mods/Core/Mobs/iron_stalker_64.png | Bin 3862 -> 0 bytes Mods/Core/Mobs/iron_stalker_72.png | Bin 0 -> 4628 bytes ....png.import => iron_stalker_72.png.import} | 8 +- .../Custom_Editors/Scripts/MobEditor.gd | 4 +- Scripts/Chunk.gd | 5 + Scripts/Mob/MobAttack.gd | 1 + 9 files changed, 3021 insertions(+), 18 deletions(-) delete mode 100644 Mods/Core/Mobs/iron_stalker_64.png create mode 100644 Mods/Core/Mobs/iron_stalker_72.png rename Mods/Core/Mobs/{iron_stalker_64.png.import => iron_stalker_72.png.import} (66%) diff --git a/Mods/Core/Maps/parking_garage.json b/Mods/Core/Maps/parking_garage.json index 70ed637c..47d33286 100644 --- a/Mods/Core/Maps/parking_garage.json +++ b/Mods/Core/Maps/parking_garage.json @@ -67,6 +67,40 @@ "id": "null" } ] + }, + { + "entities": [ + { + "count": 10, + "id": "scrapwalker", + "type": "mob" + }, + { + "count": 5, + "id": "rust_sentinel", + "type": "mob" + }, + { + "count": 2, + "id": "scavenger_skitter", + "type": "mob" + }, + { + "count": 2, + "id": "iron_stalker", + "type": "mob" + } + ], + "id": "mobs", + "pick_one": false, + "rotate_random": true, + "spawn_chance": 100, + "tiles": [ + { + "count": 10000, + "id": "null" + } + ] } ], "categories": [ @@ -398,6 +432,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -408,6 +446,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" @@ -417,6 +459,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" @@ -581,6 +627,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" @@ -590,6 +640,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" @@ -599,23 +653,51 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, @@ -735,6 +817,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -745,6 +831,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_01" @@ -754,23 +844,51 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, @@ -889,6 +1007,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" @@ -898,6 +1020,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_01" @@ -907,22 +1033,50 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top" }, { @@ -1026,6 +1180,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1036,6 +1194,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1046,23 +1208,51 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_medium_dirt_02" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, @@ -1182,6 +1372,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_medium_dirt_02" @@ -1191,6 +1385,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" @@ -1200,23 +1398,51 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_02" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, @@ -1345,6 +1571,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1355,6 +1585,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" @@ -1364,22 +1598,50 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, @@ -1388,6 +1650,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1398,6 +1664,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1408,6 +1678,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1418,6 +1692,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1428,6 +1706,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1438,6 +1720,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1448,6 +1734,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1458,6 +1748,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1468,6 +1762,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1478,6 +1776,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1488,6 +1790,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1498,6 +1804,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1508,6 +1818,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1518,6 +1832,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1528,6 +1846,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1538,6 +1860,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1548,6 +1874,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1558,6 +1888,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1568,6 +1902,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1578,6 +1916,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1588,6 +1930,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1598,6 +1944,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1608,6 +1958,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1638,6 +1992,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_02" @@ -1647,6 +2005,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_02" @@ -1656,22 +2018,50 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_02" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, @@ -1680,7 +2070,11 @@ { "id": "grass", "rotation": 90 - } + }, + { + "id": "mobs", + "rotation": 0 + } ], "id": "grass_plain_01", "rotation": 270 @@ -1690,6 +2084,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1700,6 +2098,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1710,6 +2112,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1720,6 +2126,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1730,6 +2140,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1740,6 +2154,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1750,6 +2168,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1760,6 +2182,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1770,6 +2196,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1780,6 +2210,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1790,6 +2224,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1800,6 +2238,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1810,6 +2252,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1820,6 +2266,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1830,6 +2280,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1840,6 +2294,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1850,6 +2308,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1860,6 +2322,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1870,6 +2336,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1880,6 +2350,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1890,6 +2364,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1900,6 +2378,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1929,6 +2411,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1939,6 +2425,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" @@ -1948,22 +2438,50 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_flowers_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, @@ -1972,6 +2490,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1982,6 +2504,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -1992,6 +2518,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2002,6 +2532,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2012,6 +2546,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2022,6 +2560,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2032,6 +2574,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2042,6 +2588,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2052,6 +2602,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2062,6 +2616,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2072,6 +2630,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2082,6 +2644,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2092,6 +2658,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2102,6 +2672,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2112,6 +2686,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2122,6 +2700,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2132,6 +2714,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2142,6 +2728,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2152,6 +2742,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2162,6 +2756,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2172,6 +2770,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2182,6 +2784,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2192,6 +2798,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2230,22 +2840,50 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, @@ -2254,6 +2892,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2271,6 +2913,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2281,6 +2927,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2291,6 +2941,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2301,6 +2955,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2319,6 +2977,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_00", @@ -2329,6 +2991,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_00", @@ -2339,6 +3005,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2349,6 +3019,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2359,6 +3033,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2376,6 +3054,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2386,6 +3068,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2396,6 +3082,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2406,6 +3096,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2416,6 +3110,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2461,22 +3159,50 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, @@ -2485,6 +3211,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2502,6 +3232,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2512,6 +3246,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2522,6 +3260,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2532,6 +3274,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2550,6 +3296,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_00" @@ -2559,6 +3309,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_00", @@ -2569,6 +3323,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2579,6 +3337,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2589,6 +3351,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2607,6 +3373,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2617,6 +3387,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2627,6 +3401,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2637,6 +3415,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2647,6 +3429,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -2673,100 +3459,280 @@ "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { - "id": "road_asphalt_basic", - "rotation": 270 - }, + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 270 + }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00" }, { @@ -2776,96 +3742,276 @@ "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { @@ -2875,96 +4021,276 @@ "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic" }, { @@ -2975,122 +4301,302 @@ "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, @@ -3103,122 +4609,302 @@ "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, @@ -3231,122 +4917,302 @@ "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, @@ -3359,122 +5225,302 @@ "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, @@ -3487,122 +5533,302 @@ "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "sidewalk_00", "rotation": 180 }, @@ -3633,6 +5859,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3643,6 +5873,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3653,6 +5887,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3663,6 +5901,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3673,6 +5915,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3691,6 +5937,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3701,6 +5951,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3711,6 +5965,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3721,6 +5979,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_00", @@ -3731,6 +5993,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_00", @@ -3749,6 +6015,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3759,6 +6029,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3769,6 +6043,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3779,6 +6057,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3797,24 +6079,52 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, @@ -3823,6 +6133,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3869,6 +6183,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3879,6 +6197,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3889,6 +6211,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3899,6 +6225,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3909,6 +6239,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3927,6 +6261,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3937,6 +6275,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3947,6 +6289,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3957,6 +6303,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_00", @@ -3967,6 +6317,10 @@ { "id": "grass", "rotation": 0 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_00", @@ -3985,6 +6339,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -3995,6 +6353,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4005,6 +6367,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4015,6 +6381,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4033,24 +6403,52 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, @@ -4059,6 +6457,10 @@ { "id": "grass", "rotation": 180 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4097,6 +6499,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4107,6 +6513,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4117,6 +6527,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4127,6 +6541,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4137,6 +6555,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4147,6 +6569,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4157,6 +6583,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4167,6 +6597,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4177,6 +6611,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4187,6 +6625,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4197,6 +6639,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4207,6 +6653,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4217,6 +6667,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4227,6 +6681,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4237,6 +6695,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4247,6 +6709,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4257,6 +6723,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4267,6 +6737,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4277,6 +6751,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4287,6 +6765,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4297,6 +6779,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4307,6 +6793,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4317,24 +6807,52 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, @@ -4343,6 +6861,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_flowers_00", @@ -4353,6 +6875,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4363,6 +6889,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4393,6 +6923,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4403,6 +6937,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4413,6 +6951,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4423,6 +6965,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4433,6 +6979,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4443,6 +6993,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4453,6 +7007,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4463,6 +7021,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4473,6 +7035,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4483,6 +7049,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4493,6 +7063,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4503,6 +7077,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4513,6 +7091,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4523,6 +7105,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4533,6 +7119,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4543,6 +7133,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4553,6 +7147,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4563,6 +7161,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4573,6 +7175,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4583,6 +7189,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4593,6 +7203,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4603,6 +7217,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4613,24 +7231,52 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, @@ -4639,6 +7285,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_02", @@ -4649,6 +7299,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_02", @@ -4659,6 +7313,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_02", @@ -4689,6 +7347,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4699,6 +7361,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4709,6 +7375,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4719,6 +7389,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4729,6 +7403,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4739,6 +7417,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4749,6 +7431,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4759,6 +7445,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4769,6 +7459,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4779,6 +7473,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4789,6 +7487,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4799,6 +7501,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4809,6 +7515,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4819,6 +7529,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4829,6 +7543,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4839,6 +7557,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4849,6 +7571,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4859,6 +7585,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4869,6 +7599,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4879,6 +7613,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4889,6 +7627,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4899,6 +7641,10 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4909,24 +7655,52 @@ { "id": "grass", "rotation": 90 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 180 }, @@ -4935,6 +7709,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4945,6 +7723,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -4955,6 +7737,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5088,18 +7874,42 @@ "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, @@ -5108,6 +7918,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_02", @@ -5118,6 +7932,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5128,6 +7946,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_medium_dirt_02", @@ -5246,18 +8068,42 @@ "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 90 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, @@ -5266,6 +8112,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_medium_dirt_02", @@ -5276,6 +8126,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5286,6 +8140,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5404,18 +8262,42 @@ "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 180 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, @@ -5424,6 +8306,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5434,6 +8320,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_01", @@ -5444,6 +8334,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5562,18 +8456,42 @@ "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_horizontal_top", "rotation": 0 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, @@ -5582,6 +8500,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5592,6 +8514,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_dirt_01", @@ -5602,6 +8528,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5720,18 +8650,42 @@ "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, { + "areas": [ + { + "id": "mobs", + "rotation": 0 + } + ], "id": "road_asphalt_basic", "rotation": 270 }, @@ -5740,6 +8694,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5750,6 +8708,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5760,6 +8722,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5933,6 +8899,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5943,6 +8913,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", @@ -5953,6 +8927,10 @@ { "id": "grass", "rotation": 270 + }, + { + "id": "mobs", + "rotation": 0 } ], "id": "grass_plain_01", diff --git a/Mods/Core/Maps/store_electronic_clothing.json b/Mods/Core/Maps/store_electronic_clothing.json index 9a3e9a75..5fbf15a2 100644 --- a/Mods/Core/Maps/store_electronic_clothing.json +++ b/Mods/Core/Maps/store_electronic_clothing.json @@ -3,22 +3,28 @@ { "entities": [ { - "count": 2, + "count": 10, "id": "scrapwalker", "type": "mob" }, { - "count": 1, + "count": 5, "id": "rust_sentinel", "type": "mob" + }, + { + "count": 2, + "id": "iron_stalker", + "type": "mob" } ], "id": "mob_spawn", + "pick_one": false, "rotate_random": true, "spawn_chance": 100, "tiles": [ { - "count": 2000, + "count": 6000, "id": "null" } ] diff --git a/Mods/Core/Mobs/Mobs.json b/Mods/Core/Mobs/Mobs.json index 5c6b2e8b..46eb6684 100644 --- a/Mods/Core/Mobs/Mobs.json +++ b/Mods/Core/Mobs/Mobs.json @@ -25,7 +25,8 @@ "generichouse_end", "subway_station", "office_building_00", - "city_square" + "city_square", + "parking_garage" ], "quests": [ "starter_tutorial_00" @@ -88,7 +89,8 @@ "generichouse_end", "subway_station", "office_building_00", - "city_square" + "city_square", + "parking_garage" ] } }, @@ -140,7 +142,8 @@ "references": { "core": { "maps": [ - "city_square" + "city_square", + "parking_garage" ] } }, @@ -193,16 +196,24 @@ "loot_group": "mob_loot", "melee_cooldown": 2, "melee_knockback": 2, - "melee_range": 2, + "melee_range": 1, "move_speed": 1, "name": "Iron Stalker", + "references": { + "core": { + "maps": [ + "parking_garage", + "store_electronic_clothing" + ] + } + }, "sense_range": 60, "sight_range": 150, - "sprite": "iron_stalker_64.png", + "sprite": "iron_stalker_72.png", "targetattributes": { "all_of": [ { - "damage": 10, + "damage": -10, "id": "stun" } ], diff --git a/Mods/Core/Mobs/iron_stalker_64.png b/Mods/Core/Mobs/iron_stalker_64.png deleted file mode 100644 index 75a2db609e634e8388282b98abc52cb9c5f4aa92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3862 zcmbuCc{o&k|HsGHq(X6r7$$oQ##m>@AdxYW5kgURl3C0Qw`~UDCW+C=Zm3(`?vgD+ zWvT44+!QgY5tFsCPuAg?`aRe4`|J7ZIoJ7o-k4{Lr1{6_@^!*VXeO`FVwelKeaj z^@GDbbab?T%@GNR66JT4{n^pdE5r|=tD~zAf$Bi?pvQG|5C%pFsG*Fl8i7CN@Xs+$ zfjB<^-}v_l{obPfmhS<7-7(3FZ$c~RHR^mM_7hp~3CRoae{y|qah7i!{AoD)_~HEk zzw$Swt66+3^%Fb%daVC%qOEH%5!7kRpG_WZY3>v*keX*gb3Z4YNN}?*Tvjhsf--yH zeXlLYJ#Lor5p;%GQ>tcspcpV`&AbjF+<29 z0+^-fzQS4M7OodOaa%8rYRKz$Epu+E9>pe>pQUsa5xMsa0>J$aR4U20{AJFgy!Or* zn~n#183RF2C!XM;Bf^)@vZyC1=B6nSXl6%FG^d>*GI!ueX*@fi?e6^LS5QpI z>c(8i?BI<^QZVkNE-x%iQGbgo_aaXblRe!(6cVy@{bkG^nEaT7uMP})H@3getaau* zmUKkM_{S@NQ0$E(&{j|k+h^ka*7d?q{#)-e=ig`4iuL=iaN%vpO#@udO8R+xjeZ#h zY-hGN&6%pS%lvUs4VIW<&-E()E+kJ@dIqZkozKbkh>rMVIXvIoD^;NJ0)cb*UrtgyEu&DoG@s(YO0dI4ICAQw2vt#XUKOW%fCSTO}z?dm`{kX_UJ@u3H zi;v*e?at-E-<|)OjEA7&#b7a=yqN)yDaPB0;N&%AI9oEQOdK^gVo+%43dLx}-n@q{ zjPyySJsSCn%x!6j5qVNNdKeMEGdUS!Hy_$;_OzrqEqVPZ=g%AYB{+$bsgG)+-EIp9 z=*>w#u1%mHYYv?sPDJZO01aflD~pg3x@JeU#fp&HfN*W+p9Ucqt zP(E&*Oj8QXG-0mxT#O49v{`C}-y;8=4@^YsJ}p^LPQE0E`U}FFyX**tXWxM0;y~(G z0B${|Xo19KJQov@I<1^sE&XG%gBEI(TXo1jMb_c!Q-=oP_wxoPlE-TX+DgQo9VRy% z%uEHB?^?>yY$(N`saoieGFtz#ydY(wQX#nu zmhnxqqyqC2^N(CtJf8aSm1@ujsmAwV;t>emro$T>_bZ;__lcwkEb0F{^g69VGXU3m3bf{8>Gt<7#^7sU+T4jQiYFXJfU{ zshgIPC)D2j=yadF6c_ri91}=(KeZBvGWx6RHy~=FrYxZ8Ia5&9DeqyAD)e$IY_MKZ zTzz5{lwSqWSPkE~`hxW6Tgu`n&+(~bkAp;OuS_WjBVaCgQfWq+3T~}n=kd$TMTR>hI592K4sat$S-pGxcu z9zL%biX*cx&V_v(H}dzesj}G_zVdcFY7Tlm?%X~4UyR81?Ayti;Kz7daduWbA(3}* zAfSj^8}aoI8K&UQ$~%ZyG>7?o_WO5i3QRG^K0=Z*l5aOoi<+LNks{s*Tju6;LKPd-m%c6fknQpE2o0;w1{-8nF zBdLu3aqaA|wfnp!Fab1DxT$)+(Qx8yC68^qxpGn($<2d=n@?|33%P|bwwY==G^VN9|9 zuB1%Hb7oYmIH00o#b*1DL1E{SR@KEw!ahc|Ak9KyHVc(>+GnALXW;vtp07x2gfwk< zmq6fBoVSyD3k^@}>V@`C4L|8ROtO0Yf@_i?4ImGsOWo;pqIlo96ZxaQ!heP2gAuP! zroFl-{Vr1lt*n!5F>PD9AOG&Q64;d2=?udsc*+jX4zFm0x?_)!eBM=I)TOCN5!-a( zvH64dqx^VHxi55p{LbH8@(sT9Mev^l9(8m}X>dp8Lt1@ef2LRCi*# zI50}(1BB3h=fT(=-KtArN0u}&ZGn47rd+~1>)jrUt+m7lNIy!I%x^Ib_& zih04d6-PAx(yrGa&JAG zhq0j+iky2#Q?63SI|My_FMhW@!(Uy2F}s`7lZlTpq7o{chC73-yF5MKV=3O(B(UVm zzdwR-YUrN82B2nD4imGMX%2kmY8*Yl_kW9KB&*=vy$`yu^7f-R#Kq?IGu>sYteK`;~uJ*!+}qClNj(YDln?t`_i~MX}O26D1zkV0c!OiMndy z)raEQ&(|&mHZEr?0pbqXcoTW!$oJQ1JDO7|V#aTk#K+e6`COJ@AXb|VJ6Ek6V3Zlt z$1|CX5Aa&nZ_7uvXG@Bl#|IcL@6bXfF_x+~Zx;DPaSYct#<$_A!7#4~0r=fVIWXV0 zRKe-nBXf1N2eAs$@o+Y>XQ-}PXn&r4%GV0hC28|%$#KtH9^F;-^;tSGPFQ9|^KRs% z9XP@^E3fM$3ydZ)!vxT{Jj*qAGzA-WFgJd0W+r&oFWjJTK=XiwCSs#zdC0uL0>8X+ zv!g@enJtq;V_h2{$ND7cvNOOQQ3np|++s&6xhBc(H1BQ&9V9n`LGFz3T}Ms%Vq%@& zw=2&Ads<+$E8$CeM2*PlKF+?`5Qub!Os^yzcTuQ&H=(Sy1SfE zi1t5c&N#M|o;P1_5v#zuP!`r4A6(N`&x>i`8iX=Co4;vxp4#wzgE1IxM` z)9+h#h`lZ0LPWu184n6^lBG~>_^~o0>3zJrbgak)WTe7uF?e576+jTHc+$S;;Rtpp z5OGY*^Mw{XUO)NgXVv!sW5lMm%NE!w$}@x%VKub0obL-pPIC?GU!t^Viajn9 z@It|TA}S(EWKT!fBy*zjn78&|_KiCBrjTNv?pSp67kwi{!>91|RJLVB%SQOoJ}a@j z1TFO3r<;ru0k_-JH<0Wz-R5N}iNpnk6|Pb5ZY^3nn#liko~f_^(S@*Xu?0^1mh)9} zmnBR$Jlj-r^?_rV`8DCB2&@v>7s>l!zifN&<{sNOYJI)xJO{KguL7ZFHfsT5srS_c z(G5Z>@F};!djG)Kb2eY72v?s=eVF{rjEC9>IVOo$-&Ze00{@W}vqznt0%n;vfvk6ICYTeg(JNgVxH|5+1&=3B35s+t{I|J*U33q0 z-mN80Sj`?KXN213zi|1yNi(hS{5?qj@uL|OlBC;;+q)d@n#wT)e3@e7h8`UF4Dmb@ zFi@)XhHgfc`FcmGI`JivnOqU+{Y}czr?*1y&5#RDG)NpK0X_f1+o7AQY5JlU9aV$} z+XQn=?&I5pt*3q{XCa6)gNFJt=S~hurO+N!xNVyO z@h8-dH3Ri09R6x@>aO2pcIQ>ID@<_@J4~Y|w@JGavj?s;S`|lP`Maq9eVYnEpR=

*dQc8=!qPV5UQe51OW*lw1gS~X#xra=|~Or(5?q* z(nLf+x`2_6^k#qvhF(JP#`EsD@6-GA_E>ZM=l=cY7;~>LYwfX!w@r{-zYG5k006j9 z`nqNe)&CXeSsC;FjT$6FU>Hl3ld&=28Y36{Wio>4zxo@KFyP#O$ayA_|K_|521xX$ zy=Mr!hn}9#ulIkR$!qnW840_mz7+#<@cjy=p_z~q21NVbvh>w+amN6_&K@`nnBar) z2J3pD2{;Vi*9Yw2j=?)(yyZMy{4ws2ynW?xk9>R?75^7kf-0iDF^_x+-WWTWlBd6& zf`a@%wH5%eTt+*=U+r`s`C4Ns&UUrV{y2aDM&F}kKL zV%S$yRaG@rXBl3_p?5yRtn+Dfm87%8TaMo!Ogan5rFaX}56dZ4e=-url4;pTGXa!= z9I)CG+A%F4@1S`l_ZUkd-MFNPZnS|f8rx9;!+PT;nRKaT>nOn`AJ_+~>4}YIFr|ci za!tcLAF54PS75fDQ7w6Ai76po$lFHk_9M7FZfxxrvb5{>Z?4nwCf#A8&m8sh%co5> zVioNw`jIMUrG_fVw$Uwz(cZ7(b+~5LAF#6;V{3W&?AHPf9(L9sfkfAX+Bc;3iS{Mc z);ipgzC^G=^cR^C#7fyj?!~4T>6ISlWjk?|#@&O8a@$q7{?T{1SQsj}Yf`E1XB$rJ zqycFzx1ZM(x)!$_HXfq>c7v}FT-{MeEW6%B1`OTd-%IJ~@uznT^!BBL5B{jJwZk2e zYjMq%xeClU2RfAyo|RDTx`{TwsEoqNzBz5MJ@t6=GkAquSU~Bm_Io;&OT^9*k(Fxp zLRih4oY}0>?clDAdOl7moUe*3TmRso0B#OcD*nLw+LT`Op3JapVa`{6z|tWb&zQGY z&`DIMIQeH8?&rGDkJoXvrs#=LET>C6ke-M&%9U!xzCkVax7&Fg3KHAunTpiUAn{o| zIHONa?bL-E-kz)Op1y;A;P;y!RR;#%L_PE^#mISb2HvDjVL0LIr4y*coBVRIMl=4D zvKO77MQJK-XpA&A-#@@!3vniMf&veaWsp=8TJbHqy9)2oX)tTRy zqPh#$4nHR;_gG(6-l~%-n;sVI%X0R%*ScNkc*DzB?5IZvF*&`;7g%@r{h1DG-PYc% zr{E$w7iPwp%v3TLaeD&#<-(Nc*|aB`WKliYArx_3WQZ%;`?8|9FTL--6%yroeM3eD z;;!dSK(6yyRG*4DCUH^~zkb}#HLr5$wJN9AG?n&o$s_BC3mWiQ_}AauxqO!IWw{y9 zhokJcr5`(x_3wp&WHQywlCQ-rs6^6Mou?fKeQtL@SaieFdkJsEqnNLEsZVxLs4+U> zIrt%VlNrgYgF=gubxrG+Lxv_Y6|t9i#57kgHa+*2#H4#R#$;z}-BfJ7?T4Q*+?RPQ z&luA!D%G})&cn8h|oMltrHS|~) zHf~Mq9>@7FdFM1Q2is3?t{rfS)HGh}v@Ywa4k&od{Jv2i7d*Kvx|qB3U1$Gq-UpXS z0DH*E{q&xbSlNUSOxKr`6_mp^FnL=>!1BbMav^VctI=3o`I=DuvsKiyhe+5t7_KU6 z+pT?@S{ZQIjKsuMexUz7_blY>XyvStRyS_@JwZCa%n9LbiF6SkKG0T9lnzh2^hxyt zxaH)HN>9pj(47BLTr<{*(whz^&~FQ*C#!l4hG;H8&rWv8q`;cPjfS}r755;`jn$P@ z3){>yNwcH6a>l0rvxY|-$jNU;uh53TZ_B64o-$K%H2l)?g0_1pYo&R%*;;}1D##rk zak$OW6OOC2m##K9EbQFz0E)rr+C$_f+J~m2MUD>~;@ttq z`x|;KO(Sn$@3fxMXxdje!whDhxjY>RduPLayx94IOFe6%(;|4=Sz%{8zeBQ@92pxR zh72dElJgMY z*MrTa19@3{Gous2$jc){E8dwfGW$?E)aT2v zNw)Gz5ant0rIf|)#H>iuLXu=>{8#*3TA`Szgx3xcI6U*TuiiaXmvV|U06%iPWy zZ2!O8_+)e@7QSTh#p(J7-6 zI6D)9|2D9-4%N%sZA~d7!l~@)_joo71PP@r0~}^f4zOr>RutMMMm%`;PM);zQrAEl zaK>4qF}ZsJ2uHuVtI?2c8TckGU>_&Cvvuj(2}J^a?1t`0%ck6Em4KOHJE`qHhNuMwu7<;aiDt$(lY5Jfcy z!hqXXI<2B6cMFWC)g1Cfxf+Dv(AI=+*Ltl zR_{IWd$qK}GTr1?sS~9A(hj9SaBtizl^#R5=JWCzIdJn_%2N%Z5Jk(POMBa0jy`)) z741kt{^b(1Y^Cvx>y{!{E1|(7J?ak2_f1S8Oo@s9&e16V8(6n&uzY3qh?=}x4_jCE zE-^)iBpe_#+}dG)yYj7< z(hv?{ueBoXqQ@sHTh1omFPYVPeO~PYw`gu@`76xYxai9VsO}UFZV}3ri7zBSn1cQN}aGezf6RbSV^7N_&B%u;>_nOrvnWncK8EhI3bYc6mn#^s&! z*%$39FU0{}xQZIzTSfelSNF{z{)v0X?ndy)7xw%;#2@qa)ci!YEC@{t=*dm0i+t?x zW#z;>hG14zu46k;oVM5BS)sb#L2N_JL?mD4_>P6T>)EARRM@PgI6*Lr?s)k$)!jz^ zyF2TBeF>U8f-YK(v7_hYgO1+mJ#{Sfh&&r{sTbtNOY@tS(w zQt6e#ho2%qSGE~v2ja1J@@SXX$`YW`wpravTr`KY+h2@`>{eKZSgm#qphSY7#4zQn z)r*H57Jy%{@cX^`OYtyqm96u-g>8;lqY^U@M6IXOLXCA84-Q%R>f-(JdrW?s$M!1Y zh@;+{%F>7|s59TEFZwSyp|3PmNQv-2rF9C}O|RQ7cLg&|X$m{kDL8*&Z&f+_r0`)& zYJYFs&NQz2{X&}u-eNMI-IKS%EL%tqm7-#6}xe}rV3ToGhrJ0B(cG4Nc= zC;!vEaTPNB*qtP3zU1^kYd(~|CVLeWa7y1>D+Q~zsWFA`7E80@=|?Z@rCWh~P&H~t z<-?}>AX@W5mYdBA@CJX|zt}3c4*ceV$2%(SoWUyOKKF)^h++J(5xriPcTwC2e;)Id zzLZ@WV=EM&TOSt%NGJK47`UR7-D>!}Yv(wPkr~GRWajHw>i(bcWo~uv#?99b7g)SN zX@dOMqr}x}Q@`@VBTof~5y6&!=(gt14@;+1KZvt?{8Z6G&0GAmILgaZudcVum`C1X z#Xoqy^21_=G<{)P&)mf8FwP38fu6@&@S;Ey7wgaMN_4YSPj_<-8+PdRHu-sIw)LCh z2@cfWO0p^+zSuH|v#73dP6+w&mRRAZAJgLxay?oXZG7?dU@ z*m^3>eRj#aICpPbiKXzJl8;&48q7;(^PY8?1BH1sF9d<0@TGwBn8 z-h|RwxCnkusMozjZI$@XZ^$(<9ydDFh znIt%2>%J2(=dAT#e#IO8?Itt+221z%b+b8(NRN3sOkP*Sm|Al}cSced`$zN49=aRs zY!>G}rmy%05!R2CUWV5tQ7=^t`FF-B$~Qo_h^Q9e)w=>3>2|?m#+ez*8yUhE6;?ul zYX#Z6g{3)ryQTNYlbMCKOOq4}m-hyq_&^mGcB7s^(>Rw>O)jvkzvrw<)i>SVi+A;?9Gl?;FIsIgHstoV;h(DS9qQNp2}4MM)s>95(##s#-|uH yj5V30jAaNGdoA0 Date: Mon, 11 Nov 2024 15:09:40 +0100 Subject: [PATCH 21/22] give stun attack to drone --- Mods/Core/Mobs/Mobs.json | 26 +++---------------- .../PlayerAttributes/PlayerAttributes.json | 13 +++------- 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/Mods/Core/Mobs/Mobs.json b/Mods/Core/Mobs/Mobs.json index 46eb6684..98f6c792 100644 --- a/Mods/Core/Mobs/Mobs.json +++ b/Mods/Core/Mobs/Mobs.json @@ -252,7 +252,7 @@ "id": "disruptor_drone", "idle_move_speed": 0.8, "loot_group": "mob_loot", - "melee_cooldown": 1, + "melee_cooldown": 2, "melee_knockback": 0, "melee_range": 1.5, "move_speed": 2.5, @@ -271,28 +271,8 @@ "all_of": [], "any_of": [ { - "damage": 0, - "id": "head_health" - }, - { - "damage": 0, - "id": "torso_health" - }, - { - "damage": 0, - "id": "left_arm_health" - }, - { - "damage": 0, - "id": "right_arm_health" - }, - { - "damage": 0, - "id": "left_leg_health" - }, - { - "damage": 0, - "id": "right_leg_health" + "damage": -10, + "id": "stun" } ] } diff --git a/Mods/Core/PlayerAttributes/PlayerAttributes.json b/Mods/Core/PlayerAttributes/PlayerAttributes.json index b95f1e82..7ea64c44 100644 --- a/Mods/Core/PlayerAttributes/PlayerAttributes.json +++ b/Mods/Core/PlayerAttributes/PlayerAttributes.json @@ -113,7 +113,6 @@ "rust_sentinel", "scavenger_skitter", "iron_stalker", - "disruptor_drone", "outpost_guardian" ] } @@ -150,7 +149,6 @@ "rust_sentinel", "scavenger_skitter", "iron_stalker", - "disruptor_drone", "outpost_guardian" ] } @@ -187,8 +185,7 @@ "rust_sentinel", "scavenger_skitter", "iron_stalker", - "outpost_guardian", - "disruptor_drone" + "outpost_guardian" ] } }, @@ -224,8 +221,7 @@ "rust_sentinel", "scavenger_skitter", "iron_stalker", - "outpost_guardian", - "disruptor_drone" + "outpost_guardian" ] } }, @@ -261,7 +257,6 @@ "rust_sentinel", "scavenger_skitter", "iron_stalker", - "disruptor_drone", "outpost_guardian" ] } @@ -298,7 +293,6 @@ "rust_sentinel", "scavenger_skitter", "iron_stalker", - "disruptor_drone", "outpost_guardian" ] } @@ -377,7 +371,8 @@ "references": { "core": { "mobs": [ - "iron_stalker" + "iron_stalker", + "disruptor_drone" ] } }, From 49176e8e1c01437160e69985152eb9a594e83782 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Mon, 11 Nov 2024 20:27:29 +0100 Subject: [PATCH 22/22] Add neighborhood school map --- Mods/Core/Furniture/Furniture.json | 66 +- Mods/Core/Itemgroups/Itemgroups.json | 9 +- Mods/Core/Maps/Generichouse_00.json | 4 +- Mods/Core/Maps/neighborhood_school.json | 23092 ++++++++++++++++ Mods/Core/Maps/neighborhood_school.png | Bin 0 -> 4329 bytes Mods/Core/Maps/neighborhood_school.png.import | 34 + Mods/Core/Mobs/Mobs.json | 6 +- Mods/Core/Overmapareas/Overmapareas.json | 4 + Mods/Core/Tiles/Tiles.json | 209 +- 9 files changed, 23330 insertions(+), 94 deletions(-) create mode 100644 Mods/Core/Maps/neighborhood_school.json create mode 100644 Mods/Core/Maps/neighborhood_school.png create mode 100644 Mods/Core/Maps/neighborhood_school.png.import diff --git a/Mods/Core/Furniture/Furniture.json b/Mods/Core/Furniture/Furniture.json index 6e918040..21c38d74 100644 --- a/Mods/Core/Furniture/Furniture.json +++ b/Mods/Core/Furniture/Furniture.json @@ -26,7 +26,8 @@ "generichouse_end", "city_square", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -61,7 +62,8 @@ "generichouse_end", "city_square", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -154,7 +156,8 @@ "subway_station", "city_square", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -203,7 +206,8 @@ "subway_station", "city_square", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -255,7 +259,8 @@ "subway_station", "city_square", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -292,7 +297,8 @@ "store_groceries", "generichouse_end", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -334,7 +340,8 @@ "generichouse_end", "city_square", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -446,7 +453,8 @@ "Generichouse_00", "generichouse_end", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -490,7 +498,8 @@ "Generichouse_00", "generichouse_end", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -531,7 +540,8 @@ "store_groceries", "generichouse_end", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -574,7 +584,8 @@ "store_groceries", "generichouse_end", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -609,7 +620,8 @@ "Generichouse", "store_electronic_clothing", "subway_station", - "city_square" + "city_square", + "neighborhood_school" ] } }, @@ -648,7 +660,8 @@ "Generichouse", "Generichouse_00", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -717,7 +730,8 @@ "store_electronic_clothing", "store_groceries", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -815,7 +829,8 @@ "store_electronic_clothing", "store_groceries", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -884,7 +899,8 @@ "Generichouse", "Generichouse_00", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -1093,7 +1109,8 @@ "subway_station", "city_square", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -1195,7 +1212,8 @@ "RockyHill_SW", "store_groceries", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -1239,7 +1257,8 @@ "subway_station", "city_square", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -1270,7 +1289,8 @@ "store_groceries", "generichouse_end", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -1310,7 +1330,8 @@ "store_groceries", "generichouse_end", "office_building_00", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -1379,7 +1400,8 @@ "maps": [ "abandoned_building", "parking_garage", - "city_square" + "city_square", + "neighborhood_school" ] } }, diff --git a/Mods/Core/Itemgroups/Itemgroups.json b/Mods/Core/Itemgroups/Itemgroups.json index dac3c52d..f114930a 100644 --- a/Mods/Core/Itemgroups/Itemgroups.json +++ b/Mods/Core/Itemgroups/Itemgroups.json @@ -279,7 +279,8 @@ "abandoned_building", "subway_station", "city_square", - "skyscraper" + "skyscraper", + "neighborhood_school" ] } }, @@ -763,7 +764,8 @@ "store_electronic_clothing", "store_groceries", "subway_station", - "city_square" + "city_square", + "neighborhood_school" ] } }, @@ -795,7 +797,8 @@ "store_groceries", "subway_station", "city_square", - "office_building_00" + "office_building_00", + "neighborhood_school" ] } }, diff --git a/Mods/Core/Maps/Generichouse_00.json b/Mods/Core/Maps/Generichouse_00.json index 7ab388bf..8ac73e89 100644 --- a/Mods/Core/Maps/Generichouse_00.json +++ b/Mods/Core/Maps/Generichouse_00.json @@ -439,8 +439,8 @@ ], "categories": [ "House", - "Urban", - "City" + "City", + "Suburban" ], "connections": { "east": "road", diff --git a/Mods/Core/Maps/neighborhood_school.json b/Mods/Core/Maps/neighborhood_school.json new file mode 100644 index 00000000..e158eae5 --- /dev/null +++ b/Mods/Core/Maps/neighborhood_school.json @@ -0,0 +1,23092 @@ +{ + "areas": [ + { + "entities": [ + { + "count": 2, + "id": "scrapwalker", + "type": "mob" + }, + { + "count": 1, + "id": "rust_sentinel", + "type": "mob" + } + ], + "id": "mob_spawn", + "pick_one": false, + "rotate_random": true, + "spawn_chance": 100, + "tiles": [ + { + "count": 1500, + "id": "null" + } + ] + }, + { + "entities": [ + { + "count": 1, + "id": "Tree_00", + "type": "furniture" + }, + { + "count": 1, + "id": "PineTree_00", + "type": "furniture" + }, + { + "count": 1, + "id": "WillowTree_00", + "type": "furniture" + } + ], + "id": "trees", + "pick_one": false, + "rotate_random": true, + "spawn_chance": 100, + "tiles": [ + { + "count": 25, + "id": "null" + } + ] + }, + { + "entities": [], + "id": "classroom_floor", + "pick_one": true, + "rotate_random": true, + "spawn_chance": 100, + "tiles": [ + { + "count": 1, + "id": "linoleum_greyblue_00" + }, + { + "count": 1, + "id": "linoleum_lightblue_00" + }, + { + "count": 1, + "id": "linoleum_lightblue_01" + }, + { + "count": 1, + "id": "linoleum_lightblue_02" + }, + { + "count": 1, + "id": "linoleum_white_02" + }, + { + "count": 1, + "id": "linoleum_white_01" + }, + { + "count": 1, + "id": "linoleum_green_02" + }, + { + "count": 1, + "id": "linoleum_green_00" + }, + { + "count": 1, + "id": "linoleum_white_00" + }, + { + "count": 1, + "id": "linoleum_brown_00" + }, + { + "count": 1, + "id": "linoleum_brown_01" + }, + { + "count": 1, + "id": "linoleum_green_01" + }, + { + "count": 1, + "id": "linoleum_blue_00" + }, + { + "count": 1, + "id": "red_carpet_00" + }, + { + "count": 1, + "id": "blue_carpet_00" + }, + { + "count": 1, + "id": "orange_carpet_00" + }, + { + "count": 1, + "id": "floor_wood_boards_00" + }, + { + "count": 1, + "id": "floor_wood_boards_04" + }, + { + "count": 1, + "id": "floor_wood_boards_03" + }, + { + "count": 1, + "id": "floor_wood_boards_02" + }, + { + "count": 1, + "id": "floor_wood_boards_01" + }, + { + "count": 1, + "id": "floor_wood_boards_07" + }, + { + "count": 1, + "id": "floor_wood_boards_08" + }, + { + "count": 1, + "id": "floor_wood_boards_05" + }, + { + "count": 1, + "id": "floor_wood_boards_06" + } + ] + }, + { + "entities": [], + "id": "cafeteria_floor", + "pick_one": true, + "rotate_random": true, + "spawn_chance": 100, + "tiles": [ + { + "count": 1, + "id": "kitchen_tiles_yellow_00" + }, + { + "count": 1, + "id": "kitchen_tiles_yellow_01" + }, + { + "count": 1, + "id": "kitchen_tiles_yellow_02" + }, + { + "count": 1, + "id": "kitchen_tiles_mint_00" + }, + { + "count": 1, + "id": "kitchen_tiles_green_02" + }, + { + "count": 1, + "id": "kitchen_tiles_green_01" + }, + { + "count": 1, + "id": "kitchen_tiles_green_00" + }, + { + "count": 1, + "id": "kitchen_tiles_mint_03" + }, + { + "count": 1, + "id": "kitchen_tiles_mint_02" + }, + { + "count": 1, + "id": "kitchen_tiles_mint_01" + }, + { + "count": 1, + "id": "kitchen_tiles_blue_00" + }, + { + "count": 1, + "id": "kitchen_tiles_blue_01" + }, + { + "count": 1, + "id": "kitchen_tiles_blue_02" + }, + { + "count": 1, + "id": "kitchen_tiles_purple_00" + }, + { + "count": 1, + "id": "kitchen_tiles_purple_01" + }, + { + "count": 1, + "id": "kitchen_tiles_purple_02" + }, + { + "count": 1, + "id": "bathroom_tiles_blue_00" + } + ] + }, + { + "entities": [], + "id": "bathroom_floor", + "pick_one": true, + "rotate_random": true, + "spawn_chance": 100, + "tiles": [ + { + "count": 1, + "id": "kitchen_tiles_mint_00" + }, + { + "count": 1, + "id": "kitchen_tiles_yellow_02" + }, + { + "count": 1, + "id": "kitchen_tiles_yellow_01" + }, + { + "count": 1, + "id": "kitchen_tiles_yellow_00" + }, + { + "count": 1, + "id": "kitchen_tiles_mint_01" + }, + { + "count": 1, + "id": "kitchen_tiles_mint_02" + }, + { + "count": 1, + "id": "kitchen_tiles_mint_03" + }, + { + "count": 1, + "id": "kitchen_tiles_green_00" + }, + { + "count": 1, + "id": "kitchen_tiles_green_01" + }, + { + "count": 1, + "id": "kitchen_tiles_green_02" + }, + { + "count": 1, + "id": "kitchen_tiles_purple_02" + }, + { + "count": 1, + "id": "kitchen_tiles_purple_00" + }, + { + "count": 1, + "id": "kitchen_tiles_blue_02" + }, + { + "count": 1, + "id": "kitchen_tiles_purple_01" + }, + { + "count": 1, + "id": "kitchen_tiles_blue_01" + }, + { + "count": 1, + "id": "kitchen_tiles_blue_00" + } + ] + }, + { + "entities": [], + "id": "grassy_fence", + "pick_one": false, + "rotate_random": true, + "spawn_chance": 100, + "tiles": [ + { + "count": 500, + "id": "grass_plain_01" + }, + { + "count": 1, + "id": "grass_dirt_00" + }, + { + "count": 1, + "id": "grass_dirt_01" + }, + { + "count": 1, + "id": "grass_dirt_02" + }, + { + "count": 1, + "id": "grass_medium_dirt_00" + }, + { + "count": 1, + "id": "grass_medium_dirt_01" + }, + { + "count": 1, + "id": "grass_medium_dirt_02" + }, + { + "count": 50, + "id": "grass_flowers_00" + }, + { + "count": 50, + "id": "grass_flowers_01" + }, + { + "count": 50, + "id": "grass_flowers_02" + }, + { + "count": 50, + "id": "grass_flowers_03" + } + ] + }, + { + "entities": [], + "id": "hallway_floor", + "pick_one": true, + "rotate_random": true, + "spawn_chance": 100, + "tiles": [ + { + "count": 1, + "id": "blue_carpet_00" + }, + { + "count": 1, + "id": "red_carpet_00" + }, + { + "count": 1, + "id": "orange_carpet_00" + }, + { + "count": 1, + "id": "floor_wood_boards_00" + }, + { + "count": 1, + "id": "floor_wood_boards_04" + }, + { + "count": 1, + "id": "floor_wood_boards_03" + }, + { + "count": 1, + "id": "floor_wood_boards_02" + }, + { + "count": 1, + "id": "floor_wood_boards_01" + }, + { + "count": 1, + "id": "floor_wood_boards_07" + }, + { + "count": 1, + "id": "floor_wood_boards_08" + } + ] + }, + { + "entities": [], + "id": "grass_edge", + "pick_one": false, + "rotate_random": true, + "spawn_chance": 100, + "tiles": [ + { + "count": 100, + "id": "grass_plain_01" + }, + { + "count": 1, + "id": "grass_dirt_00" + }, + { + "count": 1, + "id": "grass_dirt_01" + }, + { + "count": 1, + "id": "grass_dirt_02" + }, + { + "count": 1, + "id": "grass_medium_dirt_00" + }, + { + "count": 1, + "id": "grass_medium_dirt_01" + }, + { + "count": 1, + "id": "grass_medium_dirt_02" + }, + { + "count": 1, + "id": "grass_dirt_north_00" + }, + { + "count": 1, + "id": "grass_dirt_center_00" + }, + { + "count": 1, + "id": "grass_flowers_03" + }, + { + "count": 1, + "id": "grass_flowers_02" + }, + { + "count": 1, + "id": "grass_flowers_01" + } + ] + }, + { + "entities": [ + { + "count": 1, + "id": "destroyed_furniture_medium", + "type": "itemgroup" + } + ], + "id": "destroyed_furniture", + "pick_one": false, + "rotate_random": false, + "spawn_chance": 100, + "tiles": [ + { + "count": 30, + "id": "null" + } + ] + } + ], + "categories": [ + "House", + "City", + "Suburban" + ], + "connections": { + "east": "ground", + "north": "road", + "south": "ground", + "west": "ground" + }, + "description": "A small neighborhood school with a playground in disrepair. Classrooms hold abandoned supplies, and the gym offers shelter for those passing through.", + "id": "neighborhood_school", + "levels": [ + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [ + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_horizontal", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 180 + } + ], + "id": "road_asphalt_basic", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00" + }, + { + "areas": [ + { + "id": "mob_spawn", + "rotation": 0 + } + ], + "id": "sidewalk_00" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 90 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "grass_plain_01" + }, + { + "id": "dirt_light_00" + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "dirt_light_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [] + }, + "id": "red_carpet_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [] + }, + "id": "red_carpet_00", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "dirt_light_00", + "rotation": 180 + }, + { + "id": "dirt_light_02", + "rotation": 180 + }, + { + "id": "dirt_light_02" + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "dirt_light_00", + "rotation": 90 + }, + { + "id": "dirt_light_00", + "rotation": 90 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "dirt_light_02" + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "dirt_light_00", + "rotation": 90 + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "id": "dirt_light_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 90 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_01", + "rotation": 270 + }, + { + "id": "sand_fine_00", + "rotation": 270 + }, + { + "id": "sand_fine_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_garden", + "itemgroups": [], + "rotation": 90 + }, + "id": "grass_dirt_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "grass_plain_01" + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "wardrobe", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "wardrobe", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_lightblue_01" + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "stove", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 90 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_plain_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_plain_01", + "rotation": 270 + }, + { + "id": "sand_fine_00", + "rotation": 270 + }, + { + "id": "sand_fine_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "grass_plain_01" + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "wardrobe", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "wardrobe", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_lightblue_01" + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "refrigerator_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "table_round_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "table_round_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "table_round_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "id": "dirt_light_02" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 90 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_plain_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_garden", + "itemgroups": [], + "rotation": 90 + }, + "id": "grass_dirt_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "grass_plain_01" + }, + { + "id": "dirt_light_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "wardrobe", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "wardrobe", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_lightblue_01" + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "trash_bin", + "itemgroups": [], + "rotation": 90 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [] + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [] + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [] + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "dirt_light_02", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 90 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_plain_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_plain_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "grass_plain_01" + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 270 + }, + "id": "dirt_light_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "vending_machine", + "itemgroups": [ + "vending_machine_drinks", + "vending_machine_snacks" + ], + "rotation": 90 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "dirt_light_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 90 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_plain_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_plain_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_02", + "rotation": 270 + }, + { + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "floor_wood_shabby_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "floor_wood_shabby_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_lightblue_01" + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "table_round_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "table_round_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "table_round_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 90 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_garden", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_garden", + "itemgroups": [], + "rotation": 180 + }, + "id": "grass_plain_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_flowers_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "trees", + "rotation": 180 + }, + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_dirt_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grassy_fence", + "rotation": 0 + } + ], + "id": "grass_plain_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "grass_plain_01" + }, + { + "id": "dirt_light_02" + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [] + }, + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [] + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [] + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [] + }, + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "id": "kitchen_tiles_green_00", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 90 + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [] + }, + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 270 + }, + "id": "dirt_light_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "kitchen_tiles_green_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "cafeteria_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "kitchen_tiles_green_01", + "rotation": 180 + }, + { + "id": "dirt_light_00" + }, + { + "id": "dirt_light_01" + }, + { + "id": "dirt_light_01", + "rotation": 90 + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "id": "dirt_light_00" + }, + { + "id": "dirt_light_01" + }, + { + "id": "dirt_light_01" + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "id": "dirt_light_02", + "rotation": 180 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_00", + "rotation": 180 + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "id": "dirt_light_00", + "rotation": 180 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_02" + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "id": "dirt_light_00", + "rotation": 180 + }, + { + "id": "dirt_light_00", + "rotation": 270 + }, + { + "id": "dirt_light_02", + "rotation": 180 + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "id": "dirt_light_02", + "rotation": 180 + }, + { + "id": "dirt_light_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "furniture": { + "id": "security_gate", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_blue_00", + "rotation": 90 + }, + { + "furniture": { + "id": "wall_shelf", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_blue_00", + "rotation": 90 + }, + { + "id": "dirt_light_02" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_white_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [] + }, + "id": "blue_carpet_00" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [] + }, + "id": "blue_carpet_00" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "dirt_light_02" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "dirt_light_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "dirt_light_02", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_00", + "rotation": 270 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 90 + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top", + "rotation": 270 + }, + { + "furniture": { + "id": "trash_bin", + "itemgroups": [], + "rotation": 270 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_00", + "rotation": 180 + }, + { + "id": "dirt_light_02", + "rotation": 180 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "dirt_light_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 90 + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_horizontal_top" + }, + { + "id": "road_asphalt_basic", + "rotation": 90 + }, + { + "furniture": { + "id": "vending_machine", + "itemgroups": [ + "vending_machine_drinks", + "vending_machine_snacks" + ], + "rotation": 270 + }, + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "road_asphalt_basic", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_00", + "rotation": 180 + }, + { + "id": "dirt_light_00", + "rotation": 180 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "trash_bin", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_office", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "trash_bin", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "chair_office", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 270 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "dirt_light_02" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "id": "dirt_light_00", + "rotation": 90 + }, + { + "id": "dirt_light_01" + }, + { + "id": "dirt_light_01", + "rotation": 90 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "id": "dirt_light_01" + }, + { + "id": "dirt_light_00", + "rotation": 180 + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "id": "dirt_light_00", + "rotation": 270 + }, + { + "id": "dirt_light_02" + }, + { + "id": "dirt_light_02" + }, + { + "id": "dirt_light_02" + }, + { + "id": "dirt_light_02", + "rotation": 180 + }, + { + "id": "dirt_light_00", + "rotation": 180 + }, + { + "id": "dirt_light_02", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "dirt_light_02" + }, + { + "id": "dirt_light_01", + "rotation": 90 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "dirt_light_00" + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "dirt_light_00" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "dirt_light_00" + }, + { + "id": "dirt_light_01", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "dirt_light_01", + "rotation": 90 + }, + { + "id": "dirt_light_01" + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "dirt_light_00", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "dirt_light_00", + "rotation": 90 + }, + { + "id": "dirt_light_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "dirt_light_00", + "rotation": 270 + }, + { + "id": "dirt_light_00" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + }, + { + "areas": [ + { + "id": "grass_edge", + "rotation": 0 + } + ], + "id": "grass_plain_01" + } + ], + [ + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "wood_stairs", + "rotation": 180 + }, + { + "id": "wood_stairs", + "rotation": 180 + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 180 + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "concrete_00", + "rotation": 180 + }, + { + "id": "concrete_00", + "rotation": 180 + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "concrete_00", + "rotation": 180 + }, + { + "id": "concrete_00", + "rotation": 180 + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + } + ], + [ + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [] + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "plant_pot_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "plant_pot_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_office", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_office", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 0 + }, + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 270 + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "plant_pot_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_green_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_green_02" + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_02" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_green_02" + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_02" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_02" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00" + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "orange_carpet_00" + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "bathroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "toilet_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_blue_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "bathroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "kitchen_tiles_blue_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [] + }, + "id": "linoleum_white_01" + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [] + }, + "id": "linoleum_white_01" + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "bathroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "toilet_00", + "itemgroups": [], + "rotation": 270 + }, + "id": "kitchen_tiles_blue_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "bathroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "kitchen_tiles_blue_02", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_wood", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bench_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "wood_stairs", + "rotation": 180 + }, + { + "id": "wood_stairs", + "rotation": 180 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 90 + }, + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "door_wood", + "itemgroups": [], + "rotation": 90 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 180 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "desk", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "areas": [ + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "destroyed_fence", + "itemgroups": [], + "rotation": 270 + }, + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "id": "floor_wood_boards_02", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "plant_pot_00", + "itemgroups": [], + "rotation": 180 + }, + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 180 + }, + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 180 + }, + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "areas": [ + { + "id": "hallway_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "plant_pot_00", + "itemgroups": [], + "rotation": 180 + }, + "id": "orange_carpet_00", + "rotation": 90 + }, + { + "id": "brick_wall_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "trash_bin", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_office", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "furniture": { + "id": "trash_bin", + "itemgroups": [] + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "chair_office", + "itemgroups": [], + "rotation": 180 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + } + ], + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "areas": [ + { + "id": "classroom_floor", + "rotation": 0 + }, + { + "id": "destroyed_furniture", + "rotation": 90 + } + ], + "furniture": { + "id": "bookcase_wood_00", + "itemgroups": [], + "rotation": 90 + }, + "id": "linoleum_white_01", + "rotation": 270 + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "furniture": { + "id": "window_glass", + "itemgroups": [], + "rotation": 180 + }, + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + } + ], + [ + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01" + }, + { + "id": "brick_wall_01" + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + "id": "brick_wall_01", + "rotation": 180 + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + }, + { + + } + ], + [], + [], + [], + [], + [], + [], + [] + ], + "mapheight": 32, + "mapwidth": 32, + "name": "Neighborhood School", + "references": { + "core": { + "overmapareas": [ + "city" + ] + } + }, + "weight": 1000 +} \ No newline at end of file diff --git a/Mods/Core/Maps/neighborhood_school.png b/Mods/Core/Maps/neighborhood_school.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6f63cdd1c5d0e16c4a564101935a00a781f0fa GIT binary patch literal 4329 zcmY*dc{tQv`~QwXW2a=#Od@0%szhD@SErTUBBP^zJHu^pXKwp@9RG2y3X~vPl}C|2_LrvHvj;9W~N4V zEQ|T4K{#1`x1ReT%YZ`cObmfqqSQ|S5PWH7WN;%Qf2F|su`Jo8uajndGmP#>U;T|W z<4r$;OqdDF_h!{+q2{}|xNO*d#0L{hK`CI9gyh8JV1y|q*r2}uy}YLEF?JaPL1I53jr2q_snn3JY<2<9_Xxp(KlNQuL@fbB0c(?~R8t^|qtY z<_C+&*qnYrKLZR9YT{9_ ztLZ!{aavAKut8`vB{$1XSe~$5V0)?$Eh`9liqs}|>`l))qK^{8qR5D=Y=(dxcg+h< z!1L3$I{d*kmAR_H$;Nj~% zH0M|FWmj6o#(_PunLgBc3immJu@!>Wthh~+0Iy9^w3Zt0U~V!F{V#UTI)%&T2PNr! ztAM{7$V)ED(b`(*ILr;8hn$TNyrSGaTjdkm?#mk}1$}#ePg&e;rgv}<=vyzYE^W2e z^XGKHuYV_Nt0CMl1RxH?24?4k@Cu5-{%_$+Zo#F70j+LSR0jOGWx5E4o zg;!&v{;1`*>WE#dP?7mxcQL!Uc}I!ZW=@S4AYxQZJ8z&!!S|?aaY{`ec@S7IezHk= zRaurJIRxA#2Z_uN*5PyN0mt|uuAZ$9sOsDk>+2+KC+XK`T@K^>Dv?$uyC3gPX%8Ga zro%gDsjB?1({~J|DD0?>swwAY{vgaBO?Zn_i)<60W*fF!u{;hY(QzP&i?(hU4J|c- z#3T>za1r>w6YCp|1N{RJb7PT3#fl70aBzCR1cPge+q3Tg^{Z5N&h}@n`yp%(^{D?E zi(nZC*|KLq!R(dnepZmZgC!>^*sNWnv$66w-eP$f*!hISl}^!*D>v_8QS2{`R{5x>+sbvTCbA!Fz8ociB5eZSpkq#CdnMFIFN%`d2CwKXDqa{8zSOt*gZ6 zCiwb>lcMm1%qTY#S8Koj+j^5tf4_fzsaIVq>vjvOkTgYIXy;X%xxo0*IAwDT&vo}6 znmq_^h_CbA6@_oZgx&ZI%wc~^IP0c4DE6x;=hGTV``E?HQkNAJ>&MORPv%DKc8P68 zyG(zDy61_yt~6pls6RORake}%efnAA6m_=^ zM~d$)PI;86x7!!lG?%xM&Yrii71e-VscI=l@e)vN8C(%Zt=6)^nU7#UVis!)7FW1{ zlt-t{WL}Pw^SKxiAGc}^vPRwgG~0a<>1r)xlh030kEh9mJZoVyU&?Dv1UEwzFn%OM zIq(-hcCYflp3?Hj-EV5f>VGQOCE*GnBt3GU5;9uAj>qVfV?d`;V6kMkh4P&e!oL1c z@Z&K>t)K)eDFeksoe(t+P|-vl-aa#~UW7ia=TX1s#Enqok~^7`et-UEDtKvC`PP9| zkboFS!>ahn^9*9s6>FmcwFHue_f|~oYg(S>{Z87H5*T^krxK3wh7 zaQ!3M+&z!_Wm)zlr;QM-EWWY!>Eeo|Vp6=3^`CAZYugr?RPvPMv9%$-HEJjk(m{*B1a!ohY)Sfwky(+pOa~-x6^H)h8_lpZ^dO)ikdd}9F zd@2oDJ$PEOd1R&K-FCvEZ1smz1HRL2;Ll-^D1^JMXSoD8vuckKnq&Wr@VN5(d|J>+ z-IL{Z$S|XuwB)N$(#ktk7_Wgb+ZZaf;*8S5IERo}kr|akI`V)TNH2h%86717(|z~? zNy_#Vk-E8|!%s8PtVHDS{{-!uy(XoA5e2t^o|y=BRaD zk=7wwXCcm9DE~e`^G8w!^aI~cxV%^!yw_w^=aD26uRdMiv3B7mb5F8iBOj?<&9Jqv z*3Y>1cvdBF9ULTQwf@;Rz{3f!1DrsYdhq8YNJn2=?*TG~c?*pkuteMtN3u0@yU!GY zSbA=~^uRY~dm&a-7V_{K9o1GOZt>$v(v5{obA)jtdaT(0^ZCDFCO0`1zMkO5O=F93$>wN3y0w5fK`V*u%1{%Q^$>sm#MtUy+4dP^ zyR8S1*x7l2e7e3vZdMPZ!G7v$J~)5ubHVx{J~xoJ?>%a1OHk5D5Dc& z6~^a&`{HWYye}K-*YDO?FFH2RUv26}WHgepPCx41bvn^c-QSIA3y+G+n*TWgNPPh_~<9k$%!)_&Fsp>R`w;ztaI{fz6meo7f)ka9=WV?knqyr=NSAb#K>j z`|_A@uf}J>L=LR_ZENpY{VVd+;&?SLa*PbGm35c54-hhGSh2vFlAOkd<%)6GBH~ z_liDr(hhPVpB{Ylp9lQ6&8Dh*#3#=a{GNVdZZ6X1?o&H8!>jV>UWe!qCJv4&Kc2KE zcZljdY!&EoI#wy;t>Qi;`b<@1G~i%{R`9mH90kIOBNW3T3`%oe)kdOQ^s0_5Q*v|9 z8;+VG(kc0lZ}ohmXSacv!xnCbaq?g;y7*NY3%1Cl%elHj;{5KzN?#NRH{U@`?6my? zrFR3w)&UhpQ`iac+Ts4_$Q)TFMH?3U`p?$Anw9a|OK9xDw7i6ut&|!jWHk^o7)!6Y zNE0A09PS^7({6)gV1p`BDP_OLn&sKG&m_Ch2!JFJz>y%_yssU3DcVq&8sV=Cm;hBb zcTR;@k*#-^2|()42l8=Gj@M5#wqovH07%GYe%`GRp55Yz-E5Cqv#4i}frI@kk?y7`rjRH{DZHzoCP=e-v zn*0bULhJLajUK0Re%{yLgD|h*Zg0e4zgZ4m!&&BwH>X3CR8hWk(*yMLJq1?XLJUL# zWUrOYR@O0e@di#>P#U3P6kah()AJ(BX;xjP%~{b7$6)a^?Yi0USY7?Pj+Na#oz9i7 z?@bCVr%QBa(X-e-=}DjQqvrY63SHMjNpk1hK?kOpI=)XVbKZ(!8k6{U3go7D+E8;} zds92~-M;R`gn*WRBGF57n9MY(8!~H~FHbpmolYdURr8o2v?fhlg^%gk|8d{