Merge pull request #328 from Excello-Recherche-Education/3.0.1

Merge 3.0.1 into main
This commit is contained in:
Adrien Ufferte
2026-06-18 11:55:04 +02:00
committed by GitHub
476 changed files with 10663 additions and 2957 deletions
+299 -73
View File
@@ -1,6 +1,7 @@
import os import os
import re import re
import sys import sys
from collections import defaultdict, Counter
def split_params(param_string: str): def split_params(param_string: str):
@@ -56,58 +57,164 @@ def split_params(param_string: str):
params = [p for p in params if p] params = [p for p in params if p]
return params return params
EXCLUDED_DIRS = {"addons", ".git", ".github"} EXCLUDED_DIRS = {"addons", ".git", ".github"}
EXCLUDED_FILES = {os.path.normpath("script_templates/Node/default.gd")} EXCLUDED_FILES = {os.path.normpath("script_templates/Node/default.gd")}
issues = [] issues: list = []
# ─── Messages ────────────────────────────────────────────────────────────────
# Structural issue messages. Use {key} for context-specific values.
# Naming issues are rendered dynamically (see format_message / SUGGESTION_FN).
MESSAGES = { MESSAGES = {
'class': 'is a class name and should be in PascalCase', # File/header structure
'function': 'is a function name and should be in snake_case', 'annotation_order': "annotation not allowed here: '{found}' — only @tool, @icon or @static_unload are allowed at the top of the file",
'variable': 'is a variable name and should be in snake_case', 'class_position': "class_name must appear right after annotations (if any)",
'constant': 'is a constant name and should be in UPPER_SNAKE_CASE', 'extends_position': "extends must appear after annotations and class_name",
'signal': 'is a signal name and should be in snake_case', 'extends_missing': "extends is missing — add 'extends BaseClass' (or 'extends RefCounted' for base classes)",
'annotation_order': 'annotations must be on the first line and include only \@tool, \@icon or \@static_unload',
'class_position': 'class_name must appear after annotations (if any)', # Function spacing
'extends_position': 'extends must appear after annotation and class_name', 'func_blank': "expected 2 blank lines before function (found {found})",
'extends_missing': 'extends is required and must follow annotation and class_name',
'func_blank': 'functions must be preceded by exactly two empty lines (or only one if preceded by a #region comment)', # Signals
'signal_position': 'signals must come right after extends', 'signal_position': "signal found after {after} — expected order: signal > enum > const > static var > @export > var > @onready",
'signal_format': 'signals must end with ()', 'signal_format': "signal must declare parameters with () — found: '{found}'",
'signal_blank': 'signals must not be separated by empty lines', 'signal_blank_extra': "remove blank line between signal declarations — signals must be grouped together",
'enum_position': 'enums must come after signals and be grouped together',
'enum_format': "enum declaration should be 'enum Name {'", # Enums
'enum_member_blank': 'enum members must not be separated by empty lines', 'enum_position': "enum found after {after} — expected order: signal > enum > const > static var > @export > var > @onready",
'enum_member_indent': 'enum members must be indented with a single tab', 'enum_format': "enum declaration should be 'enum Name {{' — found: '{found}'",
'enum_no_close': 'enum declaration is missing a closing }', 'enum_member_blank': "remove blank line between enum members",
'enum_blank': 'enums must be preceded by one empty line and must not be separated by empty lines', 'enum_member_indent': "enum member must be indented with a single tab — found: '{found}'",
'const_position': 'constants must come after enums and be grouped together', 'enum_no_close': "enum declaration is missing a closing '}'",
'const_blank': 'constants must be preceded by one empty line and must not be separated by empty lines', 'enum_blank_missing': "missing blank line before the enum section",
'static_position': 'static variables must come after constants and be grouped together', 'enum_blank_extra': "remove blank line between enum declarations — enums must be grouped together",
'static_blank': 'static variables must be preceded by one empty line and must not be separated by empty lines',
'export_position': 'export variables must come after static variables and be grouped together', # Constants
'export_blank': 'export variables must be preceded by one empty line and must not be separated by empty lines', 'const_position': "const found after {after} — expected order: signal > enum > const > static var > @export > var > @onready",
'var_position': 'variables must come after export variables and be grouped together', 'const_blank_missing': "missing blank line before the const section",
'var_blank': 'variables must be preceded by one empty line and must not be separated by empty lines', 'const_blank_extra': "remove blank line between const declarations — constants must be grouped together",
'onready_position': '@onready variables must come after other variables and be grouped together',
'onready_blank': '@onready variables must be preceded by one empty line and must not be separated by empty lines', # Static variables
'static_position': "static var found after {after} — expected order: signal > enum > const > static var > @export > var > @onready",
'static_blank_missing': "missing blank line before the static var section",
'static_blank_extra': "remove blank line between static var declarations — static variables must be grouped together",
# Export variables
'export_position': "@export found after {after} — expected order: signal > enum > const > static var > @export > var > @onready",
'export_blank_missing': "missing blank line before the @export section",
'export_blank_extra': "remove blank line between @export declarations — export variables must be grouped together",
# Regular variables
'var_position': "var found after {after} — expected order: signal > enum > const > static var > @export > var > @onready",
'var_blank_missing': "missing blank line before the var section",
'var_blank_extra': "remove blank line between var declarations — variables must be grouped together",
# @onready variables
'onready_position': "@onready var found after {after} — expected order: signal > enum > const > static var > @export > var > @onready",
'onready_blank_missing': "missing blank line before the @onready section",
'onready_blank_extra': "remove blank line between @onready declarations — @onready variables must be grouped together",
} }
# Naming conventions # ─── Naming conventions ───────────────────────────────────────────────────────
PASCAL_CASE = re.compile(r"^[A-Z][A-Za-z0-9]*$") PASCAL_CASE = re.compile(r"^[A-Z][A-Za-z0-9]*$")
SNAKE_CASE = re.compile(r"^_?[a-z][a-z0-9_]*$") SNAKE_CASE = re.compile(r"^_?[a-z][a-z0-9_]*$")
UPPER_SNAKE_CASE = re.compile(r"^_?[A-Z][A-Z0-9_]*$") UPPER_SNAKE_CASE = re.compile(r"^_?[A-Z][A-Z0-9_]*$")
REGION_RE = re.compile(r"#\s*(region|endregion)\b", re.IGNORECASE) REGION_RE = re.compile(r"#\s*(region|endregion)\b", re.IGNORECASE)
def _to_snake_case(name: str) -> str:
prefix = '_' if name.startswith('_') else ''
core = name.lstrip('_')
s = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', core)
s = re.sub(r'([A-Z]+)([A-Z][a-z])', r'\1_\2', s)
return prefix + s.lower()
def _to_pascal_case(name: str) -> str:
prefix = '_' if name.startswith('_') else ''
core = name.lstrip('_')
# Split on camelCase boundaries first, then on underscores/spaces
# e.g. 'myBadEnum' → 'my_Bad_Enum' → 'MyBadEnum'
snake = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', core)
snake = re.sub(r'([A-Z]+)([A-Z][a-z])', r'\1_\2', snake)
return prefix + ''.join(w.capitalize() for w in re.split(r'[_\s]+', snake) if w)
def _to_upper_snake_case(name: str) -> str:
prefix = '_' if name.startswith('_') else ''
core = name.lstrip('_')
s = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', core)
s = re.sub(r'([A-Z]+)([A-Z][a-z])', r'\1_\2', s)
return prefix + s.upper()
CONVENTION_NAMES: dict[str, str] = {
'class': 'PascalCase',
'enum_name': 'PascalCase',
'enum_member': 'UPPER_SNAKE_CASE',
'function': 'snake_case',
'variable': 'snake_case',
'constant': 'UPPER_SNAKE_CASE',
'signal': 'snake_case',
}
SUGGESTION_FN: dict = {
'class': _to_pascal_case,
'enum_name': _to_pascal_case,
'enum_member': _to_upper_snake_case,
'function': _to_snake_case,
'variable': _to_snake_case,
'constant': _to_upper_snake_case,
'signal': _to_snake_case,
}
NAMING_KINDS = frozenset({'class', 'enum_name', 'enum_member', 'function', 'variable', 'constant', 'signal'})
# ─── Naming check ─────────────────────────────────────────────────────────────
def _check_enum_member(path: str, idx: int, name: str) -> None:
"""Flag a single enum member name if it is not UPPER_SNAKE_CASE."""
if name and not UPPER_SNAKE_CASE.match(name):
issues.append((path, idx, 'enum_member', name))
def check_naming(path: str, lines: list[str]): def check_naming(path: str, lines: list[str]):
in_enum = False # True while scanning the body of a multi-line enum
for idx, line in enumerate(lines, 1): for idx, line in enumerate(lines, 1):
stripped = line.strip() stripped = line.strip()
if stripped.startswith('#') or stripped.startswith('@warning_ignore(') or not stripped: if stripped.startswith('#') or stripped.startswith('@warning_ignore(') or not stripped:
continue continue
# ── Enum-body lines ────────────────────────────────────────────────────
if in_enum:
close = stripped.find('}')
if close != -1:
in_enum = False
# Any identifiers before the closing brace on this line
before = stripped[:close]
for part in before.split(','):
m = re.match(r"\s*([A-Za-z0-9_]+)", part)
if m:
_check_enum_member(path, idx, m.group(1))
else:
# One (or more) members on this line: "NAME," or "NAME = val,"
for part in stripped.split(','):
m = re.match(r"\s*([A-Za-z0-9_]+)", part)
if m:
_check_enum_member(path, idx, m.group(1))
continue
# ── End enum-body ──────────────────────────────────────────────────────
match_class = re.match(r"class_name\s+([A-Za-z0-9_]+)", stripped) match_class = re.match(r"class_name\s+([A-Za-z0-9_]+)", stripped)
if match_class: if match_class:
name = match_class.group(1) name = match_class.group(1)
if not PASCAL_CASE.match(name): if not PASCAL_CASE.match(name):
issues.append((path, idx, 'class', name)) issues.append((path, idx, 'class', name))
match_func = re.match(r"(?:static\s+)?func\s+([A-Za-z0-9_]+)\s*(\([^)]*\))?", stripped) match_func = re.match(r"(?:static\s+)?func\s+([A-Za-z0-9_]+)\s*(\([^)]*\))?", stripped)
if match_func: if match_func:
name = match_func.group(1) name = match_func.group(1)
@@ -120,51 +227,82 @@ def check_naming(path: str, lines: list[str]):
param_name = param.split(':')[0].split('=')[0].strip() param_name = param.split(':')[0].split('=')[0].strip()
if param_name and not SNAKE_CASE.match(param_name): if param_name and not SNAKE_CASE.match(param_name):
issues.append((path, idx, 'variable', param_name)) issues.append((path, idx, 'variable', param_name))
match_export = re.match(r"(?:@export\s+)?var\s+([A-Za-z0-9_]+)", stripped)
if match_export: # Match variable declarations with any annotation/modifier prefix.
name = match_export.group(1) # Handles: var, static var, @export var, @export_range(...) var,
# @export_multiline var, @onready var, etc.
# Does NOT match annotation-only lines like @export_category("Difficulty").
match_var = re.match(r"(?:(?:static|@\w+(?:\([^)]*\))?)\s+)*var\s+([A-Za-z0-9_]+)", stripped)
if match_var:
name = match_var.group(1)
if not SNAKE_CASE.match(name): if not SNAKE_CASE.match(name):
issues.append((path, idx, 'variable', name)) issues.append((path, idx, 'variable', name))
match_const = re.match(r"const\s+([A-Za-z0-9_]+)", stripped) match_const = re.match(r"const\s+([A-Za-z0-9_]+)", stripped)
if match_const: if match_const:
name = match_const.group(1) name = match_const.group(1)
if not UPPER_SNAKE_CASE.match(name): if not UPPER_SNAKE_CASE.match(name):
issues.append((path, idx, 'constant', name)) issues.append((path, idx, 'constant', name))
match_enum = re.match(r"enum\s+([A-Za-z0-9_]+)", stripped)
if match_enum:
name = match_enum.group(1)
if not PASCAL_CASE.match(name):
issues.append((path, idx, 'enum_name', name))
# Determine whether the enum body is inline or multi-line
brace = stripped.find('{')
if brace != -1:
rest = stripped[brace + 1:]
close = rest.find('}')
if close != -1:
# Inline enum — check members immediately
for part in rest[:close].split(','):
m = re.match(r"\s*([A-Za-z0-9_]+)", part)
if m:
_check_enum_member(path, idx, m.group(1))
else:
# Body continues on following lines
in_enum = True
match_signal = re.match(r"signal\s+([A-Za-z0-9_]+)", stripped) match_signal = re.match(r"signal\s+([A-Za-z0-9_]+)", stripped)
if match_signal: if match_signal:
name = match_signal.group(1) name = match_signal.group(1)
if not SNAKE_CASE.match(name): if not SNAKE_CASE.match(name):
issues.append((path, idx, 'signal', name)) issues.append((path, idx, 'signal', name))
match_for = re.match(r"for\s+([A-Za-z0-9_]+)(?:\s*:\s*[^\s]+)?\s+in\b", stripped) match_for = re.match(r"for\s+([A-Za-z0-9_]+)(?:\s*:\s*[^\s]+)?\s+in\b", stripped)
if match_for: if match_for:
name = match_for.group(1) name = match_for.group(1)
if not SNAKE_CASE.match(name): if not SNAKE_CASE.match(name):
issues.append((path, idx, 'variable', name)) issues.append((path, idx, 'variable', name))
# Content order
# ─── Content order check ──────────────────────────────────────────────────────
ANNOTATION_LINE_RE = re.compile( ANNOTATION_LINE_RE = re.compile(
r"^(?:@(tool|icon|static_unload)(?:\([^\n]*\))?)(?:,\s*@(tool|icon|static_unload)(?:\([^\n]*\))?)*$" r"^(?:@(tool|icon|static_unload)(?:\([^\n]*\))?)(?:,\s*@(tool|icon|static_unload)(?:\([^\n]*\))?)*$"
) )
ALLOWED_ANNOTATION_RE = re.compile(r"@(tool|icon|static_unload)\b") ALLOWED_ANNOTATION_RE = re.compile(r"@(tool|icon|static_unload)\b")
def check_content_order(path: str, lines: list[str]): def check_content_order(path: str, lines: list[str]):
content = [ content = [
(line.rstrip('\n'), idx) (line.rstrip('\n'), idx)
for idx, line in enumerate(lines, 1) for idx, line in enumerate(lines, 1)
if not line.startswith(' ') # Line is not indented if not line.startswith(' ') # Line is not indented (tab character)
and not line.lstrip().startswith('#') and not line.lstrip().startswith('#')
and not line.lstrip().startswith('@warning_ignore(') and not line.lstrip().startswith('@warning_ignore(')
] ]
idx = 0 idx = 0
n = len(content) n = len(content)
# 1) annotations # 1) Annotations (@tool / @icon / @static_unload must be first)
if idx < n and ANNOTATION_LINE_RE.fullmatch(content[idx][0].strip()): if idx < n and ANNOTATION_LINE_RE.fullmatch(content[idx][0].strip()):
idx += 1 idx += 1
else: else:
for j in range(idx, n): for j in range(idx, n):
if ALLOWED_ANNOTATION_RE.search(content[j][0]): if ALLOWED_ANNOTATION_RE.search(content[j][0]):
issues.append((path, content[j][1], 'annotation_order', content[j][0].strip())) issues.append((path, content[j][1], 'annotation_order', {'found': content[j][0].strip()}))
break break
# 2) class_name (optional) # 2) class_name (optional)
@@ -176,24 +314,27 @@ def check_content_order(path: str, lines: list[str]):
idx += 1 idx += 1
break break
# 3) extends (required) # 3) extends (recommended; missing is flagged but does not block ordering checks)
extends_pos = None extends_pos = None
for j in range(idx, n): for j in range(idx, n):
if content[j][0].strip().startswith('extends'): if content[j][0].strip().startswith('extends'):
extends_pos = j extends_pos = j
break break
if extends_pos is None: if extends_pos is None:
issues.append((path, 0, 'extends_missing', 'extends')) issues.append((path, 0, 'extends_missing', 'extends'))
return # Don't return — continue ordering checks from current position
prev_token: str = content[idx - 1][0].strip() if idx > 0 else ''
else:
if extends_pos != idx: if extends_pos != idx:
issues.append((path, content[extends_pos][1], 'extends_position', 'extends')) issues.append((path, content[extends_pos][1], 'extends_position', 'extends'))
idx = extends_pos + 1 idx = extends_pos + 1
prev_token = content[extends_pos][0].strip()
order = ['signal', 'enum', 'const', 'static var', '@export', 'var', '@onready var'] order = ['signal', 'enum', 'const', 'static var', '@export', 'var', '@onready var']
order_index = {name: i for i, name in enumerate(order)} order_index = {name: i for i, name in enumerate(order)}
seen: set[str] = set() seen: set[str] = set()
current_order = -1 current_order = -1
prev_token: str | None = content[extends_pos][0].strip()
j = idx j = idx
while j < n: while j < n:
line, line_no = content[j] line, line_no = content[j]
@@ -208,27 +349,27 @@ def check_content_order(path: str, lines: list[str]):
if stripped.startswith('signal'): if stripped.startswith('signal'):
token = 'signal' token = 'signal'
if not re.fullmatch(r"signal\s+\w+\([^)]*\)", stripped): if not re.fullmatch(r"signal\s+\w+\([^)]*\)", stripped):
issues.append((path, line_no, 'signal_format', stripped)) issues.append((path, line_no, 'signal_format', {'found': stripped}))
if 'signal' in seen and prev_token == '': if 'signal' in seen and prev_token == '':
issues.append((path, content[j - 1][1], 'signal_blank', 'signal')) issues.append((path, content[j - 1][1], 'signal_blank_extra', 'signal'))
seen.add('signal') seen.add('signal')
elif stripped.startswith('enum'): elif stripped.startswith('enum'):
token = 'enum' token = 'enum'
if not re.fullmatch(r"enum\s+\w+\s*{", stripped): if not re.fullmatch(r"enum\s+\w+\s*{", stripped):
issues.append((path, line_no, 'enum_format', stripped)) issues.append((path, line_no, 'enum_format', {'found': stripped}))
if 'enum' not in seen: if 'enum' not in seen:
if prev_token != '': if prev_token != '':
issues.append((path, line_no, 'enum_blank', 'enum')) issues.append((path, line_no, 'enum_blank_missing', 'enum'))
else: else:
if prev_token != '}' and prev_token != ']': if prev_token != '}' and prev_token != ']':
issues.append((path, line_no, 'enum_blank', 'enum')) issues.append((path, line_no, 'enum_blank_extra', 'enum'))
k = j + 1 k = j + 1
while k < n and content[k][0].strip() != '}': while k < n and content[k][0].strip() != '}':
member, m_line_no = content[k] member, m_line_no = content[k]
if member.strip() == '': if member.strip() == '':
issues.append((path, m_line_no, 'enum_member_blank', 'enum')) issues.append((path, m_line_no, 'enum_member_blank', 'enum'))
if not member.startswith('\t') or member.startswith('\t\t'): if not member.startswith('\t') or member.startswith('\t\t'):
issues.append((path, m_line_no, 'enum_member_indent', member.strip())) issues.append((path, m_line_no, 'enum_member_indent', {'found': member.strip()}))
k += 1 k += 1
if k >= n: if k >= n:
issues.append((path, line_no, 'enum_no_close', 'enum')) issues.append((path, line_no, 'enum_no_close', 'enum'))
@@ -238,7 +379,8 @@ def check_content_order(path: str, lines: list[str]):
seen.add('enum') seen.add('enum')
curr_order = order_index['enum'] curr_order = order_index['enum']
if curr_order < current_order: if curr_order < current_order:
issues.append((path, line_no, 'enum_position', 'enum')) after_token = order[current_order]
issues.append((path, line_no, 'enum_position', {'after': after_token}))
else: else:
current_order = max(current_order, curr_order) current_order = max(current_order, curr_order)
j += 1 j += 1
@@ -247,51 +389,52 @@ def check_content_order(path: str, lines: list[str]):
token = 'const' token = 'const'
if 'const' not in seen: if 'const' not in seen:
if prev_token != '': if prev_token != '':
issues.append((path, line_no, 'const_blank', 'const')) issues.append((path, line_no, 'const_blank_missing', 'const'))
else: else:
if prev_token != 'const' and prev_token != '}' and prev_token != ']': if prev_token != 'const' and prev_token != '}' and prev_token != ']':
issues.append((path, line_no, 'const_blank', 'const')) issues.append((path, line_no, 'const_blank_extra', 'const'))
seen.add('const') seen.add('const')
elif stripped.startswith('static var '): elif stripped.startswith('static var '):
token = 'static var' token = 'static var'
if 'static var' not in seen: if 'static var' not in seen:
if prev_token != '': if prev_token != '':
issues.append((path, line_no, 'static_blank', 'static var')) issues.append((path, line_no, 'static_blank_missing', 'static var'))
else: else:
if prev_token != 'static var' and prev_token != '}' and prev_token != ']': if prev_token != 'static var' and prev_token != '}' and prev_token != ']':
issues.append((path, line_no, 'static_blank', 'static var')) issues.append((path, line_no, 'static_blank_extra', 'static var'))
seen.add('static var') seen.add('static var')
elif stripped.startswith('@export'): elif stripped.startswith('@export'):
token = '@export' token = '@export'
if '@export' not in seen: if '@export' not in seen:
if prev_token != '': if prev_token != '':
issues.append((path, line_no, 'export_blank', '@export')) issues.append((path, line_no, 'export_blank_missing', '@export'))
else: else:
if prev_token != '@export' and prev_token != '}' and prev_token != ']': if prev_token != '@export' and prev_token != '}' and prev_token != ']':
issues.append((path, line_no, 'export_blank', '@export')) issues.append((path, line_no, 'export_blank_extra', '@export'))
seen.add('@export') seen.add('@export')
elif stripped.startswith('var '): elif stripped.startswith('var '):
token = 'var' token = 'var'
if 'var' not in seen: if 'var' not in seen:
if prev_token != '': if prev_token != '':
issues.append((path, line_no, 'var_blank', 'var')) issues.append((path, line_no, 'var_blank_missing', 'var'))
else: else:
if prev_token != 'var' and prev_token != '}' and prev_token != ']': if prev_token != 'var' and prev_token != '}' and prev_token != ']':
issues.append((path, line_no, 'var_blank', 'var')) issues.append((path, line_no, 'var_blank_extra', 'var'))
seen.add('var') seen.add('var')
elif stripped.startswith('@onready var '): elif stripped.startswith('@onready var '):
token = '@onready var' token = '@onready var'
if '@onready var' not in seen: if '@onready var' not in seen:
if prev_token != '': if prev_token != '':
issues.append((path, line_no, 'onready_blank', '@onready var')) issues.append((path, line_no, 'onready_blank_missing', '@onready var'))
else: else:
if prev_token != '@onready var' and prev_token != '}' and prev_token != ']': if prev_token != '@onready var' and prev_token != '}' and prev_token != ']':
issues.append((path, line_no, 'onready_blank', '@onready var')) issues.append((path, line_no, 'onready_blank_extra', '@onready var'))
seen.add('@onready var') seen.add('@onready var')
else: else:
prev_token = stripped prev_token = stripped
j += 1 j += 1
continue continue
curr_order = order_index[token] curr_order = order_index[token]
key_map = { key_map = {
'signal': 'signal_position', 'signal': 'signal_position',
@@ -303,7 +446,8 @@ def check_content_order(path: str, lines: list[str]):
'@onready var': 'onready_position', '@onready var': 'onready_position',
} }
if curr_order < current_order: if curr_order < current_order:
issues.append((path, line_no, key_map[token], token)) after_token = order[current_order]
issues.append((path, line_no, key_map[token], {'after': after_token}))
else: else:
current_order = max(current_order, curr_order) current_order = max(current_order, curr_order)
@@ -311,7 +455,8 @@ def check_content_order(path: str, lines: list[str]):
j += 1 j += 1
# Spacing for functions # ─── Function spacing check ───────────────────────────────────────────────────
def check_func_spacing(path: str): def check_func_spacing(path: str):
with open(path, 'r', encoding='utf-8') as file: with open(path, 'r', encoding='utf-8') as file:
lines = file.readlines() lines = file.readlines()
@@ -348,14 +493,15 @@ def check_func_spacing(path: str):
region_above = test_index >= 0 and REGION_RE.match(lines[test_index].lstrip()) region_above = test_index >= 0 and REGION_RE.match(lines[test_index].lstrip())
if region_above: if region_above:
if blank_count > 1: if blank_count > 1:
issues.append((path, idx + 1, 'func_blank', 'func')) issues.append((path, idx + 1, 'func_blank', {'found': blank_count}))
continue continue
elif blank_count != 2: elif blank_count != 2:
if not (blank_count == 1 and test_index >= 0 and lines[test_index].lstrip().startswith('#region')): if not (blank_count == 1 and test_index >= 0 and lines[test_index].lstrip().startswith('#region')):
issues.append((path, idx + 1, 'func_blank', 'func')) issues.append((path, idx + 1, 'func_blank', {'found': blank_count}))
# Main function # ─── Main ─────────────────────────────────────────────────────────────────────
for root, dirs, files in os.walk('.', topdown=True): for root, dirs, files in os.walk('.', topdown=True):
rel_root = os.path.relpath(root, '.') rel_root = os.path.relpath(root, '.')
if any(rel_root == excluded or rel_root.startswith(f"{excluded}{os.sep}") for excluded in EXCLUDED_DIRS): if any(rel_root == excluded or rel_root.startswith(f"{excluded}{os.sep}") for excluded in EXCLUDED_DIRS):
@@ -378,15 +524,95 @@ for root, dirs, files in os.walk('.', topdown=True):
check_content_order(path, lines) check_content_order(path, lines)
check_func_spacing(path) check_func_spacing(path)
if issues:
print("### \u274c GDScript Naming Convention Check Failed\n") # ─── Output ───────────────────────────────────────────────────────────────────
print(f"The project must follow Godot GDScript naming conventions.\nTotal issues: {len(issues)}\n")
for path, idx, kind, name in issues: ORDERING_KINDS = frozenset({
'annotation_order', 'class_position', 'extends_position', 'extends_missing',
'signal_position', 'enum_position', 'const_position', 'static_position',
'export_position', 'var_position', 'onready_position',
})
FORMATTING_KINDS = frozenset({
'func_blank',
'signal_format', 'signal_blank_extra',
'enum_format', 'enum_blank_missing', 'enum_blank_extra',
'enum_member_blank', 'enum_member_indent', 'enum_no_close',
'const_blank_missing', 'const_blank_extra',
'static_blank_missing', 'static_blank_extra',
'export_blank_missing', 'export_blank_extra',
'var_blank_missing', 'var_blank_extra',
'onready_blank_missing', 'onready_blank_extra',
})
def categorize(kind: str) -> str:
if kind in NAMING_KINDS:
return 'naming'
if kind in ORDERING_KINDS:
return 'ordering'
if kind in FORMATTING_KINDS:
return 'formatting'
return 'other'
_KIND_LABEL: dict[str, str] = {
'class': 'class names',
'enum_name': 'enum names',
'enum_member': 'enum member names',
'function': 'function names',
'variable': 'variable names',
'constant': 'constant names',
'signal': 'signal names',
}
def format_message(kind: str, data) -> str:
if kind in NAMING_KINDS:
suggestion = SUGGESTION_FN[kind](data)
conv = CONVENTION_NAMES[kind]
label = _KIND_LABEL.get(kind, f"{kind}s")
return f"'{data}' should be '{suggestion}' ({label} must be {conv})"
if kind == 'error': if kind == 'error':
message = name return str(data)
else: template = MESSAGES.get(kind, kind)
message = f"'{name}' {MESSAGES[kind]}" if isinstance(data, dict):
print(f"- `{path}:{idx}` {message}") return template.format(**data)
return template
if not issues:
print("✅ All GDScript files follow the naming conventions.")
sys.exit(0)
# Group issues by file, sort by line number within each file
by_file: dict = defaultdict(list)
counts: Counter = Counter()
for path, line_no, kind, data in issues:
by_file[path].append((line_no, kind, data))
counts[categorize(kind)] += 1
total = len(issues)
file_count = len(by_file)
summary_parts = []
for cat in ('naming', 'ordering', 'formatting', 'other'):
if counts[cat]:
summary_parts.append(f"{counts[cat]} {cat}")
summary = ', '.join(summary_parts)
print(f"### ❌ GDScript Naming Convention Check Failed\n")
print(f"**{total} issue{'s' if total != 1 else ''}** in {file_count} file{'s' if file_count != 1 else ''} ({summary})\n")
for fpath in sorted(by_file):
file_issues = sorted(by_file[fpath], key=lambda x: x[0])
count = len(file_issues)
print("<details>")
print(f"<summary><code>{fpath}</code> — {count} issue{'s' if count != 1 else ''}</summary>\n")
print("| Line | Issue |")
print("|------|-------|")
for line_no, kind, data in file_issues:
msg = format_message(kind, data)
print(f"| {line_no} | {msg} |")
print("\n</details>\n")
sys.exit(1) sys.exit(1)
else:
print("\u2705 All GDScript files follow the naming conventions.")
+1 -1
View File
@@ -10,7 +10,7 @@ jobs:
permissions: permissions:
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Run GDScript naming convention check - name: Run GDScript naming convention check
id: naming id: naming
run: | run: |
+11 -7
View File
@@ -53,11 +53,11 @@ Cada lección sigue una progresión lógica basada en datos lingüísticos extra
```bash ```bash
# Clona tu fork del repositorio # Clona tu fork del repositorio
git clone https://github.com/TU_USUARIO/Kalulu.git git clone https://github.com/TU_USUARIO/Kalulu-Frontend.git
# O bien # O bien
git clone git@github.com:YOUR_USERNAME/Kalulu.git git clone git@github.com:YOUR_USERNAME/Kalulu-Frontend.git
cd Kalulu cd Kalulu-Frontend
``` ```
🔁 _Reemplaza `TU_USUARIO` con tu nombre de usuario._ 🔁 _Reemplaza `TU_USUARIO` con tu nombre de usuario._
@@ -113,13 +113,17 @@ Asegúrate de que tu código siga nuestras convenciones de codificación e inclu
## ❓ FAQ ## ❓ FAQ
### 📱 O Kalulu está disponível para dispositivos móveis? ### 📱 ¿Está Kalulu disponible en móviles?
Sim! Kalulu está disponível para: ¡Sí! Kalulu está disponible para:
- [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu) - [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu)
- [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967) - [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967)
### 💻 Existe uma versão para computador? ### 💻 ¿Está Kalulu disponible en escritorio?
Uma versão experimental para Windows, Mac e Linux está em desenvolvimento. Fique ligado! ¡Sí! Las versiones para Windows, Mac y Linux están disponibles en la sección [Releases](https://github.com/Excello-Recherche-Education/Kalulu-Frontend/releases).
### 🌐 ¿Está Kalulu disponible directamente en la web?
¡Estamos trabajando en ello, mantente atento!
+9 -5
View File
@@ -53,11 +53,11 @@ Chaque leçon suit une séquence structurée basée sur des données linguistiqu
```bash ```bash
# Clonez votre fork du dépôt # Clonez votre fork du dépôt
git clone https://github.com/VOTRE_UTILISATEUR/Kalulu.git git clone https://github.com/VOTRE_UTILISATEUR/Kalulu-Frontend.git
# Ou # Ou
git clone git@github.com:YOUR_USERNAME/Kalulu.git git clone git@github.com:YOUR_USERNAME/Kalulu-Frontend.git
cd Kalulu cd Kalulu-Frontend
``` ```
🔁 _Remplacez `VOTRE_UTILISATEUR` par votre nom d'utilisateur GitHub._ 🔁 _Remplacez `VOTRE_UTILISATEUR` par votre nom d'utilisateur GitHub._
@@ -120,6 +120,10 @@ Oui ! Kalulu est disponible pour :
- [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu) - [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu)
- [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967) - [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967)
### 💻 Existe-t-il une version pour ordinateur ? ### 💻 Kalulu est-il disponible sur ordinateur ?
Une version pour Windows, Mac et Linux est en cours de développement expérimental. Restez à l’écoute ! Oui ! Des versions pour Windows, Mac et Linux sont disponibles dans la section [Releases](https://github.com/Excello-Recherche-Education/Kalulu-Frontend/releases).
### 🌐 Kalulu est-il disponible directement sur le web ?
Nous y travaillons, restez à l’écoute !
+10 -6
View File
@@ -51,18 +51,18 @@ Each lesson follows a structured sequence based on linguistic data drawn from ch
We recommend forking the repository before cloning, so you can easily contribute or manage your own changes. We recommend forking the repository before cloning, so you can easily contribute or manage your own changes.
1. Go to the [Kalulu GitHub Repository](https://github.com/Excello-Recherche-Education/Kalulu). 1. Go to the [Kalulu GitHub Repository](https://github.com/Excello-Recherche-Education/Kalulu-Frontend).
2. Click the **Fork** button at the top-right corner to create your own copy of the repo. 2. Click the **Fork** button at the top-right corner to create your own copy of the repo.
3. Once forked, open your terminal and run the following commands: 3. Once forked, open your terminal and run the following commands:
```bash ```bash
# Clone your fork of the repository # Clone your fork of the repository
git clone https://github.com/YOUR_USERNAME/Kalulu.git git clone https://github.com/YOUR_USERNAME/Kalulu-Frontend.git
# Or # Or
git clone git@github.com:YOUR_USERNAME/Kalulu.git git clone git@github.com:YOUR_USERNAME/Kalulu-Frontend.git
# Navigate into the project directory # Navigate into the project directory
cd Kalulu cd Kalulu-Frontend
``` ```
🔁 *Remember to replace `YOUR_USERNAME` with your actual GitHub username.* 🔁 *Remember to replace `YOUR_USERNAME` with your actual GitHub username.*
@@ -141,9 +141,13 @@ Yes! Kalulu is available on:
- [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu) - [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu)
- [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967) - [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967)
### 💻 Is there a desktop version? ### 💻 Is Kalulu available on desktop?
An experimental version for Windows, Mac, and Linux is currently in development. Stay tuned! Yes! Desktop versions for Windows, Mac, and Linux are available in the [Releases](https://github.com/Excello-Recherche-Education/Kalulu-Frontend/releases) section.
### 🌐 Is Kalulu available directly on the web?
We are working on it, stay tuned!
--- ---
+12 -8
View File
@@ -17,7 +17,7 @@
- [2. Instalar o Godot Engine](#2-instalar-o-godot-engine) - [2. Instalar o Godot Engine](#2-instalar-o-godot-engine)
- [🧩 Addons inclusos](#-addons-inclusos) - [🧩 Addons inclusos](#-addons-inclusos)
- [🤝 Quer ajudar?](#-quer-ajudar-) - [🤝 Quer ajudar?](#-quer-ajudar-)
- [❓ Preguntas Frecuentes](#faq) - [❓ Perguntas Frequentes](#faq)
--- ---
@@ -51,11 +51,11 @@ Cada lição segue uma sequência estruturada com base em dados da literatura in
```bash ```bash
# Clone o seu fork do repositório # Clone o seu fork do repositório
git clone https://github.com/SEU_USUARIO/Kalulu.git git clone https://github.com/SEU_USUARIO/Kalulu-Frontend.git
# Ou então # Ou então
git clone git@github.com:YOUR_USERNAME/Kalulu.git git clone git@github.com:YOUR_USERNAME/Kalulu-Frontend.git
cd Kalulu cd Kalulu-Frontend
``` ```
🔁 _Substitua `SEU_USUARIO` pelo seu nome de usuário._ 🔁 _Substitua `SEU_USUARIO` pelo seu nome de usuário._
@@ -111,13 +111,17 @@ Certifique-se de que seu código siga nossas convenções de codificação e inc
## ❓ FAQ ## ❓ FAQ
### 📱 ¿Está Kalulu disponible en móviles? ### 📱 O Kalulu está disponível para dispositivos móveis?
¡Sí! Kalulu está disponible para: Sim! Kalulu está disponível para:
- [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu) - [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu)
- [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967) - [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967)
### 💻 ¿Existe una versión para ordenadores? ### 💻 O Kalulu está disponível no desktop?
Una versión experimental para Windows, Mac y Linux está en desarrollo. ¡Mantente atento! Sim! Versões para Windows, Mac e Linux estão disponíveis na seção [Releases](https://github.com/Excello-Recherche-Education/Kalulu-Frontend/releases).
### 🌐 O Kalulu está disponível diretamente na web?
Estamos trabalhando nisso, fique ligado!
@@ -6,12 +6,16 @@ func _get_name() -> String:
var tool_configs: Dictionary[String, Dictionary] = { var tool_configs: Dictionary[String, Dictionary] = {
"game": { "game": {
"name": "Kalulu",
"main_scene": "res://sources/menus/splash_screen/splash_screen.tscn", "main_scene": "res://sources/menus/splash_screen/splash_screen.tscn",
"output_name": "kalulu_app" "icon": "res://assets/kalulu_icon.png",
"output_name": "Kalulu"
}, },
"prof_tool": { "prof_tool": {
"name": "Prof_Tool",
"main_scene": "res://sources/language_tool/prof_tool_menu.tscn", "main_scene": "res://sources/language_tool/prof_tool_menu.tscn",
"output_name": "prof_tool" "icon": "res://assets/prof_tool_icon.png",
"output_name": "Prof_Tool"
} }
} }
@@ -26,6 +30,8 @@ func _export_begin(features: PackedStringArray, is_debug: bool, path: String, fl
push_error("Tool '%s' is not defined in the configuration." % selected_tool) push_error("Tool '%s' is not defined in the configuration." % selected_tool)
return return
var config: Dictionary[String, String] = tool_configs[selected_tool] var config: Dictionary = tool_configs[selected_tool]
ProjectSettings.set_setting("application/config/name", config["name"])
ProjectSettings.set_setting("application/run/main_scene", config["main_scene"]) ProjectSettings.set_setting("application/run/main_scene", config["main_scene"])
ProjectSettings.set_setting("application/config/icon", config["icon"])
ProjectSettings.save() ProjectSettings.save()
@@ -3,40 +3,76 @@ extends EditorPlugin
const EXPORTER_PATH: String = "res://addons/export_tool_manager/export_tool_exporter.gd" const EXPORTER_PATH: String = "res://addons/export_tool_manager/export_tool_exporter.gd"
const TOOL_CONFIGS: Dictionary = {
"game": {
"name": "Kalulu",
"main_scene": "res://sources/menus/splash_screen/splash_screen.tscn",
"icon": "res://assets/kalulu_icon.png",
"export_folder": "Kalulu_Game",
"button_label": "Export All (Kalulu Game)",
"presets": {
"Android Kalulu AAB": "/Android/Kalulu.aab",
"Android Kalulu APK": "/Android/Kalulu.apk",
"Android Kalulu APK 32 bits": "/Android/Kalulu_32.apk",
"Windows Kalulu": "/Windows/Kalulu-Windows.zip",
"Linux Kalulu": "/Linux/Kalulu-Linux.zip",
# Apple in last because it's always the most complicated
#"iOS Kalulu": "/iOS/Kalulu.ipa",
#"macOS Kalulu": "/macOS/Kalulu-macOS.dmg",
},
},
"prof_tool": {
"name": "Prof_Tool",
"main_scene": "res://sources/language_tool/prof_tool_menu.tscn",
"icon": "res://assets/prof_tool_icon.png",
"export_folder": "Prof_Tool",
"button_label": "Export All (Prof Tool)",
"presets": {
"Windows ProfTool": "/Windows/Prof_Tool-Windows.zip",
"Linux ProfTool": "/Linux/Prof_Tool-Linux.zip",
# Apple in last because it's always the most complicated
#"macOS ProfTool": "/macOS/Prof_Tool-macOS.dmg",
},
}
}
var tool_selector: OptionButton var tool_selector: OptionButton
var exporter_plugin: EditorExportPlugin var exporter_plugin: EditorExportPlugin
var export_button: Button var export_button: Button
var current_tool: String = "game"
func _enter_tree() -> void: func _enter_tree() -> void:
# Tool Selector UI # Tool Selector UI
tool_selector = OptionButton.new() tool_selector = OptionButton.new()
tool_selector.name = "Tool Exporter" tool_selector.name = "Tool Exporter"
tool_selector.add_item("Game") tool_selector.add_item("Kalulu Game")
tool_selector.add_item("Prof Tool") tool_selector.add_item("Prof Tool")
tool_selector.connect("item_selected", _on_tool_selected) tool_selector.connect("item_selected", _on_tool_selected)
add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR, tool_selector) add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR, tool_selector)
var settings: EditorSettings = get_editor_interface().get_editor_settings() var settings: EditorSettings = get_editor_interface().get_editor_settings()
var current: Variant = settings.get_setting("export_tool_manager/current_tool") var saved: Variant = settings.get_setting("export_tool_manager/current_tool")
var current_tool: String = "game"
if typeof(current) == TYPE_STRING and current.strip_edges() != "": if typeof(saved) == TYPE_STRING and saved.strip_edges() != "":
current_tool = current.strip_edges() current_tool = saved.strip_edges()
match current_tool: match current_tool:
"prof_tool": "prof_tool":
tool_selector.select(1) tool_selector.select(1)
"game", _: "game", _:
current_tool = "game"
tool_selector.select(0) tool_selector.select(0)
_apply_tool_config(current_tool)
# Exporter plugin # Exporter plugin
exporter_plugin = load(EXPORTER_PATH).new() exporter_plugin = load(EXPORTER_PATH).new()
add_export_plugin(exporter_plugin) add_export_plugin(exporter_plugin)
# Export All Button # Export All Button
export_button = Button.new() export_button = Button.new()
export_button.text = "Export All (Game)" export_button.text = TOOL_CONFIGS[current_tool]["button_label"]
export_button.pressed.connect(_on_export_all_game_pressed) export_button.pressed.connect(_on_export_all_pressed)
add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR, export_button) add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR, export_button)
func _exit_tree() -> void: func _exit_tree() -> void:
@@ -49,37 +85,59 @@ func _exit_tree() -> void:
remove_export_plugin(exporter_plugin) remove_export_plugin(exporter_plugin)
func _on_tool_selected(index: int) -> void: func _on_tool_selected(index: int) -> void:
var tool: String = "game"
match index: match index:
1: 1:
tool = "prof_tool" current_tool = "prof_tool"
0, _: 0, _:
tool = "game" current_tool = "game"
var settings: EditorSettings = get_editor_interface().get_editor_settings() var settings: EditorSettings = get_editor_interface().get_editor_settings()
settings.set_setting("export_tool_manager/current_tool", tool) settings.set_setting("export_tool_manager/current_tool", current_tool)
_apply_tool_config(current_tool)
func _on_export_all_game_pressed() -> void:
export_all_game_presets()
func export_all_game_presets() -> void: func _apply_tool_config(tool: String) -> void:
if not TOOL_CONFIGS.has(tool):
push_error("ExportToolManager: Unknown tool '%s'" % tool)
return
var config: Dictionary = TOOL_CONFIGS[tool]
ProjectSettings.set_setting("application/config/name", config["name"])
ProjectSettings.set_setting("application/run/main_scene", config["main_scene"])
ProjectSettings.set_setting("application/config/icon", config["icon"])
ProjectSettings.save()
if export_button:
export_button.text = config["button_label"]
print("ExportToolManager: Switched to '%s' (scene: %s)" % [config["name"], config["main_scene"]])
func _on_export_all_pressed() -> void:
export_all_presets()
func export_all_presets() -> void:
var config: Dictionary = TOOL_CONFIGS[current_tool]
var base_folder: String = "../Export/Autobuild/%s/" % config["export_folder"]
var version_folder: String = base_folder + get_application_version_with_code()
# Check if the version folder already exists
if DirAccess.dir_exists_absolute(version_folder):
var dialog: AcceptDialog = AcceptDialog.new()
dialog.title = "Export aborted"
dialog.dialog_text = "The export folder already exists:\n%s\n\nDelete it manually before re-exporting." % version_folder
get_editor_interface().get_base_control().add_child(dialog)
dialog.popup_centered()
dialog.confirmed.connect(dialog.queue_free)
dialog.canceled.connect(dialog.queue_free)
return
var godot_path: String = OS.get_executable_path() var godot_path: String = OS.get_executable_path()
var exportFolder: String = "../Export/autobuilds/" var presets: Dictionary = config["presets"]
var presets: Dictionary[String, String]= {
"Android Kalulu AAB": "/Android/kalulu_app.aab",
"Android Kalulu APK": "/Android/kalulu_app.apk",
"Android Kalulu APK 32 bits": "/Android/kalulu_app_32.apk",
"Windows Kalulu": "/Windows/Kalulu-Windows.zip",
"Linux Kalulu": "/Linux/Kalulu-Linux.zip",
# Apple in last because it's always the most complicated
#"iOS Kalulu": "/iOS/KaluluApp.ipa",
#"macOS Kalulu": "/macOS/Kalulu-macOS.dmg"
}
for preset_name in presets.keys(): for preset_name in presets.keys():
await get_tree().create_timer(1).timeout await get_tree().create_timer(1).timeout
var output_path: String = exportFolder + get_application_version_with_code() + presets[preset_name] var output_path: String = version_folder + presets[preset_name]
print("Start exporting " + preset_name) print("Start exporting " + preset_name)
DirAccess.make_dir_recursive_absolute(output_path.get_base_dir()) DirAccess.make_dir_recursive_absolute(output_path.get_base_dir())
@@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/editor_icon.png-6f130a2788dfaa185bebbdd85ed98
compress/mode=0 compress/mode=0
compress/high_quality=false compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1 compress/hdr_compression=1
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
@@ -25,6 +27,10 @@ mipmaps/generate=false
mipmaps/limit=-1 mipmaps/limit=-1
roughness/mode=0 roughness/mode=0
roughness/src_normal="" roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true process/fix_alpha_border=true
process/premult_alpha=false process/premult_alpha=false
process/normal_map_invert_y=false process/normal_map_invert_y=false
+7 -5
View File
@@ -3,19 +3,21 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://cop8iscyxohrb" uid="uid://cop8iscyxohrb"
path="res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.ctex" path.s3tc="res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.s3tc.ctex"
path.etc2="res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.etc2.ctex"
metadata={ metadata={
"vram_texture": false "imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
} }
[deps] [deps]
source_file="res://assets/bush_curtain.png" source_file="res://assets/bush_curtain.png"
dest_files=["res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.ctex"] dest_files=["res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.s3tc.ctex", "res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.etc2.ctex"]
[params] [params]
compress/mode=0 compress/mode=2
compress/high_quality=false compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/uastc_level=0 compress/uastc_level=0
@@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0
compress/hdr_compression=1 compress/hdr_compression=1
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=true
mipmaps/limit=-1 mipmaps/limit=-1
roughness/mode=0 roughness/mode=0
roughness/src_normal="" roughness/src_normal=""
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

@@ -2,16 +2,16 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://cqhbpt3lk6f15" uid="uid://d1j23o6nq476v"
path="res://.godot/imported/bottom.png-3c7c71fa24e23ae34adb1d444da0b3db.ctex" path="res://.godot/imported/ant_body.png-dad00fa87392efb7e152045fa1f6b084.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://assets/lesson_screen/bottom.png" source_file="res://assets/gardens/animals/ant_body.png"
dest_files=["res://.godot/imported/bottom.png-3c7c71fa24e23ae34adb1d444da0b3db.ctex"] dest_files=["res://.godot/imported/ant_body.png-dad00fa87392efb7e152045fa1f6b084.ctex"]
[params] [params]
Binary file not shown.

After

Width:  |  Height:  |  Size: 953 B

@@ -2,16 +2,16 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://cffuqacgb1jra" uid="uid://by3xfdin7jrsn"
path="res://.godot/imported/branches.png-59c95c0c624c68eb2181d2b0fe6a5080.ctex" path="res://.godot/imported/ant_face.png-b00fa29a7fcfe1e19ec19735f3395466.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://assets/lesson_screen/branches.png" source_file="res://assets/gardens/animals/ant_face.png"
dest_files=["res://.godot/imported/branches.png-59c95c0c624c68eb2181d2b0fe6a5080.ctex"] dest_files=["res://.godot/imported/ant_face.png-b00fa29a7fcfe1e19ec19735f3395466.ctex"]
[params] [params]
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6nrx0dn0h3f2"
path="res://.godot/imported/caterpillar_body.png-c691b990e51d372f5dfdafa881ea6750.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/caterpillar_body.png"
dest_files=["res://.godot/imported/caterpillar_body.png-c691b990e51d372f5dfdafa881ea6750.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 806 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cnihbmks0piwi"
path="res://.godot/imported/caterpillar_face.png-d383b965d4555da185ab647f352d95f3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/caterpillar_face.png"
dest_files=["res://.godot/imported/caterpillar_face.png-d383b965d4555da185ab647f352d95f3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b2e61oot7ht35"
path="res://.godot/imported/crab_body.png-d5ff5fcdad64e46336ef16b4a3fb00c7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/crab_body.png"
dest_files=["res://.godot/imported/crab_body.png-d5ff5fcdad64e46336ef16b4a3fb00c7.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 1005 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ruclqu4dc13u"
path="res://.godot/imported/crab_face.png-405026ec02e80559c79371d1bab55844.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/crab_face.png"
dest_files=["res://.godot/imported/crab_face.png-405026ec02e80559c79371d1bab55844.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://oagcnmxs0xx1"
path="res://.godot/imported/frog_body.png-ac6c4a085cb17c6bc169773a464b64b6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/frog_body.png"
dest_files=["res://.godot/imported/frog_body.png-ac6c4a085cb17c6bc169773a464b64b6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b4243242f34g0"
path="res://.godot/imported/frog_face.png-edba38b44d42deef80a709ade2e5e8f6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/frog_face.png"
dest_files=["res://.godot/imported/frog_face.png-edba38b44d42deef80a709ade2e5e8f6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

@@ -2,16 +2,16 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://c0pixsxb7e5yd" uid="uid://bb3we2it550v6"
path="res://.godot/imported/garden_03_open.png-142fe10dfa5b6344ac20de2d61c58e7f.ctex" path="res://.godot/imported/jellyfish_body.png-a32700abbb41c080cba5614127a3edc3.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://assets/gardens/gardens/garden_03_open.png" source_file="res://assets/gardens/animals/jellyfish_body.png"
dest_files=["res://.godot/imported/garden_03_open.png-142fe10dfa5b6344ac20de2d61c58e7f.ctex"] dest_files=["res://.godot/imported/jellyfish_body.png-a32700abbb41c080cba5614127a3edc3.ctex"]
[params] [params]
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -2,16 +2,16 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://b5kildofgmthb" uid="uid://dppmdv8u3cwl1"
path="res://.godot/imported/garden_01_open.png-e7e93db35611b0ad9dabe123854f1ab1.ctex" path="res://.godot/imported/jellyfish_face.png-5c0a129760def337aa729a02e1028153.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://assets/gardens/gardens/garden_01_open.png" source_file="res://assets/gardens/animals/jellyfish_face.png"
dest_files=["res://.godot/imported/garden_01_open.png-e7e93db35611b0ad9dabe123854f1ab1.ctex"] dest_files=["res://.godot/imported/jellyfish_face.png-5c0a129760def337aa729a02e1028153.ctex"]
[params] [params]
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dr12efhuotfgt"
path="res://.godot/imported/monkey_body.png-b049cc78b0f6869945a1c7d6a1301ad4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/monkey_body.png"
dest_files=["res://.godot/imported/monkey_body.png-b049cc78b0f6869945a1c7d6a1301ad4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dc52xvm4y6rir"
path="res://.godot/imported/monkey_face.png-985109f289329f15999880cce0b5a16e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/monkey_face.png"
dest_files=["res://.godot/imported/monkey_face.png-985109f289329f15999880cce0b5a16e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c2yalimkyunxi"
path="res://.godot/imported/parakeet_body.png-9465060ca470033db7910f6ce2322a6d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/parakeet_body.png"
dest_files=["res://.godot/imported/parakeet_body.png-9465060ca470033db7910f6ce2322a6d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://l52tfb7fdrpt"
path="res://.godot/imported/parakeet_face.png-94d7bc7370d8ae647ca7d22a41893e3f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/parakeet_face.png"
dest_files=["res://.godot/imported/parakeet_face.png-94d7bc7370d8ae647ca7d22a41893e3f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://noekve4gjudr"
path="res://.godot/imported/penguin_body.png-72481c56dc380b551e94e0f413ef0cf8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/penguin_body.png"
dest_files=["res://.godot/imported/penguin_body.png-72481c56dc380b551e94e0f413ef0cf8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dbg7mxg3x7vd4"
path="res://.godot/imported/penguin_face.png-ea217ef7de954aee6edea62f83594216.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/penguin_face.png"
dest_files=["res://.godot/imported/penguin_face.png-ea217ef7de954aee6edea62f83594216.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b7rqldqdft30a"
path="res://.godot/imported/turtle_body.png-0f50da4036c6750167a288e6f006a813.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/turtle_body.png"
dest_files=["res://.godot/imported/turtle_body.png-0f50da4036c6750167a288e6f006a813.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 917 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://nu4kpbywwpgn"
path="res://.godot/imported/turtle_face.png-e570d8d931a8a1c99178dba731ef0fdb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/animals/turtle_face.png"
dest_files=["res://.godot/imported/turtle_face.png-e570d8d931a8a1c99178dba731ef0fdb.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cxjy5f7oyl8mq"
path="res://.godot/imported/lesson_circle.png-05f9dc6a36bb9c72360b598507504f72.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/buttons/lesson_circle.png"
dest_files=["res://.godot/imported/lesson_circle.png-05f9dc6a36bb9c72360b598507504f72.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c1ml42sp1vqga"
path="res://.godot/imported/movie_icon.png-3b93e2f2cfeeb8eec0332bbcd7cda143.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/buttons/movie_icon.png"
dest_files=["res://.godot/imported/movie_icon.png-3b93e2f2cfeeb8eec0332bbcd7cda143.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d26hapg1hf8a6"
path.s3tc="res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.s3tc.ctex"
path.etc2="res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_01.png"
dest_files=["res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.s3tc.ctex", "res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://4wt50lu3cwbl"
path.s3tc="res://.godot/imported/garden_02.png-952b73c44e8f297d7146afccf72fa6f8.s3tc.ctex"
path.etc2="res://.godot/imported/garden_02.png-952b73c44e8f297d7146afccf72fa6f8.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_02.png"
dest_files=["res://.godot/imported/garden_02.png-952b73c44e8f297d7146afccf72fa6f8.s3tc.ctex", "res://.godot/imported/garden_02.png-952b73c44e8f297d7146afccf72fa6f8.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ch1ah3nkjy5cl"
path.s3tc="res://.godot/imported/garden_03.png-5f6b1132537a67d14c76986a1aaf0c9e.s3tc.ctex"
path.etc2="res://.godot/imported/garden_03.png-5f6b1132537a67d14c76986a1aaf0c9e.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_03.png"
dest_files=["res://.godot/imported/garden_03.png-5f6b1132537a67d14c76986a1aaf0c9e.s3tc.ctex", "res://.godot/imported/garden_03.png-5f6b1132537a67d14c76986a1aaf0c9e.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://l32ekwfso26s"
path.s3tc="res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.s3tc.ctex"
path.etc2="res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_04.png"
dest_files=["res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.s3tc.ctex", "res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d3bu30iutptwx"
path.s3tc="res://.godot/imported/garden_05.png-b2eede99e5cfc7d755b398e252db8066.s3tc.ctex"
path.etc2="res://.godot/imported/garden_05.png-b2eede99e5cfc7d755b398e252db8066.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_05.png"
dest_files=["res://.godot/imported/garden_05.png-b2eede99e5cfc7d755b398e252db8066.s3tc.ctex", "res://.godot/imported/garden_05.png-b2eede99e5cfc7d755b398e252db8066.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://blg1nxeno6cwl"
path="res://.godot/imported/garden_05_open.png-ff5ee3f0e878fa03a8dea0ef133ca5ba.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_05_open.png"
dest_files=["res://.godot/imported/garden_05_open.png-ff5ee3f0e878fa03a8dea0ef133ca5ba.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bhamsdjj677b3"
path.s3tc="res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.s3tc.ctex"
path.etc2="res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_06.png"
dest_files=["res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.s3tc.ctex", "res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dimvsnhfd8y8q"
path="res://.godot/imported/garden_06_open.png-13105f591491c2be9fb6cc46e6c1a2d6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_06_open.png"
dest_files=["res://.godot/imported/garden_06_open.png-13105f591491c2be9fb6cc46e6c1a2d6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://clcff3fg5jd2k"
path.s3tc="res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.s3tc.ctex"
path.etc2="res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_07.png"
dest_files=["res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.s3tc.ctex", "res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bhr21dw3baqrm"
path="res://.godot/imported/garden_07_open.png-d87f883f506a9836a782efbcfd1542f6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_07_open.png"
dest_files=["res://.godot/imported/garden_07_open.png-d87f883f506a9836a782efbcfd1542f6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://kgeoctiggnxx"
path.s3tc="res://.godot/imported/garden_08.png-60a000c144495dd62452995bc8932932.s3tc.ctex"
path.etc2="res://.godot/imported/garden_08.png-60a000c144495dd62452995bc8932932.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_08.png"
dest_files=["res://.godot/imported/garden_08.png-60a000c144495dd62452995bc8932932.s3tc.ctex", "res://.godot/imported/garden_08.png-60a000c144495dd62452995bc8932932.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://phoeyhvft3dc"
path="res://.godot/imported/garden_08_open.png-01bb33e901c94aea253f809b00da568d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_08_open.png"
dest_files=["res://.godot/imported/garden_08_open.png-01bb33e901c94aea253f809b00da568d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dqk14m4demy3a"
path.s3tc="res://.godot/imported/garden_09.png-4a49e6b67d1574a86d201faadd295c12.s3tc.ctex"
path.etc2="res://.godot/imported/garden_09.png-4a49e6b67d1574a86d201faadd295c12.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_09.png"
dest_files=["res://.godot/imported/garden_09.png-4a49e6b67d1574a86d201faadd295c12.s3tc.ctex", "res://.godot/imported/garden_09.png-4a49e6b67d1574a86d201faadd295c12.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6x6ypfyin4l5"
path="res://.godot/imported/garden_09_open.png-4056b229410a3403994326084102e6f5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_09_open.png"
dest_files=["res://.godot/imported/garden_09_open.png-4056b229410a3403994326084102e6f5.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cahtl4j3wxahn"
path.s3tc="res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.s3tc.ctex"
path.etc2="res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_10.png"
dest_files=["res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.s3tc.ctex", "res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bryk735xd5r8j"
path="res://.godot/imported/garden_10_open.png-6df2b29b42d9313fb097ea589603ef68.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_10_open.png"
dest_files=["res://.godot/imported/garden_10_open.png-6df2b29b42d9313fb097ea589603ef68.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dpl670l7onk5n"
path.s3tc="res://.godot/imported/garden_11.png-cfde776b2d9c071e225bed94f36560e1.s3tc.ctex"
path.etc2="res://.godot/imported/garden_11.png-cfde776b2d9c071e225bed94f36560e1.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_11.png"
dest_files=["res://.godot/imported/garden_11.png-cfde776b2d9c071e225bed94f36560e1.s3tc.ctex", "res://.godot/imported/garden_11.png-cfde776b2d9c071e225bed94f36560e1.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d25ddek1hl6ca"
path="res://.godot/imported/garden_11_open.png-aaa76c2521c39c7b0116060068bfb598.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_11_open.png"
dest_files=["res://.godot/imported/garden_11_open.png-aaa76c2521c39c7b0116060068bfb598.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,42 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6pmtjjp4rejb"
path.s3tc="res://.godot/imported/garden_12.png-13d7be39631648987956568e37e0e56f.s3tc.ctex"
path.etc2="res://.godot/imported/garden_12.png-13d7be39631648987956568e37e0e56f.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/gardens/gardens/garden_12.png"
dest_files=["res://.godot/imported/garden_12.png-13d7be39631648987956568e37e0e56f.s3tc.ctex", "res://.godot/imported/garden_12.png-13d7be39631648987956568e37e0e56f.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cgqf4g3rv36sq"
path="res://.godot/imported/garden_12_open.png-b78bc8ccfc5520f4bb7618fbebf7f572.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_12_open.png"
dest_files=["res://.godot/imported/garden_12_open.png-b78bc8ccfc5520f4bb7618fbebf7f572.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bv2riha86d4ac"
path="res://.godot/imported/garden_13_open.png-2f4b311fd8fdd52939d886204f85f5f1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_13_open.png"
dest_files=["res://.godot/imported/garden_13_open.png-2f4b311fd8fdd52939d886204f85f5f1.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cr76law5eivwm"
path="res://.godot/imported/garden_14_open.png-a684fe2a5f05b9b7fd22838d53791afb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_14_open.png"
dest_files=["res://.godot/imported/garden_14_open.png-a684fe2a5f05b9b7fd22838d53791afb.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cj6ois0siu3p0"
path="res://.godot/imported/garden_15_open.png-afb8688cb9957b71d459db3640d2b0b8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/gardens/gardens/garden_15_open.png"
dest_files=["res://.godot/imported/garden_15_open.png-afb8688cb9957b71d459db3640d2b0b8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

Some files were not shown because too many files have changed in this diff Show More