fixed camera script and restructured ui folder

This commit is contained in:
Luca 2024-09-27 21:31:03 +02:00
parent 877ebafc74
commit 5748d34b34
32 changed files with 781 additions and 162 deletions

View file

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false process/hdr_clamp_exposure=false
process/size_limit=0 process/size_limit=0
detect_3d/compress_to=1 detect_3d/compress_to=1
svg/scale=1.0 svg/scale=2.0
editor/scale_with_editor_scale=false editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false editor/convert_colors_with_editor_theme=false

View file

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false process/hdr_clamp_exposure=false
process/size_limit=0 process/size_limit=0
detect_3d/compress_to=1 detect_3d/compress_to=1
svg/scale=1.0 svg/scale=3.0
editor/scale_with_editor_scale=false editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false editor/convert_colors_with_editor_theme=false

View file

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false process/hdr_clamp_exposure=false
process/size_limit=0 process/size_limit=0
detect_3d/compress_to=1 detect_3d/compress_to=1
svg/scale=1.0 svg/scale=3.0
editor/scale_with_editor_scale=false editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false editor/convert_colors_with_editor_theme=false

View file

@ -32,6 +32,6 @@ process/hdr_as_srgb=false
process/hdr_clamp_exposure=false process/hdr_clamp_exposure=false
process/size_limit=0 process/size_limit=0
detect_3d/compress_to=1 detect_3d/compress_to=1
svg/scale=1.0 svg/scale=3.0
editor/scale_with_editor_scale=false editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false editor/convert_colors_with_editor_theme=false

View file

@ -1,8 +1,6 @@
class_name Monster class_name Monster
extends CharacterBody3D extends CharacterBody3D
signal level_up
@export var data: MonsterData = MonsterData.new() @export var data: MonsterData = MonsterData.new()
var spawn_point: Vector3 = Vector3(0, 0, 0) var spawn_point: Vector3 = Vector3(0, 0, 0)
@ -28,8 +26,9 @@ func _physics_process(delta: float) -> void:
time += delta time += delta
var x_movement = sin(time * frequency) * amplitude var x_movement = sin(time * frequency) * amplitude
var y_movement = sin(time * 25) * 4.0
var z_movement = cos(time * frequency) * amplitude var z_movement = cos(time * frequency) * amplitude
velocity = Vector3(x_movement, 0, z_movement) velocity = Vector3(x_movement, y_movement, z_movement)
# if move_and_slide reports collisions # if move_and_slide reports collisions
if move_and_slide(): if move_and_slide():

View file

@ -81,9 +81,13 @@ func start_battle(enemy: Node3D, player_position: Vector3) -> void:
in_battle = true in_battle = true
velocity = Vector3.ZERO velocity = Vector3.ZERO
animated_mesh.idle() animated_mesh.idle()
UI.show_battle_ui(true)
UI.show_ingame_controls(false)
await get_tree().create_timer(2.0).timeout await get_tree().create_timer(2.0).timeout
print("timer over") print("Battle over")
in_battle = false in_battle = false
func save() -> Dictionary: func save() -> Dictionary:

View file

@ -1,14 +1,10 @@
[gd_scene load_steps=4 format=3 uid="uid://cswuap81n7t3f"] [gd_scene load_steps=3 format=3 uid="uid://cswuap81n7t3f"]
[ext_resource type="Script" path="res://game.gd" id="1_mfbtr"] [ext_resource type="Script" path="res://game.gd" id="1_mfbtr"]
[ext_resource type="PackedScene" uid="uid://bhhqaysqjw2d" path="res://worlds/world1/world1.tscn" id="2_knpqt"] [ext_resource type="PackedScene" uid="uid://bhhqaysqjw2d" path="res://worlds/world1/world1.tscn" id="2_knpqt"]
[ext_resource type="PackedScene" uid="uid://b5y7pdfe6ougf" path="res://ui/ui.tscn" id="2_ynhuf"]
[node name="Game" type="Node3D"] [node name="Game" type="Node3D"]
script = ExtResource("1_mfbtr") script = ExtResource("1_mfbtr")
starting_world = ExtResource("2_knpqt") starting_world = ExtResource("2_knpqt")
[node name="UI" parent="." instance=ExtResource("2_ynhuf")]
[node name="CurrentScene" type="Node3D" parent="."] [node name="CurrentScene" type="Node3D" parent="."]
unique_name_in_owner = true

16
globals/Utils.gd Normal file
View file

@ -0,0 +1,16 @@
extends Node
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
func load_base_monster_data(p_unique_id) -> MonsterData:
var path = "res://resources/monsters/" + p_unique_id + ".tres"
if ResourceLoader.exists(path):
var base_monster = load(path)
return base_monster
else:
printerr("Monster.gd: No monster with the ID %s found" % p_unique_id)
return null

18
globals/audio_manager.gd Normal file
View file

@ -0,0 +1,18 @@
extends Node
@export var music: Array
func play():
pass
func stop_all():
pass
func fade_out():
pass
func fade_in():
pass
func battle():
pass

View file

@ -18,9 +18,11 @@ config/icon="res://assets/logo/logo.png"
[autoload] [autoload]
Utils="*res://globals/Utils.gd"
SaveManager="*res://resources/save_game/save_manager.gd" SaveManager="*res://resources/save_game/save_manager.gd"
UI="*res://ui/ui.gd"
SceneManager="*res://globals/scene_manager.gd" SceneManager="*res://globals/scene_manager.gd"
AudioManager="*res://globals/audio_manager.gd"
UI="*res://ui/ui.tscn"
[display] [display]
@ -35,8 +37,6 @@ window/handheld/orientation=1
folder_colors={ folder_colors={
"res://assets/": "red", "res://assets/": "red",
"res://entities/": "blue", "res://entities/": "blue",
"res://globals/": "purple",
"res://materials/": "pink",
"res://resources/": "yellow", "res://resources/": "yellow",
"res://ui/": "green" "res://ui/": "green"
} }
@ -48,22 +48,22 @@ save_nodes=""
[input] [input]
joystick_right_right={ joystick_right_right={
"deadzone": 0.5, "deadzone": 0.0,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null) "events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null)
] ]
} }
joystick_right_left={ joystick_right_left={
"deadzone": 0.5, "deadzone": 0.0,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":-1.0,"script":null) "events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":-1.0,"script":null)
] ]
} }
joystick_right_up={ joystick_right_up={
"deadzone": 0.5, "deadzone": 0.0,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null) "events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
] ]
} }
joystick_right_down={ joystick_right_down={
"deadzone": 0.5, "deadzone": 0.0,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null) "events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
] ]
} }

View file

@ -1,10 +1,10 @@
class_name MonsterData class_name MonsterData
extends Resource extends Resource
@export var unique_id : String = "" signal on_level_up
@export var display_name : String = "" @export var unique_id : String = ""
@export var nickname: String = "" @export var name : String = ""
@export var description: String = "" @export var description: String = ""
@export var thumbnail: CompressedTexture2D = preload("res://assets/logo/logo.png") @export var thumbnail: CompressedTexture2D = preload("res://assets/logo/logo.png")
@export var model: PackedScene @export var model: PackedScene
@ -16,16 +16,18 @@ extends Resource
@export var base_health: int = 1 @export var base_health: int = 1
@export var base_defense: int = 1 @export var base_defense: int = 1
@export var base_tempo: int = 1 @export var base_tempo: int = 1
@export var base_xp_for_next_level: int = 1 @export var base_xp: int = 1
# Current Values # Current Values
var attack: int = 1 @export var attack: int = 1
var current_health: int = 1 @export var current_health: int = 1
var health: int = 1 @export var health: int = 1
var defense: int = 1 @export var defense: int = 1
var tempo: int = 1 @export var tempo: int = 1
var level: int = 1 @export var level: int = 1
var xp: int = 1 @export var xp: int = 1
@export var nickname: String = ""
@export var xp_for_levelup: int = 1
# The ID is the filename of the monster from res://entities/monsters/<filename>.tres # The ID is the filename of the monster from res://entities/monsters/<filename>.tres
@ -34,34 +36,70 @@ func set_data(p_unique_id = "", current_values: Dictionary = {}, p_level: int =
printerr("Monster.gd: No ID given") printerr("Monster.gd: No ID given")
return return
# Get an instance of the base monster data form the MonsterDatabase # Get an instance of the base monster data
var base_monster = load_base_monster_data(p_unique_id) var base_monster = Utils.load_base_monster_data(p_unique_id)
# set all the values here # Set the values
self.display_name = base_monster.display_name self.name = base_monster.name
self.description = base_monster.description self.description = base_monster.description
self.thumbnail = base_monster.thumbnail self.thumbnail = base_monster.thumbnail
self.model = base_monster.model self.model = base_monster.model
self.primary_type = base_monster.primary_type self.primary_type = base_monster.primary_type
self.secondary_type = base_monster.secondary_type self.secondary_type = base_monster.secondary_type
# Set base values
self.base_attack = base_monster.base_attack self.base_attack = base_monster.base_attack
self.base_health = base_monster.base_health self.base_health = base_monster.base_health
self.base_defense = base_monster.base_defense self.base_defense = base_monster.base_defense
self.base_tempo = base_monster.base_tempo self.base_tempo = base_monster.base_tempo
self.base_xp_for_next_level = base_monster.base_xp_for_next_level self.base_xp = base_monster.base_xp
self.level = p_level
# process custom and current values set_level(p_level)
# If there are not values to edit, return
if current_values.is_empty(): if current_values.is_empty():
return return
if current_values.has("nickname"): # else, set custom values here
self.nickname = current_values.nickname # TODO
func load_base_monster_data(p_unique_id): ## This sets the monster to the specified level
var path = "res://resources/monsters/" + p_unique_id + ".tres" func set_level(p_level: int) -> void:
if ResourceLoader.exists(path): self.level = p_level
var base_monster = load(path) update()
return base_monster
# Updates the values according to the current level of the monster
func update() -> void:
self.attack = int((((base_attack * 2) * level ) / 100) + (level + 5))
self.health = int((((base_health * 2) * level ) / 100) + (level + 5))
self.defense = int((((base_defense * 2) * level ) / 100) + (level + 5))
self.tempo = int((((base_tempo * 2) * level ) / 100) + (level + 5))
self.xp_for_levelup = int(pow(level + 1, 3))
func level_up() -> void:
set_level(level + 1)
emit_signal("on_level_up")
func calculate_gained_xp(enemy_data: MonsterData) -> int:
var calculated_xp: int = 0
calculated_xp = int( (enemy_data.base_xp * enemy_data.level / 5) * ( float(enemy_data.level) / float(level) ) )
return calculated_xp
func add_xp(amount: int = 0) -> void:
xp += amount
if(xp >= xp_for_levelup):
level_up()
func attack_enemy(enemy_data: MonsterData) -> int:
var damage: int = 0
var base_damage: int = 2
printerr("Monster.gd: No monster with the ID %s found" % p_unique_id) damage = floor(floor((level * 2/5 + 2)) * base_damage * (float(attack) / (2 * enemy_data.defense)) + 2)
return damage
func take_damage(amount: int) -> void:
current_health = max(current_health - amount, 0)
func heal(amount: int) -> void:
current_health = min(current_health + amount, health)

View file

@ -7,8 +7,7 @@
[resource] [resource]
script = ExtResource("1_2n3ph") script = ExtResource("1_2n3ph")
unique_id = "debuggy" unique_id = "debuggy"
display_name = "Debuggy" name = "Debuggy"
nickname = "Debuggy"
description = "A debug monster" description = "A debug monster"
thumbnail = ExtResource("2_a4t2w") thumbnail = ExtResource("2_a4t2w")
model = ExtResource("1_dsg0f") model = ExtResource("1_dsg0f")
@ -18,4 +17,13 @@ base_attack = 10
base_health = 20 base_health = 20
base_defense = 30 base_defense = 30
base_tempo = 40 base_tempo = 40
base_xp_for_next_level = 50 base_xp = 3
attack = 1
current_health = 1
health = 1
defense = 1
tempo = 1
level = 1
xp = 1
nickname = ""
xp_for_levelup = 1

View file

@ -0,0 +1,52 @@
[gd_scene load_steps=4 format=3 uid="uid://vxwg04fxtbxf"]
[ext_resource type="Texture2D" uid="uid://d1324yxmpvk8e" path="res://assets/textures/Game Icons/Vector/2x/wrench.png" id="1_2tmqf"]
[ext_resource type="Texture2D" uid="uid://ofkfd2bydpph" path="res://assets/textures/Generic/Vector/generic_button_circle_outline.svg" id="2_88fpt"]
[sub_resource type="LabelSettings" id="LabelSettings_ps1u1"]
font_size = 24
[node name="Move1" type="PanelContainer"]
offset_right = 236.0
offset_bottom = 73.0
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 2
theme_override_constants/margin_left = 6
theme_override_constants/margin_top = 6
theme_override_constants/margin_right = 6
theme_override_constants/margin_bottom = 6
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"]
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="MarginContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("1_2tmqf")
expand_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="MoveName" type="Label" parent="MarginContainer/HBoxContainer/VBoxContainer"]
layout_mode = 2
text = "Move Name 1"
label_settings = SubResource("LabelSettings_ps1u1")
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/HBoxContainer/VBoxContainer"]
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="MarginContainer/HBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("2_88fpt")
expand_mode = 2
[node name="Label" type="Label" parent="MarginContainer/HBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Effective"
[node name="Label2" type="Label" parent="MarginContainer/HBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 10
text = "10 / 10"

18
ui/battle_ui/battle_ui.gd Normal file
View file

@ -0,0 +1,18 @@
extends Control
var move_button = preload("res://ui/battle_ui/battle_move_button.tscn")
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
self.visible = false
for i in range(4):
var button = move_button.instantiate()
$MarginContainer/HBoxContainer/BattleMovesMenu.add_child(button)
func _on_battle_button_pressed() -> void:
print("attack here")
# attack here
#%MainBattleMenu.visible = false
#%BattleMovesMenu.visible = true
pass # Replace with function body.

281
ui/battle_ui/battle_ui.tscn Normal file
View file

@ -0,0 +1,281 @@
[gd_scene load_steps=19 format=3 uid="uid://dyroahq85mhws"]
[ext_resource type="Script" path="res://ui/battle_ui/battle_ui.gd" id="1_jyqir"]
[ext_resource type="Texture2D" uid="uid://ve2k0qrfpwxw" path="res://assets/textures/Generic/Vector/generic_button_circle_fill.svg" id="2_keyyt"]
[ext_resource type="Texture2D" uid="uid://4t8cotroofge" path="res://assets/textures/Game Icons/Vector/2x/upRight.png" id="3_fa6tk"]
[ext_resource type="StyleBox" uid="uid://ddtjhp2lob6to" path="res://ui/styles/battle_ui_normal_button.tres" id="4_r2q1k"]
[ext_resource type="Texture2D" uid="uid://cxry7h4q17lir" path="res://assets/textures/Game Icons/Vector/2x/star.png" id="4_saqy8"]
[ext_resource type="Texture2D" uid="uid://c1dlsfah0ioi5" path="res://assets/textures/Game Icons/Vector/2x/massiveMultiplayer.png" id="5_pnobx"]
[ext_resource type="StyleBox" uid="uid://cv8ispcxuwjn5" path="res://ui/styles/battle_ui_pressed_button.tres" id="5_w48y1"]
[ext_resource type="Texture2D" uid="uid://dbycrn4i3wkhu" path="res://assets/textures/Game Icons/Vector/2x/menuList.png" id="6_ikm1n"]
[ext_resource type="Texture2D" uid="uid://cs84avwwjbn5q" path="res://assets/textures/Game Icons/Vector/2x/exitRight.png" id="7_tihhr"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6o8cs"]
content_margin_left = 20.0
content_margin_top = 2.0
content_margin_right = 20.0
content_margin_bottom = 2.0
bg_color = Color(0, 0, 0, 0.501961)
corner_radius_top_left = 12
corner_radius_top_right = 12
corner_radius_bottom_right = 12
corner_radius_bottom_left = 12
[sub_resource type="LabelSettings" id="LabelSettings_38ujs"]
font_size = 26
[sub_resource type="LabelSettings" id="LabelSettings_kcdfy"]
font_size = 26
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_auqmk"]
content_margin_top = 10.0
content_margin_right = 10.0
bg_color = Color(0, 0, 0, 0.392157)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
expand_margin_left = 3.0
expand_margin_top = 3.0
expand_margin_right = 3.0
expand_margin_bottom = 3.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_84eln"]
bg_color = Color(0, 0.712615, 0.446827, 1)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
expand_margin_left = 1.0
expand_margin_top = 1.0
expand_margin_right = 1.0
expand_margin_bottom = 1.0
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_eqgks"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4ki2k"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_cabkl"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_g6kqv"]
[node name="BattleUI" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("1_jyqir")
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 12
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = -138.0
grow_horizontal = 2
grow_vertical = 0
theme_override_constants/margin_left = 30
theme_override_constants/margin_right = 30
theme_override_constants/margin_bottom = 50
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"]
layout_mode = 2
[node name="Left" type="HBoxContainer" parent="MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_vertical = 8
theme_override_constants/separation = 16
[node name="PartyAliveStatus" type="VBoxContainer" parent="MarginContainer/HBoxContainer/Left"]
layout_mode = 2
[node name="Monster1" type="TextureRect" parent="MarginContainer/HBoxContainer/Left/PartyAliveStatus"]
custom_minimum_size = Vector2(32, 32)
layout_mode = 2
size_flags_horizontal = 0
texture = ExtResource("2_keyyt")
expand_mode = 2
[node name="Monster2" type="TextureRect" parent="MarginContainer/HBoxContainer/Left/PartyAliveStatus"]
self_modulate = Color(1, 1, 1, 0.392157)
custom_minimum_size = Vector2(32, 32)
layout_mode = 2
size_flags_horizontal = 0
texture = ExtResource("2_keyyt")
expand_mode = 2
[node name="Monster3" type="TextureRect" parent="MarginContainer/HBoxContainer/Left/PartyAliveStatus"]
self_modulate = Color(1, 1, 1, 0.392157)
custom_minimum_size = Vector2(32, 32)
layout_mode = 2
size_flags_horizontal = 0
texture = ExtResource("2_keyyt")
expand_mode = 2
[node name="Monster4" type="TextureRect" parent="MarginContainer/HBoxContainer/Left/PartyAliveStatus"]
self_modulate = Color(1, 1, 1, 0.392157)
custom_minimum_size = Vector2(32, 32)
layout_mode = 2
size_flags_horizontal = 0
texture = ExtResource("2_keyyt")
expand_mode = 2
[node name="Monster5" type="TextureRect" parent="MarginContainer/HBoxContainer/Left/PartyAliveStatus"]
self_modulate = Color(1, 1, 1, 0.392157)
custom_minimum_size = Vector2(32, 32)
layout_mode = 2
size_flags_horizontal = 0
texture = ExtResource("2_keyyt")
expand_mode = 2
[node name="Monster6" type="TextureRect" parent="MarginContainer/HBoxContainer/Left/PartyAliveStatus"]
self_modulate = Color(1, 1, 1, 0.392157)
custom_minimum_size = Vector2(32, 32)
layout_mode = 2
size_flags_horizontal = 0
texture = ExtResource("2_keyyt")
expand_mode = 2
[node name="PartyFighterInfo" type="VBoxContainer" parent="MarginContainer/HBoxContainer/Left"]
layout_mode = 2
size_flags_vertical = 0
theme_override_constants/separation = 10
[node name="LevelAndGender" type="HBoxContainer" parent="MarginContainer/HBoxContainer/Left/PartyFighterInfo"]
layout_mode = 2
[node name="Level" type="PanelContainer" parent="MarginContainer/HBoxContainer/Left/PartyFighterInfo/LevelAndGender"]
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_6o8cs")
[node name="Label" type="Label" parent="MarginContainer/HBoxContainer/Left/PartyFighterInfo/LevelAndGender/Level"]
layout_mode = 2
text = "Lv. 99"
label_settings = SubResource("LabelSettings_38ujs")
[node name="Gender" type="TextureRect" parent="MarginContainer/HBoxContainer/Left/PartyFighterInfo/LevelAndGender"]
self_modulate = Color(0.450091, 0.470517, 0.93375, 1)
custom_minimum_size = Vector2(12, 12)
layout_mode = 2
texture = ExtResource("3_fa6tk")
expand_mode = 2
stretch_mode = 4
[node name="MonsterName" type="Label" parent="MarginContainer/HBoxContainer/Left/PartyFighterInfo"]
layout_mode = 2
text = "Monstername"
label_settings = SubResource("LabelSettings_kcdfy")
[node name="ProgressBar" type="ProgressBar" parent="MarginContainer/HBoxContainer/Left/PartyFighterInfo"]
layout_mode = 2
theme_override_styles/background = SubResource("StyleBoxFlat_auqmk")
theme_override_styles/fill = SubResource("StyleBoxFlat_84eln")
value = 50.0
show_percentage = false
[node name="Spacer" type="Control" parent="MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_stretch_ratio = 0.5
[node name="MainBattleMenu" type="VBoxContainer" parent="MarginContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
[node name="BattleButton" type="Button" parent="MarginContainer/HBoxContainer/MainBattleMenu"]
layout_mode = 2
theme_override_constants/h_separation = 18
theme_override_constants/icon_max_width = 20
theme_override_font_sizes/font_size = 26
theme_override_styles/focus = SubResource("StyleBoxEmpty_eqgks")
theme_override_styles/disabled_mirrored = ExtResource("4_r2q1k")
theme_override_styles/disabled = ExtResource("4_r2q1k")
theme_override_styles/hover_pressed_mirrored = ExtResource("4_r2q1k")
theme_override_styles/hover_pressed = ExtResource("4_r2q1k")
theme_override_styles/hover_mirrored = ExtResource("4_r2q1k")
theme_override_styles/hover = ExtResource("4_r2q1k")
theme_override_styles/pressed_mirrored = ExtResource("5_w48y1")
theme_override_styles/pressed = ExtResource("5_w48y1")
theme_override_styles/normal_mirrored = ExtResource("4_r2q1k")
theme_override_styles/normal = ExtResource("4_r2q1k")
text = "Battle"
icon = ExtResource("4_saqy8")
alignment = 0
[node name="PartyButton" type="Button" parent="MarginContainer/HBoxContainer/MainBattleMenu"]
layout_mode = 2
theme_override_constants/h_separation = 18
theme_override_constants/icon_max_width = 20
theme_override_font_sizes/font_size = 26
theme_override_styles/focus = SubResource("StyleBoxEmpty_4ki2k")
theme_override_styles/disabled_mirrored = ExtResource("4_r2q1k")
theme_override_styles/disabled = ExtResource("4_r2q1k")
theme_override_styles/hover_pressed_mirrored = ExtResource("4_r2q1k")
theme_override_styles/hover_pressed = ExtResource("4_r2q1k")
theme_override_styles/hover_mirrored = ExtResource("4_r2q1k")
theme_override_styles/hover = ExtResource("4_r2q1k")
theme_override_styles/pressed_mirrored = ExtResource("5_w48y1")
theme_override_styles/pressed = ExtResource("5_w48y1")
theme_override_styles/normal_mirrored = ExtResource("4_r2q1k")
theme_override_styles/normal = ExtResource("4_r2q1k")
text = "Party"
icon = ExtResource("5_pnobx")
alignment = 0
[node name="ItemsButton" type="Button" parent="MarginContainer/HBoxContainer/MainBattleMenu"]
layout_mode = 2
theme_override_constants/h_separation = 18
theme_override_constants/icon_max_width = 20
theme_override_font_sizes/font_size = 26
theme_override_styles/focus = SubResource("StyleBoxEmpty_cabkl")
theme_override_styles/disabled_mirrored = ExtResource("4_r2q1k")
theme_override_styles/disabled = ExtResource("4_r2q1k")
theme_override_styles/hover_pressed_mirrored = ExtResource("4_r2q1k")
theme_override_styles/hover_pressed = ExtResource("4_r2q1k")
theme_override_styles/hover_mirrored = ExtResource("4_r2q1k")
theme_override_styles/hover = ExtResource("4_r2q1k")
theme_override_styles/pressed_mirrored = ExtResource("5_w48y1")
theme_override_styles/pressed = ExtResource("5_w48y1")
theme_override_styles/normal_mirrored = ExtResource("4_r2q1k")
theme_override_styles/normal = ExtResource("4_r2q1k")
text = "Items"
icon = ExtResource("6_ikm1n")
alignment = 0
[node name="RunButton" type="Button" parent="MarginContainer/HBoxContainer/MainBattleMenu"]
layout_mode = 2
theme_override_constants/h_separation = 18
theme_override_constants/icon_max_width = 20
theme_override_font_sizes/font_size = 26
theme_override_styles/focus = SubResource("StyleBoxEmpty_g6kqv")
theme_override_styles/disabled_mirrored = ExtResource("4_r2q1k")
theme_override_styles/disabled = ExtResource("4_r2q1k")
theme_override_styles/hover_pressed_mirrored = ExtResource("4_r2q1k")
theme_override_styles/hover_pressed = ExtResource("4_r2q1k")
theme_override_styles/hover_mirrored = ExtResource("4_r2q1k")
theme_override_styles/hover = ExtResource("4_r2q1k")
theme_override_styles/pressed_mirrored = ExtResource("5_w48y1")
theme_override_styles/pressed = ExtResource("5_w48y1")
theme_override_styles/normal_mirrored = ExtResource("4_r2q1k")
theme_override_styles/normal = ExtResource("4_r2q1k")
text = "Run"
icon = ExtResource("7_tihhr")
alignment = 0
[node name="BattleMovesMenu" type="VBoxContainer" parent="MarginContainer/HBoxContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
size_flags_horizontal = 3
[connection signal="pressed" from="MarginContainer/HBoxContainer/MainBattleMenu/BattleButton" to="." method="_on_battle_button_pressed"]

View file

@ -2,7 +2,15 @@ extends Control
var pressed: bool = false var pressed: bool = false
var previous_position : Vector2 = Vector2.ZERO var previous_position : Vector2 = Vector2.ZERO
var speed : float = 0.04 var speed : float = 0.5
var delta_position: Vector2 = Vector2.ZERO
var damping_factor: float = 0.08
func _process(delta: float) -> void:
simulate_joystick_motion(JOY_AXIS_RIGHT_X, delta_position.x * delta * speed, 0)
print(delta_position)
#delta_position *= 0.92
delta_position *= (1 - damping_factor)
func _gui_input(event: InputEvent) -> void: func _gui_input(event: InputEvent) -> void:
# Filter touch or drag events only. # Filter touch or drag events only.
@ -11,16 +19,15 @@ func _gui_input(event: InputEvent) -> void:
if event is InputEventScreenTouch: if event is InputEventScreenTouch:
if event.is_pressed(): if event.is_pressed():
previous_position = event.position
pressed = true pressed = true
else: else:
pressed = false pressed = false
simulate_joystick_motion(JOY_AXIS_RIGHT_X, 0, 0) simulate_joystick_motion(JOY_AXIS_RIGHT_X, 0, 0)
previous_position = Vector2.ZERO
if pressed and event is InputEventScreenDrag: if pressed and event is InputEventScreenDrag:
var delta_position : Vector2 = event.position - previous_position delta_position = clamp(previous_position - event.position, Vector2(-10, -10), Vector2(10, 10))
#print(delta_position)
simulate_joystick_motion(JOY_AXIS_RIGHT_X, -delta_position.x * speed, 0)
#simulate_joystick_motion(JOY_AXIS_RIGHT_Y, delta_position.y * speed, 0)
# finally update the previous position # finally update the previous position
previous_position = event.position previous_position = event.position

View file

@ -1,4 +1,4 @@
extends MarginContainer extends Control
class_name IngameControls class_name IngameControls
signal menu_button_clicked signal menu_button_clicked

View file

@ -1,8 +1,8 @@
[gd_scene load_steps=11 format=3 uid="uid://1anjhvi173g3"] [gd_scene load_steps=11 format=3 uid="uid://1anjhvi173g3"]
[ext_resource type="Script" path="res://ui/ingame_controls.gd" id="1_iw1sp"] [ext_resource type="Script" path="res://ui/ingame_controls/ingame_controls.gd" id="1_iw1sp"]
[ext_resource type="Texture2D" uid="uid://2vxx2waofxpw" path="res://assets/textures/Xbox Series/Vector/xbox_button_menu_outline.svg" id="1_wr5sh"] [ext_resource type="Texture2D" uid="uid://2vxx2waofxpw" path="res://assets/textures/Xbox Series/Vector/xbox_button_menu_outline.svg" id="1_wr5sh"]
[ext_resource type="Script" path="res://ui/joystick.gd" id="2_pyri2"] [ext_resource type="Script" path="res://ui/ingame_controls/joystick.gd" id="2_pyri2"]
[ext_resource type="Texture2D" uid="uid://8anyvhkcy4ng" path="res://assets/textures/Xbox Series/Vector/xbox_button_a.svg" id="3_lgi8v"] [ext_resource type="Texture2D" uid="uid://8anyvhkcy4ng" path="res://assets/textures/Xbox Series/Vector/xbox_button_a.svg" id="3_lgi8v"]
[ext_resource type="Texture2D" uid="uid://cbep021ykpb23" path="res://assets/textures/Game Icons/Vector/2x/save.png" id="5_2pil1"] [ext_resource type="Texture2D" uid="uid://cbep021ykpb23" path="res://assets/textures/Game Icons/Vector/2x/save.png" id="5_2pil1"]
[ext_resource type="Texture2D" uid="uid://bwyoxxotdisyp" path="res://assets/textures/Game Icons/Vector/2x/gear.png" id="5_nwwsc"] [ext_resource type="Texture2D" uid="uid://bwyoxxotdisyp" path="res://assets/textures/Game Icons/Vector/2x/gear.png" id="5_nwwsc"]
@ -15,12 +15,26 @@ corner_radius_top_left = 999
corner_radius_top_right = 999 corner_radius_top_right = 999
corner_radius_bottom_right = 999 corner_radius_bottom_right = 999
corner_radius_bottom_left = 999 corner_radius_bottom_left = 999
corner_detail = 12
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_hfsbq"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_hfsbq"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_x4icw"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_x4icw"]
[node name="IngameControls" type="MarginContainer"] [node name="IngameControls" type="Control"]
layout_mode = 3
anchors_preset = 12
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 0
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource("1_iw1sp")
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 12 anchors_preset = 12
anchor_top = 1.0 anchor_top = 1.0
anchor_right = 1.0 anchor_right = 1.0
@ -28,25 +42,23 @@ anchor_bottom = 1.0
offset_top = -338.0 offset_top = -338.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 0 grow_vertical = 0
size_flags_vertical = 8
theme_override_constants/margin_left = 30 theme_override_constants/margin_left = 30
theme_override_constants/margin_right = 30 theme_override_constants/margin_right = 30
theme_override_constants/margin_bottom = 30 theme_override_constants/margin_bottom = 30
script = ExtResource("1_iw1sp")
[node name="HBoxContainer" type="HBoxContainer" parent="."] [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 8 size_flags_vertical = 8
alignment = 2 alignment = 2
[node name="Left" type="VBoxContainer" parent="HBoxContainer"] [node name="Left" type="VBoxContainer" parent="MarginContainer/HBoxContainer"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
theme_override_constants/separation = 8 theme_override_constants/separation = 8
alignment = 2 alignment = 2
[node name="MenuButton" type="Button" parent="HBoxContainer/Left"] [node name="MenuButton" type="Button" parent="MarginContainer/HBoxContainer/Left"]
self_modulate = Color(0, 0, 0, 0.392157) self_modulate = Color(0, 0, 0, 0.392157)
custom_minimum_size = Vector2(120, 120) custom_minimum_size = Vector2(120, 120)
layout_mode = 2 layout_mode = 2
@ -56,14 +68,14 @@ icon = ExtResource("1_wr5sh")
flat = true flat = true
expand_icon = true expand_icon = true
[node name="JoystickPanel" type="Panel" parent="HBoxContainer/Left"] [node name="JoystickPanel" type="Panel" parent="MarginContainer/HBoxContainer/Left"]
custom_minimum_size = Vector2(180, 180) custom_minimum_size = Vector2(180, 180)
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 0 size_flags_horizontal = 0
theme_override_styles/panel = SubResource("StyleBoxFlat_nfkty") theme_override_styles/panel = SubResource("StyleBoxFlat_nfkty")
script = ExtResource("2_pyri2") script = ExtResource("2_pyri2")
[node name="Thumbstick" type="TextureRect" parent="HBoxContainer/Left/JoystickPanel"] [node name="Thumbstick" type="TextureRect" parent="MarginContainer/HBoxContainer/Left/JoystickPanel"]
self_modulate = Color(0, 0, 0, 0.392157) self_modulate = Color(0, 0, 0, 0.392157)
layout_mode = 1 layout_mode = 1
anchors_preset = 8 anchors_preset = 8
@ -81,13 +93,13 @@ texture = ExtResource("3_lgi8v")
expand_mode = 3 expand_mode = 3
stretch_mode = 5 stretch_mode = 5
[node name="Right" type="VBoxContainer" parent="HBoxContainer"] [node name="Right" type="VBoxContainer" parent="MarginContainer/HBoxContainer"]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 8 size_flags_vertical = 8
theme_override_constants/separation = 0 theme_override_constants/separation = 0
alignment = 2 alignment = 2
[node name="SaveButton" type="Button" parent="HBoxContainer/Right"] [node name="SaveButton" type="Button" parent="MarginContainer/HBoxContainer/Right"]
unique_name_in_owner = true unique_name_in_owner = true
self_modulate = Color(0, 0, 0, 0.392157) self_modulate = Color(0, 0, 0, 0.392157)
custom_minimum_size = Vector2(120, 120) custom_minimum_size = Vector2(120, 120)
@ -98,7 +110,7 @@ flat = true
icon_alignment = 1 icon_alignment = 1
expand_icon = true expand_icon = true
[node name="SettingsButton" type="Button" parent="HBoxContainer/Right"] [node name="SettingsButton" type="Button" parent="MarginContainer/HBoxContainer/Right"]
self_modulate = Color(0, 0, 0, 0.392157) self_modulate = Color(0, 0, 0, 0.392157)
custom_minimum_size = Vector2(120, 120) custom_minimum_size = Vector2(120, 120)
layout_mode = 2 layout_mode = 2
@ -108,9 +120,9 @@ flat = true
icon_alignment = 1 icon_alignment = 1
expand_icon = true expand_icon = true
[connection signal="pressed" from="HBoxContainer/Left/MenuButton" to="." method="_on_menu_button_pressed"] [connection signal="pressed" from="MarginContainer/HBoxContainer/Left/MenuButton" to="." method="_on_menu_button_pressed"]
[connection signal="gui_input" from="HBoxContainer/Left/JoystickPanel" to="HBoxContainer/Left/JoystickPanel" method="_on_gui_input"] [connection signal="gui_input" from="MarginContainer/HBoxContainer/Left/JoystickPanel" to="MarginContainer/HBoxContainer/Left/JoystickPanel" method="_on_gui_input"]
[connection signal="resized" from="HBoxContainer/Left/JoystickPanel" to="HBoxContainer/Left/JoystickPanel" method="_on_resized"] [connection signal="resized" from="MarginContainer/HBoxContainer/Left/JoystickPanel" to="MarginContainer/HBoxContainer/Left/JoystickPanel" method="_on_resized"]
[connection signal="button_down" from="HBoxContainer/Right/SaveButton" to="." method="_on_save_button_button_down"] [connection signal="button_down" from="MarginContainer/HBoxContainer/Right/SaveButton" to="." method="_on_save_button_button_down"]
[connection signal="button_up" from="HBoxContainer/Right/SaveButton" to="." method="_on_save_button_button_up"] [connection signal="button_up" from="MarginContainer/HBoxContainer/Right/SaveButton" to="." method="_on_save_button_button_up"]
[connection signal="pressed" from="HBoxContainer/Right/SettingsButton" to="." method="_on_settings_button_pressed"] [connection signal="pressed" from="MarginContainer/HBoxContainer/Right/SettingsButton" to="." method="_on_settings_button_pressed"]

View file

@ -1,8 +1,8 @@
extends MarginContainer extends Control
class_name MonsterList class_name MonsterList
@onready var monster_list_entry_container: MarginContainer = $MarginContainer/PanelContainer/VBoxContainer/MonsterListEntryContainer @onready var monster_list_entry_container: MarginContainer = $MarginContainer/PanelContainer/VBoxContainer/MonsterListEntryContainer
@onready var monster_list_entry = preload("res://ui/monster_list_entry.tscn") @onready var monster_list_entry = preload("res://ui/ingame_menu/party_list_entry.tscn")
func _ready() -> void: func _ready() -> void:
visible = false visible = false

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=8 format=3 uid="uid://bbvbnrcjatkrb"] [gd_scene load_steps=8 format=3 uid="uid://bbvbnrcjatkrb"]
[ext_resource type="Script" path="res://ui/ingame_menu.gd" id="1_beinb"] [ext_resource type="Script" path="res://ui/ingame_menu/ingame_menu.gd" id="1_beinb"]
[ext_resource type="FontFile" uid="uid://bjaavdnopfh0q" path="res://assets/fonts/aoboshi_one/AoboshiOne-Regular.ttf" id="2_1e4kf"] [ext_resource type="FontFile" uid="uid://bjaavdnopfh0q" path="res://assets/fonts/aoboshi_one/AoboshiOne-Regular.ttf" id="2_1e4kf"]
[ext_resource type="Texture2D" uid="uid://bhh31i3wgww43" path="res://assets/textures/Game Icons/Vector/2x/singleplayer.png" id="2_c2ia0"] [ext_resource type="Texture2D" uid="uid://bhh31i3wgww43" path="res://assets/textures/Game Icons/Vector/2x/singleplayer.png" id="2_c2ia0"]
[ext_resource type="Texture2D" uid="uid://c737p2osplq2o" path="res://assets/textures/Xbox Series/Vector/xbox_button_x_outline.svg" id="3_kgfth"] [ext_resource type="Texture2D" uid="uid://c737p2osplq2o" path="res://assets/textures/Xbox Series/Vector/xbox_button_x_outline.svg" id="3_kgfth"]
@ -15,7 +15,8 @@ corner_radius_bottom_left = 64
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_flvbu"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_flvbu"]
[node name="IngameMenu" type="MarginContainer"] [node name="IngameMenu" type="Control"]
layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
@ -24,7 +25,12 @@ grow_vertical = 2
script = ExtResource("1_beinb") script = ExtResource("1_beinb")
[node name="MarginContainer" type="MarginContainer" parent="."] [node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 2 layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 50 theme_override_constants/margin_left = 50
theme_override_constants/margin_top = 50 theme_override_constants/margin_top = 50
theme_override_constants/margin_right = 50 theme_override_constants/margin_right = 50
@ -73,6 +79,22 @@ layout_mode = 2
texture = ExtResource("3_oo4iu") texture = ExtResource("3_oo4iu")
expand_mode = 3 expand_mode = 3
[node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/PanelContainer/VBoxContainer"]
layout_mode = 2
alignment = 1
[node name="PartyButton" type="Button" parent="MarginContainer/PanelContainer/VBoxContainer/HBoxContainer2"]
layout_mode = 2
text = "Party"
[node name="Items" type="Button" parent="MarginContainer/PanelContainer/VBoxContainer/HBoxContainer2"]
layout_mode = 2
text = "Items"
[node name="Player" type="Button" parent="MarginContainer/PanelContainer/VBoxContainer/HBoxContainer2"]
layout_mode = 2
text = "Player"
[node name="MonsterInfoTitle" type="MarginContainer" parent="MarginContainer/PanelContainer/VBoxContainer"] [node name="MonsterInfoTitle" type="MarginContainer" parent="MarginContainer/PanelContainer/VBoxContainer"]
layout_mode = 2 layout_mode = 2
theme_override_constants/margin_left = 40 theme_override_constants/margin_left = 40

View file

@ -1,11 +1,11 @@
extends HBoxContainer extends HBoxContainer
class_name MonsterListEntry class_name PartyListEntry
func populate(monster) -> void: func populate(monster) -> void:
%MonsterID.text = str(0) %MonsterID.text = str(0)
%MonsterName.text = monster.display_name %MonsterName.text = monster.name
%MonsterLevel.text = "Lvl. %s" % monster.level %MonsterLevel.text = "Lvl. %s" % monster.level
%HealthProgressBar.value = monster.health %HealthProgressBar.value = monster.health
%HealthProgressBar.max_value = monster.health %HealthProgressBar.max_value = monster.health
%ExperienceProgressBar.value = monster.xp %ExperienceProgressBar.value = monster.xp
%ExperienceProgressBar.max_value = monster.base_xp_for_next_level %ExperienceProgressBar.max_value = monster.base_xp

View file

@ -1,8 +1,8 @@
[gd_scene load_steps=9 format=3 uid="uid://brp2sljqnkuhe"] [gd_scene load_steps=9 format=3 uid="uid://brp2sljqnkuhe"]
[ext_resource type="Texture2D" uid="uid://b6ylra30qxf30" path="res://assets/logo/logo.png" id="1_16gb7"] [ext_resource type="Script" path="res://ui/ingame_menu/party_list_entry.gd" id="1_gdhy7"]
[ext_resource type="Script" path="res://ui/monster_list_entry.gd" id="1_spojl"] [ext_resource type="Texture2D" uid="uid://b6ylra30qxf30" path="res://assets/logo/logo.png" id="2_rogma"]
[ext_resource type="Texture2D" uid="uid://2vxx2waofxpw" path="res://assets/textures/Xbox Series/Vector/xbox_button_menu_outline.svg" id="2_5n4ar"] [ext_resource type="Texture2D" uid="uid://2vxx2waofxpw" path="res://assets/textures/Xbox Series/Vector/xbox_button_menu_outline.svg" id="3_etjt6"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_s3mod"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_s3mod"]
content_margin_top = 24.0 content_margin_top = 24.0
@ -25,13 +25,13 @@ anchors_preset = 10
anchor_right = 1.0 anchor_right = 1.0
offset_bottom = 72.0 offset_bottom = 72.0
grow_horizontal = 2 grow_horizontal = 2
script = ExtResource("1_spojl") script = ExtResource("1_gdhy7")
[node name="Thumbnail" type="TextureRect" parent="."] [node name="Thumbnail" type="TextureRect" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
custom_minimum_size = Vector2(70, 70) custom_minimum_size = Vector2(70, 70)
layout_mode = 2 layout_mode = 2
texture = ExtResource("1_16gb7") texture = ExtResource("2_rogma")
expand_mode = 3 expand_mode = 3
[node name="VBoxContainer" type="VBoxContainer" parent="."] [node name="VBoxContainer" type="VBoxContainer" parent="."]
@ -101,7 +101,7 @@ custom_minimum_size = Vector2(100, 100)
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 8 size_flags_horizontal = 8
theme_override_styles/focus = SubResource("StyleBoxEmpty_x2rfb") theme_override_styles/focus = SubResource("StyleBoxEmpty_x2rfb")
icon = ExtResource("2_5n4ar") icon = ExtResource("3_etjt6")
flat = true flat = true
icon_alignment = 1 icon_alignment = 1
expand_icon = true expand_icon = true

View file

@ -1,7 +1,7 @@
[gd_scene load_steps=10 format=3 uid="uid://dt00rjsodtady"] [gd_scene load_steps=10 format=3 uid="uid://dt00rjsodtady"]
[ext_resource type="Texture2D" uid="uid://b6ylra30qxf30" path="res://assets/logo/logo.png" id="1_1fmce"] [ext_resource type="Texture2D" uid="uid://b6ylra30qxf30" path="res://assets/logo/logo.png" id="1_1fmce"]
[ext_resource type="Script" path="res://ui/main_menu.gd" id="1_5gs73"] [ext_resource type="Script" path="res://ui/main_menu/main_menu.gd" id="1_5gs73"]
[ext_resource type="FontFile" uid="uid://bjaavdnopfh0q" path="res://assets/fonts/aoboshi_one/AoboshiOne-Regular.ttf" id="2_aqmkw"] [ext_resource type="FontFile" uid="uid://bjaavdnopfh0q" path="res://assets/fonts/aoboshi_one/AoboshiOne-Regular.ttf" id="2_aqmkw"]
[ext_resource type="Texture2D" uid="uid://da7o6lfuoliid" path="res://assets/textures/Backgrounds/meadow2.jpg" id="2_bb61v"] [ext_resource type="Texture2D" uid="uid://da7o6lfuoliid" path="res://assets/textures/Backgrounds/meadow2.jpg" id="2_bb61v"]

View file

@ -0,0 +1,12 @@
[gd_resource type="StyleBoxFlat" format=3 uid="uid://dccmukg8pfc66"]
[resource]
content_margin_left = 0.0
content_margin_top = 0.0
content_margin_right = 0.0
content_margin_bottom = 0.0
bg_color = Color(0, 0, 0, 0.705882)
corner_radius_top_left = 6
corner_radius_top_right = 6
corner_radius_bottom_right = 6
corner_radius_bottom_left = 6

View file

@ -0,0 +1,12 @@
[gd_resource type="StyleBoxFlat" format=3 uid="uid://ddtjhp2lob6to"]
[resource]
content_margin_left = 16.0
content_margin_top = 16.0
content_margin_right = 16.0
content_margin_bottom = 16.0
bg_color = Color(0, 0, 0, 0.705882)
corner_radius_top_left = 6
corner_radius_top_right = 6
corner_radius_bottom_right = 6
corner_radius_bottom_left = 6

View file

@ -0,0 +1,12 @@
[gd_resource type="StyleBoxFlat" format=3 uid="uid://cv8ispcxuwjn5"]
[resource]
content_margin_left = 16.0
content_margin_top = 16.0
content_margin_right = 16.0
content_margin_bottom = 16.0
bg_color = Color(0.92, 0.889333, 0, 0.901961)
corner_radius_top_left = 6
corner_radius_top_right = 6
corner_radius_bottom_right = 6
corner_radius_bottom_left = 6

View file

@ -5,12 +5,12 @@ extends Node
signal on_new_game_started signal on_new_game_started
signal on_game_continued signal on_game_continued
@onready var root: CanvasLayer = $/root/Game/UI @onready var main_menu: Control = $MainMenu
@onready var main_menu: Control = $/root/Game/UI/MainMenu @onready var ingame_controls: Control = $IngameControls
@onready var ingame_controls: MarginContainer = $/root/Game/UI/IngameControls @onready var ingame_menu: Control = $IngameMenu
@onready var ingame_menu: Control = $/root/Game/UI/IngameMenu @onready var camera_control_area : Control = $CameraControlArea
@onready var camera_control_area : Control = $/root/Game/UI/CameraControlArea @onready var save_ui : Control = $SaveUI
@onready var save_ui : Control = $/root/Game/UI/SaveUI @onready var battle_ui : Control = $BattleUI
func _ready() -> void: func _ready() -> void:
main_menu.connect("on_game_continued", _on_main_menu_on_game_continued) main_menu.connect("on_game_continued", _on_main_menu_on_game_continued)
@ -30,6 +30,9 @@ func show_main_menu(p_visible = true) -> void:
func show_ingame_controls(p_visible = true) -> void: func show_ingame_controls(p_visible = true) -> void:
ingame_controls.visible = p_visible ingame_controls.visible = p_visible
func show_battle_ui(p_visible = true) -> void:
battle_ui.visible = p_visible
func _on_ingame_controls_menu_button_clicked() -> void: func _on_ingame_controls_menu_button_clicked() -> void:
ingame_menu.visible = true ingame_menu.visible = true

View file

@ -1,11 +1,14 @@
[gd_scene load_steps=5 format=3 uid="uid://b5y7pdfe6ougf"] [gd_scene load_steps=7 format=3 uid="uid://b5y7pdfe6ougf"]
[ext_resource type="Script" path="res://ui/camera_controls.gd" id="1_x56x6"] [ext_resource type="Script" path="res://ui/ui.gd" id="1_fkttd"]
[ext_resource type="PackedScene" uid="uid://dt00rjsodtady" path="res://ui/main_menu.tscn" id="3_tcmm8"] [ext_resource type="Script" path="res://ui/ingame_controls/camera_controls.gd" id="1_x56x6"]
[ext_resource type="PackedScene" uid="uid://1anjhvi173g3" path="res://ui/ingame_controls.tscn" id="4_likk0"] [ext_resource type="PackedScene" uid="uid://dt00rjsodtady" path="res://ui/main_menu/main_menu.tscn" id="3_tcmm8"]
[ext_resource type="PackedScene" uid="uid://bbvbnrcjatkrb" path="res://ui/ingame_menu.tscn" id="5_qjqu1"] [ext_resource type="PackedScene" uid="uid://1anjhvi173g3" path="res://ui/ingame_controls/ingame_controls.tscn" id="4_likk0"]
[ext_resource type="PackedScene" uid="uid://bbvbnrcjatkrb" path="res://ui/ingame_menu/ingame_menu.tscn" id="5_qjqu1"]
[ext_resource type="PackedScene" uid="uid://dyroahq85mhws" path="res://ui/battle_ui/battle_ui.tscn" id="6_uxa7j"]
[node name="UI" type="CanvasLayer"] [node name="UI" type="CanvasLayer"]
script = ExtResource("1_fkttd")
[node name="CameraControlArea" type="Control" parent="."] [node name="CameraControlArea" type="Control" parent="."]
layout_mode = 3 layout_mode = 3
@ -51,6 +54,7 @@ vertical_alignment = 1
[node name="MainMenu" parent="." instance=ExtResource("3_tcmm8")] [node name="MainMenu" parent="." instance=ExtResource("3_tcmm8")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
[node name="IngameControls" parent="." instance=ExtResource("4_likk0")] [node name="IngameControls" parent="." instance=ExtResource("4_likk0")]
unique_name_in_owner = true unique_name_in_owner = true
@ -59,3 +63,5 @@ visible = false
[node name="IngameMenu" parent="." instance=ExtResource("5_qjqu1")] [node name="IngameMenu" parent="." instance=ExtResource("5_qjqu1")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
[node name="BattleUI" parent="." instance=ExtResource("6_uxa7j")]

View file

@ -1,60 +0,0 @@
[gd_scene load_steps=11 format=3 uid="uid://bgngmj53lc15q"]
[ext_resource type="PackedScene" uid="uid://dawpmu4vvv3rs" path="res://entities/monster_spawnpoint/monster_spawnpoint.tscn" id="3_esgto"]
[ext_resource type="Script" path="res://resources/monster_data.gd" id="3_iktqp"]
[ext_resource type="Resource" uid="uid://0xqaef8uftnv" path="res://resources/monsters/debuggy.tres" id="4_noslo"]
[ext_resource type="PackedScene" uid="uid://dibg4wpthwdov" path="res://entities/healing_station/healing_station.tscn" id="4_xewui"]
[sub_resource type="PlaneMesh" id="PlaneMesh_wak6a"]
size = Vector2(1000, 1000)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8wti1"]
albedo_color = Color(0.157906, 0.300646, 0.191269, 1)
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_m4bnl"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_g80j5"]
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
[sub_resource type="Sky" id="Sky_wlahx"]
sky_material = SubResource("ProceduralSkyMaterial_g80j5")
[sub_resource type="Environment" id="Environment_rwve8"]
background_mode = 2
sky = SubResource("Sky_wlahx")
tonemap_mode = 2
glow_enabled = true
[node name="DebugLevel" type="Node3D"]
[node name="Floor" type="StaticBody3D" parent="."]
collision_layer = 2
collision_mask = 13
metadata/_edit_lock_ = true
[node name="FloorMesh" type="MeshInstance3D" parent="Floor"]
mesh = SubResource("PlaneMesh_wak6a")
skeleton = NodePath("../..")
surface_material_override/0 = SubResource("StandardMaterial3D_8wti1")
metadata/_edit_lock_ = true
[node name="CollisionShape3D" type="CollisionShape3D" parent="Floor"]
shape = SubResource("WorldBoundaryShape3D_m4bnl")
metadata/_edit_lock_ = true
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.224144, 0.474445, -0.851271, 0.12941, 0.851271, 0.508518, 0.965926, -0.224144, 0.129409, 0, 0, 0)
shadow_enabled = true
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_rwve8")
[node name="MonsterSpawnpoint" parent="." instance=ExtResource("3_esgto")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.6673, 0, -8.88992)
spawnable_monsters = Array[ExtResource("3_iktqp")]([ExtResource("4_noslo")])
ignore_visibility = true
max_monsters = 1
[node name="HealingStation" parent="." instance=ExtResource("4_xewui")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.26308, 0, -1.63961)

View file

@ -1,8 +1,27 @@
[gd_scene load_steps=11 format=3 uid="uid://bhhqaysqjw2d"] [gd_scene load_steps=30 format=3 uid="uid://bhhqaysqjw2d"]
[ext_resource type="PackedScene" uid="uid://dawpmu4vvv3rs" path="res://entities/monster_spawnpoint/monster_spawnpoint.tscn" id="1_3qqsk"] [ext_resource type="PackedScene" uid="uid://dawpmu4vvv3rs" path="res://entities/monster_spawnpoint/monster_spawnpoint.tscn" id="1_3qqsk"]
[ext_resource type="Script" path="res://entities/monster_spawnpoint/monster_spawnpoint_probability.gd" id="2_pmb72"] [ext_resource type="Script" path="res://entities/monster_spawnpoint/monster_spawnpoint_probability.gd" id="2_pmb72"]
[ext_resource type="Resource" uid="uid://0xqaef8uftnv" path="res://resources/monsters/debuggy.tres" id="3_rfdrv"] [ext_resource type="Resource" uid="uid://0xqaef8uftnv" path="res://resources/monsters/debuggy.tres" id="3_rfdrv"]
[ext_resource type="ArrayMesh" uid="uid://cack8j00xjsa3" path="res://assets/models/environment/kenney_nature-kit/log_stackLarge.obj" id="4_0kbbq"]
[ext_resource type="ArrayMesh" uid="uid://btg2gsgk1war7" path="res://assets/models/environment/kenney_nature-kit/log_stack.obj" id="5_qmkbs"]
[ext_resource type="ArrayMesh" uid="uid://dafdq71e86ho5" path="res://assets/models/environment/kenney_nature-kit/mushroom_red.obj" id="6_srojq"]
[ext_resource type="ArrayMesh" uid="uid://cm8is5hix18dl" path="res://assets/models/environment/kenney_nature-kit/mushroom_redGroup.obj" id="7_1s3h0"]
[ext_resource type="ArrayMesh" uid="uid://bui1lf0llkibd" path="res://assets/models/environment/kenney_nature-kit/mushroom_tan.obj" id="8_4wcxw"]
[ext_resource type="ArrayMesh" uid="uid://iowq0losn4td" path="res://assets/models/environment/kenney_nature-kit/path_stone.obj" id="9_bpmfr"]
[ext_resource type="ArrayMesh" uid="uid://bdj5dw462e77p" path="res://assets/models/environment/kenney_nature-kit/path_stoneCircle.obj" id="10_fjaao"]
[ext_resource type="ArrayMesh" uid="uid://dvcmkl0qfpg73" path="res://assets/models/environment/kenney_nature-kit/path_stoneEnd.obj" id="11_wn62q"]
[ext_resource type="ArrayMesh" uid="uid://bh00ibc6phtqk" path="res://assets/models/environment/kenney_nature-kit/plant_flatShort.obj" id="12_bywwm"]
[ext_resource type="ArrayMesh" uid="uid://dh0xwow8ugf7a" path="res://assets/models/environment/kenney_nature-kit/plant_bushSmall.obj" id="13_3qtcp"]
[ext_resource type="ArrayMesh" uid="uid://c68imp6yppj6y" path="res://assets/models/environment/kenney_nature-kit/plant_bushTriangle.obj" id="14_vwj3k"]
[ext_resource type="ArrayMesh" uid="uid://djgt5pp8x0vjk" path="res://assets/models/environment/kenney_nature-kit/platform_grass.obj" id="15_gt7yq"]
[ext_resource type="ArrayMesh" uid="uid://bsjy4ga2fgkmu" path="res://assets/models/environment/kenney_nature-kit/rock_smallE.obj" id="16_i3jgm"]
[ext_resource type="ArrayMesh" uid="uid://rhmh3diwn67f" path="res://assets/models/environment/kenney_nature-kit/rock_tallA.obj" id="17_hrfs1"]
[ext_resource type="ArrayMesh" uid="uid://diuegcyvoa1gi" path="res://assets/models/environment/kenney_nature-kit/sign.obj" id="18_3oreg"]
[ext_resource type="ArrayMesh" uid="uid://cxqtsthjrf456" path="res://assets/models/environment/kenney_nature-kit/tree_oak_dark.obj" id="19_7q86a"]
[ext_resource type="ArrayMesh" uid="uid://dvcxsgd2tjhce" path="res://assets/models/environment/kenney_nature-kit/tree_small.obj" id="20_p3pyd"]
[ext_resource type="ArrayMesh" uid="uid://kk0vopaeqry0" path="res://assets/models/environment/kenney_nature-kit/tree_fat.obj" id="21_m2vvv"]
[ext_resource type="ArrayMesh" uid="uid://bkbtamud66sc8" path="res://assets/models/environment/kenney_nature-kit/grass_large.obj" id="22_ee3ig"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_xgcdx"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_xgcdx"]
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
@ -53,9 +72,153 @@ shape = SubResource("WorldBoundaryShape3D_pjix1")
mesh = SubResource("QuadMesh_ry8lc") mesh = SubResource("QuadMesh_ry8lc")
surface_material_override/0 = SubResource("StandardMaterial3D_u86mj") surface_material_override/0 = SubResource("StandardMaterial3D_u86mj")
[node name="Trees" type="Node3D" parent="."]
[node name="LogStackLarge" type="MeshInstance3D" parent="Trees"]
transform = Transform3D(1.66935, 0, -1.10149, 0, 2, 0, 1.10149, 0, 1.66935, 1.6177, 0, -1.49863)
mesh = ExtResource("4_0kbbq")
skeleton = NodePath("../..")
[node name="LogStack" type="MeshInstance3D" parent="Trees"]
transform = Transform3D(1.11998, 0, 1.657, 0, 2, 0, -1.657, 0, 1.11998, -2.38713, 0, -2.21448)
mesh = ExtResource("5_qmkbs")
skeleton = NodePath("../..")
[node name="TreeOakDark" type="MeshInstance3D" parent="Trees"]
transform = Transform3D(5, 0, 0, 0, 5, 0, 0, 0, 5, 5.48297, 0, -9.46487)
mesh = ExtResource("19_7q86a")
skeleton = NodePath("../..")
[node name="TreeSmall" type="MeshInstance3D" parent="Trees"]
transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 5.76902, 0, -7.6399)
mesh = ExtResource("20_p3pyd")
skeleton = NodePath("../..")
[node name="TreeFat" type="MeshInstance3D" parent="Trees"]
transform = Transform3D(5, 0, 0, 0, 5, 0, 0, 0, 5, 11.8738, 0, -2.86255)
mesh = ExtResource("21_m2vvv")
skeleton = NodePath("../..")
[node name="Rocks" type="Node3D" parent="."]
[node name="PathStone" type="MeshInstance3D" parent="Rocks"]
transform = Transform3D(0.859424, 0, 0.511263, 0, 1, 0, -0.511263, 0, 0.859424, -1.12448, 1.19209e-07, -0.931548)
mesh = ExtResource("9_bpmfr")
skeleton = NodePath("../..")
[node name="PathStoneCircle" type="MeshInstance3D" parent="Rocks"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.301247, 0, -1.70981)
mesh = ExtResource("10_fjaao")
skeleton = NodePath("../..")
[node name="PathStoneEnd" type="MeshInstance3D" parent="Rocks"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.459289, 0, -2.53599)
mesh = ExtResource("11_wn62q")
skeleton = NodePath("../..")
[node name="PlatformGrass" type="MeshInstance3D" parent="Rocks"]
transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 3.5655, 0, -2.31577)
mesh = ExtResource("15_gt7yq")
skeleton = NodePath("../..")
[node name="RockSmallE" type="MeshInstance3D" parent="Rocks"]
transform = Transform3D(5, 0, 0, 0, 5, 0, 0, 0, 5, 4.86258, 0, -2.69259)
mesh = ExtResource("16_i3jgm")
skeleton = NodePath("../..")
[node name="RockTallA" type="MeshInstance3D" parent="Rocks"]
transform = Transform3D(2.92839, 0, -9.56162, 0, 10, 0, 9.56162, 0, 2.92839, 10.1956, 0, -8.29341)
mesh = ExtResource("17_hrfs1")
skeleton = NodePath("../..")
[node name="Bushes" type="Node3D" parent="."]
[node name="PlantFlatShort" type="MeshInstance3D" parent="Bushes"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.66921, 0, -1.61654)
mesh = ExtResource("12_bywwm")
skeleton = NodePath("../..")
[node name="PlantBushSmall" type="MeshInstance3D" parent="Bushes"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.175514, -0.0621889, -2.47413)
mesh = ExtResource("13_3qtcp")
skeleton = NodePath("../..")
[node name="PlantBushTriangle" type="MeshInstance3D" parent="Bushes"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.919819, -0.0390102, -1.71797)
mesh = ExtResource("14_vwj3k")
skeleton = NodePath("../..")
[node name="MonsterSpawnpoints" type="Node3D" parent="."] [node name="MonsterSpawnpoints" type="Node3D" parent="."]
[node name="MonsterSpawnpointDebug" parent="MonsterSpawnpoints" instance=ExtResource("1_3qqsk")] [node name="MonsterSpawnpointDebug" parent="MonsterSpawnpoints" instance=ExtResource("1_3qqsk")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, -9) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, -9)
spawnable_monsters = Array[ExtResource("2_pmb72")]([SubResource("Resource_13u2y")]) spawnable_monsters = Array[ExtResource("2_pmb72")]([SubResource("Resource_13u2y")])
ignore_visibility = true ignore_visibility = true
[node name="Mushrooms" type="Node3D" parent="."]
[node name="MushroomRed" type="MeshInstance3D" parent="Mushrooms"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.12814, 0, -0.683066)
mesh = ExtResource("6_srojq")
skeleton = NodePath("../..")
[node name="MushroomRedGroup" type="MeshInstance3D" parent="Mushrooms"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.69394, 0, -0.409612)
mesh = ExtResource("7_1s3h0")
skeleton = NodePath("../..")
[node name="MushroomTan" type="MeshInstance3D" parent="Mushrooms"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.60805, 0, -1.48199)
mesh = ExtResource("8_4wcxw")
skeleton = NodePath("../..")
[node name="Sign" type="MeshInstance3D" parent="."]
transform = Transform3D(0.463141, 0, 0.886284, 0, 1, 0, -0.886284, 0, 0.463141, 3.17387, 0.0125848, -2.34009)
mesh = ExtResource("18_3oreg")
[node name="Grass" type="Node3D" parent="."]
[node name="GrassLarge" type="MeshInstance3D" parent="Grass"]
transform = Transform3D(1.72649, 0, -1.00957, 0, 2.5, 0, 1.00957, 0, 1.72649, -3.2048, 0, -9.39117)
mesh = ExtResource("22_ee3ig")
skeleton = NodePath("../..")
[node name="GrassLarge2" type="MeshInstance3D" parent="Grass"]
transform = Transform3D(1.72649, 0, -1.00957, 0, 2.5, 0, 1.00957, 0, 1.72649, -2.21933, 0, -9.61515)
mesh = ExtResource("22_ee3ig")
skeleton = NodePath("../..")
[node name="GrassLarge3" type="MeshInstance3D" parent="Grass"]
transform = Transform3D(1.99626, 0, -0.122271, 0, 2.5, 0, 0.122271, 0, 1.99626, -2.51043, 0, -8.48302)
mesh = ExtResource("22_ee3ig")
skeleton = NodePath("../..")
[node name="GrassLarge4" type="MeshInstance3D" parent="Grass"]
transform = Transform3D(-0.42166, 0, -1.95505, 0, 2.5, 0, 1.95505, 0, -0.42166, -3.50344, 0, -8.53657)
mesh = ExtResource("22_ee3ig")
skeleton = NodePath("../..")
[node name="GrassLarge5" type="MeshInstance3D" parent="Grass"]
transform = Transform3D(1.07127, 0, -1.6889, 0, 2.5, 0, 1.6889, 0, 1.07127, -1.43608, 0, -8.94263)
mesh = ExtResource("22_ee3ig")
skeleton = NodePath("../..")
[node name="GrassLarge6" type="MeshInstance3D" parent="Grass"]
transform = Transform3D(-0.743805, 0, -1.85654, 0, 2.5, 0, 1.85654, 0, -0.743805, -1.19168, 0, -9.94279)
mesh = ExtResource("22_ee3ig")
skeleton = NodePath("../..")
[node name="GrassLarge7" type="MeshInstance3D" parent="Grass"]
transform = Transform3D(0.304178, 0, -1.97673, 0, 2.5, 0, 1.97673, 0, 0.304178, -0.56479, 0, -9.30819)
mesh = ExtResource("22_ee3ig")
skeleton = NodePath("../..")
[node name="GrassLarge8" type="MeshInstance3D" parent="Grass"]
transform = Transform3D(0.945778, 0, -1.76224, 0, 2.5, 0, 1.76224, 0, 0.945778, -0.671405, 0, -8.33458)
mesh = ExtResource("22_ee3ig")
skeleton = NodePath("../..")
[node name="GrassLarge9" type="MeshInstance3D" parent="Grass"]
transform = Transform3D(-1.12264, 0, -1.6552, 0, 2.5, 0, 1.6552, 0, -1.12264, -1.61198, 2.38419e-07, -7.95919)
mesh = ExtResource("22_ee3ig")
skeleton = NodePath("../..")