diff --git a/.gitignore b/.gitignore
index 383ff42..7227cb3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,5 @@
/DungeonShooting_ExcelTool/obj
/DungeonShooting_ExcelTool/bin
/DungeonShooting_Godot/DungeonShooting.sln.DotSettings.user
+/DungeonShooting_Godot/.VSCodeCounter
+**/*.txt
diff --git "a/DungeonShooting_Document/\345\274\200\345\217\221\346\227\245\345\277\227.md" "b/DungeonShooting_Document/\345\274\200\345\217\221\346\227\245\345\277\227.md"
index e40e569..63f6444 100644
--- "a/DungeonShooting_Document/\345\274\200\345\217\221\346\227\245\345\277\227.md"
+++ "b/DungeonShooting_Document/\345\274\200\345\217\221\346\227\245\345\277\227.md"
@@ -1,5 +1,51 @@
---
+### 2024-2-25
+游戏正式起名为《枪火地牢》!
+项目从4.2升级到4.2.1, 本次更新大量内容, 地牢编辑器2.0, 游戏大厅, 奖励房间, 自定义地牢生成规则, 地牢装饰等, 所以开发周期来到了两个半月
+主要工作内容如下:
+* 地牢编辑器2.0正式支持47格Tile的平铺地形, 完整的新增功能:
+ * 新增TileSet编辑器, 功能如下:
+ * 导入外部图像, 并进行裁剪
+ * 编辑自动平铺地形(2x2, 3x3)
+ * 编辑图块组合
+ * 烘焙静态导航网格
+ * TileMap编辑器更新:
+ * 支持选择TileSet
+ * 支持在自定义层级绘制图块
+ * 支持自由绘制TileSet中的纹理图块
+ * 支持绘制TileSet中的自定义平铺地形(2x2, 3x3)
+ * 支持绘制TileSet中的组合图块
+ * 支持配置自动填充数据, 生成怪和奖励交给随机池控制
+ * 支持配置随机物体的标记
+ * 生成墙壁高度改为2格高
+ * 标记物体显示图标
+ * 地牢房间管理器更新:
+ * 支持删除地牢组
+ * 删除地牢组/地牢房间添加延时确定, 防止用户误删
+ * 创建房间添加默认预设
+ * 地牢生成器新功能
+ * 生成奖励/商店房间(商店目前只是占位)
+ * 支持自定义逻辑控制房间生成
+ * 随机池功能, 控制整个游戏奖惩
+* 新增5把武器(音效特性还没完全做完)
+ * P90: 射速高, 弹夹容量大
+ * (暂未起名): 发色彩虹子弹
+ * M1型热能狙击枪: 发射可反弹和穿透的子弹
+ * 左轮: 基础抢, 性能较弱
+ * 木质短弓: 蓄力拉弓射击, 箭会插在目标身上, 目标死亡时可回收箭
+* 击杀敌人掉落金币, 玩家会自动拾取金币, Ui血条下方显示金币数量
+* 将excel导出工具执行流程改为先动态编译工具源码在执行, 这样导出工具就不用再打包了
+* 将excel导出工具库依赖改为使用`Aspose.Cells`, 这个库在执行导出excel不会修改excel文件内容, 也就是不会被git侦测到修改
+* 新增`InputAction`, 用于控制用户输入行为
+* 更新门素材
+* 新增游戏大厅流程, 进入游戏首先进入大厅, 在通过大厅的地牢入口进入地牢
+* 修复`UiGrid`和部分Ui会产生游离节点的bug
+* 修复Mac运行游戏在敌人死亡时游戏会卡死的bug
+* 修复Mac运行游戏地上素材闪烁失帧的bug
+* 支持在编辑器中放置`ActivityObject`实例, 通过`ActivityInstance`节点实现
+
+---
### 2023-12-07
项目正式从Godot4.2beta升级到4.2, 这一个半月主要工作内容:
* 新增武器:
diff --git "a/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview1.png" "b/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview1.png"
new file mode 100644
index 0000000..f75e34b
--- /dev/null
+++ "b/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview1.png"
Binary files differ
diff --git "a/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview2.png" "b/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview2.png"
new file mode 100644
index 0000000..7b1ff40
--- /dev/null
+++ "b/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview2.png"
Binary files differ
diff --git "a/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview2_gif.gif" "b/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview2_gif.gif"
new file mode 100644
index 0000000..823b011
--- /dev/null
+++ "b/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview2_gif.gif"
Binary files differ
diff --git "a/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview3.png" "b/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview3.png"
new file mode 100644
index 0000000..11458c1
--- /dev/null
+++ "b/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview3.png"
Binary files differ
diff --git "a/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview3_gif.gif" "b/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview3_gif.gif"
new file mode 100644
index 0000000..7539937
--- /dev/null
+++ "b/DungeonShooting_Document/\346\226\207\346\241\243\350\265\204\346\272\220/preview3_gif.gif"
Binary files differ
diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/NodeMonitor.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/NodeMonitor.cs
index 2a62912..cc95225 100644
--- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/NodeMonitor.cs
+++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/NodeMonitor.cs
@@ -95,7 +95,7 @@
catch (Exception e)
{
//检查节点存在报错, 直接跳过该节点的检查
- Debug.Log(e.Message);
+ GD.Print(e.Message);
}
}
@@ -131,7 +131,7 @@
catch (Exception e)
{
//检查节点存在报错, 直接跳过该节点的检查
- Debug.Log(e.Message);
+ GD.Print(e.Message);
_targetNode = null;
}
_checkTreeTimer = 0;
diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs
index 198c613..6e9581b 100644
--- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs
+++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs
@@ -7,7 +7,7 @@
namespace Plugin
{
[Tool]
- public partial class Plugin : EditorPlugin
+ public partial class Plugin : EditorPlugin, ISerializationListener
{
///
/// 自定义节点类型数据
@@ -42,18 +42,12 @@
//自定义节点
private CustomTypeInfo[] _customTypeInfos = new CustomTypeInfo[]
{
- // new CustomTypeInfo(
- // "ActivityMark",
- // "Node2D",
- // "res://src/framework/map/mark/ActivityMark.cs",
- // "res://addons/dungeonShooting_plugin/Mark.svg"
- // ),
- // new CustomTypeInfo(
- // "EnemyMark",
- // "Node2D",
- // "res://src/framework/map/mark/EnemyMark.cs",
- // "res://addons/dungeonShooting_plugin/Mark.svg"
- // ),
+ new CustomTypeInfo(
+ "ActivityInstance",
+ "Node2D",
+ "res://src/framework/activity/ActivityInstance.cs",
+ "res://addons/dungeonShooting_plugin/Mark.svg"
+ ),
};
public override void _Process(double delta)
@@ -68,7 +62,7 @@
{
_uiMonitor = new NodeMonitor();
_uiMonitor.SceneNodeChangeEvent += GenerateUiCode;
- OnSceneChanged(GetEditorInterface().GetEditedSceneRoot());
+ OnSceneChanged(EditorInterface.Singleton.GetEditedSceneRoot());
}
}
@@ -76,6 +70,8 @@
{
Instance = this;
+ #region MyRegion
+
if (_customTypeInfos != null)
{
//注册自定义节点
@@ -95,7 +91,7 @@
}
_editorTools = GD.Load(ResourcePath.prefab_ui_EditorTools_tscn).Instantiate();
- var editorMainScreen = GetEditorInterface().GetEditorMainScreen();
+ var editorMainScreen = EditorInterface.Singleton.GetEditorMainScreen();
editorMainScreen.AddChild(_editorTools);
try
@@ -116,15 +112,27 @@
Debug.LogError(e.ToString());
}
-
_MakeVisible(false);
+ #endregion
+
//场景切换事件
SceneChanged += OnSceneChanged;
_uiMonitor = new NodeMonitor();
_uiMonitor.SceneNodeChangeEvent += GenerateUiCode;
- OnSceneChanged(GetEditorInterface().GetEditedSceneRoot());
+
+ OnSceneChanged(EditorInterface.Singleton.GetEditedSceneRoot());
+ }
+
+ public void OnBeforeSerialize()
+ {
+ SceneChanged -= OnSceneChanged;
+ }
+
+ public void OnAfterDeserialize()
+ {
+ SceneChanged += OnSceneChanged;
}
public override void _ExitTree()
@@ -252,7 +260,6 @@
}
}
}
-
}
}
#endif
diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs
index 21df908..9be0e02 100644
--- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs
+++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs
@@ -95,8 +95,18 @@
private static int compilerTool(string csProjectPath, string rid, string outputPath)
{
//dotnet publish excelTool -c Release -r win-x64 -o ./excelTool/publish/win-x64
+ //dotnet publish excelTool -c Release -r osx-x64 -o excelTool/publish/osx-x64
+ //dotnet publish excelTool -c Release -r osx-x64 --self-contained true -p:PublishSingleFile=true -o excelTool/publish/osx-x64
var outLog = new Array();
- var result = OS.Execute("dotnet", new string[] { "publish", csProjectPath, "-c", "Release", "-r", rid, "-o", outputPath }, outLog);
+ var result = OS.Execute("dotnet", new string[]
+ {
+ "publish", csProjectPath,
+ "-c", "Release", "-r", rid,
+ "--self-contained", "true",
+ "-p:PublishSingleFile=true",
+ "-o", outputPath
+ }, outLog);
+ //var result = OS.Execute("dotnet", new string[] { "publish", csProjectPath, "-c", "Release", "-r", rid, "-o", outputPath }, outLog);
foreach (var variant in outLog)
{
GD.Print(variant);
diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ResourcePathGenerator.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ResourcePathGenerator.cs
index c8f4479..0cf335d 100644
--- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ResourcePathGenerator.cs
+++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ResourcePathGenerator.cs
@@ -4,6 +4,7 @@
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
+using Godot;
namespace Generator;
@@ -39,12 +40,13 @@
".git",
".import",
".mono",
+ ".VSCodeCounter",
"android",
"addons",
".godot",
".vs",
- "resource/map/tiledata",
- "resource/map/tileMaps"
+ "resource/map",
+ "excelTool"
};
private static string resultStr = "";
@@ -65,18 +67,18 @@
"public class ResourcePath\n" +
"{\n";
- Debug.Log("更新 ResourcePath...");
+ GD.Print("更新 ResourcePath...");
var directoryInfo = new DirectoryInfo(System.Environment.CurrentDirectory);
EachDir(directoryInfo);
resultStr += "}";
File.WriteAllText(savePath, resultStr);
- Debug.Log("ResourcePath.cs 写出完成!");
+ GD.Print("ResourcePath.cs 写出完成!");
}
catch (Exception e)
{
- Debug.LogError(e.ToString());
+ GD.PrintErr(e.ToString());
return false;
}
@@ -91,7 +93,7 @@
path = path.Replace('\\', '/');
if (exclude.Contains(path))
{
- Debug.Log("扫描排除路径: " + path);
+ GD.Print("扫描排除路径: " + path);
return;
}
}
diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/UiGenerator.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/UiGenerator.cs
index 3a84f2a..eb4a48d 100644
--- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/UiGenerator.cs
+++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/UiGenerator.cs
@@ -80,13 +80,13 @@
//打开ui
if (open)
{
- Plugin.Plugin.Instance.GetEditorInterface().OpenSceneFromPath(prefabResPath);
- }
+ EditorInterface.Singleton.OpenSceneFromPath(prefabResPath);
+ }
}
catch (Exception e)
{
- Debug.LogError(e.ToString());
+ GD.PrintErr(e.ToString());
return false;
}
@@ -117,7 +117,7 @@
var uiName = control.Name.ToString();
var path = GameConfig.UiCodeDir + uiName.FirstToLower() + "/" + uiName + ".cs";
- Debug.Log("重新生成ui代码: " + path);
+ GD.Print("重新生成ui代码: " + path);
var uiNode = EachNodeFromEditor(control.Name, control);
var code = GenerateClassCode(uiNode);
@@ -126,7 +126,7 @@
{
if (pair.Value > 1)
{
- Debug.Log($"检测到同名节点: '{pair.Key}', 使用该名称的节点将无法生成唯一节点属性!");
+ GD.Print($"检测到同名节点: '{pair.Key}', 使用该名称的节点将无法生成唯一节点属性!");
}
}
@@ -134,7 +134,7 @@
}
catch (Exception e)
{
- Debug.LogError(e.ToString());
+ GD.PrintErr(e.ToString());
return false;
}
@@ -177,25 +177,23 @@
{
str += retraction + $" _ = {node};\n";
}
- else
+
+ if (uiNodeInfo.Children != null)
{
- if (uiNodeInfo.Children != null)
+ for (var i = 0; i < uiNodeInfo.Children.Count; i++)
{
- for (var i = 0; i < uiNodeInfo.Children.Count; i++)
+ var item = uiNodeInfo.Children[i];
+ if (uiNodeInfo.OriginName == uiNodeInfo.UiRootName)
{
- var item = uiNodeInfo.Children[i];
- if (uiNodeInfo.OriginName == uiNodeInfo.UiRootName)
- {
- str += GenerateUiScriptCode("", item, retraction);
- }
- else
- {
- str += GenerateUiScriptCode(node, item, retraction);
- }
+ str += GenerateUiScriptCode("", item, retraction);
+ }
+ else
+ {
+ str += GenerateUiScriptCode(node, item, retraction);
}
}
}
-
+
return str;
}
@@ -400,12 +398,12 @@
bool isNodeScript;
if (match.Success) //存在命名空间
{
- isNodeScript = IsNodeScript(match.Value + "." + fileName);
+ isNodeScript = CheckNodeScript(match.Value + "." + fileName);
uiNode = new UiNodeInfo(uiRootName, fieldName, originName, className, match.Value + "." + fileName, isNodeScript);
}
else //不存在命名空间
{
- isNodeScript = IsNodeScript(fileName);
+ isNodeScript = CheckNodeScript(fileName);
uiNode = new UiNodeInfo(uiRootName, fieldName, originName, className, fileName, isNodeScript);
}
//检测是否是引用Ui
@@ -447,7 +445,7 @@
return uiNode;
}
- private static bool IsNodeScript(string typeName)
+ private static bool CheckNodeScript(string typeName)
{
var type = typeof(UiGenerator).Assembly.GetType(typeName);
if (type == null)
@@ -501,6 +499,10 @@
ClassName = className;
NodeTypeName = nodeTypeName;
IsNodeScript = isNodeScript;
+ if (isNodeScript)
+ {
+ GD.Print("发现 IUiNodeScript 节点: " + originName);
+ }
}
}
diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/UiManagerMethodsGenerator.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/UiManagerMethodsGenerator.cs
index d005c2b..8aae0cd 100644
--- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/UiManagerMethodsGenerator.cs
+++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/UiManagerMethodsGenerator.cs
@@ -2,6 +2,7 @@
using System;
using System.IO;
+using Godot;
namespace Generator;
@@ -104,7 +105,7 @@
}
catch (Exception e)
{
- Debug.LogError(e.ToString());
+ GD.PrintErr(e.ToString());
return false;
}
diff --git a/DungeonShooting_Godot/excel/ActivityBase.xlsx b/DungeonShooting_Godot/excel/ActivityBase.xlsx
index 560af91..cf9f463 100644
--- a/DungeonShooting_Godot/excel/ActivityBase.xlsx
+++ b/DungeonShooting_Godot/excel/ActivityBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/ActivityMaterial.xlsx b/DungeonShooting_Godot/excel/ActivityMaterial.xlsx
index b23fc4c..16e6778 100644
--- a/DungeonShooting_Godot/excel/ActivityMaterial.xlsx
+++ b/DungeonShooting_Godot/excel/ActivityMaterial.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/AiAttackAttr.xlsx b/DungeonShooting_Godot/excel/AiAttackAttr.xlsx
index 8d3cdf5..b9daab6 100644
--- a/DungeonShooting_Godot/excel/AiAttackAttr.xlsx
+++ b/DungeonShooting_Godot/excel/AiAttackAttr.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/BulletBase.xlsx b/DungeonShooting_Godot/excel/BulletBase.xlsx
index 6ee6491..65f4af2 100644
--- a/DungeonShooting_Godot/excel/BulletBase.xlsx
+++ b/DungeonShooting_Godot/excel/BulletBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/EnemyBase.xlsx b/DungeonShooting_Godot/excel/EnemyBase.xlsx
index cec7fac..362bdeb 100644
--- a/DungeonShooting_Godot/excel/EnemyBase.xlsx
+++ b/DungeonShooting_Godot/excel/EnemyBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/Sound.xlsx b/DungeonShooting_Godot/excel/Sound.xlsx
index ff7944e..47c6585 100644
--- a/DungeonShooting_Godot/excel/Sound.xlsx
+++ b/DungeonShooting_Godot/excel/Sound.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/WeaponBase.xlsx b/DungeonShooting_Godot/excel/WeaponBase.xlsx
index e3c81e8..8f61a7a 100644
--- a/DungeonShooting_Godot/excel/WeaponBase.xlsx
+++ b/DungeonShooting_Godot/excel/WeaponBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excelTool/ExcelGenerator.cs b/DungeonShooting_Godot/excelTool/ExcelGenerator.cs
index 0268b2a..c206007 100644
--- a/DungeonShooting_Godot/excelTool/ExcelGenerator.cs
+++ b/DungeonShooting_Godot/excelTool/ExcelGenerator.cs
@@ -524,7 +524,20 @@
var cellStringValue = GetCellStringValue(cell);
if (cellStringValue.Length == 0)
{
- data.Add(field, null);
+ if (mappingData.TypeStr == nameof(ActivityQuality))
+ {
+ ActivityQuality v = default;
+ data.Add(field, v);
+ }
+ else if (mappingData.TypeStr == nameof(ActivityType))
+ {
+ ActivityType v = default;
+ data.Add(field, v);
+ }
+ else
+ {
+ data.Add(field, null);
+ }
}
else
{
@@ -691,6 +704,8 @@
case "vector2": return "SerializeVector2";
case "vector3": return "SerializeVector3";
case "color": return "SerializeColor";
+ case "activityType": return "ActivityType";
+ case "activityQuality": return "ActivityQuality";
}
return typeName;
@@ -716,6 +731,8 @@
case "vector2": return "SerializeVector2";
case "vector3": return "SerializeVector3";
case "color": return "SerializeColor";
+ case "activityType": return "ActivityType";
+ case "activityQuality": return "ActivityQuality";
}
return typeName;
diff --git a/DungeonShooting_Godot/excelTool/serialize/ActivityQuality.cs b/DungeonShooting_Godot/excelTool/serialize/ActivityQuality.cs
new file mode 100644
index 0000000..9d5641d
--- /dev/null
+++ b/DungeonShooting_Godot/excelTool/serialize/ActivityQuality.cs
@@ -0,0 +1,39 @@
+
+///
+/// 物体品质
+///
+public enum ActivityQuality
+{
+ ///
+ /// 未设置
+ ///
+ None = 0,
+ ///
+ /// 通用物品
+ ///
+ Common = 1,
+ ///
+ /// 基础
+ ///
+ Basic = 2,
+ ///
+ /// 普通
+ ///
+ Ordinary = 3,
+ ///
+ /// 稀有
+ ///
+ Rare = 4,
+ ///
+ /// 史诗
+ ///
+ Epic = 5,
+ ///
+ /// 传说
+ ///
+ Legend = 6,
+ ///
+ /// 独一无二
+ ///
+ Unique = 7
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/excelTool/serialize/ActivityType.cs b/DungeonShooting_Godot/excelTool/serialize/ActivityType.cs
new file mode 100644
index 0000000..d094992
--- /dev/null
+++ b/DungeonShooting_Godot/excelTool/serialize/ActivityType.cs
@@ -0,0 +1,55 @@
+
+///
+/// 物体类型
+///
+public enum ActivityType
+{
+ ///
+ /// 无类型
+ ///
+ None,
+ ///
+ /// 玩家
+ ///
+ Player,
+ ///
+ /// 测试对象
+ ///
+ Test,
+ ///
+ /// 角色
+ ///
+ Role,
+ ///
+ /// 敌人
+ ///
+ Enemy,
+ ///
+ /// 武器
+ ///
+ Weapon,
+ ///
+ /// 子弹
+ ///
+ Bullet,
+ ///
+ /// 弹壳
+ ///
+ Shell,
+ ///
+ /// 特效
+ ///
+ Effect,
+ ///
+ /// 道具
+ ///
+ Prop,
+ ///
+ /// 宝箱
+ ///
+ Treasure,
+ ///
+ /// 其它类型
+ ///
+ Other = 99,
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/excelTool/version b/DungeonShooting_Godot/excelTool/version
index 56a6051..bf0d87a 100644
--- a/DungeonShooting_Godot/excelTool/version
+++ b/DungeonShooting_Godot/excelTool/version
@@ -1 +1 @@
-1
\ No newline at end of file
+4
\ No newline at end of file
diff --git a/DungeonShooting_Godot/export_presets.cfg b/DungeonShooting_Godot/export_presets.cfg
index dbf459f..fe181fc 100644
--- a/DungeonShooting_Godot/export_presets.cfg
+++ b/DungeonShooting_Godot/export_presets.cfg
@@ -216,7 +216,7 @@
export_filter="all_resources"
include_filter=""
exclude_filter="resource/map/tileMaps/*,excel/*,excelTool/*,build/*"
-export_path="build/windows/game.exe"
+export_path="build/windows/GunfireDungeon.exe"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
diff --git a/DungeonShooting_Godot/prefab/box/TreasureBox0001.tscn b/DungeonShooting_Godot/prefab/box/TreasureBox0001.tscn
new file mode 100644
index 0000000..804110c
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/box/TreasureBox0001.tscn
@@ -0,0 +1,94 @@
+[gd_scene load_steps=12 format=3 uid="uid://d2gj0yuup0gdb"]
+
+[ext_resource type="Script" path="res://src/game/activity/box/TreasureBox.cs" id="1_wxils"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_l4sas"]
+[ext_resource type="Texture2D" uid="uid://dladvmgql1pwe" path="res://resource/sprite/box/TreasureBox0001.png" id="3_eed5t"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_1v1is"]
+resource_local_to_scene = true
+shader = ExtResource("2_l4sas")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_lewo8"]
+resource_local_to_scene = true
+shader = ExtResource("2_l4sas")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hserg"]
+atlas = ExtResource("3_eed5t")
+region = Rect2(0, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_8d3br"]
+atlas = ExtResource("3_eed5t")
+region = Rect2(0, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_fp844"]
+atlas = ExtResource("3_eed5t")
+region = Rect2(32, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_151ky"]
+atlas = ExtResource("3_eed5t")
+region = Rect2(64, 0, 32, 32)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_e74dc"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hserg")
+}],
+"loop": false,
+"name": &"default",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8d3br")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_fp844")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_151ky")
+}],
+"loop": false,
+"name": &"open",
+"speed": 8.0
+}]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_j3yup"]
+size = Vector2(26, 11)
+
+[node name="TreasureBox0001" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 516
+script = ExtResource("1_wxils")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_1v1is")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_lewo8")
+position = Vector2(0, -11)
+sprite_frames = SubResource("SpriteFrames_e74dc")
+animation = &"open"
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(0, -1.5)
+shape = SubResource("RectangleShape2D_j3yup")
diff --git a/DungeonShooting_Godot/prefab/bullet/explode/Explode0001.tscn b/DungeonShooting_Godot/prefab/bullet/explode/Explode0001.tscn
index fad5129..bd7ca13 100644
--- a/DungeonShooting_Godot/prefab/bullet/explode/Explode0001.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/explode/Explode0001.tscn
@@ -307,6 +307,7 @@
modulate = Color(1.3, 1.3, 1.3, 1)
z_index = 1
collision_layer = 0
+collision_mask = 0
monitorable = false
script = ExtResource("1_qn5pu")
diff --git a/DungeonShooting_Godot/prefab/bullet/laser/Laser0001.tscn b/DungeonShooting_Godot/prefab/bullet/laser/Laser0001.tscn
index 9189dc9..04de455 100644
--- a/DungeonShooting_Godot/prefab/bullet/laser/Laser0001.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/laser/Laser0001.tscn
@@ -8,6 +8,7 @@
[node name="Laser0001" type="Area2D" node_paths=PackedStringArray("Particles2D")]
collision_layer = 2
+collision_mask = 0
monitorable = false
script = ExtResource("1_3w0rp")
Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/bullet/laser/Laser0002.tscn b/DungeonShooting_Godot/prefab/bullet/laser/Laser0002.tscn
new file mode 100644
index 0000000..c989324
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/laser/Laser0002.tscn
@@ -0,0 +1,24 @@
+[gd_scene load_steps=4 format=3 uid="uid://cjt68qk2mm7km"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/laser/Laser.cs" id="1_t3xbd"]
+[ext_resource type="Texture2D" uid="uid://clfpbq1c1ilp1" path="res://resource/sprite/bullet/laser/Laser0001.png" id="2_ga23q"]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_l4vuk"]
+resource_local_to_scene = true
+
+[node name="Laser0001" type="Area2D" node_paths=PackedStringArray("Particles2D")]
+collision_layer = 2
+collision_mask = 0
+monitorable = false
+script = ExtResource("1_t3xbd")
+Particles2D = []
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_l4vuk")
+
+[node name="LineSprite" type="Sprite2D" parent="."]
+modulate = Color(1.5, 1.5, 1.5, 1)
+position = Vector2(0, 1.19209e-07)
+texture = ExtResource("2_ga23q")
+centered = false
+offset = Vector2(0, -8)
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0001.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0001.tscn
index 6c95617..e1ddde3 100644
--- a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0001.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0001.tscn
@@ -1,8 +1,8 @@
-[gd_scene load_steps=8 format=3 uid="uid://bj4kmvt8jg1cf"]
+[gd_scene load_steps=7 format=3 uid="uid://bj4kmvt8jg1cf"]
[ext_resource type="Script" path="res://src/game/activity/bullet/normal/Bullet.cs" id="1_3d3df"]
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_mxa72"]
-[ext_resource type="Texture2D" uid="uid://bu0b11hiuecxy" path="res://resource/sprite/bullet/normal/bullet0001.png" id="3_pm4pr"]
+[ext_resource type="SpriteFrames" uid="uid://baoxep7vami72" path="res://resource/spriteFrames/bullet/Bullet0001.tres" id="3_q4a0o"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_w5w0i"]
resource_local_to_scene = true
@@ -28,22 +28,12 @@
shader_parameter/outline_use_blend = false
shader_parameter/grey = 0.0
-[sub_resource type="SpriteFrames" id="SpriteFrames_5wvmf"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": ExtResource("3_pm4pr")
-}],
-"loop": true,
-"name": &"default",
-"speed": 5.0
-}]
-
[sub_resource type="RectangleShape2D" id="RectangleShape2D_lcqb8"]
size = Vector2(9, 4)
[node name="Bullet0001" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
collision_layer = 2
+collision_mask = 0
script = ExtResource("1_3d3df")
CollisionArea = NodePath("AnimatedSprite/CollisionArea")
CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
@@ -59,7 +49,7 @@
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
modulate = Color(1.6, 1.6, 1.6, 1)
material = SubResource("ShaderMaterial_qhkgc")
-sprite_frames = SubResource("SpriteFrames_5wvmf")
+sprite_frames = ExtResource("3_q4a0o")
[node name="CollisionArea" type="Area2D" parent="AnimatedSprite"]
collision_layer = 0
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0002.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0002.tscn
index ecabf2f..4441bc7 100644
--- a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0002.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0002.tscn
@@ -36,6 +36,7 @@
[node name="Bullet0002" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
collision_layer = 2
+collision_mask = 0
script = ExtResource("1_hepay")
CollisionArea = NodePath("AnimatedSprite/CollisionArea")
CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0003.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0003.tscn
index b87d8e0..88082d7 100644
--- a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0003.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0003.tscn
@@ -33,6 +33,7 @@
[node name="Bullet0003" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
collision_layer = 2
+collision_mask = 0
script = ExtResource("1_h6lfm")
CollisionArea = NodePath("AnimatedSprite/CollisionArea")
CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0004.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0004.tscn
index 3c96ac3..57e55ab 100644
--- a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0004.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0004.tscn
@@ -62,6 +62,7 @@
[node name="Bullet0003" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
collision_layer = 2
+collision_mask = 0
script = ExtResource("1_1jbgr")
CollisionArea = NodePath("AnimatedSprite/CollisionArea")
CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0005.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0005.tscn
index 3203560..a6a0493 100644
--- a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0005.tscn
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0005.tscn
@@ -62,6 +62,8 @@
[node name="Bullet0005" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
collision_layer = 2
+collision_mask = 0
+platform_wall_layers = 512
script = ExtResource("1_13wdl")
BrushId = "0004"
EffectiveAltitude = 1.0
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0006.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0006.tscn
new file mode 100644
index 0000000..9e58d27
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0006.tscn
@@ -0,0 +1,66 @@
+[gd_scene load_steps=8 format=3 uid="uid://c1fx7c1jwil26"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/normal/TrailBullet.cs" id="1_b8pov"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_iolc6"]
+[ext_resource type="SpriteFrames" uid="uid://dx4t45bq8ehhq" path="res://resource/spriteFrames/bullet/Bullet0006.tres" id="3_v2y7a"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_w5w0i"]
+resource_local_to_scene = true
+shader = ExtResource("2_iolc6")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_qhkgc"]
+resource_local_to_scene = true
+shader = ExtResource("2_iolc6")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = false
+shader_parameter/grey = 0.0
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_4mw2b"]
+radius = 3.0
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_vqdkp"]
+radius = 3.0
+
+[node name="Bullet0006" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 2
+collision_mask = 0
+script = ExtResource("1_b8pov")
+CollisionArea = NodePath("AnimatedSprite/CollisionArea")
+CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
+Particles2D = []
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_w5w0i")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+modulate = Color(1.6, 1.6, 1.6, 1)
+material = SubResource("ShaderMaterial_qhkgc")
+sprite_frames = ExtResource("3_v2y7a")
+
+[node name="CollisionArea" type="Area2D" parent="AnimatedSprite"]
+collision_layer = 0
+collision_mask = 0
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="AnimatedSprite/CollisionArea"]
+shape = SubResource("CircleShape2D_4mw2b")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_vqdkp")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0007.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0007.tscn
new file mode 100644
index 0000000..4dfced6
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0007.tscn
@@ -0,0 +1,67 @@
+[gd_scene load_steps=8 format=3 uid="uid://cybey66bhe4ro"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/normal/Bullet.cs" id="1_h4tn7"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_fgeyt"]
+[ext_resource type="SpriteFrames" uid="uid://bkwoy70bnm74k" path="res://resource/spriteFrames/bullet/Bullet0007.tres" id="3_c1ec6"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_v77gw"]
+resource_local_to_scene = true
+shader = ExtResource("2_fgeyt")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_r6pkp"]
+resource_local_to_scene = true
+shader = ExtResource("2_fgeyt")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = false
+shader_parameter/grey = 0.0
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_0vxfv"]
+radius = 2.0
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_e2yn3"]
+radius = 2.0
+
+[node name="Bullet0007" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 2
+collision_mask = 0
+script = ExtResource("1_h4tn7")
+CollisionArea = NodePath("AnimatedSprite/CollisionArea")
+CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
+Particles2D = []
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_v77gw")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+modulate = Color(2, 2, 2, 1)
+material = SubResource("ShaderMaterial_r6pkp")
+sprite_frames = ExtResource("3_c1ec6")
+
+[node name="CollisionArea" type="Area2D" parent="AnimatedSprite"]
+collision_layer = 0
+collision_mask = 0
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="AnimatedSprite/CollisionArea"]
+position = Vector2(-2.38419e-07, 0)
+shape = SubResource("CircleShape2D_0vxfv")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_e2yn3")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0008.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0008.tscn
new file mode 100644
index 0000000..838ada7
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0008.tscn
@@ -0,0 +1,66 @@
+[gd_scene load_steps=8 format=3 uid="uid://d3dcmte122p6t"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/normal/ColorBullet.cs" id="1_qqm5l"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_t3qw6"]
+[ext_resource type="SpriteFrames" uid="uid://ubdvau75andr" path="res://resource/spriteFrames/bullet/Bullet0008.tres" id="3_aoni0"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_v77gw"]
+resource_local_to_scene = true
+shader = ExtResource("2_t3qw6")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_jypdq"]
+resource_local_to_scene = true
+shader = ExtResource("2_t3qw6")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = false
+shader_parameter/grey = 0.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_5x14b"]
+size = Vector2(22, 3)
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_72d75"]
+size = Vector2(22, 3)
+
+[node name="Bullet0008" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 2
+collision_mask = 0
+script = ExtResource("1_qqm5l")
+CollisionArea = NodePath("AnimatedSprite/CollisionArea")
+CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
+Particles2D = []
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_v77gw")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+modulate = Color(1.6, 1.6, 1.6, 1)
+material = SubResource("ShaderMaterial_jypdq")
+sprite_frames = ExtResource("3_aoni0")
+
+[node name="CollisionArea" type="Area2D" parent="AnimatedSprite"]
+collision_layer = 0
+collision_mask = 0
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="AnimatedSprite/CollisionArea"]
+shape = SubResource("RectangleShape2D_5x14b")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_72d75")
diff --git a/DungeonShooting_Godot/prefab/bullet/normal/Bullet0009.tscn b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0009.tscn
new file mode 100644
index 0000000..2831163
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/normal/Bullet0009.tscn
@@ -0,0 +1,74 @@
+[gd_scene load_steps=8 format=3 uid="uid://c4puxmnan51ds"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/normal/Arrow.cs" id="1_eots7"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_tscmb"]
+[ext_resource type="SpriteFrames" uid="uid://cyg3uvbakan08" path="res://resource/spriteFrames/bullet/Bullet0009.tres" id="3_l58ff"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_v77gw"]
+resource_local_to_scene = true
+shader = ExtResource("2_tscmb")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_jypdq"]
+resource_local_to_scene = true
+shader = ExtResource("2_tscmb")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = false
+shader_parameter/grey = 0.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_5x14b"]
+size = Vector2(21, 3)
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_72d75"]
+size = Vector2(21, 3)
+
+[node name="Bullet0009" type="CharacterBody2D" node_paths=PackedStringArray("HalfSprite", "CollisionArea", "CollisionShape2D", "Particles2D", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 2
+collision_mask = 0
+script = ExtResource("1_eots7")
+HalfSprite = NodePath("AnimatedSprite/HalfSprite")
+CollisionArea = NodePath("AnimatedSprite/CollisionArea")
+CollisionShape2D = NodePath("AnimatedSprite/CollisionArea/CollisionShape2D")
+Particles2D = []
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_v77gw")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_jypdq")
+sprite_frames = ExtResource("3_l58ff")
+
+[node name="CollisionArea" type="Area2D" parent="AnimatedSprite"]
+collision_layer = 0
+collision_mask = 0
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="AnimatedSprite/CollisionArea"]
+position = Vector2(-2.5, 0)
+shape = SubResource("RectangleShape2D_5x14b")
+
+[node name="HalfSprite" type="AnimatedSprite2D" parent="AnimatedSprite"]
+visible = false
+z_index = -1
+sprite_frames = ExtResource("3_l58ff")
+animation = &"half_start"
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(-2.5, 0)
+shape = SubResource("RectangleShape2D_72d75")
diff --git a/DungeonShooting_Godot/prefab/currency/Gold1.tscn b/DungeonShooting_Godot/prefab/currency/Gold1.tscn
new file mode 100644
index 0000000..5db5a1c
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/currency/Gold1.tscn
@@ -0,0 +1,160 @@
+[gd_scene load_steps=24 format=3 uid="uid://bayga6rue4ldm"]
+
+[ext_resource type="PackedScene" uid="uid://c7i2q4mx5qp2h" path="res://prefab/currency/GoldTemplate.tscn" id="1_7anjj"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_p7xui"]
+[ext_resource type="Texture2D" uid="uid://benn0iaclw8dk" path="res://resource/sprite/currency/Gold_1.png" id="3_lhsna"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_2tpx1"]
+resource_local_to_scene = true
+shader = ExtResource("2_p7xui")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_e75yg"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(0, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_vipr3"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(8, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_c2w8t"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(16, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4u1py"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(24, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ejbhm"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(32, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_obptk"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(40, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_xdxp6"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(48, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j2dug"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(56, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0yf5k"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(64, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_aew3e"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(72, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0uljq"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(80, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_fu3cl"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(88, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_c1vcu"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(96, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_8sqp3"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(104, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_htbwa"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(112, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hei3a"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(120, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0e87y"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(128, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_i2rar"]
+atlas = ExtResource("3_lhsna")
+region = Rect2(136, 0, 8, 8)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_3te8s"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_e75yg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_vipr3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_c2w8t")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_4u1py")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ejbhm")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_obptk")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_xdxp6")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j2dug")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0yf5k")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_aew3e")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0uljq")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_fu3cl")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_c1vcu")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8sqp3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_htbwa")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hei3a")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0e87y")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_i2rar")
+}],
+"loop": true,
+"name": &"default",
+"speed": 10.0
+}]
+
+[node name="Gold1" instance=ExtResource("1_7anjj")]
+GoldCount = 1
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_2tpx1")
+sprite_frames = SubResource("SpriteFrames_3te8s")
+autoplay = "default"
+frame_progress = 0.578976
diff --git a/DungeonShooting_Godot/prefab/currency/Gold10.tscn b/DungeonShooting_Godot/prefab/currency/Gold10.tscn
new file mode 100644
index 0000000..e723646
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/currency/Gold10.tscn
@@ -0,0 +1,160 @@
+[gd_scene load_steps=24 format=3 uid="uid://cpfeog5xk7frv"]
+
+[ext_resource type="PackedScene" uid="uid://c7i2q4mx5qp2h" path="res://prefab/currency/GoldTemplate.tscn" id="1_q6rqs"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_fwuy2"]
+[ext_resource type="Texture2D" uid="uid://7dy6itvggpwy" path="res://resource/sprite/currency/Gold_10.png" id="3_x42g4"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_2tpx1"]
+resource_local_to_scene = true
+shader = ExtResource("2_fwuy2")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_x41wb"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(0, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_03ih4"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(8, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_qdoke"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(16, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_3wdhp"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(24, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_vgpiy"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(32, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_jfxvm"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(40, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hqk1i"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(48, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j4okn"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(56, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_nohmj"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(64, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_blcne"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(72, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_018qf"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(80, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_kb863"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(88, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_nrald"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(96, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4rlwh"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(104, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7qdiq"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(112, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_l7tjk"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(120, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_thd0w"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(128, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_js8fg"]
+atlas = ExtResource("3_x42g4")
+region = Rect2(136, 0, 8, 8)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_3te8s"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_x41wb")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_03ih4")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_qdoke")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_3wdhp")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_vgpiy")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_jfxvm")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hqk1i")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j4okn")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_nohmj")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_blcne")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_018qf")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kb863")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_nrald")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_4rlwh")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7qdiq")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_l7tjk")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_thd0w")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_js8fg")
+}],
+"loop": true,
+"name": &"default",
+"speed": 10.0
+}]
+
+[node name="Gold10" instance=ExtResource("1_q6rqs")]
+GoldCount = 10
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_2tpx1")
+sprite_frames = SubResource("SpriteFrames_3te8s")
+autoplay = "default"
+frame_progress = 0.578976
diff --git a/DungeonShooting_Godot/prefab/currency/Gold5.tscn b/DungeonShooting_Godot/prefab/currency/Gold5.tscn
new file mode 100644
index 0000000..88de932
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/currency/Gold5.tscn
@@ -0,0 +1,160 @@
+[gd_scene load_steps=24 format=3 uid="uid://dqeph6v1y3ycm"]
+
+[ext_resource type="PackedScene" uid="uid://c7i2q4mx5qp2h" path="res://prefab/currency/GoldTemplate.tscn" id="1_t3bsk"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_r5r64"]
+[ext_resource type="Texture2D" uid="uid://bfpcqj2x8t2os" path="res://resource/sprite/currency/Gold_5.png" id="3_rf7nc"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_2tpx1"]
+resource_local_to_scene = true
+shader = ExtResource("2_r5r64")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_kpbsl"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(0, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_tpaps"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(8, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gfmw0"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(16, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_kh76b"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(24, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_h71d5"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(32, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_irvf2"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(40, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_6upf3"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(48, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_th3rv"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(56, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2nwhu"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(64, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_3f1xk"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(72, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4edoa"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(80, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_t7eeg"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(88, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_x22g0"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(96, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_14m0u"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(104, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4s0em"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(112, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ncscs"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(120, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gwnv8"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(128, 0, 8, 8)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_aw75c"]
+atlas = ExtResource("3_rf7nc")
+region = Rect2(136, 0, 8, 8)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_3te8s"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kpbsl")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_tpaps")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gfmw0")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kh76b")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_h71d5")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_irvf2")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_6upf3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_th3rv")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2nwhu")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_3f1xk")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_4edoa")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_t7eeg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_x22g0")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_14m0u")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_4s0em")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ncscs")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gwnv8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_aw75c")
+}],
+"loop": true,
+"name": &"default",
+"speed": 10.0
+}]
+
+[node name="Gold5" instance=ExtResource("1_t3bsk")]
+GoldCount = 5
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_2tpx1")
+sprite_frames = SubResource("SpriteFrames_3te8s")
+autoplay = "default"
+frame_progress = 0.578976
diff --git a/DungeonShooting_Godot/prefab/currency/GoldTemplate.tscn b/DungeonShooting_Godot/prefab/currency/GoldTemplate.tscn
new file mode 100644
index 0000000..a759eeb
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/currency/GoldTemplate.tscn
@@ -0,0 +1,40 @@
+[gd_scene load_steps=6 format=3 uid="uid://c7i2q4mx5qp2h"]
+
+[ext_resource type="Script" path="res://src/game/activity/currency/Gold.cs" id="1_p60kl"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_5nps8"]
+[ext_resource type="Texture2D" uid="uid://cthwlbqve6i1l" path="res://resource/sprite/currency/Gold_shadow.png" id="3_6xm1s"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_qdjhs"]
+resource_local_to_scene = true
+shader = ExtResource("2_5nps8")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_jvlsd"]
+size = Vector2(6, 4)
+
+[node name="GoldTemplate" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 4
+collision_mask = 0
+script = ExtResource("1_p60kl")
+GoldCount = 0
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+texture = ExtResource("3_6xm1s")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_qdjhs")
+offset = Vector2(0, -4)
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_jvlsd")
diff --git a/DungeonShooting_Godot/prefab/effect/common/Effect1.tscn b/DungeonShooting_Godot/prefab/effect/common/Effect1.tscn
index 9159fe4..c116d1e 100644
--- a/DungeonShooting_Godot/prefab/effect/common/Effect1.tscn
+++ b/DungeonShooting_Godot/prefab/effect/common/Effect1.tscn
@@ -2,8 +2,8 @@
[ext_resource type="Material" uid="uid://c1chld6lkpgji" path="res://resource/material/SmokeParticleMaterial.tres" id="1_dxavj"]
[ext_resource type="Texture2D" uid="uid://bs1lan5uwxyfg" path="res://resource/curve/Curve1.tres" id="1_s60r7"]
-[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/common/Smoke.png" id="2_3kyig"]
-[ext_resource type="Texture2D" uid="uid://csud4e6kc3iku" path="res://resource/sprite/effects/common/Effect1.png" id="3_1mceu"]
+[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/common/Smoke.png" id="2_3kyig"]
+[ext_resource type="Texture2D" uid="uid://csud4e6kc3iku" path="res://resource/sprite/common/Effect1.png" id="3_1mceu"]
[ext_resource type="Script" path="res://src/game/effects/AutoDestroyParticles.cs" id="3_2tlhx"]
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ipadv"]
diff --git a/DungeonShooting_Godot/prefab/effect/common/Trail0001.tscn b/DungeonShooting_Godot/prefab/effect/common/Trail0001.tscn
new file mode 100644
index 0000000..d7d9242
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/common/Trail0001.tscn
@@ -0,0 +1,18 @@
+[gd_scene load_steps=4 format=3 uid="uid://ddwikcidm0gsi"]
+
+[ext_resource type="Script" path="res://src/game/effects/Trail.cs" id="1_i68ib"]
+
+[sub_resource type="Curve" id="Curve_fnvhf"]
+_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.5), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="Gradient" id="Gradient_cjh8g"]
+resource_local_to_scene = true
+offsets = PackedFloat32Array(0.825949, 1)
+colors = PackedColorArray(1, 1, 1, 0.705882, 1, 1, 1, 0)
+
+[node name="Trail" type="Line2D"]
+width = 3.0
+width_curve = SubResource("Curve_fnvhf")
+gradient = SubResource("Gradient_cjh8g")
+script = ExtResource("1_i68ib")
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire.tscn
deleted file mode 100644
index 159734f..0000000
--- a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire.tscn
+++ /dev/null
@@ -1,51 +0,0 @@
-[gd_scene load_steps=8 format=3 uid="uid://433h6huyctl1"]
-
-[ext_resource type="Texture2D" uid="uid://b0jsyrbk4bydt" path="res://resource/sprite/shootFire/ShotFire0001.png" id="1_sencp"]
-[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_lnwju"]
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_asq5h"]
-atlas = ExtResource("1_sencp")
-region = Rect2(0, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_n77w8"]
-atlas = ExtResource("1_sencp")
-region = Rect2(16, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_10rnx"]
-atlas = ExtResource("1_sencp")
-region = Rect2(32, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_qi1pq"]
-atlas = ExtResource("1_sencp")
-region = Rect2(48, 0, 16, 16)
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_73j16"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_asq5h")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_n77w8")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_10rnx")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_qi1pq")
-}, {
-"duration": 1.0,
-"texture": null
-}],
-"loop": false,
-"name": &"default",
-"speed": 20.0
-}]
-
-[node name="ShotFire" type="AnimatedSprite2D" node_paths=PackedStringArray("Particles2D")]
-modulate = Color(1.6, 1.6, 1.6, 1)
-sprite_frames = SubResource("SpriteFrames_73j16")
-offset = Vector2(8, 0)
-script = ExtResource("2_lnwju")
-DelayTime = 0.5
-Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0001.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0001.tscn
new file mode 100644
index 0000000..159734f
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0001.tscn
@@ -0,0 +1,51 @@
+[gd_scene load_steps=8 format=3 uid="uid://433h6huyctl1"]
+
+[ext_resource type="Texture2D" uid="uid://b0jsyrbk4bydt" path="res://resource/sprite/shootFire/ShotFire0001.png" id="1_sencp"]
+[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_lnwju"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_asq5h"]
+atlas = ExtResource("1_sencp")
+region = Rect2(0, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_n77w8"]
+atlas = ExtResource("1_sencp")
+region = Rect2(16, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_10rnx"]
+atlas = ExtResource("1_sencp")
+region = Rect2(32, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_qi1pq"]
+atlas = ExtResource("1_sencp")
+region = Rect2(48, 0, 16, 16)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_73j16"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_asq5h")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_n77w8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_10rnx")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_qi1pq")
+}, {
+"duration": 1.0,
+"texture": null
+}],
+"loop": false,
+"name": &"default",
+"speed": 20.0
+}]
+
+[node name="ShotFire" type="AnimatedSprite2D" node_paths=PackedStringArray("Particles2D")]
+modulate = Color(1.6, 1.6, 1.6, 1)
+sprite_frames = SubResource("SpriteFrames_73j16")
+offset = Vector2(8, 0)
+script = ExtResource("2_lnwju")
+DelayTime = 0.5
+Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0002.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0002.tscn
new file mode 100644
index 0000000..5a3355d
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0002.tscn
@@ -0,0 +1,52 @@
+[gd_scene load_steps=8 format=3 uid="uid://drcvbo0xam6q"]
+
+[ext_resource type="Texture2D" uid="uid://cj8gb5dxnk8ov" path="res://resource/sprite/shootFire/ShotFire0002.png" id="1_02pnb"]
+[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_uoe2l"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2nk6j"]
+atlas = ExtResource("1_02pnb")
+region = Rect2(0, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ht7ag"]
+atlas = ExtResource("1_02pnb")
+region = Rect2(9, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_jwqy0"]
+atlas = ExtResource("1_02pnb")
+region = Rect2(18, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ud7n7"]
+atlas = ExtResource("1_02pnb")
+region = Rect2(27, 0, 9, 11)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_rry1m"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2nk6j")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ht7ag")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_jwqy0")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ud7n7")
+}, {
+"duration": 1.0,
+"texture": null
+}],
+"loop": false,
+"name": &"default",
+"speed": 20.0
+}]
+
+[node name="ShotFire2" type="AnimatedSprite2D" node_paths=PackedStringArray("Particles2D")]
+modulate = Color(1.6, 1.6, 1.6, 1)
+position = Vector2(-1, 0)
+sprite_frames = SubResource("SpriteFrames_rry1m")
+offset = Vector2(5.5, 0)
+script = ExtResource("2_uoe2l")
+DelayTime = 0.5
+Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0003.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0003.tscn
new file mode 100644
index 0000000..751fef8
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0003.tscn
@@ -0,0 +1,43 @@
+[gd_scene load_steps=7 format=3 uid="uid://dbas3vph0i2ro"]
+
+[ext_resource type="Script" path="res://src/game/effects/AutoDestroyParticles.cs" id="1_pdyqx"]
+[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/common/Smoke.png" id="1_r2unj"]
+
+[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_4wcis"]
+particles_animation = true
+particles_anim_h_frames = 3
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="Curve" id="Curve_86ye5"]
+_data = [Vector2(0.0215054, 1), 0.0, 0.0, 0, 0, Vector2(0.512545, 0.882353), 0.0, 0.0, 0, 0, Vector2(1, 0.152941), 0.0, 0.0, 0, 0]
+point_count = 3
+
+[sub_resource type="CurveTexture" id="CurveTexture_j77i6"]
+curve = SubResource("Curve_86ye5")
+
+[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_8n28q"]
+lifetime_randomness = 0.3
+particle_flag_disable_z = true
+angle_max = 360.0
+initial_velocity_min = 5.0
+initial_velocity_max = 35.0
+gravity = Vector3(0, 0, 0)
+scale_min = 0.6
+scale_max = 1.5
+scale_curve = SubResource("CurveTexture_j77i6")
+anim_offset_max = 1.0
+
+[node name="ShotFire3" type="GPUParticles2D" node_paths=PackedStringArray("Particles2D")]
+modulate = Color(0.95, 0.70965, 0.6365, 0.470588)
+material = SubResource("CanvasItemMaterial_4wcis")
+emitting = false
+process_material = SubResource("ParticleProcessMaterial_8n28q")
+texture = ExtResource("1_r2unj")
+lifetime = 0.7
+one_shot = true
+explosiveness = 1.0
+randomness = 0.5
+fixed_fps = 20
+script = ExtResource("1_pdyqx")
+Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0004.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0004.tscn
new file mode 100644
index 0000000..448192f
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire0004.tscn
@@ -0,0 +1,52 @@
+[gd_scene load_steps=8 format=3 uid="uid://yg8n8xi3ucqi"]
+
+[ext_resource type="Texture2D" uid="uid://dw3amegyt2ehh" path="res://resource/sprite/shootFire/ShotFire0003.png" id="1_lxoh4"]
+[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_qlt57"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_1cqk8"]
+atlas = ExtResource("1_lxoh4")
+region = Rect2(0, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hfpwi"]
+atlas = ExtResource("1_lxoh4")
+region = Rect2(9, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_dvimy"]
+atlas = ExtResource("1_lxoh4")
+region = Rect2(18, 0, 9, 11)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_bk1sq"]
+atlas = ExtResource("1_lxoh4")
+region = Rect2(27, 0, 9, 11)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_rry1m"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_1cqk8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hfpwi")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_dvimy")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_bk1sq")
+}, {
+"duration": 1.0,
+"texture": null
+}],
+"loop": false,
+"name": &"default",
+"speed": 20.0
+}]
+
+[node name="ShotFire4" type="AnimatedSprite2D" node_paths=PackedStringArray("Particles2D")]
+modulate = Color(1.6, 1.6, 1.6, 1)
+position = Vector2(-1, 0)
+sprite_frames = SubResource("SpriteFrames_rry1m")
+offset = Vector2(5.5, 0)
+script = ExtResource("2_qlt57")
+DelayTime = 0.5
+Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire2.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire2.tscn
deleted file mode 100644
index 768d4d4..0000000
--- a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire2.tscn
+++ /dev/null
@@ -1,51 +0,0 @@
-[gd_scene load_steps=8 format=3 uid="uid://drcvbo0xam6q"]
-
-[ext_resource type="Texture2D" uid="uid://cj8gb5dxnk8ov" path="res://resource/sprite/shootFire/ShotFire0002.png" id="1_ljjfn"]
-[ext_resource type="Script" path="res://src/game/effects/AutoDestroySprite.cs" id="2_4ecjw"]
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_2nk6j"]
-atlas = ExtResource("1_ljjfn")
-region = Rect2(0, 0, 9, 11)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ht7ag"]
-atlas = ExtResource("1_ljjfn")
-region = Rect2(9, 0, 9, 11)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_jwqy0"]
-atlas = ExtResource("1_ljjfn")
-region = Rect2(18, 0, 9, 11)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ud7n7"]
-atlas = ExtResource("1_ljjfn")
-region = Rect2(27, 0, 9, 11)
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_rry1m"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_2nk6j")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ht7ag")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_jwqy0")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ud7n7")
-}, {
-"duration": 1.0,
-"texture": null
-}],
-"loop": false,
-"name": &"default",
-"speed": 20.0
-}]
-
-[node name="ShotFire2" type="AnimatedSprite2D" node_paths=PackedStringArray("Particles2D")]
-modulate = Color(1.6, 1.6, 1.6, 1)
-sprite_frames = SubResource("SpriteFrames_rry1m")
-offset = Vector2(5.5, 0)
-script = ExtResource("2_4ecjw")
-DelayTime = 0.5
-Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire3.tscn b/DungeonShooting_Godot/prefab/effect/weapon/ShotFire3.tscn
deleted file mode 100644
index 751fef8..0000000
--- a/DungeonShooting_Godot/prefab/effect/weapon/ShotFire3.tscn
+++ /dev/null
@@ -1,43 +0,0 @@
-[gd_scene load_steps=7 format=3 uid="uid://dbas3vph0i2ro"]
-
-[ext_resource type="Script" path="res://src/game/effects/AutoDestroyParticles.cs" id="1_pdyqx"]
-[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/common/Smoke.png" id="1_r2unj"]
-
-[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_4wcis"]
-particles_animation = true
-particles_anim_h_frames = 3
-particles_anim_v_frames = 1
-particles_anim_loop = false
-
-[sub_resource type="Curve" id="Curve_86ye5"]
-_data = [Vector2(0.0215054, 1), 0.0, 0.0, 0, 0, Vector2(0.512545, 0.882353), 0.0, 0.0, 0, 0, Vector2(1, 0.152941), 0.0, 0.0, 0, 0]
-point_count = 3
-
-[sub_resource type="CurveTexture" id="CurveTexture_j77i6"]
-curve = SubResource("Curve_86ye5")
-
-[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_8n28q"]
-lifetime_randomness = 0.3
-particle_flag_disable_z = true
-angle_max = 360.0
-initial_velocity_min = 5.0
-initial_velocity_max = 35.0
-gravity = Vector3(0, 0, 0)
-scale_min = 0.6
-scale_max = 1.5
-scale_curve = SubResource("CurveTexture_j77i6")
-anim_offset_max = 1.0
-
-[node name="ShotFire3" type="GPUParticles2D" node_paths=PackedStringArray("Particles2D")]
-modulate = Color(0.95, 0.70965, 0.6365, 0.470588)
-material = SubResource("CanvasItemMaterial_4wcis")
-emitting = false
-process_material = SubResource("ParticleProcessMaterial_8n28q")
-texture = ExtResource("1_r2unj")
-lifetime = 0.7
-one_shot = true
-explosiveness = 1.0
-randomness = 0.5
-fixed_fps = 20
-script = ExtResource("1_pdyqx")
-Particles2D = []
diff --git a/DungeonShooting_Godot/prefab/map/RoomDoor_E.tscn b/DungeonShooting_Godot/prefab/map/RoomDoor_E.tscn
index 2631c7c..e90e3fd 100644
--- a/DungeonShooting_Godot/prefab/map/RoomDoor_E.tscn
+++ b/DungeonShooting_Godot/prefab/map/RoomDoor_E.tscn
@@ -15,6 +15,7 @@
shader_parameter/outline_color = Color(0, 0, 0, 1)
shader_parameter/outline_rainbow = false
shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_t4ayq"]
resource_local_to_scene = true
@@ -22,14 +23,15 @@
shader_parameter/blend = Color(1, 1, 1, 1)
shader_parameter/schedule = 0.0
shader_parameter/modulate = Color(1, 1, 1, 1)
-shader_parameter/show_outline = false
+shader_parameter/show_outline = true
shader_parameter/outline_color = Color(0, 0, 0, 1)
shader_parameter/outline_rainbow = false
shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
[sub_resource type="RectangleShape2D" id="RectangleShape2D_opsb6"]
resource_local_to_scene = true
-size = Vector2(14, 40)
+size = Vector2(16, 40)
[node name="RoomDoor_N" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
script = ExtResource("1_4c6sw")
@@ -40,25 +42,22 @@
[node name="ShadowSprite" type="Sprite2D" parent="."]
z_index = -1
material = SubResource("ShaderMaterial_yvwpk")
+position = Vector2(-8, 0)
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
material = SubResource("ShaderMaterial_t4ayq")
-position = Vector2(9, -10)
+position = Vector2(13, 10)
sprite_frames = ExtResource("3_pjvd8")
-animation = &"openDoor"
+animation = &"closeDoor"
autoplay = "default"
-frame = 4
-frame_progress = 1.0
[node name="AnimatedSpriteDown" type="AnimatedSprite2D" parent="."]
material = SubResource("ShaderMaterial_t4ayq")
-position = Vector2(9, -10)
+position = Vector2(-9, 2)
sprite_frames = ExtResource("4_ln8k4")
-animation = &"openDoor"
autoplay = "default"
-frame = 4
-frame_progress = 1.0
+offset = Vector2(0.5, 2.08165e-12)
[node name="Collision" type="CollisionShape2D" parent="."]
-position = Vector2(0, 4)
+position = Vector2(-6, 13)
shape = SubResource("RectangleShape2D_opsb6")
diff --git a/DungeonShooting_Godot/prefab/map/RoomDoor_N.tscn b/DungeonShooting_Godot/prefab/map/RoomDoor_N.tscn
index 0c6565e..3f45c24 100644
--- a/DungeonShooting_Godot/prefab/map/RoomDoor_N.tscn
+++ b/DungeonShooting_Godot/prefab/map/RoomDoor_N.tscn
@@ -10,10 +10,11 @@
shader_parameter/blend = Color(0, 0, 0, 0.470588)
shader_parameter/schedule = 1.0
shader_parameter/modulate = Color(1, 1, 1, 1)
-shader_parameter/show_outline = false
+shader_parameter/show_outline = true
shader_parameter/outline_color = Color(0, 0, 0, 1)
shader_parameter/outline_rainbow = false
shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_t4ayq"]
resource_local_to_scene = true
@@ -21,14 +22,15 @@
shader_parameter/blend = Color(1, 1, 1, 1)
shader_parameter/schedule = 0.0
shader_parameter/modulate = Color(1, 1, 1, 1)
-shader_parameter/show_outline = false
+shader_parameter/show_outline = true
shader_parameter/outline_color = Color(0, 0, 0, 1)
shader_parameter/outline_rainbow = false
shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
[sub_resource type="RectangleShape2D" id="RectangleShape2D_opsb6"]
resource_local_to_scene = true
-size = Vector2(32, 23)
+size = Vector2(32, 16)
[node name="RoomDoor_N" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
script = ExtResource("1_220be")
@@ -42,13 +44,9 @@
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
material = SubResource("ShaderMaterial_t4ayq")
-position = Vector2(0, -8)
sprite_frames = ExtResource("3_apluc")
-animation = &"closeDoor"
autoplay = "default"
-frame = 4
-frame_progress = 1.0
[node name="Collision" type="CollisionShape2D" parent="."]
-position = Vector2(0, -3.5)
+position = Vector2(0, 4)
shape = SubResource("RectangleShape2D_opsb6")
diff --git a/DungeonShooting_Godot/prefab/map/RoomDoor_S.tscn b/DungeonShooting_Godot/prefab/map/RoomDoor_S.tscn
index a2996d7..0c2f4ea 100644
--- a/DungeonShooting_Godot/prefab/map/RoomDoor_S.tscn
+++ b/DungeonShooting_Godot/prefab/map/RoomDoor_S.tscn
@@ -2,7 +2,7 @@
[ext_resource type="Script" path="res://src/game/room/RoomDoor.cs" id="1_f3qbq"]
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_6vvcd"]
-[ext_resource type="SpriteFrames" uid="uid://ciqijjxup5356" path="res://resource/spriteFrames/other/RoomDoor_S.tres" id="3_hhmd5"]
+[ext_resource type="SpriteFrames" uid="uid://xs72aopsgpg6" path="res://resource/spriteFrames/other/RoomDoor_N.tres" id="3_vbbxp"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_yvwpk"]
resource_local_to_scene = true
@@ -14,6 +14,7 @@
shader_parameter/outline_color = Color(0, 0, 0, 1)
shader_parameter/outline_rainbow = false
shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_t4ayq"]
resource_local_to_scene = true
@@ -21,14 +22,15 @@
shader_parameter/blend = Color(1, 1, 1, 1)
shader_parameter/schedule = 0.0
shader_parameter/modulate = Color(1, 1, 1, 1)
-shader_parameter/show_outline = false
+shader_parameter/show_outline = true
shader_parameter/outline_color = Color(0, 0, 0, 1)
shader_parameter/outline_rainbow = false
shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
[sub_resource type="RectangleShape2D" id="RectangleShape2D_opsb6"]
resource_local_to_scene = true
-size = Vector2(32, 23)
+size = Vector2(32, 16)
[node name="RoomDoor_N" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
script = ExtResource("1_f3qbq")
@@ -42,13 +44,9 @@
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
material = SubResource("ShaderMaterial_t4ayq")
-position = Vector2(0, -8)
-sprite_frames = ExtResource("3_hhmd5")
-animation = &"openDoor"
+sprite_frames = ExtResource("3_vbbxp")
autoplay = "default"
-frame = 4
-frame_progress = 1.0
[node name="Collision" type="CollisionShape2D" parent="."]
-position = Vector2(0, -3.5)
+position = Vector2(0, 9)
shape = SubResource("RectangleShape2D_opsb6")
diff --git a/DungeonShooting_Godot/prefab/map/RoomDoor_W.tscn b/DungeonShooting_Godot/prefab/map/RoomDoor_W.tscn
index 727c632..8b50dba 100644
--- a/DungeonShooting_Godot/prefab/map/RoomDoor_W.tscn
+++ b/DungeonShooting_Godot/prefab/map/RoomDoor_W.tscn
@@ -2,8 +2,8 @@
[ext_resource type="Script" path="res://src/game/room/RoomDoor.cs" id="1_agux2"]
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_wx2w3"]
-[ext_resource type="SpriteFrames" uid="uid://cpdt5ywrsruu3" path="res://resource/spriteFrames/other/RoomDoor_W_Up.tres" id="3_veggu"]
-[ext_resource type="SpriteFrames" uid="uid://qq3h0mh4r12i" path="res://resource/spriteFrames/other/RoomDoor_W_Down.tres" id="4_dnjb6"]
+[ext_resource type="SpriteFrames" uid="uid://3ps6h2f54qa5" path="res://resource/spriteFrames/other/RoomDoor_E_Up.tres" id="3_jquy0"]
+[ext_resource type="SpriteFrames" uid="uid://b34tddsmqnj8s" path="res://resource/spriteFrames/other/RoomDoor_E_Down.tres" id="4_6gcqk"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_yvwpk"]
resource_local_to_scene = true
@@ -15,6 +15,7 @@
shader_parameter/outline_color = Color(0, 0, 0, 1)
shader_parameter/outline_rainbow = false
shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_t4ayq"]
resource_local_to_scene = true
@@ -22,14 +23,15 @@
shader_parameter/blend = Color(1, 1, 1, 1)
shader_parameter/schedule = 0.0
shader_parameter/modulate = Color(1, 1, 1, 1)
-shader_parameter/show_outline = false
+shader_parameter/show_outline = true
shader_parameter/outline_color = Color(0, 0, 0, 1)
shader_parameter/outline_rainbow = false
shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
[sub_resource type="RectangleShape2D" id="RectangleShape2D_2ko2r"]
resource_local_to_scene = true
-size = Vector2(14, 40)
+size = Vector2(16, 40)
[node name="RoomDoor_N" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
script = ExtResource("1_agux2")
@@ -40,25 +42,24 @@
[node name="ShadowSprite" type="Sprite2D" parent="."]
z_index = -1
material = SubResource("ShaderMaterial_yvwpk")
+position = Vector2(8, 0)
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
material = SubResource("ShaderMaterial_t4ayq")
-position = Vector2(-9, -10)
-sprite_frames = ExtResource("3_veggu")
-animation = &"openDoor"
+position = Vector2(-13, 10)
+scale = Vector2(-1, 1)
+sprite_frames = ExtResource("3_jquy0")
+animation = &"closeDoor"
autoplay = "default"
-frame = 4
-frame_progress = 1.0
[node name="AnimatedSpriteDown" type="AnimatedSprite2D" parent="."]
material = SubResource("ShaderMaterial_t4ayq")
-position = Vector2(-9, -10)
-sprite_frames = ExtResource("4_dnjb6")
-animation = &"openDoor"
+position = Vector2(8, 2)
+scale = Vector2(-1, 1)
+sprite_frames = ExtResource("4_6gcqk")
autoplay = "default"
-frame = 4
-frame_progress = 1.0
+offset = Vector2(-0.5, 2.08165e-12)
[node name="Collision" type="CollisionShape2D" parent="."]
-position = Vector2(0, 4)
+position = Vector2(6, 13)
shape = SubResource("RectangleShape2D_2ko2r")
diff --git a/DungeonShooting_Godot/prefab/role/Role0001.tscn b/DungeonShooting_Godot/prefab/role/Role0001.tscn
index d877f44..cb1c9cb 100644
--- a/DungeonShooting_Godot/prefab/role/Role0001.tscn
+++ b/DungeonShooting_Godot/prefab/role/Role0001.tscn
@@ -49,11 +49,14 @@
sprite_frames = ExtResource("4_galcc")
animation = &"roll"
+[node name="Collision" parent="." index="3"]
+position = Vector2(0, 0)
+
[node name="HurtCollision" parent="HurtArea" index="0"]
shape = SubResource("RectangleShape2D_ve262")
-[node name="InteractiveArea" parent="." index="5"]
-visible = true
+[node name="InteractiveCollision" parent="InteractiveArea" index="0"]
+position = Vector2(0, 0)
[node name="AnimationPlayer" parent="." index="8"]
libraries = {
diff --git a/DungeonShooting_Godot/prefab/role/template/EnemyTemplate.tscn b/DungeonShooting_Godot/prefab/role/template/EnemyTemplate.tscn
index 3625be0..ae33b4a 100644
--- a/DungeonShooting_Godot/prefab/role/template/EnemyTemplate.tscn
+++ b/DungeonShooting_Godot/prefab/role/template/EnemyTemplate.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=4 format=3 uid="uid://dbrig6dq441wo"]
+[gd_scene load_steps=5 format=3 uid="uid://dbrig6dq441wo"]
[ext_resource type="PackedScene" uid="uid://cyrcv2jdgr8cf" path="res://prefab/role/template/RoleTemplate.tscn" id="1_5po38"]
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_x8agd"]
@@ -15,13 +15,20 @@
shader_parameter/outline_use_blend = true
shader_parameter/grey = 0.0
+[sub_resource type="CircleShape2D" id="CircleShape2D_wu0xv"]
+radius = 8.06226
+
[node name="EnemyTemplate" instance=ExtResource("1_5po38")]
collision_layer = 16
collision_mask = 25
+floor_stop_on_slope = false
[node name="AnimatedSprite" parent="." index="2"]
material = SubResource("ShaderMaterial_k8mt5")
+[node name="InteractiveCollision" parent="InteractiveArea" index="0"]
+shape = SubResource("CircleShape2D_wu0xv")
+
[node name="ViewRay" type="RayCast2D" parent="." index="6"]
position = Vector2(0, -8)
enabled = false
@@ -29,7 +36,6 @@
[node name="FirePoint" type="Marker2D" parent="." index="8"]
[node name="NavigationPoint" type="Marker2D" parent="." index="9"]
-position = Vector2(0, -5)
[node name="NavigationAgent2D" type="NavigationAgent2D" parent="NavigationPoint" index="0"]
path_desired_distance = 3.0
diff --git a/DungeonShooting_Godot/prefab/role/template/RoleTemplate.tscn b/DungeonShooting_Godot/prefab/role/template/RoleTemplate.tscn
index faf3e36..be6716b 100644
--- a/DungeonShooting_Godot/prefab/role/template/RoleTemplate.tscn
+++ b/DungeonShooting_Godot/prefab/role/template/RoleTemplate.tscn
@@ -1,7 +1,8 @@
-[gd_scene load_steps=8 format=3 uid="uid://cyrcv2jdgr8cf"]
+[gd_scene load_steps=9 format=3 uid="uid://cyrcv2jdgr8cf"]
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="1_xk5yk"]
[ext_resource type="Script" path="res://src/game/activity/role/MountRotation.cs" id="2_5ddpw"]
+[ext_resource type="Script" path="res://src/framework/activity/hurt/HurtArea.cs" id="2_8jnvr"]
[ext_resource type="SpriteFrames" uid="uid://c8h5svp76h3kw" path="res://resource/spriteFrames/role/Role_tip.tres" id="3_bo78w"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_yif6x"]
@@ -22,11 +23,13 @@
[sub_resource type="RectangleShape2D" id="RectangleShape2D_1eja2"]
size = Vector2(12, 18)
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_n68nu"]
-size = Vector2(10, 16.5)
+[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_843d5"]
+radius = 8.0
+height = 16.0
[node name="RoleTemplate" type="CharacterBody2D"]
collision_layer = 0
+collision_mask = 513
[node name="ShadowSprite" type="Sprite2D" parent="."]
z_index = -1
@@ -39,33 +42,34 @@
offset = Vector2(0, -12)
[node name="Collision" type="CollisionShape2D" parent="."]
-position = Vector2(0, -4)
+position = Vector2(0, -2)
shape = SubResource("CircleShape2D_5pj80")
[node name="HurtArea" type="Area2D" parent="."]
collision_layer = 0
collision_mask = 0
monitoring = false
+script = ExtResource("2_8jnvr")
[node name="HurtCollision" type="CollisionShape2D" parent="HurtArea"]
position = Vector2(0, -9)
shape = SubResource("RectangleShape2D_1eja2")
[node name="InteractiveArea" type="Area2D" parent="."]
-visible = false
collision_layer = 0
collision_mask = 4
monitorable = false
[node name="InteractiveCollision" type="CollisionShape2D" parent="InteractiveArea"]
-position = Vector2(0, -5)
-shape = SubResource("RectangleShape2D_n68nu")
+position = Vector2(0, -2)
+shape = SubResource("CapsuleShape2D_843d5")
[node name="MountPoint" type="Marker2D" parent="."]
position = Vector2(2, -8)
script = ExtResource("2_5ddpw")
[node name="MeleeAttackArea" type="Area2D" parent="MountPoint"]
+visible = false
collision_layer = 0
collision_mask = 0
monitorable = false
diff --git a/DungeonShooting_Godot/prefab/ui/Debugger.tscn b/DungeonShooting_Godot/prefab/ui/Debugger.tscn
index fcd8420..efcc719 100644
--- a/DungeonShooting_Godot/prefab/ui/Debugger.tscn
+++ b/DungeonShooting_Godot/prefab/ui/Debugger.tscn
@@ -60,10 +60,10 @@
[node name="HoverButton" type="Button" parent="."]
layout_mode = 0
-offset_left = 18.0
-offset_top = 169.0
-offset_right = 46.0
-offset_bottom = 193.0
+offset_left = 1295.0
+offset_top = 10.0
+offset_right = 1323.0
+offset_bottom = 34.0
scale = Vector2(2, 2)
icon = ExtResource("2_acjpv")
flat = true
@@ -74,8 +74,8 @@
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
-offset_left = -4.5
-offset_right = 4.5
+offset_left = 400.0
+offset_right = 504.0
offset_bottom = 40.0
grow_horizontal = 2
text = "FPS:60"
diff --git a/DungeonShooting_Godot/prefab/ui/EditorColorPicker.tscn b/DungeonShooting_Godot/prefab/ui/EditorColorPicker.tscn
new file mode 100644
index 0000000..6d0e4a3
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/EditorColorPicker.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=2 format=3 uid="uid://ceinixdnf00ta"]
+
+[ext_resource type="Script" path="res://src/game/ui/editorColorPicker/EditorColorPickerPanel.cs" id="1_yaxtp"]
+
+[node name="EditorColorPicker" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_yaxtp")
+
+[node name="ColorPicker" type="ColorPicker" parent="."]
+layout_mode = 1
+anchors_preset = 10
+anchor_right = 1.0
+offset_bottom = 648.0
+grow_horizontal = 2
diff --git a/DungeonShooting_Godot/prefab/ui/EditorDungeonGroup.tscn b/DungeonShooting_Godot/prefab/ui/EditorDungeonGroup.tscn
new file mode 100644
index 0000000..c29e13b
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/EditorDungeonGroup.tscn
@@ -0,0 +1,81 @@
+[gd_scene load_steps=2 format=3 uid="uid://1ptjcb64rdbf"]
+
+[ext_resource type="Script" path="res://src/game/ui/editorDungeonGroup/EditorDungeonGroupPanel.cs" id="1_apg3p"]
+
+[node name="EditorDungeonGroup" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_apg3p")
+
+[node name="MarginContainer" type="MarginContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 20
+theme_override_constants/margin_top = 50
+theme_override_constants/margin_right = 20
+theme_override_constants/margin_bottom = 20
+
+[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
+layout_mode = 2
+theme_override_constants/separation = 20
+
+[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="NameLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 20.0
+text = "名称:"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="NameInput" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 80.0
+placeholder_text = "请输入名称"
+
+[node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="NameLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer2"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 20.0
+text = "图块集:"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="TileSetOption" type="OptionButton" parent="MarginContainer/VBoxContainer/HBoxContainer2"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 80.0
+
+[node name="HBoxContainer5" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="RemarkNameLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer5"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 0
+size_flags_stretch_ratio = 20.0
+text = "备注:"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="RemarkInput" type="TextEdit" parent="MarginContainer/VBoxContainer/HBoxContainer5"]
+custom_minimum_size = Vector2(0, 150)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 80.0
+placeholder_text = "选填"
+wrap_mode = 1
diff --git a/DungeonShooting_Godot/prefab/ui/EditorForm.tscn b/DungeonShooting_Godot/prefab/ui/EditorForm.tscn
new file mode 100644
index 0000000..7dd42cf
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/EditorForm.tscn
@@ -0,0 +1,43 @@
+[gd_scene load_steps=2 format=3 uid="uid://djfbqfqkjoquj"]
+
+[ext_resource type="Script" path="res://src/game/ui/editorForm/EditorFormPanel.cs" id="1_oq0ff"]
+
+[node name="EditorForm" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_oq0ff")
+
+[node name="MarginContainer" type="MarginContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 20
+theme_override_constants/margin_top = 50
+theme_override_constants/margin_right = 20
+theme_override_constants/margin_bottom = 20
+
+[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer"]
+layout_mode = 2
+
+[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/ScrollContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/separation = 20
+
+[node name="Item" type="HBoxContainer" parent="MarginContainer/ScrollContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="NameLabel" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer/Item"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 20.0
+text = "名称:"
+horizontal_alignment = 2
+vertical_alignment = 1
diff --git a/DungeonShooting_Godot/prefab/ui/EditorImportCombination.tscn b/DungeonShooting_Godot/prefab/ui/EditorImportCombination.tscn
new file mode 100644
index 0000000..d03d013
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/EditorImportCombination.tscn
@@ -0,0 +1,78 @@
+[gd_scene load_steps=2 format=3 uid="uid://dl0u8eggomust"]
+
+[ext_resource type="Script" path="res://src/game/ui/editorImportCombination/EditorImportCombinationPanel.cs" id="1_4wd6k"]
+
+[node name="EditorImportCombination" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_4wd6k")
+
+[node name="MarginContainer" type="MarginContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 20
+theme_override_constants/margin_top = 50
+theme_override_constants/margin_right = 20
+theme_override_constants/margin_bottom = 20
+
+[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
+layout_mode = 2
+theme_override_constants/separation = 20
+
+[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="NameLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 20.0
+text = "组名称:"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="NameInput" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 80.0
+placeholder_text = "请输入组合名称"
+
+[node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="PreviewLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer2"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 0
+size_flags_stretch_ratio = 20.0
+text = "预览:"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="PreviewBg" type="ColorRect" parent="MarginContainer/VBoxContainer/HBoxContainer2"]
+clip_children = 2
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 80.0
+color = Color(0.270588, 0.270588, 0.270588, 1)
+
+[node name="PreviewTexture" type="TextureRect" parent="MarginContainer/VBoxContainer/HBoxContainer2/PreviewBg"]
+custom_minimum_size = Vector2(0, 300)
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 80.0
+expand_mode = 2
+stretch_mode = 5
diff --git a/DungeonShooting_Godot/prefab/ui/EditorInfo.tscn b/DungeonShooting_Godot/prefab/ui/EditorInfo.tscn
new file mode 100644
index 0000000..4da2af9
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/EditorInfo.tscn
@@ -0,0 +1,65 @@
+[gd_scene load_steps=2 format=3 uid="uid://45krchsjrluh"]
+
+[ext_resource type="Script" path="res://src/game/ui/editorInfo/EditorInfoPanel.cs" id="1_3800s"]
+
+[node name="EditorInfo" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_3800s")
+
+[node name="MarginContainer" type="MarginContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 20
+theme_override_constants/margin_top = 50
+theme_override_constants/margin_right = 20
+theme_override_constants/margin_bottom = 20
+
+[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
+layout_mode = 2
+theme_override_constants/separation = 20
+
+[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="NameLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 20.0
+text = "名称:"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="NameInput" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 80.0
+placeholder_text = "请输入名称"
+
+[node name="HBoxContainer5" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="RemarkNameLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer5"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 0
+size_flags_stretch_ratio = 20.0
+text = "备注:"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="RemarkInput" type="TextEdit" parent="MarginContainer/VBoxContainer/HBoxContainer5"]
+custom_minimum_size = Vector2(0, 150)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 80.0
+placeholder_text = "选填"
+wrap_mode = 1
diff --git a/DungeonShooting_Godot/prefab/ui/EditorInput.tscn b/DungeonShooting_Godot/prefab/ui/EditorInput.tscn
new file mode 100644
index 0000000..27cf072
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/EditorInput.tscn
@@ -0,0 +1,32 @@
+[gd_scene load_steps=2 format=3 uid="uid://cewbs487ebu2w"]
+
+[ext_resource type="Script" path="res://src/game/ui/editorInput/EditorInputPanel.cs" id="1_n62mt"]
+
+[node name="EditorInput" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_n62mt")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Label" type="Label" parent="VBoxContainer"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+size_flags_vertical = 10
+text = "描述:"
+vertical_alignment = 1
+
+[node name="LineEdit" type="LineEdit" parent="VBoxContainer"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+size_flags_vertical = 2
diff --git a/DungeonShooting_Godot/prefab/ui/EditorManager.tscn b/DungeonShooting_Godot/prefab/ui/EditorManager.tscn
new file mode 100644
index 0000000..a820185
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/EditorManager.tscn
@@ -0,0 +1,80 @@
+[gd_scene load_steps=5 format=3 uid="uid://bd0jthh4nqnoj"]
+
+[ext_resource type="Script" path="res://src/game/ui/editorManager/EditorManagerPanel.cs" id="1_6qnog"]
+[ext_resource type="Texture2D" uid="uid://cajcnlimvoxk" path="res://resource/sprite/ui/commonIcon/Back.png" id="2_ykjr7"]
+[ext_resource type="PackedScene" uid="uid://dh7y03tq6v0a2" path="res://prefab/ui/MapEditorProject.tscn" id="3_hlfkf"]
+[ext_resource type="PackedScene" uid="uid://bxrpxwsvveq8i" path="res://prefab/ui/TileSetEditorProject.tscn" id="4_mejcx"]
+
+[node name="EditorManager" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_6qnog")
+
+[node name="Bg" type="Panel" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="VBoxContainer" type="VBoxContainer" parent="Bg"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/separation = 0
+
+[node name="Head" type="Panel" parent="Bg/VBoxContainer"]
+custom_minimum_size = Vector2(0, 70)
+layout_mode = 2
+
+[node name="Back" type="Button" parent="Bg/VBoxContainer/Head"]
+layout_mode = 2
+offset_left = 2.0
+offset_top = 2.0
+offset_right = 62.0
+offset_bottom = 68.0
+size_flags_horizontal = 0
+icon = ExtResource("2_ykjr7")
+icon_alignment = 1
+
+[node name="Title" type="Label" parent="Bg/VBoxContainer/Head"]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -4.5
+offset_top = -20.0
+offset_right = 4.5
+offset_bottom = 20.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "地图管理器"
+
+[node name="TabContainer" type="TabContainer" parent="Bg/VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="Map" type="MarginContainer" parent="Bg/VBoxContainer/TabContainer"]
+layout_mode = 2
+theme_override_constants/margin_top = 10
+
+[node name="MapEditorProject" parent="Bg/VBoxContainer/TabContainer/Map" instance=ExtResource("3_hlfkf")]
+layout_mode = 2
+
+[node name="TileSet" type="MarginContainer" parent="Bg/VBoxContainer/TabContainer"]
+visible = false
+layout_mode = 2
+theme_override_constants/margin_top = 10
+
+[node name="TileSetEditorProject" parent="Bg/VBoxContainer/TabContainer/TileSet" instance=ExtResource("4_mejcx")]
+layout_mode = 2
diff --git a/DungeonShooting_Godot/prefab/ui/EditorTileImage.tscn b/DungeonShooting_Godot/prefab/ui/EditorTileImage.tscn
new file mode 100644
index 0000000..5a15d4c
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/EditorTileImage.tscn
@@ -0,0 +1,181 @@
+[gd_scene load_steps=5 format=3 uid="uid://c0j60lj0euk3y"]
+
+[ext_resource type="Script" path="res://src/game/ui/editorTileImage/EditorTileImagePanel.cs" id="1_y1hns"]
+[ext_resource type="Texture2D" uid="uid://d2wslibovwv7w" path="res://resource/sprite/ui/commonIcon/CenterTool.png" id="2_ntsra"]
+[ext_resource type="Script" path="res://src/game/ui/editorTileImage/ImageBg.cs" id="2_qkj2u"]
+[ext_resource type="Script" path="res://src/game/ui/editorTileImage/RectBrush.cs" id="3_fic1t"]
+
+[node name="EditorTileImage" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_y1hns")
+
+[node name="HBoxContainer" type="HBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/separation = 0
+
+[node name="Left" type="Panel" parent="HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="Bg" type="ColorRect" parent="HBoxContainer/Left"]
+clip_children = 2
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0.145098, 0.145098, 0.145098, 1)
+script = ExtResource("2_qkj2u")
+
+[node name="TextureRoot" type="Control" parent="HBoxContainer/Left/Bg"]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -0.5
+offset_top = -0.5
+offset_right = 0.5
+offset_bottom = 0.5
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+
+[node name="TileSprite" type="Sprite2D" parent="HBoxContainer/Left/Bg/TextureRoot"]
+centered = false
+
+[node name="Brush" type="Control" parent="HBoxContainer/Left/Bg/TextureRoot"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+script = ExtResource("3_fic1t")
+
+[node name="FocusBtn" type="TextureButton" parent="HBoxContainer/Left/Bg"]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -79.0
+offset_top = 14.0
+offset_right = -15.0
+offset_bottom = 78.0
+grow_horizontal = 0
+tooltip_text = "聚焦"
+texture_normal = ExtResource("2_ntsra")
+ignore_texture_size = true
+stretch_mode = 5
+
+[node name="Right" type="Panel" parent="HBoxContainer"]
+custom_minimum_size = Vector2(370, 0)
+layout_mode = 2
+
+[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/Right"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 4.0
+offset_top = 9.0
+offset_right = -4.0
+offset_bottom = -5.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/separation = 16
+
+[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer/Right/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer"]
+custom_minimum_size = Vector2(160, 0)
+layout_mode = 2
+text = "起始X"
+
+[node name="StartX" type="SpinBox" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+max_value = 9999.0
+
+[node name="HBoxContainer2" type="HBoxContainer" parent="HBoxContainer/Right/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer2"]
+custom_minimum_size = Vector2(160, 0)
+layout_mode = 2
+text = "起始Y"
+
+[node name="StartY" type="SpinBox" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer2"]
+layout_mode = 2
+size_flags_horizontal = 3
+max_value = 9999.0
+
+[node name="HBoxContainer3" type="HBoxContainer" parent="HBoxContainer/Right/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer3"]
+custom_minimum_size = Vector2(160, 0)
+layout_mode = 2
+text = "间距X"
+
+[node name="OffsetX" type="SpinBox" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer3"]
+layout_mode = 2
+size_flags_horizontal = 3
+max_value = 9999.0
+
+[node name="HBoxContainer4" type="HBoxContainer" parent="HBoxContainer/Right/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer4"]
+custom_minimum_size = Vector2(160, 0)
+layout_mode = 2
+text = "间距Y"
+
+[node name="OffsetY" type="SpinBox" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer4"]
+layout_mode = 2
+size_flags_horizontal = 3
+max_value = 9999.0
+
+[node name="HBoxContainer5" type="HBoxContainer" parent="HBoxContainer/Right/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer5"]
+custom_minimum_size = Vector2(160, 0)
+layout_mode = 2
+text = "横轴数量"
+
+[node name="HCount" type="SpinBox" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer5"]
+layout_mode = 2
+size_flags_horizontal = 3
+max_value = 9999.0
+
+[node name="HBoxContainer6" type="HBoxContainer" parent="HBoxContainer/Right/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer6"]
+custom_minimum_size = Vector2(160, 0)
+layout_mode = 2
+text = "纵轴数量"
+
+[node name="VCount" type="SpinBox" parent="HBoxContainer/Right/VBoxContainer/HBoxContainer6"]
+layout_mode = 2
+size_flags_horizontal = 3
+max_value = 9999.0
diff --git a/DungeonShooting_Godot/prefab/ui/EditorWindow.tscn b/DungeonShooting_Godot/prefab/ui/EditorWindow.tscn
index 1a8f5bb..17a2e37 100644
--- a/DungeonShooting_Godot/prefab/ui/EditorWindow.tscn
+++ b/DungeonShooting_Godot/prefab/ui/EditorWindow.tscn
@@ -28,7 +28,7 @@
size = Vector2i(500, 350)
visible = false
transient = true
-min_size = Vector2i(500, 350)
+min_size = Vector2i(100, 100)
theme_override_constants/title_height = 33
[node name="Panel" type="Panel" parent="Window"]
diff --git a/DungeonShooting_Godot/prefab/ui/Main.tscn b/DungeonShooting_Godot/prefab/ui/Main.tscn
index adb11ae..b3558c1 100644
--- a/DungeonShooting_Godot/prefab/ui/Main.tscn
+++ b/DungeonShooting_Godot/prefab/ui/Main.tscn
@@ -32,8 +32,8 @@
[node name="Title" type="Label" parent="VBoxContainer"]
layout_mode = 2
size_flags_vertical = 6
-theme_override_font_sizes/font_size = 160
-text = "Dungeon Shooting"
+theme_override_font_sizes/font_size = 120
+text = "枪火地牢"
horizontal_alignment = 1
vertical_alignment = 1
@@ -54,7 +54,7 @@
layout_mode = 2
theme = ExtResource("2_bbd6i")
theme_override_font_sizes/font_size = 32
-text = "开发者工具"
+text = "地图编辑器"
[node name="Setting" type="Button" parent="VBoxContainer/ButtonList"]
custom_minimum_size = Vector2(0, 50)
@@ -92,7 +92,7 @@
anchor_bottom = 1.0
offset_left = 23.0
offset_top = -100.0
-offset_right = 1943.0
+offset_right = 215.0
offset_bottom = -68.0
grow_vertical = 0
text = "b站:小李xlxl"
@@ -105,7 +105,7 @@
anchor_bottom = 1.0
offset_left = 23.0
offset_top = -55.0
-offset_right = 1943.0
+offset_right = 183.0
offset_bottom = -23.0
grow_vertical = 0
text = "GitHub源码"
diff --git a/DungeonShooting_Godot/prefab/ui/MapEditor.tscn b/DungeonShooting_Godot/prefab/ui/MapEditor.tscn
index 399fdf1..7af9347 100644
--- a/DungeonShooting_Godot/prefab/ui/MapEditor.tscn
+++ b/DungeonShooting_Godot/prefab/ui/MapEditor.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=15 format=3 uid="uid://csbxfkdupsckv"]
+[gd_scene load_steps=16 format=3 uid="uid://csbxfkdupsckv"]
[ext_resource type="Script" path="res://src/game/ui/mapEditor/MapEditorPanel.cs" id="1_5s7a0"]
[ext_resource type="Texture2D" uid="uid://cajcnlimvoxk" path="res://resource/sprite/ui/commonIcon/Back.png" id="2_gkcw7"]
@@ -10,7 +10,8 @@
[ext_resource type="PackedScene" uid="uid://b4u66mxndxbrg" path="res://prefab/ui/MapEditorTools.tscn" id="6_7pvgu"]
[ext_resource type="PackedScene" uid="uid://bb2ekkpxifd7g" path="res://prefab/ui/MapEditorMapLayer.tscn" id="7_ychtn"]
[ext_resource type="PackedScene" uid="uid://peo0n8bl15y5" path="res://prefab/ui/MapEditorMapMark.tscn" id="8_8tgeu"]
-[ext_resource type="PackedScene" uid="uid://dhtfat7tr8ujw" path="res://prefab/ui/MapEditorTileSet.tscn" id="11_7yaoy"]
+[ext_resource type="NavigationPolygon" uid="uid://brpcle7mygiml" path="res://resource/navigation/NavigationPolygon.tres" id="8_t7nq5"]
+[ext_resource type="PackedScene" uid="uid://tjbfj67t5akm" path="res://prefab/ui/MapEditorMapTile.tscn" id="10_4fu5v"]
[sub_resource type="Animation" id="Animation_o3btm"]
length = 0.001
@@ -162,17 +163,39 @@
icon = ExtResource("5_ubl8b")
icon_alignment = 1
-[node name="HSplitContainer" type="HSplitContainer" parent="Bg/VBoxContainer"]
+[node name="HSplitContainer" type="HBoxContainer" parent="Bg/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
+theme_override_constants/separation = 0
-[node name="Left" type="Panel" parent="Bg/VBoxContainer/HSplitContainer"]
-custom_minimum_size = Vector2(1000, 0)
+[node name="HSplitContainer2" type="HSplitContainer" parent="Bg/VBoxContainer/HSplitContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 4.0
+
+[node name="HBoxContainer" type="HBoxContainer" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_stretch_ratio = 7.0
-[node name="MarginContainer" type="MarginContainer" parent="Bg/VBoxContainer/HSplitContainer/Left"]
+[node name="LayerPanel" type="Panel" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer"]
+custom_minimum_size = Vector2(350, 0)
+layout_mode = 2
+
+[node name="MapEditorMapLayer" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/LayerPanel" instance=ExtResource("7_ychtn")]
+layout_mode = 1
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+
+[node name="Left" type="Panel" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer"]
+custom_minimum_size = Vector2(300, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 2.0
+
+[node name="MarginContainer" type="MarginContainer" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -184,22 +207,29 @@
theme_override_constants/margin_right = 2
theme_override_constants/margin_bottom = 2
-[node name="MapView" type="SubViewportContainer" parent="Bg/VBoxContainer/HSplitContainer/Left/MarginContainer"]
+[node name="MapView" type="SubViewportContainer" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left/MarginContainer"]
layout_mode = 2
-[node name="SubViewport" type="SubViewport" parent="Bg/VBoxContainer/HSplitContainer/Left/MarginContainer/MapView"]
+[node name="SubViewport" type="SubViewport" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left/MarginContainer/MapView"]
handle_input_locally = false
+snap_2d_transforms_to_pixel = true
+snap_2d_vertices_to_pixel = true
canvas_item_default_texture_filter = 0
-size = Vector2i(1334, 1002)
+size = Vector2i(980, 1002)
render_target_update_mode = 4
-[node name="TileMap" type="TileMap" parent="Bg/VBoxContainer/HSplitContainer/Left/MarginContainer/MapView/SubViewport"]
+[node name="TileMap" type="TileMap" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left/MarginContainer/MapView/SubViewport" groups=["navigation"]]
+y_sort_enabled = true
position = Vector2(500, 540)
scale = Vector2(4, 4)
format = 2
script = ExtResource("4_mhy1a")
-[node name="ErrorCell" type="Sprite2D" parent="Bg/VBoxContainer/HSplitContainer/Left/MarginContainer/MapView/SubViewport/TileMap"]
+[node name="NavigationRegion" type="NavigationRegion2D" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left/MarginContainer/MapView/SubViewport/TileMap"]
+z_index = 10
+navigation_polygon = ExtResource("8_t7nq5")
+
+[node name="ErrorCell" type="Sprite2D" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left/MarginContainer/MapView/SubViewport/TileMap"]
visible = false
modulate = Color(1, 0, 0, 0)
z_index = 10
@@ -207,30 +237,30 @@
texture = ExtResource("4_465u2")
centered = false
-[node name="ErrorCellAnimationPlayer" type="AnimationPlayer" parent="Bg/VBoxContainer/HSplitContainer/Left/MarginContainer/MapView/SubViewport/TileMap/ErrorCell"]
+[node name="ErrorCellAnimationPlayer" type="AnimationPlayer" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left/MarginContainer/MapView/SubViewport/TileMap/ErrorCell"]
libraries = {
"": SubResource("AnimationLibrary_371oi")
}
-[node name="Brush" type="Node2D" parent="Bg/VBoxContainer/HSplitContainer/Left/MarginContainer/MapView/SubViewport/TileMap"]
+[node name="Brush" type="Node2D" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left/MarginContainer/MapView/SubViewport/TileMap"]
z_index = 100
-[node name="CanvasLayer" type="CanvasLayer" parent="Bg/VBoxContainer/HSplitContainer/Left/MarginContainer/MapView/SubViewport"]
+[node name="CanvasLayer" type="CanvasLayer" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left/MarginContainer/MapView/SubViewport"]
layer = 2
-[node name="MapEditorTools" parent="Bg/VBoxContainer/HSplitContainer/Left/MarginContainer/MapView/SubViewport/CanvasLayer" instance=ExtResource("6_7pvgu")]
+[node name="MapEditorTools" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left/MarginContainer/MapView/SubViewport/CanvasLayer" instance=ExtResource("6_7pvgu")]
-[node name="MapView2" type="TextureRect" parent="Bg/VBoxContainer/HSplitContainer/Left/MarginContainer"]
+[node name="MapView2" type="TextureRect" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/HBoxContainer/Left/MarginContainer"]
visible = false
layout_mode = 2
-[node name="Right" type="Panel" parent="Bg/VBoxContainer/HSplitContainer"]
-custom_minimum_size = Vector2(300, 0)
+[node name="Right" type="Panel" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2"]
+custom_minimum_size = Vector2(450, 0)
layout_mode = 2
size_flags_horizontal = 3
size_flags_stretch_ratio = 3.0
-[node name="MarginContainer" type="MarginContainer" parent="Bg/VBoxContainer/HSplitContainer/Right"]
+[node name="MarginContainer" type="MarginContainer" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/Right"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -242,29 +272,21 @@
theme_override_constants/margin_right = 2
theme_override_constants/margin_bottom = 2
-[node name="TabContainer" type="TabContainer" parent="Bg/VBoxContainer/HSplitContainer/Right/MarginContainer"]
+[node name="TabContainer" type="TabContainer" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/Right/MarginContainer"]
layout_mode = 2
size_flags_vertical = 3
-[node name="MapMark" type="MarginContainer" parent="Bg/VBoxContainer/HSplitContainer/Right/MarginContainer/TabContainer"]
+[node name="MapTile" type="MarginContainer" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/Right/MarginContainer/TabContainer"]
layout_mode = 2
theme_override_constants/margin_top = 10
-[node name="MapEditorMapMark" parent="Bg/VBoxContainer/HSplitContainer/Right/MarginContainer/TabContainer/MapMark" instance=ExtResource("8_8tgeu")]
+[node name="MapEditorMapTile" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/Right/MarginContainer/TabContainer/MapTile" instance=ExtResource("10_4fu5v")]
layout_mode = 2
-[node name="MapLayer" type="MarginContainer" parent="Bg/VBoxContainer/HSplitContainer/Right/MarginContainer/TabContainer"]
+[node name="MapMark" type="MarginContainer" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/Right/MarginContainer/TabContainer"]
visible = false
layout_mode = 2
theme_override_constants/margin_top = 10
-[node name="MapEditorMapLayer" parent="Bg/VBoxContainer/HSplitContainer/Right/MarginContainer/TabContainer/MapLayer" instance=ExtResource("7_ychtn")]
-layout_mode = 2
-
-[node name="MapTileSet" type="MarginContainer" parent="Bg/VBoxContainer/HSplitContainer/Right/MarginContainer/TabContainer"]
-visible = false
-layout_mode = 2
-theme_override_constants/margin_top = 10
-
-[node name="MapEditorTileSet" parent="Bg/VBoxContainer/HSplitContainer/Right/MarginContainer/TabContainer/MapTileSet" instance=ExtResource("11_7yaoy")]
+[node name="MapEditorMapMark" parent="Bg/VBoxContainer/HSplitContainer/HSplitContainer2/Right/MarginContainer/TabContainer/MapMark" instance=ExtResource("8_8tgeu")]
layout_mode = 2
diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorCreateGroup.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorCreateGroup.tscn
deleted file mode 100644
index 8788c6c..0000000
--- a/DungeonShooting_Godot/prefab/ui/MapEditorCreateGroup.tscn
+++ /dev/null
@@ -1,65 +0,0 @@
-[gd_scene load_steps=2 format=3 uid="uid://45krchsjrluh"]
-
-[ext_resource type="Script" path="res://src/game/ui/mapEditorCreateGroup/MapEditorCreateGroupPanel.cs" id="1_qoujx"]
-
-[node name="MapEditorCreateGroup" type="Control"]
-layout_mode = 3
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-grow_horizontal = 2
-grow_vertical = 2
-script = ExtResource("1_qoujx")
-
-[node name="MarginContainer" type="MarginContainer" parent="."]
-layout_mode = 1
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-grow_horizontal = 2
-grow_vertical = 2
-theme_override_constants/margin_left = 20
-theme_override_constants/margin_top = 50
-theme_override_constants/margin_right = 20
-theme_override_constants/margin_bottom = 20
-
-[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
-layout_mode = 2
-theme_override_constants/separation = 20
-
-[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
-layout_mode = 2
-
-[node name="GroupNameLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer"]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_stretch_ratio = 20.0
-text = "组名称:"
-horizontal_alignment = 2
-vertical_alignment = 1
-
-[node name="GroupNameInput" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_stretch_ratio = 80.0
-placeholder_text = "请输入组名称"
-
-[node name="HBoxContainer5" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
-layout_mode = 2
-
-[node name="RemarkNameLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer5"]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 0
-size_flags_stretch_ratio = 20.0
-text = "组备注:"
-horizontal_alignment = 2
-vertical_alignment = 1
-
-[node name="RemarkInput" type="TextEdit" parent="MarginContainer/VBoxContainer/HBoxContainer5"]
-custom_minimum_size = Vector2(0, 150)
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_stretch_ratio = 80.0
-placeholder_text = "选填"
-wrap_mode = 1
diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorCreatePreinstall.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorCreatePreinstall.tscn
index a90e76d..9ef4b9b 100644
--- a/DungeonShooting_Godot/prefab/ui/MapEditorCreatePreinstall.tscn
+++ b/DungeonShooting_Godot/prefab/ui/MapEditorCreatePreinstall.tscn
@@ -44,6 +44,23 @@
size_flags_stretch_ratio = 80.0
placeholder_text = "请输入预设名称"
+[node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="PreinstallNameLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer2"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 20.0
+text = "自动填充:"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="AutoCheckInput" type="CheckBox" parent="MarginContainer/VBoxContainer/HBoxContainer2"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 80.0
+flat = true
+
[node name="HBoxContainer4" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorMapLayer.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorMapLayer.tscn
index eabd3a6..64daa22 100644
--- a/DungeonShooting_Godot/prefab/ui/MapEditorMapLayer.tscn
+++ b/DungeonShooting_Godot/prefab/ui/MapEditorMapLayer.tscn
@@ -1,7 +1,8 @@
-[gd_scene load_steps=4 format=3 uid="uid://bb2ekkpxifd7g"]
+[gd_scene load_steps=5 format=3 uid="uid://bb2ekkpxifd7g"]
[ext_resource type="Script" path="res://src/game/ui/mapEditorMapLayer/MapEditorMapLayerPanel.cs" id="1_3j05m"]
[ext_resource type="Texture2D" uid="uid://dmm8jw06bhffh" path="res://resource/sprite/ui/commonIcon/Lock.png" id="2_pfhyj"]
+[ext_resource type="Texture2D" uid="uid://bn47bmilcw4x0" path="res://resource/sprite/ui/commonIcon/Select2.png" id="3_k8b5h"]
[ext_resource type="Texture2D" uid="uid://dqvg18aacx6db" path="res://resource/sprite/ui/commonIcon/Visible.png" id="3_rqjh4"]
[node name="MapEditorMapLayer" type="Control"]
@@ -21,9 +22,17 @@
grow_horizontal = 2
grow_vertical = 2
-[node name="LayerLabel" type="Label" parent="VBoxContainer"]
+[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
-text = "地图层级:"
+
+[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "淡化未选中的层"
+
+[node name="CheckButton" type="CheckButton" parent="VBoxContainer/HBoxContainer"]
+layout_mode = 2
+flat = true
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"]
layout_mode = 2
@@ -37,6 +46,19 @@
icon = ExtResource("2_pfhyj")
alignment = 0
+[node name="SelectTexture" type="NinePatchRect" parent="VBoxContainer/ScrollContainer/LayerButton"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("3_k8b5h")
+patch_margin_left = 3
+patch_margin_top = 3
+patch_margin_right = 3
+patch_margin_bottom = 3
+
[node name="VisibleButton" type="TextureButton" parent="VBoxContainer/ScrollContainer/LayerButton"]
layout_mode = 1
anchors_preset = 11
diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorMapMark.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorMapMark.tscn
index 8bd0e6d..cfac2e0 100644
--- a/DungeonShooting_Godot/prefab/ui/MapEditorMapMark.tscn
+++ b/DungeonShooting_Godot/prefab/ui/MapEditorMapMark.tscn
@@ -87,6 +87,22 @@
size_flags_horizontal = 3
size_flags_vertical = 3
+[node name="AutoFillTip" type="ColorRect" parent="VBoxContainer/ScrollContainer/VBoxContainer"]
+custom_minimum_size = Vector2(0, 40)
+layout_mode = 2
+color = Color(0.360784, 0.764706, 1, 0.0784314)
+
+[node name="Label" type="Label" parent="VBoxContainer/ScrollContainer/VBoxContainer/AutoFillTip"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "当前预设启用了自动填充"
+horizontal_alignment = 1
+text_overrun_behavior = 3
+
[node name="AddWaveButton" type="Button" parent="VBoxContainer/ScrollContainer/VBoxContainer"]
layout_mode = 2
text = "添加波数"
diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorMapTile.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorMapTile.tscn
new file mode 100644
index 0000000..49c7fd0
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/MapEditorMapTile.tscn
@@ -0,0 +1,287 @@
+[gd_scene load_steps=8 format=3 uid="uid://tjbfj67t5akm"]
+
+[ext_resource type="Script" path="res://src/game/ui/mapEditorMapTile/MapEditorMapTilePanel.cs" id="1_gtth6"]
+[ext_resource type="Script" path="res://src/game/ui/mapEditorMapTile/FreeTileTab.cs" id="2_5c2no"]
+[ext_resource type="Texture2D" uid="uid://d2wslibovwv7w" path="res://resource/sprite/ui/commonIcon/CenterTool.png" id="3_sibps"]
+[ext_resource type="Script" path="res://src/game/ui/mapEditorMapTile/TerrainTileTab.cs" id="4_jxcal"]
+[ext_resource type="Texture2D" uid="uid://bn47bmilcw4x0" path="res://resource/sprite/ui/commonIcon/Select2.png" id="5_f4thw"]
+[ext_resource type="Script" path="res://src/game/ui/mapEditorMapTile/CombinationTileTab.cs" id="5_ty17f"]
+[ext_resource type="Texture2D" uid="uid://c4ltpf5a3egu1" path="res://resource/sprite/ui/commonIcon/Error_mini.png" id="6_u35dn"]
+
+[node name="MapEditorMapTile" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_gtth6")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"]
+custom_minimum_size = Vector2(200, 0)
+layout_mode = 2
+text = "资源:"
+
+[node name="SourceOption" type="OptionButton" parent="VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer2"]
+custom_minimum_size = Vector2(200, 0)
+layout_mode = 2
+text = "笔刷类型:"
+
+[node name="HandleOption" type="OptionButton" parent="VBoxContainer/HBoxContainer2"]
+layout_mode = 2
+size_flags_horizontal = 3
+item_count = 3
+selected = 0
+popup/item_0/text = "自由绘制"
+popup/item_0/id = 0
+popup/item_1/text = "地形绘制"
+popup/item_1/id = 1
+popup/item_2/text = "组合绘制"
+popup/item_2/id = 2
+
+[node name="Panel" type="Panel" parent="VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/Panel"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 2
+theme_override_constants/margin_top = 2
+theme_override_constants/margin_right = 2
+theme_override_constants/margin_bottom = 2
+
+[node name="Tab1" type="ColorRect" parent="VBoxContainer/Panel/MarginContainer"]
+visible = false
+clip_children = 2
+layout_mode = 2
+color = Color(0.145098, 0.145098, 0.145098, 1)
+script = ExtResource("2_5c2no")
+
+[node name="TabRoot" type="Control" parent="VBoxContainer/Panel/MarginContainer/Tab1"]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -0.5
+offset_top = -0.5
+offset_right = 0.5
+offset_bottom = 0.5
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+
+[node name="TileSprite" type="Sprite2D" parent="VBoxContainer/Panel/MarginContainer/Tab1/TabRoot"]
+centered = false
+
+[node name="Brush" type="Control" parent="VBoxContainer/Panel/MarginContainer/Tab1/TabRoot"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+
+[node name="Grid" type="ColorRect" parent="VBoxContainer/Panel/MarginContainer/Tab1"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+color = Color(1, 1, 1, 0)
+
+[node name="FocusBtn" type="TextureButton" parent="VBoxContainer/Panel/MarginContainer/Tab1"]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -79.0
+offset_top = 14.0
+offset_right = -15.0
+offset_bottom = 78.0
+grow_horizontal = 0
+tooltip_text = "聚焦"
+texture_normal = ExtResource("3_sibps")
+ignore_texture_size = true
+stretch_mode = 5
+
+[node name="Tab2" type="Control" parent="VBoxContainer/Panel/MarginContainer"]
+layout_mode = 2
+script = ExtResource("4_jxcal")
+
+[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/Panel/MarginContainer/Tab2"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="TerrainItem" type="Button" parent="VBoxContainer/Panel/MarginContainer/Tab2/ScrollContainer"]
+custom_minimum_size = Vector2(0, 100)
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="Select" type="NinePatchRect" parent="VBoxContainer/Panel/MarginContainer/Tab2/ScrollContainer/TerrainItem"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("5_f4thw")
+patch_margin_left = 3
+patch_margin_top = 3
+patch_margin_right = 3
+patch_margin_bottom = 3
+
+[node name="TerrainName" type="Label" parent="VBoxContainer/Panel/MarginContainer/Tab2/ScrollContainer/TerrainItem"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 104.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "Name
+2x2"
+vertical_alignment = 1
+
+[node name="ErrorIcon" type="TextureRect" parent="VBoxContainer/Panel/MarginContainer/Tab2/ScrollContainer/TerrainItem"]
+layout_mode = 1
+anchors_preset = 6
+anchor_left = 1.0
+anchor_top = 0.5
+anchor_right = 1.0
+anchor_bottom = 0.5
+offset_left = -46.0
+offset_top = -20.0
+offset_right = -6.0
+offset_bottom = 20.0
+grow_horizontal = 0
+grow_vertical = 2
+mouse_filter = 2
+texture = ExtResource("6_u35dn")
+
+[node name="TerrainPreview" type="TextureRect" parent="VBoxContainer/Panel/MarginContainer/Tab2/ScrollContainer/TerrainItem"]
+layout_mode = 1
+anchors_preset = 9
+anchor_bottom = 1.0
+offset_left = 3.0
+offset_top = 3.0
+offset_right = 97.0
+offset_bottom = -3.0
+grow_vertical = 2
+expand_mode = 2
+stretch_mode = 5
+
+[node name="Tab3" type="Control" parent="VBoxContainer/Panel/MarginContainer"]
+visible = false
+layout_mode = 2
+script = ExtResource("5_ty17f")
+
+[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/Panel/MarginContainer/Tab3"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="CellButton" type="Button" parent="VBoxContainer/Panel/MarginContainer/Tab3/ScrollContainer"]
+custom_minimum_size = Vector2(120, 170)
+layout_mode = 2
+
+[node name="PreviewImage" type="TextureRect" parent="VBoxContainer/Panel/MarginContainer/Tab3/ScrollContainer/CellButton"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -52.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+expand_mode = 2
+stretch_mode = 5
+
+[node name="CellName" type="Label" parent="VBoxContainer/Panel/MarginContainer/Tab3/ScrollContainer/CellButton"]
+layout_mode = 1
+anchors_preset = 12
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_top = -52.0
+grow_horizontal = 2
+grow_vertical = 0
+theme_override_font_sizes/font_size = 16
+text = "名称"
+horizontal_alignment = 1
+vertical_alignment = 1
+autowrap_mode = 2
+clip_text = true
+text_overrun_behavior = 2
+
+[node name="SelectTexture" type="NinePatchRect" parent="VBoxContainer/Panel/MarginContainer/Tab3/ScrollContainer/CellButton"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("5_f4thw")
+region_rect = Rect2(0, 0, 36, 36)
+patch_margin_left = 3
+patch_margin_top = 3
+patch_margin_right = 3
+patch_margin_bottom = 3
+
+[node name="MaskBg" type="ColorRect" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0, 0, 0, 0.862745)
+
+[node name="Label" type="Label" parent="MaskBg"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "选中地板层时不能使用自定义图块"
+horizontal_alignment = 1
+vertical_alignment = 1
+autowrap_mode = 1
diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorProject.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorProject.tscn
index b4a3d9a..183f7b3 100644
--- a/DungeonShooting_Godot/prefab/ui/MapEditorProject.tscn
+++ b/DungeonShooting_Godot/prefab/ui/MapEditorProject.tscn
@@ -1,7 +1,6 @@
-[gd_scene load_steps=9 format=3 uid="uid://dh7y03tq6v0a2"]
+[gd_scene load_steps=8 format=3 uid="uid://dh7y03tq6v0a2"]
[ext_resource type="Script" path="res://src/game/ui/mapEditorProject/MapEditorProjectPanel.cs" id="1_5aioo"]
-[ext_resource type="Texture2D" uid="uid://cajcnlimvoxk" path="res://resource/sprite/ui/commonIcon/Back.png" id="2_v0ry0"]
[ext_resource type="Texture2D" uid="uid://blfvsup876agh" path="res://resource/sprite/ui/commonIcon/Search.png" id="3_f5h8c"]
[ext_resource type="Texture2D" uid="uid://n4atvj5fkcpg" path="res://resource/sprite/ui/commonIcon/Add.png" id="4_okvq0"]
[ext_resource type="Texture2D" uid="uid://bn47bmilcw4x0" path="res://resource/sprite/ui/commonIcon/Select2.png" id="5_rcbyx"]
@@ -17,50 +16,23 @@
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_5aioo")
-metadata/_edit_horizontal_guides_ = [449.0]
-[node name="Bg" type="Panel" parent="."]
+[node name="HBoxContainer" type="HBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-
-[node name="VBoxContainer" type="VBoxContainer" parent="Bg"]
-layout_mode = 1
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-grow_horizontal = 2
-grow_vertical = 2
-theme_override_constants/separation = 0
-
-[node name="Head" type="Panel" parent="Bg/VBoxContainer"]
-custom_minimum_size = Vector2(0, 70)
-layout_mode = 2
-
-[node name="Back" type="Button" parent="Bg/VBoxContainer/Head"]
-layout_mode = 2
-offset_left = 2.0
-offset_top = 2.0
-offset_right = 62.0
-offset_bottom = 68.0
-size_flags_horizontal = 0
-icon = ExtResource("2_v0ry0")
-icon_alignment = 1
-
-[node name="HBoxContainer" type="HBoxContainer" parent="Bg/VBoxContainer"]
-layout_mode = 2
size_flags_vertical = 3
theme_override_constants/separation = 0
-[node name="Panel" type="Panel" parent="Bg/VBoxContainer/HBoxContainer"]
+[node name="Panel" type="Panel" parent="HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_stretch_ratio = 2.0
-[node name="MarginContainer" type="MarginContainer" parent="Bg/VBoxContainer/HBoxContainer/Panel"]
+[node name="MarginContainer" type="MarginContainer" parent="HBoxContainer/Panel"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -72,31 +44,44 @@
theme_override_constants/margin_right = 12
theme_override_constants/margin_bottom = 12
-[node name="VBoxContainer" type="VBoxContainer" parent="Bg/VBoxContainer/HBoxContainer/Panel/MarginContainer"]
+[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/Panel/MarginContainer"]
layout_mode = 2
-[node name="HBoxContainer" type="HBoxContainer" parent="Bg/VBoxContainer/HBoxContainer/Panel/MarginContainer/VBoxContainer"]
+[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer/Panel/MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 45)
layout_mode = 2
-[node name="GroupSearchInput" type="LineEdit" parent="Bg/VBoxContainer/HBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer"]
+[node name="GroupSearchInput" type="LineEdit" parent="HBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "搜索"
-[node name="GroupSearchButton" type="Button" parent="Bg/VBoxContainer/HBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer"]
+[node name="GroupSearchButton" type="Button" parent="HBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
icon = ExtResource("3_f5h8c")
-[node name="GroupAddButton" type="Button" parent="Bg/VBoxContainer/HBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer"]
+[node name="HBoxContainer2" type="HBoxContainer" parent="HBoxContainer/Panel/MarginContainer/VBoxContainer"]
+custom_minimum_size = Vector2(0, 45)
layout_mode = 2
+
+[node name="GroupAddButton" type="Button" parent="HBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer2"]
+layout_mode = 2
+size_flags_horizontal = 10
icon = ExtResource("4_okvq0")
-[node name="ScrollContainer" type="ScrollContainer" parent="Bg/VBoxContainer/HBoxContainer/Panel/MarginContainer/VBoxContainer"]
+[node name="GroupEditButton" type="Button" parent="HBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer2"]
+layout_mode = 2
+icon = ExtResource("6_qalh0")
+
+[node name="GroupDeleteButton" type="Button" parent="HBoxContainer/Panel/MarginContainer/VBoxContainer/HBoxContainer2"]
+layout_mode = 2
+icon = ExtResource("7_lnry3")
+
+[node name="ScrollContainer" type="ScrollContainer" parent="HBoxContainer/Panel/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
-[node name="GroupButton" type="Button" parent="Bg/VBoxContainer/HBoxContainer/Panel/MarginContainer/VBoxContainer/ScrollContainer"]
+[node name="GroupButton" type="Button" parent="HBoxContainer/Panel/MarginContainer/VBoxContainer/ScrollContainer"]
custom_minimum_size = Vector2(0, 100)
layout_mode = 2
size_flags_horizontal = 3
@@ -104,7 +89,7 @@
alignment = 0
text_overrun_behavior = 3
-[node name="SelectTexture" type="NinePatchRect" parent="Bg/VBoxContainer/HBoxContainer/Panel/MarginContainer/VBoxContainer/ScrollContainer/GroupButton"]
+[node name="SelectTexture" type="NinePatchRect" parent="HBoxContainer/Panel/MarginContainer/VBoxContainer/ScrollContainer/GroupButton"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -118,12 +103,12 @@
patch_margin_right = 3
patch_margin_bottom = 3
-[node name="Panel2" type="Panel" parent="Bg/VBoxContainer/HBoxContainer"]
+[node name="Panel2" type="Panel" parent="HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_stretch_ratio = 8.0
-[node name="MarginContainer" type="MarginContainer" parent="Bg/VBoxContainer/HBoxContainer/Panel2"]
+[node name="MarginContainer" type="MarginContainer" parent="HBoxContainer/Panel2"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -135,47 +120,47 @@
theme_override_constants/margin_right = 12
theme_override_constants/margin_bottom = 12
-[node name="VBoxContainer" type="VBoxContainer" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer"]
+[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/Panel2/MarginContainer"]
layout_mode = 2
-[node name="HBoxContainer" type="HBoxContainer" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer"]
+[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 45)
layout_mode = 2
-[node name="RoomSearchInput" type="LineEdit" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
+[node name="RoomSearchInput" type="LineEdit" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(500, 0)
layout_mode = 2
placeholder_text = "搜索"
-[node name="RoomTypeButton" type="OptionButton" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
+[node name="RoomTypeButton" type="OptionButton" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
-[node name="RoomSearchButton" type="Button" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
+[node name="RoomSearchButton" type="Button" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
icon = ExtResource("3_f5h8c")
-[node name="RoomAddButton" type="Button" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
+[node name="RoomAddButton" type="Button" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
icon = ExtResource("4_okvq0")
-[node name="RoomEditButton" type="Button" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
+[node name="RoomEditButton" type="Button" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
icon = ExtResource("6_qalh0")
-[node name="RoomDeleteButton" type="Button" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
+[node name="RoomDeleteButton" type="Button" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
icon = ExtResource("7_lnry3")
-[node name="ScrollContainer" type="ScrollContainer" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer"]
+[node name="ScrollContainer" type="ScrollContainer" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
-[node name="RoomButton" type="Button" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer"]
+[node name="RoomButton" type="Button" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer"]
custom_minimum_size = Vector2(200, 285)
layout_mode = 2
-[node name="PreviewImage" type="TextureRect" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer/RoomButton"]
+[node name="PreviewImage" type="TextureRect" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer/RoomButton"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -189,7 +174,7 @@
mouse_filter = 2
stretch_mode = 5
-[node name="RoomName" type="Label" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer/RoomButton"]
+[node name="RoomName" type="Label" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer/RoomButton"]
layout_mode = 1
anchors_preset = 12
anchor_top = 1.0
@@ -204,7 +189,7 @@
clip_text = true
text_overrun_behavior = 3
-[node name="RoomType" type="Label" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer/RoomButton"]
+[node name="RoomType" type="Label" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer/RoomButton"]
layout_mode = 1
anchors_preset = 12
anchor_top = 1.0
@@ -218,7 +203,7 @@
clip_text = true
text_overrun_behavior = 3
-[node name="SelectTexture" type="NinePatchRect" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer/RoomButton"]
+[node name="SelectTexture" type="NinePatchRect" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer/RoomButton"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -232,7 +217,7 @@
patch_margin_right = 3
patch_margin_bottom = 3
-[node name="ErrorTexture" type="TextureRect" parent="Bg/VBoxContainer/HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer/RoomButton"]
+[node name="ErrorTexture" type="TextureRect" parent="HBoxContainer/Panel2/MarginContainer/VBoxContainer/ScrollContainer/RoomButton"]
layout_mode = 0
offset_left = 157.0
offset_top = 158.0
diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorTileSet.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorTileSet.tscn
deleted file mode 100644
index 955772b..0000000
--- a/DungeonShooting_Godot/prefab/ui/MapEditorTileSet.tscn
+++ /dev/null
@@ -1,18 +0,0 @@
-[gd_scene load_steps=2 format=3 uid="uid://dhtfat7tr8ujw"]
-
-[ext_resource type="Script" path="res://src/game/ui/mapEditorTileSet/MapEditorTileSetPanel.cs" id="1_m3lbx"]
-
-[node name="MapEditorTileSet" type="Control"]
-layout_mode = 3
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-grow_horizontal = 2
-grow_vertical = 2
-script = ExtResource("1_m3lbx")
-
-[node name="Label" type="Label" parent="."]
-layout_mode = 0
-offset_right = 9.0
-offset_bottom = 40.0
-text = "TileSet"
diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn
index c8d6055..9805b0d 100644
--- a/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn
+++ b/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn
@@ -32,6 +32,7 @@
grow_vertical = 2
mouse_filter = 1
script = ExtResource("1_mqp1c")
+metadata/_edit_vertical_guides_ = [1900.0]
[node name="ToolRoot" type="Control" parent="."]
anchors_preset = 0
diff --git a/DungeonShooting_Godot/prefab/ui/RoomUI.tscn b/DungeonShooting_Godot/prefab/ui/RoomUI.tscn
index a16d493..8a8bc45 100644
--- a/DungeonShooting_Godot/prefab/ui/RoomUI.tscn
+++ b/DungeonShooting_Godot/prefab/ui/RoomUI.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=20 format=3 uid="uid://bvpmtfupny8iu"]
+[gd_scene load_steps=22 format=3 uid="uid://bvpmtfupny8iu"]
[ext_resource type="Script" path="res://src/game/ui/roomUI/RoomUIPanel.cs" id="1_tfcrp"]
[ext_resource type="Texture2D" uid="uid://b67i86mtqrn32" path="res://resource/sprite/ui/roomUI/icon_bullet.png" id="2_ruc0p"]
@@ -6,6 +6,8 @@
[ext_resource type="Texture2D" uid="uid://cukrx5yyqw86o" path="res://resource/sprite/ui/roomUI/ReloadBar.png" id="4_hy44s"]
[ext_resource type="Texture2D" uid="uid://cx3i1nkcc4307" path="res://resource/sprite/ui/roomUI/ReloadBarBlock.png" id="5_w3lq2"]
[ext_resource type="Texture2D" uid="uid://blywnftxn1cfd" path="res://resource/sprite/ui/roomUI/Life_full.png" id="6_ggviq"]
+[ext_resource type="Material" uid="uid://j8t31iuumvhr" path="res://resource/material/Outline.tres" id="7_iw6pa"]
+[ext_resource type="Texture2D" uid="uid://cysv0dpvm52xw" path="res://resource/sprite/ui/commonIcon/Gold_10.png" id="7_lyxvi"]
[ext_resource type="Texture2D" uid="uid://cu0wlvrbntvyd" path="res://resource/sprite/prop/active/ActiveProp5000.png" id="10_5d4np"]
[ext_resource type="Texture2D" uid="uid://b8u6s5n37157" path="res://resource/sprite/ui/roomUI/Panel2.png" id="10_eokvx"]
[ext_resource type="Texture2D" uid="uid://0swkya4hn82c" path="res://resource/sprite/ui/roomUI/Panel.png" id="10_q3fs8"]
@@ -159,17 +161,54 @@
mouse_filter = 2
metadata/_edit_lock_ = true
-[node name="LifeBar" type="Control" parent="Control"]
-anchors_preset = 0
-offset_right = 40.0
-offset_bottom = 40.0
-scale = Vector2(4, 4)
+[node name="LifeBar" type="VBoxContainer" parent="Control"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_right = -280.0
+grow_horizontal = 2
+grow_vertical = 2
-[node name="Life" type="TextureRect" parent="Control/LifeBar"]
+[node name="Life" type="Control" parent="Control/LifeBar"]
+custom_minimum_size = Vector2(48, 40)
layout_mode = 2
+size_flags_horizontal = 0
+size_flags_vertical = 0
+
+[node name="LifeIcon" type="TextureRect" parent="Control/LifeBar/Life"]
+layout_mode = 1
offset_right = 12.0
offset_bottom = 10.0
+scale = Vector2(4, 4)
+size_flags_horizontal = 0
+size_flags_vertical = 0
texture = ExtResource("6_ggviq")
+stretch_mode = 2
+
+[node name="Gold" type="Control" parent="Control/LifeBar"]
+custom_minimum_size = Vector2(0, 32)
+layout_mode = 2
+
+[node name="GoldIcon" type="TextureRect" parent="Control/LifeBar/Gold"]
+material = ExtResource("7_iw6pa")
+layout_mode = 1
+offset_right = 8.0
+offset_bottom = 8.0
+scale = Vector2(4, 4)
+texture = ExtResource("7_lyxvi")
+stretch_mode = 2
+
+[node name="GoldText" type="Label" parent="Control/LifeBar/Gold"]
+layout_mode = 1
+anchors_preset = 9
+anchor_bottom = 1.0
+offset_left = 32.0
+offset_top = -4.0
+offset_right = 285.0
+offset_bottom = 4.0
+grow_vertical = 2
+text = "0"
[node name="ActivePropBar" type="Control" parent="Control"]
layout_mode = 1
diff --git a/DungeonShooting_Godot/prefab/ui/Setting.tscn b/DungeonShooting_Godot/prefab/ui/Setting.tscn
index d0eb890..1ecf5f0 100644
--- a/DungeonShooting_Godot/prefab/ui/Setting.tscn
+++ b/DungeonShooting_Godot/prefab/ui/Setting.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://bnwweusrc44xy"]
[ext_resource type="Script" path="res://src/game/ui/setting/SettingPanel.cs" id="1_ff0oi"]
-[ext_resource type="Texture2D" uid="uid://bd0kpqji660ta" path="res://resource/sprite/ui/commonIcon/Back.png" id="2_vgl60"]
+[ext_resource type="Texture2D" uid="uid://cajcnlimvoxk" path="res://resource/sprite/ui/commonIcon/Back.png" id="2_vgl60"]
[node name="Setting" type="Control"]
layout_mode = 3
@@ -315,7 +315,7 @@
[node name="Value" type="Label" parent="ScrollContainer/KeySetting/Key14"]
layout_mode = 2
-text = "Ctrl"
+text = "Shift"
[node name="Back" type="Button" parent="ScrollContainer/KeySetting"]
layout_mode = 2
diff --git a/DungeonShooting_Godot/prefab/ui/Settlement.tscn b/DungeonShooting_Godot/prefab/ui/Settlement.tscn
index a67e040..bc6b2ab 100644
--- a/DungeonShooting_Godot/prefab/ui/Settlement.tscn
+++ b/DungeonShooting_Godot/prefab/ui/Settlement.tscn
@@ -60,4 +60,4 @@
layout_mode = 2
focus_neighbor_bottom = NodePath("../Restart")
theme = ExtResource("2_63mpy")
-text = "回到主菜单"
+text = "回到大厅"
diff --git a/DungeonShooting_Godot/prefab/ui/TileSetEditor.tscn b/DungeonShooting_Godot/prefab/ui/TileSetEditor.tscn
new file mode 100644
index 0000000..d602c57
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/TileSetEditor.tscn
@@ -0,0 +1,164 @@
+[gd_scene load_steps=8 format=3 uid="uid://dn5brsxa6w3l6"]
+
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditor/TileSetEditorPanel.cs" id="1_rgx4n"]
+[ext_resource type="Texture2D" uid="uid://cajcnlimvoxk" path="res://resource/sprite/ui/commonIcon/Back.png" id="2_naycu"]
+[ext_resource type="Texture2D" uid="uid://cat35d7ueu7gu" path="res://resource/sprite/ui/commonIcon/Save.png" id="3_bcuxk"]
+[ext_resource type="Texture2D" uid="uid://bn47bmilcw4x0" path="res://resource/sprite/ui/commonIcon/Select2.png" id="4_t8bqb"]
+[ext_resource type="Texture2D" uid="uid://n4atvj5fkcpg" path="res://resource/sprite/ui/commonIcon/Add.png" id="4_u8gg1"]
+[ext_resource type="Texture2D" uid="uid://c5778ntk2rdon" path="res://resource/sprite/ui/commonIcon/Delete.png" id="5_gepb1"]
+[ext_resource type="Texture2D" uid="uid://c4ltpf5a3egu1" path="res://resource/sprite/ui/commonIcon/Error_mini.png" id="7_2tur5"]
+
+[node name="TileSetEditor" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_rgx4n")
+
+[node name="Bg" type="Panel" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="VBoxContainer" type="VBoxContainer" parent="Bg"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/separation = 0
+
+[node name="Head" type="Panel" parent="Bg/VBoxContainer"]
+custom_minimum_size = Vector2(0, 70)
+layout_mode = 2
+
+[node name="Back" type="Button" parent="Bg/VBoxContainer/Head"]
+layout_mode = 2
+offset_left = 2.0
+offset_top = 2.0
+offset_right = 62.0
+offset_bottom = 68.0
+size_flags_horizontal = 0
+icon = ExtResource("2_naycu")
+icon_alignment = 1
+
+[node name="Save" type="Button" parent="Bg/VBoxContainer/Head"]
+layout_mode = 0
+offset_left = 64.0
+offset_top = 2.0
+offset_right = 124.0
+offset_bottom = 68.0
+grow_vertical = 2
+size_flags_horizontal = 0
+icon = ExtResource("3_bcuxk")
+icon_alignment = 1
+
+[node name="Title" type="Label" parent="Bg/VBoxContainer/Head"]
+layout_mode = 0
+offset_left = 136.0
+offset_top = 2.0
+offset_right = 272.0
+offset_bottom = 68.0
+text = "正在编辑"
+vertical_alignment = 1
+
+[node name="HBoxContainer" type="HBoxContainer" parent="Bg/VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+theme_override_constants/separation = 0
+
+[node name="LeftRoot" type="Panel" parent="Bg/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="VBoxContainer" type="VBoxContainer" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="HBoxContainer" type="HBoxContainer" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot/VBoxContainer"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+
+[node name="Label" type="Label" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "资源:"
+
+[node name="AddButton" type="Button" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+icon = ExtResource("4_u8gg1")
+
+[node name="DeleteButton" type="Button" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+icon = ExtResource("5_gepb1")
+
+[node name="OptionButton" type="OptionButton" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot/VBoxContainer"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="ColorRect" type="ColorRect" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot/VBoxContainer"]
+custom_minimum_size = Vector2(0, 3)
+layout_mode = 2
+color = Color(0.188235, 0.188235, 0.188235, 1)
+
+[node name="ScrollContainer" type="ScrollContainer" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot/VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="Tab" type="Button" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot/VBoxContainer/ScrollContainer"]
+custom_minimum_size = Vector2(0, 60)
+layout_mode = 2
+size_flags_horizontal = 3
+text = "页签"
+flat = true
+
+[node name="ErrorIcon" type="TextureRect" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot/VBoxContainer/ScrollContainer/Tab"]
+layout_mode = 1
+anchors_preset = 6
+anchor_left = 1.0
+anchor_top = 0.5
+anchor_right = 1.0
+anchor_bottom = 0.5
+offset_left = -45.0
+offset_top = -20.0
+offset_right = -5.0
+offset_bottom = 20.0
+grow_horizontal = 0
+grow_vertical = 2
+mouse_filter = 2
+texture = ExtResource("7_2tur5")
+
+[node name="Select" type="NinePatchRect" parent="Bg/VBoxContainer/HBoxContainer/LeftRoot/VBoxContainer/ScrollContainer/Tab"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("4_t8bqb")
+region_rect = Rect2(0, 0, 36, 36)
+patch_margin_left = 3
+patch_margin_top = 3
+patch_margin_right = 3
+patch_margin_bottom = 3
+
+[node name="RightRoot" type="Panel" parent="Bg/VBoxContainer/HBoxContainer"]
+clip_children = 2
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 6.0
diff --git a/DungeonShooting_Godot/prefab/ui/TileSetEditorCombination.tscn b/DungeonShooting_Godot/prefab/ui/TileSetEditorCombination.tscn
new file mode 100644
index 0000000..4a4806a
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/TileSetEditorCombination.tscn
@@ -0,0 +1,305 @@
+[gd_scene load_steps=11 format=3 uid="uid://daias2tkvj20c"]
+
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorCombination/TileSetEditorCombinationPanel.cs" id="1_to1lc"]
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorCombination/leftBottom/TileEditArea.cs" id="2_h43yx"]
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorCombination/leftTop/RectBrush.cs" id="3_avikb"]
+[ext_resource type="Texture2D" uid="uid://fkg21rtph51d" path="res://resource/sprite/ui/commonIcon/Delete2.png" id="5_6jqro"]
+[ext_resource type="Texture2D" uid="uid://7l7aqhsaexoh" path="res://resource/sprite/ui/commonIcon/Play.png" id="6_75xjp"]
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorCombination/leftTop/TileEditCombination.cs" id="6_bb3jf"]
+[ext_resource type="Texture2D" uid="uid://bn47bmilcw4x0" path="res://resource/sprite/ui/commonIcon/Select2.png" id="6_g5ey6"]
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorCombination/right/TileSelected.cs" id="6_gql80"]
+[ext_resource type="Script" path="res://src/game/common/ui/EditorMaskBrush.cs" id="7_k0dkc"]
+[ext_resource type="Texture2D" uid="uid://d2wslibovwv7w" path="res://resource/sprite/ui/commonIcon/CenterTool.png" id="7_mbnpy"]
+
+[node name="TileSetEditorCombination" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_to1lc")
+Layer = null
+
+[node name="HSplitContainer" type="HSplitContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="VSplitContainer" type="VSplitContainer" parent="HSplitContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 69.0
+
+[node name="LeftTop" type="Panel" parent="HSplitContainer/VSplitContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+size_flags_stretch_ratio = 50.0
+
+[node name="MarginContainer" type="MarginContainer" parent="HSplitContainer/VSplitContainer/LeftTop"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 2
+theme_override_constants/margin_top = 2
+theme_override_constants/margin_right = 2
+theme_override_constants/margin_bottom = 2
+
+[node name="LeftTopBg" type="ColorRect" parent="HSplitContainer/VSplitContainer/LeftTop/MarginContainer"]
+clip_children = 2
+z_index = 1
+layout_mode = 2
+color = Color(0.203922, 0.203922, 0.203922, 1)
+script = ExtResource("6_bb3jf")
+
+[node name="CombinationRoot" type="Control" parent="HSplitContainer/VSplitContainer/LeftTop/MarginContainer/LeftTopBg"]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -0.5
+offset_top = -0.5
+offset_right = 0.5
+offset_bottom = 0.5
+grow_horizontal = 2
+grow_vertical = 2
+scale = Vector2(3, 3)
+mouse_filter = 2
+
+[node name="CanvasRoot" type="Node2D" parent="HSplitContainer/VSplitContainer/LeftTop/MarginContainer/LeftTopBg/CombinationRoot"]
+
+[node name="BrushRoot" type="Node2D" parent="HSplitContainer/VSplitContainer/LeftTop/MarginContainer/LeftTopBg/CombinationRoot"]
+
+[node name="RectBrush" type="Node2D" parent="HSplitContainer/VSplitContainer/LeftTop/MarginContainer/LeftTopBg/CombinationRoot"]
+script = ExtResource("3_avikb")
+
+[node name="Grid" type="ColorRect" parent="HSplitContainer/VSplitContainer/LeftTop/MarginContainer/LeftTopBg"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+color = Color(1, 1, 1, 0)
+
+[node name="FocusBtn" type="TextureButton" parent="HSplitContainer/VSplitContainer/LeftTop/MarginContainer/LeftTopBg"]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -79.0
+offset_top = 14.0
+offset_right = -15.0
+offset_bottom = 78.0
+grow_horizontal = 0
+tooltip_text = "聚焦"
+texture_normal = ExtResource("7_mbnpy")
+ignore_texture_size = true
+stretch_mode = 5
+
+[node name="DeleteBtn" type="TextureButton" parent="HSplitContainer/VSplitContainer/LeftTop/MarginContainer/LeftTopBg"]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -151.0
+offset_top = 14.0
+offset_right = -87.0
+offset_bottom = 78.0
+grow_horizontal = 0
+tooltip_text = "删除所有图块"
+texture_normal = ExtResource("5_6jqro")
+ignore_texture_size = true
+stretch_mode = 5
+
+[node name="ImportBtn" type="Button" parent="HSplitContainer/VSplitContainer/LeftTop/MarginContainer/LeftTopBg"]
+layout_mode = 1
+anchors_preset = 3
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = -191.0
+offset_top = -84.0
+offset_right = -15.0
+offset_bottom = -20.0
+grow_horizontal = 0
+grow_vertical = 0
+text = "导入组合"
+icon = ExtResource("6_75xjp")
+
+[node name="LeftBottom" type="Panel" parent="HSplitContainer/VSplitContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+size_flags_stretch_ratio = 50.0
+
+[node name="MarginContainer" type="MarginContainer" parent="HSplitContainer/VSplitContainer/LeftBottom"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 2
+theme_override_constants/margin_top = 2
+theme_override_constants/margin_right = 2
+theme_override_constants/margin_bottom = 2
+
+[node name="LeftBottomBg" type="ColorRect" parent="HSplitContainer/VSplitContainer/LeftBottom/MarginContainer"]
+clip_children = 2
+z_index = 1
+layout_mode = 2
+color = Color(0.203922, 0.203922, 0.203922, 1)
+script = ExtResource("2_h43yx")
+
+[node name="TileTexture" type="TextureRect" parent="HSplitContainer/VSplitContainer/LeftBottom/MarginContainer/LeftBottomBg"]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+grow_horizontal = 2
+grow_vertical = 2
+scale = Vector2(2, 2)
+mouse_filter = 2
+
+[node name="MaskRoot" type="Control" parent="HSplitContainer/VSplitContainer/LeftBottom/MarginContainer/LeftBottomBg/TileTexture"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+
+[node name="MaskRect" type="ColorRect" parent="HSplitContainer/VSplitContainer/LeftBottom/MarginContainer/LeftBottomBg/TileTexture/MaskRoot"]
+layout_mode = 1
+offset_right = 16.0
+offset_bottom = 16.0
+mouse_filter = 2
+color = Color(0, 0, 0, 0.588235)
+
+[node name="MaskBrush" type="Control" parent="HSplitContainer/VSplitContainer/LeftBottom/MarginContainer/LeftBottomBg/TileTexture"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+script = ExtResource("7_k0dkc")
+
+[node name="Grid" type="ColorRect" parent="HSplitContainer/VSplitContainer/LeftBottom/MarginContainer/LeftBottomBg"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+color = Color(1, 1, 1, 0)
+
+[node name="FocusBtn" type="TextureButton" parent="HSplitContainer/VSplitContainer/LeftBottom/MarginContainer/LeftBottomBg"]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -79.0
+offset_top = 14.0
+offset_right = -15.0
+offset_bottom = 78.0
+grow_horizontal = 0
+tooltip_text = "聚焦"
+texture_normal = ExtResource("7_mbnpy")
+ignore_texture_size = true
+stretch_mode = 5
+
+[node name="Right" type="Panel" parent="HSplitContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 31.0
+
+[node name="MarginContainer" type="MarginContainer" parent="HSplitContainer/Right"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 2
+theme_override_constants/margin_top = 2
+theme_override_constants/margin_right = 2
+theme_override_constants/margin_bottom = 2
+
+[node name="RightBg" type="VBoxContainer" parent="HSplitContainer/Right/MarginContainer"]
+layout_mode = 2
+script = ExtResource("6_gql80")
+
+[node name="Label" type="Label" parent="HSplitContainer/Right/MarginContainer/RightBg"]
+layout_mode = 2
+text = "已经导入的组合:"
+
+[node name="ScrollContainer" type="ScrollContainer" parent="HSplitContainer/Right/MarginContainer/RightBg"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="CellButton" type="Button" parent="HSplitContainer/Right/MarginContainer/RightBg/ScrollContainer"]
+custom_minimum_size = Vector2(120, 170)
+layout_mode = 2
+
+[node name="PreviewImage" type="TextureRect" parent="HSplitContainer/Right/MarginContainer/RightBg/ScrollContainer/CellButton"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -52.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+expand_mode = 2
+stretch_mode = 5
+
+[node name="CellName" type="Label" parent="HSplitContainer/Right/MarginContainer/RightBg/ScrollContainer/CellButton"]
+layout_mode = 1
+anchors_preset = 12
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_top = -52.0
+grow_horizontal = 2
+grow_vertical = 0
+theme_override_font_sizes/font_size = 16
+text = "名称"
+horizontal_alignment = 1
+vertical_alignment = 1
+autowrap_mode = 2
+clip_text = true
+text_overrun_behavior = 2
+
+[node name="SelectTexture" type="NinePatchRect" parent="HSplitContainer/Right/MarginContainer/RightBg/ScrollContainer/CellButton"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("6_g5ey6")
+region_rect = Rect2(0, 0, 36, 36)
+patch_margin_left = 3
+patch_margin_top = 3
+patch_margin_right = 3
+patch_margin_bottom = 3
diff --git a/DungeonShooting_Godot/prefab/ui/TileSetEditorImport.tscn b/DungeonShooting_Godot/prefab/ui/TileSetEditorImport.tscn
new file mode 100644
index 0000000..1666fc6
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/TileSetEditorImport.tscn
@@ -0,0 +1,120 @@
+[gd_scene load_steps=4 format=3 uid="uid://d4h6gt4jkx25e"]
+
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorImport/TileSetEditorImportPanel.cs" id="1_rkxih"]
+[ext_resource type="Texture2D" uid="uid://duos2p6if4kcp" path="res://resource/sprite/ui/commonIcon/Import.png" id="2_cc6ug"]
+[ext_resource type="Texture2D" uid="uid://d2wslibovwv7w" path="res://resource/sprite/ui/commonIcon/CenterTool.png" id="3_tbedj"]
+
+[node name="TileSetEditorImport" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_rkxih")
+Layer = null
+
+[node name="ImportPreviewBg" type="ColorRect" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0.145098, 0.145098, 0.145098, 1)
+
+[node name="ImportButton" type="Button" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+flat = true
+
+[node name="ImportLabel" type="Label" parent="."]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -388.0
+offset_top = 39.0
+offset_right = 388.0
+offset_bottom = 79.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "点击导入纹理或者将纹理拖拽到该区域, 格式为'.png'"
+
+[node name="ImportIcon" type="TextureRect" parent="."]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -32.0
+offset_top = -32.0
+offset_right = 32.0
+offset_bottom = 32.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+texture = ExtResource("2_cc6ug")
+
+[node name="Control" type="Control" parent="."]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -0.5
+offset_top = -0.5
+offset_right = 0.5
+offset_bottom = 0.5
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+
+[node name="ImportPreview" type="Sprite2D" parent="Control"]
+
+[node name="ImportColorPicker" type="Button" parent="."]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -269.0
+offset_top = 50.0
+offset_right = -65.0
+offset_bottom = 107.0
+grow_horizontal = 0
+text = "背景颜色"
+
+[node name="ReimportButton" type="Button" parent="."]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -269.0
+offset_top = 131.0
+offset_right = -65.0
+offset_bottom = 188.0
+grow_horizontal = 0
+text = "重新导入"
+
+[node name="FocusBtn" type="TextureButton" parent="."]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -129.0
+offset_top = 212.0
+offset_right = -65.0
+offset_bottom = 276.0
+grow_horizontal = 0
+tooltip_text = "聚焦"
+texture_normal = ExtResource("3_tbedj")
+ignore_texture_size = true
+stretch_mode = 5
diff --git a/DungeonShooting_Godot/prefab/ui/TileSetEditorProject.tscn b/DungeonShooting_Godot/prefab/ui/TileSetEditorProject.tscn
new file mode 100644
index 0000000..2ab1e70
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/TileSetEditorProject.tscn
@@ -0,0 +1,177 @@
+[gd_scene load_steps=8 format=3 uid="uid://bxrpxwsvveq8i"]
+
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorProject/TileSetEditorProjectPanel.cs" id="1_rklha"]
+[ext_resource type="Texture2D" uid="uid://blfvsup876agh" path="res://resource/sprite/ui/commonIcon/Search.png" id="3_htmoo"]
+[ext_resource type="Texture2D" uid="uid://n4atvj5fkcpg" path="res://resource/sprite/ui/commonIcon/Add.png" id="4_6incc"]
+[ext_resource type="Texture2D" uid="uid://dggb6p4sdmfry" path="res://resource/sprite/ui/commonIcon/Edit.png" id="5_0y7kc"]
+[ext_resource type="Texture2D" uid="uid://do3q1nsagxayh" path="res://resource/sprite/ui/commonIcon/Success_mini.png" id="5_d0rev"]
+[ext_resource type="Texture2D" uid="uid://bn47bmilcw4x0" path="res://resource/sprite/ui/commonIcon/Select2.png" id="5_l4lwx"]
+[ext_resource type="Texture2D" uid="uid://c5778ntk2rdon" path="res://resource/sprite/ui/commonIcon/Delete.png" id="6_jwxdd"]
+
+[node name="TileSetEditorProject" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_rklha")
+
+[node name="Panel" type="Panel" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 2.0
+
+[node name="MarginContainer" type="MarginContainer" parent="Panel"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 12
+theme_override_constants/margin_top = 12
+theme_override_constants/margin_right = 12
+theme_override_constants/margin_bottom = 12
+
+[node name="HBoxContainer2" type="HBoxContainer" parent="Panel/MarginContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="VBoxContainer" type="VBoxContainer" parent="Panel/MarginContainer/HBoxContainer2"]
+custom_minimum_size = Vector2(0, 45)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 7.0
+
+[node name="HBoxContainer" type="HBoxContainer" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer"]
+custom_minimum_size = Vector2(0, 45)
+layout_mode = 2
+
+[node name="TileSearchInput" type="LineEdit" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer/HBoxContainer"]
+custom_minimum_size = Vector2(400, 0)
+layout_mode = 2
+placeholder_text = "搜索"
+
+[node name="TileSearchButton" type="Button" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+icon = ExtResource("3_htmoo")
+
+[node name="TileAddButton" type="Button" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+icon = ExtResource("4_6incc")
+
+[node name="TileEditButton" type="Button" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+icon = ExtResource("5_0y7kc")
+
+[node name="TileDeleteButton" type="Button" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+icon = ExtResource("6_jwxdd")
+
+[node name="ScrollContainer" type="ScrollContainer" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+size_flags_stretch_ratio = 7.0
+
+[node name="TileButton" type="Button" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer/ScrollContainer"]
+custom_minimum_size = Vector2(200, 60)
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="Icon" type="TextureRect" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer/ScrollContainer/TileButton"]
+layout_mode = 1
+anchors_preset = 9
+anchor_bottom = 1.0
+offset_left = 6.0
+offset_top = 6.0
+offset_right = 54.0
+offset_bottom = -6.0
+grow_vertical = 2
+mouse_filter = 2
+texture = ExtResource("5_d0rev")
+
+[node name="TileName" type="Label" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer/ScrollContainer/TileButton"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 59.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "Name"
+vertical_alignment = 1
+clip_text = true
+text_overrun_behavior = 3
+
+[node name="SelectTexture" type="NinePatchRect" parent="Panel/MarginContainer/HBoxContainer2/VBoxContainer/ScrollContainer/TileButton"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("5_l4lwx")
+region_rect = Rect2(0, 0, 36, 36)
+patch_margin_left = 3
+patch_margin_top = 3
+patch_margin_right = 3
+patch_margin_bottom = 3
+
+[node name="Panel" type="Panel" parent="Panel/MarginContainer/HBoxContainer2"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 3.0
+
+[node name="ScrollContainer" type="ScrollContainer" parent="Panel/MarginContainer/HBoxContainer2/Panel"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 3
+size_flags_stretch_ratio = 3.0
+
+[node name="Preview" type="Panel" parent="Panel/MarginContainer/HBoxContainer2/Panel/ScrollContainer"]
+custom_minimum_size = Vector2(0, 450)
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="Name" type="Label" parent="Panel/MarginContainer/HBoxContainer2/Panel/ScrollContainer/Preview"]
+layout_mode = 1
+anchors_preset = 10
+anchor_right = 1.0
+offset_bottom = 40.0
+grow_horizontal = 2
+text = "Name"
+horizontal_alignment = 1
+vertical_alignment = 1
+clip_text = true
+text_overrun_behavior = 3
+
+[node name="PreviewImage" type="TextureRect" parent="Panel/MarginContainer/HBoxContainer2/Panel/ScrollContainer/Preview"]
+custom_minimum_size = Vector2(0, 410)
+layout_mode = 1
+anchors_preset = 12
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 2.0
+offset_top = -412.0
+offset_right = -2.0
+offset_bottom = -2.0
+grow_horizontal = 2
+grow_vertical = 0
+expand_mode = 2
+stretch_mode = 5
diff --git a/DungeonShooting_Godot/prefab/ui/TileSetEditorTerrain.tscn b/DungeonShooting_Godot/prefab/ui/TileSetEditorTerrain.tscn
new file mode 100644
index 0000000..9bb5cd2
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/TileSetEditorTerrain.tscn
@@ -0,0 +1,365 @@
+[gd_scene load_steps=16 format=3 uid="uid://dfqb73y4br8yd"]
+
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorTerrain/TileSetEditorTerrainPanel.cs" id="1_6jjk7"]
+[ext_resource type="Texture2D" uid="uid://n4atvj5fkcpg" path="res://resource/sprite/ui/commonIcon/Add.png" id="2_ns54l"]
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorTerrain/down/TileEditArea.cs" id="2_ynf0r"]
+[ext_resource type="Script" path="res://src/game/common/ui/EditorMaskBrush.cs" id="3_gydh0"]
+[ext_resource type="Texture2D" uid="uid://c5778ntk2rdon" path="res://resource/sprite/ui/commonIcon/Delete.png" id="3_jn1bd"]
+[ext_resource type="Texture2D" uid="uid://dggb6p4sdmfry" path="res://resource/sprite/ui/commonIcon/Edit.png" id="3_xmuhh"]
+[ext_resource type="Texture2D" uid="uid://bn47bmilcw4x0" path="res://resource/sprite/ui/commonIcon/Select2.png" id="4_ka47m"]
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorTerrain/up/TileEditTerrain.cs" id="5_0x7yx"]
+[ext_resource type="Texture2D" uid="uid://d2wslibovwv7w" path="res://resource/sprite/ui/commonIcon/CenterTool.png" id="5_08bc4"]
+[ext_resource type="Texture2D" uid="uid://bud6ah5xyey37" path="res://resource/sprite/map/TerrainMask2.png" id="5_xabgh"]
+[ext_resource type="Texture2D" uid="uid://dyshwhf3101em" path="res://resource/sprite/map/TerrainMask4.png" id="6_vbhca"]
+[ext_resource type="Texture2D" uid="uid://c4ltpf5a3egu1" path="res://resource/sprite/ui/commonIcon/Error_mini.png" id="6_vh7rd"]
+[ext_resource type="Texture2D" uid="uid://chisfq2alcq16" path="res://resource/sprite/map/TerrainMask3.png" id="6_vmj5y"]
+[ext_resource type="Texture2D" uid="uid://cvjj6jnmxgprw" path="res://resource/sprite/map/TerrainMask.png" id="7_g8dxk"]
+[ext_resource type="Script" path="res://src/game/ui/tileSetEditorTerrain/up/TerrainBrush.cs" id="7_lmu64"]
+
+[node name="TileSetEditorTerrain" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_6jjk7")
+
+[node name="VSplitContainer" type="VSplitContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="PanelTop" type="Panel" parent="VSplitContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+size_flags_stretch_ratio = 50.0
+
+[node name="HSplitContainer" type="HSplitContainer" parent="VSplitContainer/PanelTop"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="TopTab" type="Panel" parent="VSplitContainer/PanelTop/HSplitContainer"]
+custom_minimum_size = Vector2(270, 0)
+layout_mode = 2
+
+[node name="VBoxContainer" type="VBoxContainer" parent="VSplitContainer/PanelTop/HSplitContainer/TopTab"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="HBoxContainer" type="HBoxContainer" parent="VSplitContainer/PanelTop/HSplitContainer/TopTab/VBoxContainer"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+
+[node name="Label" type="Label" parent="VSplitContainer/PanelTop/HSplitContainer/TopTab/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "地形:"
+
+[node name="AddButton" type="Button" parent="VSplitContainer/PanelTop/HSplitContainer/TopTab/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+icon = ExtResource("2_ns54l")
+
+[node name="EditButton" type="Button" parent="VSplitContainer/PanelTop/HSplitContainer/TopTab/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+icon = ExtResource("3_xmuhh")
+
+[node name="DeleteButton" type="Button" parent="VSplitContainer/PanelTop/HSplitContainer/TopTab/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+icon = ExtResource("3_jn1bd")
+
+[node name="ScrollContainer" type="ScrollContainer" parent="VSplitContainer/PanelTop/HSplitContainer/TopTab/VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="TerrainTab" type="Button" parent="VSplitContainer/PanelTop/HSplitContainer/TopTab/VBoxContainer/ScrollContainer"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+size_flags_horizontal = 3
+text = "name"
+alignment = 0
+text_overrun_behavior = 3
+
+[node name="ErrorIcon" type="TextureRect" parent="VSplitContainer/PanelTop/HSplitContainer/TopTab/VBoxContainer/ScrollContainer/TerrainTab"]
+layout_mode = 1
+anchors_preset = 6
+anchor_left = 1.0
+anchor_top = 0.5
+anchor_right = 1.0
+anchor_bottom = 0.5
+offset_left = -45.0
+offset_top = -20.0
+offset_right = -5.0
+offset_bottom = 20.0
+grow_horizontal = 0
+grow_vertical = 2
+mouse_filter = 2
+texture = ExtResource("6_vh7rd")
+
+[node name="SelectTexture" type="NinePatchRect" parent="VSplitContainer/PanelTop/HSplitContainer/TopTab/VBoxContainer/ScrollContainer/TerrainTab"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("4_ka47m")
+patch_margin_left = 3
+patch_margin_top = 3
+patch_margin_right = 3
+patch_margin_bottom = 3
+
+[node name="TopBg" type="ColorRect" parent="VSplitContainer/PanelTop/HSplitContainer"]
+clip_children = 2
+z_index = 1
+layout_mode = 2
+size_flags_horizontal = 3
+color = Color(0.496094, 0.496094, 0.496094, 1)
+script = ExtResource("5_0x7yx")
+
+[node name="TerrainRoot" type="Control" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg"]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -291.0
+offset_top = -92.0
+offset_right = -98.0
+offset_bottom = 4.0
+grow_horizontal = 2
+grow_vertical = 2
+scale = Vector2(3, 3)
+mouse_filter = 2
+
+[node name="CellRoot" type="Control" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot"]
+layout_mode = 3
+anchors_preset = 0
+offset_right = 1.0
+offset_bottom = 1.0
+mouse_filter = 2
+
+[node name="RightCell" type="Control" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot/CellRoot"]
+z_index = 1
+anchors_preset = 0
+offset_right = 16.0
+offset_bottom = 16.0
+mouse_filter = 2
+
+[node name="CellTexture" type="Sprite2D" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot/CellRoot/RightCell"]
+z_index = -1
+centered = false
+
+[node name="TerrainTexture1" type="TextureRect" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot"]
+self_modulate = Color(1, 1, 1, 0.27451)
+custom_minimum_size = Vector2(192, 64)
+layout_mode = 1
+offset_right = 192.0
+offset_bottom = 64.0
+mouse_filter = 2
+texture = ExtResource("7_g8dxk")
+
+[node name="Label" type="Label" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot/TerrainTexture1"]
+layout_mode = 0
+offset_top = -10.0
+offset_right = 136.0
+offset_bottom = 30.0
+scale = Vector2(0.25, 0.25)
+text = "顶部墙壁"
+
+[node name="TerrainTexture2" type="TextureRect" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot"]
+self_modulate = Color(1, 1, 1, 0.27451)
+custom_minimum_size = Vector2(64, 16)
+layout_mode = 1
+offset_top = 80.0
+offset_right = 64.0
+offset_bottom = 112.0
+mouse_filter = 2
+texture = ExtResource("5_xabgh")
+
+[node name="Label" type="Label" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot/TerrainTexture2"]
+layout_mode = 0
+offset_top = -10.0
+offset_right = 136.0
+offset_bottom = 30.0
+scale = Vector2(0.25, 0.25)
+text = "侧方墙壁"
+
+[node name="TerrainTexture3" type="TextureRect" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot"]
+self_modulate = Color(1, 1, 1, 0.27451)
+custom_minimum_size = Vector2(16, 16)
+layout_mode = 1
+offset_left = 80.0
+offset_top = 80.0
+offset_right = 96.0
+offset_bottom = 96.0
+mouse_filter = 2
+texture = ExtResource("6_vmj5y")
+
+[node name="Label" type="Label" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot/TerrainTexture3"]
+layout_mode = 0
+offset_top = -10.0
+offset_right = 136.0
+offset_bottom = 30.0
+scale = Vector2(0.25, 0.25)
+text = "地板"
+
+[node name="TerrainTexture4" type="TextureRect" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot"]
+visible = false
+self_modulate = Color(1, 1, 1, 0.27451)
+custom_minimum_size = Vector2(80, 48)
+layout_mode = 1
+offset_right = 80.0
+offset_bottom = 48.0
+mouse_filter = 2
+texture = ExtResource("6_vbhca")
+
+[node name="Label" type="Label" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot/TerrainTexture4"]
+layout_mode = 0
+offset_top = -10.0
+offset_right = 136.0
+offset_bottom = 30.0
+scale = Vector2(0.25, 0.25)
+text = "地形"
+
+[node name="Brush" type="Control" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg/TerrainRoot"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+script = ExtResource("7_lmu64")
+
+[node name="Grid" type="ColorRect" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+color = Color(1, 1, 1, 0)
+
+[node name="FocusBtn" type="TextureButton" parent="VSplitContainer/PanelTop/HSplitContainer/TopBg"]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -79.0
+offset_top = 14.0
+offset_right = -15.0
+offset_bottom = 78.0
+grow_horizontal = 0
+tooltip_text = "聚焦"
+texture_normal = ExtResource("5_08bc4")
+ignore_texture_size = true
+stretch_mode = 5
+
+[node name="PanelBottom" type="Panel" parent="VSplitContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+size_flags_stretch_ratio = 50.0
+
+[node name="BottomBg" type="ColorRect" parent="VSplitContainer/PanelBottom"]
+clip_children = 2
+z_index = 1
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 2.0
+offset_top = 2.0
+offset_right = -2.0
+offset_bottom = -2.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0.203922, 0.203922, 0.203922, 1)
+script = ExtResource("2_ynf0r")
+
+[node name="TileTexture" type="TextureRect" parent="VSplitContainer/PanelBottom/BottomBg"]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+grow_horizontal = 2
+grow_vertical = 2
+scale = Vector2(2, 2)
+mouse_filter = 2
+
+[node name="CellRoot" type="Control" parent="VSplitContainer/PanelBottom/BottomBg/TileTexture"]
+anchors_preset = 0
+offset_right = 1.0
+offset_bottom = 1.0
+mouse_filter = 2
+
+[node name="BottomCell" type="ColorRect" parent="VSplitContainer/PanelBottom/BottomBg/TileTexture/CellRoot"]
+layout_mode = 0
+offset_right = 16.0
+offset_bottom = 16.0
+mouse_filter = 2
+color = Color(0, 0, 0, 0.588235)
+
+[node name="MaskBrush" type="Control" parent="VSplitContainer/PanelBottom/BottomBg/TileTexture"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+script = ExtResource("3_gydh0")
+
+[node name="Grid" type="ColorRect" parent="VSplitContainer/PanelBottom/BottomBg"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+color = Color(1, 1, 1, 0)
+
+[node name="FocusBtn" type="TextureButton" parent="VSplitContainer/PanelBottom/BottomBg"]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -79.0
+offset_top = 14.0
+offset_right = -15.0
+offset_bottom = 78.0
+grow_horizontal = 0
+tooltip_text = "聚焦"
+texture_normal = ExtResource("5_08bc4")
+ignore_texture_size = true
+stretch_mode = 5
+
+[node name="DragSprite" type="Sprite2D" parent="."]
+z_index = 10
+region_enabled = true
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0008.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0008.tscn
index faf871a..d7de309 100644
--- a/DungeonShooting_Godot/prefab/weapon/Weapon0008.tscn
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0008.tscn
@@ -154,7 +154,7 @@
position = Vector2(-2, -3)
[node name="FirePoint" type="Marker2D" parent="AnimatedSprite"]
-position = Vector2(7, -1.5)
+position = Vector2(12, -1.5)
[node name="Collision" type="CollisionShape2D" parent="."]
position = Vector2(3, 0)
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0009.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0009.tscn
index 70a21c3..285a2fa 100644
--- a/DungeonShooting_Godot/prefab/weapon/Weapon0009.tscn
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0009.tscn
@@ -154,7 +154,7 @@
position = Vector2(-2, -2)
[node name="FirePoint" type="Marker2D" parent="AnimatedSprite"]
-position = Vector2(13, -0.5)
+position = Vector2(19, -1.5)
[node name="Collision" type="CollisionShape2D" parent="."]
position = Vector2(6, 0)
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0010.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0010.tscn
new file mode 100644
index 0000000..571ff9f
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0010.tscn
@@ -0,0 +1,166 @@
+[gd_scene load_steps=11 format=3 uid="uid://dhnrfqcojc367"]
+
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="1_bw5v7"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_pht5a"]
+[ext_resource type="SpriteFrames" uid="uid://cd7fhaqk587o2" path="res://resource/spriteFrames/weapon/Weapon0010.tres" id="3_nj0c6"]
+[ext_resource type="Animation" uid="uid://v3dltmdstqad" path="res://resource/animation/weapon/Weapon_floodlight.res" id="4_2cd01"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_cbiyh"]
+resource_local_to_scene = true
+shader = ExtResource("2_pht5a")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_0oy4o"]
+resource_local_to_scene = true
+shader = ExtResource("2_pht5a")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_evjpf"]
+size = Vector2(26, 6)
+
+[sub_resource type="Animation" id="Animation_x136i"]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [0.0]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("AnimatedSprite:animation")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [&"default"]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("AnimatedSprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [0]
+}
+tracks/3/type = "value"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("AnimatedSprite:rotation")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [0.0]
+}
+
+[sub_resource type="Animation" id="Animation_8xqs8"]
+resource_name = "reloading"
+length = 1.7
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:animation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 1.7),
+"transitions": PackedFloat32Array(1, 1),
+"update": 1,
+"values": [&"reloading_frame", &"default"]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("AnimatedSprite:frame")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0, 1.7),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [0, 18]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("AnimatedSprite:rotation")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0, 0.2, 1.5, 1.7),
+"transitions": PackedFloat32Array(1, 1, 1, 1),
+"update": 0,
+"values": [0.0, -0.436332, -0.436332, 0.0]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"]
+_data = {
+"RESET": SubResource("Animation_x136i"),
+"floodlight": ExtResource("4_2cd01"),
+"reloading": SubResource("Animation_8xqs8")
+}
+
+[node name="Weapon0010" type="CharacterBody2D" node_paths=PackedStringArray("FirePoint", "ShellPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 4
+script = ExtResource("1_bw5v7")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_cbiyh")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+modulate = Color(1.9, 1.9, 1.9, 1)
+material = SubResource("ShaderMaterial_0oy4o")
+sprite_frames = ExtResource("3_nj0c6")
+offset = Vector2(4, -2)
+
+[node name="ShellPoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(-3, -3)
+
+[node name="FirePoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(21, -1)
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(5, -1)
+shape = SubResource("RectangleShape2D_evjpf")
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+libraries = {
+"": SubResource("AnimationLibrary_trkjd")
+}
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0011.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0011.tscn
new file mode 100644
index 0000000..278775a
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0011.tscn
@@ -0,0 +1,61 @@
+[gd_scene load_steps=8 format=3 uid="uid://c17ol2s34ehp7"]
+
+[ext_resource type="PackedScene" uid="uid://cxltmhhp4rbyk" path="res://prefab/weapon/WeaponTemplate.tscn" id="1_fgcwf"]
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="2_m84k4"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_4rq0j"]
+[ext_resource type="SpriteFrames" uid="uid://xvfg1a0xj7ng" path="res://resource/spriteFrames/weapon/Weapon0011.tres" id="4_bnkqc"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_m6bme"]
+resource_local_to_scene = true
+shader = ExtResource("3_4rq0j")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_fqjj0"]
+resource_local_to_scene = true
+shader = ExtResource("3_4rq0j")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_iq77m"]
+size = Vector2(20, 8)
+
+[node name="Weapon0011" node_paths=PackedStringArray("FirePoint", "ShellPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_fgcwf")]
+script = ExtResource("2_m84k4")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_m6bme")
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_fqjj0")
+position = Vector2(3, -1)
+sprite_frames = ExtResource("4_bnkqc")
+
+[node name="ShellPoint" parent="AnimatedSprite" index="0"]
+position = Vector2(-4, -2)
+
+[node name="FirePoint" parent="AnimatedSprite" index="1"]
+position = Vector2(15, -0.5)
+
+[node name="Collision" parent="." index="2"]
+visible = true
+position = Vector2(3, 0)
+shape = SubResource("RectangleShape2D_iq77m")
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0013.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0013.tscn
new file mode 100644
index 0000000..c7c9280
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0013.tscn
@@ -0,0 +1,61 @@
+[gd_scene load_steps=8 format=3 uid="uid://chxa5inh7hgxs"]
+
+[ext_resource type="PackedScene" uid="uid://cxltmhhp4rbyk" path="res://prefab/weapon/WeaponTemplate.tscn" id="1_f1h8o"]
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="2_bpgfu"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_0l3ip"]
+[ext_resource type="SpriteFrames" uid="uid://cawsi08vaqfrn" path="res://resource/spriteFrames/weapon/Weapon0013.tres" id="4_w7ibl"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_sy2aq"]
+resource_local_to_scene = true
+shader = ExtResource("3_0l3ip")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_1rqqj"]
+resource_local_to_scene = true
+shader = ExtResource("3_0l3ip")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_4pn1i"]
+size = Vector2(20, 6)
+
+[node name="Weapon0013" node_paths=PackedStringArray("FirePoint", "ShellPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_f1h8o")]
+script = ExtResource("2_bpgfu")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_sy2aq")
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_1rqqj")
+position = Vector2(4, -1)
+sprite_frames = ExtResource("4_w7ibl")
+
+[node name="ShellPoint" parent="AnimatedSprite" index="0"]
+position = Vector2(2, -1)
+
+[node name="FirePoint" parent="AnimatedSprite" index="1"]
+position = Vector2(12, -1)
+
+[node name="Collision" parent="." index="2"]
+visible = true
+position = Vector2(4, 0)
+shape = SubResource("RectangleShape2D_4pn1i")
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0014.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0014.tscn
new file mode 100644
index 0000000..b880d0d
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0014.tscn
@@ -0,0 +1,61 @@
+[gd_scene load_steps=8 format=3 uid="uid://dvhan2bubtey0"]
+
+[ext_resource type="PackedScene" uid="uid://cxltmhhp4rbyk" path="res://prefab/weapon/WeaponTemplate.tscn" id="1_3op5w"]
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="2_toxwq"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_ch83c"]
+[ext_resource type="SpriteFrames" uid="uid://taxfr2lcy0f3" path="res://resource/spriteFrames/weapon/Weapon0014.tres" id="4_xdmw2"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_sy2aq"]
+resource_local_to_scene = true
+shader = ExtResource("3_ch83c")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_x2qcg"]
+resource_local_to_scene = true
+shader = ExtResource("3_ch83c")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_4pn1i"]
+size = Vector2(10.75, 7.75)
+
+[node name="Weapon0014" node_paths=PackedStringArray("FirePoint", "ShellPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_3op5w")]
+script = ExtResource("2_toxwq")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_sy2aq")
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_x2qcg")
+position = Vector2(4, 0)
+sprite_frames = ExtResource("4_xdmw2")
+
+[node name="ShellPoint" parent="AnimatedSprite" index="0"]
+position = Vector2(-3, -2)
+
+[node name="FirePoint" parent="AnimatedSprite" index="1"]
+position = Vector2(9, -2)
+
+[node name="Collision" parent="." index="2"]
+visible = true
+position = Vector2(4, 0)
+shape = SubResource("RectangleShape2D_4pn1i")
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0016.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0016.tscn
new file mode 100644
index 0000000..3e1648b
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0016.tscn
@@ -0,0 +1,170 @@
+[gd_scene load_steps=11 format=3 uid="uid://b7s3fvpkltk1d"]
+
+[ext_resource type="Script" path="res://src/game/activity/weapon/bow/Bow.cs" id="1_k4gvs"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_cui8l"]
+[ext_resource type="SpriteFrames" uid="uid://ccrflh6pjmq7r" path="res://resource/spriteFrames/weapon/Weapon0016.tres" id="4_buwa4"]
+[ext_resource type="Animation" uid="uid://v3dltmdstqad" path="res://resource/animation/weapon/Weapon_floodlight.res" id="4_nl06y"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_sy2aq"]
+resource_local_to_scene = true
+shader = ExtResource("3_cui8l")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_x2qcg"]
+resource_local_to_scene = true
+shader = ExtResource("3_cui8l")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_4pn1i"]
+size = Vector2(10.1875, 15.9375)
+
+[sub_resource type="Animation" id="Animation_x136i"]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [0.0]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("AnimatedSprite:animation")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [&"pull_frame"]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("AnimatedSprite:frame")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [0]
+}
+tracks/3/type = "value"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("AnimatedSprite/ArrowPoint:position")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [Vector2(8, 0)]
+}
+
+[sub_resource type="Animation" id="Animation_njx7h"]
+resource_name = "pull"
+length = 0.5
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:animation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [&"pull_frame"]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("AnimatedSprite:frame")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0, 0.5),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [0, 10]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("AnimatedSprite/ArrowPoint:position")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0, 0.5),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [Vector2(8, 0), Vector2(-3, 0)]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"]
+_data = {
+"RESET": SubResource("Animation_x136i"),
+"floodlight": ExtResource("4_nl06y"),
+"pull": SubResource("Animation_njx7h")
+}
+
+[node name="Weapon0016" type="CharacterBody2D" node_paths=PackedStringArray("ArrowPoint", "FirePoint", "ShellPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 4
+script = ExtResource("1_k4gvs")
+ArrowPoint = NodePath("AnimatedSprite/ArrowPoint")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_sy2aq")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_x2qcg")
+position = Vector2(6, -2)
+sprite_frames = ExtResource("4_buwa4")
+animation = &"pull_frame"
+
+[node name="ShellPoint" type="Marker2D" parent="AnimatedSprite"]
+
+[node name="FirePoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(9, 0)
+
+[node name="ArrowPoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(8, 0)
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+visible = false
+position = Vector2(1, 0)
+shape = SubResource("RectangleShape2D_4pn1i")
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+libraries = {
+"": SubResource("AnimationLibrary_trkjd")
+}
diff --git a/DungeonShooting_Godot/project.godot b/DungeonShooting_Godot/project.godot
index 3a53575..06a6754 100644
--- a/DungeonShooting_Godot/project.godot
+++ b/DungeonShooting_Godot/project.godot
@@ -10,7 +10,7 @@
[application]
-config/name="DungeonShooting"
+config/name="枪火地牢"
run/main_scene="res://scene/Main.tscn"
config/features=PackedStringArray("4.2", "C#")
config/icon="res://icon.png"
@@ -24,7 +24,6 @@
window/size/viewport_width=1920
window/size/viewport_height=1080
window/stretch/aspect="keep_width"
-window/vsync/vsync_mode=0
[dotnet]
@@ -34,6 +33,14 @@
enabled=PackedStringArray("res://addons/dungeonShooting_plugin/plugin.cfg")
+[file_customization]
+
+folder_colors={
+"res://prefab/": "orange",
+"res://resource/": "blue",
+"res://src/": "green"
+}
+
[gui]
theme/custom="res://resource/theme/mainTheme.tres"
@@ -110,36 +117,43 @@
fire={
"deadzone": 0.5,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":10,"pressure":0.0,"pressed":true,"script":null)
]
}
move_left={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
]
}
move_right={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
]
}
move_up={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
]
}
move_down={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
]
}
exchangeWeapon={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":true,"script":null)
]
}
throwWeapon={
"deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":71,"key_label":0,"unicode":103,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":71,"physical_keycode":71,"key_label":71,"unicode":103,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":true,"script":null)
]
}
mouse_roll_up={
@@ -155,31 +169,37 @@
interactive={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
]
}
reload={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":true,"script":null)
]
}
meleeAttack={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
]
}
roll={
"deadzone": 0.5,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(75, 15),"global_position":Vector2(79, 56),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":9,"pressure":0.0,"pressed":true,"script":null)
]
}
useActiveProp={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
]
}
removeProp={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":true,"script":null)
]
}
exchangeProp={
@@ -189,12 +209,29 @@
}
map={
"deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
]
}
menu={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":4,"pressure":0.0,"pressed":true,"script":null)
+]
+}
+mouse_left={
+"deadzone": 0.5,
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(136, 13),"global_position":Vector2(139, 45),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
+]
+}
+mouse_middle={
+"deadzone": 0.5,
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":4,"position":Vector2(185, 17),"global_position":Vector2(189, 58),"factor":1.0,"button_index":3,"canceled":false,"pressed":true,"double_click":false,"script":null)
+]
+}
+mouse_right={
+"deadzone": 0.5,
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(304, 18),"global_position":Vector2(308, 59),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
]
}
@@ -206,7 +243,7 @@
2d_physics/layer_4="player"
2d_physics/layer_5="enemy"
2d_physics/layer_6="affiliation"
-2d_physics/layer_7="onHead"
+2d_physics/layer_7="onHand"
2d_physics/layer_8="debris"
2d_physics/layer_9="throwing"
@@ -216,6 +253,7 @@
[navigation]
+2d/default_cell_size=4.0
2d/default_edge_connection_margin=4
[physics]
diff --git a/DungeonShooting_Godot/resource/config/ActivityBase.json b/DungeonShooting_Godot/resource/config/ActivityBase.json
index c49dbc4..78354b8 100644
--- a/DungeonShooting_Godot/resource/config/ActivityBase.json
+++ b/DungeonShooting_Godot/resource/config/ActivityBase.json
@@ -3,6 +3,8 @@
"Id": "role0001",
"Type": 3,
"Name": "\u73A9\u5BB6",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u73A9\u5BB6",
"Details": "",
"IsStatic": false,
@@ -15,6 +17,8 @@
"Id": "enemy0001",
"Type": 4,
"Name": "\u654C\u4EBA",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u654C\u4EBA",
"Details": "",
"IsStatic": false,
@@ -27,6 +31,8 @@
"Id": "enemy0002",
"Type": 4,
"Name": "\u654C\u4EBA2",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u654C\u4EBA2",
"Details": "",
"IsStatic": false,
@@ -39,6 +45,8 @@
"Id": "weapon0001",
"Type": 5,
"Name": "\u6B65\u67AA",
+ "Quality": 3,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -51,6 +59,8 @@
"Id": "weapon0002",
"Type": 5,
"Name": "\u9730\u5F39\u67AA",
+ "Quality": 3,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -63,6 +73,8 @@
"Id": "weapon0003",
"Type": 5,
"Name": "\u624B\u67AA",
+ "Quality": 2,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -75,6 +87,8 @@
"Id": "weapon0004",
"Type": 5,
"Name": "\u5200",
+ "Quality": 4,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -87,6 +101,8 @@
"Id": "weapon0005",
"Type": 5,
"Name": "\u72D9\u51FB\u67AA",
+ "Quality": 4,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -99,6 +115,8 @@
"Id": "weapon0006",
"Type": 5,
"Name": "\u51B2\u950B\u67AA",
+ "Quality": 2,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -111,6 +129,8 @@
"Id": "weapon0007",
"Type": 5,
"Name": "\u6C64\u59C6\u900A\u51B2\u950B\u67AA",
+ "Quality": 4,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -123,6 +143,8 @@
"Id": "weapon0008",
"Type": 5,
"Name": "\u6FC0\u5149\u624B\u67AA",
+ "Quality": 3,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -135,6 +157,8 @@
"Id": "weapon0009",
"Type": 5,
"Name": "\u69B4\u5F39\u53D1\u5C04\u5668",
+ "Quality": 4,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -144,9 +168,81 @@
"ShowInMapEditor": true
},
{
+ "Id": "weapon0010",
+ "Type": 5,
+ "Name": "M1\u578B\u70ED\u80FD\u72D9\u51FB\u67AA",
+ "Quality": 5,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/weapon/Weapon0010.tscn",
+ "Icon": "res://resource/sprite/weapon/weapon0010/Weapon0010.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "weapon0011",
+ "Type": 5,
+ "Name": "weapon0011",
+ "Quality": 5,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/weapon/Weapon0011.tscn",
+ "Icon": "res://resource/sprite/weapon/weapon0011/Weapon0011.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "weapon0013",
+ "Type": 5,
+ "Name": "P90",
+ "Quality": 4,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/weapon/Weapon0013.tscn",
+ "Icon": "res://resource/sprite/weapon/weapon0013/Weapon0013.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "weapon0014",
+ "Type": 5,
+ "Name": "\u5DE6\u8F6E",
+ "Quality": 2,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/weapon/Weapon0014.tscn",
+ "Icon": "res://resource/sprite/weapon/weapon0014/Weapon0014.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "weapon0016",
+ "Type": 5,
+ "Name": "\u6728\u8D28\u77ED\u5F13",
+ "Quality": 2,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/weapon/Weapon0016.tscn",
+ "Icon": "res://resource/sprite/weapon/weapon0016/weapon0016.png",
+ "ShowInMapEditor": true
+ },
+ {
"Id": "bullet0001",
"Type": 6,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -159,6 +255,8 @@
"Id": "bullet0002",
"Type": 6,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -171,6 +269,8 @@
"Id": "bullet0003",
"Type": 6,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -183,6 +283,8 @@
"Id": "bullet0004",
"Type": 6,
"Name": "\u69B4\u5F39\u70AE",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -195,6 +297,8 @@
"Id": "bullet0005",
"Type": 6,
"Name": "\u629B\u7269\u7EBF\u7C98\u6DB2\u5B50\u5F39",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -204,9 +308,67 @@
"ShowInMapEditor": false
},
{
+ "Id": "bullet0006",
+ "Type": 6,
+ "Name": "\u62D6\u5C3E\u5B50\u5F39",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "0003",
+ "Prefab": "res://prefab/bullet/normal/Bullet0006.tscn",
+ "Icon": "",
+ "ShowInMapEditor": false
+ },
+ {
+ "Id": "bullet0007",
+ "Type": 6,
+ "Name": "",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "0003",
+ "Prefab": "res://prefab/bullet/normal/Bullet0007.tscn",
+ "Icon": "",
+ "ShowInMapEditor": false
+ },
+ {
+ "Id": "bullet0008",
+ "Type": 6,
+ "Name": "",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "0003",
+ "Prefab": "res://prefab/bullet/normal/Bullet0008.tscn",
+ "Icon": "",
+ "ShowInMapEditor": false
+ },
+ {
+ "Id": "bullet0009",
+ "Type": 6,
+ "Name": "\u5F13\u7BAD",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/bullet/normal/Bullet0009.tscn",
+ "Icon": "",
+ "ShowInMapEditor": false
+ },
+ {
"Id": "shell0001",
"Type": 7,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -219,6 +381,8 @@
"Id": "shell0002",
"Type": 7,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -231,6 +395,8 @@
"Id": "shell0003",
"Type": 7,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -243,6 +409,8 @@
"Id": "shell0004",
"Type": 7,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "",
"Details": "",
"IsStatic": false,
@@ -255,6 +423,8 @@
"Id": "enemy_dead0001",
"Type": 8,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u654C\u4EBA1\u6B7B\u4EA1\u788E\u7247",
"Details": "",
"IsStatic": false,
@@ -267,6 +437,8 @@
"Id": "enemy_dead0002",
"Type": 8,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u654C\u4EBA2\u6B7B\u4EA1",
"Details": "",
"IsStatic": false,
@@ -279,11 +451,13 @@
"Id": "prop0001",
"Type": 9,
"Name": "\u978B\u5B50",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u79FB\u52A8\u901F\u5EA6",
"Details": "",
"IsStatic": false,
"__Material": "",
- "Prefab": "res://prefab/effect/enemy/Effect0001.tscn",
+ "Prefab": "res://prefab/prop/buff/BuffProp0001.tscn",
"Icon": "res://resource/sprite/prop/buff/BuffProp0001.png",
"ShowInMapEditor": true
},
@@ -291,6 +465,8 @@
"Id": "prop0002",
"Type": 9,
"Name": "\u5FC3\u4E4B\u5BB9\u5668",
+ "Quality": 3,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u8840\u91CF\u4E0A\u9650",
"Details": "",
"IsStatic": false,
@@ -303,6 +479,8 @@
"Id": "prop0003",
"Type": 9,
"Name": "\u62A4\u76FE",
+ "Quality": 3,
+ "Price": 0,
"Intro": "\u53EF\u4EE5\u62B5\u6321\u5B50\u5F39\uFF0C\u968F\u65F6\u95F4\u63A8\u79FB\u81EA\u52A8\u6062\u590D",
"Details": "",
"IsStatic": false,
@@ -315,6 +493,8 @@
"Id": "prop0004",
"Type": 9,
"Name": "\u62A4\u76FE\u8BA1\u65F6\u5668",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u62A4\u76FE\u6062\u590D\u901F\u5EA6",
"Details": "",
"IsStatic": false,
@@ -327,6 +507,8 @@
"Id": "prop0005",
"Type": 9,
"Name": "\u6740\u4F24\u5F39",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u5B50\u5F39\u4F24\u5BB3",
"Details": "",
"IsStatic": false,
@@ -339,6 +521,8 @@
"Id": "prop0006",
"Type": 9,
"Name": "\u7EA2\u5B9D\u77F3\u6212\u6307",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u53D7\u4F24\u540E\u5EF6\u957F\u65E0\u654C\u65F6\u95F4",
"Details": "",
"IsStatic": false,
@@ -351,6 +535,8 @@
"Id": "prop0007",
"Type": 9,
"Name": "\u5907\u7528\u62A4\u76FE",
+ "Quality": 3,
+ "Price": 0,
"Intro": "\u53D7\u4F24\u65F6\u6709\u4E00\u5B9A\u6982\u7387\u62B5\u6D88\u4F24\u5BB3",
"Details": "",
"IsStatic": false,
@@ -363,6 +549,8 @@
"Id": "prop0008",
"Type": 9,
"Name": "\u773C\u955C",
+ "Quality": 3,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u6B66\u5668\u7CBE\u51C6\u5EA6",
"Details": "",
"IsStatic": false,
@@ -375,6 +563,8 @@
"Id": "prop0009",
"Type": 9,
"Name": "\u9AD8\u901F\u5B50\u5F39",
+ "Quality": 3,
+ "Price": 0,
"Intro": "\u63D0\u9AD8\u5B50\u5F39\u901F\u5EA6\u548C\u5C04\u7A0B",
"Details": "",
"IsStatic": false,
@@ -387,6 +577,8 @@
"Id": "prop0010",
"Type": 9,
"Name": "\u5206\u88C2\u5B50\u5F39",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u5B50\u5F39\u6570\u91CF\u7FFB\u500D, \u4F46\u662F\u7CBE\u51C6\u5EA6, \u51FB\u9000\u548C\u4F24\u5BB3\u964D\u4F4E",
"Details": "",
"IsStatic": false,
@@ -399,6 +591,8 @@
"Id": "prop0011",
"Type": 9,
"Name": "\u5F39\u5C04\u5B50\u5F39",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u5B50\u5F39\u53CD\u5F39\u6B21\u6570\u002B2",
"Details": "",
"IsStatic": false,
@@ -411,6 +605,8 @@
"Id": "prop0012",
"Type": 9,
"Name": "\u7A7F\u900F\u5B50\u5F39",
+ "Quality": 4,
+ "Price": 0,
"Intro": "\u5B50\u5F39\u7A7F\u900F\u002B1",
"Details": "",
"IsStatic": false,
@@ -423,6 +619,8 @@
"Id": "prop0013",
"Type": 9,
"Name": "\u6B66\u5668\u80CC\u5305",
+ "Quality": 2,
+ "Price": 0,
"Intro": "\u6B66\u5668\u5BB9\u91CF\u002B1",
"Details": "",
"IsStatic": false,
@@ -435,6 +633,8 @@
"Id": "prop0014",
"Type": 9,
"Name": "\u9053\u5177\u80CC\u5305",
+ "Quality": 2,
+ "Price": 0,
"Intro": "\u9053\u5177\u5BB9\u91CF\u002B1",
"Details": "",
"IsStatic": false,
@@ -447,6 +647,8 @@
"Id": "prop5000",
"Type": 9,
"Name": "\u533B\u836F\u7BB1",
+ "Quality": 1,
+ "Price": 0,
"Intro": "\u4F7F\u7528\u540E\u56DE\u590D\u4E00\u9897\u7EA2\u5FC3",
"Details": "",
"IsStatic": false,
@@ -459,6 +661,8 @@
"Id": "prop5001",
"Type": 9,
"Name": "\u5F39\u836F\u7BB1",
+ "Quality": 1,
+ "Price": 0,
"Intro": "\u4F7F\u7528\u540E\u8865\u5145\u5F53\u524D\u6B66\u5668\u5907\u7528\u5F39\u836F",
"Details": "",
"IsStatic": false,
@@ -468,9 +672,25 @@
"ShowInMapEditor": true
},
{
+ "Id": "treasure_box0001",
+ "Type": 10,
+ "Name": "\u6728\u8D28\u5B9D\u7BB1",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "\u6728\u8D28\u5B9D\u7BB1",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/box/TreasureBox0001.tscn",
+ "Icon": "res://resource/sprite/box/TreasureBox0001.png",
+ "ShowInMapEditor": true
+ },
+ {
"Id": "other_door_e",
"Type": 99,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u4E1C\u4FA7)",
"Details": "",
"IsStatic": true,
@@ -483,6 +703,8 @@
"Id": "other_door_w",
"Type": 99,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u897F\u4FA7)",
"Details": "",
"IsStatic": true,
@@ -495,6 +717,8 @@
"Id": "other_door_s",
"Type": 99,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u5357\u4FA7)",
"Details": "",
"IsStatic": true,
@@ -507,6 +731,8 @@
"Id": "other_door_n",
"Type": 99,
"Name": "",
+ "Quality": 0,
+ "Price": 0,
"Intro": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u5317\u4FA7)",
"Details": "",
"IsStatic": true,
@@ -514,5 +740,47 @@
"Prefab": "res://prefab/map/RoomDoor_N.tscn",
"Icon": "",
"ShowInMapEditor": false
+ },
+ {
+ "Id": "gold_10",
+ "Type": 99,
+ "Name": "\u91D1\u5E01",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "\u83B7\u5F9710\u91D1\u5E01",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/currency/Gold10.tscn",
+ "Icon": "res://resource/sprite/ui/commonIcon/Gold_10.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "gold_5",
+ "Type": 99,
+ "Name": "\u94F6\u5E01",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "\u83B7\u5F975\u91D1\u5E01",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/currency/Gold5.tscn",
+ "Icon": "res://resource/sprite/ui/commonIcon/Gold_5.png",
+ "ShowInMapEditor": true
+ },
+ {
+ "Id": "gold_1",
+ "Type": 99,
+ "Name": "\u94DC\u5E01",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "\u83B7\u5F971\u91D1\u5E01",
+ "Details": "",
+ "IsStatic": false,
+ "__Material": "",
+ "Prefab": "res://prefab/currency/Gold1.tscn",
+ "Icon": "res://resource/sprite/ui/commonIcon/Gold_1.png",
+ "ShowInMapEditor": true
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/config/AiAttackAttr.json b/DungeonShooting_Godot/resource/config/AiAttackAttr.json
index 251daae..1d78577 100644
--- a/DungeonShooting_Godot/resource/config/AiAttackAttr.json
+++ b/DungeonShooting_Godot/resource/config/AiAttackAttr.json
@@ -1,38 +1,38 @@
[
{
"Id": "0001",
- "Remark": "",
+ "Remark": "\u6B65\u67AA",
"LockingStand": true,
"FiringStand": true,
"ShowSubline": false,
- "LockingTime": 1,
+ "LockingTime": 0.5,
"LockAngleTime": 0,
"AttackLockAngle": true,
- "BulletSpeedScale": 0.4,
+ "BulletSpeedScale": 0.3,
"AmmoConsumptionProbability": 0
},
{
"Id": "0002",
- "Remark": "",
- "LockingStand": true,
- "FiringStand": true,
- "ShowSubline": false,
- "LockingTime": 2,
- "LockAngleTime": 0,
- "AttackLockAngle": false,
- "BulletSpeedScale": 0.35,
- "AmmoConsumptionProbability": 0
- },
- {
- "Id": "0003",
- "Remark": "",
+ "Remark": "\u9730\u5F39\u67AA",
"LockingStand": true,
"FiringStand": true,
"ShowSubline": false,
"LockingTime": 1,
"LockAngleTime": 0,
"AttackLockAngle": false,
- "BulletSpeedScale": 0.35,
+ "BulletSpeedScale": 0.25,
+ "AmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0003",
+ "Remark": "\u624B\u67AA",
+ "LockingStand": true,
+ "FiringStand": true,
+ "ShowSubline": false,
+ "LockingTime": 0.4,
+ "LockAngleTime": 0,
+ "AttackLockAngle": false,
+ "BulletSpeedScale": 0.3,
"AmmoConsumptionProbability": 0
},
{
@@ -41,10 +41,10 @@
"LockingStand": false,
"FiringStand": false,
"ShowSubline": false,
- "LockingTime": 0.7,
+ "LockingTime": 0.3,
"LockAngleTime": 0,
"AttackLockAngle": true,
- "BulletSpeedScale": 0.35,
+ "BulletSpeedScale": 0.3,
"AmmoConsumptionProbability": 0
},
{
@@ -53,22 +53,22 @@
"LockingStand": true,
"FiringStand": true,
"ShowSubline": true,
- "LockingTime": 1.5,
- "LockAngleTime": 0.5,
+ "LockingTime": 1,
+ "LockAngleTime": 0.3,
"AttackLockAngle": true,
- "BulletSpeedScale": 0.5,
+ "BulletSpeedScale": 0.9,
"AmmoConsumptionProbability": 0
},
{
"Id": "0006",
- "Remark": "",
+ "Remark": "\u6C64\u59C6\u900A",
"LockingStand": true,
"FiringStand": true,
"ShowSubline": false,
"LockingTime": 0.5,
- "LockAngleTime": 0.5,
+ "LockAngleTime": 0,
"AttackLockAngle": false,
- "BulletSpeedScale": 0.35,
+ "BulletSpeedScale": 0.25,
"AmmoConsumptionProbability": 0
},
{
@@ -77,7 +77,7 @@
"LockingStand": true,
"FiringStand": true,
"ShowSubline": true,
- "LockingTime": 1.5,
+ "LockingTime": 1.2,
"LockAngleTime": 0.5,
"AttackLockAngle": true,
"BulletSpeedScale": 1,
@@ -89,10 +89,22 @@
"LockingStand": true,
"FiringStand": true,
"ShowSubline": false,
- "LockingTime": 1.5,
- "LockAngleTime": 0.5,
+ "LockingTime": 0.6,
+ "LockAngleTime": 0.2,
"AttackLockAngle": true,
"BulletSpeedScale": 0.8,
"AmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0009",
+ "Remark": "M1\u578B\u70ED\u80FD\u72D9\u51FB\u67AA",
+ "LockingStand": true,
+ "FiringStand": true,
+ "ShowSubline": false,
+ "LockingTime": 0.7,
+ "LockAngleTime": 0,
+ "AttackLockAngle": true,
+ "BulletSpeedScale": 0.3,
+ "AmmoConsumptionProbability": 0
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/config/BulletBase.json b/DungeonShooting_Godot/resource/config/BulletBase.json
index 5985b17..6074533 100644
--- a/DungeonShooting_Godot/resource/config/BulletBase.json
+++ b/DungeonShooting_Godot/resource/config/BulletBase.json
@@ -211,12 +211,152 @@
]
},
{
+ "Id": "0007",
+ "Name": "\u62D6\u5C3E\u5B50\u5F391",
+ "Type": 1,
+ "Prefab": "bullet0006",
+ "HarmRange": [
+ 10
+ ],
+ "RepelRange": [
+ 45
+ ],
+ "DeviationAngleRange": [
+ 0
+ ],
+ "SpeedRange": [
+ 350,
+ 350
+ ],
+ "LifeTimeRange": [
+ -1
+ ],
+ "DistanceRange": [
+ 600,
+ 600
+ ],
+ "VerticalSpeed": [
+ 0
+ ],
+ "BounceCount": [
+ 3
+ ],
+ "Penetration": [
+ 1
+ ]
+ },
+ {
+ "Id": "0008",
+ "Name": "\u5B50\u5F394",
+ "Type": 1,
+ "Prefab": "bullet0007",
+ "HarmRange": [
+ 4
+ ],
+ "RepelRange": [
+ 15
+ ],
+ "DeviationAngleRange": [
+ 0
+ ],
+ "SpeedRange": [
+ 350,
+ 380
+ ],
+ "LifeTimeRange": [
+ -1
+ ],
+ "DistanceRange": [
+ 400,
+ 450
+ ],
+ "VerticalSpeed": [
+ 0
+ ],
+ "BounceCount": [
+ 0
+ ],
+ "Penetration": [
+ 0
+ ]
+ },
+ {
+ "Id": "0009",
+ "Name": "\u5B50\u5F395",
+ "Type": 1,
+ "Prefab": "bullet0008",
+ "HarmRange": [
+ 4
+ ],
+ "RepelRange": [
+ 15
+ ],
+ "DeviationAngleRange": [
+ 0
+ ],
+ "SpeedRange": [
+ 350,
+ 380
+ ],
+ "LifeTimeRange": [
+ -1
+ ],
+ "DistanceRange": [
+ 400,
+ 450
+ ],
+ "VerticalSpeed": [
+ 0
+ ],
+ "BounceCount": [
+ 0
+ ],
+ "Penetration": [
+ 0
+ ]
+ },
+ {
+ "Id": "0010",
+ "Name": "\u5F13\u7BAD",
+ "Type": 1,
+ "Prefab": "bullet0009",
+ "HarmRange": [
+ 15
+ ],
+ "RepelRange": [
+ 55
+ ],
+ "DeviationAngleRange": [
+ 0
+ ],
+ "SpeedRange": [
+ 400,
+ 400
+ ],
+ "LifeTimeRange": [
+ -1
+ ],
+ "DistanceRange": [
+ 250,
+ 300
+ ],
+ "VerticalSpeed": [
+ 0
+ ],
+ "BounceCount": [
+ 0
+ ],
+ "Penetration": [
+ 0
+ ]
+ },
+ {
"Id": "1001",
"Name": "\u6FC0\u51491",
"Type": 2,
"Prefab": "res://prefab/bullet/laser/Laser0001.tscn",
"HarmRange": [
- 5
+ 7
],
"RepelRange": [
35
@@ -225,8 +365,8 @@
0
],
"SpeedRange": [
- 300,
- 330
+ 2000,
+ 2000
],
"LifeTimeRange": [
-1
diff --git a/DungeonShooting_Godot/resource/config/EnemyBase.json b/DungeonShooting_Godot/resource/config/EnemyBase.json
index 968950a..054f597 100644
--- a/DungeonShooting_Godot/resource/config/EnemyBase.json
+++ b/DungeonShooting_Godot/resource/config/EnemyBase.json
@@ -3,24 +3,36 @@
"Id": "0001",
"__Activity": "enemy0001",
"Remark": "\u654C\u4EBA1",
- "MoveSpeed": 120,
+ "Hp": 20,
+ "MoveSpeed": 80,
"Acceleration": 1500,
"Friction": 900,
+ "AttackInterval": 0,
"CanPickUpWeapon": true,
"ViewRange": 250,
"TailAfterViewRange": 400,
- "BackViewRange": 50
+ "BackViewRange": 50,
+ "Gold": [
+ -2,
+ 3
+ ]
},
{
"Id": "0002",
"__Activity": "enemy0002",
"Remark": "\u654C\u4EBA2",
+ "Hp": 25,
"MoveSpeed": 120,
"Acceleration": 1500,
"Friction": 900,
+ "AttackInterval": 2.2,
"CanPickUpWeapon": false,
- "ViewRange": 250,
- "TailAfterViewRange": 400,
- "BackViewRange": 50
+ "ViewRange": 200,
+ "TailAfterViewRange": 300,
+ "BackViewRange": 50,
+ "Gold": [
+ -2,
+ 4
+ ]
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/config/Sound.json b/DungeonShooting_Godot/resource/config/Sound.json
index 73d3cb1..76bbf8c 100644
--- a/DungeonShooting_Godot/resource/config/Sound.json
+++ b/DungeonShooting_Godot/resource/config/Sound.json
@@ -66,6 +66,18 @@
"Remark": "\u69B4\u5F39\u53D1\u5C04\u5668"
},
{
+ "Id": "shooting0012",
+ "Path": "res://resource/sound/sfx/shooting/Shooting0012.ogg",
+ "Volume": 1,
+ "Remark": "\u6FC0\u5149\u6B66\u5668"
+ },
+ {
+ "Id": "shooting0013",
+ "Path": "res://resource/sound/sfx/shooting/Shooting0013.ogg",
+ "Volume": 0.6,
+ "Remark": "P90"
+ },
+ {
"Id": "reloading0001",
"Path": "res://resource/sound/sfx/reloading/Reloading0001.ogg",
"Volume": 1,
@@ -111,7 +123,13 @@
"Id": "reloadBegin0006",
"Path": "res://resource/sound/sfx/reloading/Reloading_begin0006.ogg",
"Volume": 1,
- "Remark": ""
+ "Remark": "\u6C64\u59C6\u900A\u51B2\u950B\u67AA"
+ },
+ {
+ "Id": "reloadBegin0007",
+ "Path": "res://resource/sound/sfx/reloading/Reloading_begin0007.ogg",
+ "Volume": 1,
+ "Remark": "P90"
},
{
"Id": "reloadBegin0009",
@@ -138,6 +156,12 @@
"Remark": ""
},
{
+ "Id": "reloadBegin0013",
+ "Path": "res://resource/sound/sfx/reloading/Reloading_begin0013.ogg",
+ "Volume": 1.2,
+ "Remark": ""
+ },
+ {
"Id": "reloadFinish0002",
"Path": "res://resource/sound/sfx/reloading/Reloading_finish0002.ogg",
"Volume": 1,
@@ -156,6 +180,12 @@
"Remark": ""
},
{
+ "Id": "reloadFinish0005",
+ "Path": "res://resource/sound/sfx/reloading/Reloading_finish0005.ogg",
+ "Volume": 1.2,
+ "Remark": ""
+ },
+ {
"Id": "beLoaded0001",
"Path": "res://resource/sound/sfx/beLoaded/BeLoaded0001.ogg",
"Volume": 1,
@@ -212,8 +242,8 @@
{
"Id": "beLoaded0010",
"Path": "res://resource/sound/sfx/beLoaded/BeLoaded0010.ogg",
- "Volume": 1,
- "Remark": "\u6B65\u67AA"
+ "Volume": 0.7,
+ "Remark": "P90"
},
{
"Id": "beLoaded0011",
@@ -280,5 +310,11 @@
"Path": "res://resource/sound/sfx/collision/Collision0001.ogg",
"Volume": 0.7,
"Remark": "\u78B0\u649E"
+ },
+ {
+ "Id": "gold",
+ "Path": "res://resource/sound/sfx/common/gold.ogg",
+ "Volume": 1.5,
+ "Remark": "\u91D1\u5E01"
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/config/WeaponBase.json b/DungeonShooting_Godot/resource/config/WeaponBase.json
index 3cbe120..e8e4f61 100644
--- a/DungeonShooting_Godot/resource/config/WeaponBase.json
+++ b/DungeonShooting_Godot/resource/config/WeaponBase.json
@@ -10,7 +10,9 @@
"AmmoCapacity": 30,
"MaxAmmoCapacity": 420,
"StandbyAmmoCapacity": 390,
- "ReloadTime": 2.2,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 2,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -48,15 +50,12 @@
"UpliftAngle": 10,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0001",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -74,11 +73,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0002",
"__AiAttackAttr": ""
},
{
- "Id": "0002",
+ "Id": "0001_ai",
"Remark": "\u6B65\u67AA",
"__Activity": "",
"Weight": 40,
@@ -88,7 +86,9 @@
"AmmoCapacity": 30,
"MaxAmmoCapacity": 420,
"StandbyAmmoCapacity": 390,
- "ReloadTime": 2.2,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 2,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -102,7 +102,7 @@
"ContinuousCountRange": [
3
],
- "TriggerInterval": 3,
+ "TriggerInterval": 1.2,
"StartFiringSpeed": 480,
"FinalFiringSpeed": 480,
"FiringSpeedAddSpeed": 0,
@@ -126,15 +126,12 @@
"UpliftAngle": 10,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0001",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -152,11 +149,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0001"
},
{
- "Id": "0003",
+ "Id": "0002",
"Remark": "\u9730\u5F39\u67AA",
"__Activity": "weapon0002",
"Weight": 40,
@@ -166,11 +162,13 @@
"AmmoCapacity": 7,
"MaxAmmoCapacity": 140,
"StandbyAmmoCapacity": 133,
- "ReloadTime": 0.4,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 0.26,
"AloneReload": true,
"AloneReloadCount": 1,
- "AloneReloadBeginIntervalTime": 0.6,
- "AloneReloadFinishIntervalTime": 0.6,
+ "AloneReloadBeginIntervalTime": 0.5,
+ "AloneReloadFinishIntervalTime": 0.45,
"AloneReloadCanShoot": true,
"LooseShoot": false,
"MinChargeTime": 0,
@@ -204,15 +202,12 @@
"UpliftAngle": 15,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0002",
"__Shell": "shell0002",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.2,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -230,11 +225,10 @@
"__BeLoadedSound": "beLoaded0005",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0004",
"__AiAttackAttr": ""
},
{
- "Id": "0004",
+ "Id": "0002_ai",
"Remark": "\u9730\u5F39\u67AA",
"__Activity": "",
"Weight": 40,
@@ -244,11 +238,13 @@
"AmmoCapacity": 7,
"MaxAmmoCapacity": 140,
"StandbyAmmoCapacity": 133,
- "ReloadTime": 0.4,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 0.26,
"AloneReload": true,
"AloneReloadCount": 1,
- "AloneReloadBeginIntervalTime": 0.6,
- "AloneReloadFinishIntervalTime": 0.6,
+ "AloneReloadBeginIntervalTime": 0.5,
+ "AloneReloadFinishIntervalTime": 0.45,
"AloneReloadCanShoot": true,
"LooseShoot": false,
"MinChargeTime": 0,
@@ -258,7 +254,7 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 3.5,
+ "TriggerInterval": 1.4,
"StartFiringSpeed": 120,
"FinalFiringSpeed": 120,
"FiringSpeedAddSpeed": 0,
@@ -282,15 +278,12 @@
"UpliftAngle": 15,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0002",
"__Shell": "shell0002",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.2,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -308,11 +301,10 @@
"__BeLoadedSound": "beLoaded0005",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0002"
},
{
- "Id": "0005",
+ "Id": "0003",
"Remark": "\u624B\u67AA",
"__Activity": "weapon0003",
"Weight": 20,
@@ -322,7 +314,9 @@
"AmmoCapacity": 12,
"MaxAmmoCapacity": 180,
"StandbyAmmoCapacity": 168,
- "ReloadTime": 1.5,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 1.4,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -360,15 +354,12 @@
"UpliftAngle": 20,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0001",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -386,11 +377,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0006",
"__AiAttackAttr": ""
},
{
- "Id": "0006",
+ "Id": "0003_ai",
"Remark": "\u624B\u67AA",
"__Activity": "",
"Weight": 20,
@@ -400,7 +390,9 @@
"AmmoCapacity": 12,
"MaxAmmoCapacity": 180,
"StandbyAmmoCapacity": 168,
- "ReloadTime": 1.5,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 1.4,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -414,9 +406,9 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 1.3,
- "StartFiringSpeed": 300,
- "FinalFiringSpeed": 300,
+ "TriggerInterval": 0.55,
+ "StartFiringSpeed": 460,
+ "FinalFiringSpeed": 460,
"FiringSpeedAddSpeed": 0,
"FiringSpeedBackSpeed": 0,
"FiringSpeedBackTime": 0,
@@ -438,15 +430,12 @@
"UpliftAngle": 20,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0001",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -464,11 +453,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0003"
},
{
- "Id": "0007",
+ "Id": "0004",
"Remark": "\u5200",
"__Activity": "weapon0004",
"Weight": 40,
@@ -478,6 +466,8 @@
"AmmoCapacity": 180,
"MaxAmmoCapacity": 180,
"StandbyAmmoCapacity": 180,
+ "ShowReloadBar": true,
+ "AutoReload": false,
"ReloadTime": 2,
"AloneReload": false,
"AloneReloadCount": 1,
@@ -519,11 +509,8 @@
"__Bullet": "2001",
"__Shell": "",
"ReloadThrowShell": false,
+ "ThrowShellCount": 0,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -541,11 +528,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0008",
"__AiAttackAttr": ""
},
{
- "Id": "0008",
+ "Id": "0004_ai",
"Remark": "\u5200",
"__Activity": "",
"Weight": 40,
@@ -555,6 +541,8 @@
"AmmoCapacity": 180,
"MaxAmmoCapacity": 180,
"StandbyAmmoCapacity": 180,
+ "ShowReloadBar": true,
+ "AutoReload": false,
"ReloadTime": 2,
"AloneReload": false,
"AloneReloadCount": 1,
@@ -569,7 +557,7 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 3,
+ "TriggerInterval": 2,
"StartFiringSpeed": 180,
"FinalFiringSpeed": 180,
"FiringSpeedAddSpeed": 0,
@@ -596,11 +584,8 @@
"__Bullet": "2001",
"__Shell": "",
"ReloadThrowShell": false,
+ "ThrowShellCount": 0,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -618,11 +603,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0004"
},
{
- "Id": "0009",
+ "Id": "0005",
"Remark": "\u72D9\u51FB\u67AA",
"__Activity": "weapon0005",
"Weight": 50,
@@ -632,7 +616,9 @@
"AmmoCapacity": 10,
"MaxAmmoCapacity": 80,
"StandbyAmmoCapacity": 70,
- "ReloadTime": 3,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 2.8,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -670,15 +656,12 @@
"UpliftAngle": 15,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0004",
"__Shell": "shell0003",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.2,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -696,11 +679,10 @@
"__BeLoadedSound": "beLoaded0007",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0010",
"__AiAttackAttr": ""
},
{
- "Id": "0010",
+ "Id": "0005_ai",
"Remark": "\u72D9\u51FB\u67AA",
"__Activity": "",
"Weight": 50,
@@ -710,7 +692,9 @@
"AmmoCapacity": 10,
"MaxAmmoCapacity": 80,
"StandbyAmmoCapacity": 70,
- "ReloadTime": 3,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 2.8,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -724,7 +708,7 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 5,
+ "TriggerInterval": 2.2,
"StartFiringSpeed": 150,
"FinalFiringSpeed": 150,
"FiringSpeedAddSpeed": 0,
@@ -748,15 +732,12 @@
"UpliftAngle": 15,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0004",
"__Shell": "shell0003",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.2,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -774,11 +755,10 @@
"__BeLoadedSound": "beLoaded0007",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0005"
},
{
- "Id": "0011",
+ "Id": "0006",
"Remark": "\u51B2\u950B\u67AA",
"__Activity": "weapon0006",
"Weight": 30,
@@ -788,7 +768,9 @@
"AmmoCapacity": 20,
"MaxAmmoCapacity": 600,
"StandbyAmmoCapacity": 580,
- "ReloadTime": 2.2,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 1.8,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -826,15 +808,12 @@
"UpliftAngle": 5,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0002",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -844,19 +823,18 @@
],
"__ShootSound": "shooting0002",
"__BeginReloadSound": "reloadBegin0005",
- "BeginReloadSoundDelayTime": 0.2,
+ "BeginReloadSoundDelayTime": 0,
"__ReloadSound": "",
"ReloadSoundDelayTime": 0,
"__ReloadFinishSound": "beLoaded0016",
- "ReloadFinishSoundAdvanceTime": 0.5,
+ "ReloadFinishSoundAdvanceTime": 0.6,
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0012",
"__AiAttackAttr": ""
},
{
- "Id": "0012",
+ "Id": "0006_ai",
"Remark": "\u51B2\u950B\u67AA",
"__Activity": "",
"Weight": 30,
@@ -866,7 +844,9 @@
"AmmoCapacity": 20,
"MaxAmmoCapacity": 600,
"StandbyAmmoCapacity": 580,
- "ReloadTime": 2.2,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 1.8,
"AloneReload": false,
"AloneReloadCount": 1,
"AloneReloadBeginIntervalTime": 0,
@@ -880,7 +860,7 @@
"ContinuousCountRange": [
5
],
- "TriggerInterval": 3.5,
+ "TriggerInterval": 1.4,
"StartFiringSpeed": 700,
"FinalFiringSpeed": 700,
"FiringSpeedAddSpeed": 0,
@@ -904,15 +884,12 @@
"UpliftAngle": 5,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0002",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -922,19 +899,18 @@
],
"__ShootSound": "shooting0002",
"__BeginReloadSound": "reloadBegin0005",
- "BeginReloadSoundDelayTime": 0.2,
+ "BeginReloadSoundDelayTime": 0,
"__ReloadSound": "",
"ReloadSoundDelayTime": 0,
"__ReloadFinishSound": "beLoaded0016",
- "ReloadFinishSoundAdvanceTime": 0.5,
+ "ReloadFinishSoundAdvanceTime": 0.6,
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0004"
},
{
- "Id": "0013",
+ "Id": "0007",
"Remark": "\u6C64\u59C6\u900A\u51B2\u950B\u67AA",
"__Activity": "weapon0007",
"Weight": 40,
@@ -944,6 +920,8 @@
"AmmoCapacity": 60,
"MaxAmmoCapacity": 600,
"StandbyAmmoCapacity": 540,
+ "ShowReloadBar": true,
+ "AutoReload": false,
"ReloadTime": 2.2,
"AloneReload": false,
"AloneReloadCount": 1,
@@ -982,15 +960,12 @@
"UpliftAngle": 5,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0003",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1008,11 +983,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0014",
"__AiAttackAttr": ""
},
{
- "Id": "0014",
+ "Id": "0007_ai",
"Remark": "\u6C64\u59C6\u900A\u51B2\u950B\u67AA",
"__Activity": "",
"Weight": 40,
@@ -1022,6 +996,8 @@
"AmmoCapacity": 60,
"MaxAmmoCapacity": 600,
"StandbyAmmoCapacity": 540,
+ "ShowReloadBar": true,
+ "AutoReload": false,
"ReloadTime": 2.2,
"AloneReload": false,
"AloneReloadCount": 1,
@@ -1036,9 +1012,9 @@
"ContinuousCountRange": [
10
],
- "TriggerInterval": 4.5,
- "StartFiringSpeed": 200,
- "FinalFiringSpeed": 200,
+ "TriggerInterval": 2,
+ "StartFiringSpeed": 700,
+ "FinalFiringSpeed": 700,
"FiringSpeedAddSpeed": 0,
"FiringSpeedBackSpeed": 0,
"FiringSpeedBackTime": 0,
@@ -1060,15 +1036,12 @@
"UpliftAngle": 5,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0003",
"__Shell": "shell0001",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1086,11 +1059,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0006"
},
{
- "Id": "0015",
+ "Id": "0008",
"Remark": "\u6FC0\u5149\u624B\u67AA",
"__Activity": "weapon0008",
"Weight": 40,
@@ -1100,6 +1072,8 @@
"AmmoCapacity": 10,
"MaxAmmoCapacity": 240,
"StandbyAmmoCapacity": 120,
+ "ShowReloadBar": true,
+ "AutoReload": false,
"ReloadTime": 1.8,
"AloneReload": false,
"AloneReloadCount": 1,
@@ -1138,15 +1112,12 @@
"UpliftAngle": 13,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire2.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0002.tscn",
"__Bullet": "1001",
"__Shell": "",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1164,11 +1135,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0016",
"__AiAttackAttr": ""
},
{
- "Id": "0016",
+ "Id": "0008_ai",
"Remark": "\u6FC0\u5149\u624B\u67AA",
"__Activity": "",
"Weight": 40,
@@ -1178,6 +1148,8 @@
"AmmoCapacity": 10,
"MaxAmmoCapacity": 240,
"StandbyAmmoCapacity": 120,
+ "ShowReloadBar": true,
+ "AutoReload": false,
"ReloadTime": 1.8,
"AloneReload": false,
"AloneReloadCount": 1,
@@ -1192,7 +1164,7 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 4,
+ "TriggerInterval": 1.8,
"StartFiringSpeed": 300,
"FinalFiringSpeed": 300,
"FiringSpeedAddSpeed": 0,
@@ -1216,15 +1188,12 @@
"UpliftAngle": 13,
"DefaultAngle": 0,
"UpliftAngleRestore": 1,
- "FireEffect": "res://prefab/effect/weapon/ShotFire2.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0002.tscn",
"__Bullet": "1001",
"__Shell": "",
"ReloadThrowShell": false,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1242,11 +1211,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0007"
},
{
- "Id": "0017",
+ "Id": "0009",
"Remark": "\u69B4\u5F39\u53D1\u5C04\u5668",
"__Activity": "weapon0009",
"Weight": 40,
@@ -1256,6 +1224,8 @@
"AmmoCapacity": 1,
"MaxAmmoCapacity": 50,
"StandbyAmmoCapacity": 25,
+ "ShowReloadBar": true,
+ "AutoReload": true,
"ReloadTime": 1.5,
"AloneReload": false,
"AloneReloadCount": 1,
@@ -1271,8 +1241,8 @@
1
],
"TriggerInterval": 0,
- "StartFiringSpeed": 60,
- "FinalFiringSpeed": 60,
+ "StartFiringSpeed": 180,
+ "FinalFiringSpeed": 180,
"FiringSpeedAddSpeed": 0,
"FiringSpeedBackSpeed": 0,
"FiringSpeedBackTime": 0,
@@ -1294,15 +1264,12 @@
"UpliftAngle": 16,
"DefaultAngle": 0,
"UpliftAngleRestore": 3,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0005",
"__Shell": "shell0004",
"ReloadThrowShell": true,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.46,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1320,11 +1287,10 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "0018",
"__AiAttackAttr": ""
},
{
- "Id": "0018",
+ "Id": "0009_ai",
"Remark": "\u69B4\u5F39\u53D1\u5C04\u5668",
"__Activity": "",
"Weight": 40,
@@ -1334,6 +1300,8 @@
"AmmoCapacity": 1,
"MaxAmmoCapacity": 50,
"StandbyAmmoCapacity": 25,
+ "ShowReloadBar": true,
+ "AutoReload": true,
"ReloadTime": 1.5,
"AloneReload": false,
"AloneReloadCount": 1,
@@ -1348,9 +1316,9 @@
"ContinuousCountRange": [
1
],
- "TriggerInterval": 5,
- "StartFiringSpeed": 60,
- "FinalFiringSpeed": 60,
+ "TriggerInterval": 1.3,
+ "StartFiringSpeed": 180,
+ "FinalFiringSpeed": 180,
"FiringSpeedAddSpeed": 0,
"FiringSpeedBackSpeed": 0,
"FiringSpeedBackTime": 0,
@@ -1372,15 +1340,12 @@
"UpliftAngle": 16,
"DefaultAngle": 0,
"UpliftAngleRestore": 3,
- "FireEffect": "res://prefab/effect/weapon/ShotFire.tscn",
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
"__Bullet": "0005",
"__Shell": "shell0004",
"ReloadThrowShell": true,
+ "ThrowShellCount": 1,
"ThrowShellDelayTime": 0.46,
- "ThrowCollisionSize": {
- "X": 20,
- "Y": 15
- },
"CanMeleeAttack": true,
"MeleeAttackHarmRange": [
10
@@ -1398,7 +1363,766 @@
"__BeLoadedSound": "",
"BeLoadedSoundDelayTime": 0,
"__OtherSoundMap": null,
- "__AiUseAttribute": "",
"__AiAttackAttr": "0008"
+ },
+ {
+ "Id": "0010",
+ "Remark": "M1\u578B\u70ED\u80FD\u72D9\u51FB\u67AA",
+ "__Activity": "weapon0010",
+ "Weight": 40,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 5,
+ "MaxAmmoCapacity": 150,
+ "StandbyAmmoCapacity": 80,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 210,
+ "FinalFiringSpeed": 210,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 0,
+ "FinalScatteringRange": 20,
+ "ScatteringRangeAddValue": 7,
+ "ScatteringRangeBackSpeed": 20,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 2,
+ 3
+ ],
+ "BacklashRegressionSpeed": 25,
+ "UpliftAngle": 16,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0004.tscn",
+ "__Bullet": "0007",
+ "__Shell": "",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 1,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0012",
+ "__BeginReloadSound": "reloadBegin0013",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "reloadFinish0005",
+ "ReloadFinishSoundAdvanceTime": 0.6,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": ""
+ },
+ {
+ "Id": "0010_ai",
+ "Remark": "M1\u578B\u70ED\u80FD\u72D9\u51FB\u67AA",
+ "__Activity": "",
+ "Weight": 40,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 5,
+ "MaxAmmoCapacity": 150,
+ "StandbyAmmoCapacity": 80,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 1.5,
+ "StartFiringSpeed": 210,
+ "FinalFiringSpeed": 210,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 0,
+ "FinalScatteringRange": 20,
+ "ScatteringRangeAddValue": 7,
+ "ScatteringRangeBackSpeed": 20,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 2,
+ 3
+ ],
+ "BacklashRegressionSpeed": 25,
+ "UpliftAngle": 16,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0004.tscn",
+ "__Bullet": "0007",
+ "__Shell": "",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 1,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0012",
+ "__BeginReloadSound": "reloadBegin0013",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "reloadFinish0005",
+ "ReloadFinishSoundAdvanceTime": 0.6,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": "0009"
+ },
+ {
+ "Id": "0011",
+ "Remark": "weapon0011",
+ "__Activity": "weapon0011",
+ "Weight": 30,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": true,
+ "AmmoCapacity": 20,
+ "MaxAmmoCapacity": 600,
+ "StandbyAmmoCapacity": 580,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 1.8,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 700,
+ "FinalFiringSpeed": 700,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 3,
+ "FinalScatteringRange": 30,
+ "ScatteringRangeAddValue": 2,
+ "ScatteringRangeBackSpeed": 40,
+ "ScatteringRangeBackDelayTime": 0.3,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 1,
+ 2
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 5,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0009",
+ "__Shell": "",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 0,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0002",
+ "__BeginReloadSound": "reloadBegin0005",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0016",
+ "ReloadFinishSoundAdvanceTime": 0.6,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": ""
+ },
+ {
+ "Id": "0011_ai",
+ "Remark": "weapon0011",
+ "__Activity": "",
+ "Weight": 30,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 20,
+ "MaxAmmoCapacity": 600,
+ "StandbyAmmoCapacity": 580,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 1.8,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 5
+ ],
+ "TriggerInterval": 1.6,
+ "StartFiringSpeed": 350,
+ "FinalFiringSpeed": 350,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 3,
+ "FinalScatteringRange": 30,
+ "ScatteringRangeAddValue": 2,
+ "ScatteringRangeBackSpeed": 30,
+ "ScatteringRangeBackDelayTime": 0.3,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 1,
+ 2
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 5,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0009",
+ "__Shell": "",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 0,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0002",
+ "__BeginReloadSound": "reloadBegin0005",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0016",
+ "ReloadFinishSoundAdvanceTime": 0.6,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": "0004"
+ },
+ {
+ "Id": "0013",
+ "Remark": "P90",
+ "__Activity": "weapon0013",
+ "Weight": 40,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": true,
+ "AmmoCapacity": 50,
+ "MaxAmmoCapacity": 500,
+ "StandbyAmmoCapacity": 350,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 900,
+ "FinalFiringSpeed": 900,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0.5,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 5,
+ "FinalScatteringRange": 35,
+ "ScatteringRangeAddValue": 2,
+ "ScatteringRangeBackSpeed": 50,
+ "ScatteringRangeBackDelayTime": 0.3,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 1,
+ 1
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 3,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0003",
+ "__Shell": "shell0001",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 1,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0013",
+ "__BeginReloadSound": "reloadBegin0007",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0010",
+ "ReloadFinishSoundAdvanceTime": 0.35,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": ""
+ },
+ {
+ "Id": "0013_ai",
+ "Remark": "P90",
+ "__Activity": "",
+ "Weight": 40,
+ "WeightType": 2,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 50,
+ "MaxAmmoCapacity": 500,
+ "StandbyAmmoCapacity": 350,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0,
+ "ContinuousCountRange": [
+ 25
+ ],
+ "TriggerInterval": 3,
+ "StartFiringSpeed": 900,
+ "FinalFiringSpeed": 900,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 10,
+ "FinalScatteringRange": 30,
+ "ScatteringRangeAddValue": 3,
+ "ScatteringRangeBackSpeed": 50,
+ "ScatteringRangeBackDelayTime": 0.3,
+ "CameraShake": 2,
+ "BacklashRange": [
+ 1,
+ 1
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 3,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0003",
+ "__Shell": "shell0001",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 1,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0013",
+ "__BeginReloadSound": "reloadBegin0007",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0010",
+ "ReloadFinishSoundAdvanceTime": 0.35,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": "0006"
+ },
+ {
+ "Id": "0014",
+ "Remark": "\u5DE6\u8F6E",
+ "__Activity": "weapon0014",
+ "Weight": 20,
+ "WeightType": 1,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 5,
+ "MaxAmmoCapacity": 120,
+ "StandbyAmmoCapacity": 80,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 1,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0.05,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 600,
+ "FinalFiringSpeed": 600,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 2,
+ "FinalScatteringRange": 25,
+ "ScatteringRangeAddValue": 5,
+ "ScatteringRangeBackSpeed": 25,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "CameraShake": 4,
+ "BacklashRange": [
+ 3,
+ 5
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 20,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0008",
+ "__Shell": "shell0001",
+ "ReloadThrowShell": true,
+ "ThrowShellCount": 5,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0004",
+ "__BeginReloadSound": "reloading0001",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0015",
+ "ReloadFinishSoundAdvanceTime": 0.43,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": ""
+ },
+ {
+ "Id": "0014_ai",
+ "Remark": "\u5DE6\u8F6E",
+ "__Activity": "",
+ "Weight": 20,
+ "WeightType": 1,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 5,
+ "MaxAmmoCapacity": 120,
+ "StandbyAmmoCapacity": 80,
+ "ShowReloadBar": true,
+ "AutoReload": false,
+ "ReloadTime": 1,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0.05,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0.45,
+ "StartFiringSpeed": 300,
+ "FinalFiringSpeed": 300,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 2,
+ "FinalScatteringRange": 25,
+ "ScatteringRangeAddValue": 5,
+ "ScatteringRangeBackSpeed": 25,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "CameraShake": 4,
+ "BacklashRange": [
+ 3,
+ 5
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 20,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "res://prefab/effect/weapon/ShotFire0001.tscn",
+ "__Bullet": "0008",
+ "__Shell": "shell0001",
+ "ReloadThrowShell": true,
+ "ThrowShellCount": 5,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "shooting0004",
+ "__BeginReloadSound": "reloading0001",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "beLoaded0015",
+ "ReloadFinishSoundAdvanceTime": 0.43,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": "0003"
+ },
+ {
+ "Id": "0016",
+ "Remark": "\u6728\u8D28\u77ED\u5F13",
+ "__Activity": "weapon0016",
+ "Weight": 20,
+ "WeightType": 1,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 1,
+ "MaxAmmoCapacity": 120,
+ "StandbyAmmoCapacity": 80,
+ "ShowReloadBar": false,
+ "AutoReload": true,
+ "ReloadTime": 0.01,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": true,
+ "MinChargeTime": 0.5,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0.05,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 600,
+ "FinalFiringSpeed": 600,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 5,
+ "FinalScatteringRange": 40,
+ "ScatteringRangeAddValue": 40,
+ "ScatteringRangeBackSpeed": 50,
+ "ScatteringRangeBackDelayTime": 0.4,
+ "CameraShake": 4,
+ "BacklashRange": [
+ -2,
+ -2
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 0,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "",
+ "__Bullet": "0010",
+ "__Shell": "",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 0,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "",
+ "__BeginReloadSound": "",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "",
+ "ReloadFinishSoundAdvanceTime": 0.43,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": ""
+ },
+ {
+ "Id": "0016_ai",
+ "Remark": "\u6728\u8D28\u77ED\u5F13",
+ "__Activity": "",
+ "Weight": 20,
+ "WeightType": 1,
+ "IsMelee": false,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 1,
+ "MaxAmmoCapacity": 120,
+ "StandbyAmmoCapacity": 80,
+ "ShowReloadBar": false,
+ "AutoReload": true,
+ "ReloadTime": 0.5,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": true,
+ "MinChargeTime": 0.5,
+ "ManualBeLoaded": false,
+ "AutoManualBeLoaded": false,
+ "BeLoadedTime": 0.05,
+ "ContinuousCountRange": [
+ 1
+ ],
+ "TriggerInterval": 0.5,
+ "StartFiringSpeed": 600,
+ "FinalFiringSpeed": 600,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "FiringSpeedBackTime": 0,
+ "FireBulletCountRange": [
+ 1
+ ],
+ "DelayedTime": 0,
+ "StartScatteringRange": 5,
+ "FinalScatteringRange": 40,
+ "ScatteringRangeAddValue": 40,
+ "ScatteringRangeBackSpeed": 50,
+ "ScatteringRangeBackDelayTime": 0.4,
+ "CameraShake": 4,
+ "BacklashRange": [
+ -2,
+ -2
+ ],
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 0,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "FireEffect": "",
+ "__Bullet": "0010",
+ "__Shell": "",
+ "ReloadThrowShell": false,
+ "ThrowShellCount": 0,
+ "ThrowShellDelayTime": 0,
+ "CanMeleeAttack": true,
+ "MeleeAttackHarmRange": [
+ 10
+ ],
+ "MeleeAttackRepelRange": [
+ 100
+ ],
+ "__ShootSound": "",
+ "__BeginReloadSound": "",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "",
+ "ReloadFinishSoundAdvanceTime": 0.43,
+ "__BeLoadedSound": "",
+ "BeLoadedSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiAttackAttr": "0003"
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json b/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json
index 9daed0e..e6bcbed 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json
@@ -1,64 +1,69 @@
{
- "TestGroup1": {
- "GroupName": "TestGroup1",
+ "Test1": {
+ "GroupName": "Test1",
+ "TileSet": "TileSet1",
"BattleList": [
{
"ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/battle/Battle1"
+ "Path": "resource/map/tileMaps/Test1/battle/Battle1"
},
{
"ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/battle/Battle2"
+ "Path": "resource/map/tileMaps/Test1/battle/Battle2"
},
{
"ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/battle/Battle3"
+ "Path": "resource/map/tileMaps/Test1/battle/Battle3"
},
{
"ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/battle/Battle4"
+ "Path": "resource/map/tileMaps/Test1/battle/Battle4"
},
{
"ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/battle/Battle5"
+ "Path": "resource/map/tileMaps/Test1/battle/Battle5"
},
{
"ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/battle/Battle6"
+ "Path": "resource/map/tileMaps/Test1/battle/Battle6"
}
],
"InletList": [
{
"ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/inlet/Start1"
- },
- {
- "ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/inlet/Start2"
- },
- {
- "ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/inlet/Start3"
- },
- {
- "ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/inlet/Start4"
- },
- {
- "ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/inlet/Start5"
+ "Path": "resource/map/tileMaps/Test1/inlet/Start"
}
],
"OutletList": [
{
"ErrorType": 0,
- "Path": "resource/map/tileMaps/TestGroup1/outlet/End1"
+ "Path": "resource/map/tileMaps/Test1/outlet/End1"
}
],
- "BossList": [],
- "RewardList": [],
- "ShopList": [],
- "EventList": [],
- "Remark": "\u6D4B\u8BD5\u7EC4"
+ "BossList": [
+ {
+ "ErrorType": 0,
+ "Path": "resource/map/tileMaps/Test1/boss/Boss1"
+ }
+ ],
+ "RewardList": [
+ {
+ "ErrorType": 0,
+ "Path": "resource/map/tileMaps/Test1/reward/Award1"
+ }
+ ],
+ "ShopList": [
+ {
+ "ErrorType": 0,
+ "Path": "resource/map/tileMaps/Test1/shop/Shop1"
+ }
+ ],
+ "EventList": [
+ {
+ "ErrorType": 2,
+ "Path": "resource/map/tileMaps/Test1/event/\u6D4B\u8BD5\u623F\u95F4"
+ }
+ ],
+ "Remark": ""
}
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/Preview.png
new file mode 100644
index 0000000..ce7fa71
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/Preview.png.import
new file mode 100644
index 0000000..cfe8193
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://wvfu2bwf6m7t"
+path="res://.godot/imported/Preview.png-c3396b369b426836d0fe1b15b21c3825.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/battle/Battle1/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-c3396b369b426836d0fe1b15b21c3825.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/RoomInfo.json
new file mode 100644
index 0000000..b5e2972
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-4,"Y":-13},"Size":{"X":16,"Y":19},"DoorAreaInfos":[{"Direction":3,"Start":16,"End":192},{"Direction":1,"Start":80,"End":144},{"Direction":2,"Start":64,"End":192},{"Direction":0,"Start":96,"End":224}],"GroupName":"Test1","RoomType":1,"RoomName":"Battle1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/TileInfo.json
new file mode 100644
index 0000000..62aca9a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle1/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":154,"Y":-58},{"X":154,"Y":74},{"X":134,"Y":38},{"X":134,"Y":-22},{"X":42,"Y":-58},{"X":74,"Y":-22},{"X":74,"Y":38},{"X":38,"Y":74},{"X":38,"Y":58},{"X":154,"Y":-154},{"X":154,"Y":-102},{"X":42,"Y":-102},{"X":-10,"Y":-154},{"X":-10,"Y":-74},{"X":-10,"Y":58},{"X":-10,"Y":-6},{"X":-26,"Y":-6},{"X":-26,"Y":-74}],"NavigationPolygon":[[0,1,2,3],[4,0,3,5],[6,2,1,7,8],[9,10,11,12],[13,12,11,4],[8,14,15,4,5,6],[15,16,17,13,4]],"Floor":[-1,-1,0,3,3,-1,0,3,3,0,0,3,2,0,0,3,2,-1,0,3,1,-1,0,3,0,-1,0,3,0,0,0,3,-1,0,0,3,1,0,0,3,-1,1,0,3,0,1,0,3,1,1,0,3,2,1,0,3,3,1,0,3,4,1,0,3,4,2,0,3,3,2,0,3,2,2,0,3,1,2,0,3,0,2,0,3,-1,2,0,3,4,0,0,3,4,-1,0,3,4,-2,0,3,3,-2,0,3,2,-2,0,3,1,-2,0,3,0,-2,0,3,-1,-2,0,3,-1,-3,0,3,0,-3,0,3,1,-3,0,3,2,-3,0,3,3,-3,0,3,4,-3,0,3,5,-3,0,3,2,-5,0,3,1,-5,0,3,0,-5,0,3,-1,-5,0,3,-2,-5,0,3,-2,-4,0,3,-1,-4,0,3,0,-4,0,3,1,-4,0,3,2,-4,0,3,3,-4,0,3,8,-3,0,3,8,-2,0,3,7,-3,0,3,6,-3,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,7,2,0,3,7,3,0,3,6,3,0,3,5,3,0,3,4,3,0,3,3,3,0,3,8,3,0,3,9,3,0,3,9,2,0,3,-2,-3,0,3,-2,-2,0,3,9,0,0,3,9,1,0,3,9,-1,0,3,9,-2,0,3,9,-3,0,3,2,3,0,3,5,2,0,3,6,2,0,3,-1,-9,0,3,0,-9,0,3,1,-9,0,3,2,-9,0,3,0,-10,0,3,1,-10,0,3,2,-10,0,3,-1,-8,0,3,-1,-7,0,3,-1,-6,0,3,0,-6,0,3,0,-7,0,3,1,-7,0,3,1,-8,0,3,0,-8,0,3,1,-6,0,3,2,-7,0,3,2,-8,0,3,2,-6,0,3,3,-10,0,3,4,-10,0,3,5,-10,0,3,6,-10,0,3,7,-10,0,3,8,-10,0,3,9,-10,0,3,9,-9,0,3,8,-9,0,3,7,-9,0,3,6,-9,0,3,5,-9,0,3,4,-9,0,3,3,-9,0,3,3,-8,0,3,4,-8,0,3,5,-8,0,3,6,-8,0,3,7,-8,0,3,8,-8,0,3,9,-8,0,3,-1,-10,0,3,7,-4,0,3,6,-4,0,3,5,-4,0,3,4,-4,0,3,8,-4,0,3,9,-4,0,3],"CustomFloor1":[0,-4,2,2,6,0,-3,2,5,8,-1,-3,2,1,8,-1,-4,2,1,6,1,-4,2,2,6,1,-3,2,2,7,2,-4,2,2,6,2,-3,2,2,7,3,-4,2,2,6,3,-3,2,2,7,1,-2,2,2,7,0,-2,2,1,7,1,-1,2,2,7,0,-1,2,1,7,1,0,2,2,7,0,0,2,1,7,1,1,2,2,8,0,1,2,1,8,2,0,2,2,7,2,1,2,2,8,3,0,2,2,7,3,1,2,5,8,2,-1,2,2,7,2,-2,2,2,7,3,-2,2,2,7,3,-1,2,2,7,4,-4,2,2,6,4,-3,2,4,8,5,-4,2,2,6,5,-3,2,2,8,6,-4,2,2,6,6,-3,2,2,8,7,-4,2,2,6,7,-3,2,2,8,8,-4,2,2,6,8,-3,2,5,8,9,-4,2,3,6,9,-3,2,3,7,9,-2,2,3,7,8,-2,2,1,7,9,-1,2,3,7,8,-1,2,1,7,9,0,2,3,7,8,0,2,1,7,9,1,2,3,7,8,1,2,1,7,9,2,2,3,7,8,2,2,5,9,9,3,2,3,8,8,3,2,2,8,7,3,2,2,8,7,2,2,2,6,6,3,2,2,8,6,2,2,2,6,5,3,2,2,8,5,2,2,2,6,4,3,2,2,8,4,2,2,4,9,3,3,2,1,8,3,2,2,1,7,4,-2,2,3,7,4,-1,2,3,7,4,0,2,3,7,4,1,2,3,7],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/Preview.png
new file mode 100644
index 0000000..a2253ad
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/Preview.png.import
new file mode 100644
index 0000000..612a3f4
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bxjknn0fg0u22"
+path="res://.godot/imported/Preview.png-7d02ab01a6b11d990eeaacbfc7fdf821.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/battle/Battle2/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-7d02ab01a6b11d990eeaacbfc7fdf821.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/RoomInfo.json
new file mode 100644
index 0000000..6f8b7ec
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-9,"Y":-10},"Size":{"X":27,"Y":21},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":1,"RoomName":"Battle2","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/TileInfo.json
new file mode 100644
index 0000000..822b3d6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle2/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":-106,"Y":154},{"X":-26,"Y":70},{"X":154,"Y":6},{"X":198,"Y":6},{"X":250,"Y":154},{"X":198,"Y":-54},{"X":250,"Y":-106},{"X":-106,"Y":-106},{"X":154,"Y":-54},{"X":-26,"Y":26},{"X":-26,"Y":-10},{"X":-70,"Y":70},{"X":-70,"Y":26},{"X":-26,"Y":-54},{"X":-70,"Y":-54},{"X":-70,"Y":-10}],"NavigationPolygon":[[0,1,2,3,4],[3,5,6,4],[7,6,5,8],[2,1,9],[2,9,10,8],[11,1,0],[11,0,7,12],[8,10,13],[7,8,13],[7,13,14],[15,10,9,12],[15,12,7],[15,7,14]],"Floor":[-7,-7,0,3,-7,-6,0,3,-7,-5,0,3,-7,-4,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-7,4,0,3,-7,5,0,3,-7,6,0,3,-7,7,0,3,-7,8,0,3,-6,7,0,3,-6,8,0,3,-5,7,0,3,-5,8,0,3,-4,7,0,3,-4,8,0,3,-3,7,0,3,-3,8,0,3,-2,7,0,3,-2,8,0,3,-1,7,0,3,-1,8,0,3,0,7,0,3,0,8,0,3,1,7,0,3,1,8,0,3,2,7,0,3,2,8,0,3,3,7,0,3,3,8,0,3,4,7,0,3,4,8,0,3,5,7,0,3,5,8,0,3,6,7,0,3,6,8,0,3,7,7,0,3,7,8,0,3,8,7,0,3,8,8,0,3,9,7,0,3,9,8,0,3,10,7,0,3,10,8,0,3,11,7,0,3,11,8,0,3,12,7,0,3,12,8,0,3,13,7,0,3,13,8,0,3,14,7,0,3,14,8,0,3,15,-7,0,3,15,-6,0,3,15,-5,0,3,15,-4,0,3,15,-3,0,3,15,-2,0,3,15,-1,0,3,15,0,0,3,15,1,0,3,15,2,0,3,15,3,0,3,15,4,0,3,15,5,0,3,15,6,0,3,15,7,0,3,15,8,0,3,-6,-7,0,3,-6,-6,0,3,-6,-5,0,3,-6,-4,0,3,-6,-3,0,3,-6,-2,0,3,-6,-1,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-6,4,0,3,-6,5,0,3,-6,6,0,3,-5,-7,0,3,-5,-6,0,3,-5,-5,0,3,-5,-4,0,3,-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,-5,4,0,3,-5,5,0,3,-5,6,0,3,-4,-7,0,3,-4,-6,0,3,-4,-5,0,3,-4,-1,0,3,-4,0,0,3,-4,4,0,3,-4,5,0,3,-4,6,0,3,-3,-7,0,3,-3,-6,0,3,-3,-5,0,3,-3,-1,0,3,-3,0,0,3,-3,4,0,3,-3,5,0,3,-3,6,0,3,-2,-7,0,3,-2,-6,0,3,-2,-5,0,3,-2,-4,0,3,-2,-3,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-2,3,0,3,-2,4,0,3,-2,5,0,3,-2,6,0,3,-1,-7,0,3,-1,-6,0,3,-1,-5,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,-1,3,0,3,-1,4,0,3,-1,5,0,3,-1,6,0,3,0,-7,0,3,0,-6,0,3,0,-5,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,0,3,0,3,0,4,0,3,0,5,0,3,0,6,0,3,1,-7,0,3,1,-6,0,3,1,-5,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,1,3,0,3,1,4,0,3,1,5,0,3,1,6,0,3,2,-7,0,3,2,-6,0,3,2,-5,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,2,1,0,3,2,2,0,3,2,3,0,3,2,4,0,3,2,5,0,3,2,6,0,3,3,-7,0,3,3,-6,0,3,3,-5,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,3,1,0,3,3,2,0,3,3,3,0,3,3,4,0,3,3,5,0,3,3,6,0,3,4,-7,0,3,4,-6,0,3,4,-5,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,4,1,0,3,4,2,0,3,4,3,0,3,4,4,0,3,4,5,0,3,4,6,0,3,5,-7,0,3,5,-6,0,3,5,-5,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,5,0,0,3,5,1,0,3,5,2,0,3,5,3,0,3,5,4,0,3,5,5,0,3,5,6,0,3,6,-7,0,3,6,-6,0,3,6,-5,0,3,6,-4,0,3,6,-3,0,3,6,-2,0,3,6,-1,0,3,6,0,0,3,6,1,0,3,6,2,0,3,6,3,0,3,6,4,0,3,6,5,0,3,6,6,0,3,7,-7,0,3,7,-6,0,3,7,-5,0,3,7,-4,0,3,7,-3,0,3,7,-2,0,3,7,-1,0,3,7,0,0,3,7,1,0,3,7,2,0,3,7,3,0,3,7,4,0,3,7,5,0,3,7,6,0,3,8,-7,0,3,8,-6,0,3,8,-5,0,3,8,-4,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,8,3,0,3,8,4,0,3,8,5,0,3,8,6,0,3,9,-7,0,3,9,-6,0,3,9,-5,0,3,9,-4,0,3,9,-3,0,3,9,-2,0,3,9,-1,0,3,9,0,0,3,9,1,0,3,9,2,0,3,9,3,0,3,9,4,0,3,9,5,0,3,9,6,0,3,10,-7,0,3,10,-6,0,3,10,0,0,3,10,1,0,3,10,2,0,3,10,3,0,3,10,4,0,3,10,5,0,3,10,6,0,3,11,-7,0,3,11,-6,0,3,11,0,0,3,11,1,0,3,11,2,0,3,11,3,0,3,11,4,0,3,11,5,0,3,11,6,0,3,12,-7,0,3,12,-6,0,3,12,-5,0,3,12,-4,0,3,12,-3,0,3,12,-2,0,3,12,-1,0,3,12,0,0,3,12,1,0,3,12,2,0,3,12,3,0,3,12,4,0,3,12,5,0,3,12,6,0,3,13,-7,0,3,13,-5,0,3,13,-4,0,3,13,-3,0,3,13,-2,0,3,13,-1,0,3,13,0,0,3,13,1,0,3,13,2,0,3,13,3,0,3,13,4,0,3,13,5,0,3,13,6,0,3,14,-7,0,3,14,-6,0,3,14,-5,0,3,14,-4,0,3,14,-3,0,3,14,-2,0,3,14,-1,0,3,14,0,0,3,14,1,0,3,14,2,0,3,14,3,0,3,14,4,0,3,14,5,0,3,14,6,0,3,13,-6,0,3,11,-5,0,3,10,-5,0,3],"CustomFloor1":[3,3,2,2,7,2,3,2,2,7,3,4,2,2,7,2,4,2,2,7,3,5,2,2,7,2,5,2,2,7,1,5,2,2,7,1,4,2,2,7,2,6,2,2,7,1,6,2,2,7,3,6,2,2,7,4,5,2,2,7,4,6,2,2,7,5,5,2,2,7,5,6,2,2,7,10,4,2,2,7,9,4,2,2,7,11,4,2,2,7,11,3,2,2,7,10,3,2,2,7,11,2,2,2,7,10,2,2,2,7,10,1,2,2,7,10,0,2,2,6,8,4,2,2,7,5,4,2,2,7,4,4,2,2,7,4,3,2,2,7,5,3,2,2,7,8,2,2,2,7,8,3,2,2,7,9,2,2,2,7,9,3,2,2,7,9,1,2,2,7,5,-1,2,2,7,6,-1,2,2,7,8,-1,2,2,7,9,-1,2,3,7,9,0,2,4,9,-1,2,2,2,7,-2,2,2,1,7,-1,3,2,2,7,-2,3,2,1,7,-1,4,2,2,7,-2,4,2,5,9,-1,5,2,2,7,-2,5,2,2,7,0,4,2,2,7,0,5,2,2,7,0,6,2,2,7,-1,6,2,2,7,-2,6,2,2,7,0,2,2,2,7,0,3,2,2,7,1,3,2,2,7,4,-2,2,2,7,3,-2,2,2,7,4,-3,2,2,7,3,-3,2,2,7,4,-4,2,2,7,3,-4,2,2,7,5,-4,2,2,7,5,-3,2,2,7,6,-4,2,2,7,6,-3,2,2,7,7,-4,2,2,7,7,-3,2,2,7,8,-4,2,2,7,8,-3,2,2,7,9,-4,2,3,7,9,-3,2,3,7,8,-2,2,2,7,7,-2,2,2,7,6,-2,2,2,7,5,-2,2,2,7,2,-3,2,2,7,2,-4,2,2,7,-1,-3,2,2,7,-1,-4,2,2,7,-2,-3,2,1,7,-2,-4,2,1,7,-2,-2,2,1,7,-1,-2,2,2,7,0,-2,2,2,7,1,-2,2,2,7,2,-2,2,2,7,1,-1,2,2,7,0,-1,2,2,7,9,-2,2,3,7,12,-3,2,1,7,12,-2,2,1,7,12,2,2,2,7,12,3,2,2,7,12,4,2,2,7,13,5,2,2,7,13,4,2,2,7,14,4,2,2,7,14,5,2,2,7,14,3,2,2,7,13,3,2,2,7,14,2,2,2,7,13,2,2,2,7,15,1,2,3,7,15,2,2,3,7,14,1,2,2,7,15,0,2,3,7,14,0,2,2,7,15,-1,2,3,7,14,-1,2,2,7,15,-2,2,3,7,14,-2,2,2,7,15,-3,2,3,7,14,-3,2,2,7,13,-2,2,2,7,13,-3,2,2,7,14,-4,2,2,7,13,-4,2,2,7,15,3,2,3,7,15,4,2,3,7,-2,-6,2,2,7,-2,-5,2,5,8,-3,-5,2,2,8,-3,-6,2,2,7,9,-7,2,2,6,9,-6,2,2,7,8,-6,2,2,7,8,-7,2,2,6,7,-6,2,2,7,7,-7,2,2,6,6,-6,2,2,7,6,-7,2,2,6,5,-6,2,2,7,5,-7,2,2,6,4,-6,2,2,7,4,-7,2,2,6,-3,-7,2,2,6,-4,-6,2,2,7,-4,-7,2,2,6,-2,-7,2,2,6,-1,-7,2,2,6,-1,-6,2,2,7,0,-7,2,2,6,0,-6,2,2,7,1,-7,2,2,6,1,-6,2,2,7,2,-7,2,2,6,2,-6,2,2,7,3,-7,2,2,6,3,-6,2,2,7,-4,-5,2,2,8,-3,4,2,2,6,-4,4,2,2,6,-3,5,2,2,7,-4,5,2,2,7,-3,6,2,2,7,-5,5,2,2,7,-5,4,2,4,9,-6,5,2,2,7,-6,4,2,2,7,-5,0,2,4,8,-5,1,2,3,7,-6,1,2,2,7,-6,0,2,2,7,-5,2,2,3,7,-6,2,2,2,7,-5,3,2,3,7,-6,3,2,2,7,-1,1,2,2,7,-2,1,2,1,7,7,-1,2,2,7,6,2,2,2,7,7,2,2,2,7,7,3,2,2,7,6,3,2,2,7,7,4,2,2,7,6,4,2,2,7,7,5,2,2,7,6,5,2,2,7,7,6,2,2,7,6,6,2,2,7,8,5,2,2,7,8,6,2,2,7,9,5,2,2,7,9,6,2,2,7,10,5,2,2,7,10,6,2,2,7,11,5,2,2,7,11,6,2,2,7,12,5,2,2,7,12,6,2,2,7,13,6,2,2,7,-2,-1,2,5,9,-3,-1,2,2,6,-4,-1,2,2,6,-2,0,2,5,8,-3,0,2,2,8,-1,0,2,2,7,-1,-1,2,2,7,0,0,2,2,7,1,0,2,2,7,2,-1,2,2,7,2,0,2,2,7,4,-1,2,2,7,4,0,2,2,7,3,0,2,2,7,3,-1,2,2,7,5,0,2,2,7,6,0,2,2,7,7,0,2,2,7,8,0,2,2,7,11,0,2,2,6,12,-1,2,1,7,12,0,2,5,9,13,-1,2,2,7,13,0,2,2,7,13,1,2,2,7,12,1,2,2,7,11,1,2,2,7,8,1,2,2,7,7,1,2,2,7,6,1,2,2,7,5,1,2,2,7,4,1,2,2,7,3,1,2,2,7,2,1,2,2,7,1,1,2,2,7,0,1,2,2,7,1,2,2,2,7,2,2,2,2,7,3,2,2,2,7,4,2,2,2,7,5,2,2,2,7,-4,0,2,2,8,-5,-1,2,4,9,-6,-1,2,2,7,-6,-2,2,2,7,-6,-3,2,2,7,-5,-4,2,3,7,-6,-4,2,2,7,-5,-5,2,4,8,-6,-5,2,2,7,-5,-6,2,2,7,-6,-6,2,2,7,-1,-5,2,2,7,0,-5,2,2,7,1,-5,2,2,7,3,-5,2,2,7,2,-5,2,2,7,4,-5,2,2,7,5,-5,2,2,7,6,-5,2,2,7,7,-5,2,2,7,8,-5,2,2,7,9,-5,2,4,8,10,-5,2,2,8,11,-5,2,2,8,11,-6,2,2,7,10,-6,2,2,7,11,-7,2,2,6,10,-7,2,2,6,12,-7,2,2,6,12,-6,2,2,7,13,-7,2,2,6,13,-6,2,2,7,14,-7,2,2,6,14,-6,2,2,7,15,-7,2,3,6,15,-6,2,3,7,15,-5,2,3,7,14,-5,2,2,7,15,-4,2,3,7,13,-5,2,2,7,12,-4,2,1,7,12,-5,2,5,8,14,6,2,2,7,14,7,2,2,7,13,7,2,2,7,15,5,2,3,7,15,6,2,3,7,15,7,2,3,7,15,8,2,3,8,14,8,2,2,8,13,8,2,2,8,12,8,2,2,8,12,7,2,2,7,11,8,2,2,8,11,7,2,2,7,10,8,2,2,8,10,7,2,2,7,9,8,2,2,8,9,7,2,2,7,8,8,2,2,8,8,7,2,2,7,7,8,2,2,8,7,7,2,2,7,6,8,2,2,8,6,7,2,2,7,5,8,2,2,8,5,7,2,2,7,4,8,2,2,8,4,7,2,2,7,3,8,2,2,8,3,7,2,2,7,2,8,2,2,8,2,7,2,2,7,1,8,2,2,8,1,7,2,2,7,0,8,2,2,8,0,7,2,2,7,-1,7,2,2,7,-2,7,2,2,7,-3,7,2,2,7,-4,7,2,2,7,-4,6,2,2,7,-5,7,2,2,7,-5,6,2,2,7,-6,7,2,2,7,-6,6,2,2,7,-5,8,2,2,8,-6,8,2,2,8,-4,8,2,2,8,-3,8,2,2,8,-2,8,2,2,8,-1,8,2,2,8,-7,8,2,1,8,-7,7,2,1,7,-7,6,2,1,7,-7,5,2,1,7,-7,4,2,1,7,-7,3,2,1,7,-7,2,2,1,7,-7,1,2,1,7,-7,0,2,1,7,-7,-1,2,1,7,-7,-2,2,1,7,-7,-3,2,1,7,-7,-4,2,1,7,-7,-5,2,1,7,-5,-7,2,2,6,-6,-7,2,2,6,-7,-6,2,1,7,-7,-7,2,1,6,-5,-3,2,3,7,-5,-2,2,3,7,1,-4,2,2,7,1,-3,2,2,7,0,-3,2,2,7,0,-4,2,2,7],"CustomFloor2":[4,-1,1,8,11,3,4,1,8,11,8,5,1,6,14,9,5,1,7,14,10,5,1,8,14,10,6,1,8,15,9,6,1,7,15,8,6,1,6,15,1,2,1,12,11,-2,6,1,0,15,0,-6,1,0,15,7,-5,1,3,5],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png
new file mode 100644
index 0000000..a7ad03b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png.import
new file mode 100644
index 0000000..3a15cae
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://djatlwx25yc04"
+path="res://.godot/imported/Preview.png-059b7ebb6f66594cdd23b790819a4a0c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/battle/Battle3/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-059b7ebb6f66594cdd23b790819a4a0c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/RoomInfo.json
new file mode 100644
index 0000000..d3e0245
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-10,"Y":-12},"Size":{"X":28,"Y":22},"DoorAreaInfos":[{"Direction":3,"Start":0,"End":128},{"Direction":3,"Start":256,"End":384},{"Direction":2,"Start":256,"End":384},{"Direction":2,"Start":0,"End":128},{"Direction":1,"Start":0,"End":272},{"Direction":0,"Start":0,"End":272}],"GroupName":"Test1","RoomType":1,"RoomName":"Battle3","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/TileInfo.json
new file mode 100644
index 0000000..7954779
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle3/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":134,"Y":-74},{"X":134,"Y":-138},{"X":250,"Y":-138},{"X":250,"Y":138},{"X":134,"Y":138},{"X":134,"Y":90},{"X":-6,"Y":-74},{"X":-6,"Y":90},{"X":-122,"Y":-138},{"X":-6,"Y":138},{"X":-122,"Y":138},{"X":-6,"Y":-138}],"NavigationPolygon":[[0,1,2,3],[3,4,5],[0,3,5,6],[6,5,7,8],[7,9,10,8],[11,6,8]],"Floor":[-3,-5,0,3,-3,-4,0,3,-3,-3,0,3,-3,-2,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-3,3,0,3,-3,4,0,3,-2,-5,0,3,-2,-4,0,3,-2,-3,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-2,3,0,3,-2,4,0,3,-1,-5,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,-1,3,0,3,-1,4,0,3,0,-5,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,0,3,0,3,0,4,0,3,1,-5,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,1,3,0,3,1,4,0,3,2,-5,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,2,1,0,3,2,2,0,3,2,3,0,3,2,4,0,3,3,-5,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,3,1,0,3,3,2,0,3,3,3,0,3,3,4,0,3,4,-5,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,4,1,0,3,4,2,0,3,4,3,0,3,4,4,0,3,5,-5,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,5,0,0,3,5,1,0,3,5,2,0,3,5,3,0,3,5,4,0,3,6,-5,0,3,6,-4,0,3,6,-3,0,3,6,-2,0,3,6,-1,0,3,6,0,0,3,6,1,0,3,6,2,0,3,6,3,0,3,6,4,0,3,7,-5,0,3,7,-4,0,3,7,-3,0,3,7,-2,0,3,7,-1,0,3,7,0,0,3,7,1,0,3,7,2,0,3,7,3,0,3,7,4,0,3,8,-5,0,3,8,-4,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,8,3,0,3,8,4,0,3,9,-5,0,3,9,-4,0,3,9,-3,0,3,9,-2,0,3,9,-1,0,3,9,0,0,3,9,1,0,3,9,2,0,3,9,3,0,3,9,4,0,3,10,-5,0,3,10,-4,0,3,10,-3,0,3,10,-2,0,3,10,-1,0,3,10,0,0,3,10,1,0,3,10,2,0,3,10,3,0,3,10,4,0,3,-8,-9,0,3,-8,-8,0,3,-8,-7,0,3,-8,-6,0,3,-8,-5,0,3,-8,-4,0,3,-8,-3,0,3,-8,-2,0,3,-8,-1,0,3,-8,0,0,3,-8,1,0,3,-8,2,0,3,-8,3,0,3,-8,4,0,3,-8,5,0,3,-8,6,0,3,-8,7,0,3,-7,-9,0,3,-7,-8,0,3,-7,-7,0,3,-7,-6,0,3,-7,-5,0,3,-7,-4,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-7,4,0,3,-7,5,0,3,-7,6,0,3,-7,7,0,3,-6,-9,0,3,-6,-8,0,3,-6,-7,0,3,-6,-6,0,3,-6,-5,0,3,-6,-4,0,3,-6,-3,0,3,-6,-2,0,3,-6,-1,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-6,4,0,3,-6,5,0,3,-6,6,0,3,-6,7,0,3,-5,-9,0,3,-5,-8,0,3,-5,-7,0,3,-5,-6,0,3,-5,-5,0,3,-5,-4,0,3,-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,-5,4,0,3,-5,5,0,3,-5,6,0,3,-5,7,0,3,-4,-9,0,3,-4,-8,0,3,-4,-7,0,3,-4,-6,0,3,-4,-5,0,3,-4,-4,0,3,-4,-3,0,3,-4,-2,0,3,-4,-1,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-4,3,0,3,-4,4,0,3,-4,5,0,3,-4,6,0,3,-4,7,0,3,-3,-9,0,3,-3,-8,0,3,-3,-7,0,3,-3,-6,0,3,-3,5,0,3,-3,6,0,3,-3,7,0,3,-2,-9,0,3,-2,-8,0,3,-2,-7,0,3,-2,-6,0,3,-2,5,0,3,-2,6,0,3,-2,7,0,3,-1,-9,0,3,-1,-8,0,3,-1,-7,0,3,-1,-6,0,3,-1,5,0,3,-1,6,0,3,-1,7,0,3,8,-9,0,3,8,-8,0,3,8,-7,0,3,8,-6,0,3,8,5,0,3,8,6,0,3,8,7,0,3,9,-9,0,3,9,-8,0,3,9,-7,0,3,9,-6,0,3,9,5,0,3,9,6,0,3,9,7,0,3,10,-9,0,3,10,-8,0,3,10,-7,0,3,10,-6,0,3,10,5,0,3,10,6,0,3,10,7,0,3,11,-9,0,3,11,-8,0,3,11,-7,0,3,11,-6,0,3,11,-5,0,3,11,-4,0,3,11,-3,0,3,11,-2,0,3,11,-1,0,3,11,0,0,3,11,1,0,3,11,2,0,3,11,3,0,3,11,4,0,3,11,5,0,3,11,6,0,3,11,7,0,3,12,-9,0,3,12,-8,0,3,12,-7,0,3,12,-6,0,3,12,-5,0,3,12,-4,0,3,12,-3,0,3,12,-2,0,3,12,-1,0,3,12,0,0,3,12,1,0,3,12,2,0,3,12,3,0,3,12,4,0,3,12,5,0,3,12,6,0,3,12,7,0,3,13,-9,0,3,13,-8,0,3,13,-7,0,3,13,-6,0,3,13,-5,0,3,13,-4,0,3,13,-3,0,3,13,-2,0,3,13,-1,0,3,13,0,0,3,13,1,0,3,13,2,0,3,13,3,0,3,13,4,0,3,13,5,0,3,13,6,0,3,13,7,0,3,14,-9,0,3,14,-8,0,3,14,-7,0,3,14,-6,0,3,14,-5,0,3,14,-4,0,3,14,-3,0,3,14,-2,0,3,14,-1,0,3,14,0,0,3,14,1,0,3,14,2,0,3,14,3,0,3,14,4,0,3,14,5,0,3,14,6,0,3,14,7,0,3,15,-9,0,3,15,-8,0,3,15,-7,0,3,15,-6,0,3,15,-5,0,3,15,-4,0,3,15,-3,0,3,15,-2,0,3,15,-1,0,3,15,0,0,3,15,1,0,3,15,2,0,3,15,3,0,3,15,4,0,3,15,5,0,3,15,6,0,3,15,7,0,3],"CustomFloor1":[-6,-8,2,2,6,-6,-7,2,2,7,-7,-7,2,1,7,-7,-8,2,1,6,-5,-8,2,2,6,-5,-7,2,2,7,-4,-8,2,2,6,-4,-7,2,2,7,-3,-8,2,2,6,-3,-7,2,2,7,-2,-8,2,3,6,-2,-7,2,3,7,-2,-6,2,3,7,-3,-6,2,2,7,-2,-5,2,3,7,-3,-5,2,2,7,-2,-4,2,4,9,-3,-4,2,2,7,-2,-3,2,2,7,-3,-3,2,2,7,-4,-3,2,2,7,-4,-4,2,2,7,-3,-2,2,2,7,-4,-2,2,2,7,-3,-1,2,2,7,-4,-1,2,2,7,-3,0,2,2,7,-4,0,2,2,7,-6,-6,2,2,7,-7,-6,2,1,7,-6,-5,2,2,7,-7,-5,2,1,7,-6,-4,2,2,7,-7,-4,2,1,7,-6,-3,2,2,7,-7,-3,2,1,7,-6,-2,2,2,7,-7,-2,2,1,7,-6,-1,2,2,7,-7,-1,2,1,7,-6,0,2,2,7,-7,0,2,1,7,-6,1,2,2,7,-7,1,2,1,7,-6,2,2,2,7,-7,2,2,1,7,-6,3,2,2,7,-7,3,2,1,7,-6,4,2,2,7,-7,4,2,1,7,-6,5,2,2,7,-7,5,2,1,7,-6,6,2,2,8,-7,6,2,1,8,-5,5,2,2,7,-5,6,2,2,8,-4,5,2,2,7,-4,6,2,2,8,-3,5,2,2,7,-3,6,2,2,8,-2,5,2,3,7,-2,6,2,3,8,-2,4,2,3,7,-3,4,2,2,7,-2,3,2,4,8,-3,3,2,2,7,-2,2,2,2,7,-3,2,2,2,7,-2,1,2,2,7,-3,1,2,2,7,-2,0,2,2,7,-2,-1,2,2,7,-2,-2,2,2,7,-4,-6,2,2,7,-4,-5,2,2,7,-5,-5,2,2,7,-5,-6,2,2,7,-5,-4,2,2,7,-5,-3,2,2,7,-5,-2,2,2,7,-5,-1,2,2,7,-5,0,2,2,7,-4,1,2,2,7,-5,1,2,2,7,-4,2,2,2,7,-5,2,2,2,7,-4,3,2,2,7,-5,3,2,2,7,-4,4,2,2,7,-5,4,2,2,7,0,-4,2,2,6,0,-3,2,2,7,-1,-3,2,2,7,-1,-4,2,2,6,1,-4,2,2,6,1,-3,2,2,7,2,-4,2,2,6,2,-3,2,2,7,3,-4,2,2,6,3,-3,2,2,7,4,-4,2,2,6,4,-3,2,2,7,5,-4,2,2,6,5,-3,2,2,7,6,-4,2,2,6,6,-3,2,2,7,7,-4,2,2,6,7,-3,2,2,7,8,-4,2,2,6,8,-3,2,2,7,-1,2,2,2,7,-1,3,2,2,8,0,2,2,2,7,0,3,2,2,8,1,2,2,2,7,1,3,2,2,8,2,2,2,2,7,2,3,2,2,8,3,2,2,2,7,3,3,2,2,8,4,2,2,2,7,4,3,2,2,8,5,2,2,2,7,5,3,2,2,8,6,2,2,2,7,6,3,2,2,8,7,2,2,2,7,7,3,2,2,8,8,2,2,2,7,8,3,2,2,8,9,2,2,2,7,9,3,2,5,8,10,2,2,2,7,10,3,2,2,7,11,2,2,2,7,11,3,2,2,7,11,1,2,2,7,10,1,2,2,7,11,0,2,2,7,10,0,2,2,7,9,1,2,2,7,9,0,2,2,7,10,-1,2,2,7,9,-1,2,2,7,10,-2,2,2,7,9,-2,2,2,7,8,-1,2,2,7,8,-2,2,2,7,7,-1,2,2,7,7,-2,2,2,7,6,-1,2,2,7,6,-2,2,2,7,5,-1,2,2,7,5,-2,2,2,7,4,-1,2,2,7,4,-2,2,2,7,3,-1,2,2,7,3,-2,2,2,7,2,-1,2,2,7,2,-2,2,2,7,1,-1,2,2,7,1,-2,2,2,7,0,-1,2,2,7,0,-2,2,2,7,-1,-1,2,2,7,-1,-2,2,2,7,-1,0,2,2,7,-1,1,2,2,7,0,1,2,2,7,1,1,2,2,7,2,1,2,2,7,3,1,2,2,7,4,1,2,2,7,5,1,2,2,7,6,1,2,2,7,7,1,2,2,7,7,0,2,2,7,6,0,2,2,7,5,0,2,2,7,4,0,2,2,7,3,0,2,2,7,2,0,2,2,7,1,0,2,2,7,0,0,2,2,7,8,0,2,2,7,8,1,2,2,7,10,4,2,2,7,9,4,2,1,7,10,5,2,2,7,9,5,2,1,7,10,6,2,2,8,9,6,2,1,8,11,5,2,2,7,11,6,2,2,8,12,5,2,2,7,12,6,2,2,8,13,5,2,2,7,13,6,2,2,8,14,5,2,3,7,14,6,2,3,8,14,4,2,3,7,13,4,2,2,7,14,3,2,3,7,13,3,2,2,7,14,2,2,3,7,13,2,2,2,7,14,1,2,3,7,13,1,2,2,7,14,0,2,3,7,13,0,2,2,7,14,-1,2,3,7,14,-2,2,3,7,14,-3,2,3,7,14,-4,2,3,7,14,-5,2,3,7,14,-6,2,3,7,14,-7,2,3,7,13,-1,2,2,7,13,-2,2,2,7,13,-3,2,2,7,13,-4,2,2,7,13,-5,2,2,7,13,-6,2,2,7,13,-7,2,2,7,12,4,2,2,7,12,3,2,2,7,12,2,2,2,7,12,1,2,2,7,12,0,2,2,7,12,-1,2,2,7,12,-2,2,2,7,12,-3,2,2,7,12,-4,2,2,7,12,-5,2,2,7,12,-6,2,2,7,12,-7,2,2,7,11,4,2,2,7,11,-1,2,2,7,11,-2,2,2,7,11,-3,2,2,7,11,-4,2,2,7,11,-5,2,2,7,11,-6,2,2,7,11,-7,2,2,7,10,-3,2,2,7,10,-4,2,2,7,10,-5,2,2,7,10,-6,2,2,7,10,-7,2,2,7,9,-3,2,2,7,9,-4,2,5,9,9,-5,2,1,7,9,-6,2,1,7,9,-7,2,1,7,14,-8,2,3,6,13,-8,2,2,6,12,-8,2,2,6,11,-8,2,2,6,10,-8,2,2,6,9,-8,2,1,6],"CustomFloor2":[-5,-1,1,12,4,-4,-1,1,13,4,-2,1,1,14,6,11,3,1,13,6,12,-5,1,13,5,-6,-7,1,8,11,8,0,1,6,14,8,1,1,6,15,9,1,1,7,15,10,1,1,8,15,10,0,1,8,14,9,0,1,7,14,2,-3,1,6,14,2,-2,1,6,15,3,-2,1,7,15,4,-2,1,8,15,4,-3,1,8,14,3,-3,1,7,14,10,-3,1,7,12,10,-2,1,7,13,11,-2,1,8,13,11,-3,1,8,12],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png
new file mode 100644
index 0000000..7f7b4b5
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png.import
new file mode 100644
index 0000000..dba2a30
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://8mo2r2lt12sx"
+path="res://.godot/imported/Preview.png-b0ff3b32424b16028ed7b4659c78de50.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/battle/Battle4/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-b0ff3b32424b16028ed7b4659c78de50.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/RoomInfo.json
new file mode 100644
index 0000000..c9960e1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-13,"Y":-26},"Size":{"X":36,"Y":33},"DoorAreaInfos":[{"Direction":1,"Start":0,"End":448},{"Direction":2,"Start":0,"End":512},{"Direction":0,"Start":0,"End":448},{"Direction":3,"Start":0,"End":512}],"GroupName":"Test1","RoomType":1,"RoomName":"Battle4","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/TileInfo.json
new file mode 100644
index 0000000..81d2236
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle4/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":278,"Y":-218},{"X":278,"Y":-302},{"X":330,"Y":-362},{"X":330,"Y":82},{"X":-170,"Y":-362},{"X":186,"Y":-302},{"X":278,"Y":6},{"X":-170,"Y":82},{"X":186,"Y":6},{"X":-10,"Y":6},{"X":186,"Y":-78},{"X":-102,"Y":6},{"X":-102,"Y":-78},{"X":-10,"Y":-78},{"X":186,"Y":-218},{"X":-10,"Y":-218},{"X":-10,"Y":-302},{"X":-102,"Y":-302},{"X":-102,"Y":-218},{"X":278,"Y":-78}],"NavigationPolygon":[[0,1,2,3],[4,2,1,5],[6,3,7,8],[8,7,9,10],[11,9,7],[11,7,4,12],[10,9,13],[5,14,15,16],[4,5,16],[4,16,17],[4,17,18],[12,4,18],[13,12,18,15],[10,13,15,14],[19,10,14,0],[19,0,3],[19,3,6]],"Floor":[-11,-23,0,3,-11,-22,0,3,-11,-21,0,3,-11,-20,0,3,-11,-19,0,3,-11,-18,0,3,-11,-17,0,3,-11,-16,0,3,-11,-15,0,3,-11,-14,0,3,-11,-13,0,3,-11,-12,0,3,-11,-11,0,3,-11,-10,0,3,-11,-9,0,3,-11,-8,0,3,-11,-7,0,3,-11,-6,0,3,-11,-5,0,3,-11,-4,0,3,-11,-3,0,3,-11,-2,0,3,-11,-1,0,3,-11,0,0,3,-11,1,0,3,-11,2,0,3,-11,3,0,3,-11,4,0,3,-10,-23,0,3,-10,-22,0,3,-10,-21,0,3,-10,-20,0,3,-10,-19,0,3,-10,-18,0,3,-10,-17,0,3,-10,-16,0,3,-10,-15,0,3,-10,-14,0,3,-10,-13,0,3,-10,-12,0,3,-10,-11,0,3,-10,-10,0,3,-10,-9,0,3,-10,-8,0,3,-10,-7,0,3,-10,-6,0,3,-10,-5,0,3,-10,-4,0,3,-10,-3,0,3,-10,-2,0,3,-10,-1,0,3,-10,0,0,3,-10,1,0,3,-10,2,0,3,-10,3,0,3,-10,4,0,3,-9,-23,0,3,-9,-22,0,3,-9,-21,0,3,-9,-20,0,3,-9,-19,0,3,-9,-18,0,3,-9,-17,0,3,-9,-16,0,3,-9,-15,0,3,-9,-14,0,3,-9,-13,0,3,-9,-12,0,3,-9,-11,0,3,-9,-10,0,3,-9,-9,0,3,-9,-8,0,3,-9,-7,0,3,-9,-6,0,3,-9,-5,0,3,-9,-4,0,3,-9,-3,0,3,-9,-2,0,3,-9,-1,0,3,-9,0,0,3,-9,1,0,3,-9,2,0,3,-9,3,0,3,-9,4,0,3,-8,-23,0,3,-8,-22,0,3,-8,-21,0,3,-8,-20,0,3,-8,-19,0,3,-8,-18,0,3,-8,-17,0,3,-8,-16,0,3,-8,-15,0,3,-8,-14,0,3,-8,-13,0,3,-8,-12,0,3,-8,-11,0,3,-8,-10,0,3,-8,-9,0,3,-8,-8,0,3,-8,-7,0,3,-8,-6,0,3,-8,-5,0,3,-8,-4,0,3,-8,-3,0,3,-8,-2,0,3,-8,-1,0,3,-8,0,0,3,-8,1,0,3,-8,2,0,3,-8,3,0,3,-8,4,0,3,-7,-23,0,3,-7,-22,0,3,-7,-21,0,3,-7,-20,0,3,-7,-19,0,3,-7,-18,0,3,-7,-17,0,3,-7,-16,0,3,-7,-15,0,3,-7,-14,0,3,-7,-13,0,3,-7,-12,0,3,-7,-11,0,3,-7,-10,0,3,-7,-9,0,3,-7,-8,0,3,-7,-7,0,3,-7,-6,0,3,-7,-5,0,3,-7,-4,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-7,4,0,3,-6,-23,0,3,-6,-22,0,3,-6,-21,0,3,-6,-20,0,3,-6,-14,0,3,-6,-13,0,3,-6,-12,0,3,-6,-11,0,3,-6,-10,0,3,-6,-9,0,3,-6,-8,0,3,-6,-7,0,3,-6,-6,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-6,4,0,3,-5,-23,0,3,-5,-22,0,3,-5,-21,0,3,-5,-20,0,3,-5,-14,0,3,-5,-13,0,3,-5,-12,0,3,-5,-11,0,3,-5,-10,0,3,-5,-9,0,3,-5,-8,0,3,-5,-7,0,3,-5,-6,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,-5,4,0,3,-4,-23,0,3,-4,-22,0,3,-4,-21,0,3,-4,-20,0,3,-4,-14,0,3,-4,-13,0,3,-4,-12,0,3,-4,-11,0,3,-4,-10,0,3,-4,-9,0,3,-4,-8,0,3,-4,-7,0,3,-4,-6,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-4,3,0,3,-4,4,0,3,-3,-23,0,3,-3,-22,0,3,-3,-21,0,3,-3,-20,0,3,-3,-14,0,3,-3,-13,0,3,-3,-12,0,3,-3,-11,0,3,-3,-10,0,3,-3,-9,0,3,-3,-8,0,3,-3,-7,0,3,-3,-6,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-3,3,0,3,-3,4,0,3,-2,-23,0,3,-2,-22,0,3,-2,-21,0,3,-2,-20,0,3,-2,-14,0,3,-2,-13,0,3,-2,-12,0,3,-2,-11,0,3,-2,-10,0,3,-2,-9,0,3,-2,-8,0,3,-2,-7,0,3,-2,-6,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-2,3,0,3,-2,4,0,3,-1,-23,0,3,-1,-22,0,3,-1,-21,0,3,-1,-20,0,3,-1,-19,0,3,-1,-18,0,3,-1,-17,0,3,-1,-16,0,3,-1,-15,0,3,-1,-14,0,3,-1,-13,0,3,-1,-12,0,3,-1,-11,0,3,-1,-10,0,3,-1,-9,0,3,-1,-8,0,3,-1,-7,0,3,-1,-6,0,3,-1,-5,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,-1,3,0,3,-1,4,0,3,0,-23,0,3,0,-22,0,3,0,-21,0,3,0,-20,0,3,0,-19,0,3,0,-18,0,3,0,-17,0,3,0,-16,0,3,0,-15,0,3,0,-14,0,3,0,-13,0,3,0,-12,0,3,0,-11,0,3,0,-10,0,3,0,-9,0,3,0,-8,0,3,0,-7,0,3,0,-6,0,3,0,-5,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,0,3,0,3,0,4,0,3,1,-23,0,3,1,-22,0,3,1,-21,0,3,1,-20,0,3,1,-19,0,3,1,-18,0,3,1,-17,0,3,1,-16,0,3,1,-15,0,3,1,-14,0,3,1,-13,0,3,1,-12,0,3,1,-11,0,3,1,-10,0,3,1,-9,0,3,1,-8,0,3,1,-7,0,3,1,-6,0,3,1,-5,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,1,3,0,3,1,4,0,3,2,-23,0,3,2,-22,0,3,2,-21,0,3,2,-20,0,3,2,-19,0,3,2,-18,0,3,2,-17,0,3,2,-16,0,3,2,-15,0,3,2,-14,0,3,2,-13,0,3,2,-12,0,3,2,-11,0,3,2,-10,0,3,2,-9,0,3,2,-8,0,3,2,-7,0,3,2,-6,0,3,2,-5,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,2,1,0,3,2,2,0,3,2,3,0,3,2,4,0,3,3,-23,0,3,3,-22,0,3,3,-21,0,3,3,-20,0,3,3,-19,0,3,3,-18,0,3,3,-17,0,3,3,-16,0,3,3,-15,0,3,3,-14,0,3,3,-13,0,3,3,-12,0,3,3,-11,0,3,3,-10,0,3,3,-9,0,3,3,-8,0,3,3,-7,0,3,3,-6,0,3,3,-5,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,3,1,0,3,3,2,0,3,3,3,0,3,3,4,0,3,4,-23,0,3,4,-22,0,3,4,-21,0,3,4,-20,0,3,4,-19,0,3,4,-18,0,3,4,-17,0,3,4,-16,0,3,4,-15,0,3,4,-14,0,3,4,-13,0,3,4,-12,0,3,4,-11,0,3,4,-10,0,3,4,-9,0,3,4,-8,0,3,4,-7,0,3,4,-6,0,3,4,-5,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,4,1,0,3,4,2,0,3,4,3,0,3,4,4,0,3,5,-23,0,3,5,-22,0,3,5,-21,0,3,5,-20,0,3,5,-19,0,3,5,-18,0,3,5,-17,0,3,5,-16,0,3,5,-15,0,3,5,-14,0,3,5,-13,0,3,5,-12,0,3,5,-11,0,3,5,-10,0,3,5,-9,0,3,5,-8,0,3,5,-7,0,3,5,-6,0,3,5,-5,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,5,0,0,3,5,1,0,3,5,2,0,3,5,3,0,3,5,4,0,3,6,-23,0,3,6,-22,0,3,6,-21,0,3,6,-20,0,3,6,-19,0,3,6,-18,0,3,6,-17,0,3,6,-16,0,3,6,-15,0,3,6,-14,0,3,6,-13,0,3,6,-12,0,3,6,-11,0,3,6,-10,0,3,6,-9,0,3,6,-8,0,3,6,-7,0,3,6,-6,0,3,6,-5,0,3,6,-4,0,3,6,-3,0,3,6,-2,0,3,6,-1,0,3,6,0,0,3,6,1,0,3,6,2,0,3,6,3,0,3,6,4,0,3,7,-23,0,3,7,-22,0,3,7,-21,0,3,7,-20,0,3,7,-19,0,3,7,-18,0,3,7,-17,0,3,7,-16,0,3,7,-15,0,3,7,-14,0,3,7,-13,0,3,7,-12,0,3,7,-11,0,3,7,-10,0,3,7,-9,0,3,7,-8,0,3,7,-7,0,3,7,-6,0,3,7,-5,0,3,7,-4,0,3,7,-3,0,3,7,-2,0,3,7,-1,0,3,7,0,0,3,7,1,0,3,7,2,0,3,7,3,0,3,7,4,0,3,8,-23,0,3,8,-22,0,3,8,-21,0,3,8,-20,0,3,8,-19,0,3,8,-18,0,3,8,-17,0,3,8,-16,0,3,8,-15,0,3,8,-14,0,3,8,-13,0,3,8,-12,0,3,8,-11,0,3,8,-10,0,3,8,-9,0,3,8,-8,0,3,8,-7,0,3,8,-6,0,3,8,-5,0,3,8,-4,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,8,3,0,3,8,4,0,3,9,-23,0,3,9,-22,0,3,9,-21,0,3,9,-20,0,3,9,-19,0,3,9,-18,0,3,9,-17,0,3,9,-16,0,3,9,-15,0,3,9,-14,0,3,9,-13,0,3,9,-12,0,3,9,-11,0,3,9,-10,0,3,9,-9,0,3,9,-8,0,3,9,-7,0,3,9,-6,0,3,9,-5,0,3,9,-4,0,3,9,-3,0,3,9,-2,0,3,9,-1,0,3,9,0,0,3,9,1,0,3,9,2,0,3,9,3,0,3,9,4,0,3,10,-23,0,3,10,-22,0,3,10,-21,0,3,10,-20,0,3,10,-19,0,3,10,-18,0,3,10,-17,0,3,10,-16,0,3,10,-15,0,3,10,-14,0,3,10,-13,0,3,10,-12,0,3,10,-11,0,3,10,-10,0,3,10,-9,0,3,10,-8,0,3,10,-7,0,3,10,-6,0,3,10,-5,0,3,10,-4,0,3,10,-3,0,3,10,-2,0,3,10,-1,0,3,10,0,0,3,10,1,0,3,10,2,0,3,10,3,0,3,10,4,0,3,11,-23,0,3,11,-22,0,3,11,-21,0,3,11,-20,0,3,11,-19,0,3,11,-18,0,3,11,-17,0,3,11,-16,0,3,11,-15,0,3,11,-14,0,3,11,-13,0,3,11,-12,0,3,11,-11,0,3,11,-10,0,3,11,-9,0,3,11,-8,0,3,11,-7,0,3,11,-6,0,3,11,-5,0,3,11,-4,0,3,11,-3,0,3,11,-2,0,3,11,-1,0,3,11,0,0,3,11,1,0,3,11,2,0,3,11,3,0,3,11,4,0,3,12,-23,0,3,12,-22,0,3,12,-21,0,3,12,-20,0,3,12,-14,0,3,12,-13,0,3,12,-12,0,3,12,-11,0,3,12,-10,0,3,12,-9,0,3,12,-8,0,3,12,-7,0,3,12,-6,0,3,12,0,0,3,12,1,0,3,12,2,0,3,12,3,0,3,12,4,0,3,13,-23,0,3,13,-22,0,3,13,-21,0,3,13,-20,0,3,13,-14,0,3,13,-13,0,3,13,-12,0,3,13,-11,0,3,13,-10,0,3,13,-9,0,3,13,-8,0,3,13,-7,0,3,13,-6,0,3,13,0,0,3,13,1,0,3,13,2,0,3,13,3,0,3,13,4,0,3,14,-23,0,3,14,-22,0,3,14,-21,0,3,14,-20,0,3,14,-14,0,3,14,-13,0,3,14,-12,0,3,14,-11,0,3,14,-10,0,3,14,-9,0,3,14,-8,0,3,14,-7,0,3,14,-6,0,3,14,0,0,3,14,1,0,3,14,2,0,3,14,3,0,3,14,4,0,3,15,-23,0,3,15,-22,0,3,15,-21,0,3,15,-20,0,3,15,-14,0,3,15,-13,0,3,15,-12,0,3,15,-11,0,3,15,-10,0,3,15,-9,0,3,15,-8,0,3,15,-7,0,3,15,-6,0,3,15,0,0,3,15,1,0,3,15,2,0,3,15,3,0,3,15,4,0,3,16,-23,0,3,16,-22,0,3,16,-21,0,3,16,-20,0,3,16,-14,0,3,16,-13,0,3,16,-12,0,3,16,-11,0,3,16,-10,0,3,16,-9,0,3,16,-8,0,3,16,-7,0,3,16,-6,0,3,16,0,0,3,16,1,0,3,16,2,0,3,16,3,0,3,16,4,0,3,17,-23,0,3,17,-22,0,3,17,-21,0,3,17,-20,0,3,17,-19,0,3,17,-18,0,3,17,-17,0,3,17,-16,0,3,17,-15,0,3,17,-14,0,3,17,-13,0,3,17,-12,0,3,17,-11,0,3,17,-10,0,3,17,-9,0,3,17,-8,0,3,17,-7,0,3,17,-6,0,3,17,-5,0,3,17,-4,0,3,17,-3,0,3,17,-2,0,3,17,-1,0,3,17,0,0,3,17,1,0,3,17,2,0,3,17,3,0,3,17,4,0,3,18,-23,0,3,18,-22,0,3,18,-21,0,3,18,-20,0,3,18,-19,0,3,18,-18,0,3,18,-17,0,3,18,-16,0,3,18,-15,0,3,18,-14,0,3,18,-13,0,3,18,-12,0,3,18,-11,0,3,18,-10,0,3,18,-9,0,3,18,-8,0,3,18,-7,0,3,18,-6,0,3,18,-5,0,3,18,-4,0,3,18,-3,0,3,18,-2,0,3,18,-1,0,3,18,0,0,3,18,1,0,3,18,2,0,3,18,3,0,3,18,4,0,3,19,-23,0,3,19,-22,0,3,19,-21,0,3,19,-20,0,3,19,-19,0,3,19,-18,0,3,19,-17,0,3,19,-16,0,3,19,-15,0,3,19,-14,0,3,19,-13,0,3,19,-12,0,3,19,-11,0,3,19,-10,0,3,19,-9,0,3,19,-8,0,3,19,-7,0,3,19,-6,0,3,19,-5,0,3,19,-4,0,3,19,-3,0,3,19,-2,0,3,19,-1,0,3,19,0,0,3,19,1,0,3,19,2,0,3,19,3,0,3,19,4,0,3,20,-23,0,3,20,-22,0,3,20,-21,0,3,20,-20,0,3,20,-19,0,3,20,-18,0,3,20,-17,0,3,20,-16,0,3,20,-15,0,3,20,-14,0,3,20,-13,0,3,20,-12,0,3,20,-11,0,3,20,-10,0,3,20,-9,0,3,20,-8,0,3,20,-7,0,3,20,-6,0,3,20,-5,0,3,20,-4,0,3,20,-3,0,3,20,-2,0,3,20,-1,0,3,20,0,0,3,20,1,0,3,20,2,0,3,20,3,0,3,20,4,0,3],"Middle":[-11,-26,63,1,-11,-25,2,2,-11,-24,6,2,-10,-26,63,1,-10,-25,2,2,-10,-24,6,2,-9,-26,63,1,-9,-25,2,2,-9,-24,6,2,-8,-26,63,1,-8,-25,2,2,-8,-24,6,2,-7,-26,63,1,-7,-25,2,2,-7,-24,6,2,-6,-26,63,1,-6,-25,2,2,-6,-24,6,2,-6,-17,54,1,-6,-16,1,2,-6,-15,5,2,-6,-3,54,1,-6,-2,1,2,-6,-1,5,2,-5,-26,63,1,-5,-25,2,2,-5,-24,6,2,-5,-17,63,1,-5,-16,2,2,-5,-15,6,2,-5,-3,63,1,-5,-2,2,2,-5,-1,6,2,-4,-26,63,1,-4,-25,2,2,-4,-24,6,2,-4,-17,63,1,-4,-16,2,2,-4,-15,6,2,-4,-3,63,1,-4,-2,2,2,-4,-1,6,2,-3,-26,63,1,-3,-25,2,2,-3,-24,6,2,-3,-17,63,1,-3,-16,2,2,-3,-15,6,2,-3,-3,63,1,-3,-2,2,2,-3,-1,6,2,-2,-26,63,1,-2,-25,2,2,-2,-24,6,2,-2,-17,27,1,-2,-16,3,2,-2,-15,7,2,-2,-3,27,1,-2,-2,3,2,-2,-1,7,2,-1,-26,63,1,-1,-25,2,2,-1,-24,6,2,0,-26,63,1,0,-25,2,2,0,-24,6,2,1,-26,63,1,1,-25,2,2,1,-24,6,2,2,-26,63,1,2,-25,2,2,2,-24,6,2,3,-26,63,1,3,-25,2,2,3,-24,6,2,4,-26,63,1,4,-25,2,2,4,-24,6,2,5,-26,63,1,5,-25,2,2,5,-24,6,2,6,-26,63,1,6,-25,2,2,6,-24,6,2,7,-26,63,1,7,-25,2,2,7,-24,6,2,8,-26,63,1,8,-25,2,2,8,-24,6,2,9,-26,63,1,9,-25,2,2,9,-24,6,2,10,-26,63,1,10,-25,2,2,10,-24,6,2,11,-26,63,1,11,-25,2,2,11,-24,6,2,12,-26,63,1,12,-25,2,2,12,-24,6,2,12,-17,54,1,12,-16,1,2,12,-15,5,2,12,-3,54,1,12,-2,1,2,12,-1,5,2,13,-26,63,1,13,-25,2,2,13,-24,6,2,13,-17,63,1,13,-16,2,2,13,-15,6,2,13,-3,63,1,13,-2,2,2,13,-1,6,2,14,-26,63,1,14,-25,2,2,14,-24,6,2,14,-17,63,1,14,-16,2,2,14,-15,6,2,14,-3,63,1,14,-2,2,2,14,-1,6,2,15,-26,63,1,15,-25,2,2,15,-24,6,2,15,-17,63,1,15,-16,2,2,15,-15,6,2,15,-3,63,1,15,-2,2,2,15,-1,6,2,16,-26,63,1,16,-25,2,2,16,-24,6,2,16,-17,27,1,16,-16,3,2,16,-15,7,2,16,-3,27,1,16,-2,3,2,16,-1,7,2,17,-26,63,1,17,-25,2,2,17,-24,6,2,18,-26,63,1,18,-25,2,2,18,-24,6,2,19,-26,63,1,19,-25,2,2,19,-24,6,2,20,-26,63,1,20,-25,2,2,20,-24,6,2],"Top":[-13,-27,511,1,-13,-26,511,1,-13,-25,511,1,-13,-24,511,1,-13,-23,511,1,-13,-22,511,1,-13,-21,511,1,-13,-20,511,1,-13,-19,511,1,-13,-18,511,1,-13,-17,511,1,-13,-16,511,1,-13,-15,511,1,-13,-14,511,1,-13,-13,511,1,-13,-12,511,1,-13,-11,511,1,-13,-10,511,1,-13,-9,511,1,-13,-8,511,1,-13,-7,511,1,-13,-6,511,1,-13,-5,511,1,-13,-4,511,1,-13,-3,511,1,-13,-2,511,1,-13,-1,511,1,-13,0,511,1,-13,1,511,1,-13,2,511,1,-13,3,511,1,-13,4,511,1,-13,5,511,1,-13,6,511,1,-12,-27,511,1,-12,-26,255,1,-12,-25,219,1,-12,-24,219,1,-12,-23,219,1,-12,-22,219,1,-12,-21,219,1,-12,-20,219,1,-12,-19,219,1,-12,-18,219,1,-12,-17,219,1,-12,-16,219,1,-12,-15,219,1,-12,-14,219,1,-12,-13,219,1,-12,-12,219,1,-12,-11,219,1,-12,-10,219,1,-12,-9,219,1,-12,-8,219,1,-12,-7,219,1,-12,-6,219,1,-12,-5,219,1,-12,-4,219,1,-12,-3,219,1,-12,-2,219,1,-12,-1,219,1,-12,0,219,1,-12,1,219,1,-12,2,219,1,-12,3,219,1,-12,4,219,1,-12,5,507,1,-12,6,511,1,-11,-27,511,1,-11,5,504,1,-11,6,511,1,-10,-27,511,1,-10,5,504,1,-10,6,511,1,-9,-27,511,1,-9,5,504,1,-9,6,511,1,-8,-27,511,1,-8,5,504,1,-8,6,511,1,-7,-27,511,1,-7,5,504,1,-7,6,511,1,-6,-27,511,1,-6,-19,432,1,-6,-18,438,1,-6,-5,432,1,-6,-4,438,1,-6,5,504,1,-6,6,511,1,-5,-27,511,1,-5,-19,504,1,-5,-18,511,1,-5,-5,504,1,-5,-4,511,1,-5,5,504,1,-5,6,511,1,-4,-27,511,1,-4,-19,504,1,-4,-18,511,1,-4,-5,504,1,-4,-4,511,1,-4,5,504,1,-4,6,511,1,-3,-27,511,1,-3,-19,504,1,-3,-18,511,1,-3,-5,504,1,-3,-4,511,1,-3,5,504,1,-3,6,511,1,-2,-27,511,1,-2,-19,216,1,-2,-18,219,1,-2,-5,216,1,-2,-4,219,1,-2,5,504,1,-2,6,511,1,-1,-27,511,1,-1,5,504,1,-1,6,511,1,0,-27,511,1,0,5,504,1,0,6,511,1,1,-27,511,1,1,5,504,1,1,6,511,1,2,-27,511,1,2,5,504,1,2,6,511,1,3,-27,511,1,3,5,504,1,3,6,511,1,4,-27,511,1,4,5,504,1,4,6,511,1,5,-27,511,1,5,5,504,1,5,6,511,1,6,-27,511,1,6,5,504,1,6,6,511,1,7,-27,511,1,7,5,504,1,7,6,511,1,8,-27,511,1,8,5,504,1,8,6,511,1,9,-27,511,1,9,5,504,1,9,6,511,1,10,-27,511,1,10,5,504,1,10,6,511,1,11,-27,511,1,11,5,504,1,11,6,511,1,12,-27,511,1,12,-19,432,1,12,-18,438,1,12,-5,432,1,12,-4,438,1,12,5,504,1,12,6,511,1,13,-27,511,1,13,-19,504,1,13,-18,511,1,13,-5,504,1,13,-4,511,1,13,5,504,1,13,6,511,1,14,-27,511,1,14,-19,504,1,14,-18,511,1,14,-5,504,1,14,-4,511,1,14,5,504,1,14,6,511,1,15,-27,511,1,15,-19,504,1,15,-18,511,1,15,-5,504,1,15,-4,511,1,15,5,504,1,15,6,511,1,16,-27,511,1,16,-19,216,1,16,-18,219,1,16,-5,216,1,16,-4,219,1,16,5,504,1,16,6,511,1,17,-27,511,1,17,5,504,1,17,6,511,1,18,-27,511,1,18,5,504,1,18,6,511,1,19,-27,511,1,19,5,504,1,19,6,511,1,20,-27,511,1,20,5,504,1,20,6,511,1,21,-27,511,1,21,-26,447,1,21,-25,438,1,21,-24,438,1,21,-23,438,1,21,-22,438,1,21,-21,438,1,21,-20,438,1,21,-19,438,1,21,-18,438,1,21,-17,438,1,21,-16,438,1,21,-15,438,1,21,-14,438,1,21,-13,438,1,21,-12,438,1,21,-11,438,1,21,-10,438,1,21,-9,438,1,21,-8,438,1,21,-7,438,1,21,-6,438,1,21,-5,438,1,21,-4,438,1,21,-3,438,1,21,-2,438,1,21,-1,438,1,21,0,438,1,21,1,438,1,21,2,438,1,21,3,438,1,21,4,438,1,21,5,510,1,21,6,511,1,22,-27,511,1,22,-26,511,1,22,-25,511,1,22,-24,511,1,22,-23,511,1,22,-22,511,1,22,-21,511,1,22,-20,511,1,22,-19,511,1,22,-18,511,1,22,-17,511,1,22,-16,511,1,22,-15,511,1,22,-14,511,1,22,-13,511,1,22,-12,511,1,22,-11,511,1,22,-10,511,1,22,-9,511,1,22,-8,511,1,22,-7,511,1,22,-6,511,1,22,-5,511,1,22,-4,511,1,22,-3,511,1,22,-2,511,1,22,-1,511,1,22,0,511,1,22,1,511,1,22,2,511,1,22,3,511,1,22,4,511,1,22,5,511,1,22,6,511,1],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png
new file mode 100644
index 0000000..d47180e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png.import
new file mode 100644
index 0000000..338aee7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://brikrxahc8h8p"
+path="res://.godot/imported/Preview.png-1cb30b87cf71ad1cb9553eeb340968d5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/battle/Battle5/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-1cb30b87cf71ad1cb9553eeb340968d5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/RoomInfo.json
new file mode 100644
index 0000000..b592355
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-10,"Y":-18},"Size":{"X":21,"Y":24},"DoorAreaInfos":[{"Direction":2,"Start":0,"End":64},{"Direction":2,"Start":128,"End":272},{"Direction":0,"Start":192,"End":288},{"Direction":1,"Start":0,"End":288},{"Direction":3,"Start":0,"End":144}],"GroupName":"Test1","RoomType":1,"RoomName":"Battle5","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/TileInfo.json
new file mode 100644
index 0000000..37b48eb
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle5/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":10,"Y":-186},{"X":42,"Y":-186},{"X":42,"Y":-154},{"X":-26,"Y":-78},{"X":-70,"Y":-78},{"X":74,"Y":-154},{"X":74,"Y":-106},{"X":6,"Y":-14},{"X":-26,"Y":-14},{"X":106,"Y":-106},{"X":106,"Y":-74},{"X":122,"Y":-74},{"X":122,"Y":-42},{"X":6,"Y":66},{"X":138,"Y":-42},{"X":138,"Y":66},{"X":-70,"Y":66},{"X":-122,"Y":66},{"X":-122,"Y":-234},{"X":10,"Y":-234}],"NavigationPolygon":[[0,1,2,3,4],[3,2,5,6,7,8],[6,9,10,7],[7,10,11,12,13],[12,14,15,13],[4,16,17,18],[4,18,19,0]],"Floor":[-8,-15,0,3,-8,-14,0,3,-8,-13,0,3,-8,-12,0,3,-8,-11,0,3,-8,-10,0,3,-7,-15,0,3,-7,-14,0,3,-7,-13,0,3,-7,-12,0,3,-7,-11,0,3,-7,-10,0,3,-6,-15,0,3,-6,-14,0,3,-6,-13,0,3,-6,-12,0,3,-6,-11,0,3,-6,-10,0,3,-5,-15,0,3,-5,-14,0,3,-5,-13,0,3,-5,-12,0,3,-5,-11,0,3,-5,-10,0,3,-4,-15,0,3,-4,-14,0,3,-4,-13,0,3,-4,-12,0,3,-4,-11,0,3,-4,-10,0,3,-4,-9,0,3,-4,-8,0,3,-4,-7,0,3,-4,-6,0,3,-3,-15,0,3,-3,-14,0,3,-3,-13,0,3,-3,-12,0,3,-3,-11,0,3,-3,-10,0,3,-3,-9,0,3,-3,-8,0,3,-3,-7,0,3,-3,-6,0,3,-2,-15,0,3,-2,-14,0,3,-2,-13,0,3,-2,-12,0,3,-2,-11,0,3,-2,-10,0,3,-2,-9,0,3,-2,-8,0,3,-2,-7,0,3,-2,-6,0,3,-2,-5,0,3,-2,-4,0,3,-2,-3,0,3,-2,-2,0,3,-1,-15,0,3,-1,-14,0,3,-1,-13,0,3,-1,-12,0,3,-1,-11,0,3,-1,-10,0,3,-1,-9,0,3,-1,-8,0,3,-1,-7,0,3,-1,-6,0,3,-1,-5,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,0,-15,0,3,0,-14,0,3,0,-13,0,3,0,-12,0,3,0,-11,0,3,0,-10,0,3,0,-9,0,3,0,-8,0,3,0,-7,0,3,0,-6,0,3,0,-5,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,1,-12,0,3,1,-11,0,3,1,-10,0,3,1,-9,0,3,1,-8,0,3,1,-7,0,3,1,-6,0,3,1,-5,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,2,-12,0,3,2,-11,0,3,2,-10,0,3,2,-9,0,3,2,-8,0,3,2,-7,0,3,2,-6,0,3,2,-5,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,3,-10,0,3,3,-9,0,3,3,-8,0,3,3,-7,0,3,3,-6,0,3,3,-5,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,4,-10,0,3,4,-9,0,3,4,-8,0,3,4,-7,0,3,4,-6,0,3,4,-5,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,5,-7,0,3,5,-6,0,3,5,-5,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,6,-7,0,3,6,-6,0,3,6,-5,0,3,6,-4,0,3,6,-3,0,3,6,-2,0,3,7,-5,0,3,7,-4,0,3,7,-3,0,3,7,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,2,-1,0,3,2,0,0,3,2,1,0,3,2,2,0,3,3,-1,0,3,3,0,0,3,3,1,0,3,3,2,0,3,4,-1,0,3,4,0,0,3,4,1,0,3,4,2,0,3,5,-1,0,3,5,0,0,3,5,1,0,3,5,2,0,3,6,-1,0,3,6,0,0,3,6,1,0,3,6,2,0,3,7,-1,0,3,7,0,0,3,7,1,0,3,7,2,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,-8,-9,0,3,-8,-8,0,3,-8,-7,0,3,-8,-6,0,3,-8,-5,0,3,-8,-4,0,3,-8,-3,0,3,-8,-2,0,3,-8,-1,0,3,-8,0,0,3,-8,1,0,3,-8,2,0,3,-8,3,0,3,-7,-9,0,3,-7,-8,0,3,-7,-7,0,3,-7,-6,0,3,-7,-5,0,3,-7,-4,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-6,-9,0,3,-6,-8,0,3,-6,-7,0,3,-6,-6,0,3,-6,-5,0,3,-6,-4,0,3,-6,-3,0,3,-6,-2,0,3,-6,-1,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-5,-9,0,3,-5,-8,0,3,-5,-7,0,3,-5,-6,0,3,-5,-5,0,3,-5,-4,0,3,-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,0,3,0,3,1,3,0,3,2,3,0,3,3,3,0,3,4,3,0,3,5,3,0,3,6,3,0,3,7,3,0,3,8,3,0,3],"Middle":[-8,-18,63,1,-8,-17,2,2,-8,-16,6,2,-7,-18,63,1,-7,-17,2,2,-7,-16,6,2,-6,-18,63,1,-6,-17,2,2,-6,-16,6,2,-5,-18,63,1,-5,-17,2,2,-5,-16,6,2,-4,-18,63,1,-4,-17,2,2,-4,-16,6,2,-3,-18,63,1,-3,-17,2,2,-3,-16,6,2,-2,-18,63,1,-2,-17,2,2,-2,-16,6,2,-1,-18,63,1,-1,-17,2,2,-1,-16,6,2,0,-18,63,1,0,-17,2,2,0,-16,6,2,1,-15,54,1,1,-14,1,2,1,-13,5,2,2,-15,63,1,2,-14,2,2,2,-13,6,2,3,-13,54,1,3,-12,1,2,3,-11,5,2,4,-13,63,1,4,-12,2,2,4,-11,6,2,5,-10,54,1,5,-9,1,2,5,-8,5,2,6,-10,63,1,6,-9,2,2,6,-8,6,2,7,-8,54,1,7,-7,1,2,7,-6,5,2,8,-6,54,1,8,-5,1,2,8,-4,5,2],"Top":[-10,-19,511,1,-10,-18,511,1,-10,-17,511,1,-10,-16,511,1,-10,-15,511,1,-10,-14,511,1,-10,-13,511,1,-10,-12,511,1,-10,-11,511,1,-10,-10,511,1,-10,-9,511,1,-10,-8,511,1,-10,-7,511,1,-10,-6,511,1,-10,-5,511,1,-10,-4,511,1,-10,-3,511,1,-10,-2,511,1,-10,-1,511,1,-10,0,511,1,-10,1,511,1,-10,2,511,1,-10,3,511,1,-10,4,511,1,-10,5,511,1,-9,-19,511,1,-9,-18,255,1,-9,-17,219,1,-9,-16,219,1,-9,-15,219,1,-9,-14,219,1,-9,-13,219,1,-9,-12,219,1,-9,-11,219,1,-9,-10,219,1,-9,-9,219,1,-9,-8,219,1,-9,-7,219,1,-9,-6,219,1,-9,-5,219,1,-9,-4,219,1,-9,-3,219,1,-9,-2,219,1,-9,-1,219,1,-9,0,219,1,-9,1,219,1,-9,2,219,1,-9,3,219,1,-9,4,507,1,-9,5,511,1,-8,-19,511,1,-8,4,504,1,-8,5,511,1,-7,-19,511,1,-7,4,504,1,-7,5,511,1,-6,-19,511,1,-6,4,504,1,-6,5,511,1,-5,-19,511,1,-5,4,504,1,-5,5,511,1,-4,-19,511,1,-4,-5,432,1,-4,-4,438,1,-4,-3,438,1,-4,-2,438,1,-4,-1,438,1,-4,0,438,1,-4,1,438,1,-4,2,438,1,-4,3,438,1,-4,4,510,1,-4,5,511,1,-3,-19,511,1,-3,-5,216,1,-3,-4,219,1,-3,-3,219,1,-3,-2,219,1,-3,-1,507,1,-3,0,511,1,-3,1,511,1,-3,2,511,1,-3,3,511,1,-3,4,511,1,-3,5,511,1,-2,-19,511,1,-2,-1,504,1,-2,0,511,1,-2,1,511,1,-2,2,511,1,-2,3,511,1,-2,4,511,1,-2,5,511,1,-1,-19,511,1,-1,-1,216,1,-1,0,219,1,-1,1,219,1,-1,2,219,1,-1,3,219,1,-1,4,507,1,-1,5,511,1,0,-19,511,1,0,4,504,1,0,5,511,1,1,-19,511,1,1,-18,447,1,1,-17,438,1,1,-16,438,1,1,4,504,1,1,5,511,1,2,-19,511,1,2,-18,511,1,2,-17,511,1,2,-16,511,1,2,4,504,1,2,5,511,1,3,-16,511,1,3,-15,447,1,3,-14,438,1,3,4,504,1,3,5,511,1,4,-16,511,1,4,-15,511,1,4,-14,511,1,4,4,504,1,4,5,511,1,5,-14,511,1,5,-13,447,1,5,-12,438,1,5,-11,438,1,5,4,504,1,5,5,511,1,6,-14,511,1,6,-13,511,1,6,-12,511,1,6,-11,511,1,6,4,504,1,6,5,511,1,7,-11,511,1,7,-10,447,1,7,-9,438,1,7,4,504,1,7,5,511,1,8,-11,511,1,8,-10,511,1,8,-9,511,1,8,-8,447,1,8,-7,438,1,8,4,504,1,8,5,511,1,9,-9,511,1,9,-8,511,1,9,-7,511,1,9,-6,447,1,9,-5,438,1,9,-4,438,1,9,-3,438,1,9,-2,438,1,9,-1,438,1,9,0,438,1,9,1,438,1,9,2,438,1,9,3,438,1,9,4,510,1,9,5,511,1,10,-7,511,1,10,-6,511,1,10,-5,511,1,10,-4,511,1,10,-3,511,1,10,-2,511,1,10,-1,511,1,10,0,511,1,10,1,511,1,10,2,511,1,10,3,511,1,10,4,511,1,10,5,511,1],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/Preview.png
new file mode 100644
index 0000000..aa0623d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/Preview.png.import
new file mode 100644
index 0000000..63ea7e2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dqhw8cc6jtcwy"
+path="res://.godot/imported/Preview.png-f56db6b1aa1f03fe38d599da6ffe5d60.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/battle/Battle6/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-f56db6b1aa1f03fe38d599da6ffe5d60.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/RoomInfo.json
new file mode 100644
index 0000000..6d58834
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-8,"Y":-7},"Size":{"X":15,"Y":18},"DoorAreaInfos":[{"Direction":3,"Start":32,"End":176},{"Direction":0,"Start":80,"End":160},{"Direction":2,"Start":48,"End":128},{"Direction":1,"Start":96,"End":192}],"GroupName":"Test1","RoomType":1,"RoomName":"Battle6","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/TileInfo.json
new file mode 100644
index 0000000..5979864
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/battle/Battle6/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":74,"Y":22},{"X":74,"Y":106},{"X":26,"Y":106},{"X":22,"Y":86},{"X":22,"Y":42},{"X":10,"Y":22},{"X":-38,"Y":42},{"X":-74,"Y":38},{"X":-58,"Y":-58},{"X":74,"Y":-58},{"X":74,"Y":-22},{"X":10,"Y":-22},{"X":-58,"Y":-42},{"X":26,"Y":154},{"X":-42,"Y":154},{"X":-42,"Y":138},{"X":-38,"Y":86},{"X":-90,"Y":138},{"X":-90,"Y":38},{"X":-74,"Y":-42}],"NavigationPolygon":[[0,1,2,3,4],[5,0,4,6,7],[8,9,10,11,12],[2,13,14,15,16,3],[15,17,18,7,6,16],[7,19,12,11,5]],"Floor":[-4,-4,0,3,-3,-4,0,3,-2,-4,0,3,-1,-4,0,3,0,-4,0,3,1,-4,0,3,2,-4,0,3,3,-4,0,3,4,-4,0,3,4,-3,0,3,3,-3,0,3,2,-3,0,3,1,-3,0,3,0,-3,0,3,-1,-3,0,3,-2,-3,0,3,-3,-3,0,3,-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-4,-3,0,3,-4,-2,0,3,-4,-1,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-3,-2,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,5,0,3,1,1,0,3,1,2,0,3,1,3,0,3,1,4,0,3,1,5,0,3,2,1,0,3,2,2,0,3,2,3,0,3,2,4,0,3,2,5,0,3,3,1,0,3,3,2,0,3,3,3,0,3,3,4,0,3,3,5,0,3,4,1,0,3,4,2,0,3,4,3,0,3,4,4,0,3,4,5,0,3,-3,3,0,3,-3,4,0,3,-3,5,0,3,-2,5,0,3,-1,5,0,3,-6,2,0,3,-6,3,0,3,-6,4,0,3,-6,5,0,3,-6,6,0,3,-6,7,0,3,-5,3,0,3,-5,4,0,3,-5,5,0,3,-5,6,0,3,-5,7,0,3,-4,3,0,3,-4,4,0,3,-4,5,0,3,-4,6,0,3,-4,7,0,3,-3,6,0,3,-3,7,0,3,-3,8,0,3,-2,6,0,3,-2,7,0,3,-2,8,0,3,-1,6,0,3,-1,7,0,3,-1,8,0,3,0,6,0,3,0,7,0,3,0,8,0,3,1,6,0,3,1,7,0,3,1,8,0,3],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/Preview.png
new file mode 100644
index 0000000..478b35a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/Preview.png.import
new file mode 100644
index 0000000..b80c33b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dp0vxdpgngsj8"
+path="res://.godot/imported/Preview.png-46acff5fa2872af249169769a17dd53e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/boss/Boss1/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-46acff5fa2872af249169769a17dd53e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/RoomInfo.json
new file mode 100644
index 0000000..bb3bf54
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-7,"Y":-13},"Size":{"X":24,"Y":20},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":8,"RoomName":"Boss1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/TileInfo.json
new file mode 100644
index 0000000..29ba246
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/boss/Boss1/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":198,"Y":54},{"X":234,"Y":82},{"X":-74,"Y":82},{"X":138,"Y":54},{"X":234,"Y":-154},{"X":198,"Y":-30},{"X":-74,"Y":-154},{"X":170,"Y":-30},{"X":-10,"Y":-110},{"X":22,"Y":-26},{"X":22,"Y":-78},{"X":170,"Y":2},{"X":138,"Y":2},{"X":-10,"Y":-78},{"X":-38,"Y":-26},{"X":-38,"Y":-110}],"NavigationPolygon":[[0,1,2,3],[4,1,0,5],[6,4,5,7,8],[9,10,7,11,12],[10,13,8],[9,12,3,2,14],[14,2,6,15],[8,15,6],[8,7,10]],"Floor":[-5,-10,0,3,-5,-9,0,3,-5,-8,0,3,-5,-7,0,3,-5,-6,0,3,-5,-5,0,3,-5,-4,0,3,-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,-4,-10,0,3,-4,-9,0,3,-4,-8,0,3,-4,-7,0,3,-4,-6,0,3,-4,-5,0,3,-4,-4,0,3,-4,-3,0,3,-4,-2,0,3,-4,-1,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-4,3,0,3,-3,-10,0,3,-3,-9,0,3,-3,-8,0,3,-3,-7,0,3,-3,-6,0,3,-3,-5,0,3,-3,-4,0,3,-3,-3,0,3,-3,-2,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-3,3,0,3,-2,-10,0,3,-2,-9,0,3,-2,-8,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-2,3,0,3,-1,-10,0,3,-1,-9,0,3,-1,-8,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,-1,3,0,3,0,-10,0,3,0,-9,0,3,0,-8,0,3,0,-7,0,3,0,-6,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,0,3,0,3,1,-10,0,3,1,-9,0,3,1,-8,0,3,1,-7,0,3,1,-6,0,3,1,-5,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,1,3,0,3,2,-10,0,3,2,-9,0,3,2,-8,0,3,2,-7,0,3,2,-6,0,3,2,-5,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,2,1,0,3,2,2,0,3,2,3,0,3,3,-10,0,3,3,-9,0,3,3,-8,0,3,3,-7,0,3,3,-6,0,3,3,-5,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,3,1,0,3,3,2,0,3,3,3,0,3,4,-10,0,3,4,-9,0,3,4,-8,0,3,4,-7,0,3,4,-6,0,3,4,-5,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,4,1,0,3,4,2,0,3,4,3,0,3,5,-10,0,3,5,-9,0,3,5,-8,0,3,5,-7,0,3,5,-6,0,3,5,-5,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,5,0,0,3,5,1,0,3,5,2,0,3,5,3,0,3,6,-10,0,3,6,-9,0,3,6,-8,0,3,6,-7,0,3,6,-6,0,3,6,-5,0,3,6,-4,0,3,6,-3,0,3,6,-2,0,3,6,-1,0,3,6,0,0,3,6,1,0,3,6,2,0,3,6,3,0,3,7,-10,0,3,7,-9,0,3,7,-8,0,3,7,-7,0,3,7,-6,0,3,7,-5,0,3,7,-4,0,3,7,-3,0,3,7,-2,0,3,7,-1,0,3,7,2,0,3,7,3,0,3,8,-10,0,3,8,-9,0,3,8,-8,0,3,8,-7,0,3,8,-6,0,3,8,-5,0,3,8,-4,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,2,0,3,8,3,0,3,9,-10,0,3,9,-9,0,3,9,-8,0,3,9,-7,0,3,9,-6,0,3,9,-5,0,3,9,-4,0,3,9,-3,0,3,9,-2,0,3,9,-1,0,3,9,3,0,3,10,-10,0,3,10,-9,0,3,10,-8,0,3,10,-7,0,3,10,-6,0,3,10,-5,0,3,10,-4,0,3,10,-3,0,3,10,3,0,3,11,-10,0,3,11,-9,0,3,11,-8,0,3,11,-7,0,3,11,-6,0,3,11,-5,0,3,11,-4,0,3,11,-3,0,3,11,3,0,3,12,-10,0,3,12,-9,0,3,12,-8,0,3,12,-7,0,3,12,-6,0,3,12,-5,0,3,12,-4,0,3,12,-3,0,3,12,-2,0,3,12,-1,0,3,12,0,0,3,12,1,0,3,12,2,0,3,12,3,0,3,13,-10,0,3,13,-9,0,3,13,-8,0,3,13,-7,0,3,13,-6,0,3,13,-5,0,3,13,-4,0,3,13,-3,0,3,13,-2,0,3,13,-1,0,3,13,0,0,3,13,1,0,3,13,2,0,3,13,3,0,3,7,0,0,3,7,1,0,3,-5,4,0,3,-4,4,0,3,-3,4,0,3,-2,4,0,3,-1,4,0,3,0,4,0,3,1,4,0,3,2,4,0,3,3,4,0,3,4,4,0,3,5,4,0,3,6,4,0,3,7,4,0,3,8,4,0,3,9,4,0,3,10,4,0,3,11,4,0,3,12,4,0,3,13,4,0,3,14,-10,0,3,14,-9,0,3,14,-8,0,3,14,-7,0,3,14,-6,0,3,14,-5,0,3,14,-4,0,3,14,-3,0,3,14,-2,0,3,14,-1,0,3,14,0,0,3,14,1,0,3,14,2,0,3,14,3,0,3,14,4,0,3,10,-2,0,3,10,-1,0,3,-1,-7,0,3,-1,-6,0,3,8,0,0,3,8,1,0,3],"Middle":[-5,-13,63,1,-5,-12,2,2,-5,-11,6,2,-4,-13,63,1,-4,-12,2,2,-4,-11,6,2,-3,-13,63,1,-3,-12,2,2,-3,-11,6,2,-2,-13,63,1,-2,-12,2,2,-2,-11,6,2,-2,-5,50,1,-2,-4,1,2,-2,-3,5,2,-1,-13,63,1,-1,-12,2,2,-1,-11,6,2,-1,-5,56,1,-1,-4,2,2,-1,-3,6,2,0,-13,63,1,0,-12,2,2,0,-11,6,2,0,-5,24,1,0,-4,3,2,0,-3,7,2,1,-13,63,1,1,-12,2,2,1,-11,6,2,2,-13,63,1,2,-12,2,2,2,-11,6,2,3,-13,63,1,3,-12,2,2,3,-11,6,2,4,-13,63,1,4,-12,2,2,4,-11,6,2,5,-13,63,1,5,-12,2,2,5,-11,6,2,6,-13,63,1,6,-12,2,2,6,-11,6,2,7,-13,63,1,7,-12,2,2,7,-11,6,2,8,-13,63,1,8,-12,2,2,8,-11,6,2,9,-13,63,1,9,-12,2,2,9,-11,6,2,9,0,48,1,9,1,1,2,9,2,5,2,10,-13,63,1,10,-12,2,2,10,-11,6,2,10,0,56,1,10,1,2,2,10,2,6,2,11,-13,63,1,11,-12,2,2,11,-11,6,2,11,0,26,1,11,1,3,2,11,2,7,2,12,-13,63,1,12,-12,2,2,12,-11,6,2,13,-13,63,1,13,-12,2,2,13,-11,6,2,14,-13,63,1,14,-12,2,2,14,-11,6,2],"Top":[-7,-14,511,1,-7,-13,511,1,-7,-12,511,1,-7,-11,511,1,-7,-10,511,1,-7,-9,511,1,-7,-8,511,1,-7,-7,511,1,-7,-6,511,1,-7,-5,511,1,-7,-4,511,1,-7,-3,511,1,-7,-2,511,1,-7,-1,511,1,-7,0,511,1,-7,1,511,1,-7,2,511,1,-7,3,511,1,-7,4,511,1,-7,5,511,1,-7,6,511,1,-6,-14,511,1,-6,-13,255,1,-6,-12,219,1,-6,-11,219,1,-6,-10,219,1,-6,-9,219,1,-6,-8,219,1,-6,-7,219,1,-6,-6,219,1,-6,-5,219,1,-6,-4,219,1,-6,-3,219,1,-6,-2,219,1,-6,-1,219,1,-6,0,219,1,-6,1,219,1,-6,2,219,1,-6,3,219,1,-6,4,219,1,-6,5,507,1,-6,6,511,1,-5,-14,511,1,-5,5,504,1,-5,6,511,1,-4,-14,511,1,-4,5,504,1,-4,6,511,1,-3,-14,511,1,-3,5,504,1,-3,6,511,1,-2,-14,511,1,-2,-7,144,1,-2,-6,146,1,-2,5,504,1,-2,6,511,1,-1,-14,511,1,-1,5,504,1,-1,6,511,1,0,-14,511,1,0,5,504,1,0,6,511,1,1,-14,511,1,1,5,504,1,1,6,511,1,2,-14,511,1,2,5,504,1,2,6,511,1,3,-14,511,1,3,5,504,1,3,6,511,1,4,-14,511,1,4,5,504,1,4,6,511,1,5,-14,511,1,5,5,504,1,5,6,511,1,6,-14,511,1,6,5,504,1,6,6,511,1,7,-14,511,1,7,5,504,1,7,6,511,1,8,-14,511,1,8,5,504,1,8,6,511,1,9,-14,511,1,9,5,504,1,9,6,511,1,10,-14,511,1,10,5,504,1,10,6,511,1,11,-14,511,1,11,-2,144,1,11,-1,146,1,11,5,504,1,11,6,511,1,12,-14,511,1,12,5,504,1,12,6,511,1,13,-14,511,1,13,5,504,1,13,6,511,1,14,-14,511,1,14,5,504,1,14,6,511,1,15,-14,511,1,15,-13,447,1,15,-12,438,1,15,-11,438,1,15,-10,438,1,15,-9,438,1,15,-8,438,1,15,-7,438,1,15,-6,438,1,15,-5,438,1,15,-4,438,1,15,-3,438,1,15,-2,438,1,15,-1,438,1,15,0,438,1,15,1,438,1,15,2,438,1,15,3,438,1,15,4,438,1,15,5,510,1,15,6,511,1,16,-14,511,1,16,-13,511,1,16,-12,511,1,16,-11,511,1,16,-10,511,1,16,-9,511,1,16,-8,511,1,16,-7,511,1,16,-6,511,1,16,-5,511,1,16,-4,511,1,16,-3,511,1,16,-2,511,1,16,-1,511,1,16,0,511,1,16,1,511,1,16,2,511,1,16,3,511,1,16,4,511,1,16,5,511,1,16,6,511,1],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git "a/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/Preinstall.json" "b/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/Preinstall.json"
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ "b/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/Preinstall.json"
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git "a/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/Preview.png" "b/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/Preview.png"
new file mode 100644
index 0000000..d2ad303
--- /dev/null
+++ "b/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/Preview.png"
Binary files differ
diff --git "a/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/Preview.png.import" "b/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/Preview.png.import"
new file mode 100644
index 0000000..e9f48d4
--- /dev/null
+++ "b/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/Preview.png.import"
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://co5xect35y824"
+path="res://.godot/imported/Preview.png-fc7bb7c2dfd4b0a1ba5ea4ee2d5b8746.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/event/测试房间/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-fc7bb7c2dfd4b0a1ba5ea4ee2d5b8746.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git "a/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/RoomInfo.json" "b/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/RoomInfo.json"
new file mode 100644
index 0000000..3e904a7
--- /dev/null
+++ "b/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/RoomInfo.json"
@@ -0,0 +1 @@
+{"Position":{"X":-20,"Y":-11},"Size":{"X":29,"Y":29},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":64,"RoomName":"\u6D4B\u8BD5\u623F\u95F4","Weight":100,"Remark":""}
\ No newline at end of file
diff --git "a/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/TileInfo.json" "b/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/TileInfo.json"
new file mode 100644
index 0000000..e33c38d
--- /dev/null
+++ "b/DungeonShooting_Godot/resource/map/tileMaps/Test1/event/\346\265\213\350\257\225\346\210\277\351\227\264/TileInfo.json"
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":-26,"Y":-26},{"X":-26,"Y":-58},{"X":90,"Y":-58},{"X":90,"Y":36},{"X":42,"Y":36},{"X":42,"Y":150},{"X":22,"Y":150},{"X":22,"Y":36},{"X":-26,"Y":-12},{"X":-26,"Y":36},{"X":-166,"Y":-26},{"X":-166,"Y":-12},{"X":-166,"Y":52},{"X":-182,"Y":52},{"X":-26,"Y":166},{"X":-26,"Y":150},{"X":90,"Y":150},{"X":90,"Y":244},{"X":-26,"Y":244},{"X":-26,"Y":180},{"X":-182,"Y":166},{"X":-202,"Y":180},{"X":-202,"Y":52},{"X":-266,"Y":52},{"X":-266,"Y":-106},{"X":-166,"Y":-106}],"NavigationPolygon":[[0,1,2,3,4],[4,5,6,7],[0,4,7,8],[7,9,8],[10,0,8,11],[11,12,13],[14,15,6],[5,16,17,18,19],[6,5,19,14],[20,14,19,21],[20,21,22,13],[22,23,24,25,10],[22,10,11,13]],"Floor":[-2,-4,0,3,-1,-4,0,3,-1,-3,0,3,0,-2,0,3,1,-2,0,3,1,-1,0,3,2,-1,0,3,3,-1,0,3,3,0,0,3,4,0,0,3,5,0,0,3,5,1,0,3,-2,-3,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,0,-4,0,3,0,-3,0,3,0,-1,0,3,0,0,0,3,1,-4,0,3,1,-3,0,3,1,0,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,0,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,-2,1,0,3,-1,1,0,3,0,1,0,3,1,1,0,3,2,1,0,3,3,1,0,3,4,1,0,3,1,2,0,3,2,2,0,3,-2,9,0,3,-2,10,0,3,-2,11,0,3,-2,12,0,3,-2,13,0,3,-2,14,0,3,-1,9,0,3,-1,10,0,3,-1,11,0,3,-1,12,0,3,-1,13,0,3,-1,14,0,3,0,9,0,3,0,10,0,3,0,11,0,3,0,12,0,3,0,13,0,3,0,14,0,3,1,9,0,3,1,10,0,3,1,11,0,3,1,12,0,3,1,13,0,3,1,14,0,3,2,9,0,3,2,10,0,3,2,11,0,3,2,12,0,3,2,13,0,3,2,14,0,3,3,9,0,3,3,10,0,3,3,11,0,3,3,12,0,3,3,13,0,3,3,14,0,3,4,9,0,3,4,10,0,3,4,11,0,3,4,12,0,3,4,13,0,3,4,14,0,3,5,9,0,3,5,10,0,3,5,11,0,3,5,12,0,3,5,13,0,3,5,14,0,3,1,3,0,3,1,4,0,3,1,5,0,3,1,6,0,3,1,7,0,3,1,8,0,3,2,3,0,3,2,4,0,3,2,5,0,3,2,6,0,3,2,7,0,3,2,8,0,3,-17,-7,0,3,-17,-6,0,3,-16,-6,0,3,-16,-5,0,3,-15,-5,0,3,-15,-4,0,3,-14,-3,0,3,-14,-2,0,3,-13,-2,0,3,-13,-1,0,3,-12,-1,0,3,-12,0,0,3,-11,0,0,3,-11,1,0,3,-17,-5,0,3,-17,-4,0,3,-17,-3,0,3,-17,-2,0,3,-17,-1,0,3,-17,0,0,3,-17,1,0,3,-17,2,0,3,-16,-7,0,3,-16,-4,0,3,-16,-3,0,3,-16,-2,0,3,-16,-1,0,3,-16,0,0,3,-16,1,0,3,-16,2,0,3,-15,-7,0,3,-15,-6,0,3,-15,-3,0,3,-15,-2,0,3,-15,-1,0,3,-15,0,0,3,-15,1,0,3,-15,2,0,3,-14,-7,0,3,-14,-6,0,3,-14,-5,0,3,-14,-4,0,3,-14,-1,0,3,-14,0,0,3,-14,1,0,3,-14,2,0,3,-13,-7,0,3,-13,-6,0,3,-13,-5,0,3,-13,-4,0,3,-13,-3,0,3,-13,0,0,3,-13,1,0,3,-13,2,0,3,-12,-7,0,3,-12,-6,0,3,-12,-5,0,3,-12,-4,0,3,-12,-3,0,3,-12,-2,0,3,-12,1,0,3,-12,2,0,3,-11,-7,0,3,-11,-6,0,3,-11,-5,0,3,-11,-4,0,3,-11,-3,0,3,-11,-2,0,3,-11,-1,0,3,-11,2,0,3,-10,-2,0,3,-9,-2,0,3,-8,-2,0,3,-7,-2,0,3,-6,-2,0,3,-5,-2,0,3,-4,-2,0,3,-3,-2,0,3,-13,3,0,3,-13,4,0,3,-13,5,0,3,-13,6,0,3,-13,7,0,3,-13,8,0,3,-13,9,0,3,-13,10,0,3,-12,3,0,3,-12,4,0,3,-12,5,0,3,-12,6,0,3,-12,7,0,3,-12,8,0,3,-12,9,0,3,-12,10,0,3,-11,10,0,3,-10,10,0,3,-9,10,0,3,-8,10,0,3,-7,10,0,3,-6,10,0,3,-5,10,0,3,-4,10,0,3,-3,10,0,3,-11,5,0,3],"Middle":[],"Top":[],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preinstall.json
new file mode 100644
index 0000000..df10eda
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":false,"WaveList":[[{"Position":{"X":39,"Y":8},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":-16,"Y":-18},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":66,"Y":6},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":66,"Y":47},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0010","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"120"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":47,"Y":-32},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0008","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"120"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":23,"Y":37},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0010","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":2,"Y":18},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0005","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":24,"Y":-30},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0006","Weight":100,"Attr":{"CurrAmmon":"20","ResidueAmmo":"300"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":40,"Y":-10},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0003","Weight":100,"Attr":{"CurrAmmon":"12","ResidueAmmo":"90"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":2,"Y":-37},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0007","Weight":100,"Attr":{"CurrAmmon":"60","ResidueAmmo":"300"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-2,"Y":47},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0002","Weight":100,"Attr":{"CurrAmmon":"7","ResidueAmmo":"70"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":29,"Y":63},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0013","Weight":100,"Attr":{"CurrAmmon":"50","ResidueAmmo":"250"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-30,"Y":39},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-19,"Y":71},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":48,"Y":29},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0004","Weight":100,"Attr":{"CurrAmmon":"180","ResidueAmmo":"90"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":20,"Y":94},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0014","Weight":100,"Attr":{"CurrAmmon":"5","ResidueAmmo":"60"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-14,"Y":97},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0011","Weight":100,"Attr":{"CurrAmmon":"20","ResidueAmmo":"300"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":9,"Y":-7},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0011","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-41,"Y":61},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0016","Weight":100,"Attr":{"CurrAmmon":"5","ResidueAmmo":"60"},"Altitude":8,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preview.png
new file mode 100644
index 0000000..bf23f36
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preview.png.import
new file mode 100644
index 0000000..9b13b48
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dp0ufqrgdfx7y"
+path="res://.godot/imported/Preview.png-316f603611f843062bfe5bd940ed732b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/inlet/Start/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-316f603611f843062bfe5bd940ed732b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/RoomInfo.json
new file mode 100644
index 0000000..dedff1f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-9,"Y":-7},"Size":{"X":20,"Y":17},"DoorAreaInfos":[{"Direction":3,"Start":32,"End":176},{"Direction":2,"Start":16,"End":144}],"GroupName":"Test1","RoomType":2,"RoomName":"Start","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/TileInfo.json
new file mode 100644
index 0000000..bfa5964
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":138,"Y":-42},{"X":138,"Y":90},{"X":134,"Y":38},{"X":134,"Y":-6},{"X":74,"Y":10},{"X":74,"Y":54},{"X":58,"Y":90},{"X":-26,"Y":38},{"X":-26,"Y":-6},{"X":90,"Y":-42},{"X":90,"Y":-6},{"X":90,"Y":10},{"X":118,"Y":54},{"X":118,"Y":38},{"X":58,"Y":138},{"X":-58,"Y":138},{"X":-58,"Y":106},{"X":-86,"Y":38},{"X":-106,"Y":106},{"X":-106,"Y":-42},{"X":-86,"Y":-6},{"X":-42,"Y":-42},{"X":-42,"Y":-58},{"X":90,"Y":-58}],"NavigationPolygon":[[0,1,2,3],[4,5,6,7,8],[9,0,3,10],[10,11,4],[12,13,2,1],[12,1,6,5],[7,6,14,15,16],[17,7,16,18],[17,18,19,20],[20,19,21,8],[4,8,21,22,23,9],[4,9,10]],"Floor":[-3,-4,0,3,-2,-4,0,3,-2,-3,0,3,-3,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-7,4,0,3,-7,5,0,3,-6,-3,0,3,-6,-2,0,3,-6,-1,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-6,4,0,3,-6,5,0,3,-5,-3,0,3,-5,-2,0,3,-5,2,0,3,-5,3,0,3,-5,4,0,3,-5,5,0,3,-4,-3,0,3,-4,-2,0,3,-4,2,0,3,-4,3,0,3,-4,4,0,3,-4,5,0,3,-3,-2,0,3,-3,2,0,3,-3,3,0,3,-3,4,0,3,-3,5,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-2,3,0,3,-2,4,0,3,-2,5,0,3,-4,6,0,3,-4,7,0,3,-3,6,0,3,-3,7,0,3,-2,6,0,3,-2,7,0,3,-1,3,0,3,-1,4,0,3,-1,7,0,3,0,3,0,3,0,4,0,3,0,7,0,3,1,3,0,3,1,4,0,3,1,5,0,3,1,6,0,3,1,7,0,3,2,3,0,3,2,4,0,3,2,5,0,3,2,6,0,3,2,7,0,3,3,3,0,3,3,4,0,3,3,5,0,3,3,6,0,3,3,7,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,5,-4,0,3,5,-3,0,3,5,-1,0,3,3,1,0,3,3,2,0,3,4,1,0,3,4,2,0,3,4,3,0,3,4,4,0,3,5,3,0,3,5,4,0,3,6,3,0,3,6,4,0,3,6,-3,0,3,7,-3,0,3,7,-2,0,3,7,2,0,3,7,3,0,3,7,4,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,8,3,0,3,8,4,0,3,-1,2,0,3,0,2,0,3,1,2,0,3,2,2,0,3,2,1,0,3,1,1,0,3,0,1,0,3,-1,1,0,3,-1,5,0,3,0,5,0,3,0,6,0,3,-1,6,0,3,-7,-3,0,3,6,-2,0,3,5,-2,0,3],"CustomFloor1":[-4,2,1,7,14,-3,3,1,8,15,-4,3,1,7,15,-5,3,1,6,15,6,4,1,8,15,5,4,1,7,15,-5,2,1,6,14,4,3,1,6,14,4,4,1,6,15,6,3,1,8,14,5,3,1,7,14,-3,2,1,8,14],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[-3,4,1,10,5,-3,5,1,10,6,2,4,1,10,5,2,5,1,10,6],"CustomMiddle2":[5,-4,1,6,0,5,-3,1,6,1,-2,-1,1,5,0,-2,0,1,5,1],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/Preinstall.json
new file mode 100644
index 0000000..cc0f6ed
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[{"Position":{"X":8,"Y":-8},"Size":{"X":14,"Y":14},"SpecialMarkType":2,"DelayTime":0,"MarkList":[]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/Preview.png
new file mode 100644
index 0000000..fcbb563
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/Preview.png.import
new file mode 100644
index 0000000..d152c19
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bjbhmlfjo4fbt"
+path="res://.godot/imported/Preview.png-4e96f70cfb64e3f150b72a9f4e2754f6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/outlet/End1/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-4e96f70cfb64e3f150b72a9f4e2754f6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/RoomInfo.json
new file mode 100644
index 0000000..6881d9b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-5,"Y":-7},"Size":{"X":11,"Y":12},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":4,"RoomName":"End1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/TileInfo.json
new file mode 100644
index 0000000..3880d49
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/outlet/End1/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":58,"Y":-58},{"X":58,"Y":58},{"X":-42,"Y":58},{"X":-26,"Y":-42},{"X":-42,"Y":-42},{"X":-26,"Y":-58}],"NavigationPolygon":[[0,1,2,3],[2,4,3],[0,3,5]],"Floor":[-2,-1,0,3,-2,-2,0,3,-1,-2,0,3,1,-2,0,3,1,-1,0,3,2,-1,0,3,-1,-1,0,3,-2,0,0,3,-2,1,0,3,-1,1,0,3,0,1,0,3,1,1,0,3,2,1,0,3,2,0,0,3,1,0,0,3,-1,0,0,3,2,-2,0,3,2,-3,0,3,1,-3,0,3,0,-3,0,3,-1,-3,0,3,-2,-3,0,3,-2,2,0,3,-1,2,0,3,0,2,0,3,1,2,0,3,2,2,0,3,3,2,0,3,3,1,0,3,3,0,0,3,3,-1,0,3,3,-2,0,3,3,-3,0,3,3,-4,0,3,2,-4,0,3,1,-4,0,3,0,-4,0,3,-1,-4,0,3,-2,-4,0,3,-3,-3,0,3,-3,-2,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,0,0,0,3,0,-2,0,3,0,-1,0,3],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preview.png
new file mode 100644
index 0000000..7b62434
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preview.png.import
new file mode 100644
index 0000000..f462856
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b72ww741x2t0w"
+path="res://.godot/imported/Preview.png-e48e389971aff40736b911be53ae62ea.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/reward/Award1/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-e48e389971aff40736b911be53ae62ea.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/RoomInfo.json
new file mode 100644
index 0000000..46ab0bb
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-7,"Y":-6},"Size":{"X":11,"Y":12},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":26,"RoomName":"Award1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/TileInfo.json
new file mode 100644
index 0000000..7c17a71
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/reward/Award1/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":26,"Y":66},{"X":-74,"Y":66},{"X":-74,"Y":-42},{"X":26,"Y":-42}],"NavigationPolygon":[[0,1,2,3]],"Floor":[-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-4,-3,0,3,-4,-2,0,3,-4,-1,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-3,-3,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-2,-3,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,-5,3,0,3,-4,3,0,3,-3,3,0,3,-2,3,0,3,-1,3,0,3,0,3,0,3,1,3,0,3,-3,-2,0,3,-5,-3,0,3],"Middle":[-5,-6,63,1,-5,-5,2,2,-5,-4,6,2,-4,-6,63,1,-4,-5,2,2,-4,-4,6,2,-3,-6,63,1,-3,-5,2,2,-3,-4,6,2,-2,-6,63,1,-2,-5,2,2,-2,-4,6,2,-1,-6,63,1,-1,-5,2,2,-1,-4,6,2,0,-6,63,1,0,-5,2,2,0,-4,6,2,1,-6,63,1,1,-5,2,2,1,-4,6,2],"Top":[-7,-7,511,1,-7,-6,511,1,-7,-5,511,1,-7,-4,511,1,-7,-3,511,1,-7,-2,511,1,-7,-1,511,1,-7,0,511,1,-7,1,511,1,-7,2,511,1,-7,3,511,1,-7,4,511,1,-7,5,511,1,-6,-7,511,1,-6,-6,255,1,-6,-5,219,1,-6,-4,219,1,-6,-3,219,1,-6,-2,219,1,-6,-1,219,1,-6,0,219,1,-6,1,219,1,-6,2,219,1,-6,3,219,1,-6,4,507,1,-6,5,511,1,-5,-7,511,1,-5,4,504,1,-5,5,511,1,-4,-7,511,1,-4,4,504,1,-4,5,511,1,-3,-7,511,1,-3,4,504,1,-3,5,511,1,-2,-7,511,1,-2,4,504,1,-2,5,511,1,-1,-7,511,1,-1,4,504,1,-1,5,511,1,0,-7,511,1,0,4,504,1,0,5,511,1,1,-7,511,1,1,4,504,1,1,5,511,1,2,-7,511,1,2,-6,447,1,2,-5,438,1,2,-4,438,1,2,-3,438,1,2,-2,438,1,2,-1,438,1,2,0,438,1,2,1,438,1,2,2,438,1,2,3,438,1,2,4,510,1,2,5,511,1,3,-7,511,1,3,-6,511,1,3,-5,511,1,3,-4,511,1,3,-3,511,1,3,-2,511,1,3,-1,511,1,3,0,511,1,3,1,511,1,3,2,511,1,3,3,511,1,3,4,511,1,3,5,511,1],"CustomFloor1":[-3,-1,1,18,8,-3,0,1,18,8,-3,1,1,18,8,-2,-1,1,18,8,-2,0,1,18,8,-2,1,1,18,8,-1,-1,1,18,8,-1,0,1,18,8,-1,1,1,18,8,-4,-2,2,4,8,-4,-3,2,2,6,-1,-2,2,2,8,-1,-3,2,2,6,-2,-2,2,2,8,-2,-3,2,2,6,-3,-2,2,2,8,-3,-3,2,2,6,0,-3,2,2,6,0,-2,2,5,8,1,-3,2,3,6,1,-2,2,3,7,1,-1,2,3,7,0,-1,2,1,7,1,0,2,3,7,0,0,2,1,7,1,1,2,3,7,0,1,2,1,7,1,2,2,3,7,0,2,2,5,9,1,3,2,3,8,0,3,2,2,8,-1,3,2,2,8,-1,2,2,2,6,-2,3,2,2,8,-2,2,2,2,6,-3,3,2,2,8,-3,2,2,2,6,-4,3,2,2,8,-4,2,2,4,9,-5,3,2,1,8,-5,2,2,1,7,-4,1,2,3,7,-5,1,2,1,7,-4,0,2,3,7,-5,0,2,1,7,-4,-1,2,3,7,-5,-1,2,1,7,-5,-2,2,1,7,-5,-3,2,1,6],"CustomFloor2":[-4,-2,1,13,5,0,-2,1,13,5,-4,2,1,13,6,0,2,1,13,6],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preinstall.json
new file mode 100644
index 0000000..a9f951a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preinstall.json
@@ -0,0 +1 @@
+[{"Name":"Preinstall1","Weight":100,"Remark":"","AutoFill":true,"WaveList":[[]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png
new file mode 100644
index 0000000..0f9e9f7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png.import
new file mode 100644
index 0000000..d98c705
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/Preview.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dnmnf23aj6hki"
+path="res://.godot/imported/Preview.png-a6cb6d2603055a6ca060f3ff00e023de.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileMaps/Test1/shop/Shop1/Preview.png"
+dest_files=["res://.godot/imported/Preview.png-a6cb6d2603055a6ca060f3ff00e023de.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/RoomInfo.json
new file mode 100644
index 0000000..88ad7e7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/RoomInfo.json
@@ -0,0 +1 @@
+{"Position":{"X":-11,"Y":-14},"Size":{"X":24,"Y":26},"DoorAreaInfos":[{"Direction":3,"Start":96,"End":224},{"Direction":1,"Start":96,"End":240},{"Direction":2,"Start":96,"End":224},{"Direction":0,"Start":96,"End":240}],"GroupName":"Test1","RoomType":32,"RoomName":"Shop1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/TileInfo.json
new file mode 100644
index 0000000..68563a0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/shop/Shop1/TileInfo.json
@@ -0,0 +1 @@
+{"NavigationVertices":[{"X":74,"Y":-154},{"X":90,"Y":-154},{"X":90,"Y":-138},{"X":106,"Y":-138},{"X":106,"Y":-122},{"X":122,"Y":-122},{"X":122,"Y":-106},{"X":138,"Y":-106},{"X":138,"Y":-90},{"X":154,"Y":-90},{"X":154,"Y":-74},{"X":170,"Y":-74},{"X":170,"Y":74},{"X":154,"Y":74},{"X":154,"Y":90},{"X":138,"Y":90},{"X":-106,"Y":-90},{"X":138,"Y":106},{"X":122,"Y":106},{"X":122,"Y":122},{"X":106,"Y":122},{"X":-122,"Y":74},{"X":-122,"Y":-74},{"X":106,"Y":138},{"X":90,"Y":138},{"X":-106,"Y":90},{"X":90,"Y":154},{"X":74,"Y":154},{"X":-58,"Y":138},{"X":-74,"Y":122},{"X":74,"Y":170},{"X":-42,"Y":170},{"X":-42,"Y":154},{"X":-58,"Y":154},{"X":-74,"Y":138},{"X":-90,"Y":122},{"X":-90,"Y":106},{"X":-106,"Y":106},{"X":-122,"Y":90},{"X":-138,"Y":74},{"X":-138,"Y":-74},{"X":-122,"Y":-90},{"X":-106,"Y":-106},{"X":-90,"Y":-106},{"X":-90,"Y":-122},{"X":-74,"Y":-122},{"X":-74,"Y":-138},{"X":-58,"Y":-138},{"X":-58,"Y":-154},{"X":-42,"Y":-154},{"X":-42,"Y":-170},{"X":74,"Y":-170}],"NavigationPolygon":[[0,1,2],[2,3,4],[4,5,6],[6,7,8],[8,9,10],[10,11,12,13],[13,14,15,16],[15,17,18,16],[18,19,20,16],[21,22,16,20,23,24,25],[24,26,27,28,29],[27,30,31,32],[32,33,28],[28,34,29],[29,35,36],[36,37,25],[25,38,21],[21,39,40,22],[22,41,16],[16,42,43,8,10,13],[43,44,45,6,8],[45,46,47,4,6],[47,48,49,2,4],[49,50,51,0],[49,0,2],[36,25,24],[29,36,24],[28,27,32]],"Floor":[-6,-8,0,3,-6,-7,0,3,-6,-6,0,3,-6,-5,0,3,-6,-4,0,3,-6,-3,0,3,-6,-2,0,3,-6,-1,0,3,-6,0,0,3,-6,1,0,3,-6,2,0,3,-6,3,0,3,-6,4,0,3,-6,5,0,3,-6,6,0,3,-5,-8,0,3,-5,-7,0,3,-5,-6,0,3,-5,-5,0,3,-5,-4,0,3,-5,-3,0,3,-5,-2,0,3,-5,-1,0,3,-5,0,0,3,-5,1,0,3,-5,2,0,3,-5,3,0,3,-5,4,0,3,-5,5,0,3,-5,6,0,3,-4,-8,0,3,-4,-7,0,3,-4,-6,0,3,-4,-5,0,3,-4,-4,0,3,-4,-3,0,3,-4,-2,0,3,-4,-1,0,3,-4,0,0,3,-4,1,0,3,-4,2,0,3,-4,3,0,3,-4,4,0,3,-4,5,0,3,-4,6,0,3,-3,-8,0,3,-3,-7,0,3,-3,-6,0,3,-3,-5,0,3,-3,-4,0,3,-3,-3,0,3,-3,-2,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-3,2,0,3,-3,3,0,3,-3,4,0,3,-3,5,0,3,-3,6,0,3,-2,-8,0,3,-2,-7,0,3,-2,-6,0,3,-2,-5,0,3,-2,-4,0,3,-2,-3,0,3,-2,-2,0,3,-2,-1,0,3,-2,0,0,3,-2,1,0,3,-2,2,0,3,-2,3,0,3,-2,4,0,3,-2,5,0,3,-2,6,0,3,-1,-8,0,3,-1,-7,0,3,-1,-6,0,3,-1,-5,0,3,-1,-4,0,3,-1,-3,0,3,-1,-2,0,3,-1,-1,0,3,-1,0,0,3,-1,1,0,3,-1,2,0,3,-1,3,0,3,-1,4,0,3,-1,5,0,3,-1,6,0,3,0,-8,0,3,0,-7,0,3,0,-6,0,3,0,-5,0,3,0,-4,0,3,0,-3,0,3,0,-2,0,3,0,-1,0,3,0,0,0,3,0,1,0,3,0,2,0,3,0,3,0,3,0,4,0,3,0,5,0,3,0,6,0,3,1,-8,0,3,1,-7,0,3,1,-6,0,3,1,-5,0,3,1,-4,0,3,1,-3,0,3,1,-2,0,3,1,-1,0,3,1,0,0,3,1,1,0,3,1,2,0,3,1,3,0,3,1,4,0,3,1,5,0,3,1,6,0,3,2,-8,0,3,2,-7,0,3,2,-6,0,3,2,-5,0,3,2,-4,0,3,2,-3,0,3,2,-2,0,3,2,-1,0,3,2,0,0,3,2,1,0,3,2,2,0,3,2,3,0,3,2,4,0,3,2,5,0,3,2,6,0,3,3,-8,0,3,3,-7,0,3,3,-6,0,3,3,-5,0,3,3,-4,0,3,3,-3,0,3,3,-2,0,3,3,-1,0,3,3,0,0,3,3,1,0,3,3,2,0,3,3,3,0,3,3,4,0,3,3,5,0,3,3,6,0,3,4,-8,0,3,4,-7,0,3,4,-6,0,3,4,-5,0,3,4,-4,0,3,4,-3,0,3,4,-2,0,3,4,-1,0,3,4,0,0,3,4,1,0,3,4,2,0,3,4,3,0,3,4,4,0,3,4,5,0,3,4,6,0,3,5,-8,0,3,5,-7,0,3,5,-6,0,3,5,-5,0,3,5,-4,0,3,5,-3,0,3,5,-2,0,3,5,-1,0,3,5,0,0,3,5,1,0,3,5,2,0,3,5,3,0,3,5,4,0,3,5,5,0,3,5,6,0,3,6,-8,0,3,6,-7,0,3,6,-6,0,3,6,-5,0,3,6,-4,0,3,6,-3,0,3,6,-2,0,3,6,-1,0,3,6,0,0,3,6,1,0,3,6,2,0,3,6,3,0,3,6,4,0,3,6,5,0,3,6,6,0,3,7,-8,0,3,7,-7,0,3,7,-6,0,3,7,-5,0,3,7,-4,0,3,7,-3,0,3,7,-2,0,3,7,-1,0,3,7,0,0,3,7,1,0,3,7,2,0,3,7,3,0,3,7,4,0,3,7,5,0,3,7,6,0,3,-5,-9,0,3,-4,-9,0,3,-3,-9,0,3,-2,-9,0,3,-1,-9,0,3,0,-9,0,3,1,-9,0,3,2,-9,0,3,3,-9,0,3,4,-9,0,3,5,-9,0,3,6,-9,0,3,-3,-10,0,3,-2,-10,0,3,-1,-10,0,3,0,-10,0,3,1,-10,0,3,2,-10,0,3,3,-10,0,3,4,-10,0,3,5,-10,0,3,-4,-10,0,3,-3,-11,0,3,-2,-11,0,3,-1,-11,0,3,0,-11,0,3,1,-11,0,3,2,-11,0,3,3,-11,0,3,4,-11,0,3,-7,-7,0,3,-7,-6,0,3,-7,-5,0,3,-7,-4,0,3,-7,-3,0,3,-7,-2,0,3,-7,-1,0,3,-7,0,0,3,-7,1,0,3,-7,2,0,3,-7,3,0,3,-7,4,0,3,-7,5,0,3,-8,-6,0,3,-8,-5,0,3,-8,-4,0,3,-8,-3,0,3,-8,-2,0,3,-8,-1,0,3,-8,0,0,3,-8,1,0,3,-8,2,0,3,-8,3,0,3,-8,4,0,3,-9,-5,0,3,-9,-4,0,3,-9,-3,0,3,-9,-2,0,3,-9,-1,0,3,-9,0,0,3,-9,1,0,3,-9,2,0,3,-9,3,0,3,-5,7,0,3,-4,7,0,3,-3,7,0,3,-2,7,0,3,-1,7,0,3,0,7,0,3,1,7,0,3,2,7,0,3,3,7,0,3,4,7,0,3,5,7,0,3,6,7,0,3,-4,8,0,3,-3,8,0,3,-2,8,0,3,-1,8,0,3,0,8,0,3,1,8,0,3,2,8,0,3,3,8,0,3,4,8,0,3,5,8,0,3,-3,9,0,3,-2,9,0,3,-1,9,0,3,0,9,0,3,1,9,0,3,2,9,0,3,3,9,0,3,4,9,0,3,8,-6,0,3,8,-5,0,3,8,-4,0,3,8,-3,0,3,8,-2,0,3,8,-1,0,3,8,0,0,3,8,1,0,3,8,2,0,3,8,3,0,3,8,4,0,3,8,5,0,3,8,-7,0,3,9,-5,0,3,9,-4,0,3,9,-3,0,3,9,-2,0,3,9,-1,0,3,9,0,0,3,9,1,0,3,9,2,0,3,9,3,0,3,9,4,0,3,9,-6,0,3,10,-5,0,3,10,-4,0,3,10,-3,0,3,10,-2,0,3,10,-1,0,3,10,0,0,3,10,1,0,3,10,2,0,3,10,3,0,3],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/Preinstall.json
deleted file mode 100644
index 4ebcc0d..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":-4,"Y":-6},"Size":{"X":30,"Y":26},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0002","CurrAmmon":"7","ResidueAmmo":"7"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":38,"Y":48},"Size":{"X":31,"Y":25},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0002","CurrAmmon":"7","ResidueAmmo":"7"},"Altitude":0,"VerticalSpeed":0}]}],[{"Position":{"X":38,"Y":-3},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0007","CurrAmmon":"60","ResidueAmmo":"60"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":103,"Y":13},"Size":{"X":105,"Y":36},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0007","CurrAmmon":"60","ResidueAmmo":"60"},"Altitude":0,"VerticalSpeed":0}]}],[{"Position":{"X":-9,"Y":38},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0007","CurrAmmon":"60","ResidueAmmo":"60"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":17,"Y":78},"Size":{"X":26,"Y":66},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0006","CurrAmmon":"20","ResidueAmmo":"20"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":19,"Y":-48},"Size":{"X":16,"Y":63},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0002","CurrAmmon":"7","ResidueAmmo":"7"},"Altitude":0,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/Preview.png
deleted file mode 100644
index 908f7ce..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/Preview.png.import
deleted file mode 100644
index 67c37b0..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b6aer1lyhcs12"
-path="res://.godot/imported/Preview.png-31623ec49f994abd8521d4b3faef200a.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/battle/Battle1/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-31623ec49f994abd8521d4b3faef200a.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/RoomInfo.json
deleted file mode 100644
index 1e6b269..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":-7,"Y":-7},"Size":{"X":23,"Y":16},"DoorAreaInfos":[{"Direction":3,"Start":0,"End":224},{"Direction":2,"Start":0,"End":224},{"Direction":0,"Start":144,"End":208},{"Direction":0,"Start":16,"End":80},{"Direction":1,"Start":0,"End":224}],"GroupName":"TestGroup1","RoomType":0,"RoomName":"Battle1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/TileInfo.json
deleted file mode 100644
index 309a41e..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle1/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[-88,-88,120,-88,120,-24,168,-24,168,-88,184,-88,184,-72,232,-72,232,-16,184,-16,184,56,232,56,232,112,184,112,184,128,168,128,168,48,120,48,120,128,-88,128]},{"Type":1,"Points":[-72,-64,-8,-64,-8,-24,-24,-24,-24,-8,-72,-8]},{"Type":1,"Points":[40,-64,104,-64,104,-8,56,-8,56,-24,40,-24]},{"Type":1,"Points":[-72,48,-24,48,-24,64,-8,64,-8,104,-72,104]},{"Type":1,"Points":[56,48,104,48,104,104,40,104,40,64,56,64]}],"Floor":[14,6,0,0,8,14,5,0,0,8,14,3,0,0,8,14,4,0,0,8,14,-3,0,0,8,14,-4,0,0,8,14,-5,0,0,8,14,-2,0,0,8,13,3,0,0,8,13,4,0,0,8,13,5,0,0,8,13,6,0,0,8,13,-3,0,0,8,13,-4,0,0,8,13,-5,0,0,8,13,-2,0,0,8,12,6,0,0,8,12,5,0,0,8,12,4,0,0,8,12,3,0,0,8,12,-4,0,0,8,12,-3,0,0,8,12,-5,0,0,8,12,-2,0,0,8,11,-6,0,0,8,11,-5,0,0,8,11,-4,0,0,8,11,-3,0,0,8,11,-2,0,0,8,11,-1,0,0,8,11,0,0,0,8,11,1,0,0,8,11,2,0,0,8,11,3,0,0,8,11,4,0,0,8,11,5,0,0,8,11,6,0,0,8,11,7,0,0,8,7,7,0,0,8,7,6,0,0,8,7,5,0,0,8,7,4,0,0,8,7,3,0,0,8,7,2,0,0,8,7,1,0,0,8,7,0,0,0,8,7,-1,0,0,8,7,-2,0,0,8,7,-3,0,0,8,7,-4,0,0,8,7,-5,0,0,8,7,-6,0,0,8,6,7,0,0,8,6,6,0,0,8,6,5,0,0,8,6,4,0,0,8,6,3,0,0,8,6,2,0,0,8,6,1,0,0,8,6,0,0,0,8,6,-1,0,0,8,6,-2,0,0,8,6,-3,0,0,8,6,-4,0,0,8,6,-5,0,0,8,6,-6,0,0,8,5,2,0,0,8,5,-1,0,0,8,5,6,0,0,8,5,7,0,0,8,5,1,0,0,8,5,0,0,0,8,5,-5,0,0,8,5,-6,0,0,8,4,2,0,0,8,4,-1,0,0,8,4,6,0,0,8,4,7,0,0,8,4,1,0,0,8,4,0,0,0,8,4,-5,0,0,8,4,-6,0,0,8,3,6,0,0,8,3,7,0,0,8,3,3,0,0,8,3,2,0,0,8,3,1,0,0,8,3,0,0,0,8,3,-1,0,0,8,3,-2,0,0,8,3,-5,0,0,8,3,-6,0,0,8,2,5,0,0,8,2,4,0,0,8,2,-3,0,0,8,2,-4,0,0,8,2,6,0,0,8,2,7,0,0,8,2,3,0,0,8,2,2,0,0,8,2,1,0,0,8,2,0,0,0,8,2,-1,0,0,8,2,-2,0,0,8,2,-5,0,0,8,2,-6,0,0,8,1,0,0,0,8,1,1,0,0,8,1,7,0,0,8,1,6,0,0,8,1,5,0,0,8,1,4,0,0,8,1,3,0,0,8,1,2,0,0,8,1,-1,0,0,8,1,-2,0,0,8,1,-3,0,0,8,1,-4,0,0,8,1,-5,0,0,8,1,-6,0,0,8,0,1,0,0,8,0,0,0,0,8,0,7,0,0,8,0,6,0,0,8,0,5,0,0,8,0,4,0,0,8,0,3,0,0,8,0,2,0,0,8,0,-1,0,0,8,0,-2,0,0,8,0,-3,0,0,8,0,-4,0,0,8,0,-5,0,0,8,0,-6,0,0,8,-1,5,0,0,8,-1,4,0,0,8,-1,-3,0,0,8,-1,-4,0,0,8,-1,6,0,0,8,-1,7,0,0,8,-1,3,0,0,8,-1,2,0,0,8,-1,1,0,0,8,-1,0,0,0,8,-1,-1,0,0,8,-1,-2,0,0,8,-1,-5,0,0,8,-1,-6,0,0,8,-2,6,0,0,8,-2,7,0,0,8,-2,3,0,0,8,-2,2,0,0,8,-2,1,0,0,8,-2,0,0,0,8,-2,-1,0,0,8,-2,-2,0,0,8,-2,-5,0,0,8,-2,-6,0,0,8,-3,2,0,0,8,-3,-1,0,0,8,-3,6,0,0,8,-3,7,0,0,8,-3,1,0,0,8,-3,0,0,0,8,-3,-5,0,0,8,-3,-6,0,0,8,-4,2,0,0,8,-4,-1,0,0,8,-4,6,0,0,8,-4,7,0,0,8,-4,1,0,0,8,-4,0,0,0,8,-4,-5,0,0,8,-4,-6,0,0,8,-5,7,0,0,8,-5,6,0,0,8,-5,5,0,0,8,-5,4,0,0,8,-5,3,0,0,8,-5,2,0,0,8,-5,1,0,0,8,-5,0,0,0,8,-5,-1,0,0,8,-5,-2,0,0,8,-5,-3,0,0,8,-5,-4,0,0,8,-5,-5,0,0,8,-5,-6,0,0,8,-6,7,0,0,8,-6,6,0,0,8,-6,5,0,0,8,-6,4,0,0,8,-6,3,0,0,8,-6,2,0,0,8,-6,1,0,0,8,-6,0,0,0,8,-6,-1,0,0,8,-6,-2,0,0,8,-6,-3,0,0,8,-6,-4,0,0,8,-6,-5,0,0,8,-6,-6,0,0,8,8,-2,0,0,8,8,2,0,0,8,8,-1,0,0,8,8,0,0,0,8,8,1,0,0,8,9,-2,0,0,8,9,2,0,0,8,9,-1,0,0,8,9,0,0,0,8,9,1,0,0,8,10,-2,0,0,8,10,-3,0,0,8,10,-4,0,0,8,10,-5,0,0,8,10,-6,0,0,8,10,7,0,0,8,10,6,0,0,8,10,5,0,0,8,10,4,0,0,8,10,3,0,0,8,10,2,0,0,8,10,0,0,0,8,10,1,0,0,8,10,-1,0,0,8],"Middle":[-6,-7,0,2,7,-5,-7,0,2,7,-4,-7,0,2,7,-4,-2,0,1,7,-4,5,0,1,7,-3,-7,0,2,7,-3,-2,0,3,7,-3,5,0,2,7,-2,-7,0,2,7,-2,-3,0,3,7,-2,5,0,3,7,-1,-7,0,2,7,0,-7,0,2,7,1,-7,0,2,7,2,-7,0,2,7,3,-7,0,2,7,3,-3,0,1,7,3,5,0,1,7,4,-7,0,2,7,4,-2,0,1,7,4,5,0,2,7,5,-7,0,2,7,5,-2,0,3,7,5,5,0,3,7,6,-7,0,2,7,7,-7,0,2,7,8,-3,0,1,7,9,-3,0,3,7,10,-7,0,2,7,11,-7,0,2,7,12,-6,0,1,7,12,2,0,1,7,13,-6,0,2,7,13,2,0,2,7,14,-6,0,2,7,14,2,0,2,7],"Top":[-7,-7,0,3,4,-7,-6,0,3,3,-7,-5,0,3,3,-7,-4,0,3,3,-7,-3,0,3,3,-7,-2,0,3,3,-7,-1,0,3,3,-7,0,0,3,3,-7,1,0,3,3,-7,2,0,3,3,-7,3,0,3,3,-7,4,0,3,3,-7,5,0,3,3,-7,6,0,3,3,-7,7,0,3,3,-7,8,0,11,2,-6,8,0,2,2,-5,8,0,2,2,-4,-4,0,1,2,-4,-3,0,1,3,-4,3,0,1,2,-4,4,0,1,3,-4,8,0,2,2,-3,-4,0,2,2,-3,-3,0,3,4,-3,3,0,3,2,-3,4,0,11,2,-3,8,0,2,2,-2,-4,0,3,2,-2,4,0,3,2,-2,8,0,2,2,-1,8,0,2,2,0,8,0,2,2,1,8,0,2,2,2,8,0,2,2,3,-4,0,1,2,3,4,0,1,2,3,8,0,2,2,4,-4,0,2,2,4,-3,0,1,4,4,3,0,1,2,4,4,0,13,2,4,8,0,2,2,5,-4,0,3,2,5,-3,0,3,3,5,3,0,3,2,5,4,0,3,3,5,8,0,2,2,6,8,0,2,2,7,8,0,2,2,8,-7,0,1,4,8,-6,0,1,3,8,-5,0,1,3,8,-4,0,1,3,8,3,0,1,2,8,4,0,1,3,8,5,0,1,3,8,6,0,1,3,8,7,0,1,3,8,8,0,13,2,9,-7,0,3,4,9,-6,0,3,3,9,-5,0,3,3,9,-4,0,3,3,9,3,0,3,2,9,4,0,3,3,9,5,0,3,3,9,6,0,3,3,9,7,0,3,3,9,8,0,11,2,10,8,0,2,2,11,8,0,2,2,12,-7,0,1,4,12,-1,0,1,2,12,0,0,1,3,12,1,0,1,3,12,7,0,1,2,12,8,0,13,2,13,-1,0,2,2,13,7,0,2,2,14,-1,0,2,2,14,7,0,2,2,15,-6,0,1,4,15,-5,0,1,3,15,-4,0,1,3,15,-3,0,1,3,15,-2,0,1,3,15,-1,0,13,2,15,2,0,1,4,15,3,0,1,3,15,4,0,1,3,15,5,0,1,3,15,6,0,1,3,15,7,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/Preinstall.json
deleted file mode 100644
index d380491..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":178,"Y":-21},"Size":{"X":92,"Y":73},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0007","CurrAmmon":"60","ResidueAmmo":"60"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":76,"Y":168},"Size":{"X":43,"Y":77},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":24,"Y":103},"Size":{"X":66,"Y":48},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0002","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]}],[{"Position":{"X":89,"Y":19},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":65,"Y":142},"Size":{"X":48,"Y":160},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"weapon0005","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"40"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":79,"Y":45},"Size":{"X":46,"Y":121},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"weapon0005","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"40"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":181,"Y":203},"Size":{"X":66,"Y":33},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-19,"Y":100},"Size":{"X":97,"Y":63},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":117,"Y":-14},"Size":{"X":122,"Y":78},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":126,"Y":207},"Size":{"X":81,"Y":27},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0002","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]}],[{"Position":{"X":78,"Y":89},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-79,"Y":15},"Size":{"X":30,"Y":140},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0007","CurrAmmon":"60","ResidueAmmo":"60"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-50,"Y":114},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0003","CurrAmmon":"12","ResidueAmmo":"12"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":45,"Y":187},"Size":{"X":42,"Y":72},"SpecialMarkType":0,"DelayTime":3,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0003","CurrAmmon":"12","ResidueAmmo":"12"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":119,"Y":-45},"Size":{"X":91,"Y":37},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0002","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-27,"Y":80},"Size":{"X":112,"Y":34},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0002","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/Preview.png
deleted file mode 100644
index 41a778f..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/Preview.png.import
deleted file mode 100644
index 47c9f9a..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://7jrgj84mv7k6"
-path="res://.godot/imported/Preview.png-7b1ebf12bb329f0035c1b1e63fdb4dac.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/battle/Battle2/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-7b1ebf12bb329f0035c1b1e63fdb4dac.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/RoomInfo.json
deleted file mode 100644
index 24c608a..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":-8,"Y":-6},"Size":{"X":25,"Y":22},"DoorAreaInfos":[{"Direction":3,"Start":0,"End":64},{"Direction":1,"Start":0,"End":240},{"Direction":2,"Start":96,"End":368},{"Direction":0,"Start":240,"End":320},{"Direction":0,"Start":0,"End":112},{"Direction":3,"Start":144,"End":368}],"GroupName":"TestGroup1","RoomType":0,"RoomName":"Battle2","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/TileInfo.json
deleted file mode 100644
index 38a683d..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle2/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[-104,-72,-56,-72,-56,56,40,56,40,-72,248,-72,248,32,120,32,120,168,248,168,248,240,-8,240,-8,200,8,200,8,144,-40,144,-40,160,-104,160]}],"Floor":[15,14,0,0,8,15,13,0,0,8,15,12,0,0,8,15,11,0,0,8,15,10,0,0,8,15,1,0,0,8,15,0,0,0,8,15,-1,0,0,8,15,-2,0,0,8,15,-3,0,0,8,15,-4,0,0,8,15,-5,0,0,8,14,14,0,0,8,14,13,0,0,8,14,12,0,0,8,14,11,0,0,8,14,10,0,0,8,14,1,0,0,8,14,0,0,0,8,14,-1,0,0,8,14,-2,0,0,8,14,-3,0,0,8,14,-4,0,0,8,14,-5,0,0,8,13,14,0,0,8,13,13,0,0,8,13,12,0,0,8,13,11,0,0,8,13,10,0,0,8,13,1,0,0,8,13,0,0,0,8,13,-1,0,0,8,13,-2,0,0,8,13,-3,0,0,8,13,-4,0,0,8,13,-5,0,0,8,12,14,0,0,8,12,13,0,0,8,12,12,0,0,8,12,11,0,0,8,12,10,0,0,8,12,1,0,0,8,12,0,0,0,8,12,-1,0,0,8,12,-2,0,0,8,12,-3,0,0,8,12,-4,0,0,8,12,-5,0,0,8,11,14,0,0,8,11,13,0,0,8,11,12,0,0,8,11,11,0,0,8,11,10,0,0,8,11,1,0,0,8,11,0,0,0,8,11,-1,0,0,8,11,-2,0,0,8,11,-3,0,0,8,11,-4,0,0,8,11,-5,0,0,8,10,14,0,0,8,10,13,0,0,8,10,12,0,0,8,10,11,0,0,8,10,10,0,0,8,10,1,0,0,8,10,0,0,0,8,10,-1,0,0,8,10,-2,0,0,8,10,-3,0,0,8,10,-4,0,0,8,10,-5,0,0,8,9,14,0,0,8,9,13,0,0,8,9,12,0,0,8,9,11,0,0,8,9,10,0,0,8,9,1,0,0,8,9,0,0,0,8,9,-1,0,0,8,9,-2,0,0,8,9,-3,0,0,8,9,-4,0,0,8,9,-5,0,0,8,8,14,0,0,8,8,13,0,0,8,8,12,0,0,8,8,11,0,0,8,8,10,0,0,8,8,1,0,0,8,8,0,0,0,8,8,-1,0,0,8,8,-2,0,0,8,8,-3,0,0,8,8,-4,0,0,8,8,-5,0,0,8,7,14,0,0,8,7,13,0,0,8,7,12,0,0,8,7,11,0,0,8,7,10,0,0,8,7,9,0,0,8,7,8,0,0,8,7,7,0,0,8,7,6,0,0,8,7,5,0,0,8,7,4,0,0,8,7,3,0,0,8,7,2,0,0,8,7,1,0,0,8,7,0,0,0,8,7,-1,0,0,8,7,-2,0,0,8,7,-3,0,0,8,7,-4,0,0,8,7,-5,0,0,8,6,14,0,0,8,6,13,0,0,8,6,12,0,0,8,6,11,0,0,8,6,10,0,0,8,6,9,0,0,8,6,8,0,0,8,6,7,0,0,8,6,6,0,0,8,6,5,0,0,8,6,4,0,0,8,6,3,0,0,8,6,2,0,0,8,6,1,0,0,8,6,0,0,0,8,6,-1,0,0,8,6,-2,0,0,8,6,-3,0,0,8,6,-4,0,0,8,6,-5,0,0,8,5,14,0,0,8,5,13,0,0,8,5,12,0,0,8,5,11,0,0,8,5,10,0,0,8,5,9,0,0,8,5,8,0,0,8,5,7,0,0,8,5,6,0,0,8,5,5,0,0,8,5,4,0,0,8,5,3,0,0,8,5,2,0,0,8,5,1,0,0,8,5,0,0,0,8,5,-1,0,0,8,5,-2,0,0,8,5,-3,0,0,8,5,-4,0,0,8,5,-5,0,0,8,4,14,0,0,8,4,13,0,0,8,4,12,0,0,8,4,11,0,0,8,4,10,0,0,8,4,9,0,0,8,4,8,0,0,8,4,7,0,0,8,4,6,0,0,8,4,5,0,0,8,4,4,0,0,8,4,3,0,0,8,4,2,0,0,8,4,1,0,0,8,4,0,0,0,8,4,-1,0,0,8,4,-2,0,0,8,4,-3,0,0,8,4,-4,0,0,8,4,-5,0,0,8,3,14,0,0,8,3,13,0,0,8,3,12,0,0,8,3,11,0,0,8,3,10,0,0,8,3,9,0,0,8,3,8,0,0,8,3,7,0,0,8,3,6,0,0,8,3,5,0,0,8,3,4,0,0,8,3,3,0,0,8,3,2,0,0,8,3,1,0,0,8,3,0,0,0,8,3,-1,0,0,8,3,-2,0,0,8,3,-3,0,0,8,3,-4,0,0,8,3,-5,0,0,8,2,14,0,0,8,2,13,0,0,8,2,12,0,0,8,2,11,0,0,8,2,10,0,0,8,2,9,0,0,8,2,8,0,0,8,2,7,0,0,8,2,6,0,0,8,2,5,0,0,8,2,4,0,0,8,2,3,0,0,8,2,2,0,0,8,2,1,0,0,8,2,0,0,0,8,2,-1,0,0,8,2,-2,0,0,8,2,-3,0,0,8,2,-4,0,0,8,2,-5,0,0,8,-3,9,0,0,8,-3,8,0,0,8,-3,7,0,0,8,-3,6,0,0,8,-3,5,0,0,8,-3,4,0,0,8,-3,3,0,0,8,-4,9,0,0,8,-4,8,0,0,8,-4,7,0,0,8,-4,6,0,0,8,-4,5,0,0,8,-4,4,0,0,8,-4,3,0,0,8,-4,2,0,0,8,-4,1,0,0,8,-4,0,0,0,8,-4,-1,0,0,8,-4,-2,0,0,8,-4,-3,0,0,8,-4,-4,0,0,8,-4,-5,0,0,8,-5,9,0,0,8,-5,8,0,0,8,-5,7,0,0,8,-5,6,0,0,8,-5,5,0,0,8,-5,4,0,0,8,-5,3,0,0,8,-5,2,0,0,8,-5,1,0,0,8,-5,0,0,0,8,-5,-1,0,0,8,-5,-2,0,0,8,-5,-3,0,0,8,-5,-4,0,0,8,-5,-5,0,0,8,-6,9,0,0,8,-6,8,0,0,8,-6,7,0,0,8,-6,6,0,0,8,-6,5,0,0,8,-6,4,0,0,8,-6,3,0,0,8,-6,2,0,0,8,-6,1,0,0,8,-6,0,0,0,8,-6,-1,0,0,8,-6,-2,0,0,8,-6,-3,0,0,8,-6,-4,0,0,8,-6,-5,0,0,8,-7,9,0,0,8,-7,8,0,0,8,-7,7,0,0,8,-7,6,0,0,8,-7,5,0,0,8,-7,4,0,0,8,-7,3,0,0,8,-7,2,0,0,8,-7,1,0,0,8,-7,0,0,0,8,-7,-1,0,0,8,-7,-2,0,0,8,-7,-3,0,0,8,-7,-4,0,0,8,-7,-5,0,0,8,1,14,0,0,8,1,13,0,0,8,1,12,0,0,8,1,11,0,0,8,1,10,0,0,8,1,9,0,0,8,1,8,0,0,8,1,7,0,0,8,1,6,0,0,8,1,5,0,0,8,1,4,0,0,8,1,3,0,0,8,0,14,0,0,8,0,13,0,0,8,0,12,0,0,8,0,11,0,0,8,0,10,0,0,8,0,9,0,0,8,0,8,0,0,8,0,7,0,0,8,0,6,0,0,8,0,5,0,0,8,0,4,0,0,8,0,3,0,0,8,-1,14,0,0,8,-1,13,0,0,8,-1,12,0,0,8,-1,8,0,0,8,-1,7,0,0,8,-1,6,0,0,8,-1,5,0,0,8,-1,4,0,0,8,-1,3,0,0,8,-2,8,0,0,8,-2,7,0,0,8,-2,6,0,0,8,-2,5,0,0,8,-2,4,0,0,8,-2,3,0,0,8],"Middle":[-7,-6,0,2,7,-6,-6,0,2,7,-5,-6,0,2,7,-4,-6,0,2,7,-3,2,0,1,7,-2,2,0,2,7,-1,2,0,2,7,-1,11,0,3,7,0,2,0,2,7,1,2,0,3,7,2,-6,0,2,7,3,-6,0,2,7,4,-6,0,2,7,5,-6,0,2,7,6,-6,0,2,7,7,-6,0,2,7,8,-6,0,2,7,8,9,0,1,7,9,-6,0,2,7,9,9,0,2,7,10,-6,0,2,7,10,9,0,2,7,11,-6,0,2,7,11,9,0,2,7,12,-6,0,2,7,12,9,0,2,7,13,-6,0,2,7,13,9,0,2,7,14,-6,0,2,7,14,9,0,2,7,15,-6,0,2,7,15,9,0,2,7],"Top":[-8,-6,0,3,4,-8,-5,0,3,3,-8,-4,0,3,3,-8,-3,0,3,3,-8,-2,0,3,3,-8,-1,0,3,3,-8,0,0,3,3,-8,1,0,3,3,-8,2,0,3,3,-8,3,0,3,3,-8,4,0,3,3,-8,5,0,3,3,-8,6,0,3,3,-8,7,0,3,3,-8,8,0,3,3,-8,9,0,3,3,-8,10,0,11,2,-7,10,0,2,2,-6,10,0,2,2,-5,10,0,2,2,-4,10,0,2,2,-3,-6,0,1,4,-3,-5,0,1,3,-3,-4,0,1,3,-3,-3,0,1,3,-3,-2,0,1,3,-3,-1,0,1,3,-3,0,0,1,3,-3,1,0,1,3,-3,10,0,2,2,-2,9,0,1,2,-2,10,0,13,2,-2,11,0,3,4,-2,12,0,3,3,-2,13,0,3,3,-2,14,0,3,3,-2,15,0,11,2,-1,9,0,3,2,-1,10,0,3,3,-1,15,0,2,2,0,15,0,2,2,1,-6,0,3,4,1,-5,0,3,3,1,-4,0,3,3,1,-3,0,3,3,1,-2,0,3,3,1,-1,0,3,3,1,0,0,3,3,1,1,0,3,3,1,15,0,2,2,2,15,0,2,2,3,15,0,2,2,4,15,0,2,2,5,15,0,2,2,6,15,0,2,2,7,15,0,2,2,8,2,0,1,2,8,3,0,1,3,8,4,0,1,3,8,5,0,1,3,8,6,0,1,3,8,7,0,1,3,8,8,0,1,3,8,15,0,2,2,9,2,0,2,2,9,15,0,2,2,10,2,0,2,2,10,15,0,2,2,11,2,0,2,2,11,15,0,2,2,12,2,0,2,2,12,15,0,2,2,13,2,0,2,2,13,15,0,2,2,14,2,0,2,2,14,15,0,2,2,15,2,0,2,2,15,15,0,2,2,16,-6,0,1,4,16,-5,0,1,3,16,-4,0,1,3,16,-3,0,1,3,16,-2,0,1,3,16,-1,0,1,3,16,0,0,1,3,16,1,0,1,3,16,2,0,13,2,16,9,0,1,4,16,10,0,1,3,16,11,0,1,3,16,12,0,1,3,16,13,0,1,3,16,14,0,1,3,16,15,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/Preinstall.json
deleted file mode 100644
index 3734766..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"test12","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":406,"Y":427},"Size":{"X":66,"Y":54},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0001","CurrAmmon":"30","ResidueAmmo":"30"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":250,"Y":439},"Size":{"X":98,"Y":68},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0001","CurrAmmon":"30","ResidueAmmo":"30"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":329,"Y":370},"Size":{"X":44,"Y":65},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0001","CurrAmmon":"30","ResidueAmmo":"30"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":317,"Y":196},"Size":{"X":201,"Y":60},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]}],[{"Position":{"X":220,"Y":317},"Size":{"X":39,"Y":134},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0002","Weight":100,"Attr":{"CurrAmmon":"7","ResidueAmmo":"70"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":473,"Y":302},"Size":{"X":61,"Y":111},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"weapon0002","Weight":100,"Attr":{"CurrAmmon":"7","ResidueAmmo":"70"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":285,"Y":426},"Size":{"X":149,"Y":56},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":468,"Y":324},"Size":{"X":66,"Y":110},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":346,"Y":371},"Size":{"X":17,"Y":94},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":387,"Y":200},"Size":{"X":82,"Y":36},"SpecialMarkType":0,"DelayTime":2.5,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":246,"Y":175},"Size":{"X":84,"Y":65},"SpecialMarkType":0,"DelayTime":3,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]}],[{"Position":{"X":325,"Y":417},"Size":{"X":41,"Y":45},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0006","CurrAmmon":"20","ResidueAmmo":"20"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":443,"Y":242},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0006","CurrAmmon":"20","ResidueAmmo":"20"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":241,"Y":227},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0006","CurrAmmon":"20","ResidueAmmo":"20"},"Altitude":0,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/Preview.png
deleted file mode 100644
index 7276ff0..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/Preview.png.import
deleted file mode 100644
index 792054f..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b3m084aaip558"
-path="res://.godot/imported/Preview.png-8c476da21cd7f2ad84205fc0a7e6692d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/battle/Battle3/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-8c476da21cd7f2ad84205fc0a7e6692d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/RoomInfo.json
deleted file mode 100644
index 61b84dc..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":10,"Y":6},"Size":{"X":24,"Y":25},"DoorAreaInfos":[{"Direction":1,"Start":0,"End":368},{"Direction":3,"Start":0,"End":208},{"Direction":0,"Start":96,"End":272},{"Direction":2,"Start":0,"End":144}],"GroupName":"TestGroup1","RoomType":0,"RoomName":"Battle3","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/TileInfo.json
deleted file mode 100644
index c0ec3fa..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle3/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[184,120,376,120,376,152,440,152,440,216,520,216,520,384,456,384,456,464,312,464,312,480,184,480]},{"Type":1,"Points":[264,240,392,240,392,256,408,256,408,272,424,272,424,344,408,344,408,392,360,392,360,328,296,328,296,312,280,312,280,392,232,392,232,272,248,272,248,256,264,256]}],"Floor":[32,23,0,0,8,32,22,0,0,8,32,21,0,0,8,32,20,0,0,8,32,19,0,0,8,32,18,0,0,8,32,17,0,0,8,32,16,0,0,8,32,15,0,0,8,32,14,0,0,8,32,13,0,0,8,31,23,0,0,8,31,22,0,0,8,31,21,0,0,8,31,20,0,0,8,31,19,0,0,8,31,18,0,0,8,31,17,0,0,8,31,16,0,0,8,31,15,0,0,8,31,14,0,0,8,31,13,0,0,8,30,23,0,0,8,30,22,0,0,8,30,21,0,0,8,30,20,0,0,8,30,19,0,0,8,30,18,0,0,8,30,17,0,0,8,30,16,0,0,8,30,15,0,0,8,30,14,0,0,8,30,13,0,0,8,29,23,0,0,8,29,22,0,0,8,29,21,0,0,8,29,20,0,0,8,29,19,0,0,8,29,18,0,0,8,29,17,0,0,8,29,16,0,0,8,29,15,0,0,8,29,14,0,0,8,29,13,0,0,8,28,28,0,0,8,28,27,0,0,8,28,26,0,0,8,28,25,0,0,8,28,24,0,0,8,28,23,0,0,8,28,22,0,0,8,28,21,0,0,8,28,20,0,0,8,28,19,0,0,8,28,18,0,0,8,28,17,0,0,8,28,16,0,0,8,28,15,0,0,8,28,14,0,0,8,28,13,0,0,8,27,28,0,0,8,27,27,0,0,8,27,26,0,0,8,27,25,0,0,8,27,24,0,0,8,27,23,0,0,8,27,22,0,0,8,27,21,0,0,8,27,20,0,0,8,27,19,0,0,8,27,18,0,0,8,27,17,0,0,8,27,16,0,0,8,27,15,0,0,8,27,14,0,0,8,27,13,0,0,8,27,9,0,0,8,27,10,0,0,8,27,11,0,0,8,27,12,0,0,8,26,28,0,0,8,26,27,0,0,8,26,26,0,0,8,26,25,0,0,8,26,24,0,0,8,26,23,0,0,8,26,22,0,0,8,26,21,0,0,8,26,20,0,0,8,26,19,0,0,8,26,18,0,0,8,26,17,0,0,8,26,16,0,0,8,26,15,0,0,8,26,14,0,0,8,26,13,0,0,8,26,9,0,0,8,26,10,0,0,8,26,11,0,0,8,26,12,0,0,8,25,28,0,0,8,25,27,0,0,8,25,26,0,0,8,25,25,0,0,8,25,24,0,0,8,25,23,0,0,8,25,22,0,0,8,25,21,0,0,8,25,16,0,0,8,25,15,0,0,8,25,14,0,0,8,25,13,0,0,8,25,9,0,0,8,25,10,0,0,8,25,11,0,0,8,25,12,0,0,8,24,28,0,0,8,24,27,0,0,8,24,26,0,0,8,24,25,0,0,8,24,24,0,0,8,24,15,0,0,8,24,14,0,0,8,24,13,0,0,8,24,9,0,0,8,24,10,0,0,8,24,11,0,0,8,24,12,0,0,8,23,28,0,0,8,23,27,0,0,8,23,26,0,0,8,23,25,0,0,8,23,24,0,0,8,23,14,0,0,8,23,13,0,0,8,23,7,0,0,8,23,8,0,0,8,23,9,0,0,8,23,10,0,0,8,23,11,0,0,8,23,12,0,0,8,22,28,0,0,8,22,27,0,0,8,22,26,0,0,8,22,25,0,0,8,22,24,0,0,8,22,23,0,0,8,22,22,0,0,8,22,21,0,0,8,22,20,0,0,8,22,7,0,0,8,22,8,0,0,8,22,9,0,0,8,22,10,0,0,8,22,11,0,0,8,22,12,0,0,8,22,13,0,0,8,22,14,0,0,8,21,28,0,0,8,21,27,0,0,8,21,26,0,0,8,21,25,0,0,8,21,24,0,0,8,21,23,0,0,8,21,22,0,0,8,21,21,0,0,8,21,20,0,0,8,21,7,0,0,8,21,8,0,0,8,21,9,0,0,8,21,10,0,0,8,21,11,0,0,8,21,12,0,0,8,21,13,0,0,8,21,14,0,0,8,20,28,0,0,8,20,27,0,0,8,20,26,0,0,8,20,25,0,0,8,20,24,0,0,8,20,23,0,0,8,20,22,0,0,8,20,21,0,0,8,20,20,0,0,8,20,7,0,0,8,20,8,0,0,8,20,9,0,0,8,20,10,0,0,8,20,11,0,0,8,20,12,0,0,8,20,13,0,0,8,20,14,0,0,8,19,29,0,0,8,19,28,0,0,8,19,27,0,0,8,19,26,0,0,8,19,25,0,0,8,19,24,0,0,8,19,23,0,0,8,19,22,0,0,8,19,21,0,0,8,19,20,0,0,8,19,7,0,0,8,19,8,0,0,8,19,9,0,0,8,19,10,0,0,8,19,11,0,0,8,19,12,0,0,8,19,13,0,0,8,19,14,0,0,8,18,19,0,0,8,18,29,0,0,8,18,28,0,0,8,18,27,0,0,8,18,26,0,0,8,18,25,0,0,8,18,24,0,0,8,18,23,0,0,8,18,22,0,0,8,18,21,0,0,8,18,20,0,0,8,18,7,0,0,8,18,8,0,0,8,18,9,0,0,8,18,10,0,0,8,18,11,0,0,8,18,12,0,0,8,18,13,0,0,8,18,14,0,0,8,17,19,0,0,8,17,23,0,0,8,17,22,0,0,8,17,21,0,0,8,17,20,0,0,8,17,29,0,0,8,17,28,0,0,8,17,27,0,0,8,17,26,0,0,8,17,25,0,0,8,17,24,0,0,8,17,7,0,0,8,17,8,0,0,8,17,9,0,0,8,17,10,0,0,8,17,11,0,0,8,17,12,0,0,8,17,13,0,0,8,17,14,0,0,8,16,29,0,0,8,16,28,0,0,8,16,27,0,0,8,16,26,0,0,8,16,25,0,0,8,16,24,0,0,8,16,7,0,0,8,16,8,0,0,8,16,9,0,0,8,16,10,0,0,8,16,11,0,0,8,16,12,0,0,8,16,13,0,0,8,16,14,0,0,8,16,15,0,0,8,15,29,0,0,8,15,28,0,0,8,15,27,0,0,8,15,26,0,0,8,15,25,0,0,8,15,24,0,0,8,15,7,0,0,8,15,8,0,0,8,15,9,0,0,8,15,10,0,0,8,15,11,0,0,8,15,12,0,0,8,15,13,0,0,8,15,14,0,0,8,15,15,0,0,8,15,16,0,0,8,14,29,0,0,8,14,28,0,0,8,14,27,0,0,8,14,26,0,0,8,14,25,0,0,8,14,24,0,0,8,14,23,0,0,8,14,22,0,0,8,14,21,0,0,8,14,20,0,0,8,14,7,0,0,8,14,8,0,0,8,14,9,0,0,8,14,10,0,0,8,14,11,0,0,8,14,12,0,0,8,14,13,0,0,8,14,14,0,0,8,14,15,0,0,8,14,16,0,0,8,14,17,0,0,8,14,18,0,0,8,14,19,0,0,8,13,29,0,0,8,13,28,0,0,8,13,27,0,0,8,13,26,0,0,8,13,25,0,0,8,13,24,0,0,8,13,23,0,0,8,13,22,0,0,8,13,21,0,0,8,13,20,0,0,8,13,7,0,0,8,13,8,0,0,8,13,9,0,0,8,13,10,0,0,8,13,11,0,0,8,13,12,0,0,8,13,13,0,0,8,13,14,0,0,8,13,15,0,0,8,13,16,0,0,8,13,17,0,0,8,13,18,0,0,8,13,19,0,0,8,12,29,0,0,8,12,28,0,0,8,12,27,0,0,8,12,26,0,0,8,12,25,0,0,8,12,24,0,0,8,12,23,0,0,8,12,22,0,0,8,12,21,0,0,8,12,20,0,0,8,12,7,0,0,8,12,8,0,0,8,12,9,0,0,8,12,10,0,0,8,12,11,0,0,8,12,12,0,0,8,12,13,0,0,8,12,14,0,0,8,12,15,0,0,8,12,16,0,0,8,12,17,0,0,8,12,18,0,0,8,12,19,0,0,8,11,29,0,0,8,11,28,0,0,8,11,27,0,0,8,11,26,0,0,8,11,25,0,0,8,11,24,0,0,8,11,23,0,0,8,11,22,0,0,8,11,21,0,0,8,11,20,0,0,8,11,7,0,0,8,11,8,0,0,8,11,9,0,0,8,11,10,0,0,8,11,11,0,0,8,11,12,0,0,8,11,13,0,0,8,11,14,0,0,8,11,15,0,0,8,11,16,0,0,8,11,17,0,0,8,11,18,0,0,8,11,19,0,0,8],"Middle":[11,6,0,2,7,12,6,0,2,7,13,6,0,2,7,14,6,0,2,7,15,6,0,2,7,15,23,0,1,7,16,6,0,2,7,16,23,0,3,7,17,6,0,2,7,17,18,0,2,7,18,6,0,2,7,18,18,0,2,7,19,6,0,2,7,19,19,0,1,7,20,6,0,2,7,20,19,0,2,7,21,6,0,2,7,21,19,0,2,7,22,6,0,2,7,22,19,0,2,7,23,6,0,2,7,23,23,0,1,7,24,8,0,1,7,24,23,0,3,7,25,8,0,2,7,25,20,0,3,7,26,8,0,2,7,27,8,0,2,7,28,12,0,1,7,29,12,0,2,7,30,12,0,2,7,31,12,0,2,7,32,12,0,2,7],"Top":[10,6,0,3,4,10,7,0,3,3,10,8,0,3,3,10,9,0,3,3,10,10,0,3,3,10,11,0,3,3,10,12,0,3,3,10,13,0,3,3,10,14,0,3,3,10,15,0,3,3,10,16,0,3,3,10,17,0,3,3,10,18,0,3,3,10,19,0,3,3,10,20,0,3,3,10,21,0,3,3,10,22,0,3,3,10,23,0,3,3,10,24,0,3,3,10,25,0,3,3,10,26,0,3,3,10,27,0,3,3,10,28,0,3,3,10,29,0,3,3,10,30,0,11,2,11,30,0,2,2,12,30,0,2,2,13,30,0,2,2,14,30,0,2,2,15,17,0,1,2,15,18,0,1,3,15,19,0,1,3,15,20,0,1,3,15,21,0,1,3,15,22,0,1,3,15,30,0,2,2,16,16,0,1,2,16,17,0,13,2,16,18,0,3,4,16,19,0,3,3,16,20,0,3,3,16,21,0,3,3,16,22,0,3,3,16,30,0,2,2,17,15,0,1,2,17,16,0,13,2,17,30,0,2,2,18,15,0,2,2,18,30,0,2,2,19,15,0,2,2,19,18,0,1,4,19,30,0,2,2,20,15,0,2,2,20,29,0,1,2,20,30,0,13,2,21,15,0,2,2,21,29,0,2,2,22,15,0,2,2,22,29,0,2,2,23,15,0,3,2,23,16,0,11,2,23,19,0,1,4,23,20,0,1,3,23,21,0,1,3,23,22,0,1,3,23,29,0,2,2,24,6,0,1,4,24,7,0,1,3,24,16,0,3,2,24,17,0,11,2,24,20,0,3,4,24,21,0,3,3,24,22,0,3,3,24,29,0,2,2,25,17,0,3,2,25,18,0,3,3,25,19,0,3,3,25,29,0,2,2,26,29,0,2,2,27,29,0,2,2,28,8,0,1,4,28,9,0,1,3,28,10,0,1,3,28,11,0,1,3,28,29,0,2,2,29,24,0,1,2,29,25,0,1,3,29,26,0,1,3,29,27,0,1,3,29,28,0,1,3,29,29,0,13,2,30,24,0,2,2,31,24,0,2,2,32,24,0,2,2,33,12,0,1,4,33,13,0,1,3,33,14,0,1,3,33,15,0,1,3,33,16,0,1,3,33,17,0,1,3,33,18,0,1,3,33,19,0,1,3,33,20,0,1,3,33,21,0,1,3,33,22,0,1,3,33,23,0,1,3,33,24,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/Preinstall.json
deleted file mode 100644
index 3ca0692..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"Test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":-138,"Y":82},"Size":{"X":36,"Y":48},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":60,"Y":145},"Size":{"X":40,"Y":51},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0008","CurrAmmon":"10","ResidueAmmo":"10"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-66,"Y":-6},"Size":{"X":51,"Y":49},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0008","CurrAmmon":"10","ResidueAmmo":"10"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-2,"Y":-54},"Size":{"X":75,"Y":37},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0008","CurrAmmon":"10","ResidueAmmo":"10"},"Altitude":0,"VerticalSpeed":0}]}],[{"Position":{"X":-182,"Y":105},"Size":{"X":59,"Y":26},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0005","CurrAmmon":"10","ResidueAmmo":"10"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-162,"Y":27},"Size":{"X":42,"Y":37},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0003","CurrAmmon":"12","ResidueAmmo":"12"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":48,"Y":21},"Size":{"X":16,"Y":91},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0005","CurrAmmon":"10","ResidueAmmo":"10"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-52,"Y":155},"Size":{"X":106,"Y":41},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0008","CurrAmmon":"10","ResidueAmmo":"10"},"Altitude":0,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/Preview.png
deleted file mode 100644
index a8f84c1..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/Preview.png.import
deleted file mode 100644
index 9e4ef59..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://x2ytkmtkn53s"
-path="res://.godot/imported/Preview.png-8f3c76ec034bcd9156b51bf3b67fca71.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/battle/Battle4/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-8f3c76ec034bcd9156b51bf3b67fca71.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/RoomInfo.json
deleted file mode 100644
index a698207..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":-16,"Y":-15},"Size":{"X":26,"Y":31},"DoorAreaInfos":[{"Direction":0,"Start":128,"End":272},{"Direction":2,"Start":144,"End":304},{"Direction":1,"Start":208,"End":368},{"Direction":3,"Start":80,"End":192}],"GroupName":"TestGroup1","RoomType":0,"RoomName":"Battle4","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/TileInfo.json
deleted file mode 100644
index 859f5fd..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle4/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[-152,-216,-56,-216,-56,-88,136,-88,136,48,104,48,104,208,56,208,56,240,-88,240,-88,192,-136,192,-136,144,-232,144,-232,-8,-120,-8,-120,-48,-152,-48]},{"Type":1,"Points":[-24,-16,24,-16,24,88,8,88,8,104,-8,104,-8,120,-88,120,-88,32,-40,32,-40,48,-24,48]}],"Floor":[-2,-2,0,0,8,-1,-2,0,0,8,0,-2,0,0,8,1,-2,0,0,8,2,-2,0,0,8,3,-2,0,0,8,4,-2,0,0,8,5,-2,0,0,8,6,-2,0,0,8,7,-2,0,0,8,-8,-6,0,0,8,-8,-5,0,0,8,-8,-4,0,0,8,-8,-3,0,0,8,-8,-2,0,0,8,-8,-1,0,0,8,-8,0,0,0,8,-8,1,0,0,8,-8,2,0,0,8,-7,-6,0,0,8,-7,-5,0,0,8,-7,-4,0,0,8,-7,-3,0,0,8,-7,-2,0,0,8,-7,-1,0,0,8,-7,0,0,0,8,-7,1,0,0,8,-7,2,0,0,8,-6,-6,0,0,8,-6,-5,0,0,8,-6,-4,0,0,8,-6,-3,0,0,8,-6,-2,0,0,8,-6,-1,0,0,8,-6,0,0,0,8,-6,1,0,0,8,-6,2,0,0,8,-5,-6,0,0,8,-5,-5,0,0,8,-5,-4,0,0,8,-5,-3,0,0,8,-5,-2,0,0,8,-5,-1,0,0,8,-5,0,0,0,8,-5,1,0,0,8,-4,-6,0,0,8,-4,-5,0,0,8,-4,-4,0,0,8,-4,-3,0,0,8,-4,-2,0,0,8,-4,-1,0,0,8,-4,0,0,0,8,-4,1,0,0,8,-3,-6,0,0,8,-3,-5,0,0,8,-3,-4,0,0,8,-3,-3,0,0,8,-3,-2,0,0,8,-3,-1,0,0,8,-3,0,0,0,8,-3,1,0,0,8,-2,-6,0,0,8,-2,-5,0,0,8,-2,-4,0,0,8,-2,-3,0,0,8,-2,-1,0,0,8,-2,0,0,0,8,-2,1,0,0,8,-2,2,0,0,8,-1,-6,0,0,8,-1,-5,0,0,8,-1,-4,0,0,8,-1,-3,0,0,8,0,-6,0,0,8,0,-5,0,0,8,0,-4,0,0,8,0,-3,0,0,8,1,-6,0,0,8,1,-5,0,0,8,1,-4,0,0,8,1,-3,0,0,8,1,-1,0,0,8,1,0,0,0,8,1,1,0,0,8,1,2,0,0,8,2,-6,0,0,8,2,-5,0,0,8,2,-4,0,0,8,2,-3,0,0,8,2,-1,0,0,8,2,0,0,0,8,2,1,0,0,8,2,2,0,0,8,3,-6,0,0,8,3,-5,0,0,8,3,-4,0,0,8,3,-3,0,0,8,3,-1,0,0,8,3,0,0,0,8,3,1,0,0,8,3,2,0,0,8,4,-6,0,0,8,4,-5,0,0,8,4,-4,0,0,8,4,-3,0,0,8,4,-1,0,0,8,4,0,0,0,8,4,1,0,0,8,4,2,0,0,8,5,-6,0,0,8,5,-5,0,0,8,5,-4,0,0,8,5,-3,0,0,8,5,-1,0,0,8,5,0,0,0,8,5,1,0,0,8,5,2,0,0,8,6,-6,0,0,8,6,-5,0,0,8,6,-4,0,0,8,6,-3,0,0,8,6,-1,0,0,8,6,0,0,0,8,6,1,0,0,8,6,2,0,0,8,7,-6,0,0,8,7,-5,0,0,8,7,-4,0,0,8,7,-3,0,0,8,7,-1,0,0,8,7,0,0,0,8,7,1,0,0,8,7,2,0,0,8,8,-6,0,0,8,8,-5,0,0,8,8,-4,0,0,8,8,-3,0,0,8,8,-2,0,0,8,8,-1,0,0,8,8,0,0,0,8,8,1,0,0,8,8,2,0,0,8,0,5,0,0,8,0,6,0,0,8,0,7,0,0,8,0,8,0,0,8,1,3,0,0,8,1,4,0,0,8,1,5,0,0,8,1,6,0,0,8,1,7,0,0,8,1,8,0,0,8,2,3,0,0,8,2,4,0,0,8,2,5,0,0,8,2,6,0,0,8,2,7,0,0,8,2,8,0,0,8,3,3,0,0,8,3,4,0,0,8,3,5,0,0,8,3,6,0,0,8,3,7,0,0,8,3,8,0,0,8,4,3,0,0,8,4,4,0,0,8,4,5,0,0,8,4,6,0,0,8,4,7,0,0,8,4,8,0,0,8,5,3,0,0,8,5,4,0,0,8,5,5,0,0,8,5,6,0,0,8,5,7,0,0,8,5,8,0,0,8,6,3,0,0,8,6,4,0,0,8,6,5,0,0,8,6,6,0,0,8,6,7,0,0,8,6,8,0,0,8,-10,-14,0,0,8,-10,-13,0,0,8,-10,-12,0,0,8,-10,-11,0,0,8,-10,-10,0,0,8,-10,-9,0,0,8,-10,-8,0,0,8,-10,-7,0,0,8,-10,-6,0,0,8,-10,-5,0,0,8,-10,-4,0,0,8,-9,-14,0,0,8,-9,-13,0,0,8,-9,-12,0,0,8,-9,-11,0,0,8,-9,-10,0,0,8,-9,-9,0,0,8,-9,-8,0,0,8,-9,-7,0,0,8,-9,-6,0,0,8,-9,-5,0,0,8,-9,-4,0,0,8,-8,-14,0,0,8,-8,-13,0,0,8,-8,-12,0,0,8,-8,-11,0,0,8,-8,-10,0,0,8,-8,-9,0,0,8,-8,-8,0,0,8,-8,-7,0,0,8,-7,-14,0,0,8,-7,-13,0,0,8,-7,-12,0,0,8,-7,-11,0,0,8,-7,-10,0,0,8,-7,-9,0,0,8,-7,-8,0,0,8,-7,-7,0,0,8,-6,-14,0,0,8,-6,-13,0,0,8,-6,-12,0,0,8,-6,-11,0,0,8,-6,-10,0,0,8,-6,-9,0,0,8,-6,-8,0,0,8,-6,-7,0,0,8,-5,-14,0,0,8,-5,-13,0,0,8,-5,-12,0,0,8,-5,-11,0,0,8,-5,-10,0,0,8,-5,-9,0,0,8,-5,-8,0,0,8,-5,-7,0,0,8,-4,-14,0,0,8,-4,-13,0,0,8,-4,-12,0,0,8,-4,-11,0,0,8,-4,-10,0,0,8,-4,-9,0,0,8,-4,-8,0,0,8,-4,-7,0,0,8,-15,-1,0,0,8,-15,0,0,0,8,-15,1,0,0,8,-15,2,0,0,8,-15,3,0,0,8,-15,4,0,0,8,-15,5,0,0,8,-15,6,0,0,8,-15,7,0,0,8,-15,8,0,0,8,-14,-1,0,0,8,-14,0,0,0,8,-14,1,0,0,8,-14,2,0,0,8,-14,3,0,0,8,-14,4,0,0,8,-14,5,0,0,8,-14,6,0,0,8,-14,7,0,0,8,-14,8,0,0,8,-13,-1,0,0,8,-13,0,0,0,8,-13,1,0,0,8,-13,2,0,0,8,-13,3,0,0,8,-13,4,0,0,8,-13,5,0,0,8,-13,6,0,0,8,-13,7,0,0,8,-13,8,0,0,8,-12,-1,0,0,8,-12,0,0,0,8,-12,1,0,0,8,-12,2,0,0,8,-12,3,0,0,8,-12,4,0,0,8,-12,5,0,0,8,-12,6,0,0,8,-12,7,0,0,8,-12,8,0,0,8,-11,-1,0,0,8,-11,0,0,0,8,-11,1,0,0,8,-11,2,0,0,8,-11,3,0,0,8,-11,4,0,0,8,-11,5,0,0,8,-11,6,0,0,8,-11,7,0,0,8,-11,8,0,0,8,-10,-1,0,0,8,-10,0,0,0,8,-10,1,0,0,8,-10,2,0,0,8,-10,3,0,0,8,-10,4,0,0,8,-10,5,0,0,8,-10,6,0,0,8,-10,7,0,0,8,-10,8,0,0,8,-9,-1,0,0,8,-9,0,0,0,8,-9,1,0,0,8,-9,2,0,0,8,-9,3,0,0,8,-9,4,0,0,8,-9,5,0,0,8,-9,6,0,0,8,-9,7,0,0,8,-9,8,0,0,8,-8,3,0,0,8,-8,4,0,0,8,-8,5,0,0,8,-8,6,0,0,8,-8,7,0,0,8,-8,8,0,0,8,-7,3,0,0,8,-7,4,0,0,8,-7,5,0,0,8,-7,6,0,0,8,-7,7,0,0,8,-7,8,0,0,8,-6,3,0,0,8,-6,4,0,0,8,-6,5,0,0,8,-6,6,0,0,8,-6,7,0,0,8,-6,8,0,0,8,-5,7,0,0,8,-5,8,0,0,8,-4,7,0,0,8,-4,8,0,0,8,-4,9,0,0,8,-4,10,0,0,8,-4,11,0,0,8,-4,12,0,0,8,-3,7,0,0,8,-3,8,0,0,8,-3,9,0,0,8,-3,10,0,0,8,-3,11,0,0,8,-3,12,0,0,8,-2,7,0,0,8,-2,8,0,0,8,-2,9,0,0,8,-2,10,0,0,8,-2,11,0,0,8,-2,12,0,0,8,-1,6,0,0,8,-1,7,0,0,8,-1,8,0,0,8,-1,9,0,0,8,-1,10,0,0,8,-1,11,0,0,8,-1,12,0,0,8,0,9,0,0,8,0,10,0,0,8,0,11,0,0,8,0,12,0,0,8,1,9,0,0,8,1,10,0,0,8,1,11,0,0,8,1,12,0,0,8,2,9,0,0,8,2,10,0,0,8,2,11,0,0,8,2,12,0,0,8,-6,9,0,0,8,-6,10,0,0,8,-6,11,0,0,8,-6,12,0,0,8,-6,13,0,0,8,-6,14,0,0,8,-5,9,0,0,8,-5,10,0,0,8,-5,11,0,0,8,-5,12,0,0,8,-5,13,0,0,8,-5,14,0,0,8,-4,13,0,0,8,-4,14,0,0,8,-9,9,0,0,8,-9,10,0,0,8,-9,11,0,0,8,-8,9,0,0,8,-8,10,0,0,8,-8,11,0,0,8,-7,9,0,0,8,-7,10,0,0,8,-7,11,0,0,8,3,9,0,0,8,3,10,0,0,8,3,11,0,0,8,3,12,0,0,8,4,9,0,0,8,4,10,0,0,8,4,11,0,0,8,4,12,0,0,8,5,9,0,0,8,5,10,0,0,8,5,11,0,0,8,5,12,0,0,8,6,9,0,0,8,6,10,0,0,8,6,11,0,0,8,6,12,0,0,8,-3,13,0,0,8,-3,14,0,0,8,-2,13,0,0,8,-2,14,0,0,8,-1,13,0,0,8,-1,14,0,0,8,0,13,0,0,8,0,14,0,0,8,1,13,0,0,8,1,14,0,0,8,2,13,0,0,8,2,14,0,0,8,3,13,0,0,8,3,14,0,0,8,-3,2,0,0,8],"Middle":[-15,-2,0,2,7,-14,-2,0,2,7,-13,-2,0,2,7,-12,-2,0,2,7,-11,-2,0,2,7,-10,-15,0,2,7,-10,-2,0,2,7,-9,-15,0,2,7,-9,-2,0,3,7,-8,-15,0,2,7,-7,-15,0,2,7,-6,-15,0,2,7,-5,-15,0,2,7,-5,6,0,1,7,-4,-15,0,2,7,-4,6,0,2,7,-3,-7,0,1,7,-3,6,0,2,7,-2,-7,0,2,7,-2,6,0,3,7,-1,-7,0,2,7,-1,5,0,3,7,0,-7,0,2,7,0,4,0,3,7,1,-7,0,2,7,2,-7,0,2,7,3,-7,0,2,7,4,-7,0,2,7,5,-7,0,2,7,6,-7,0,2,7,7,-7,0,2,7,8,-7,0,2,7],"Top":[-16,-2,0,3,4,-16,-1,0,3,3,-16,0,0,3,3,-16,1,0,3,3,-16,2,0,3,3,-16,3,0,3,3,-16,4,0,3,3,-16,5,0,3,3,-16,6,0,3,3,-16,7,0,3,3,-16,8,0,3,3,-16,9,0,11,2,-15,9,0,2,2,-14,9,0,2,2,-13,9,0,2,2,-12,9,0,2,2,-11,-15,0,3,4,-11,-14,0,3,3,-11,-13,0,3,3,-11,-12,0,3,3,-11,-11,0,3,3,-11,-10,0,3,3,-11,-9,0,3,3,-11,-8,0,3,3,-11,-7,0,3,3,-11,-6,0,3,3,-11,-5,0,3,3,-11,-4,0,3,3,-11,-3,0,11,2,-11,9,0,2,2,-10,-3,0,2,2,-10,9,0,3,2,-10,10,0,3,3,-10,11,0,3,3,-10,12,0,11,2,-9,-3,0,3,2,-9,12,0,2,2,-8,12,0,2,2,-7,12,0,3,2,-7,13,0,3,3,-7,14,0,3,3,-7,15,0,11,2,-6,15,0,2,2,-5,2,0,1,2,-5,3,0,1,3,-5,4,0,1,3,-5,5,0,1,3,-5,15,0,2,2,-4,2,0,3,2,-4,3,0,11,2,-4,15,0,2,2,-3,-15,0,1,4,-3,-14,0,1,3,-3,-13,0,1,3,-3,-12,0,1,3,-3,-11,0,1,3,-3,-10,0,1,3,-3,-9,0,1,3,-3,-8,0,1,3,-3,3,0,2,2,-3,15,0,2,2,-2,3,0,2,2,-2,5,0,3,4,-2,15,0,2,2,-1,-1,0,1,2,-1,0,0,1,3,-1,1,0,1,3,-1,2,0,1,3,-1,3,0,13,2,-1,4,0,3,4,-1,15,0,2,2,0,-1,0,3,2,0,0,0,3,3,0,1,0,3,3,0,2,0,3,3,0,3,0,3,3,0,15,0,2,2,1,15,0,2,2,2,15,0,2,2,3,15,0,2,2,4,13,0,1,2,4,14,0,1,3,4,15,0,13,2,5,13,0,2,2,6,13,0,2,2,7,3,0,1,2,7,4,0,1,3,7,5,0,1,3,7,6,0,1,3,7,7,0,1,3,7,8,0,1,3,7,9,0,1,3,7,10,0,1,3,7,11,0,1,3,7,12,0,1,3,7,13,0,13,2,8,3,0,2,2,9,-7,0,1,4,9,-6,0,1,3,9,-5,0,1,3,9,-4,0,1,3,9,-3,0,1,3,9,-2,0,1,3,9,-1,0,1,3,9,0,0,1,3,9,1,0,1,3,9,2,0,1,3,9,3,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/Preinstall.json
deleted file mode 100644
index ddd7807..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":51,"Y":90},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0009","CurrAmmon":"1","ResidueAmmo":"5"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":11,"Y":228},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0002","CurrAmmon":"7","ResidueAmmo":"7"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":103,"Y":173},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0009","CurrAmmon":"1","ResidueAmmo":"5"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":66,"Y":-4},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0007","CurrAmmon":"60","ResidueAmmo":"60"},"Altitude":0,"VerticalSpeed":0}]}],[{"Position":{"X":-1,"Y":119},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":185,"Y":110},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-44,"Y":-39},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0008","CurrAmmon":"10","ResidueAmmo":"10"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":116,"Y":229},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0008","CurrAmmon":"10","ResidueAmmo":"10"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-73,"Y":226},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0009","CurrAmmon":"1","ResidueAmmo":"5"},"Altitude":0,"VerticalSpeed":0}]}],[{"Position":{"X":65,"Y":208},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":71,"Y":33},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":-65,"Y":102},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0002","CurrAmmon":"7","ResidueAmmo":"7"},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":119,"Y":115},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0002","CurrAmmon":"7","ResidueAmmo":"7"},"Altitude":0,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/Preview.png
deleted file mode 100644
index c9a72b9..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/Preview.png.import
deleted file mode 100644
index 41fdf86..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://w8enumbscx08"
-path="res://.godot/imported/Preview.png-57faf91d48bfaedc5b04c411842f9580.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/battle/Battle5/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-57faf91d48bfaedc5b04c411842f9580.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/RoomInfo.json
deleted file mode 100644
index 1fba846..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":-10,"Y":-8},"Size":{"X":28,"Y":30},"DoorAreaInfos":[{"Direction":3,"Start":0,"End":192},{"Direction":3,"Start":272,"End":400},{"Direction":0,"Start":128,"End":384},{"Direction":2,"Start":144,"End":336},{"Direction":1,"Start":288,"End":400},{"Direction":1,"Start":0,"End":160}],"GroupName":"TestGroup1","RoomType":0,"RoomName":"Battle5","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/TileInfo.json
deleted file mode 100644
index be4573e..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle5/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[-136,-104,40,-104,40,-40,136,-40,136,-104,248,-104,248,24,264,24,264,272,184,272,184,336,8,336,8,272,-40,272,-40,288,-136,288,-136,184,-88,184,-88,128,-120,128,-120,48,-136,48]},{"Type":1,"Points":[-40,16,24,16,24,72,-40,72]},{"Type":1,"Points":[104,16,168,16,168,72,104,72]},{"Type":1,"Points":[-24,144,40,144,40,200,-24,200]},{"Type":1,"Points":[136,160,200,160,200,216,136,216]}],"Floor":[-9,-7,0,0,8,-9,-6,0,0,8,-9,-5,0,0,8,-9,-4,0,0,8,-9,-3,0,0,8,-9,-2,0,0,8,-9,-1,0,0,8,-9,0,0,0,8,-9,1,0,0,8,-9,2,0,0,8,-8,-7,0,0,8,-8,-6,0,0,8,-8,-5,0,0,8,-8,-4,0,0,8,-8,-3,0,0,8,-8,-2,0,0,8,-8,-1,0,0,8,-8,0,0,0,8,-8,1,0,0,8,-8,2,0,0,8,-7,-7,0,0,8,-7,-6,0,0,8,-7,-5,0,0,8,-7,-4,0,0,8,-7,-3,0,0,8,-7,-2,0,0,8,-7,-1,0,0,8,-7,0,0,0,8,-7,1,0,0,8,-7,2,0,0,8,-6,-7,0,0,8,-6,-6,0,0,8,-6,-5,0,0,8,-6,-4,0,0,8,-6,-3,0,0,8,-6,-2,0,0,8,-6,-1,0,0,8,-6,0,0,0,8,-6,1,0,0,8,-6,2,0,0,8,-5,-7,0,0,8,-5,-6,0,0,8,-5,-5,0,0,8,-5,-4,0,0,8,-5,-3,0,0,8,-5,-2,0,0,8,-5,-1,0,0,8,-5,0,0,0,8,-5,1,0,0,8,-5,2,0,0,8,-4,-7,0,0,8,-4,-6,0,0,8,-4,-5,0,0,8,-4,-4,0,0,8,-4,-3,0,0,8,-4,-2,0,0,8,-4,-1,0,0,8,-4,0,0,0,8,-4,1,0,0,8,-4,2,0,0,8,-3,-7,0,0,8,-3,-6,0,0,8,-3,-5,0,0,8,-3,-4,0,0,8,-3,-3,0,0,8,-3,-2,0,0,8,-3,-1,0,0,8,-3,0,0,0,8,-3,1,0,0,8,-3,2,0,0,8,-2,-7,0,0,8,-2,-6,0,0,8,-2,-5,0,0,8,-2,-4,0,0,8,-2,-3,0,0,8,-2,-2,0,0,8,-2,-1,0,0,8,-2,0,0,0,8,-1,-7,0,0,8,-1,-6,0,0,8,-1,-5,0,0,8,-1,-4,0,0,8,-1,-3,0,0,8,-1,-2,0,0,8,-1,-1,0,0,8,-1,0,0,0,8,0,-7,0,0,8,0,-6,0,0,8,0,-5,0,0,8,0,-4,0,0,8,0,-3,0,0,8,0,-2,0,0,8,0,-1,0,0,8,0,0,0,0,8,1,-7,0,0,8,1,-6,0,0,8,1,-5,0,0,8,1,-4,0,0,8,1,-3,0,0,8,1,-2,0,0,8,1,-1,0,0,8,1,0,0,0,8,1,1,0,0,8,1,2,0,0,8,2,-7,0,0,8,2,-6,0,0,8,2,-5,0,0,8,2,-4,0,0,8,2,-3,0,0,8,2,-2,0,0,8,2,-1,0,0,8,2,0,0,0,8,2,1,0,0,8,2,2,0,0,8,1,3,0,0,8,1,4,0,0,8,1,5,0,0,8,1,6,0,0,8,1,7,0,0,8,1,8,0,0,8,2,3,0,0,8,2,4,0,0,8,2,5,0,0,8,2,6,0,0,8,2,7,0,0,8,2,8,0,0,8,2,9,0,0,8,2,10,0,0,8,2,11,0,0,8,3,1,0,0,8,3,2,0,0,8,3,3,0,0,8,3,4,0,0,8,3,5,0,0,8,3,6,0,0,8,3,7,0,0,8,3,8,0,0,8,3,9,0,0,8,3,10,0,0,8,3,11,0,0,8,4,1,0,0,8,4,2,0,0,8,4,3,0,0,8,4,4,0,0,8,4,5,0,0,8,4,6,0,0,8,4,7,0,0,8,4,8,0,0,8,4,9,0,0,8,4,10,0,0,8,4,11,0,0,8,5,1,0,0,8,5,2,0,0,8,5,3,0,0,8,5,4,0,0,8,5,5,0,0,8,5,6,0,0,8,5,7,0,0,8,5,8,0,0,8,5,9,0,0,8,5,10,0,0,8,5,11,0,0,8,6,1,0,0,8,6,2,0,0,8,6,3,0,0,8,6,4,0,0,8,6,5,0,0,8,6,6,0,0,8,6,7,0,0,8,6,8,0,0,8,6,9,0,0,8,6,10,0,0,8,6,11,0,0,8,7,4,0,0,8,7,5,0,0,8,7,6,0,0,8,7,7,0,0,8,7,8,0,0,8,7,9,0,0,8,7,10,0,0,8,7,11,0,0,8,8,4,0,0,8,8,5,0,0,8,8,6,0,0,8,8,7,0,0,8,8,8,0,0,8,8,9,0,0,8,8,10,0,0,8,8,11,0,0,8,9,4,0,0,8,9,5,0,0,8,9,6,0,0,8,9,7,0,0,8,9,8,0,0,8,9,9,0,0,8,10,1,0,0,8,10,2,0,0,8,10,3,0,0,8,10,4,0,0,8,10,5,0,0,8,10,6,0,0,8,10,7,0,0,8,10,8,0,0,8,10,9,0,0,8,11,1,0,0,8,11,2,0,0,8,11,3,0,0,8,11,4,0,0,8,11,5,0,0,8,11,6,0,0,8,11,7,0,0,8,11,8,0,0,8,11,9,0,0,8,12,1,0,0,8,12,2,0,0,8,12,3,0,0,8,12,4,0,0,8,12,5,0,0,8,12,6,0,0,8,12,7,0,0,8,12,8,0,0,8,12,9,0,0,8,12,10,0,0,8,12,11,0,0,8,13,1,0,0,8,13,2,0,0,8,13,3,0,0,8,13,4,0,0,8,13,5,0,0,8,13,6,0,0,8,13,7,0,0,8,13,8,0,0,8,13,9,0,0,8,13,10,0,0,8,13,11,0,0,8,14,1,0,0,8,14,2,0,0,8,14,3,0,0,8,14,4,0,0,8,14,5,0,0,8,14,6,0,0,8,14,7,0,0,8,14,8,0,0,8,14,9,0,0,8,14,10,0,0,8,14,11,0,0,8,15,1,0,0,8,15,2,0,0,8,15,3,0,0,8,15,4,0,0,8,15,5,0,0,8,15,6,0,0,8,15,7,0,0,8,15,8,0,0,8,15,9,0,0,8,15,10,0,0,8,15,11,0,0,8,16,1,0,0,8,16,2,0,0,8,16,3,0,0,8,16,4,0,0,8,16,5,0,0,8,16,6,0,0,8,16,7,0,0,8,16,8,0,0,8,16,9,0,0,8,16,10,0,0,8,16,11,0,0,8,-8,3,0,0,8,-8,4,0,0,8,-8,5,0,0,8,-8,6,0,0,8,-8,7,0,0,8,-7,3,0,0,8,-7,4,0,0,8,-7,5,0,0,8,-7,6,0,0,8,-7,7,0,0,8,-6,3,0,0,8,-6,4,0,0,8,-6,5,0,0,8,-6,6,0,0,8,-6,7,0,0,8,-5,3,0,0,8,-5,4,0,0,8,-5,5,0,0,8,-5,6,0,0,8,-5,7,0,0,8,-4,3,0,0,8,-4,4,0,0,8,-4,5,0,0,8,-4,6,0,0,8,-4,7,0,0,8,-3,3,0,0,8,-3,4,0,0,8,-3,5,0,0,8,-3,6,0,0,8,-3,7,0,0,8,-2,4,0,0,8,-2,5,0,0,8,-2,6,0,0,8,-2,7,0,0,8,-1,4,0,0,8,-1,5,0,0,8,-1,6,0,0,8,-1,7,0,0,8,0,4,0,0,8,0,5,0,0,8,0,6,0,0,8,0,7,0,0,8,-6,8,0,0,8,-6,9,0,0,8,-6,10,0,0,8,-6,11,0,0,8,-6,12,0,0,8,-6,13,0,0,8,-5,8,0,0,8,-5,9,0,0,8,-5,10,0,0,8,-5,11,0,0,8,-5,12,0,0,8,-5,13,0,0,8,-4,8,0,0,8,-4,9,0,0,8,-4,10,0,0,8,-4,11,0,0,8,-4,12,0,0,8,-4,13,0,0,8,-3,8,0,0,8,-3,9,0,0,8,-3,10,0,0,8,-3,11,0,0,8,-3,12,0,0,8,-3,13,0,0,8,-2,8,0,0,8,-2,9,0,0,8,-2,10,0,0,8,-2,11,0,0,8,-2,12,0,0,8,-2,13,0,0,8,-2,14,0,0,8,-2,15,0,0,8,-2,16,0,0,8,-1,8,0,0,8,-1,12,0,0,8,-1,13,0,0,8,-1,14,0,0,8,-1,15,0,0,8,-1,16,0,0,8,0,8,0,0,8,0,12,0,0,8,0,13,0,0,8,0,14,0,0,8,0,15,0,0,8,0,16,0,0,8,1,12,0,0,8,1,13,0,0,8,1,14,0,0,8,1,15,0,0,8,1,16,0,0,8,0,17,0,0,8,0,18,0,0,8,0,19,0,0,8,0,20,0,0,8,1,17,0,0,8,1,18,0,0,8,1,19,0,0,8,1,20,0,0,8,2,12,0,0,8,2,13,0,0,8,2,14,0,0,8,2,15,0,0,8,2,16,0,0,8,2,17,0,0,8,2,18,0,0,8,2,19,0,0,8,2,20,0,0,8,3,12,0,0,8,3,13,0,0,8,3,14,0,0,8,3,15,0,0,8,3,16,0,0,8,3,17,0,0,8,3,18,0,0,8,3,19,0,0,8,3,20,0,0,8,4,12,0,0,8,4,13,0,0,8,4,14,0,0,8,4,15,0,0,8,4,16,0,0,8,4,17,0,0,8,4,18,0,0,8,4,19,0,0,8,4,20,0,0,8,5,12,0,0,8,5,13,0,0,8,5,14,0,0,8,5,15,0,0,8,5,16,0,0,8,5,17,0,0,8,5,18,0,0,8,5,19,0,0,8,5,20,0,0,8,6,12,0,0,8,6,13,0,0,8,6,14,0,0,8,6,15,0,0,8,6,16,0,0,8,6,17,0,0,8,6,18,0,0,8,6,19,0,0,8,6,20,0,0,8,7,12,0,0,8,7,13,0,0,8,7,14,0,0,8,7,15,0,0,8,7,16,0,0,8,7,17,0,0,8,7,18,0,0,8,7,19,0,0,8,7,20,0,0,8,8,12,0,0,8,8,13,0,0,8,8,14,0,0,8,8,15,0,0,8,8,16,0,0,8,8,17,0,0,8,8,18,0,0,8,8,19,0,0,8,8,20,0,0,8,9,13,0,0,8,9,14,0,0,8,9,15,0,0,8,9,16,0,0,8,9,17,0,0,8,9,18,0,0,8,9,19,0,0,8,9,20,0,0,8,10,13,0,0,8,10,14,0,0,8,10,15,0,0,8,10,16,0,0,8,10,17,0,0,8,10,18,0,0,8,10,19,0,0,8,10,20,0,0,8,11,13,0,0,8,11,14,0,0,8,11,15,0,0,8,11,16,0,0,8,11,17,0,0,8,11,18,0,0,8,11,19,0,0,8,11,20,0,0,8,3,-3,0,0,8,3,-2,0,0,8,3,-1,0,0,8,3,0,0,0,8,4,-3,0,0,8,4,-2,0,0,8,4,-1,0,0,8,4,0,0,0,8,5,-3,0,0,8,5,-2,0,0,8,5,-1,0,0,8,5,0,0,0,8,6,-3,0,0,8,6,-2,0,0,8,6,-1,0,0,8,6,0,0,0,8,7,-3,0,0,8,7,-2,0,0,8,7,-1,0,0,8,7,0,0,0,8,8,-3,0,0,8,8,-2,0,0,8,8,-1,0,0,8,8,0,0,0,8,9,-3,0,0,8,9,-2,0,0,8,9,-1,0,0,8,9,0,0,0,8,10,-2,0,0,8,10,-1,0,0,8,10,0,0,0,8,11,-2,0,0,8,11,-1,0,0,8,11,0,0,0,8,12,-2,0,0,8,12,-1,0,0,8,12,0,0,0,8,13,-2,0,0,8,13,-1,0,0,8,13,0,0,0,8,14,-2,0,0,8,14,-1,0,0,8,14,0,0,0,8,12,12,0,0,8,12,13,0,0,8,12,14,0,0,8,13,12,0,0,8,13,13,0,0,8,13,14,0,0,8,14,12,0,0,8,14,13,0,0,8,14,14,0,0,8,12,15,0,0,8,12,16,0,0,8,13,15,0,0,8,13,16,0,0,8,14,15,0,0,8,14,16,0,0,8,15,14,0,0,8,15,15,0,0,8,15,16,0,0,8,15,12,0,0,8,15,13,0,0,8,16,12,0,0,8,16,13,0,0,8,16,14,0,0,8,16,15,0,0,8,16,16,0,0,8,-9,11,0,0,8,-9,12,0,0,8,-9,13,0,0,8,-9,14,0,0,8,-9,15,0,0,8,-9,16,0,0,8,-9,17,0,0,8,-8,11,0,0,8,-8,12,0,0,8,-8,13,0,0,8,-8,14,0,0,8,-8,15,0,0,8,-8,16,0,0,8,-8,17,0,0,8,-7,11,0,0,8,-7,12,0,0,8,-7,13,0,0,8,-7,14,0,0,8,-7,15,0,0,8,-7,16,0,0,8,-7,17,0,0,8,-6,14,0,0,8,-6,15,0,0,8,-6,16,0,0,8,-6,17,0,0,8,-5,14,0,0,8,-5,15,0,0,8,-5,16,0,0,8,-5,17,0,0,8,-4,14,0,0,8,-4,15,0,0,8,-4,16,0,0,8,-4,17,0,0,8,-3,14,0,0,8,-3,15,0,0,8,-3,16,0,0,8,-3,17,0,0,8,8,-7,0,0,8,8,-6,0,0,8,8,-5,0,0,8,8,-4,0,0,8,9,-7,0,0,8,9,-6,0,0,8,9,-5,0,0,8,9,-4,0,0,8,10,-7,0,0,8,10,-6,0,0,8,10,-5,0,0,8,10,-4,0,0,8,10,-3,0,0,8,11,-7,0,0,8,11,-6,0,0,8,11,-5,0,0,8,11,-4,0,0,8,11,-3,0,0,8,12,-7,0,0,8,12,-6,0,0,8,12,-5,0,0,8,12,-4,0,0,8,12,-3,0,0,8,13,-7,0,0,8,13,-6,0,0,8,13,-5,0,0,8,13,-4,0,0,8,13,-3,0,0,8,14,-7,0,0,8,14,-6,0,0,8,14,-5,0,0,8,14,-4,0,0,8,14,-3,0,0,8,15,-7,0,0,8,15,-6,0,0,8,15,-5,0,0,8,15,-4,0,0,8,15,-3,0,0,8,15,-2,0,0,8,15,-1,0,0,8,15,0,0,0,8],"Middle":[-9,-8,0,2,7,-9,10,0,2,7,-8,-8,0,2,7,-8,10,0,2,7,-7,-8,0,2,7,-7,10,0,3,7,-6,-8,0,2,7,-5,-8,0,2,7,-4,-8,0,2,7,-3,-8,0,2,7,-2,-8,0,2,7,-2,3,0,1,7,-1,-8,0,2,7,-1,3,0,2,7,-1,11,0,1,7,0,-8,0,2,7,0,3,0,3,7,0,11,0,2,7,1,-8,0,2,7,1,11,0,3,7,2,-8,0,2,7,3,-4,0,1,7,4,-4,0,2,7,5,-4,0,2,7,6,-4,0,2,7,7,-4,0,3,7,7,3,0,1,7,8,-8,0,2,7,8,3,0,2,7,9,-8,0,2,7,9,3,0,3,7,9,12,0,1,7,10,-8,0,2,7,10,12,0,2,7,11,-8,0,2,7,11,12,0,3,7,12,-8,0,2,7,13,-8,0,2,7,14,-8,0,2,7,15,-8,0,2,7,16,0,0,1,7],"Top":[-10,-8,0,3,4,-10,-7,0,3,3,-10,-6,0,3,3,-10,-5,0,3,3,-10,-4,0,3,3,-10,-3,0,3,3,-10,-2,0,3,3,-10,-1,0,3,3,-10,0,0,3,3,-10,1,0,3,3,-10,2,0,3,3,-10,3,0,11,2,-10,10,0,3,4,-10,11,0,3,3,-10,12,0,3,3,-10,13,0,3,3,-10,14,0,3,3,-10,15,0,3,3,-10,16,0,3,3,-10,17,0,3,3,-10,18,0,11,2,-9,3,0,3,2,-9,4,0,3,3,-9,5,0,3,3,-9,6,0,3,3,-9,7,0,3,3,-9,8,0,11,2,-9,18,0,2,2,-8,8,0,2,2,-8,18,0,2,2,-7,8,0,3,2,-7,9,0,3,3,-7,18,0,2,2,-6,18,0,2,2,-5,18,0,2,2,-4,18,0,2,2,-3,18,0,2,2,-2,1,0,1,2,-2,2,0,1,3,-2,17,0,1,2,-2,18,0,13,2,-1,1,0,2,2,-1,9,0,1,2,-1,10,0,1,3,-1,17,0,3,2,-1,18,0,3,3,-1,19,0,3,3,-1,20,0,3,3,-1,21,0,11,2,0,1,0,3,2,0,2,0,3,3,0,9,0,2,2,0,21,0,2,2,1,9,0,3,2,1,10,0,3,3,1,21,0,2,2,2,21,0,2,2,3,-8,0,1,4,3,-7,0,1,3,3,-6,0,1,3,3,-5,0,1,3,3,21,0,2,2,4,21,0,2,2,5,21,0,2,2,6,21,0,2,2,7,-8,0,3,4,7,-7,0,3,3,7,-6,0,3,3,7,-5,0,3,3,7,1,0,1,2,7,2,0,1,3,7,21,0,2,2,8,1,0,2,2,8,21,0,2,2,9,1,0,3,2,9,2,0,3,3,9,10,0,1,2,9,11,0,1,3,9,21,0,2,2,10,10,0,2,2,10,21,0,2,2,11,10,0,3,2,11,11,0,3,3,11,21,0,2,2,12,17,0,1,2,12,18,0,1,3,12,19,0,1,3,12,20,0,1,3,12,21,0,13,2,13,17,0,2,2,14,17,0,2,2,15,17,0,2,2,16,-8,0,1,4,16,-7,0,1,3,16,-6,0,1,3,16,-5,0,1,3,16,-4,0,1,3,16,-3,0,1,3,16,-2,0,1,3,16,-1,0,1,3,16,17,0,2,2,17,0,0,1,4,17,1,0,1,3,17,2,0,1,3,17,3,0,1,3,17,4,0,1,3,17,5,0,1,3,17,6,0,1,3,17,7,0,1,3,17,8,0,1,3,17,9,0,1,3,17,10,0,1,3,17,11,0,1,3,17,12,0,1,3,17,13,0,1,3,17,14,0,1,3,17,15,0,1,3,17,16,0,1,3,17,17,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/Preinstall.json
deleted file mode 100644
index c483fbf..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"Preinstall1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":114,"Y":34},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0002","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":76,"Y":-35},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0008","CurrAmmon":"10","ResidueAmmo":"10"},"Altitude":0,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/Preview.png
deleted file mode 100644
index a396f2c..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/Preview.png.import
deleted file mode 100644
index 7d40ed3..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://7rcbxc5erlk2"
-path="res://.godot/imported/Preview.png-8acadee4f0f58814edc8b7c9c800f88c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/battle/Battle6/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-8acadee4f0f58814edc8b7c9c800f88c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/RoomInfo.json
deleted file mode 100644
index 6126ee9..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":-4,"Y":-6},"Size":{"X":23,"Y":18},"DoorAreaInfos":[],"GroupName":"TestGroup1","RoomType":0,"RoomName":"Battle6","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/TileInfo.json
deleted file mode 100644
index 8c5cd7b..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/battle/Battle6/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[-40,-72,280,-72,280,176,-40,176]},{"Type":1,"Points":[168,-16,248,-16,248,40,216,40,216,104,168,104]},{"Type":1,"Points":[24,16,72,16,72,136,-8,136,-8,80,24,80]}],"Floor":[-3,-5,0,0,8,-3,-4,0,0,8,-3,-3,0,0,8,-3,-2,0,0,8,-3,-1,0,0,8,-3,0,0,0,8,-3,1,0,0,8,-3,2,0,0,8,-3,3,0,0,8,-3,4,0,0,8,-3,5,0,0,8,-3,6,0,0,8,-3,7,0,0,8,-3,8,0,0,8,-3,9,0,0,8,-3,10,0,0,8,-2,-5,0,0,8,-2,-4,0,0,8,-2,-3,0,0,8,-2,-2,0,0,8,-2,-1,0,0,8,-2,0,0,0,8,-2,1,0,0,8,-2,2,0,0,8,-2,3,0,0,8,-2,4,0,0,8,-2,5,0,0,8,-2,6,0,0,8,-2,7,0,0,8,-2,8,0,0,8,-2,9,0,0,8,-2,10,0,0,8,-1,-5,0,0,8,-1,-4,0,0,8,-1,-3,0,0,8,-1,-2,0,0,8,-1,-1,0,0,8,-1,0,0,0,8,-1,1,0,0,8,-1,2,0,0,8,-1,3,0,0,8,-1,4,0,0,8,-1,6,0,0,8,-1,7,0,0,8,-1,8,0,0,8,-1,9,0,0,8,-1,10,0,0,8,0,-5,0,0,8,0,-4,0,0,8,0,-3,0,0,8,0,-2,0,0,8,0,-1,0,0,8,0,0,0,0,8,0,1,0,0,8,0,2,0,0,8,0,3,0,0,8,0,4,0,0,8,0,8,0,0,8,0,9,0,0,8,0,10,0,0,8,1,-5,0,0,8,1,-4,0,0,8,1,-3,0,0,8,1,-2,0,0,8,1,-1,0,0,8,1,0,0,0,8,1,1,0,0,8,1,2,0,0,8,1,3,0,0,8,1,4,0,0,8,1,8,0,0,8,1,9,0,0,8,1,10,0,0,8,2,-5,0,0,8,2,-4,0,0,8,2,-3,0,0,8,2,-2,0,0,8,2,-1,0,0,8,2,0,0,0,8,2,8,0,0,8,2,9,0,0,8,2,10,0,0,8,3,-5,0,0,8,3,-4,0,0,8,3,-3,0,0,8,3,-2,0,0,8,3,-1,0,0,8,3,0,0,0,8,3,8,0,0,8,3,9,0,0,8,3,10,0,0,8,4,-5,0,0,8,4,-4,0,0,8,4,-3,0,0,8,4,-2,0,0,8,4,-1,0,0,8,4,0,0,0,8,4,1,0,0,8,4,2,0,0,8,4,3,0,0,8,4,4,0,0,8,4,5,0,0,8,4,6,0,0,8,4,7,0,0,8,4,8,0,0,8,4,9,0,0,8,4,10,0,0,8,5,-5,0,0,8,5,-4,0,0,8,5,-3,0,0,8,5,-2,0,0,8,5,-1,0,0,8,5,0,0,0,8,5,1,0,0,8,5,2,0,0,8,5,3,0,0,8,5,4,0,0,8,5,5,0,0,8,5,6,0,0,8,5,7,0,0,8,5,8,0,0,8,5,9,0,0,8,5,10,0,0,8,6,-5,0,0,8,6,-4,0,0,8,6,-3,0,0,8,6,-2,0,0,8,6,-1,0,0,8,6,0,0,0,8,6,1,0,0,8,6,2,0,0,8,6,3,0,0,8,6,4,0,0,8,6,5,0,0,8,6,6,0,0,8,6,7,0,0,8,6,8,0,0,8,6,9,0,0,8,6,10,0,0,8,7,-5,0,0,8,7,-4,0,0,8,7,-3,0,0,8,7,-2,0,0,8,7,-1,0,0,8,7,0,0,0,8,7,1,0,0,8,7,2,0,0,8,7,3,0,0,8,7,4,0,0,8,7,5,0,0,8,7,6,0,0,8,7,7,0,0,8,7,8,0,0,8,7,9,0,0,8,7,10,0,0,8,8,-5,0,0,8,8,-4,0,0,8,8,-3,0,0,8,8,-2,0,0,8,8,-1,0,0,8,8,0,0,0,8,8,1,0,0,8,8,2,0,0,8,8,3,0,0,8,8,4,0,0,8,8,5,0,0,8,8,6,0,0,8,8,7,0,0,8,8,8,0,0,8,8,9,0,0,8,8,10,0,0,8,9,-5,0,0,8,9,-4,0,0,8,9,-3,0,0,8,9,-2,0,0,8,9,-1,0,0,8,9,0,0,0,8,9,1,0,0,8,9,2,0,0,8,9,3,0,0,8,9,4,0,0,8,9,5,0,0,8,9,6,0,0,8,9,7,0,0,8,9,8,0,0,8,9,9,0,0,8,9,10,0,0,8,10,-5,0,0,8,10,-4,0,0,8,10,-3,0,0,8,10,-2,0,0,8,10,-1,0,0,8,10,0,0,0,8,10,1,0,0,8,10,2,0,0,8,10,3,0,0,8,10,4,0,0,8,10,5,0,0,8,10,6,0,0,8,10,7,0,0,8,10,8,0,0,8,10,9,0,0,8,10,10,0,0,8,11,-5,0,0,8,11,-4,0,0,8,11,-3,0,0,8,11,-2,0,0,8,11,6,0,0,8,11,7,0,0,8,11,8,0,0,8,11,9,0,0,8,11,10,0,0,8,12,-5,0,0,8,12,-4,0,0,8,12,-3,0,0,8,12,-2,0,0,8,12,6,0,0,8,12,7,0,0,8,12,8,0,0,8,12,9,0,0,8,12,10,0,0,8,13,-5,0,0,8,13,-4,0,0,8,13,-3,0,0,8,13,-2,0,0,8,13,2,0,0,8,13,3,0,0,8,13,4,0,0,8,13,5,0,0,8,13,6,0,0,8,13,7,0,0,8,13,8,0,0,8,13,9,0,0,8,13,10,0,0,8,14,-5,0,0,8,14,-4,0,0,8,14,-3,0,0,8,14,-2,0,0,8,14,2,0,0,8,14,3,0,0,8,14,4,0,0,8,14,5,0,0,8,14,6,0,0,8,14,7,0,0,8,14,8,0,0,8,14,9,0,0,8,14,10,0,0,8,15,-5,0,0,8,15,-4,0,0,8,15,-3,0,0,8,15,-2,0,0,8,15,-1,0,0,8,15,0,0,0,8,15,1,0,0,8,15,2,0,0,8,15,3,0,0,8,15,4,0,0,8,15,5,0,0,8,15,6,0,0,8,15,7,0,0,8,15,8,0,0,8,15,9,0,0,8,15,10,0,0,8,16,-5,0,0,8,16,-4,0,0,8,16,-3,0,0,8,16,-2,0,0,8,16,-1,0,0,8,16,0,0,0,8,16,1,0,0,8,16,2,0,0,8,16,3,0,0,8,16,4,0,0,8,16,5,0,0,8,16,6,0,0,8,16,7,0,0,8,16,8,0,0,8,16,9,0,0,8,16,10,0,0,8,17,-5,0,0,8,17,-4,0,0,8,17,-3,0,0,8,17,-2,0,0,8,17,-1,0,0,8,17,0,0,0,8,17,1,0,0,8,17,2,0,0,8,17,3,0,0,8,17,4,0,0,8,17,5,0,0,8,17,6,0,0,8,17,7,0,0,8,17,8,0,0,8,17,9,0,0,8,17,10,0,0,8,-1,5,0,0,8],"Middle":[-3,-6,0,2,7,-2,-6,0,2,7,-1,-6,0,2,7,0,-6,0,2,7,0,7,0,1,7,1,-6,0,2,7,1,7,0,2,7,2,-6,0,2,7,2,7,0,2,7,3,-6,0,2,7,3,7,0,3,7,4,-6,0,2,7,5,-6,0,2,7,6,-6,0,2,7,7,-6,0,2,7,8,-6,0,2,7,9,-6,0,2,7,10,-6,0,2,7,11,-6,0,2,7,11,5,0,1,7,12,-6,0,2,7,12,5,0,3,7,13,-6,0,2,7,13,1,0,2,7,14,-6,0,2,7,14,1,0,3,7,15,-6,0,2,7,16,-6,0,2,7,17,-6,0,2,7],"Top":[-4,-6,0,3,4,-4,-5,0,3,3,-4,-4,0,3,3,-4,-3,0,3,3,-4,-2,0,3,3,-4,-1,0,3,3,-4,0,0,3,3,-4,1,0,3,3,-4,2,0,3,3,-4,3,0,3,3,-4,4,0,3,3,-4,5,0,3,3,-4,6,0,3,3,-4,7,0,3,3,-4,8,0,3,3,-4,9,0,3,3,-4,10,0,3,3,-4,11,0,11,2,-3,11,0,2,2,-2,11,0,2,2,-1,11,0,2,2,0,5,0,1,2,0,6,0,1,3,0,11,0,2,2,1,5,0,2,2,1,11,0,2,2,2,1,0,1,2,2,2,0,1,3,2,3,0,1,3,2,4,0,1,3,2,5,0,13,2,2,11,0,2,2,3,1,0,3,2,3,2,0,3,3,3,3,0,3,3,3,4,0,3,3,3,5,0,3,3,3,6,0,3,3,3,11,0,2,2,4,11,0,2,2,5,11,0,2,2,6,11,0,2,2,7,11,0,2,2,8,11,0,2,2,9,11,0,2,2,10,11,0,2,2,11,-1,0,1,2,11,0,0,1,3,11,1,0,1,3,11,2,0,1,3,11,3,0,1,3,11,4,0,1,3,11,11,0,2,2,12,-1,0,2,2,12,1,0,3,4,12,2,0,3,3,12,3,0,3,3,12,4,0,3,3,12,11,0,2,2,13,-1,0,2,2,13,11,0,2,2,14,-1,0,3,2,14,0,0,3,3,14,11,0,2,2,15,11,0,2,2,16,11,0,2,2,17,11,0,2,2,18,-6,0,1,4,18,-5,0,1,3,18,-4,0,1,3,18,-3,0,1,3,18,-2,0,1,3,18,-1,0,1,3,18,0,0,1,3,18,1,0,1,3,18,2,0,1,3,18,3,0,1,3,18,4,0,1,3,18,5,0,1,3,18,6,0,1,3,18,7,0,1,3,18,8,0,1,3,18,9,0,1,3,18,10,0,1,3,18,11,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json
deleted file mode 100644
index 87b9dd1..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":0,"Y":0},"Size":{"X":14,"Y":16},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":35,"Y":-27},"Size":{"X":30,"Y":12},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":8,"Y":32},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0002","Weight":100,"Attr":{"CurrAmmon":"7","ResidueAmmo":"70"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-50,"Y":7},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0004","Weight":100,"Attr":{"CurrAmmon":"180","ResidueAmmo":"90"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-63,"Y":-18},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0005","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"40"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-31,"Y":-16},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0003","Weight":100,"Attr":{"CurrAmmon":"12","ResidueAmmo":"90"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-54,"Y":33},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0006","Weight":100,"Attr":{"CurrAmmon":"20","ResidueAmmo":"300"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":2,"Y":-25},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0007","Weight":100,"Attr":{"CurrAmmon":"60","ResidueAmmo":"300"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-76,"Y":21},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0008","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"120"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-87,"Y":46},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":34,"Y":-1},"Size":{"X":24,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0011","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":45,"Y":55},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0012","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-90,"Y":-26},"Size":{"X":13,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0013","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-91,"Y":-6},"Size":{"X":14,"Y":13},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0014","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-73,"Y":66},"Size":{"X":14,"Y":14},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop5001","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":72,"Y":62},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":67,"Y":28},"Size":{"X":16,"Y":17},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"prop5000","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":67,"Y":-12},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"prop5001","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":36,"Y":25},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"prop0002","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-24,"Y":8},"Size":{"X":18,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0010","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-20,"Y":34},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0010","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0},{"Id":"prop0006","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png
deleted file mode 100644
index e7bb706..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png.import
deleted file mode 100644
index 74d2d7c..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dwr8eoslvwdu2"
-path="res://.godot/imported/Preview.png-d30d131cfacf4b4842b55e3203acdd42.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-d30d131cfacf4b4842b55e3203acdd42.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/RoomInfo.json
deleted file mode 100644
index 6005b11..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":-8,"Y":-4},"Size":{"X":15,"Y":10},"DoorAreaInfos":[{"Direction":3,"Start":0,"End":208},{"Direction":0,"Start":0,"End":128},{"Direction":2,"Start":128,"End":208},{"Direction":1,"Start":0,"End":128},{"Direction":2,"Start":0,"End":64}],"GroupName":"TestGroup1","RoomType":1,"RoomName":"Start1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/TileInfo.json
deleted file mode 100644
index 68ed08e..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[-104,-40,88,-40,88,80,24,80,24,48,-56,48,-56,80,-104,80]}],"Floor":[-7,-3,0,0,8,-7,-2,0,0,8,-7,-1,0,0,8,-7,0,0,0,8,-7,1,0,0,8,-7,2,0,0,8,-7,3,0,0,8,-7,4,0,0,8,-6,-3,0,0,8,-6,-2,0,0,8,-6,-1,0,0,8,-6,0,0,0,8,-6,1,0,0,8,-6,2,0,0,8,-6,3,0,0,8,-6,4,0,0,8,5,-1,0,0,8,5,0,0,0,8,5,1,0,0,8,5,2,0,0,8,5,3,0,0,8,5,4,0,0,8,5,-2,0,0,8,5,-3,0,0,8,-5,-3,0,0,8,-5,-2,0,0,8,-5,-1,0,0,8,-5,0,0,0,8,-5,1,0,0,8,-5,2,0,0,8,-5,3,0,0,8,-5,4,0,0,8,1,4,0,0,8,1,3,0,0,8,1,2,0,0,8,1,1,0,0,8,1,0,0,0,8,1,-1,0,0,8,1,-2,0,0,8,1,-3,0,0,8,2,4,0,0,8,2,3,0,0,8,2,2,0,0,8,2,1,0,0,8,2,0,0,0,8,2,-1,0,0,8,2,-2,0,0,8,2,-3,0,0,8,3,4,0,0,8,3,3,0,0,8,3,2,0,0,8,3,1,0,0,8,3,0,0,0,8,3,-1,0,0,8,3,-2,0,0,8,3,-3,0,0,8,4,4,0,0,8,4,3,0,0,8,4,2,0,0,8,4,1,0,0,8,4,0,0,0,8,4,-1,0,0,8,4,-2,0,0,8,4,-3,0,0,8,0,2,0,0,8,0,1,0,0,8,0,0,0,0,8,0,-1,0,0,8,0,-2,0,0,8,0,-3,0,0,8,-1,2,0,0,8,-1,1,0,0,8,-1,0,0,0,8,-1,-1,0,0,8,-1,-2,0,0,8,-1,-3,0,0,8,-2,2,0,0,8,-2,1,0,0,8,-2,0,0,0,8,-2,-1,0,0,8,-2,-2,0,0,8,-2,-3,0,0,8,-3,2,0,0,8,-3,1,0,0,8,-3,0,0,0,8,-3,-1,0,0,8,-3,-2,0,0,8,-3,-3,0,0,8,-4,4,0,0,8,-4,3,0,0,8,-4,2,0,0,8,-4,1,0,0,8,-4,0,0,0,8,-4,-1,0,0,8,-4,-2,0,0,8,-4,-3,0,0,8],"Middle":[-7,-4,0,2,7,-6,-4,0,2,7,-5,-4,0,2,7,-4,-4,0,2,7,-3,-4,0,2,7,-2,-4,0,2,7,-1,-4,0,2,7,0,-4,0,2,7,1,-4,0,2,7,2,-4,0,2,7,3,-4,0,2,7,4,-4,0,2,7,5,-4,0,2,7],"Top":[-8,-4,0,3,4,-8,-3,0,3,3,-8,-2,0,3,3,-8,-1,0,3,3,-8,0,0,3,3,-8,1,0,3,3,-8,2,0,3,3,-8,3,0,3,3,-8,4,0,3,3,-8,5,0,11,2,-7,5,0,2,2,-6,5,0,2,2,-5,5,0,2,2,-4,5,0,2,2,-3,3,0,1,2,-3,4,0,1,3,-3,5,0,13,2,-2,3,0,2,2,-1,3,0,2,2,0,3,0,3,2,0,4,0,3,3,0,5,0,11,2,1,5,0,2,2,2,5,0,2,2,3,5,0,2,2,4,5,0,2,2,5,5,0,2,2,6,-4,0,1,4,6,-3,0,1,3,6,-2,0,1,3,6,-1,0,1,3,6,0,0,1,3,6,1,0,1,3,6,2,0,1,3,6,3,0,1,3,6,4,0,1,3,6,5,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preinstall.json
deleted file mode 100644
index b2a4f57..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":0,"Y":0},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":16,"Y":26},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0003","Weight":100,"Attr":{"CurrAmmon":"12","ResidueAmmo":"90"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-16,"Y":25},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":37,"Y":-13},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-11,"Y":-12},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":10,"Y":-39},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-115,"Y":39},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0002","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preview.png
deleted file mode 100644
index 055d7fa..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preview.png.import
deleted file mode 100644
index 68d306b..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cr5tlhxfjetuf"
-path="res://.godot/imported/Preview.png-8fbf34b154290497f5a1f19b421f568c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/inlet/Start2/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-8fbf34b154290497f5a1f19b421f568c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/RoomInfo.json
deleted file mode 100644
index 0370957..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":-11,"Y":-7},"Size":{"X":16,"Y":14},"DoorAreaInfos":[{"Direction":3,"Start":96,"End":224},{"Direction":0,"Start":0,"End":192},{"Direction":1,"Start":0,"End":192},{"Direction":2,"Start":0,"End":144}],"GroupName":"TestGroup1","RoomType":1,"RoomName":"Start2","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/TileInfo.json
deleted file mode 100644
index b37b37a..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[-152,-88,-120,-88,-120,-24,-72,-24,-72,-40,-56,-40,-56,-88,56,-88,56,96,40,96,40,48,-8,48,-8,64,-24,64,-24,96,-152,96]}],"Floor":[-3,-4,0,0,8,-3,-3,0,0,8,-3,-2,0,0,8,-3,-1,0,0,8,-3,0,0,0,8,-3,1,0,0,8,-3,2,0,0,8,-3,3,0,0,8,-3,4,0,0,8,-3,5,0,0,8,-2,-2,0,0,8,-2,-4,0,0,8,-2,-3,0,0,8,-2,-1,0,0,8,-2,0,0,0,8,-2,1,0,0,8,-2,2,0,0,8,-1,-1,0,0,8,-1,-4,0,0,8,-1,-3,0,0,8,-1,-2,0,0,8,-1,0,0,0,8,-1,1,0,0,8,-1,2,0,0,8,0,0,0,0,8,0,-4,0,0,8,0,-3,0,0,8,0,-2,0,0,8,0,-1,0,0,8,0,1,0,0,8,0,2,0,0,8,1,1,0,0,8,1,-4,0,0,8,1,-3,0,0,8,1,-2,0,0,8,1,-1,0,0,8,1,0,0,0,8,1,2,0,0,8,2,1,0,0,8,2,-4,0,0,8,2,-3,0,0,8,2,-2,0,0,8,2,-1,0,0,8,2,0,0,0,8,2,2,0,0,8,2,3,0,0,8,2,4,0,0,8,2,5,0,0,8,-4,-4,0,0,8,-4,-3,0,0,8,-4,-2,0,0,8,-4,-1,0,0,8,-4,0,0,0,8,-4,1,0,0,8,-4,2,0,0,8,-4,3,0,0,8,-4,4,0,0,8,-4,5,0,0,8,3,-4,0,0,8,3,-3,0,0,8,3,-2,0,0,8,3,-1,0,0,8,3,0,0,0,8,3,1,0,0,8,3,2,0,0,8,3,3,0,0,8,3,4,0,0,8,3,5,0,0,8,-9,-4,0,0,8,-9,-3,0,0,8,-9,-2,0,0,8,-9,-1,0,0,8,-9,0,0,0,8,-9,1,0,0,8,-8,-4,0,0,8,-8,-3,0,0,8,-8,-2,0,0,8,-8,-1,0,0,8,-8,0,0,0,8,-10,1,0,0,8,-10,0,0,0,8,-10,-1,0,0,8,-10,-2,0,0,8,-10,-3,0,0,8,-10,-4,0,0,8,-10,-5,0,0,8,-9,-5,0,0,8,-9,-6,0,0,8,-8,-6,0,0,8,-8,-5,0,0,8,-7,-2,0,0,8,-6,-2,0,0,8,-5,-2,0,0,8,-7,-1,0,0,8,-6,-1,0,0,8,-5,-1,0,0,8,-7,0,0,0,8,-6,0,0,0,8,-5,0,0,0,8,-10,-6,0,0,8,-4,-5,0,0,8,-3,-5,0,0,8,-2,-5,0,0,8,-1,-5,0,0,8,0,-5,0,0,8,1,-5,0,0,8,2,-5,0,0,8,3,-5,0,0,8,3,-6,0,0,8,2,-6,0,0,8,1,-6,0,0,8,0,-6,0,0,8,-1,-6,0,0,8,-2,-6,0,0,8,-3,-6,0,0,8,-4,-6,0,0,8,-2,4,0,0,8,-2,3,0,0,8,-2,5,0,0,8,-5,1,0,0,8,-5,2,0,0,8,-5,3,0,0,8,-5,4,0,0,8,-5,5,0,0,8,-6,1,0,0,8,-6,2,0,0,8,-6,3,0,0,8,-6,4,0,0,8,-6,5,0,0,8,-8,1,0,0,8,-8,2,0,0,8,-7,2,0,0,8,-7,3,0,0,8,-7,1,0,0,8,-7,4,0,0,8,-7,5,0,0,8,-8,5,0,0,8,-9,5,0,0,8,-9,4,0,0,8,-10,2,0,0,8,-10,3,0,0,8,-10,4,0,0,8,-10,5,0,0,8,-8,4,0,0,8,-8,3,0,0,8,-9,3,0,0,8,-9,2,0,0,8,-1,3,0,0,8,-5,-3,0,0,8],"Middle":[-10,-7,0,2,7,-9,-7,0,2,7,-8,-7,0,2,7,-7,-3,0,1,7,-6,-3,0,3,7,-5,-4,0,3,7,-4,-7,0,2,7,-3,-7,0,2,7,-2,-7,0,2,7,-1,-7,0,2,7,0,-7,0,2,7,1,-7,0,2,7,2,-7,0,2,7,3,-7,0,2,7],"Top":[-11,-7,0,3,4,-11,-6,0,3,3,-11,-5,0,3,3,-11,-4,0,3,3,-11,-3,0,3,3,-11,-2,0,3,3,-11,-1,0,3,3,-11,0,0,3,3,-11,1,0,3,3,-11,2,0,3,3,-11,3,0,3,3,-11,4,0,3,3,-11,5,0,3,3,-11,6,0,11,2,-10,6,0,2,2,-9,6,0,2,2,-8,6,0,2,2,-7,-7,0,1,4,-7,-6,0,1,3,-7,-5,0,1,3,-7,-4,0,1,3,-7,6,0,2,2,-6,-4,0,3,4,-6,6,0,2,2,-5,-7,0,3,4,-5,-6,0,3,3,-5,-5,0,3,3,-5,6,0,2,2,-4,6,0,2,2,-3,6,0,2,2,-2,6,0,2,2,-1,4,0,1,2,-1,5,0,1,3,-1,6,0,13,2,0,3,0,1,2,0,4,0,13,2,1,3,0,3,2,1,4,0,3,3,1,5,0,3,3,1,6,0,11,2,2,6,0,2,2,3,6,0,2,2,4,-7,0,1,4,4,-6,0,1,3,4,-5,0,1,3,4,-4,0,1,3,4,-3,0,1,3,4,-2,0,1,3,4,-1,0,1,3,4,0,0,1,3,4,1,0,1,3,4,2,0,1,3,4,3,0,1,3,4,4,0,1,3,4,5,0,1,3,4,6,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/Preinstall.json
deleted file mode 100644
index 876f2c4..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":-84,"Y":-46},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":-56,"Y":-72},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0002","Weight":100,"Attr":{"CurrAmmon":"7","ResidueAmmo":"70"},"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":33,"Y":65},"Size":{"X":29,"Y":28},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"-1","Weapon":null},"Altitude":0,"VerticalSpeed":0}]},{"Position":{"X":25,"Y":-16},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0.8,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/Preview.png
deleted file mode 100644
index 6273480..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/Preview.png.import
deleted file mode 100644
index 59dce7f..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://hrny6himu2o8"
-path="res://.godot/imported/Preview.png-36e30cc056284bf63e359cca99f69e15.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/inlet/Start3/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-36e30cc056284bf63e359cca99f69e15.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/RoomInfo.json
deleted file mode 100644
index a5d10e3..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":-8,"Y":-7},"Size":{"X":15,"Y":14},"DoorAreaInfos":[{"Direction":1,"Start":0,"End":96},{"Direction":2,"Start":0,"End":208},{"Direction":0,"Start":0,"End":192},{"Direction":3,"Start":0,"End":208}],"GroupName":"TestGroup1","RoomType":1,"RoomName":"Start3","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/TileInfo.json
deleted file mode 100644
index a354c37..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start3/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[-104,-88,88,-88,88,96,-104,96]},{"Type":1,"Points":[-40,-64,8,-64,8,0,72,0,72,40,-88,40,-88,0,-40,0]}],"Floor":[-7,-6,0,0,8,-7,-5,0,0,8,-7,-4,0,0,8,-7,-3,0,0,8,-7,-2,0,0,8,-7,-1,0,0,8,-7,2,0,0,8,-7,3,0,0,8,-7,4,0,0,8,-7,5,0,0,8,-6,-6,0,0,8,-6,-5,0,0,8,-6,-4,0,0,8,-6,-3,0,0,8,-6,-2,0,0,8,-6,-1,0,0,8,-6,2,0,0,8,-6,3,0,0,8,-6,4,0,0,8,-6,5,0,0,8,-5,-6,0,0,8,-5,-5,0,0,8,-5,-4,0,0,8,-5,-3,0,0,8,-5,-2,0,0,8,-5,-1,0,0,8,-5,2,0,0,8,-5,3,0,0,8,-5,4,0,0,8,-5,5,0,0,8,-4,-6,0,0,8,-4,-5,0,0,8,-4,-4,0,0,8,-4,-3,0,0,8,-4,-2,0,0,8,-4,-1,0,0,8,-4,2,0,0,8,-4,3,0,0,8,-4,4,0,0,8,-4,5,0,0,8,-3,-6,0,0,8,-3,-5,0,0,8,-3,-4,0,0,8,-3,-3,0,0,8,-3,-2,0,0,8,-3,-1,0,0,8,-3,2,0,0,8,-3,3,0,0,8,-3,4,0,0,8,-3,5,0,0,8,-2,-6,0,0,8,-2,-5,0,0,8,-2,2,0,0,8,-2,3,0,0,8,-2,4,0,0,8,-2,5,0,0,8,-1,-6,0,0,8,-1,-5,0,0,8,-1,2,0,0,8,-1,3,0,0,8,-1,4,0,0,8,-1,5,0,0,8,0,-6,0,0,8,0,-5,0,0,8,0,-4,0,0,8,0,-3,0,0,8,0,-2,0,0,8,0,-1,0,0,8,0,2,0,0,8,0,3,0,0,8,0,4,0,0,8,0,5,0,0,8,1,-6,0,0,8,1,-5,0,0,8,1,-4,0,0,8,1,-3,0,0,8,1,-2,0,0,8,1,-1,0,0,8,1,2,0,0,8,1,3,0,0,8,1,4,0,0,8,1,5,0,0,8,2,-6,0,0,8,2,-5,0,0,8,2,-4,0,0,8,2,-3,0,0,8,2,-2,0,0,8,2,-1,0,0,8,2,2,0,0,8,2,3,0,0,8,2,4,0,0,8,2,5,0,0,8,3,-6,0,0,8,3,-5,0,0,8,3,-4,0,0,8,3,-3,0,0,8,3,-2,0,0,8,3,-1,0,0,8,3,2,0,0,8,3,3,0,0,8,3,4,0,0,8,3,5,0,0,8,4,-6,0,0,8,4,-5,0,0,8,4,-4,0,0,8,4,-3,0,0,8,4,-2,0,0,8,4,-1,0,0,8,4,2,0,0,8,4,3,0,0,8,4,4,0,0,8,4,5,0,0,8,5,-6,0,0,8,5,-5,0,0,8,5,-4,0,0,8,5,-3,0,0,8,5,-2,0,0,8,5,-1,0,0,8,5,0,0,0,8,5,1,0,0,8,5,2,0,0,8,5,3,0,0,8,5,4,0,0,8,5,5,0,0,8,4,0,0,0,8,4,1,0,0,8,-7,0,0,0,8,-7,1,0,0,8,-6,1,0,0,8,-6,0,0,0,8],"Middle":[-7,-7,0,2,7,-6,-7,0,2,7,-5,-7,0,2,7,-5,1,0,1,7,-4,-7,0,2,7,-4,1,0,2,7,-3,-7,0,2,7,-3,1,0,2,7,-2,-7,0,2,7,-2,1,0,2,7,-1,-7,0,2,7,-1,1,0,2,7,0,-7,0,2,7,0,1,0,2,7,1,-7,0,2,7,1,1,0,2,7,2,-7,0,2,7,2,1,0,2,7,3,-7,0,2,7,3,1,0,3,7,4,-7,0,2,7,5,-7,0,2,7],"Top":[-8,-7,0,3,4,-8,-6,0,3,3,-8,-5,0,3,3,-8,-4,0,3,3,-8,-3,0,3,3,-8,-2,0,3,3,-8,-1,0,3,3,-8,0,0,3,3,-8,1,0,3,3,-8,2,0,3,3,-8,3,0,3,3,-8,4,0,3,3,-8,5,0,3,3,-8,6,0,11,2,-7,6,0,2,2,-6,6,0,2,2,-5,0,0,1,2,-5,6,0,2,2,-4,0,0,2,2,-4,6,0,2,2,-3,0,0,2,2,-3,6,0,2,2,-2,-4,0,1,2,-2,-3,0,1,3,-2,-2,0,1,3,-2,-1,0,1,3,-2,0,0,13,2,-2,6,0,2,2,-1,-4,0,3,2,-1,-3,0,3,3,-1,-2,0,3,3,-1,-1,0,3,3,-1,0,0,11,2,-1,6,0,2,2,0,0,0,2,2,0,6,0,2,2,1,0,0,2,2,1,6,0,2,2,2,0,0,2,2,2,6,0,2,2,3,0,0,3,2,3,6,0,2,2,4,6,0,2,2,5,6,0,2,2,6,-7,0,1,4,6,-6,0,1,3,6,-5,0,1,3,6,-4,0,1,3,6,-3,0,1,3,6,-2,0,1,3,6,-1,0,1,3,6,0,0,1,3,6,1,0,1,3,6,2,0,1,3,6,3,0,1,3,6,4,0,1,3,6,5,0,1,3,6,6,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/Preinstall.json
deleted file mode 100644
index a239003..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":43,"Y":26},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":43,"Y":49},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/Preview.png
deleted file mode 100644
index 9d9c52d..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/Preview.png.import
deleted file mode 100644
index 95f9d45..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cdwxp0hlmhbg3"
-path="res://.godot/imported/Preview.png-8e06125c0ecec4a197e22dd3de0e8fb1.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/inlet/Start4/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-8e06125c0ecec4a197e22dd3de0e8fb1.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/RoomInfo.json
deleted file mode 100644
index 0d902b3..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":-3,"Y":-3},"Size":{"X":11,"Y":9},"DoorAreaInfos":[],"GroupName":"TestGroup1","RoomType":1,"RoomName":"Start4","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/TileInfo.json
deleted file mode 100644
index 77531b5..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start4/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[-24,-24,104,-24,104,80,-24,80]}],"Floor":[-2,-2,0,0,8,-2,-1,0,0,8,-2,0,0,0,8,-2,1,0,0,8,-2,2,0,0,8,-2,3,0,0,8,-2,4,0,0,8,-1,-2,0,0,8,-1,-1,0,0,8,-1,0,0,0,8,-1,1,0,0,8,-1,2,0,0,8,-1,3,0,0,8,-1,4,0,0,8,0,-2,0,0,8,0,-1,0,0,8,0,0,0,0,8,0,1,0,0,8,0,2,0,0,8,0,3,0,0,8,0,4,0,0,8,1,-2,0,0,8,1,-1,0,0,8,1,0,0,0,8,1,1,0,0,8,1,2,0,0,8,1,3,0,0,8,1,4,0,0,8,2,-2,0,0,8,2,-1,0,0,8,2,0,0,0,8,2,1,0,0,8,2,2,0,0,8,2,3,0,0,8,2,4,0,0,8,3,-2,0,0,8,3,-1,0,0,8,3,0,0,0,8,3,1,0,0,8,3,2,0,0,8,3,3,0,0,8,3,4,0,0,8,4,-2,0,0,8,4,-1,0,0,8,4,0,0,0,8,4,1,0,0,8,4,2,0,0,8,4,3,0,0,8,4,4,0,0,8,5,-2,0,0,8,5,-1,0,0,8,5,0,0,0,8,5,1,0,0,8,5,2,0,0,8,5,3,0,0,8,5,4,0,0,8,6,-2,0,0,8,6,-1,0,0,8,6,0,0,0,8,6,1,0,0,8,6,2,0,0,8,6,3,0,0,8,6,4,0,0,8],"Middle":[-2,-3,0,2,7,-1,-3,0,2,7,0,-3,0,2,7,1,-3,0,2,7,2,-3,0,2,7,3,-3,0,2,7,4,-3,0,2,7,5,-3,0,2,7,6,-3,0,2,7],"Top":[-3,-3,0,3,4,-3,-2,0,3,3,-3,-1,0,3,3,-3,0,0,3,3,-3,1,0,3,3,-3,2,0,3,3,-3,3,0,3,3,-3,4,0,3,3,-3,5,0,11,2,-2,5,0,2,2,-1,5,0,2,2,0,5,0,2,2,1,5,0,2,2,2,5,0,2,2,3,5,0,2,2,4,5,0,2,2,5,5,0,2,2,6,5,0,2,2,7,-3,0,1,4,7,-2,0,1,3,7,-1,0,1,3,7,0,0,1,3,7,1,0,1,3,7,2,0,1,3,7,3,0,1,3,7,4,0,1,3,7,5,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/Preinstall.json
deleted file mode 100644
index 8a3f2d3..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"Preinstall1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":160,"Y":-164},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]}],[{"Position":{"X":160,"Y":-140},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0003","Weight":100,"Attr":{"CurrAmmon":"12","ResidueAmmo":"90"},"Altitude":8,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/Preview.png
deleted file mode 100644
index d0b030f..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/Preview.png.import
deleted file mode 100644
index 35b9abb..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dfknx1exbrlr3"
-path="res://.godot/imported/Preview.png-4ef7f48fbf1f8cdd60e24618c73a0558.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/inlet/Start5/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-4ef7f48fbf1f8cdd60e24618c73a0558.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/RoomInfo.json
deleted file mode 100644
index d9a8221..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":3,"Y":-16},"Size":{"X":14,"Y":12},"DoorAreaInfos":[],"GroupName":"TestGroup1","RoomType":1,"RoomName":"Start5","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/TileInfo.json
deleted file mode 100644
index 6f28ca3..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start5/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[72,-232,248,-232,248,-80,72,-80]}],"Floor":[4,-15,0,0,8,4,-14,0,0,8,4,-13,0,0,8,4,-12,0,0,8,4,-11,0,0,8,4,-10,0,0,8,4,-9,0,0,8,4,-8,0,0,8,4,-7,0,0,8,4,-6,0,0,8,5,-15,0,0,8,5,-14,0,0,8,5,-13,0,0,8,5,-12,0,0,8,5,-11,0,0,8,5,-10,0,0,8,5,-9,0,0,8,5,-8,0,0,8,5,-7,0,0,8,5,-6,0,0,8,6,-15,0,0,8,6,-14,0,0,8,6,-13,0,0,8,6,-12,0,0,8,6,-11,0,0,8,6,-10,0,0,8,6,-9,0,0,8,6,-8,0,0,8,6,-7,0,0,8,6,-6,0,0,8,7,-15,0,0,8,7,-14,0,0,8,7,-13,0,0,8,7,-12,0,0,8,7,-11,0,0,8,7,-10,0,0,8,7,-9,0,0,8,7,-8,0,0,8,7,-7,0,0,8,7,-6,0,0,8,8,-15,0,0,8,8,-14,0,0,8,8,-13,0,0,8,8,-12,0,0,8,8,-11,0,0,8,8,-10,0,0,8,8,-9,0,0,8,8,-8,0,0,8,8,-7,0,0,8,8,-6,0,0,8,9,-15,0,0,8,9,-14,0,0,8,9,-13,0,0,8,9,-12,0,0,8,9,-11,0,0,8,9,-10,0,0,8,9,-9,0,0,8,9,-8,0,0,8,9,-7,0,0,8,9,-6,0,0,8,10,-15,0,0,8,10,-14,0,0,8,10,-13,0,0,8,10,-12,0,0,8,10,-11,0,0,8,10,-10,0,0,8,10,-9,0,0,8,10,-8,0,0,8,10,-7,0,0,8,10,-6,0,0,8,11,-15,0,0,8,11,-14,0,0,8,11,-13,0,0,8,11,-12,0,0,8,11,-11,0,0,8,11,-10,0,0,8,11,-9,0,0,8,11,-8,0,0,8,11,-7,0,0,8,11,-6,0,0,8,12,-15,0,0,8,12,-14,0,0,8,12,-13,0,0,8,12,-12,0,0,8,12,-11,0,0,8,12,-10,0,0,8,12,-9,0,0,8,12,-8,0,0,8,12,-7,0,0,8,12,-6,0,0,8,13,-15,0,0,8,13,-14,0,0,8,13,-13,0,0,8,13,-12,0,0,8,13,-11,0,0,8,13,-10,0,0,8,13,-9,0,0,8,13,-8,0,0,8,13,-7,0,0,8,13,-6,0,0,8,14,-15,0,0,8,14,-14,0,0,8,14,-13,0,0,8,14,-12,0,0,8,14,-11,0,0,8,14,-10,0,0,8,14,-9,0,0,8,14,-8,0,0,8,14,-7,0,0,8,14,-6,0,0,8,15,-15,0,0,8,15,-14,0,0,8,15,-13,0,0,8,15,-12,0,0,8,15,-11,0,0,8,15,-10,0,0,8,15,-9,0,0,8,15,-8,0,0,8,15,-7,0,0,8,15,-6,0,0,8],"Middle":[4,-16,0,2,7,5,-16,0,2,7,6,-16,0,2,7,7,-16,0,2,7,8,-16,0,2,7,9,-16,0,2,7,10,-16,0,2,7,11,-16,0,2,7,12,-16,0,2,7,13,-16,0,2,7,14,-16,0,2,7,15,-16,0,2,7],"Top":[3,-16,0,3,4,3,-15,0,3,3,3,-14,0,3,3,3,-13,0,3,3,3,-12,0,3,3,3,-11,0,3,3,3,-10,0,3,3,3,-9,0,3,3,3,-8,0,3,3,3,-7,0,3,3,3,-6,0,3,3,3,-5,0,11,2,4,-5,0,2,2,5,-5,0,2,2,6,-5,0,2,2,7,-5,0,2,2,8,-5,0,2,2,9,-5,0,2,2,10,-5,0,2,2,11,-5,0,2,2,12,-5,0,2,2,13,-5,0,2,2,14,-5,0,2,2,15,-5,0,2,2,16,-16,0,1,4,16,-15,0,1,3,16,-14,0,1,3,16,-13,0,1,3,16,-12,0,1,3,16,-11,0,1,3,16,-10,0,1,3,16,-9,0,1,3,16,-8,0,1,3,16,-7,0,1,3,16,-6,0,1,3,16,-5,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/Preinstall.json
deleted file mode 100644
index d4d67e3..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/Preinstall.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":11,"Y":28},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}]]},{"Name":"test2","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":-54,"Y":95},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0005","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"40"},"Altitude":8,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/Preview.png
deleted file mode 100644
index 81b14c4..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/Preview.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/Preview.png.import b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/Preview.png.import
deleted file mode 100644
index d756672..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/Preview.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bi3cl40jqw1bq"
-path="res://.godot/imported/Preview.png-de99484c552e8633c08889ca0fe2fe8e.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileMaps/TestGroup1/outlet/End1/Preview.png"
-dest_files=["res://.godot/imported/Preview.png-de99484c552e8633c08889ca0fe2fe8e.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/RoomInfo.json
deleted file mode 100644
index ba808d1..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/RoomInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Position":{"X":-6,"Y":-4},"Size":{"X":15,"Y":12},"DoorAreaInfos":[],"GroupName":"TestGroup1","RoomType":2,"RoomName":"End1","Weight":100,"Remark":""}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/TileInfo.json
deleted file mode 100644
index 148a844..0000000
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/outlet/End1/TileInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"NavigationList":[{"Type":0,"Points":[-72,-40,120,-40,120,112,-72,112]}],"Floor":[-5,-3,0,0,8,-5,-2,0,0,8,-5,-1,0,0,8,-5,0,0,0,8,-5,1,0,0,8,-5,2,0,0,8,-5,3,0,0,8,-5,4,0,0,8,-5,5,0,0,8,-5,6,0,0,8,-4,-3,0,0,8,-4,-2,0,0,8,-4,-1,0,0,8,-4,0,0,0,8,-4,1,0,0,8,-4,2,0,0,8,-4,3,0,0,8,-4,4,0,0,8,-4,5,0,0,8,-4,6,0,0,8,-3,-3,0,0,8,-3,-2,0,0,8,-3,-1,0,0,8,-3,0,0,0,8,-3,1,0,0,8,-3,2,0,0,8,-3,3,0,0,8,-3,4,0,0,8,-3,5,0,0,8,-3,6,0,0,8,-2,-3,0,0,8,-2,-2,0,0,8,-2,-1,0,0,8,-2,0,0,0,8,-2,1,0,0,8,-2,2,0,0,8,-2,3,0,0,8,-2,4,0,0,8,-2,5,0,0,8,-2,6,0,0,8,-1,-3,0,0,8,-1,-2,0,0,8,-1,-1,0,0,8,-1,0,0,0,8,-1,1,0,0,8,-1,2,0,0,8,-1,3,0,0,8,-1,4,0,0,8,-1,5,0,0,8,-1,6,0,0,8,0,-3,0,0,8,0,-2,0,0,8,0,-1,0,0,8,0,0,0,0,8,0,1,0,0,8,0,2,0,0,8,0,3,0,0,8,0,4,0,0,8,0,5,0,0,8,0,6,0,0,8,1,-3,0,0,8,1,-2,0,0,8,1,-1,0,0,8,1,0,0,0,8,1,1,0,0,8,1,2,0,0,8,1,3,0,0,8,1,4,0,0,8,1,5,0,0,8,1,6,0,0,8,2,-3,0,0,8,2,-2,0,0,8,2,-1,0,0,8,2,0,0,0,8,2,1,0,0,8,2,2,0,0,8,2,3,0,0,8,2,4,0,0,8,2,5,0,0,8,2,6,0,0,8,3,-3,0,0,8,3,-2,0,0,8,3,-1,0,0,8,3,0,0,0,8,3,1,0,0,8,3,2,0,0,8,3,3,0,0,8,3,4,0,0,8,3,5,0,0,8,3,6,0,0,8,4,-3,0,0,8,4,-2,0,0,8,4,-1,0,0,8,4,0,0,0,8,4,1,0,0,8,4,2,0,0,8,4,3,0,0,8,4,4,0,0,8,4,5,0,0,8,4,6,0,0,8,5,-3,0,0,8,5,-2,0,0,8,5,-1,0,0,8,5,0,0,0,8,5,1,0,0,8,5,2,0,0,8,5,3,0,0,8,5,4,0,0,8,5,5,0,0,8,5,6,0,0,8,6,-3,0,0,8,6,-2,0,0,8,6,-1,0,0,8,6,0,0,0,8,6,1,0,0,8,6,2,0,0,8,6,3,0,0,8,6,4,0,0,8,6,5,0,0,8,6,6,0,0,8,7,-3,0,0,8,7,-2,0,0,8,7,-1,0,0,8,7,0,0,0,8,7,1,0,0,8,7,2,0,0,8,7,3,0,0,8,7,4,0,0,8,7,5,0,0,8,7,6,0,0,8],"Middle":[-5,-4,0,2,7,-4,-4,0,2,7,-3,-4,0,2,7,-2,-4,0,2,7,-1,-4,0,2,7,0,-4,0,2,7,1,-4,0,2,7,2,-4,0,2,7,3,-4,0,2,7,4,-4,0,2,7,5,-4,0,2,7,6,-4,0,2,7,7,-4,0,2,7],"Top":[-6,-4,0,3,4,-6,-3,0,3,3,-6,-2,0,3,3,-6,-1,0,3,3,-6,0,0,3,3,-6,1,0,3,3,-6,2,0,3,3,-6,3,0,3,3,-6,4,0,3,3,-6,5,0,3,3,-6,6,0,3,3,-6,7,0,11,2,-5,7,0,2,2,-4,7,0,2,2,-3,7,0,2,2,-2,7,0,2,2,-1,7,0,2,2,0,7,0,2,2,1,7,0,2,2,2,7,0,2,2,3,7,0,2,2,4,7,0,2,2,5,7,0,2,2,6,7,0,2,2,7,7,0,2,2,8,-4,0,1,4,8,-3,0,1,3,8,-2,0,1,3,8,-1,0,1,3,8,0,0,1,3,8,1,0,1,3,8,2,0,1,3,8,3,0,1,3,8,4,0,1,3,8,5,0,1,3,8,6,0,1,3,8,7,0,13,2]}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png
new file mode 100644
index 0000000..193d030
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png.import b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png.import
new file mode 100644
index 0000000..f1a115c
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://betgai078na4v"
+path="res://.godot/imported/Main.png-23d95873487ad9e6bd6e2fd01911f2e2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileSet/TileSet1/Main.png"
+dest_files=["res://.godot/imported/Main.png-23d95873487ad9e6bd6e2fd01911f2e2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png
new file mode 100644
index 0000000..45a766d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png.import b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png.import
new file mode 100644
index 0000000..07c2242
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cq56j2rxoghq4"
+path="res://.godot/imported/Test1.png-116dc7985045e1cdc2a9599a74b4b18e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileSet/TileSet1/Test1.png"
+dest_files=["res://.godot/imported/Test1.png-116dc7985045e1cdc2a9599a74b4b18e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test2.png b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test2.png
new file mode 100644
index 0000000..78244d5
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test2.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test2.png.import b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test2.png.import
new file mode 100644
index 0000000..d245cfd
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ca000afypubil"
+path="res://.godot/imported/Test2.png-b301e28325d77d91724d44e1372b62e5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileSet/TileSet1/Test2.png"
+dest_files=["res://.godot/imported/Test2.png-b301e28325d77d91724d44e1372b62e5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test3.png b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test3.png
new file mode 100644
index 0000000..c3cbdb1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test3.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test3.png.import b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test3.png.import
new file mode 100644
index 0000000..09c92c1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test3.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c8dljk1dbo45l"
+path="res://.godot/imported/Test3.png-c2f29114ce951ed85e4d92b58dbb0d74.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileSet/TileSet1/Test3.png"
+dest_files=["res://.godot/imported/Test3.png-c2f29114ce951ed85e4d92b58dbb0d74.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json
new file mode 100644
index 0000000..b8042c2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json
@@ -0,0 +1,1084 @@
+{
+ "Name": "TileSet1",
+ "Sources": [
+ {
+ "Name": "Main",
+ "SourcePath": "resource/map/tileSet/TileSet1/Main.png",
+ "Terrain": [
+ {
+ "Name": "Main",
+ "F": {
+ "0": [
+ 0,
+ 64
+ ]
+ },
+ "M": {
+ "1": [
+ 16,
+ 64
+ ],
+ "2": [
+ 32,
+ 64
+ ],
+ "3": [
+ 48,
+ 64
+ ],
+ "0": [
+ 64,
+ 64
+ ],
+ "5": [
+ 16,
+ 80
+ ],
+ "6": [
+ 32,
+ 80
+ ],
+ "7": [
+ 48,
+ 80
+ ],
+ "4": [
+ 64,
+ 80
+ ]
+ },
+ "T": {
+ "144": [
+ 0,
+ 0
+ ],
+ "216": [
+ 176,
+ 0
+ ],
+ "27": [
+ 176,
+ 48
+ ],
+ "146": [
+ 0,
+ 16
+ ],
+ "18": [
+ 0,
+ 32
+ ],
+ "16": [
+ 0,
+ 48
+ ],
+ "48": [
+ 16,
+ 48
+ ],
+ "56": [
+ 32,
+ 48
+ ],
+ "24": [
+ 48,
+ 48
+ ],
+ "250": [
+ 64,
+ 48
+ ],
+ "62": [
+ 80,
+ 48
+ ],
+ "59": [
+ 96,
+ 48
+ ],
+ "442": [
+ 112,
+ 48
+ ],
+ "54": [
+ 128,
+ 48
+ ],
+ "63": [
+ 144,
+ 48
+ ],
+ "191": [
+ 160,
+ 48
+ ],
+ "219": [
+ 176,
+ 32
+ ],
+ "251": [
+ 176,
+ 16
+ ],
+ "504": [
+ 160,
+ 0
+ ],
+ "506": [
+ 144,
+ 0
+ ],
+ "432": [
+ 128,
+ 0
+ ],
+ "438": [
+ 128,
+ 16
+ ],
+ "446": [
+ 128,
+ 32
+ ],
+ "443": [
+ 144,
+ 16
+ ],
+ "511": [
+ 144,
+ 32
+ ],
+ "254": [
+ 160,
+ 32
+ ],
+ "190": [
+ 112,
+ 0
+ ],
+ "218": [
+ 112,
+ 16
+ ],
+ "155": [
+ 112,
+ 32
+ ],
+ "255": [
+ 96,
+ 32
+ ],
+ "447": [
+ 80,
+ 32
+ ],
+ "510": [
+ 80,
+ 16
+ ],
+ "507": [
+ 96,
+ 16
+ ],
+ "248": [
+ 96,
+ 0
+ ],
+ "440": [
+ 80,
+ 0
+ ],
+ "187": [
+ 64,
+ 0
+ ],
+ "434": [
+ 64,
+ 16
+ ],
+ "182": [
+ 64,
+ 32
+ ],
+ "176": [
+ 16,
+ 0
+ ],
+ "178": [
+ 16,
+ 16
+ ],
+ "50": [
+ 16,
+ 32
+ ],
+ "58": [
+ 32,
+ 32
+ ],
+ "26": [
+ 48,
+ 32
+ ],
+ "184": [
+ 32,
+ 0
+ ],
+ "152": [
+ 48,
+ 0
+ ],
+ "154": [
+ 48,
+ 16
+ ],
+ "186": [
+ 32,
+ 16
+ ]
+ },
+ "TerrainType": 0,
+ "Ready": true
+ },
+ {
+ "Name": "Test1",
+ "F": {},
+ "M": {},
+ "T": {},
+ "TerrainType": 1,
+ "Ready": false
+ }
+ ],
+ "Combination": []
+ },
+ {
+ "Name": "Test1",
+ "SourcePath": "resource/map/tileSet/TileSet1/Test1.png",
+ "Terrain": [],
+ "Combination": [
+ {
+ "Id": "638411075459225723",
+ "Name": "\u7EC4\u5408",
+ "Cells": [
+ {
+ "X": 80,
+ "Y": 80
+ },
+ {
+ "X": 80,
+ "Y": 96
+ }
+ ],
+ "Positions": [
+ {
+ "X": 0,
+ "Y": 0
+ },
+ {
+ "X": 0,
+ "Y": 16
+ }
+ ]
+ },
+ {
+ "Id": "638411075513293604",
+ "Name": "\u7EC4\u5408",
+ "Cells": [
+ {
+ "X": 160,
+ "Y": 80
+ },
+ {
+ "X": 160,
+ "Y": 96
+ }
+ ],
+ "Positions": [
+ {
+ "X": 0,
+ "Y": 0
+ },
+ {
+ "X": 0,
+ "Y": 16
+ }
+ ]
+ },
+ {
+ "Id": "638411075593121170",
+ "Name": "\u7EC4\u5408",
+ "Cells": [
+ {
+ "X": 288,
+ "Y": 192
+ },
+ {
+ "X": 304,
+ "Y": 192
+ },
+ {
+ "X": 304,
+ "Y": 176
+ },
+ {
+ "X": 288,
+ "Y": 176
+ }
+ ],
+ "Positions": [
+ {
+ "X": 0,
+ "Y": 16
+ },
+ {
+ "X": 16,
+ "Y": 16
+ },
+ {
+ "X": 16,
+ "Y": 0
+ },
+ {
+ "X": 0,
+ "Y": 0
+ }
+ ]
+ },
+ {
+ "Id": "638411075650242118",
+ "Name": "\u7EC4\u5408",
+ "Cells": [
+ {
+ "X": 96,
+ "Y": 224
+ },
+ {
+ "X": 112,
+ "Y": 224
+ },
+ {
+ "X": 128,
+ "Y": 224
+ },
+ {
+ "X": 128,
+ "Y": 240
+ },
+ {
+ "X": 112,
+ "Y": 240
+ },
+ {
+ "X": 96,
+ "Y": 240
+ }
+ ],
+ "Positions": [
+ {
+ "X": 0,
+ "Y": 0
+ },
+ {
+ "X": 16,
+ "Y": 0
+ },
+ {
+ "X": 32,
+ "Y": 0
+ },
+ {
+ "X": 32,
+ "Y": 16
+ },
+ {
+ "X": 16,
+ "Y": 16
+ },
+ {
+ "X": 0,
+ "Y": 16
+ }
+ ]
+ },
+ {
+ "Id": "638411075701755677",
+ "Name": "\u7EC4\u5408",
+ "Cells": [
+ {
+ "X": 192,
+ "Y": 208
+ },
+ {
+ "X": 192,
+ "Y": 224
+ }
+ ],
+ "Positions": [
+ {
+ "X": 0,
+ "Y": 0
+ },
+ {
+ "X": 0,
+ "Y": 16
+ }
+ ]
+ },
+ {
+ "Id": "638411075748707154",
+ "Name": "\u7EC4\u5408",
+ "Cells": [
+ {
+ "X": 240,
+ "Y": 208
+ },
+ {
+ "X": 256,
+ "Y": 208
+ },
+ {
+ "X": 256,
+ "Y": 224
+ },
+ {
+ "X": 240,
+ "Y": 224
+ }
+ ],
+ "Positions": [
+ {
+ "X": 0,
+ "Y": 0
+ },
+ {
+ "X": 16,
+ "Y": 0
+ },
+ {
+ "X": 16,
+ "Y": 16
+ },
+ {
+ "X": 0,
+ "Y": 16
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Name": "Test2",
+ "SourcePath": "resource/map/tileSet/TileSet1/Test2.png",
+ "Terrain": [
+ {
+ "Name": "Terrain1",
+ "F": {},
+ "M": {},
+ "T": {
+ "272": [
+ 16,
+ 96
+ ],
+ "336": [
+ 32,
+ 96
+ ],
+ "80": [
+ 48,
+ 96
+ ],
+ "341": [
+ 32,
+ 112
+ ],
+ "276": [
+ 16,
+ 112
+ ],
+ "81": [
+ 48,
+ 112
+ ],
+ "20": [
+ 16,
+ 128
+ ],
+ "21": [
+ 32,
+ 128
+ ],
+ "17": [
+ 48,
+ 128
+ ],
+ "85": [
+ 64,
+ 128
+ ],
+ "277": [
+ 80,
+ 128
+ ],
+ "337": [
+ 64,
+ 144
+ ],
+ "340": [
+ 80,
+ 144
+ ]
+ },
+ "TerrainType": 1,
+ "Ready": true
+ },
+ {
+ "Name": "T2",
+ "F": {},
+ "M": {},
+ "T": {
+ "504": [
+ 128,
+ 16
+ ],
+ "216": [
+ 144,
+ 16
+ ],
+ "438": [
+ 112,
+ 32
+ ],
+ "432": [
+ 112,
+ 16
+ ],
+ "511": [
+ 128,
+ 32
+ ],
+ "54": [
+ 112,
+ 48
+ ],
+ "63": [
+ 128,
+ 48
+ ],
+ "27": [
+ 144,
+ 48
+ ],
+ "219": [
+ 144,
+ 32
+ ]
+ },
+ "TerrainType": 0,
+ "Ready": false
+ }
+ ],
+ "Combination": [
+ {
+ "Id": "638411400212509936",
+ "Name": "\u7EC4\u5408",
+ "Cells": [
+ {
+ "X": 16,
+ "Y": 96
+ },
+ {
+ "X": 16,
+ "Y": 112
+ },
+ {
+ "X": 16,
+ "Y": 112
+ },
+ {
+ "X": 32,
+ "Y": 112
+ },
+ {
+ "X": 64,
+ "Y": 144
+ },
+ {
+ "X": 48,
+ "Y": 112
+ },
+ {
+ "X": 48,
+ "Y": 96
+ },
+ {
+ "X": 32,
+ "Y": 96
+ },
+ {
+ "X": 32,
+ "Y": 112
+ },
+ {
+ "X": 16,
+ "Y": 112
+ },
+ {
+ "X": 16,
+ "Y": 128
+ },
+ {
+ "X": 32,
+ "Y": 128
+ },
+ {
+ "X": 32,
+ "Y": 112
+ },
+ {
+ "X": 32,
+ "Y": 112
+ },
+ {
+ "X": 32,
+ "Y": 112
+ },
+ {
+ "X": 32,
+ "Y": 96
+ },
+ {
+ "X": 32,
+ "Y": 96
+ },
+ {
+ "X": 32,
+ "Y": 112
+ },
+ {
+ "X": 32,
+ "Y": 112
+ },
+ {
+ "X": 32,
+ "Y": 96
+ },
+ {
+ "X": 16,
+ "Y": 96
+ },
+ {
+ "X": 16,
+ "Y": 112
+ },
+ {
+ "X": 16,
+ "Y": 112
+ },
+ {
+ "X": 80,
+ "Y": 144
+ },
+ {
+ "X": 32,
+ "Y": 112
+ },
+ {
+ "X": 32,
+ "Y": 128
+ },
+ {
+ "X": 32,
+ "Y": 128
+ },
+ {
+ "X": 32,
+ "Y": 128
+ },
+ {
+ "X": 32,
+ "Y": 128
+ },
+ {
+ "X": 32,
+ "Y": 128
+ },
+ {
+ "X": 48,
+ "Y": 128
+ },
+ {
+ "X": 48,
+ "Y": 112
+ },
+ {
+ "X": 48,
+ "Y": 112
+ },
+ {
+ "X": 48,
+ "Y": 112
+ },
+ {
+ "X": 48,
+ "Y": 112
+ },
+ {
+ "X": 48,
+ "Y": 96
+ }
+ ],
+ "Positions": [
+ {
+ "X": 0,
+ "Y": 16
+ },
+ {
+ "X": 0,
+ "Y": 32
+ },
+ {
+ "X": 0,
+ "Y": 48
+ },
+ {
+ "X": 16,
+ "Y": 48
+ },
+ {
+ "X": 32,
+ "Y": 48
+ },
+ {
+ "X": 32,
+ "Y": 32
+ },
+ {
+ "X": 32,
+ "Y": 16
+ },
+ {
+ "X": 16,
+ "Y": 16
+ },
+ {
+ "X": 16,
+ "Y": 32
+ },
+ {
+ "X": 0,
+ "Y": 64
+ },
+ {
+ "X": 0,
+ "Y": 80
+ },
+ {
+ "X": 16,
+ "Y": 80
+ },
+ {
+ "X": 16,
+ "Y": 64
+ },
+ {
+ "X": 32,
+ "Y": 64
+ },
+ {
+ "X": 48,
+ "Y": 64
+ },
+ {
+ "X": 48,
+ "Y": 48
+ },
+ {
+ "X": 64,
+ "Y": 48
+ },
+ {
+ "X": 64,
+ "Y": 64
+ },
+ {
+ "X": 80,
+ "Y": 64
+ },
+ {
+ "X": 80,
+ "Y": 48
+ },
+ {
+ "X": 96,
+ "Y": 0
+ },
+ {
+ "X": 96,
+ "Y": 16
+ },
+ {
+ "X": 96,
+ "Y": 32
+ },
+ {
+ "X": 96,
+ "Y": 48
+ },
+ {
+ "X": 96,
+ "Y": 64
+ },
+ {
+ "X": 32,
+ "Y": 80
+ },
+ {
+ "X": 48,
+ "Y": 80
+ },
+ {
+ "X": 64,
+ "Y": 80
+ },
+ {
+ "X": 80,
+ "Y": 80
+ },
+ {
+ "X": 96,
+ "Y": 80
+ },
+ {
+ "X": 112,
+ "Y": 80
+ },
+ {
+ "X": 112,
+ "Y": 48
+ },
+ {
+ "X": 112,
+ "Y": 64
+ },
+ {
+ "X": 112,
+ "Y": 32
+ },
+ {
+ "X": 112,
+ "Y": 16
+ },
+ {
+ "X": 112,
+ "Y": 0
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Name": "Test3",
+ "SourcePath": "resource/map/tileSet/TileSet1/Test3.png",
+ "Terrain": [
+ {
+ "Name": "T1",
+ "F": {},
+ "M": {},
+ "T": {
+ "144": [
+ 0,
+ 0
+ ],
+ "146": [
+ 0,
+ 16
+ ],
+ "18": [
+ 0,
+ 32
+ ],
+ "176": [
+ 16,
+ 0
+ ],
+ "184": [
+ 32,
+ 0
+ ],
+ "152": [
+ 48,
+ 0
+ ],
+ "178": [
+ 16,
+ 16
+ ],
+ "186": [
+ 32,
+ 16
+ ],
+ "154": [
+ 48,
+ 16
+ ],
+ "50": [
+ 16,
+ 32
+ ],
+ "58": [
+ 32,
+ 32
+ ],
+ "26": [
+ 48,
+ 32
+ ],
+ "16": [
+ 0,
+ 48
+ ],
+ "48": [
+ 16,
+ 48
+ ],
+ "56": [
+ 32,
+ 48
+ ],
+ "24": [
+ 48,
+ 48
+ ],
+ "187": [
+ 64,
+ 0
+ ],
+ "434": [
+ 64,
+ 16
+ ],
+ "182": [
+ 64,
+ 32
+ ],
+ "250": [
+ 64,
+ 48
+ ],
+ "440": [
+ 80,
+ 0
+ ],
+ "510": [
+ 80,
+ 16
+ ],
+ "447": [
+ 80,
+ 32
+ ],
+ "62": [
+ 80,
+ 48
+ ],
+ "248": [
+ 96,
+ 0
+ ],
+ "190": [
+ 112,
+ 0
+ ],
+ "507": [
+ 96,
+ 16
+ ],
+ "218": [
+ 112,
+ 16
+ ],
+ "255": [
+ 96,
+ 32
+ ],
+ "155": [
+ 112,
+ 32
+ ],
+ "59": [
+ 96,
+ 48
+ ],
+ "442": [
+ 112,
+ 48
+ ],
+ "432": [
+ 128,
+ 0
+ ],
+ "506": [
+ 144,
+ 0
+ ],
+ "504": [
+ 160,
+ 0
+ ],
+ "216": [
+ 176,
+ 0
+ ],
+ "438": [
+ 128,
+ 16
+ ],
+ "443": [
+ 144,
+ 16
+ ],
+ "254": [
+ 160,
+ 32
+ ],
+ "511": [
+ 144,
+ 32
+ ],
+ "446": [
+ 128,
+ 32
+ ],
+ "54": [
+ 128,
+ 48
+ ],
+ "63": [
+ 144,
+ 48
+ ],
+ "191": [
+ 160,
+ 48
+ ],
+ "27": [
+ 176,
+ 48
+ ],
+ "219": [
+ 176,
+ 32
+ ],
+ "251": [
+ 176,
+ 16
+ ]
+ },
+ "TerrainType": 0,
+ "Ready": true
+ }
+ ],
+ "Combination": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Main.png b/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Main.png
new file mode 100644
index 0000000..d74eba2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Main.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Main.png.import b/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Main.png.import
new file mode 100644
index 0000000..be7dd76
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Main.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c6pesrr162s6"
+path="res://.godot/imported/Main.png-d5a6dac6cf1a2b2af633c597ddadfe73.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileSet/TileSet2/Main.png"
+dest_files=["res://.godot/imported/Main.png-d5a6dac6cf1a2b2af633c597ddadfe73.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Test2.png b/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Test2.png
new file mode 100644
index 0000000..cb64efb
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Test2.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Test2.png.import b/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Test2.png.import
new file mode 100644
index 0000000..2dd9ddc
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet2/Test2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dslcjy284qx53"
+path="res://.godot/imported/Test2.png-427a8c43a36ea928d410624045881fbb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/map/tileSet/TileSet2/Test2.png"
+dest_files=["res://.godot/imported/Test2.png-427a8c43a36ea928d410624045881fbb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet2/TileSet.json b/DungeonShooting_Godot/resource/map/tileSet/TileSet2/TileSet.json
new file mode 100644
index 0000000..dfcd90e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet2/TileSet.json
@@ -0,0 +1,618 @@
+{
+ "Name": "TileSet2",
+ "Sources": [
+ {
+ "Name": "Main",
+ "SourcePath": "resource/map/tileSet/TileSet2/Main.png",
+ "Terrain": [
+ {
+ "Name": "Main",
+ "F": {
+ "0": [
+ 16,
+ 144
+ ]
+ },
+ "M": {
+ "3": [
+ 160,
+ 112
+ ],
+ "2": [
+ 80,
+ 112
+ ],
+ "1": [
+ 64,
+ 112
+ ],
+ "0": [
+ 0,
+ 112
+ ]
+ },
+ "T": {
+ "144": [
+ 0,
+ 32
+ ],
+ "146": [
+ 0,
+ 48
+ ],
+ "434": [
+ 80,
+ 96
+ ],
+ "18": [
+ 0,
+ 96
+ ],
+ "219": [
+ 160,
+ 80
+ ],
+ "438": [
+ 64,
+ 80
+ ],
+ "63": [
+ 96,
+ 96
+ ],
+ "504": [
+ 112,
+ 0
+ ],
+ "506": [
+ 192,
+ 32
+ ],
+ "16": [
+ 0,
+ 0
+ ],
+ "48": [
+ 16,
+ 0
+ ],
+ "56": [
+ 32,
+ 0
+ ],
+ "24": [
+ 48,
+ 0
+ ],
+ "50": [
+ 64,
+ 64
+ ],
+ "26": [
+ 160,
+ 64
+ ],
+ "176": [
+ 16,
+ 32
+ ],
+ "178": [
+ 32,
+ 32
+ ],
+ "184": [
+ 48,
+ 32
+ ],
+ "186": [
+ 32,
+ 48
+ ],
+ "58": [
+ 16,
+ 64
+ ],
+ "152": [
+ 32,
+ 64
+ ],
+ "154": [
+ 64,
+ 96
+ ],
+ "182": [
+ 16,
+ 48
+ ],
+ "250": [
+ 48,
+ 48
+ ],
+ "187": [
+ 48,
+ 64
+ ],
+ "440": [
+ 0,
+ 64
+ ],
+ "510": [
+ 0,
+ 80
+ ],
+ "447": [
+ 80,
+ 32
+ ],
+ "62": [
+ 16,
+ 96
+ ],
+ "248": [
+ 48,
+ 96
+ ],
+ "507": [
+ 0,
+ 16
+ ],
+ "255": [
+ 128,
+ 0
+ ],
+ "59": [
+ 144,
+ 0
+ ],
+ "190": [
+ 176,
+ 0
+ ],
+ "218": [
+ 192,
+ 0
+ ],
+ "155": [
+ 176,
+ 16
+ ],
+ "442": [
+ 144,
+ 16
+ ],
+ "432": [
+ 112,
+ 16
+ ],
+ "446": [
+ 80,
+ 16
+ ],
+ "54": [
+ 64,
+ 16
+ ],
+ "511": [
+ 80,
+ 0
+ ],
+ "254": [
+ 96,
+ 16
+ ],
+ "443": [
+ 112,
+ 32
+ ],
+ "191": [
+ 128,
+ 16
+ ],
+ "251": [
+ 160,
+ 16
+ ],
+ "216": [
+ 144,
+ 32
+ ],
+ "27": [
+ 160,
+ 32
+ ]
+ },
+ "TerrainType": 0,
+ "Ready": false
+ },
+ {
+ "Name": "Test2",
+ "F": {},
+ "M": {},
+ "T": {
+ "337": [
+ 224,
+ 0
+ ],
+ "340": [
+ 240,
+ 0
+ ],
+ "80": [
+ 160,
+ 0
+ ],
+ "272": [
+ 64,
+ 0
+ ],
+ "85": [
+ 96,
+ 32
+ ],
+ "341": [
+ 32,
+ 80
+ ],
+ "276": [
+ 16,
+ 80
+ ],
+ "277": [
+ 128,
+ 32
+ ],
+ "81": [
+ 48,
+ 80
+ ],
+ "17": [
+ 48,
+ 16
+ ],
+ "21": [
+ 32,
+ 16
+ ],
+ "20": [
+ 16,
+ 16
+ ],
+ "336": [
+ 96,
+ 0
+ ]
+ },
+ "TerrainType": 1,
+ "Ready": true
+ }
+ ],
+ "Combination": [
+ {
+ "Id": "638404496948408912",
+ "Name": "\u7EC4\u5408",
+ "Cells": [
+ {
+ "X": 160,
+ "Y": 128
+ },
+ {
+ "X": 176,
+ "Y": 128
+ },
+ {
+ "X": 192,
+ "Y": 128
+ },
+ {
+ "X": 208,
+ "Y": 128
+ },
+ {
+ "X": 224,
+ "Y": 128
+ },
+ {
+ "X": 240,
+ "Y": 128
+ },
+ {
+ "X": 240,
+ "Y": 144
+ },
+ {
+ "X": 224,
+ "Y": 144
+ },
+ {
+ "X": 208,
+ "Y": 144
+ },
+ {
+ "X": 192,
+ "Y": 144
+ },
+ {
+ "X": 176,
+ "Y": 144
+ },
+ {
+ "X": 160,
+ "Y": 144
+ },
+ {
+ "X": 160,
+ "Y": 128
+ },
+ {
+ "X": 176,
+ "Y": 128
+ },
+ {
+ "X": 192,
+ "Y": 128
+ },
+ {
+ "X": 208,
+ "Y": 128
+ },
+ {
+ "X": 224,
+ "Y": 128
+ },
+ {
+ "X": 240,
+ "Y": 128
+ },
+ {
+ "X": 240,
+ "Y": 144
+ },
+ {
+ "X": 224,
+ "Y": 144
+ },
+ {
+ "X": 208,
+ "Y": 144
+ },
+ {
+ "X": 192,
+ "Y": 144
+ },
+ {
+ "X": 176,
+ "Y": 144
+ },
+ {
+ "X": 160,
+ "Y": 144
+ }
+ ],
+ "Positions": [
+ {
+ "X": 0,
+ "Y": 0
+ },
+ {
+ "X": 16,
+ "Y": 0
+ },
+ {
+ "X": 32,
+ "Y": 0
+ },
+ {
+ "X": 48,
+ "Y": 0
+ },
+ {
+ "X": 64,
+ "Y": 0
+ },
+ {
+ "X": 80,
+ "Y": 0
+ },
+ {
+ "X": 80,
+ "Y": 16
+ },
+ {
+ "X": 64,
+ "Y": 16
+ },
+ {
+ "X": 48,
+ "Y": 16
+ },
+ {
+ "X": 32,
+ "Y": 16
+ },
+ {
+ "X": 16,
+ "Y": 16
+ },
+ {
+ "X": 0,
+ "Y": 16
+ },
+ {
+ "X": 0,
+ "Y": 32
+ },
+ {
+ "X": 16,
+ "Y": 32
+ },
+ {
+ "X": 32,
+ "Y": 32
+ },
+ {
+ "X": 48,
+ "Y": 32
+ },
+ {
+ "X": 64,
+ "Y": 32
+ },
+ {
+ "X": 80,
+ "Y": 32
+ },
+ {
+ "X": 80,
+ "Y": 48
+ },
+ {
+ "X": 64,
+ "Y": 48
+ },
+ {
+ "X": 48,
+ "Y": 48
+ },
+ {
+ "X": 32,
+ "Y": 48
+ },
+ {
+ "X": 16,
+ "Y": 48
+ },
+ {
+ "X": 0,
+ "Y": 48
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Name": "Test2",
+ "SourcePath": "resource/map/tileSet/TileSet2/Test2.png",
+ "Terrain": [
+ {
+ "Name": "TestTerrain2",
+ "F": {},
+ "M": {},
+ "T": {
+ "80": [
+ 176,
+ 0
+ ],
+ "272": [
+ 128,
+ 0
+ ],
+ "336": [
+ 160,
+ 0
+ ],
+ "21": [
+ 144,
+ 48
+ ],
+ "20": [
+ 128,
+ 48
+ ],
+ "17": [
+ 176,
+ 48
+ ],
+ "81": [
+ 176,
+ 32
+ ],
+ "276": [
+ 128,
+ 16
+ ],
+ "341": [
+ 144,
+ 32
+ ],
+ "337": [
+ 96,
+ 16
+ ],
+ "85": [
+ 96,
+ 32
+ ],
+ "277": [
+ 80,
+ 32
+ ],
+ "340": [
+ 80,
+ 16
+ ]
+ },
+ "TerrainType": 1,
+ "Ready": true
+ }
+ ],
+ "Combination": [
+ {
+ "Id": "638404866100310178",
+ "Name": "\u7EC4\u5408",
+ "Cells": [
+ {
+ "X": 16,
+ "Y": 48
+ },
+ {
+ "X": 32,
+ "Y": 48
+ },
+ {
+ "X": 48,
+ "Y": 48
+ },
+ {
+ "X": 48,
+ "Y": 64
+ },
+ {
+ "X": 32,
+ "Y": 64
+ },
+ {
+ "X": 16,
+ "Y": 64
+ }
+ ],
+ "Positions": [
+ {
+ "X": 0,
+ "Y": 0
+ },
+ {
+ "X": 16,
+ "Y": 0
+ },
+ {
+ "X": 32,
+ "Y": 0
+ },
+ {
+ "X": 32,
+ "Y": 16
+ },
+ {
+ "X": 16,
+ "Y": 16
+ },
+ {
+ "X": 0,
+ "Y": 16
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSetConfig.json b/DungeonShooting_Godot/resource/map/tileSet/TileSetConfig.json
new file mode 100644
index 0000000..82cab39
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileSet/TileSetConfig.json
@@ -0,0 +1,10 @@
+{
+ "TileSet1": {
+ "Path": "resource/map/tileSet/TileSet1",
+ "Remark": ""
+ },
+ "TileSet2": {
+ "Path": "resource/map/tileSet/TileSet2",
+ "Remark": ""
+ }
+}
diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet_old.tres b/DungeonShooting_Godot/resource/map/tileSet/TileSet_old.tres
deleted file mode 100644
index e63012e..0000000
--- a/DungeonShooting_Godot/resource/map/tileSet/TileSet_old.tres
+++ /dev/null
@@ -1,560 +0,0 @@
-[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://bn21mn0gu6jel"]
-
-[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/map/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1_vqd0o"]
-
-
-[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_rkmbu"]
-texture = ExtResource("1_vqd0o")
-0:0/0 = 0
-0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:0/0/physics_layer_0/angular_velocity = 0.0
-1:0/0 = 0
-1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:0/0/physics_layer_0/angular_velocity = 0.0
-2:0/0 = 0
-2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:0/0/physics_layer_0/angular_velocity = 0.0
-3:0/0 = 0
-3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:0/0/physics_layer_0/angular_velocity = 0.0
-4:0/0 = 0
-4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:0/0/physics_layer_0/angular_velocity = 0.0
-5:0/0 = 0
-5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:0/0/physics_layer_0/angular_velocity = 0.0
-6:0/0 = 0
-6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:0/0/physics_layer_0/angular_velocity = 0.0
-7:0/0 = 0
-7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:0/0/physics_layer_0/angular_velocity = 0.0
-8:0/0 = 0
-8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:0/0/physics_layer_0/angular_velocity = 0.0
-9:0/0 = 0
-9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:0/0/physics_layer_0/angular_velocity = 0.0
-10:0/0 = 0
-10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:0/0/physics_layer_0/angular_velocity = 0.0
-11:0/0 = 0
-11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:0/0/physics_layer_0/angular_velocity = 0.0
-12:0/0 = 0
-12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:0/0/physics_layer_0/angular_velocity = 0.0
-13:0/0 = 0
-13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:0/0/physics_layer_0/angular_velocity = 0.0
-14:0/0 = 0
-14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:0/0/physics_layer_0/angular_velocity = 0.0
-15:0/0 = 0
-15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:0/0/physics_layer_0/angular_velocity = 0.0
-0:1/0 = 0
-0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:1/0/physics_layer_0/angular_velocity = 0.0
-1:1/0 = 0
-1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:1/0/physics_layer_0/angular_velocity = 0.0
-2:1/0 = 0
-2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:1/0/physics_layer_0/angular_velocity = 0.0
-3:1/0 = 0
-3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:1/0/physics_layer_0/angular_velocity = 0.0
-4:1/0 = 0
-4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:1/0/physics_layer_0/angular_velocity = 0.0
-5:1/0 = 0
-5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:1/0/physics_layer_0/angular_velocity = 0.0
-6:1/0 = 0
-6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:1/0/physics_layer_0/angular_velocity = 0.0
-7:1/0 = 0
-7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:1/0/physics_layer_0/angular_velocity = 0.0
-8:1/0 = 0
-8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:1/0/physics_layer_0/angular_velocity = 0.0
-9:1/0 = 0
-9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:1/0/physics_layer_0/angular_velocity = 0.0
-10:1/0 = 0
-10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:1/0/physics_layer_0/angular_velocity = 0.0
-11:1/0 = 0
-11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:1/0/physics_layer_0/angular_velocity = 0.0
-12:1/0 = 0
-12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:1/0/physics_layer_0/angular_velocity = 0.0
-13:1/0 = 0
-13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:1/0/physics_layer_0/angular_velocity = 0.0
-14:1/0 = 0
-14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:1/0/physics_layer_0/angular_velocity = 0.0
-15:1/0 = 0
-15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:1/0/physics_layer_0/angular_velocity = 0.0
-0:2/0 = 0
-0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:2/0/physics_layer_0/angular_velocity = 0.0
-1:2/0 = 0
-1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:2/0/physics_layer_0/angular_velocity = 0.0
-1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8)
-2:2/0 = 0
-2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:2/0/physics_layer_0/angular_velocity = 0.0
-2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8)
-3:2/0 = 0
-3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:2/0/physics_layer_0/angular_velocity = 0.0
-3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8)
-4:2/0 = 0
-4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:2/0/physics_layer_0/angular_velocity = 0.0
-5:2/0 = 0
-5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:2/0/physics_layer_0/angular_velocity = 0.0
-6:2/0 = 0
-6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:2/0/physics_layer_0/angular_velocity = 0.0
-7:2/0 = 0
-7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:2/0/physics_layer_0/angular_velocity = 0.0
-8:2/0 = 0
-8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:2/0/physics_layer_0/angular_velocity = 0.0
-9:2/0 = 0
-9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:2/0/physics_layer_0/angular_velocity = 0.0
-10:2/0 = 0
-10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:2/0/physics_layer_0/angular_velocity = 0.0
-11:2/0 = 0
-11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:2/0/physics_layer_0/angular_velocity = 0.0
-11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-12:2/0 = 0
-12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:2/0/physics_layer_0/angular_velocity = 0.0
-13:2/0 = 0
-13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:2/0/physics_layer_0/angular_velocity = 0.0
-13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-14:2/0 = 0
-14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:2/0/physics_layer_0/angular_velocity = 0.0
-15:2/0 = 0
-15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:2/0/physics_layer_0/angular_velocity = 0.0
-0:3/0 = 0
-0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:3/0/physics_layer_0/angular_velocity = 0.0
-1:3/0 = 0
-1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:3/0/physics_layer_0/angular_velocity = 0.0
-1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-2:3/0 = 0
-2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:3/0/physics_layer_0/angular_velocity = 0.0
-2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:3/0 = 0
-3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:3/0/physics_layer_0/angular_velocity = 0.0
-3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-4:3/0 = 0
-4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:3/0/physics_layer_0/angular_velocity = 0.0
-5:3/0 = 0
-5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:3/0/physics_layer_0/angular_velocity = 0.0
-6:3/0 = 0
-6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:3/0/physics_layer_0/angular_velocity = 0.0
-7:3/0 = 0
-7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:3/0/physics_layer_0/angular_velocity = 0.0
-8:3/0 = 0
-8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:3/0/physics_layer_0/angular_velocity = 0.0
-9:3/0 = 0
-9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:3/0/physics_layer_0/angular_velocity = 0.0
-10:3/0 = 0
-10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:3/0/physics_layer_0/angular_velocity = 0.0
-11:3/0 = 0
-11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:3/0/physics_layer_0/angular_velocity = 0.0
-12:3/0 = 0
-12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:3/0/physics_layer_0/angular_velocity = 0.0
-13:3/0 = 0
-13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:3/0/physics_layer_0/angular_velocity = 0.0
-14:3/0 = 0
-14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:3/0/physics_layer_0/angular_velocity = 0.0
-15:3/0 = 0
-15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:3/0/physics_layer_0/angular_velocity = 0.0
-0:4/0 = 0
-0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:4/0/physics_layer_0/angular_velocity = 0.0
-1:4/0 = 0
-1:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:4/0/physics_layer_0/angular_velocity = 0.0
-1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-2:4/0 = 0
-2:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:4/0/physics_layer_0/angular_velocity = 0.0
-2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:4/0 = 0
-3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:4/0/physics_layer_0/angular_velocity = 0.0
-3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-4:4/0 = 0
-4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:4/0/physics_layer_0/angular_velocity = 0.0
-5:4/0 = 0
-5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:4/0/physics_layer_0/angular_velocity = 0.0
-6:4/0 = 0
-6:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:4/0/physics_layer_0/angular_velocity = 0.0
-7:4/0 = 0
-7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:4/0/physics_layer_0/angular_velocity = 0.0
-8:4/0 = 0
-8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:4/0/physics_layer_0/angular_velocity = 0.0
-9:4/0 = 0
-9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:4/0/physics_layer_0/angular_velocity = 0.0
-10:4/0 = 0
-10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:4/0/physics_layer_0/angular_velocity = 0.0
-11:4/0 = 0
-11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:4/0/physics_layer_0/angular_velocity = 0.0
-12:4/0 = 0
-12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:4/0/physics_layer_0/angular_velocity = 0.0
-13:4/0 = 0
-13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:4/0/physics_layer_0/angular_velocity = 0.0
-14:4/0 = 0
-14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:4/0/physics_layer_0/angular_velocity = 0.0
-15:4/0 = 0
-15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:4/0/physics_layer_0/angular_velocity = 0.0
-0:5/0 = 0
-0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:5/0/physics_layer_0/angular_velocity = 0.0
-1:5/0 = 0
-1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:5/0/physics_layer_0/angular_velocity = 0.0
-1:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-2:5/0 = 0
-2:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:5/0/physics_layer_0/angular_velocity = 0.0
-2:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:5/0 = 0
-3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:5/0/physics_layer_0/angular_velocity = 0.0
-3:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-4:5/0 = 0
-4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:5/0/physics_layer_0/angular_velocity = 0.0
-5:5/0 = 0
-5:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:5/0/physics_layer_0/angular_velocity = 0.0
-6:5/0 = 0
-6:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:5/0/physics_layer_0/angular_velocity = 0.0
-7:5/0 = 0
-7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:5/0/physics_layer_0/angular_velocity = 0.0
-8:5/0 = 0
-8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:5/0/physics_layer_0/angular_velocity = 0.0
-9:5/0 = 0
-9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:5/0/physics_layer_0/angular_velocity = 0.0
-10:5/0 = 0
-10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:5/0/physics_layer_0/angular_velocity = 0.0
-11:5/0 = 0
-11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:5/0/physics_layer_0/angular_velocity = 0.0
-12:5/0 = 0
-12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:5/0/physics_layer_0/angular_velocity = 0.0
-13:5/0 = 0
-13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:5/0/physics_layer_0/angular_velocity = 0.0
-14:5/0 = 0
-14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:5/0/physics_layer_0/angular_velocity = 0.0
-15:5/0 = 0
-15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:5/0/physics_layer_0/angular_velocity = 0.0
-0:6/0 = 0
-0:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:6/0/physics_layer_0/angular_velocity = 0.0
-1:6/0 = 0
-1:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:6/0/physics_layer_0/angular_velocity = 0.0
-1:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-2:6/0 = 0
-2:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:6/0/physics_layer_0/angular_velocity = 0.0
-2:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:6/0 = 0
-3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:6/0/physics_layer_0/angular_velocity = 0.0
-3:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-4:6/0 = 0
-4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:6/0/physics_layer_0/angular_velocity = 0.0
-5:6/0 = 0
-5:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:6/0/physics_layer_0/angular_velocity = 0.0
-6:6/0 = 0
-6:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:6/0/physics_layer_0/angular_velocity = 0.0
-7:6/0 = 0
-7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:6/0/physics_layer_0/angular_velocity = 0.0
-8:6/0 = 0
-8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:6/0/physics_layer_0/angular_velocity = 0.0
-9:6/0 = 0
-9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:6/0/physics_layer_0/angular_velocity = 0.0
-10:6/0 = 0
-10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:6/0/physics_layer_0/angular_velocity = 0.0
-11:6/0 = 0
-11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:6/0/physics_layer_0/angular_velocity = 0.0
-12:6/0 = 0
-12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:6/0/physics_layer_0/angular_velocity = 0.0
-13:6/0 = 0
-13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:6/0/physics_layer_0/angular_velocity = 0.0
-14:6/0 = 0
-14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:6/0/physics_layer_0/angular_velocity = 0.0
-15:6/0 = 0
-15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:6/0/physics_layer_0/angular_velocity = 0.0
-0:7/0 = 0
-0:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:7/0/physics_layer_0/angular_velocity = 0.0
-1:7/0 = 0
-1:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:7/0/physics_layer_0/angular_velocity = 0.0
-1:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-2:7/0 = 0
-2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:7/0/physics_layer_0/angular_velocity = 0.0
-2:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:7/0 = 0
-3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:7/0/physics_layer_0/angular_velocity = 0.0
-3:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-4:7/0 = 0
-4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:7/0/physics_layer_0/angular_velocity = 0.0
-5:7/0 = 0
-5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:7/0/physics_layer_0/angular_velocity = 0.0
-6:7/0 = 0
-6:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:7/0/physics_layer_0/angular_velocity = 0.0
-7:7/0 = 0
-7:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:7/0/physics_layer_0/angular_velocity = 0.0
-8:7/0 = 0
-8:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:7/0/physics_layer_0/angular_velocity = 0.0
-9:7/0 = 0
-9:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:7/0/physics_layer_0/angular_velocity = 0.0
-10:7/0 = 0
-10:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:7/0/physics_layer_0/angular_velocity = 0.0
-11:7/0 = 0
-11:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:7/0/physics_layer_0/angular_velocity = 0.0
-12:7/0 = 0
-12:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:7/0/physics_layer_0/angular_velocity = 0.0
-13:7/0 = 0
-13:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:7/0/physics_layer_0/angular_velocity = 0.0
-14:7/0 = 0
-14:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:7/0/physics_layer_0/angular_velocity = 0.0
-15:7/0 = 0
-15:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:7/0/physics_layer_0/angular_velocity = 0.0
-0:8/0 = 0
-0:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:8/0/physics_layer_0/angular_velocity = 0.0
-1:8/0 = 0
-1:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:8/0/physics_layer_0/angular_velocity = 0.0
-2:8/0 = 0
-2:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:8/0/physics_layer_0/angular_velocity = 0.0
-3:8/0 = 0
-3:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:8/0/physics_layer_0/angular_velocity = 0.0
-4:8/0 = 0
-4:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:8/0/physics_layer_0/angular_velocity = 0.0
-5:8/0 = 0
-5:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:8/0/physics_layer_0/angular_velocity = 0.0
-6:8/0 = 0
-6:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:8/0/physics_layer_0/angular_velocity = 0.0
-7:8/0 = 0
-7:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:8/0/physics_layer_0/angular_velocity = 0.0
-8:8/0 = 0
-8:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:8/0/physics_layer_0/angular_velocity = 0.0
-9:8/0 = 0
-9:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:8/0/physics_layer_0/angular_velocity = 0.0
-10:8/0 = 0
-10:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:8/0/physics_layer_0/angular_velocity = 0.0
-11:8/0 = 0
-11:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:8/0/physics_layer_0/angular_velocity = 0.0
-12:8/0 = 0
-12:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:8/0/physics_layer_0/angular_velocity = 0.0
-13:8/0 = 0
-13:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:8/0/physics_layer_0/angular_velocity = 0.0
-14:8/0 = 0
-14:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:8/0/physics_layer_0/angular_velocity = 0.0
-15:8/0 = 0
-15:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:8/0/physics_layer_0/angular_velocity = 0.0
-0:9/0 = 0
-0:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:9/0/physics_layer_0/angular_velocity = 0.0
-1:9/0 = 0
-1:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:9/0/physics_layer_0/angular_velocity = 0.0
-2:9/0 = 0
-2:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:9/0/physics_layer_0/angular_velocity = 0.0
-3:9/0 = 0
-3:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:9/0/physics_layer_0/angular_velocity = 0.0
-4:9/0 = 0
-4:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:9/0/physics_layer_0/angular_velocity = 0.0
-5:9/0 = 0
-5:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:9/0/physics_layer_0/angular_velocity = 0.0
-6:9/0 = 0
-6:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:9/0/physics_layer_0/angular_velocity = 0.0
-7:9/0 = 0
-7:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:9/0/physics_layer_0/angular_velocity = 0.0
-10:9/0 = 0
-10:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:9/0/physics_layer_0/angular_velocity = 0.0
-11:9/0 = 0
-11:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:9/0/physics_layer_0/angular_velocity = 0.0
-12:9/0 = 0
-12:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:9/0/physics_layer_0/angular_velocity = 0.0
-13:9/0 = 0
-13:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:9/0/physics_layer_0/angular_velocity = 0.0
-14:9/0 = 0
-14:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:9/0/physics_layer_0/angular_velocity = 0.0
-15:9/0 = 0
-15:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:9/0/physics_layer_0/angular_velocity = 0.0
-0:10/0 = 0
-0:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:10/0/physics_layer_0/angular_velocity = 0.0
-1:10/0 = 0
-1:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:10/0/physics_layer_0/angular_velocity = 0.0
-2:10/0 = 0
-2:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:10/0/physics_layer_0/angular_velocity = 0.0
-3:10/0 = 0
-3:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:10/0/physics_layer_0/angular_velocity = 0.0
-5:10/0 = 0
-5:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:10/0/physics_layer_0/angular_velocity = 0.0
-6:10/0 = 0
-6:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:10/0/physics_layer_0/angular_velocity = 0.0
-7:10/0 = 0
-7:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:10/0/physics_layer_0/angular_velocity = 0.0
-13:10/0 = 0
-13:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:10/0/physics_layer_0/angular_velocity = 0.0
-14:10/0 = 0
-14:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:10/0/physics_layer_0/angular_velocity = 0.0
-15:10/0 = 0
-15:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:10/0/physics_layer_0/angular_velocity = 0.0
-0:11/0 = 0
-0:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:11/0/physics_layer_0/angular_velocity = 0.0
-1:11/0 = 0
-1:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:11/0/physics_layer_0/angular_velocity = 0.0
-2:11/0 = 0
-2:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:11/0/physics_layer_0/angular_velocity = 0.0
-3:11/0 = 0
-3:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:11/0/physics_layer_0/angular_velocity = 0.0
-4:11/0 = 0
-4:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:11/0/physics_layer_0/angular_velocity = 0.0
-13:11/0 = 0
-13:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:11/0/physics_layer_0/angular_velocity = 0.0
-14:11/0 = 0
-14:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:11/0/physics_layer_0/angular_velocity = 0.0
-15:11/0 = 0
-15:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:11/0/physics_layer_0/angular_velocity = 0.0
-
-[resource]
-physics_layer_0/collision_layer = 1
-physics_layer_0/collision_mask = 0
-sources/1 = SubResource("TileSetAtlasSource_rkmbu")
diff --git a/DungeonShooting_Godot/resource/map/tileSet/map1/TileSet1.tres b/DungeonShooting_Godot/resource/map/tileSet/map1/TileSet1.tres
deleted file mode 100644
index 0cb7129..0000000
--- a/DungeonShooting_Godot/resource/map/tileSet/map1/TileSet1.tres
+++ /dev/null
@@ -1,609 +0,0 @@
-[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://b00g22o1cqhe8"]
-
-[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/map/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1_aqcu3"]
-
-[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_yvgyd"]
-texture = ExtResource("1_aqcu3")
-0:0/0 = 0
-0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:0/0/physics_layer_0/angular_velocity = 0.0
-1:0/0 = 0
-1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:0/0/physics_layer_0/angular_velocity = 0.0
-2:0/0 = 0
-2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:0/0/physics_layer_0/angular_velocity = 0.0
-3:0/0 = 0
-3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:0/0/physics_layer_0/angular_velocity = 0.0
-4:0/0 = 0
-4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:0/0/physics_layer_0/angular_velocity = 0.0
-5:0/0 = 0
-5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:0/0/physics_layer_0/angular_velocity = 0.0
-6:0/0 = 0
-6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:0/0/physics_layer_0/angular_velocity = 0.0
-7:0/0 = 0
-7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:0/0/physics_layer_0/angular_velocity = 0.0
-8:0/0 = 0
-8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:0/0/physics_layer_0/angular_velocity = 0.0
-9:0/0 = 0
-9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:0/0/physics_layer_0/angular_velocity = 0.0
-10:0/0 = 0
-10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:0/0/physics_layer_0/angular_velocity = 0.0
-11:0/next_alternative_id = 2
-11:0/0 = 0
-11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:0/0/physics_layer_0/angular_velocity = 0.0
-12:0/0 = 0
-12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:0/0/physics_layer_0/angular_velocity = 0.0
-13:0/next_alternative_id = 2
-13:0/0 = 0
-13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:0/0/physics_layer_0/angular_velocity = 0.0
-14:0/0 = 0
-14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:0/0/physics_layer_0/angular_velocity = 0.0
-15:0/0 = 0
-15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:0/0/physics_layer_0/angular_velocity = 0.0
-0:1/0 = 0
-0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:1/0/physics_layer_0/angular_velocity = 0.0
-1:1/0 = 0
-1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:1/0/physics_layer_0/angular_velocity = 0.0
-2:1/0 = 0
-2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:1/0/physics_layer_0/angular_velocity = 0.0
-3:1/0 = 0
-3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:1/0/physics_layer_0/angular_velocity = 0.0
-4:1/0 = 0
-4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:1/0/physics_layer_0/angular_velocity = 0.0
-5:1/0 = 0
-5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:1/0/physics_layer_0/angular_velocity = 0.0
-6:1/0 = 0
-6:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:1/0/physics_layer_0/angular_velocity = 0.0
-7:1/0 = 0
-7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:1/0/physics_layer_0/angular_velocity = 0.0
-8:1/0 = 0
-8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:1/0/physics_layer_0/angular_velocity = 0.0
-9:1/0 = 0
-9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:1/0/physics_layer_0/angular_velocity = 0.0
-10:1/0 = 0
-10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:1/0/physics_layer_0/angular_velocity = 0.0
-11:1/0 = 0
-11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:1/0/physics_layer_0/angular_velocity = 0.0
-12:1/0 = 0
-12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:1/0/physics_layer_0/angular_velocity = 0.0
-13:1/0 = 0
-13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:1/0/physics_layer_0/angular_velocity = 0.0
-14:1/0 = 0
-14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:1/0/physics_layer_0/angular_velocity = 0.0
-15:1/0 = 0
-15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:1/0/physics_layer_0/angular_velocity = 0.0
-0:2/0 = 0
-0:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:2/0/physics_layer_0/angular_velocity = 0.0
-1:2/0 = 0
-1:2/0/terrain_set = 0
-1:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:2/0/physics_layer_0/angular_velocity = 0.0
-1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8)
-1:2/0/terrains_peering_bit/bottom_left_corner = 0
-1:2/0/terrains_peering_bit/top_left_corner = 0
-1:2/0/terrains_peering_bit/top_right_corner = 0
-2:2/0 = 0
-2:2/0/terrain_set = 0
-2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:2/0/physics_layer_0/angular_velocity = 0.0
-2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8)
-2:2/0/terrains_peering_bit/top_left_corner = 0
-2:2/0/terrains_peering_bit/top_right_corner = 0
-3:2/0 = 0
-3:2/0/terrain_set = 0
-3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:2/0/physics_layer_0/angular_velocity = 0.0
-3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8)
-3:2/0/terrains_peering_bit/bottom_right_corner = 0
-3:2/0/terrains_peering_bit/top_left_corner = 0
-3:2/0/terrains_peering_bit/top_right_corner = 0
-4:2/0 = 0
-4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:2/0/physics_layer_0/angular_velocity = 0.0
-5:2/0 = 0
-5:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:2/0/physics_layer_0/angular_velocity = 0.0
-6:2/0 = 0
-6:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:2/0/physics_layer_0/angular_velocity = 0.0
-7:2/0 = 0
-7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:2/0/physics_layer_0/angular_velocity = 0.0
-8:2/0 = 0
-8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:2/0/physics_layer_0/angular_velocity = 0.0
-9:2/0 = 0
-9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:2/0/physics_layer_0/angular_velocity = 0.0
-10:2/0 = 0
-10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:2/0/physics_layer_0/angular_velocity = 0.0
-11:2/0 = 0
-11:2/0/terrain_set = 0
-11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:2/0/physics_layer_0/angular_velocity = 0.0
-11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-11:2/0/terrains_peering_bit/top_right_corner = 0
-12:2/0 = 0
-12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:2/0/physics_layer_0/angular_velocity = 0.0
-13:2/0 = 0
-13:2/0/terrain_set = 0
-13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:2/0/physics_layer_0/angular_velocity = 0.0
-13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-13:2/0/terrains_peering_bit/top_left_corner = 0
-14:2/0 = 0
-14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:2/0/physics_layer_0/angular_velocity = 0.0
-15:2/0 = 0
-15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:2/0/physics_layer_0/angular_velocity = 0.0
-0:3/0 = 0
-0:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:3/0/physics_layer_0/angular_velocity = 0.0
-1:3/0 = 0
-1:3/0/terrain_set = 0
-1:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:3/0/physics_layer_0/angular_velocity = 0.0
-1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-1:3/0/terrains_peering_bit/bottom_left_corner = 0
-1:3/0/terrains_peering_bit/top_left_corner = 0
-2:3/0 = 0
-2:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:3/0/physics_layer_0/angular_velocity = 0.0
-2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:3/0 = 0
-3:3/0/terrain_set = 0
-3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:3/0/physics_layer_0/angular_velocity = 0.0
-3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:3/0/terrains_peering_bit/bottom_right_corner = 0
-3:3/0/terrains_peering_bit/top_right_corner = 0
-4:3/0 = 0
-4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:3/0/physics_layer_0/angular_velocity = 0.0
-5:3/0 = 0
-5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:3/0/physics_layer_0/angular_velocity = 0.0
-6:3/0 = 0
-6:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:3/0/physics_layer_0/angular_velocity = 0.0
-7:3/0 = 0
-7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:3/0/physics_layer_0/angular_velocity = 0.0
-8:3/0 = 0
-8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:3/0/physics_layer_0/angular_velocity = 0.0
-9:3/0 = 0
-9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:3/0/physics_layer_0/angular_velocity = 0.0
-10:3/0 = 0
-10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:3/0/physics_layer_0/angular_velocity = 0.0
-11:3/0 = 0
-11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:3/0/physics_layer_0/angular_velocity = 0.0
-12:3/0 = 0
-12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:3/0/physics_layer_0/angular_velocity = 0.0
-13:3/0 = 0
-13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:3/0/physics_layer_0/angular_velocity = 0.0
-14:3/0 = 0
-14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:3/0/physics_layer_0/angular_velocity = 0.0
-15:3/0 = 0
-15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:3/0/physics_layer_0/angular_velocity = 0.0
-0:4/0 = 0
-0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:4/0/physics_layer_0/angular_velocity = 0.0
-1:4/0 = 0
-1:4/0/terrain_set = 0
-1:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:4/0/physics_layer_0/angular_velocity = 0.0
-1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-1:4/0/terrains_peering_bit/bottom_left_corner = 0
-2:4/0 = 0
-2:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:4/0/physics_layer_0/angular_velocity = 0.0
-2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:4/0 = 0
-3:4/0/terrain_set = 0
-3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:4/0/physics_layer_0/angular_velocity = 0.0
-3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:4/0/terrains_peering_bit/bottom_right_corner = 0
-4:4/0 = 0
-4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:4/0/physics_layer_0/angular_velocity = 0.0
-5:4/0 = 0
-5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:4/0/physics_layer_0/angular_velocity = 0.0
-6:4/0 = 0
-6:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:4/0/physics_layer_0/angular_velocity = 0.0
-7:4/0 = 0
-7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:4/0/physics_layer_0/angular_velocity = 0.0
-8:4/0 = 0
-8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:4/0/physics_layer_0/angular_velocity = 0.0
-9:4/0 = 0
-9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:4/0/physics_layer_0/angular_velocity = 0.0
-10:4/0 = 0
-10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:4/0/physics_layer_0/angular_velocity = 0.0
-11:4/0 = 0
-11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:4/0/physics_layer_0/angular_velocity = 0.0
-12:4/0 = 0
-12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:4/0/physics_layer_0/angular_velocity = 0.0
-13:4/0 = 0
-13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:4/0/physics_layer_0/angular_velocity = 0.0
-14:4/0 = 0
-14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:4/0/physics_layer_0/angular_velocity = 0.0
-15:4/0 = 0
-15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:4/0/physics_layer_0/angular_velocity = 0.0
-0:5/0 = 0
-0:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:5/0/physics_layer_0/angular_velocity = 0.0
-1:5/0 = 0
-1:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:5/0/physics_layer_0/angular_velocity = 0.0
-1:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-2:5/0 = 0
-2:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:5/0/physics_layer_0/angular_velocity = 0.0
-2:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:5/0 = 0
-3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:5/0/physics_layer_0/angular_velocity = 0.0
-3:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-4:5/0 = 0
-4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:5/0/physics_layer_0/angular_velocity = 0.0
-5:5/0 = 0
-5:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:5/0/physics_layer_0/angular_velocity = 0.0
-6:5/0 = 0
-6:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:5/0/physics_layer_0/angular_velocity = 0.0
-7:5/0 = 0
-7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:5/0/physics_layer_0/angular_velocity = 0.0
-8:5/0 = 0
-8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:5/0/physics_layer_0/angular_velocity = 0.0
-9:5/0 = 0
-9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:5/0/physics_layer_0/angular_velocity = 0.0
-10:5/0 = 0
-10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:5/0/physics_layer_0/angular_velocity = 0.0
-11:5/0 = 0
-11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:5/0/physics_layer_0/angular_velocity = 0.0
-12:5/0 = 0
-12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:5/0/physics_layer_0/angular_velocity = 0.0
-13:5/0 = 0
-13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:5/0/physics_layer_0/angular_velocity = 0.0
-14:5/0 = 0
-14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:5/0/physics_layer_0/angular_velocity = 0.0
-15:5/0 = 0
-15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:5/0/physics_layer_0/angular_velocity = 0.0
-0:6/0 = 0
-0:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:6/0/physics_layer_0/angular_velocity = 0.0
-1:6/next_alternative_id = 3
-1:6/0 = 0
-1:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:6/0/physics_layer_0/angular_velocity = 0.0
-1:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-2:6/next_alternative_id = 3
-2:6/0 = 0
-2:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:6/0/physics_layer_0/angular_velocity = 0.0
-2:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:6/next_alternative_id = 3
-3:6/0 = 0
-3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:6/0/physics_layer_0/angular_velocity = 0.0
-3:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-4:6/0 = 0
-4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:6/0/physics_layer_0/angular_velocity = 0.0
-5:6/0 = 0
-5:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:6/0/physics_layer_0/angular_velocity = 0.0
-6:6/0 = 0
-6:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:6/0/physics_layer_0/angular_velocity = 0.0
-7:6/0 = 0
-7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:6/0/physics_layer_0/angular_velocity = 0.0
-8:6/0 = 0
-8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:6/0/physics_layer_0/angular_velocity = 0.0
-9:6/0 = 0
-9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:6/0/physics_layer_0/angular_velocity = 0.0
-10:6/0 = 0
-10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:6/0/physics_layer_0/angular_velocity = 0.0
-11:6/0 = 0
-11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:6/0/physics_layer_0/angular_velocity = 0.0
-12:6/0 = 0
-12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:6/0/physics_layer_0/angular_velocity = 0.0
-13:6/0 = 0
-13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:6/0/physics_layer_0/angular_velocity = 0.0
-14:6/0 = 0
-14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:6/0/physics_layer_0/angular_velocity = 0.0
-15:6/0 = 0
-15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:6/0/physics_layer_0/angular_velocity = 0.0
-0:7/0 = 0
-0:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:7/0/physics_layer_0/angular_velocity = 0.0
-1:7/0 = 0
-1:7/0/terrain_set = 0
-1:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:7/0/physics_layer_0/angular_velocity = 0.0
-1:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-1:7/0/terrains_peering_bit/bottom_right_corner = 0
-1:7/0/terrains_peering_bit/bottom_left_corner = 0
-1:7/0/terrains_peering_bit/top_left_corner = 0
-2:7/0 = 0
-2:7/0/terrain_set = 0
-2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:7/0/physics_layer_0/angular_velocity = 0.0
-2:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-2:7/0/terrains_peering_bit/bottom_right_corner = 0
-2:7/0/terrains_peering_bit/bottom_left_corner = 0
-3:7/0 = 0
-3:7/0/terrain_set = 0
-3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:7/0/physics_layer_0/angular_velocity = 0.0
-3:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
-3:7/0/terrains_peering_bit/bottom_right_corner = 0
-3:7/0/terrains_peering_bit/bottom_left_corner = 0
-3:7/0/terrains_peering_bit/top_right_corner = 0
-4:7/0 = 0
-4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:7/0/physics_layer_0/angular_velocity = 0.0
-5:7/0 = 0
-5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:7/0/physics_layer_0/angular_velocity = 0.0
-6:7/0 = 0
-6:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:7/0/physics_layer_0/angular_velocity = 0.0
-7:7/0 = 0
-7:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:7/0/physics_layer_0/angular_velocity = 0.0
-8:7/0 = 0
-8:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:7/0/physics_layer_0/angular_velocity = 0.0
-9:7/0 = 0
-9:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:7/0/physics_layer_0/angular_velocity = 0.0
-10:7/0 = 0
-10:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:7/0/physics_layer_0/angular_velocity = 0.0
-11:7/0 = 0
-11:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:7/0/physics_layer_0/angular_velocity = 0.0
-12:7/0 = 0
-12:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:7/0/physics_layer_0/angular_velocity = 0.0
-13:7/0 = 0
-13:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:7/0/physics_layer_0/angular_velocity = 0.0
-14:7/0 = 0
-14:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:7/0/physics_layer_0/angular_velocity = 0.0
-15:7/0 = 0
-15:7/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:7/0/physics_layer_0/angular_velocity = 0.0
-0:8/0 = 0
-0:8/0/terrain_set = 0
-0:8/0/terrain = 0
-0:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:8/0/physics_layer_0/angular_velocity = 0.0
-0:8/0/terrains_peering_bit/bottom_right_corner = 0
-0:8/0/terrains_peering_bit/bottom_left_corner = 0
-0:8/0/terrains_peering_bit/top_left_corner = 0
-0:8/0/terrains_peering_bit/top_right_corner = 0
-1:8/0 = 0
-1:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:8/0/physics_layer_0/angular_velocity = 0.0
-2:8/0 = 0
-2:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:8/0/physics_layer_0/angular_velocity = 0.0
-3:8/0 = 0
-3:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:8/0/physics_layer_0/angular_velocity = 0.0
-4:8/0 = 0
-4:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:8/0/physics_layer_0/angular_velocity = 0.0
-5:8/0 = 0
-5:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:8/0/physics_layer_0/angular_velocity = 0.0
-6:8/0 = 0
-6:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:8/0/physics_layer_0/angular_velocity = 0.0
-7:8/0 = 0
-7:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:8/0/physics_layer_0/angular_velocity = 0.0
-8:8/0 = 0
-8:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-8:8/0/physics_layer_0/angular_velocity = 0.0
-9:8/0 = 0
-9:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-9:8/0/physics_layer_0/angular_velocity = 0.0
-10:8/0 = 0
-10:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:8/0/physics_layer_0/angular_velocity = 0.0
-11:8/0 = 0
-11:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:8/0/physics_layer_0/angular_velocity = 0.0
-12:8/0 = 0
-12:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:8/0/physics_layer_0/angular_velocity = 0.0
-13:8/0 = 0
-13:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:8/0/physics_layer_0/angular_velocity = 0.0
-14:8/0 = 0
-14:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:8/0/physics_layer_0/angular_velocity = 0.0
-15:8/0 = 0
-15:8/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:8/0/physics_layer_0/angular_velocity = 0.0
-0:9/0 = 0
-0:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:9/0/physics_layer_0/angular_velocity = 0.0
-1:9/0 = 0
-1:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:9/0/physics_layer_0/angular_velocity = 0.0
-2:9/0 = 0
-2:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:9/0/physics_layer_0/angular_velocity = 0.0
-3:9/0 = 0
-3:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:9/0/physics_layer_0/angular_velocity = 0.0
-4:9/0 = 0
-4:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:9/0/physics_layer_0/angular_velocity = 0.0
-5:9/0 = 0
-5:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:9/0/physics_layer_0/angular_velocity = 0.0
-6:9/0 = 0
-6:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:9/0/physics_layer_0/angular_velocity = 0.0
-7:9/0 = 0
-7:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:9/0/physics_layer_0/angular_velocity = 0.0
-10:9/0 = 0
-10:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-10:9/0/physics_layer_0/angular_velocity = 0.0
-11:9/0 = 0
-11:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-11:9/0/physics_layer_0/angular_velocity = 0.0
-12:9/0 = 0
-12:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-12:9/0/physics_layer_0/angular_velocity = 0.0
-13:9/0 = 0
-13:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:9/0/physics_layer_0/angular_velocity = 0.0
-14:9/0 = 0
-14:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:9/0/physics_layer_0/angular_velocity = 0.0
-15:9/0 = 0
-15:9/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:9/0/physics_layer_0/angular_velocity = 0.0
-0:10/0 = 0
-0:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:10/0/physics_layer_0/angular_velocity = 0.0
-1:10/0 = 0
-1:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:10/0/physics_layer_0/angular_velocity = 0.0
-2:10/0 = 0
-2:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:10/0/physics_layer_0/angular_velocity = 0.0
-3:10/0 = 0
-3:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:10/0/physics_layer_0/angular_velocity = 0.0
-5:10/0 = 0
-5:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-5:10/0/physics_layer_0/angular_velocity = 0.0
-6:10/0 = 0
-6:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-6:10/0/physics_layer_0/angular_velocity = 0.0
-7:10/0 = 0
-7:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-7:10/0/physics_layer_0/angular_velocity = 0.0
-13:10/0 = 0
-13:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:10/0/physics_layer_0/angular_velocity = 0.0
-14:10/0 = 0
-14:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:10/0/physics_layer_0/angular_velocity = 0.0
-15:10/0 = 0
-15:10/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:10/0/physics_layer_0/angular_velocity = 0.0
-0:11/0 = 0
-0:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-0:11/0/physics_layer_0/angular_velocity = 0.0
-1:11/0 = 0
-1:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:11/0/physics_layer_0/angular_velocity = 0.0
-2:11/0 = 0
-2:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:11/0/physics_layer_0/angular_velocity = 0.0
-3:11/0 = 0
-3:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:11/0/physics_layer_0/angular_velocity = 0.0
-4:11/0 = 0
-4:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:11/0/physics_layer_0/angular_velocity = 0.0
-13:11/0 = 0
-13:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-13:11/0/physics_layer_0/angular_velocity = 0.0
-14:11/0 = 0
-14:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-14:11/0/physics_layer_0/angular_velocity = 0.0
-15:11/0 = 0
-15:11/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-15:11/0/physics_layer_0/angular_velocity = 0.0
-
-[resource]
-physics_layer_0/collision_layer = 1
-physics_layer_0/collision_mask = 0
-terrain_set_0/mode = 1
-terrain_set_0/terrain_0/name = "Terrain 0"
-terrain_set_0/terrain_0/color = Color(0.886275, 0.0980392, 0.0980392, 1)
-sources/0 = SubResource("TileSetAtlasSource_yvgyd")
diff --git a/DungeonShooting_Godot/resource/map/tileSet/map1/website.txt b/DungeonShooting_Godot/resource/map/tileSet/map1/website.txt
deleted file mode 100644
index bb6d4d7..0000000
--- a/DungeonShooting_Godot/resource/map/tileSet/map1/website.txt
+++ /dev/null
@@ -1 +0,0 @@
-https://aekae13.itch.io/16x16-dungeon-walls-reconfig
diff --git a/DungeonShooting_Godot/resource/map/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png b/DungeonShooting_Godot/resource/map/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png
deleted file mode 100644
index 00d2144..0000000
--- a/DungeonShooting_Godot/resource/map/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/map/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png.import b/DungeonShooting_Godot/resource/map/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png.import
deleted file mode 100644
index 2a14084..0000000
--- a/DungeonShooting_Godot/resource/map/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dj8nrd5od4fcl"
-path="res://.godot/imported/16x16 dungeon ii wall reconfig v04 spritesheet.png-c062adcaebcfa511f8bb4f73bd30ea6f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/map/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png"
-dest_files=["res://.godot/imported/16x16 dungeon ii wall reconfig v04 spritesheet.png-c062adcaebcfa511f8bb4f73bd30ea6f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/material/GodRays.gdshader b/DungeonShooting_Godot/resource/material/GodRays.gdshader
new file mode 100644
index 0000000..4892b88
--- /dev/null
+++ b/DungeonShooting_Godot/resource/material/GodRays.gdshader
@@ -0,0 +1,107 @@
+/*
+Shader from Godot Shaders - the free shader library.
+godotshaders.com/shader/god-rays
+
+Feel free to use, improve and change this shader according to your needs
+and consider sharing the modified result on godotshaders.com.
+*/
+
+shader_type canvas_item;
+
+uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
+
+uniform float angle = -0.3;
+uniform float position = -0.2;
+uniform float spread : hint_range(0.0, 1.0) = 0.5;
+uniform float cutoff : hint_range(-1.0, 1.0) = 0.1;
+uniform float falloff : hint_range(0.0, 1.0) = 0.2;
+uniform float edge_fade : hint_range(0.0, 1.0) = 0.15;
+
+uniform float speed = 1.0;
+uniform float ray1_density = 8.0;
+uniform float ray2_density = 30.0;
+uniform float ray2_intensity : hint_range(0.0, 1.0) = 0.3;
+
+uniform vec4 color : source_color = vec4(1.0, 0.9, 0.65, 0.8);
+
+uniform bool hdr = false;
+uniform float seed = 5.0;
+
+float random(vec2 _uv) {
+ _uv += min(TIME,0.0);
+ return fract(sin(dot(_uv.xy, vec2(12.9898, 78.233))) * 43758.5453123);
+}
+
+float noise (in vec2 uv) {
+ vec2 i = floor(uv);
+ vec2 f = fract(uv);
+
+ // Four corners in 2D of a tile
+ float a = random(i);
+ float b = random(i + vec2(1.0, 0.0));
+ float c = random(i + vec2(0.0, 1.0));
+ float d = random(i + vec2(1.0, 1.0));
+
+
+ // Smooth Interpolation
+
+ // Cubic Hermine Curve. Same as SmoothStep()
+ vec2 u = f * f * (3.0-2.0 * f);
+
+ // Mix 4 coorners percentages
+ return mix(a, b, u.x) +
+ (c - a)* u.y * (1.0 - u.x) +
+ (d - b) * u.x * u.y;
+}
+
+mat2 rotate(float _angle){
+ return mat2(vec2(cos(_angle), -sin(_angle)),
+ vec2(sin(_angle), cos(_angle)));
+}
+
+vec4 screen(vec4 base, vec4 blend){
+ return 1.0 - (1.0 - base) * (1.0 - blend);
+}
+
+void fragment()
+{
+
+ // Rotate, skew and move the UVs
+ vec2 transformed_uv = ( rotate(angle) * (UV - position) ) / ( (UV.y + spread) - (UV.y * spread) );
+
+ // Animate the ray according the the new transformed UVs
+ vec2 ray1 = vec2(transformed_uv.x * ray1_density + sin(TIME * 0.1 * speed) * (ray1_density * 0.2) + seed, 1.0);
+ vec2 ray2 = vec2(transformed_uv.x * ray2_density + sin(TIME * 0.2 * speed) * (ray1_density * 0.2) + seed, 1.0);
+
+ // Cut off the ray's edges
+ float cut = step(cutoff, transformed_uv.x) * step(cutoff, 1.0 - transformed_uv.x);
+ ray1 *= cut;
+ ray2 *= cut;
+
+ // Apply the noise pattern (i.e. create the rays)
+ float rays;
+
+ if (hdr){
+ // This is not really HDR, but check this to not clamp the two merged rays making
+ // their values go over 1.0. Can make for some nice effect
+ rays = noise(ray1) + (noise(ray2) * ray2_intensity);
+ }
+ else{
+ rays = clamp(noise(ray1) + (noise(ray2) * ray2_intensity), 0., 1.);
+ }
+
+ // Fade out edges
+ rays *= smoothstep(0.0, falloff, (1.0 - UV.y)); // Bottom
+ rays *= smoothstep(0.0 + cutoff, edge_fade + cutoff, transformed_uv.x); // Left
+ rays *= smoothstep(0.0 + cutoff, edge_fade + cutoff, 1.0 - transformed_uv.x); // Right
+
+ // Color to the rays
+ vec3 shine = vec3(rays) * color.rgb;
+
+ // Try different blending modes for a nicer effect. "Screen" is included in the code,
+ // but take a look at https://godotshaders.com/snippet/blending-modes/ for more.
+ // With "Screen" blend mode:
+ shine = screen(texture(SCREEN_TEXTURE, SCREEN_UV), vec4(color)).rgb;
+
+ COLOR = vec4(shine, rays * color.a);
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/material/Grid.gdshader b/DungeonShooting_Godot/resource/material/Grid.gdshader
new file mode 100644
index 0000000..571251f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/material/Grid.gdshader
@@ -0,0 +1,17 @@
+shader_type canvas_item;
+render_mode blend_mix;
+
+uniform vec4 color : source_color = vec4(1.0, 1.0, 1.0, 1.0);
+uniform vec2 size = vec2(1280.0, 720.0);
+uniform int line_width = 1;
+uniform vec2 offset = vec2(0.0, 0.0);
+uniform float grid_size = 16.0;
+
+void fragment() {
+ vec2 uv = ((offset - vec2(float(line_width)) * 0.5f) / size) + UV;
+ vec2 r = mod(size * uv, vec2(grid_size));
+ vec2 lines = step(1.0 - float(line_width) / grid_size, r / vec2(grid_size));
+ float alpha = dot(lines, vec2(1.0, 1.0));
+ COLOR = color;
+ COLOR.a *= alpha;
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/material/Grid.tres b/DungeonShooting_Godot/resource/material/Grid.tres
new file mode 100644
index 0000000..2b824d9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/material/Grid.tres
@@ -0,0 +1,12 @@
+[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://chcpnatun8hlf"]
+
+[ext_resource type="Shader" path="res://resource/material/Grid.gdshader" id="1_xhgfe"]
+
+[resource]
+resource_local_to_scene = true
+shader = ExtResource("1_xhgfe")
+shader_parameter/color = Color(0.529412, 0.529412, 0.529412, 0.0784314)
+shader_parameter/size = Vector2(1280, 720)
+shader_parameter/line_width = 2
+shader_parameter/offset = Vector2(0, 0)
+shader_parameter/grid_size = 16.0
diff --git a/DungeonShooting_Godot/resource/navigation/NavigationPolygon.tres b/DungeonShooting_Godot/resource/navigation/NavigationPolygon.tres
new file mode 100644
index 0000000..2027580
--- /dev/null
+++ b/DungeonShooting_Godot/resource/navigation/NavigationPolygon.tres
@@ -0,0 +1,7 @@
+[gd_resource type="NavigationPolygon" format=3 uid="uid://brpcle7mygiml"]
+
+[resource]
+resource_local_to_scene = true
+source_geometry_mode = 1
+source_geometry_group_name = &"navigation"
+cell_size = 4.0
diff --git a/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg b/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg
new file mode 100644
index 0000000..b4b2a02
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg.import
new file mode 100644
index 0000000..e57b929
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/common/gold.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://c7u5cykgimrd4"
+path="res://.godot/imported/gold.ogg-d06a726cc6fb4031ede1140774780273.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/common/gold.ogg"
+dest_files=["res://.godot/imported/gold.ogg-d06a726cc6fb4031ede1140774780273.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg
new file mode 100644
index 0000000..937aa7b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg.import
new file mode 100644
index 0000000..f339289
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_begin0013.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://vcstbu7wion4"
+path="res://.godot/imported/Reloading_begin0013.ogg-9e3fec03cec4408e1ae49f78ae7fd10c.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/reloading/Reloading_begin0013.ogg"
+dest_files=["res://.godot/imported/Reloading_begin0013.ogg-9e3fec03cec4408e1ae49f78ae7fd10c.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg
new file mode 100644
index 0000000..1cd4a17
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg.import
new file mode 100644
index 0000000..04fad80
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/reloading/Reloading_finish0005.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://lf3yfq82qetp"
+path="res://.godot/imported/Reloading_finish0005.ogg-6f8f9af81ced17f866850f45f4e2a055.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/reloading/Reloading_finish0005.ogg"
+dest_files=["res://.godot/imported/Reloading_finish0005.ogg-6f8f9af81ced17f866850f45f4e2a055.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg
new file mode 100644
index 0000000..00d92b6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg.import
new file mode 100644
index 0000000..54a9ae7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0012.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://bhpgoq6oqhd24"
+path="res://.godot/imported/Shooting0012.ogg-6d1b24c8d5291f0e566c777a5c1a223b.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/shooting/Shooting0012.ogg"
+dest_files=["res://.godot/imported/Shooting0012.ogg-6d1b24c8d5291f0e566c777a5c1a223b.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg
new file mode 100644
index 0000000..32b39ff
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg.import
new file mode 100644
index 0000000..ea34494
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/shooting/Shooting0013.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://b7dnq60ppy3rt"
+path="res://.godot/imported/Shooting0013.ogg-f68af44d2b878523bfde72871d459a6a.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/shooting/Shooting0013.ogg"
+dest_files=["res://.godot/imported/Shooting0013.ogg-f68af44d2b878523bfde72871d459a6a.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png
new file mode 100644
index 0000000..96ba1c1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png.import b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png.import
new file mode 100644
index 0000000..11628b1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dladvmgql1pwe"
+path="res://.godot/imported/TreasureBox0001.png-470db2c564e486f7e8aa1da89a50df44.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/box/TreasureBox0001.png"
+dest_files=["res://.godot/imported/TreasureBox0001.png-470db2c564e486f7e8aa1da89a50df44.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png
new file mode 100644
index 0000000..6b1d441
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png.import b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png.import
new file mode 100644
index 0000000..f90f748
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/box/TreasureBox0001_icon.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dmmq0qjtk3emj"
+path="res://.godot/imported/TreasureBox0001_icon.png-84fd776b11f978d95f53508cc4a524a3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/box/TreasureBox0001_icon.png"
+dest_files=["res://.godot/imported/TreasureBox0001_icon.png-84fd776b11f978d95f53508cc4a524a3.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/arrow.png b/DungeonShooting_Godot/resource/sprite/bullet/normal/arrow.png
deleted file mode 100644
index 4baebfb..0000000
--- a/DungeonShooting_Godot/resource/sprite/bullet/normal/arrow.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/arrow.png.import b/DungeonShooting_Godot/resource/sprite/bullet/normal/arrow.png.import
deleted file mode 100644
index ffa58c4..0000000
--- a/DungeonShooting_Godot/resource/sprite/bullet/normal/arrow.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cjb4rq1qavfm6"
-path="res://.godot/imported/arrow.png-e6292bc0b86a2f51ddcbf6755de06ee0.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/bullet/normal/arrow.png"
-dest_files=["res://.godot/imported/arrow.png-e6292bc0b86a2f51ddcbf6755de06ee0.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png
new file mode 100644
index 0000000..b71a05e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png.import b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png.import
new file mode 100644
index 0000000..3aa8d10
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0006.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bn8k07n2y6lmr"
+path="res://.godot/imported/bullet0006.png-7a22d278d8906f52f8fe1d151125dd27.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/bullet/normal/bullet0006.png"
+dest_files=["res://.godot/imported/bullet0006.png-7a22d278d8906f52f8fe1d151125dd27.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png
new file mode 100644
index 0000000..409f5ea
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png.import b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png.import
new file mode 100644
index 0000000..d3df7c1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0007.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ktgwsn6cecn1"
+path="res://.godot/imported/bullet0007.png-671d78db00259eec71ff1bbeb7323d38.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/bullet/normal/bullet0007.png"
+dest_files=["res://.godot/imported/bullet0007.png-671d78db00259eec71ff1bbeb7323d38.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png
new file mode 100644
index 0000000..274f521
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png.import b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png.import
new file mode 100644
index 0000000..75e0859
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0008.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cf6jtee53ru6t"
+path="res://.godot/imported/bullet0008.png-ee2d2af8fd8c07d5f50b667ec409caea.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/bullet/normal/bullet0008.png"
+dest_files=["res://.godot/imported/bullet0008.png-ee2d2af8fd8c07d5f50b667ec409caea.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0009.png b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0009.png
new file mode 100644
index 0000000..fe240cd
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0009.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0009.png.import b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0009.png.import
new file mode 100644
index 0000000..ac77e77
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/normal/bullet0009.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c5b2dmsxgv1p8"
+path="res://.godot/imported/bullet0009.png-97565aeda60064867828dff1a7fe009a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/bullet/normal/bullet0009.png"
+dest_files=["res://.godot/imported/bullet0009.png-97565aeda60064867828dff1a7fe009a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png b/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png
new file mode 100644
index 0000000..3110228
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png.import b/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png.import
new file mode 100644
index 0000000..0597d88
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://benn0iaclw8dk"
+path="res://.godot/imported/Gold_1.png-a93928c0075919d29a145c4dafb11474.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/currency/Gold_1.png"
+dest_files=["res://.godot/imported/Gold_1.png-a93928c0075919d29a145c4dafb11474.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png b/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png
new file mode 100644
index 0000000..d7c4a53
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png.import b/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png.import
new file mode 100644
index 0000000..c89b9a9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_10.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7dy6itvggpwy"
+path="res://.godot/imported/Gold_10.png-6dad896477e2d64ee4b53dfc61512c52.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/currency/Gold_10.png"
+dest_files=["res://.godot/imported/Gold_10.png-6dad896477e2d64ee4b53dfc61512c52.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png b/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png
new file mode 100644
index 0000000..daf65e3
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png.import b/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png.import
new file mode 100644
index 0000000..ca47a36
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_5.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bfpcqj2x8t2os"
+path="res://.godot/imported/Gold_5.png-0b8f56330acf1bae56d208261bbe00e3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/currency/Gold_5.png"
+dest_files=["res://.godot/imported/Gold_5.png-0b8f56330acf1bae56d208261bbe00e3.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png b/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png
new file mode 100644
index 0000000..5e67581
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png.import b/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png.import
new file mode 100644
index 0000000..ca0e61e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/currency/Gold_shadow.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cthwlbqve6i1l"
+path="res://.godot/imported/Gold_shadow.png-7f96d16d057af7e8ad9968d1695208d9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/currency/Gold_shadow.png"
+dest_files=["res://.godot/imported/Gold_shadow.png-7f96d16d057af7e8ad9968d1695208d9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/hall/HallBg.png b/DungeonShooting_Godot/resource/sprite/hall/HallBg.png
new file mode 100644
index 0000000..d6e14ba
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/hall/HallBg.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/hall/HallBg.png.import b/DungeonShooting_Godot/resource/sprite/hall/HallBg.png.import
new file mode 100644
index 0000000..e2aae09
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/hall/HallBg.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b2j5mkqm3uv6w"
+path="res://.godot/imported/HallBg.png-89bef7b6572850afc3924a9f7262187d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/hall/HallBg.png"
+dest_files=["res://.godot/imported/HallBg.png-89bef7b6572850afc3924a9f7262187d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewMap.png b/DungeonShooting_Godot/resource/sprite/map/PreviewMap.png
new file mode 100644
index 0000000..9a371b6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewMap.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewMap.png.import b/DungeonShooting_Godot/resource/sprite/map/PreviewMap.png.import
new file mode 100644
index 0000000..81123f1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewMap.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://18dira1me63t"
+path="res://.godot/imported/PreviewMap.png-69bdc8b1ae7987056ae4712f2e214162.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/PreviewMap.png"
+dest_files=["res://.godot/imported/PreviewMap.png-69bdc8b1ae7987056ae4712f2e214162.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png b/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png
new file mode 100644
index 0000000..f325155
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png.import b/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png.import
new file mode 100644
index 0000000..917949a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bqdrgtiyilkma"
+path="res://.godot/imported/PreviewMapShadow.png-3130416368f768977b52443934e01dc1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/PreviewMapShadow.png"
+dest_files=["res://.godot/imported/PreviewMapShadow.png-3130416368f768977b52443934e01dc1.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition.png b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition.png
index 13d2000..8f3d4af 100644
--- a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition.png
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition2.png b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition2.png
index 4c71a5f..f35e713 100644
--- a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition2.png
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition2.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition3.png b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition3.png
new file mode 100644
index 0000000..8c11d7d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition3.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition3.png.import b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition3.png.import
new file mode 100644
index 0000000..ef25f32
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition3.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://darrof8dpbr1t"
+path="res://.godot/imported/PreviewTransition3.png-fe787d7afcb36d01d034087e48b4cabb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/PreviewTransition3.png"
+dest_files=["res://.godot/imported/PreviewTransition3.png-fe787d7afcb36d01d034087e48b4cabb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition4.png b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition4.png
new file mode 100644
index 0000000..d225841
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition4.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition4.png.import b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition4.png.import
new file mode 100644
index 0000000..7895003
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition4.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dfhuexwjihrmj"
+path="res://.godot/imported/PreviewTransition4.png-a16e3d1cadcfa369e074f4745e39ff47.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/PreviewTransition4.png"
+dest_files=["res://.godot/imported/PreviewTransition4.png-a16e3d1cadcfa369e074f4745e39ff47.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition5.png b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition5.png
new file mode 100644
index 0000000..1732b21
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition5.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition5.png.import b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition5.png.import
new file mode 100644
index 0000000..65c399b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition5.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bf5fcyfevur3x"
+path="res://.godot/imported/PreviewTransition5.png-62bb59bbb2e2175f34891c69492a6e8a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/PreviewTransition5.png"
+dest_files=["res://.godot/imported/PreviewTransition5.png-62bb59bbb2e2175f34891c69492a6e8a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition6.png b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition6.png
new file mode 100644
index 0000000..2f3df49
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition6.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition6.png.import b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition6.png.import
new file mode 100644
index 0000000..ce59fce
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition6.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cofij3ar8uyar"
+path="res://.godot/imported/PreviewTransition6.png-0b6b35a233f1e280f49eef4313432187.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/PreviewTransition6.png"
+dest_files=["res://.godot/imported/PreviewTransition6.png-0b6b35a233f1e280f49eef4313432187.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/TerrainMask.png b/DungeonShooting_Godot/resource/sprite/map/TerrainMask.png
new file mode 100644
index 0000000..426bb52
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/TerrainMask.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/TerrainMask.png.import b/DungeonShooting_Godot/resource/sprite/map/TerrainMask.png.import
new file mode 100644
index 0000000..2a98c8b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/TerrainMask.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cvjj6jnmxgprw"
+path="res://.godot/imported/TerrainMask.png-15fc73cf90f6ff1547134db4982b53af.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/TerrainMask.png"
+dest_files=["res://.godot/imported/TerrainMask.png-15fc73cf90f6ff1547134db4982b53af.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/TerrainMask2.png b/DungeonShooting_Godot/resource/sprite/map/TerrainMask2.png
new file mode 100644
index 0000000..c45bc4d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/TerrainMask2.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/TerrainMask2.png.import b/DungeonShooting_Godot/resource/sprite/map/TerrainMask2.png.import
new file mode 100644
index 0000000..701ad63
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/TerrainMask2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bud6ah5xyey37"
+path="res://.godot/imported/TerrainMask2.png-1f32f81f65f05bff60b1eb56be6f0962.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/TerrainMask2.png"
+dest_files=["res://.godot/imported/TerrainMask2.png-1f32f81f65f05bff60b1eb56be6f0962.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/TerrainMask3.png b/DungeonShooting_Godot/resource/sprite/map/TerrainMask3.png
new file mode 100644
index 0000000..b841f40
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/TerrainMask3.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/TerrainMask3.png.import b/DungeonShooting_Godot/resource/sprite/map/TerrainMask3.png.import
new file mode 100644
index 0000000..a1ece12
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/TerrainMask3.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://chisfq2alcq16"
+path="res://.godot/imported/TerrainMask3.png-20aa76a7c73efe35531ad8d0722d181b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/TerrainMask3.png"
+dest_files=["res://.godot/imported/TerrainMask3.png-20aa76a7c73efe35531ad8d0722d181b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/TerrainMask4.png b/DungeonShooting_Godot/resource/sprite/map/TerrainMask4.png
new file mode 100644
index 0000000..8416b87
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/TerrainMask4.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/TerrainMask4.png.import b/DungeonShooting_Godot/resource/sprite/map/TerrainMask4.png.import
new file mode 100644
index 0000000..4c96cd0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/TerrainMask4.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dyshwhf3101em"
+path="res://.godot/imported/TerrainMask4.png-946931709433ef3d5ae9865b1065e17f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/TerrainMask4.png"
+dest_files=["res://.godot/imported/TerrainMask4.png-946931709433ef3d5ae9865b1065e17f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/WallTransition2.png b/DungeonShooting_Godot/resource/sprite/map/WallTransition2.png
index f01f30b..da720ec 100644
--- a/DungeonShooting_Godot/resource/sprite/map/WallTransition2.png
+++ b/DungeonShooting_Godot/resource/sprite/map/WallTransition2.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/door.png b/DungeonShooting_Godot/resource/sprite/map/door.png
deleted file mode 100644
index 5a02887..0000000
--- a/DungeonShooting_Godot/resource/sprite/map/door.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/door.png.import b/DungeonShooting_Godot/resource/sprite/map/door.png.import
deleted file mode 100644
index d2fa145..0000000
--- a/DungeonShooting_Godot/resource/sprite/map/door.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://f7d7qsdxqx28"
-path="res://.godot/imported/door.png-df89cda31b3be3b13dd6a96afcb773e6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/map/door.png"
-dest_files=["res://.godot/imported/door.png-df89cda31b3be3b13dd6a96afcb773e6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/door1_down.png b/DungeonShooting_Godot/resource/sprite/map/door1_down.png
deleted file mode 100644
index faeba59..0000000
--- a/DungeonShooting_Godot/resource/sprite/map/door1_down.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/door1_down.png.import b/DungeonShooting_Godot/resource/sprite/map/door1_down.png.import
deleted file mode 100644
index de95af2..0000000
--- a/DungeonShooting_Godot/resource/sprite/map/door1_down.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dviv44fhwvkb1"
-path="res://.godot/imported/door1_down.png-59ffc0993731fd627318f9402b22d199.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/map/door1_down.png"
-dest_files=["res://.godot/imported/door1_down.png-59ffc0993731fd627318f9402b22d199.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/door_close.png b/DungeonShooting_Godot/resource/sprite/map/door_close.png
new file mode 100644
index 0000000..02be975
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/door_close.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/door_close.png.import b/DungeonShooting_Godot/resource/sprite/map/door_close.png.import
new file mode 100644
index 0000000..017050f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/door_close.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dem4b762asjry"
+path="res://.godot/imported/door_close.png-1ecc9b3d8e11bebd90ca6a7c4e421947.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/door_close.png"
+dest_files=["res://.godot/imported/door_close.png-1ecc9b3d8e11bebd90ca6a7c4e421947.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/door_open.png b/DungeonShooting_Godot/resource/sprite/map/door_open.png
new file mode 100644
index 0000000..349313d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/door_open.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/door_open.png.import b/DungeonShooting_Godot/resource/sprite/map/door_open.png.import
new file mode 100644
index 0000000..a51bb11
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/door_open.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dv63neggj3xtl"
+path="res://.godot/imported/door_open.png-c046225698fe76d75f5eca3b5c10f1b6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/door_open.png"
+dest_files=["res://.godot/imported/door_open.png-c046225698fe76d75f5eca3b5c10f1b6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/door_open2.png b/DungeonShooting_Godot/resource/sprite/map/door_open2.png
new file mode 100644
index 0000000..c0780f0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/door_open2.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/door_open2.png.import b/DungeonShooting_Godot/resource/sprite/map/door_open2.png.import
new file mode 100644
index 0000000..5983c8e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/door_open2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://qhkn265gpa5w"
+path="res://.godot/imported/door_open2.png-73c5521e780280f61d4d40d025e4f229.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/door_open2.png"
+dest_files=["res://.godot/imported/door_open2.png-73c5521e780280f61d4d40d025e4f229.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/door_open3.png b/DungeonShooting_Godot/resource/sprite/map/door_open3.png
new file mode 100644
index 0000000..929b7f2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/door_open3.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/door_open3.png.import b/DungeonShooting_Godot/resource/sprite/map/door_open3.png.import
new file mode 100644
index 0000000..eb02d15
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/door_open3.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ddl5cjv08f7i1"
+path="res://.godot/imported/door_open3.png-0e6d51f809ebb5d34bf8caf6c9972fdd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/door_open3.png"
+dest_files=["res://.godot/imported/door_open3.png-0e6d51f809ebb5d34bf8caf6c9972fdd.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/door_up.png b/DungeonShooting_Godot/resource/sprite/map/door_up.png
new file mode 100644
index 0000000..9ff2ee4
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/door_up.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/door_up.png.import b/DungeonShooting_Godot/resource/sprite/map/door_up.png.import
new file mode 100644
index 0000000..b018503
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/door_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://gf8wefrp284o"
+path="res://.godot/imported/door_up.png-259e579b5cfa6c19dca2feec2294583b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/door_up.png"
+dest_files=["res://.godot/imported/door_up.png-259e579b5cfa6c19dca2feec2294583b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/prop/buff/BuffProp0001-export.png b/DungeonShooting_Godot/resource/sprite/prop/buff/BuffProp0001-export.png
new file mode 100644
index 0000000..3c960fd
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/prop/buff/BuffProp0001-export.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/prop/buff/BuffProp0001-export.png.import b/DungeonShooting_Godot/resource/sprite/prop/buff/BuffProp0001-export.png.import
new file mode 100644
index 0000000..8bc94d8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/prop/buff/BuffProp0001-export.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://gr6504bt0ein"
+path="res://.godot/imported/BuffProp0001-export.png-02580f5ffa8ac621f1aa19877d0fcc7b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/prop/buff/BuffProp0001-export.png"
+dest_files=["res://.godot/imported/BuffProp0001-export.png-02580f5ffa8ac621f1aa19877d0fcc7b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/scarecrow0001.png b/DungeonShooting_Godot/resource/sprite/role/scarecrow0001.png
new file mode 100644
index 0000000..8f764e8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/scarecrow0001.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/scarecrow0001.png.import b/DungeonShooting_Godot/resource/sprite/role/scarecrow0001.png.import
new file mode 100644
index 0000000..99fea38
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/scarecrow0001.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://daqqdil4cn0pn"
+path="res://.godot/imported/scarecrow0001.png-e7231d46124cae94ccf3ff7468ad2842.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/scarecrow0001.png"
+dest_files=["res://.godot/imported/scarecrow0001.png-e7231d46124cae94ccf3ff7468ad2842.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png b/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png
new file mode 100644
index 0000000..944ab2f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png.import b/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png.import
new file mode 100644
index 0000000..cfd03e8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/shootFire/ShotFire0003.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dw3amegyt2ehh"
+path="res://.godot/imported/ShotFire0003.png-96bf214260aefa07ecedf1608829c903.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/shootFire/ShotFire0003.png"
+dest_files=["res://.godot/imported/ShotFire0003.png-96bf214260aefa07ecedf1608829c903.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/CenterTool.png b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/CenterTool.png
index d980ce2..0ecd99e 100644
--- a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/CenterTool.png
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/CenterTool.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Delete2.png b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Delete2.png
new file mode 100644
index 0000000..dc4c9f9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Delete2.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Delete2.png.import b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Delete2.png.import
new file mode 100644
index 0000000..7130c78
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Delete2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://fkg21rtph51d"
+path="res://.godot/imported/Delete2.png-171dd9a0d65da0bd6c6e0b2740c3d2b7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/ui/commonIcon/Delete2.png"
+dest_files=["res://.godot/imported/Delete2.png-171dd9a0d65da0bd6c6e0b2740c3d2b7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Dice.png b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Dice.png
new file mode 100644
index 0000000..6a767cb
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Dice.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Dice.png.import b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Dice.png.import
new file mode 100644
index 0000000..c71ccef
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Dice.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cg837c2qhscrm"
+path="res://.godot/imported/Dice.png-bb14f0cc0f74e12e43728472a30e9dca.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/ui/commonIcon/Dice.png"
+dest_files=["res://.godot/imported/Dice.png-bb14f0cc0f74e12e43728472a30e9dca.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png
new file mode 100644
index 0000000..c0e1473
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png.import b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png.import
new file mode 100644
index 0000000..d08eb20
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Gold_10.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cysv0dpvm52xw"
+path="res://.godot/imported/Gold_10.png-90370d287f395564703b058392c1eb5b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/ui/commonIcon/Gold_10.png"
+dest_files=["res://.godot/imported/Gold_10.png-90370d287f395564703b058392c1eb5b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Import.png b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Import.png
new file mode 100644
index 0000000..c6a448e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Import.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Import.png.import b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Import.png.import
new file mode 100644
index 0000000..899bac9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Import.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://duos2p6if4kcp"
+path="res://.godot/imported/Import.png-3a038e8711ed54d5352d58a89d1736e0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/ui/commonIcon/Import.png"
+dest_files=["res://.godot/imported/Import.png-3a038e8711ed54d5352d58a89d1736e0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Missing.png b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Missing.png
new file mode 100644
index 0000000..1e41480
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Missing.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Missing.png.import b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Missing.png.import
new file mode 100644
index 0000000..69ac8ed
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Missing.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bit0o4oadgxr0"
+path="res://.godot/imported/Missing.png-a5d6965e8f7a3a0c127af8eb6ab18af8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/ui/commonIcon/Missing.png"
+dest_files=["res://.godot/imported/Missing.png-a5d6965e8f7a3a0c127af8eb6ab18af8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/PackageMark.png b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/PackageMark.png
index 67234a6..6f566be 100644
--- a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/PackageMark.png
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/PackageMark.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Success_mini.png b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Success_mini.png
new file mode 100644
index 0000000..f0ee233
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Success_mini.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Success_mini.png.import b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Success_mini.png.import
new file mode 100644
index 0000000..6de5da5
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/commonIcon/Success_mini.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://do3q1nsagxayh"
+path="res://.godot/imported/Success_mini.png-d6b53004d1673ea1eec0224fa98c69b6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/ui/commonIcon/Success_mini.png"
+dest_files=["res://.godot/imported/Success_mini.png-d6b53004d1673ea1eec0224fa98c69b6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/bow.png b/DungeonShooting_Godot/resource/sprite/weapon/bow.png
deleted file mode 100644
index 0654ef2..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/bow.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/bow.png.import b/DungeonShooting_Godot/resource/sprite/weapon/bow.png.import
deleted file mode 100644
index 412e93d..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/bow.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b4exgoa8t0wny"
-path="res://.godot/imported/bow.png-9ae685914082766e6dbcd1eaddb43b40.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/bow.png"
-dest_files=["res://.godot/imported/bow.png-9ae685914082766e6dbcd1eaddb43b40.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun1.png b/DungeonShooting_Godot/resource/sprite/weapon/gun1.png
deleted file mode 100644
index fc6c2ce..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun1.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun1.png.import
deleted file mode 100644
index 9964bdc..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://yn8t7ovmt4gj"
-path="res://.godot/imported/gun1.png-87777518c2382cd35c967ee32bf367ad.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/gun1.png"
-dest_files=["res://.godot/imported/gun1.png-87777518c2382cd35c967ee32bf367ad.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun2.png b/DungeonShooting_Godot/resource/sprite/weapon/gun2.png
deleted file mode 100644
index 4e0b9e6..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun2.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun2.png.import
deleted file mode 100644
index feb8eb6..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://5geiuvv6hyov"
-path="res://.godot/imported/gun2.png-78b331a2f245cfbe03b10da276435b64.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/gun2.png"
-dest_files=["res://.godot/imported/gun2.png-78b331a2f245cfbe03b10da276435b64.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun3.png b/DungeonShooting_Godot/resource/sprite/weapon/gun3.png
deleted file mode 100644
index 4f5aff6..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun3.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun3.png.import
deleted file mode 100644
index e5154c0..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c1tnh6laf172u"
-path="res://.godot/imported/gun3.png-d2428e7c1819cfb8a78ef87505aee0a3.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/gun3.png"
-dest_files=["res://.godot/imported/gun3.png-d2428e7c1819cfb8a78ef87505aee0a3.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun4.png b/DungeonShooting_Godot/resource/sprite/weapon/gun4.png
deleted file mode 100644
index c6b4b23..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun4.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun4.png.import
deleted file mode 100644
index 316b26d..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://xafbhgrxmosy"
-path="res://.godot/imported/gun4.png-f47ef44de364483b033f38a2d031303c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/gun4.png"
-dest_files=["res://.godot/imported/gun4.png-f47ef44de364483b033f38a2d031303c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun5.png b/DungeonShooting_Godot/resource/sprite/weapon/gun5.png
deleted file mode 100644
index 9845085..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun5.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun5.png.import
deleted file mode 100644
index 3e8d082..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c2eber1v7nb4j"
-path="res://.godot/imported/gun5.png-da05c9e18ddc46a7f72168cb9c25449c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/gun5.png"
-dest_files=["res://.godot/imported/gun5.png-da05c9e18ddc46a7f72168cb9c25449c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun6.png b/DungeonShooting_Godot/resource/sprite/weapon/gun6.png
deleted file mode 100644
index b4948f3..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun6.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun6.png.import
deleted file mode 100644
index 94f2abb..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://rlp8f2rgxlbf"
-path="res://.godot/imported/gun6.png-698dacce2603c9d452b55702363db8fc.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/gun6.png"
-dest_files=["res://.godot/imported/gun6.png-698dacce2603c9d452b55702363db8fc.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun7.png b/DungeonShooting_Godot/resource/sprite/weapon/gun7.png
deleted file mode 100644
index a4d1cea..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun7.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun7.png.import
deleted file mode 100644
index 92fb78d..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bs6ukbtcmxuiw"
-path="res://.godot/imported/gun7.png-9068807109603150cd0529909f81d6c1.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/gun7.png"
-dest_files=["res://.godot/imported/gun7.png-9068807109603150cd0529909f81d6c1.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun8.png b/DungeonShooting_Godot/resource/sprite/weapon/gun8.png
deleted file mode 100644
index 6186597..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun8.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun8.png.import
deleted file mode 100644
index ac3d0d8..0000000
--- a/DungeonShooting_Godot/resource/sprite/weapon/gun8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://2lcc20olyi5d"
-path="res://.godot/imported/gun8.png-a936b61cfb3713c19173bfa954b35ecd.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/weapon/gun8.png"
-dest_files=["res://.godot/imported/gun8.png-a936b61cfb3713c19173bfa954b35ecd.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png
new file mode 100644
index 0000000..e7997d0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png.import
new file mode 100644
index 0000000..a15a246
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7uvgno67d1aq"
+path="res://.godot/imported/Weapon0010.png-81895ae43c7fb76772f8c51d14f4b78e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0010/Weapon0010.png"
+dest_files=["res://.godot/imported/Weapon0010.png-81895ae43c7fb76772f8c51d14f4b78e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png
new file mode 100644
index 0000000..f4b5ae0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png.import
new file mode 100644
index 0000000..9844f79
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0010/Weapon0010_reloading.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://drhwb6yaqfocm"
+path="res://.godot/imported/Weapon0010_reloading.png-992da254579c65f8c0e81d226fb3f4c6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0010/Weapon0010_reloading.png"
+dest_files=["res://.godot/imported/Weapon0010_reloading.png-992da254579c65f8c0e81d226fb3f4c6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png
new file mode 100644
index 0000000..63eb45e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png.import
new file mode 100644
index 0000000..8eb64d2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0011/Weapon0011.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2nw07bxifdv6"
+path="res://.godot/imported/Weapon0011.png-4508f5f36303362ac300f62d27601f6d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0011/Weapon0011.png"
+dest_files=["res://.godot/imported/Weapon0011.png-4508f5f36303362ac300f62d27601f6d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0012/bow.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0012/bow.png
new file mode 100644
index 0000000..0654ef2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0012/bow.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0012/bow.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0012/bow.png.import
new file mode 100644
index 0000000..4616585
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0012/bow.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b4exgoa8t0wny"
+path="res://.godot/imported/bow.png-88942d9562b550ee90573ad2cdb4bb92.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0012/bow.png"
+dest_files=["res://.godot/imported/bow.png-88942d9562b550ee90573ad2cdb4bb92.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0013.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0013.png
new file mode 100644
index 0000000..d35a25d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0013.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0013.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0013.png.import
new file mode 100644
index 0000000..cc29c2c
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0013.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cphawlk2w0w6w"
+path="res://.godot/imported/weapon0013.png-ebf877c1ae1b135ec79dd1b6a7ae1165.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0013/weapon0013.png"
+dest_files=["res://.godot/imported/weapon0013.png-ebf877c1ae1b135ec79dd1b6a7ae1165.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014-export.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014-export.png
new file mode 100644
index 0000000..d7784a0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014-export.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014-export.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014-export.png.import
new file mode 100644
index 0000000..203d743
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014-export.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cuivqyq32tjan"
+path="res://.godot/imported/weapon0014-export.png-f1691475edd2682499f71dfe7d46110d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0013/weapon0014-export.png"
+dest_files=["res://.godot/imported/weapon0014-export.png-f1691475edd2682499f71dfe7d46110d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014.png
new file mode 100644
index 0000000..e111d83
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014.png.import
new file mode 100644
index 0000000..eb6d28b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0013/weapon0014.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://deqflkjkgkebd"
+path="res://.godot/imported/weapon0014.png-231a4437579a4dfcadef71f1a72de1ed.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0013/weapon0014.png"
+dest_files=["res://.godot/imported/weapon0014.png-231a4437579a4dfcadef71f1a72de1ed.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png
new file mode 100644
index 0000000..3113087
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png.import
new file mode 100644
index 0000000..af570f3
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0014/Weapon0014.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d27ax1aqghn0k"
+path="res://.godot/imported/Weapon0014.png-24bed8267d2ed0e312778ce83c4afa5a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0014/Weapon0014.png"
+dest_files=["res://.godot/imported/Weapon0014.png-24bed8267d2ed0e312778ce83c4afa5a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016.png
new file mode 100644
index 0000000..9c4ce9d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016.png.import
new file mode 100644
index 0000000..fbc4710
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://5yvr8ylxhqtf"
+path="res://.godot/imported/weapon0016.png-1662287584976db33d587029269c4cd5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0016/weapon0016.png"
+dest_files=["res://.godot/imported/weapon0016.png-1662287584976db33d587029269c4cd5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016_pull.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016_pull.png
new file mode 100644
index 0000000..40d4222
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016_pull.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016_pull.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016_pull.png.import
new file mode 100644
index 0000000..c2424b7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0016/weapon0016_pull.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://3nqcx8tshjpd"
+path="res://.godot/imported/weapon0016_pull.png-42e36ca2937d4c72bf6c0228101577ca.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0016/weapon0016_pull.png"
+dest_files=["res://.godot/imported/weapon0016_pull.png-42e36ca2937d4c72bf6c0228101577ca.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/gun5.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/gun5.png.import
new file mode 100644
index 0000000..2dcc1e9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/gun5.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c2eber1v7nb4j"
+path="res://.godot/imported/gun5.png-dde9a0cdc02e2378517e9d271797761c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0017/gun5.png"
+dest_files=["res://.godot/imported/gun5.png-dde9a0cdc02e2378517e9d271797761c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/seapon0017t.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/seapon0017t.png
new file mode 100644
index 0000000..38a30b9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/seapon0017t.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/seapon0017t.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/seapon0017t.png.import
new file mode 100644
index 0000000..04580b8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0017/seapon0017t.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://p1eortgblmp8"
+path="res://.godot/imported/seapon0017t.png-9abedc9a57c3bd415cd9551b1a39f0da.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0017/seapon0017t.png"
+dest_files=["res://.godot/imported/seapon0017t.png-9abedc9a57c3bd415cd9551b1a39f0da.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/gun6.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/gun6.png.import
new file mode 100644
index 0000000..c7dff5f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/gun6.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rlp8f2rgxlbf"
+path="res://.godot/imported/gun6.png-661eed06db2d1504a8e43f81aca88938.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0018/gun6.png"
+dest_files=["res://.godot/imported/gun6.png-661eed06db2d1504a8e43f81aca88938.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/weapon0018.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/weapon0018.png
new file mode 100644
index 0000000..d99a34b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/weapon0018.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/weapon0018.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/weapon0018.png.import
new file mode 100644
index 0000000..91972d5
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0018/weapon0018.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://o2oqd1wnm57h"
+path="res://.godot/imported/weapon0018.png-9a3780ff4c33d7f9e469624682fd58c4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0018/weapon0018.png"
+dest_files=["res://.godot/imported/weapon0018.png-9a3780ff4c33d7f9e469624682fd58c4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/gun7.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/gun7.png.import
new file mode 100644
index 0000000..f37ec50
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/gun7.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bs6ukbtcmxuiw"
+path="res://.godot/imported/gun7.png-f1428c4b8a1ac62dafacd70a35e5813b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0019/gun7.png"
+dest_files=["res://.godot/imported/gun7.png-f1428c4b8a1ac62dafacd70a35e5813b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/weapon0019.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/weapon0019.png
new file mode 100644
index 0000000..ef3da63
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/weapon0019.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/weapon0019.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/weapon0019.png.import
new file mode 100644
index 0000000..f6f6e85
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0019/weapon0019.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dxqkog61v8lyj"
+path="res://.godot/imported/weapon0019.png-b7a74db5f050400f0cbda8fb3f8911af.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0019/weapon0019.png"
+dest_files=["res://.godot/imported/weapon0019.png-b7a74db5f050400f0cbda8fb3f8911af.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/gun8.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/gun8.png.import
new file mode 100644
index 0000000..6b19bf3
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/gun8.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://2lcc20olyi5d"
+path="res://.godot/imported/gun8.png-981667783ada37a774730057971adda6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0020/gun8.png"
+dest_files=["res://.godot/imported/gun8.png-981667783ada37a774730057971adda6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020-export.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020-export.png
new file mode 100644
index 0000000..8321c61
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020-export.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020-export.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020-export.png.import
new file mode 100644
index 0000000..3c24fb1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020-export.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://btnj62x7f7g0o"
+path="res://.godot/imported/weapon0020-export.png-7be73470641614cd8714bd63b993d747.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0020/weapon0020-export.png"
+dest_files=["res://.godot/imported/weapon0020-export.png-7be73470641614cd8714bd63b993d747.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020.png
new file mode 100644
index 0000000..6e2d69d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020.png.import
new file mode 100644
index 0000000..7dcc588
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0020/weapon0020.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ctrjjcbdp3tta"
+path="res://.godot/imported/weapon0020.png-9f128bf4442aa1480d9ec45175bc4f90.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0020/weapon0020.png"
+dest_files=["res://.godot/imported/weapon0020.png-9f128bf4442aa1480d9ec45175bc4f90.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0021/weapon0021.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0021/weapon0021.png
new file mode 100644
index 0000000..b95c827
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0021/weapon0021.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0021/weapon0021.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0021/weapon0021.png.import
new file mode 100644
index 0000000..525b391
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0021/weapon0021.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://1flmled7wnta"
+path="res://.godot/imported/weapon0021.png-8521cdceaba26d86490558b8c26e718a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0021/weapon0021.png"
+dest_files=["res://.godot/imported/weapon0021.png-8521cdceaba26d86490558b8c26e718a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0022/weapon0022.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0022/weapon0022.png
new file mode 100644
index 0000000..a3d5317
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0022/weapon0022.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0022/weapon0022.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0022/weapon0022.png.import
new file mode 100644
index 0000000..da4a121
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0022/weapon0022.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://chbegajgfo3wy"
+path="res://.godot/imported/weapon0022.png-5596c5876bee1aeaafafc48d08a6158a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0022/weapon0022.png"
+dest_files=["res://.godot/imported/weapon0022.png-5596c5876bee1aeaafafc48d08a6158a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0023/weapon0023.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0023/weapon0023.png
new file mode 100644
index 0000000..246cd6f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0023/weapon0023.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0023/weapon0023.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0023/weapon0023.png.import
new file mode 100644
index 0000000..4a33e4e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0023/weapon0023.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dqpwge7clvpae"
+path="res://.godot/imported/weapon0023.png-1c0cadf8abfe1a7081a7bee9cce9fe2d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0023/weapon0023.png"
+dest_files=["res://.godot/imported/weapon0023.png-1c0cadf8abfe1a7081a7bee9cce9fe2d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0030/weapon0030.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0030/weapon0030.png
new file mode 100644
index 0000000..610a7fd
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0030/weapon0030.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0030/weapon0030.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0030/weapon0030.png.import
new file mode 100644
index 0000000..ccaa46b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0030/weapon0030.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://wcuv5oy17ede"
+path="res://.godot/imported/weapon0030.png-d068b0866dcc9b9002082be1954c20e8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0030/weapon0030.png"
+dest_files=["res://.godot/imported/weapon0030.png-d068b0866dcc9b9002082be1954c20e8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0032/weapon0032.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0032/weapon0032.png
new file mode 100644
index 0000000..760696c
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0032/weapon0032.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0032/weapon0032.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0032/weapon0032.png.import
new file mode 100644
index 0000000..04b1f8c
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0032/weapon0032.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://sqq2a5o3n8b"
+path="res://.godot/imported/weapon0032.png-81b32a2cc96540e73ceef21bc1d963db.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0032/weapon0032.png"
+dest_files=["res://.godot/imported/weapon0032.png-81b32a2cc96540e73ceef21bc1d963db.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0033/weapon0033-export.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0033/weapon0033-export.png.import
new file mode 100644
index 0000000..070fb1b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0033/weapon0033-export.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://j6xh6hcuppke"
+path="res://.godot/imported/weapon0033-export.png-877b29fc1053c32f952b6d4f13685bab.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0033/weapon0033-export.png"
+dest_files=["res://.godot/imported/weapon0033-export.png-877b29fc1053c32f952b6d4f13685bab.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0033/weapon0033.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0033/weapon0033.png
new file mode 100644
index 0000000..17e1166
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0033/weapon0033.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0033/weapon0033.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0033/weapon0033.png.import
new file mode 100644
index 0000000..b84bd9c
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0033/weapon0033.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://1htv2be7irx3"
+path="res://.godot/imported/weapon0033.png-041de9eae10d13aa43f148b0e0788e8f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0033/weapon0033.png"
+dest_files=["res://.godot/imported/weapon0033.png-041de9eae10d13aa43f148b0e0788e8f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0034/weapon0034.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0034/weapon0034.png
new file mode 100644
index 0000000..e911279
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0034/weapon0034.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0034/weapon0034.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0034/weapon0034.png.import
new file mode 100644
index 0000000..c047c98
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0034/weapon0034.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://u3mv4mk30uoh"
+path="res://.godot/imported/weapon0034.png-8e09fc5fa56b0dc44972264beacfb495.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0034/weapon0034.png"
+dest_files=["res://.godot/imported/weapon0034.png-8e09fc5fa56b0dc44972264beacfb495.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0035/weapon0035.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0035/weapon0035.png
new file mode 100644
index 0000000..074e06e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0035/weapon0035.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0035/weapon0035.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0035/weapon0035.png.import
new file mode 100644
index 0000000..689f199
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0035/weapon0035.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dflwuph4be4pi"
+path="res://.godot/imported/weapon0035.png-7d4bb765333f7d7bdb676b5581fcc39b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0035/weapon0035.png"
+dest_files=["res://.godot/imported/weapon0035.png-7d4bb765333f7d7bdb676b5581fcc39b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0036/weapon0036.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0036/weapon0036.png
new file mode 100644
index 0000000..c9139e6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0036/weapon0036.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0036/weapon0036.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0036/weapon0036.png.import
new file mode 100644
index 0000000..93ad6b4
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0036/weapon0036.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://wugxu2mmlhwo"
+path="res://.godot/imported/weapon0036.png-87e18b3411eaa14c261078fb9cc36560.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0036/weapon0036.png"
+dest_files=["res://.godot/imported/weapon0036.png-87e18b3411eaa14c261078fb9cc36560.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0037/weapon0037.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0037/weapon0037.png
new file mode 100644
index 0000000..34bf16e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0037/weapon0037.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0037/weapon0037.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0037/weapon0037.png.import
new file mode 100644
index 0000000..70cefab
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0037/weapon0037.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cyf6n3w7btjql"
+path="res://.godot/imported/weapon0037.png-4bb6b5c3a0b7638679c0ce4a85ff9db7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0037/weapon0037.png"
+dest_files=["res://.godot/imported/weapon0037.png-4bb6b5c3a0b7638679c0ce4a85ff9db7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.1.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.1.png
new file mode 100644
index 0000000..69c5bc0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.1.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.1.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.1.png.import
new file mode 100644
index 0000000..068100d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c25bgxmy16gty"
+path="res://.godot/imported/weapon0038.1.png-24ebb560742bfd964ce8c5a8466b26f7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0038/weapon0038.1.png"
+dest_files=["res://.godot/imported/weapon0038.1.png-24ebb560742bfd964ce8c5a8466b26f7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.png
new file mode 100644
index 0000000..34ed391
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.png.import
new file mode 100644
index 0000000..7832b4e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0038/weapon0038.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bcn1tkwk4tbt5"
+path="res://.godot/imported/weapon0038.png-4d9b2d98379e2f0fe9903b448ef9a65f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0038/weapon0038.png"
+dest_files=["res://.godot/imported/weapon0038.png-4d9b2d98379e2f0fe9903b448ef9a65f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039.png
new file mode 100644
index 0000000..b285286
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039.png.import
new file mode 100644
index 0000000..ef5196b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://0wxp84d740v4"
+path="res://.godot/imported/weapon0039.png-ecee11ba46e7c40fd6b69832e60fbb47.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0039/weapon0039.png"
+dest_files=["res://.godot/imported/weapon0039.png-ecee11ba46e7c40fd6b69832e60fbb47.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git "a/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039\357\274\2101\357\274\211.png" "b/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039\357\274\2101\357\274\211.png"
new file mode 100644
index 0000000..314e27c
--- /dev/null
+++ "b/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039\357\274\2101\357\274\211.png"
Binary files differ
diff --git "a/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039\357\274\2101\357\274\211.png.import" "b/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039\357\274\2101\357\274\211.png.import"
new file mode 100644
index 0000000..bca25f5
--- /dev/null
+++ "b/DungeonShooting_Godot/resource/sprite/weapon/weapon0039/weapon0039\357\274\2101\357\274\211.png.import"
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ce0w3823krfp5"
+path="res://.godot/imported/weapon0039(1).png-a6bff37000990178b6ef6e6a94132c7c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0039/weapon0039(1).png"
+dest_files=["res://.godot/imported/weapon0039(1).png-a6bff37000990178b6ef6e6a94132c7c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040,1.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040,1.png
new file mode 100644
index 0000000..c8f223f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040,1.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040,1.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040,1.png.import
new file mode 100644
index 0000000..633e3ff
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040,1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bkoa7v301oe7k"
+path="res://.godot/imported/weapon0040,1.png-df36d158904dfa9be2640e9a53c3435d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0040/weapon0040,1.png"
+dest_files=["res://.godot/imported/weapon0040,1.png-df36d158904dfa9be2640e9a53c3435d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040.png
new file mode 100644
index 0000000..37a9f44
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040.png.import
new file mode 100644
index 0000000..f7a45da
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0040/weapon0040.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://vlevxg7d4iud"
+path="res://.godot/imported/weapon0040.png-4da3559c3eed5002c7edb38f191f6aa5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0040/weapon0040.png"
+dest_files=["res://.godot/imported/weapon0040.png-4da3559c3eed5002c7edb38f191f6aa5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0041/weapon0041.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0041/weapon0041.png
new file mode 100644
index 0000000..05fdade
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0041/weapon0041.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0041/weapon0041.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0041/weapon0041.png.import
new file mode 100644
index 0000000..79f93da
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0041/weapon0041.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dgpt5sox41had"
+path="res://.godot/imported/weapon0041.png-bc6e68522a6fc0223f80d06af365d475.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0041/weapon0041.png"
+dest_files=["res://.godot/imported/weapon0041.png-bc6e68522a6fc0223f80d06af365d475.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0042/weapon0042.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0042/weapon0042.png
new file mode 100644
index 0000000..4d265af
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0042/weapon0042.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0042/weapon0042.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0042/weapon0042.png.import
new file mode 100644
index 0000000..7e67d03
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0042/weapon0042.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bgd5d4wsyphco"
+path="res://.godot/imported/weapon0042.png-0cc626b5ea8c951effcccb723b71168a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0042/weapon0042.png"
+dest_files=["res://.godot/imported/weapon0042.png-0cc626b5ea8c951effcccb723b71168a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0043/weapon0043.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0043/weapon0043.png
new file mode 100644
index 0000000..6019e03
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0043/weapon0043.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0043/weapon0043.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0043/weapon0043.png.import
new file mode 100644
index 0000000..da1ad83
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0043/weapon0043.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bq5tcaqju0icj"
+path="res://.godot/imported/weapon0043.png-245ddd1635cbc7abe5e9f90f5d5a459d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0043/weapon0043.png"
+dest_files=["res://.godot/imported/weapon0043.png-245ddd1635cbc7abe5e9f90f5d5a459d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0044/weapon0044.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0044/weapon0044.png
new file mode 100644
index 0000000..75d31d7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0044/weapon0044.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0044/weapon0044.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0044/weapon0044.png.import
new file mode 100644
index 0000000..0f40edf
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0044/weapon0044.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ckv2qfcbuyw27"
+path="res://.godot/imported/weapon0044.png-0a168ddd1a230f76db91625c3fe9e7d5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0044/weapon0044.png"
+dest_files=["res://.godot/imported/weapon0044.png-0a168ddd1a230f76db91625c3fe9e7d5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/weapon0045.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/weapon0045.png
new file mode 100644
index 0000000..b9861ff
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/weapon0045.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/weapon0045.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/weapon0045.png.import
new file mode 100644
index 0000000..97d849c
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/weapon0045.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cogtgq1aoa0xw"
+path="res://.godot/imported/weapon0045.png-86861d1626d9c0b9f4d2632e7a763f63.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0045/weapon0045.png"
+dest_files=["res://.godot/imported/weapon0045.png-86861d1626d9c0b9f4d2632e7a763f63.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git "a/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/\345\255\220\345\274\271.png" "b/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/\345\255\220\345\274\271.png"
new file mode 100644
index 0000000..74ef08e
--- /dev/null
+++ "b/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/\345\255\220\345\274\271.png"
Binary files differ
diff --git "a/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/\345\255\220\345\274\271.png.import" "b/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/\345\255\220\345\274\271.png.import"
new file mode 100644
index 0000000..2fd0958
--- /dev/null
+++ "b/DungeonShooting_Godot/resource/sprite/weapon/weapon0045/\345\255\220\345\274\271.png.import"
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://csyqaglrxpus0"
+path="res://.godot/imported/子弹.png-50072d5fb54502db90827299ba900a43.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0045/子弹.png"
+dest_files=["res://.godot/imported/子弹.png-50072d5fb54502db90827299ba900a43.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0046/weapon0046.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0046/weapon0046.png
new file mode 100644
index 0000000..04f042d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0046/weapon0046.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0046/weapon0046.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0046/weapon0046.png.import
new file mode 100644
index 0000000..0ca72d6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0046/weapon0046.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dhyb3122qx50y"
+path="res://.godot/imported/weapon0046.png-978eee461209b567302df2ed7ad70035.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0046/weapon0046.png"
+dest_files=["res://.godot/imported/weapon0046.png-978eee461209b567302df2ed7ad70035.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon29/weapon0029.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon29/weapon0029.png
new file mode 100644
index 0000000..455b075
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon29/weapon0029.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon29/weapon0029.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon29/weapon0029.png.import
new file mode 100644
index 0000000..e681ce2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon29/weapon0029.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dph00sfp1wksx"
+path="res://.godot/imported/weapon0029.png-37dc40dbf3de56fbcf49fc241c201f2d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon29/weapon0029.png"
+dest_files=["res://.godot/imported/weapon0029.png-37dc40dbf3de56fbcf49fc241c201f2d.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon31/weapon0031.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon31/weapon0031.png
new file mode 100644
index 0000000..03369e9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon31/weapon0031.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon31/weapon0031.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon31/weapon0031.png.import
new file mode 100644
index 0000000..49a2bc5
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon31/weapon0031.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://fbe0jp7o8ccq"
+path="res://.godot/imported/weapon0031.png-778cb9a417b671f93729b391300c4db6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon31/weapon0031.png"
+dest_files=["res://.godot/imported/weapon0031.png-778cb9a417b671f93729b391300c4db6.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0006.tres b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0006.tres
new file mode 100644
index 0000000..4e845c6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0006.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://dx4t45bq8ehhq"]
+
+[ext_resource type="Texture2D" uid="uid://bn8k07n2y6lmr" path="res://resource/sprite/bullet/normal/bullet0006.png" id="1_xjtjd"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_xjtjd")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0007.tres b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0007.tres
new file mode 100644
index 0000000..c719795
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0007.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://bkwoy70bnm74k"]
+
+[ext_resource type="Texture2D" uid="uid://ktgwsn6cecn1" path="res://resource/sprite/bullet/normal/bullet0007.png" id="1_5lygh"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_5lygh")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0008.tres b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0008.tres
new file mode 100644
index 0000000..caf8579
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0008.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://ubdvau75andr"]
+
+[ext_resource type="Texture2D" uid="uid://cf6jtee53ru6t" path="res://resource/sprite/bullet/normal/bullet0008.png" id="1_dwc4l"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_dwc4l")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0009.tres b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0009.tres
new file mode 100644
index 0000000..2941488
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/bullet/Bullet0009.tres
@@ -0,0 +1,42 @@
+[gd_resource type="SpriteFrames" load_steps=5 format=3 uid="uid://cyg3uvbakan08"]
+
+[ext_resource type="Texture2D" uid="uid://c5b2dmsxgv1p8" path="res://resource/sprite/bullet/normal/bullet0009.png" id="1_v33wk"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_n6dlo"]
+atlas = ExtResource("1_v33wk")
+region = Rect2(0, 0, 28, 7)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_b3wh3"]
+atlas = ExtResource("1_v33wk")
+region = Rect2(28, 0, 28, 7)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_bdaam"]
+atlas = ExtResource("1_v33wk")
+region = Rect2(56, 0, 28, 7)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_n6dlo")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_b3wh3")
+}],
+"loop": false,
+"name": &"half_end",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_bdaam")
+}],
+"loop": false,
+"name": &"half_start",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_E_Down.tres b/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_E_Down.tres
index 9669b44..fbcb708 100644
--- a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_E_Down.tres
+++ b/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_E_Down.tres
@@ -1,98 +1,14 @@
-[gd_resource type="SpriteFrames" load_steps=13 format=3 uid="uid://b34tddsmqnj8s"]
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://b34tddsmqnj8s"]
-[ext_resource type="Texture2D" uid="uid://f7d7qsdxqx28" path="res://resource/sprite/map/door.png" id="1_nc77d"]
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_4o2e1"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(128, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_d1gjl"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(96, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_g4rm7"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(64, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_5d5bq"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(32, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ekma7"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(0, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_7y01b"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(128, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_jm1e2"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(0, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_1bb60"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(32, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_oylje"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(64, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_truep"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(96, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_lfr82"]
-atlas = ExtResource("1_nc77d")
-region = Rect2(128, 104, 32, 52)
+[ext_resource type="Texture2D" uid="uid://gf8wefrp284o" path="res://resource/sprite/map/door_up.png" id="1_vlsx2"]
[resource]
animations = [{
"frames": [{
"duration": 1.0,
-"texture": SubResource("AtlasTexture_4o2e1")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_d1gjl")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_g4rm7")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_5d5bq")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ekma7")
-}],
-"loop": false,
-"name": &"closeDoor",
-"speed": 10.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_7y01b")
+"texture": ExtResource("1_vlsx2")
}],
"loop": false,
"name": &"default",
"speed": 10.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_jm1e2")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_1bb60")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_oylje")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_truep")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_lfr82")
-}],
-"loop": false,
-"name": &"openDoor",
-"speed": 10.0
}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_E_Up.tres b/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_E_Up.tres
index 8e74aa6..3085acb 100644
--- a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_E_Up.tres
+++ b/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_E_Up.tres
@@ -1,68 +1,197 @@
-[gd_resource type="SpriteFrames" load_steps=13 format=3 uid="uid://3ps6h2f54qa5"]
+[gd_resource type="SpriteFrames" load_steps=34 format=3 uid="uid://3ps6h2f54qa5"]
-[ext_resource type="Texture2D" uid="uid://f7d7qsdxqx28" path="res://resource/sprite/map/door.png" id="2_u3fum"]
+[ext_resource type="Texture2D" uid="uid://dem4b762asjry" path="res://resource/sprite/map/door_close.png" id="1_5ymra"]
+[ext_resource type="Texture2D" uid="uid://dv63neggj3xtl" path="res://resource/sprite/map/door_open.png" id="2_niclj"]
-[sub_resource type="AtlasTexture" id="AtlasTexture_8f67t"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(128, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_6i65d"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(64, 0, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_qlja2"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(96, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_gvd0a"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(192, 0, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_glno6"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(64, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_kbtel"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(320, 0, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_frnbt"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(32, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_4o7p2"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(448, 0, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_2ytfc"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(0, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_2urqt"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(576, 0, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_oyi3c"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(128, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_pcxt2"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(64, 80, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_e68us"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(0, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_vuqy3"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(192, 80, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_e7wqp"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(32, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_abxng"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(320, 80, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_qcket"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(64, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_lstal"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(448, 80, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_genp5"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(96, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_0l1oe"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(576, 80, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_krdph"]
-atlas = ExtResource("2_u3fum")
-region = Rect2(128, 52, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_rxxco"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(64, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_bbdxx"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(192, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0ig2j"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(320, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_y6ht0"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(448, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7b7xb"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(576, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_yxxxi"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(64, 240, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_g75mr"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(192, 240, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_1467k"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(320, 240, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2o7eb"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(448, 240, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_yobme"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(576, 240, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ylcxs"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(64, 320, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ohx3w"]
+atlas = ExtResource("1_5ymra")
+region = Rect2(64, 0, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_edun5"]
+atlas = ExtResource("2_niclj")
+region = Rect2(64, 0, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_udxe4"]
+atlas = ExtResource("2_niclj")
+region = Rect2(192, 0, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_knqv5"]
+atlas = ExtResource("2_niclj")
+region = Rect2(320, 0, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_1d1rp"]
+atlas = ExtResource("2_niclj")
+region = Rect2(64, 80, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ki550"]
+atlas = ExtResource("2_niclj")
+region = Rect2(192, 80, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_8tfix"]
+atlas = ExtResource("2_niclj")
+region = Rect2(320, 80, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_jvsmj"]
+atlas = ExtResource("2_niclj")
+region = Rect2(64, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_mk01a"]
+atlas = ExtResource("2_niclj")
+region = Rect2(192, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j6b5g"]
+atlas = ExtResource("2_niclj")
+region = Rect2(320, 160, 64, 80)
[resource]
animations = [{
"frames": [{
"duration": 1.0,
-"texture": SubResource("AtlasTexture_8f67t")
+"texture": SubResource("AtlasTexture_6i65d")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_qlja2")
+"texture": SubResource("AtlasTexture_gvd0a")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_glno6")
+"texture": SubResource("AtlasTexture_kbtel")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_frnbt")
+"texture": SubResource("AtlasTexture_4o7p2")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_2ytfc")
+"texture": SubResource("AtlasTexture_2urqt")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_pcxt2")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_vuqy3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_abxng")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_lstal")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0l1oe")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_rxxco")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_bbdxx")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0ig2j")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_y6ht0")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7b7xb")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_yxxxi")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_g75mr")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_1467k")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2o7eb")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_yobme")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ylcxs")
}],
"loop": false,
"name": &"closeDoor",
@@ -70,7 +199,7 @@
}, {
"frames": [{
"duration": 1.0,
-"texture": SubResource("AtlasTexture_oyi3c")
+"texture": SubResource("AtlasTexture_ohx3w")
}],
"loop": false,
"name": &"default",
@@ -78,19 +207,31 @@
}, {
"frames": [{
"duration": 1.0,
-"texture": SubResource("AtlasTexture_e68us")
+"texture": SubResource("AtlasTexture_edun5")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_e7wqp")
+"texture": SubResource("AtlasTexture_udxe4")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_qcket")
+"texture": SubResource("AtlasTexture_knqv5")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_genp5")
+"texture": SubResource("AtlasTexture_1d1rp")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_krdph")
+"texture": SubResource("AtlasTexture_ki550")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8tfix")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_jvsmj")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_mk01a")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j6b5g")
}],
"loop": false,
"name": &"openDoor",
diff --git a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_N.tres b/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_N.tres
index 1d7086c..91599bd 100644
--- a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_N.tres
+++ b/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_N.tres
@@ -1,68 +1,197 @@
-[gd_resource type="SpriteFrames" load_steps=13 format=3 uid="uid://xs72aopsgpg6"]
+[gd_resource type="SpriteFrames" load_steps=34 format=3 uid="uid://xs72aopsgpg6"]
-[ext_resource type="Texture2D" uid="uid://f7d7qsdxqx28" path="res://resource/sprite/map/door.png" id="1_6mlq3"]
+[ext_resource type="Texture2D" uid="uid://dem4b762asjry" path="res://resource/sprite/map/door_close.png" id="1_ei0vs"]
+[ext_resource type="Texture2D" uid="uid://dv63neggj3xtl" path="res://resource/sprite/map/door_open.png" id="2_jmlqx"]
-[sub_resource type="AtlasTexture" id="AtlasTexture_jiqrp"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(288, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_4ljkw"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(0, 0, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_id4d1"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(256, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_gsbr3"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(128, 0, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_dun04"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(224, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_3xyad"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(256, 0, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_1rfr2"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(192, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_3rhje"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(384, 0, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_c8ka5"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(160, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_scmwd"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(512, 0, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_3jbbr"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(288, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_yahdi"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(0, 80, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_xuwj8"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(160, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_b3qcg"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(128, 80, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_xx0rn"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(192, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_btbte"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(256, 80, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_5h1on"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(224, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_0b28w"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(384, 80, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_rwd5l"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(256, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_6ukg1"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(512, 80, 64, 80)
-[sub_resource type="AtlasTexture" id="AtlasTexture_wov8g"]
-atlas = ExtResource("1_6mlq3")
-region = Rect2(288, 0, 32, 52)
+[sub_resource type="AtlasTexture" id="AtlasTexture_jiet8"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(0, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_r28tm"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(128, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_jkf57"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(256, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_frdgf"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(384, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_573yg"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(512, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_xafye"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(0, 240, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_tsxiw"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(128, 240, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_67ks6"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(256, 240, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_plgh2"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(384, 240, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_68xl6"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(512, 240, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_40vaw"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(0, 320, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_4cyi6"]
+atlas = ExtResource("1_ei0vs")
+region = Rect2(0, 0, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_y1j0t"]
+atlas = ExtResource("2_jmlqx")
+region = Rect2(0, 0, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0lg71"]
+atlas = ExtResource("2_jmlqx")
+region = Rect2(128, 0, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_al4vf"]
+atlas = ExtResource("2_jmlqx")
+region = Rect2(256, 0, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_odhj1"]
+atlas = ExtResource("2_jmlqx")
+region = Rect2(0, 80, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ammds"]
+atlas = ExtResource("2_jmlqx")
+region = Rect2(128, 80, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_rt3bg"]
+atlas = ExtResource("2_jmlqx")
+region = Rect2(256, 80, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_3qiys"]
+atlas = ExtResource("2_jmlqx")
+region = Rect2(0, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_smh0c"]
+atlas = ExtResource("2_jmlqx")
+region = Rect2(128, 160, 64, 80)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ewvdi"]
+atlas = ExtResource("2_jmlqx")
+region = Rect2(256, 160, 64, 80)
[resource]
animations = [{
"frames": [{
"duration": 1.0,
-"texture": SubResource("AtlasTexture_jiqrp")
+"texture": SubResource("AtlasTexture_4ljkw")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_id4d1")
+"texture": SubResource("AtlasTexture_gsbr3")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_dun04")
+"texture": SubResource("AtlasTexture_3xyad")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_1rfr2")
+"texture": SubResource("AtlasTexture_3rhje")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_c8ka5")
+"texture": SubResource("AtlasTexture_scmwd")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_yahdi")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_b3qcg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_btbte")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0b28w")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_6ukg1")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_jiet8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_r28tm")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_jkf57")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_frdgf")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_573yg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_xafye")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_tsxiw")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_67ks6")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_plgh2")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_68xl6")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_40vaw")
}],
"loop": false,
"name": &"closeDoor",
@@ -70,7 +199,7 @@
}, {
"frames": [{
"duration": 1.0,
-"texture": SubResource("AtlasTexture_3jbbr")
+"texture": SubResource("AtlasTexture_4cyi6")
}],
"loop": false,
"name": &"default",
@@ -78,19 +207,31 @@
}, {
"frames": [{
"duration": 1.0,
-"texture": SubResource("AtlasTexture_xuwj8")
+"texture": SubResource("AtlasTexture_y1j0t")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_xx0rn")
+"texture": SubResource("AtlasTexture_0lg71")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_5h1on")
+"texture": SubResource("AtlasTexture_al4vf")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_rwd5l")
+"texture": SubResource("AtlasTexture_odhj1")
}, {
"duration": 1.0,
-"texture": SubResource("AtlasTexture_wov8g")
+"texture": SubResource("AtlasTexture_ammds")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_rt3bg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_3qiys")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_smh0c")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ewvdi")
}],
"loop": false,
"name": &"openDoor",
diff --git a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_S.tres b/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_S.tres
deleted file mode 100644
index 5988cc3..0000000
--- a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_S.tres
+++ /dev/null
@@ -1,98 +0,0 @@
-[gd_resource type="SpriteFrames" load_steps=13 format=3 uid="uid://ciqijjxup5356"]
-
-[ext_resource type="Texture2D" uid="uid://f7d7qsdxqx28" path="res://resource/sprite/map/door.png" id="1_46oik"]
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_w2vr1"]
-atlas = ExtResource("1_46oik")
-region = Rect2(128, 0, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_3akio"]
-atlas = ExtResource("1_46oik")
-region = Rect2(96, 0, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_xxpwm"]
-atlas = ExtResource("1_46oik")
-region = Rect2(64, 0, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_vjx8u"]
-atlas = ExtResource("1_46oik")
-region = Rect2(32, 0, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_clyvp"]
-atlas = ExtResource("1_46oik")
-region = Rect2(0, 0, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_1vfst"]
-atlas = ExtResource("1_46oik")
-region = Rect2(128, 0, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_8wrb5"]
-atlas = ExtResource("1_46oik")
-region = Rect2(0, 0, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_nwt0b"]
-atlas = ExtResource("1_46oik")
-region = Rect2(32, 0, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ohokj"]
-atlas = ExtResource("1_46oik")
-region = Rect2(64, 0, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_wqsd1"]
-atlas = ExtResource("1_46oik")
-region = Rect2(96, 0, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_i6sro"]
-atlas = ExtResource("1_46oik")
-region = Rect2(128, 0, 32, 52)
-
-[resource]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_w2vr1")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_3akio")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_xxpwm")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_vjx8u")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_clyvp")
-}],
-"loop": false,
-"name": &"closeDoor",
-"speed": 10.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_1vfst")
-}],
-"loop": false,
-"name": &"default",
-"speed": 10.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_8wrb5")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_nwt0b")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ohokj")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_wqsd1")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_i6sro")
-}],
-"loop": false,
-"name": &"openDoor",
-"speed": 10.0
-}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_W_Down.tres b/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_W_Down.tres
deleted file mode 100644
index 86fc6ad..0000000
--- a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_W_Down.tres
+++ /dev/null
@@ -1,98 +0,0 @@
-[gd_resource type="SpriteFrames" load_steps=13 format=3 uid="uid://qq3h0mh4r12i"]
-
-[ext_resource type="Texture2D" uid="uid://f7d7qsdxqx28" path="res://resource/sprite/map/door.png" id="1_b4js3"]
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_526no"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(288, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_84kmd"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(256, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_km4i6"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(224, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_wtul1"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(192, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_vbu5n"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(160, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_yxx5v"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(288, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_4ncdo"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(160, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_bxfu1"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(192, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_8082a"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(224, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_mjuqg"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(256, 104, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_rc634"]
-atlas = ExtResource("1_b4js3")
-region = Rect2(288, 104, 32, 52)
-
-[resource]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_526no")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_84kmd")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_km4i6")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_wtul1")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_vbu5n")
-}],
-"loop": false,
-"name": &"closeDoor",
-"speed": 10.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_yxx5v")
-}],
-"loop": false,
-"name": &"default",
-"speed": 10.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_4ncdo")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_bxfu1")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_8082a")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_mjuqg")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_rc634")
-}],
-"loop": false,
-"name": &"openDoor",
-"speed": 10.0
-}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_W_Up.tres b/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_W_Up.tres
deleted file mode 100644
index 6c18e9e..0000000
--- a/DungeonShooting_Godot/resource/spriteFrames/other/RoomDoor_W_Up.tres
+++ /dev/null
@@ -1,98 +0,0 @@
-[gd_resource type="SpriteFrames" load_steps=13 format=3 uid="uid://cpdt5ywrsruu3"]
-
-[ext_resource type="Texture2D" uid="uid://f7d7qsdxqx28" path="res://resource/sprite/map/door.png" id="2_klr41"]
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_skb20"]
-atlas = ExtResource("2_klr41")
-region = Rect2(288, 52, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_dk55p"]
-atlas = ExtResource("2_klr41")
-region = Rect2(256, 52, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_78qdb"]
-atlas = ExtResource("2_klr41")
-region = Rect2(224, 52, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_sqirq"]
-atlas = ExtResource("2_klr41")
-region = Rect2(192, 52, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_c65nc"]
-atlas = ExtResource("2_klr41")
-region = Rect2(160, 52, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_6tswf"]
-atlas = ExtResource("2_klr41")
-region = Rect2(288, 52, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_hg8wo"]
-atlas = ExtResource("2_klr41")
-region = Rect2(160, 52, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_qkhur"]
-atlas = ExtResource("2_klr41")
-region = Rect2(192, 52, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_6rqcm"]
-atlas = ExtResource("2_klr41")
-region = Rect2(224, 52, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_y0tub"]
-atlas = ExtResource("2_klr41")
-region = Rect2(256, 52, 32, 52)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_w8xe5"]
-atlas = ExtResource("2_klr41")
-region = Rect2(288, 52, 32, 52)
-
-[resource]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_skb20")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_dk55p")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_78qdb")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_sqirq")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_c65nc")
-}],
-"loop": false,
-"name": &"closeDoor",
-"speed": 10.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_6tswf")
-}],
-"loop": false,
-"name": &"default",
-"speed": 10.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_hg8wo")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_qkhur")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_6rqcm")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_y0tub")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_w8xe5")
-}],
-"loop": false,
-"name": &"openDoor",
-"speed": 10.0
-}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0010.tres b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0010.tres
new file mode 100644
index 0000000..fd083c4
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0010.tres
@@ -0,0 +1,97 @@
+[gd_resource type="SpriteFrames" load_steps=14 format=3 uid="uid://cd7fhaqk587o2"]
+
+[ext_resource type="Texture2D" uid="uid://7uvgno67d1aq" path="res://resource/sprite/weapon/weapon0010/Weapon0010.png" id="1_4kjnn"]
+[ext_resource type="Texture2D" uid="uid://drhwb6yaqfocm" path="res://resource/sprite/weapon/weapon0010/Weapon0010_reloading.png" id="2_rwx4o"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0dydo"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(0, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_dfwtc"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(37, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gak18"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(74, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_rv7be"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(111, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_5t03e"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(148, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_lyx3v"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(185, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gpgko"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(222, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_vovwl"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(259, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2eogh"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(296, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ushsg"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(333, 0, 37, 17)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_a4yk5"]
+atlas = ExtResource("2_rwx4o")
+region = Rect2(370, 0, 37, 17)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_4kjnn")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0dydo")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_dfwtc")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gak18")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_rv7be")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_5t03e")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_lyx3v")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gpgko")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_vovwl")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2eogh")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ushsg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_a4yk5")
+}],
+"loop": false,
+"name": &"reloading_frame",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0011.tres b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0011.tres
new file mode 100644
index 0000000..9619c42
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0011.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://xvfg1a0xj7ng"]
+
+[ext_resource type="Texture2D" uid="uid://d2nw07bxifdv6" path="res://resource/sprite/weapon/weapon0011/Weapon0011.png" id="1_d6ft8"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_d6ft8")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0013.tres b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0013.tres
new file mode 100644
index 0000000..4901466
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0013.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://cawsi08vaqfrn"]
+
+[ext_resource type="Texture2D" uid="uid://cphawlk2w0w6w" path="res://resource/sprite/weapon/weapon0013/weapon0013.png" id="1_akn2h"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_akn2h")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0014.tres b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0014.tres
new file mode 100644
index 0000000..148385f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0014.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://taxfr2lcy0f3"]
+
+[ext_resource type="Texture2D" uid="uid://d27ax1aqghn0k" path="res://resource/sprite/weapon/weapon0014/Weapon0014.png" id="1_lpq2x"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_lpq2x")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0016.tres b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0016.tres
new file mode 100644
index 0000000..57712f9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/weapon/Weapon0016.tres
@@ -0,0 +1,97 @@
+[gd_resource type="SpriteFrames" load_steps=14 format=3 uid="uid://ccrflh6pjmq7r"]
+
+[ext_resource type="Texture2D" uid="uid://5yvr8ylxhqtf" path="res://resource/sprite/weapon/weapon0016/weapon0016.png" id="1_tbusc"]
+[ext_resource type="Texture2D" uid="uid://3nqcx8tshjpd" path="res://resource/sprite/weapon/weapon0016/weapon0016_pull.png" id="2_a4jp6"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_355pd"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(0, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_xe11p"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(32, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_tvcy5"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(64, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_3mfbu"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(96, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_08e07"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(0, 32, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_50vyq"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(32, 32, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ufb5n"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(64, 32, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_qdq04"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(96, 32, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_co5vl"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(0, 64, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_chj45"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(32, 64, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gf76j"]
+atlas = ExtResource("2_a4jp6")
+region = Rect2(64, 64, 32, 32)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_tbusc")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_355pd")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_xe11p")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_tvcy5")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_3mfbu")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_08e07")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_50vyq")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ufb5n")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_qdq04")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_co5vl")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_chj45")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gf76j")
+}],
+"loop": false,
+"name": &"pull_frame",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/theme/mainTheme.tres b/DungeonShooting_Godot/resource/theme/mainTheme.tres
index 591d33f..4c042ce 100644
--- a/DungeonShooting_Godot/resource/theme/mainTheme.tres
+++ b/DungeonShooting_Godot/resource/theme/mainTheme.tres
@@ -13,7 +13,6 @@
border_width_right = 1
border_width_bottom = 1
border_color = Color(0.117647, 0.431373, 0.905882, 1)
-corner_radius_bottom_left = 4
[sub_resource type="StyleBoxFlat" id="3"]
content_margin_left = 6.0
diff --git a/DungeonShooting_Godot/scene/Dungeon.tscn b/DungeonShooting_Godot/scene/Dungeon.tscn
new file mode 100644
index 0000000..8944b1e
--- /dev/null
+++ b/DungeonShooting_Godot/scene/Dungeon.tscn
@@ -0,0 +1,38 @@
+[gd_scene load_steps=3 format=3 uid="uid://bqf2vks5ggnsp"]
+
+[ext_resource type="Script" path="res://src/game/room/Dungeon.cs" id="1_txiyv"]
+
+[sub_resource type="Environment" id="Environment_g06jj"]
+background_mode = 3
+glow_enabled = true
+glow_normalized = true
+glow_strength = 1.05
+glow_blend_mode = 1
+
+[node name="Dungeon" type="CanvasModulate"]
+script = ExtResource("1_txiyv")
+metadata/_edit_vertical_guides_ = []
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_g06jj")
+
+[node name="TileRoot" type="TileMap" parent="." groups=["navigation"]]
+y_sort_enabled = true
+format = 2
+
+[node name="NavigationRoot" type="Node2D" parent="TileRoot"]
+z_index = -2
+
+[node name="StaticSpriteRoot" type="Node2D" parent="TileRoot"]
+z_index = -2
+
+[node name="NormalLayer" type="Node2D" parent="TileRoot"]
+z_index = -1
+
+[node name="YSortLayer" type="Node2D" parent="TileRoot"]
+z_index = 2
+y_sort_enabled = true
+
+[node name="AffiliationAreaRoot" type="Node2D" parent="TileRoot"]
+
+[node name="FogMaskRoot" type="Node2D" parent="TileRoot"]
diff --git a/DungeonShooting_Godot/scene/Hall.tscn b/DungeonShooting_Godot/scene/Hall.tscn
new file mode 100644
index 0000000..30dfa28
--- /dev/null
+++ b/DungeonShooting_Godot/scene/Hall.tscn
@@ -0,0 +1,75 @@
+[gd_scene load_steps=11 format=3 uid="uid://c2hynqudkykxl"]
+
+[ext_resource type="PackedScene" path="res://scene/Dungeon.tscn" id="1_31od0"]
+[ext_resource type="Script" path="res://src/game/hall/Hall.cs" id="2_43fdu"]
+[ext_resource type="Texture2D" uid="uid://b2j5mkqm3uv6w" path="res://resource/sprite/hall/HallBg.png" id="3_p8v6p"]
+[ext_resource type="Script" path="res://src/game/hall/DungeonEntrance.cs" id="3_t3my6"]
+[ext_resource type="Script" path="res://src/framework/activity/ActivityInstance.cs" id="5_lowqi"]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_ru8u4"]
+size = Vector2(66, 32)
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_l0mok"]
+size = Vector2(91, 434)
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_ch1xw"]
+size = Vector2(1024.5, 65.5)
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_ea4u5"]
+size = Vector2(448, 110)
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_o0n0h"]
+size = Vector2(1023, 110)
+
+[node name="Hall" node_paths=PackedStringArray("BirthMark", "BgSprite") instance=ExtResource("1_31od0")]
+script = ExtResource("2_43fdu")
+BirthMark = NodePath("BirthMark")
+BgSprite = NodePath("HallBg")
+metadata/_edit_horizontal_guides_ = [666.0, -210.0]
+
+[node name="HallBg" type="Sprite2D" parent="." index="1"]
+z_index = -5
+texture = ExtResource("3_p8v6p")
+centered = false
+
+[node name="BirthMark" type="Marker2D" parent="." index="2"]
+position = Vector2(553, 320)
+
+[node name="DungeonEntrance" type="Area2D" parent="." index="3"]
+position = Vector2(537, 209)
+collision_layer = 0
+collision_mask = 8
+monitorable = false
+script = ExtResource("3_t3my6")
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="DungeonEntrance" index="0"]
+shape = SubResource("RectangleShape2D_ru8u4")
+
+[node name="ActivityInstance" type="Node2D" parent="." index="4"]
+position = Vector2(533, 317)
+script = ExtResource("5_lowqi")
+Id = "weapon0002"
+CollisionVisible = false
+
+[node name="StaticBody2D" type="StaticBody2D" parent="." index="5"]
+collision_mask = 0
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D" index="0"]
+position = Vector2(-47, 296)
+shape = SubResource("RectangleShape2D_l0mok")
+
+[node name="CollisionShape2D5" type="CollisionShape2D" parent="StaticBody2D" index="1"]
+position = Vector2(1070, 306)
+shape = SubResource("RectangleShape2D_l0mok")
+
+[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D" index="2"]
+position = Vector2(511.75, 481.25)
+shape = SubResource("RectangleShape2D_ch1xw")
+
+[node name="CollisionShape2D3" type="CollisionShape2D" parent="StaticBody2D" index="3"]
+position = Vector2(528, 393)
+shape = SubResource("RectangleShape2D_ea4u5")
+
+[node name="CollisionShape2D4" type="CollisionShape2D" parent="StaticBody2D" index="4"]
+position = Vector2(512.5, 148)
+shape = SubResource("RectangleShape2D_o0n0h")
diff --git a/DungeonShooting_Godot/scene/Main.tscn b/DungeonShooting_Godot/scene/Main.tscn
index 346e221..b55999a 100644
--- a/DungeonShooting_Godot/scene/Main.tscn
+++ b/DungeonShooting_Godot/scene/Main.tscn
@@ -8,12 +8,8 @@
shader = ExtResource("2_fxoum")
shader_parameter/offset = Vector2(0, 0)
-[node name="Main" type="Node2D" node_paths=PackedStringArray("SubViewport", "SubViewportContainer", "SceneRoot", "GlobalNodeRoot")]
+[node name="Main" type="Node2D"]
script = ExtResource("1_mh1cq")
-SubViewport = NodePath("ViewCanvas/SubViewportContainer/SubViewport")
-SubViewportContainer = NodePath("ViewCanvas/SubViewportContainer")
-SceneRoot = NodePath("ViewCanvas/SubViewportContainer/SubViewport/SceneRoot")
-GlobalNodeRoot = NodePath("GlobalNodeRoot")
metadata/_edit_vertical_guides_ = []
[node name="ViewCanvas" type="CanvasLayer" parent="."]
@@ -28,6 +24,8 @@
[node name="SubViewport" type="SubViewport" parent="ViewCanvas/SubViewportContainer"]
disable_3d = true
handle_input_locally = false
+snap_2d_transforms_to_pixel = true
+snap_2d_vertices_to_pixel = true
use_hdr_2d = true
canvas_item_default_texture_filter = 0
size = Vector2i(320, 180)
diff --git a/DungeonShooting_Godot/scene/World.tscn b/DungeonShooting_Godot/scene/World.tscn
deleted file mode 100644
index bead9d8..0000000
--- a/DungeonShooting_Godot/scene/World.tscn
+++ /dev/null
@@ -1,49 +0,0 @@
-[gd_scene load_steps=3 format=3 uid="uid://bqf2vks5ggnsp"]
-
-[ext_resource type="Script" path="res://src/game/room/World.cs" id="1_kt3mm"]
-
-[sub_resource type="Environment" id="Environment_g06jj"]
-background_mode = 3
-glow_enabled = true
-glow_normalized = true
-glow_strength = 1.05
-glow_blend_mode = 1
-
-[node name="World" type="CanvasModulate" node_paths=PackedStringArray("NormalLayer", "YSortLayer", "TileRoot", "StaticSpriteRoot", "AffiliationAreaRoot", "FogMaskRoot")]
-script = ExtResource("1_kt3mm")
-NormalLayer = NodePath("NormalLayer")
-YSortLayer = NodePath("YSortLayer")
-TileRoot = NodePath("TileRoot")
-StaticSpriteRoot = NodePath("StaticSpriteRoot")
-AffiliationAreaRoot = NodePath("AffiliationAreaRoot")
-FogMaskRoot = NodePath("FogMaskRoot")
-metadata/_edit_vertical_guides_ = []
-
-[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
-environment = SubResource("Environment_g06jj")
-
-[node name="TileRoot" type="TileMap" parent="."]
-format = 2
-layer_0/name = "Floor"
-layer_0/z_index = -10
-layer_1/name = "Middle"
-layer_1/tile_data = PackedInt32Array()
-layer_2/name = "Top"
-layer_2/z_index = 10
-layer_2/tile_data = PackedInt32Array()
-layer_3/name = "AisleFloor"
-layer_3/z_index = -10
-layer_3/tile_data = PackedInt32Array()
-
-[node name="StaticSpriteRoot" type="Node2D" parent="."]
-z_index = -2
-
-[node name="NormalLayer" type="Node2D" parent="."]
-z_index = -1
-
-[node name="YSortLayer" type="Node2D" parent="."]
-y_sort_enabled = true
-
-[node name="AffiliationAreaRoot" type="Node2D" parent="."]
-
-[node name="FogMaskRoot" type="Node2D" parent="."]
diff --git a/DungeonShooting_Godot/scene/test/TestLoadTileSetConfig.tscn b/DungeonShooting_Godot/scene/test/TestLoadTileSetConfig.tscn
new file mode 100644
index 0000000..e06b23c
--- /dev/null
+++ b/DungeonShooting_Godot/scene/test/TestLoadTileSetConfig.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=2 format=3 uid="uid://cye62nvkf8ld1"]
+
+[ext_resource type="Script" path="res://src/test/TestLoadTileSetConfig.cs" id="1_1wodj"]
+
+[node name="TestLoadTileSetConfig" type="Node2D"]
+script = ExtResource("1_1wodj")
+
+[node name="TileMap" type="TileMap" parent="."]
+scale = Vector2(4, 4)
+format = 2
diff --git a/DungeonShooting_Godot/scene/test/TestMask2.tscn b/DungeonShooting_Godot/scene/test/TestMask2.tscn
index a18fde2..5ce4dee 100644
--- a/DungeonShooting_Godot/scene/test/TestMask2.tscn
+++ b/DungeonShooting_Godot/scene/test/TestMask2.tscn
@@ -3,10 +3,10 @@
[ext_resource type="Script" path="res://src/test/TestMask2.cs" id="1_rtexh"]
[ext_resource type="Texture2D" uid="uid://b1qqkdbgeiptt" path="res://resource/sprite/brush/Brush1.png" id="2_bgpg8"]
[ext_resource type="Texture2D" uid="uid://diehy0xukqgxk" path="res://resource/sprite/brush/Brush2.png" id="3_207p4"]
-[ext_resource type="TileSet" uid="uid://b00g22o1cqhe8" path="res://resource/map/tileSet/map1/TileSet1.tres" id="4_10tef"]
[ext_resource type="SpriteFrames" uid="uid://n11thtali6es" path="res://resource/spriteFrames/role/Role0001.tres" id="7_dqhlh"]
+
[node name="TestMask2" type="SubViewportContainer" node_paths=PackedStringArray("Message", "Player")]
offset_right = 480.0
offset_bottom = 270.0
@@ -28,7 +28,6 @@
render_target_update_mode = 4
[node name="TileMap" type="TileMap" parent="SubViewport"]
-tile_set = ExtResource("4_10tef")
format = 2
layer_0/tile_data = PackedInt32Array(917527, 0, 8, 851991, 0, 8, 786455, 0, 8, 720919, 0, 8, 655383, 0, 8, 589847, 0, 8, 524311, 0, 8, 458775, 0, 8, 393239, 0, 8, 327703, 0, 8, 262167, 0, 8, 196631, 0, 8, 131095, 0, 8, 65559, 0, 8, 23, 0, 8, -65513, 0, 8, -131049, 0, 8, -196585, 0, 8, -262121, 0, 8, -327657, 0, 8, 917526, 0, 8, 851990, 0, 8, 786454, 0, 8, 720918, 0, 8, 655382, 0, 8, 589846, 0, 8, 524310, 0, 8, 458774, 0, 8, 393238, 0, 8, 327702, 0, 8, 262166, 0, 8, 196630, 0, 8, 131094, 0, 8, 65558, 0, 8, 22, 0, 8, -65514, 0, 8, -131050, 0, 8, -196586, 0, 8, -262122, 0, 8, -327658, 0, 8, 917525, 0, 8, 851989, 0, 8, 786453, 0, 8, 720917, 0, 8, 655381, 0, 8, 589845, 0, 8, 524309, 0, 8, 458773, 0, 8, 393237, 0, 8, 327701, 0, 8, 262165, 0, 8, 196629, 0, 8, 131093, 0, 8, 65557, 0, 8, 21, 0, 8, -65515, 0, 8, -131051, 0, 8, -196587, 0, 8, -262123, 0, 8, -327659, 0, 8, 917524, 0, 8, 851988, 0, 8, 786452, 0, 8, 720916, 0, 8, 655380, 0, 8, 589844, 0, 8, 524308, 0, 8, 458772, 0, 8, 393236, 0, 8, 327700, 0, 8, 262164, 0, 8, 196628, 0, 8, 131092, 0, 8, 65556, 0, 8, 20, 0, 8, -65516, 0, 8, -131052, 0, 8, -196588, 0, 8, -262124, 0, 8, -327660, 0, 8, 917523, 0, 8, 851987, 0, 8, 786451, 0, 8, 720915, 0, 8, 655379, 0, 8, 589843, 0, 8, 524307, 0, 8, 458771, 0, 8, 393235, 0, 8, 327699, 0, 8, 262163, 0, 8, 196627, 0, 8, 131091, 0, 8, 65555, 0, 8, 19, 0, 8, -65517, 0, 8, -131053, 0, 8, -196589, 0, 8, -262125, 0, 8, -327661, 0, 8, 917522, 0, 8, 851986, 0, 8, 786450, 0, 8, 720914, 0, 8, 655378, 0, 8, 589842, 0, 8, 524306, 0, 8, 458770, 0, 8, 393234, 0, 8, 327698, 0, 8, 262162, 0, 8, 196626, 0, 8, 131090, 0, 8, 65554, 0, 8, 18, 0, 8, -65518, 0, 8, -131054, 0, 8, -196590, 0, 8, -262126, 0, 8, -327662, 0, 8, 917521, 0, 8, 851985, 0, 8, 786449, 0, 8, 720913, 0, 8, 655377, 0, 8, 589841, 0, 8, 524305, 0, 8, 458769, 0, 8, 393233, 0, 8, 327697, 0, 8, 262161, 0, 8, 196625, 0, 8, 131089, 0, 8, 65553, 0, 8, 17, 0, 8, -65519, 0, 8, -131055, 0, 8, -196591, 0, 8, -262127, 0, 8, -327663, 0, 8, 917520, 0, 8, 851984, 0, 8, 786448, 0, 8, 720912, 0, 8, 655376, 0, 8, 589840, 0, 8, 524304, 0, 8, 458768, 0, 8, 393232, 0, 8, 327696, 0, 8, 262160, 0, 8, 196624, 0, 8, 131088, 0, 8, 65552, 0, 8, 16, 0, 8, -65520, 0, 8, -131056, 0, 8, -196592, 0, 8, -262128, 0, 8, -327664, 0, 8, 917519, 0, 8, 851983, 0, 8, 786447, 0, 8, 720911, 0, 8, 655375, 0, 8, 589839, 0, 8, 524303, 0, 8, 458767, 0, 8, 393231, 0, 8, 327695, 0, 8, 262159, 0, 8, 196623, 0, 8, 131087, 0, 8, 65551, 0, 8, 15, 0, 8, -65521, 0, 8, -131057, 0, 8, -196593, 0, 8, -262129, 0, 8, -327665, 0, 8, 917518, 0, 8, 851982, 0, 8, 786446, 0, 8, 720910, 0, 8, 655374, 0, 8, 589838, 0, 8, 524302, 0, 8, 458766, 0, 8, 393230, 0, 8, 327694, 0, 8, 262158, 0, 8, 196622, 0, 8, 131086, 0, 8, 65550, 0, 8, 14, 0, 8, -65522, 0, 8, -131058, 0, 8, -196594, 0, 8, -262130, 0, 8, -327666, 0, 8, 917517, 0, 8, 851981, 0, 8, 786445, 0, 8, 720909, 0, 8, 655373, 0, 8, 589837, 0, 8, 524301, 0, 8, 458765, 0, 8, 393229, 0, 8, 327693, 0, 8, 262157, 0, 8, 196621, 0, 8, 131085, 0, 8, 65549, 0, 8, 13, 0, 8, -65523, 0, 8, -131059, 0, 8, -196595, 0, 8, -262131, 0, 8, -327667, 0, 8, 917516, 0, 8, 851980, 0, 8, 786444, 0, 8, 720908, 0, 8, 655372, 0, 8, 589836, 0, 8, 524300, 0, 8, 458764, 0, 8, 393228, 0, 8, 327692, 0, 8, 262156, 0, 8, 196620, 0, 8, 131084, 0, 8, 65548, 0, 8, 12, 0, 8, -65524, 0, 8, -131060, 0, 8, -196596, 0, 8, -262132, 0, 8, -327668, 0, 8, 917515, 0, 8, 851979, 0, 8, 786443, 0, 8, 720907, 0, 8, 655371, 0, 8, 589835, 0, 8, 524299, 0, 8, 458763, 0, 8, 393227, 0, 8, 327691, 0, 8, 262155, 0, 8, 196619, 0, 8, 131083, 0, 8, 65547, 0, 8, 11, 0, 8, -65525, 0, 8, -131061, 0, 8, -196597, 0, 8, -262133, 0, 8, -327669, 0, 8, 917514, 0, 8, 851978, 0, 8, 786442, 0, 8, 720906, 0, 8, 655370, 0, 8, 589834, 0, 8, 524298, 0, 8, 458762, 0, 8, 393226, 0, 8, 327690, 0, 8, 262154, 0, 8, 196618, 0, 8, 131082, 0, 8, 65546, 0, 8, 10, 0, 8, -65526, 0, 8, -131062, 0, 8, -196598, 0, 8, -262134, 0, 8, -327670, 0, 8, 917513, 0, 8, 851977, 0, 8, 786441, 0, 8, 720905, 0, 8, 655369, 0, 8, 589833, 0, 8, 524297, 0, 8, 458761, 0, 8, 393225, 0, 8, 327689, 0, 8, 262153, 0, 8, 196617, 0, 8, 131081, 0, 8, 65545, 0, 8, 9, 0, 8, -65527, 0, 8, -131063, 0, 8, -196599, 0, 8, -262135, 0, 8, -327671, 0, 8, 917512, 0, 8, 851976, 0, 8, 786440, 0, 8, 720904, 0, 8, 655368, 0, 8, 589832, 0, 8, 524296, 0, 8, 458760, 0, 8, 393224, 0, 8, 327688, 0, 8, 262152, 0, 8, 196616, 0, 8, 131080, 0, 8, 65544, 0, 8, 8, 0, 8, -65528, 0, 8, -131064, 0, 8, -196600, 0, 8, -262136, 0, 8, -327672, 0, 8, 917511, 0, 8, 851975, 0, 8, 786439, 0, 8, 720903, 0, 8, 655367, 0, 8, 589831, 0, 8, 524295, 0, 8, 458759, 0, 8, 393223, 0, 8, 327687, 0, 8, 262151, 0, 8, 196615, 0, 8, 131079, 0, 8, 65543, 0, 8, 7, 0, 8, -65529, 0, 8, -131065, 0, 8, -196601, 0, 8, -262137, 0, 8, -327673, 0, 8, 917510, 0, 8, 851974, 0, 8, 786438, 0, 8, 720902, 0, 8, 655366, 0, 8, 589830, 0, 8, 524294, 0, 8, 458758, 0, 8, 393222, 0, 8, 327686, 0, 8, 262150, 0, 8, 196614, 0, 8, 131078, 0, 8, 65542, 0, 8, 6, 0, 8, -65530, 0, 8, -131066, 0, 8, -196602, 0, 8, -262138, 0, 8, -327674, 0, 8, 917509, 0, 8, 851973, 0, 8, 786437, 0, 8, 720901, 0, 8, 655365, 0, 8, 589829, 0, 8, 524293, 0, 8, 458757, 0, 8, 393221, 0, 8, 327685, 0, 8, 262149, 0, 8, 196613, 0, 8, 131077, 0, 8, 65541, 0, 8, 5, 0, 8, -65531, 0, 8, -131067, 0, 8, -196603, 0, 8, -262139, 0, 8, -327675, 0, 8, 917508, 0, 8, 851972, 0, 8, 786436, 0, 8, 720900, 0, 8, 655364, 0, 8, 589828, 0, 8, 524292, 0, 8, 458756, 0, 8, 393220, 0, 8, 327684, 0, 8, 262148, 0, 8, 196612, 0, 8, 131076, 0, 8, 65540, 0, 8, 4, 0, 8, -65532, 0, 8, -131068, 0, 8, -196604, 0, 8, -262140, 0, 8, -327676, 0, 8, 917507, 0, 8, 851971, 0, 8, 786435, 0, 8, 720899, 0, 8, 655363, 0, 8, 589827, 0, 8, 524291, 0, 8, 458755, 0, 8, 393219, 0, 8, 327683, 0, 8, 262147, 0, 8, 196611, 0, 8, 131075, 0, 8, 65539, 0, 8, 3, 0, 8, -65533, 0, 8, -131069, 0, 8, -196605, 0, 8, -262141, 0, 8, -327677, 0, 8, 917506, 0, 8, 851970, 0, 8, 786434, 0, 8, 720898, 0, 8, 655362, 0, 8, 589826, 0, 8, 524290, 0, 8, 458754, 0, 8, 393218, 0, 8, 327682, 0, 8, 262146, 0, 8, 196610, 0, 8, 131074, 0, 8, 65538, 0, 8, 2, 0, 8, -65534, 0, 8, -131070, 0, 8, -196606, 0, 8, -262142, 0, 8, -327678, 0, 8, 917505, 0, 8, 851969, 0, 8, 786433, 0, 8, 720897, 0, 8, 655361, 0, 8, 589825, 0, 8, 524289, 0, 8, 458753, 0, 8, 393217, 0, 8, 327681, 0, 8, 262145, 0, 8, 196609, 0, 8, 131073, 0, 8, 65537, 0, 8, 1, 0, 8, -65535, 0, 8, -131071, 0, 8, -196607, 0, 8, -262143, 0, 8, -327679, 0, 8, 917504, 0, 8, 851968, 0, 8, 786432, 0, 8, 720896, 0, 8, 655360, 0, 8, 589824, 0, 8, 524288, 0, 8, 458752, 0, 8, 393216, 0, 8, 327680, 0, 8, 262144, 0, 8, 196608, 0, 8, 131072, 0, 8, 65536, 0, 8, 0, 0, 8, -65536, 0, 8, -131072, 0, 8, -196608, 0, 8, -262144, 0, 8, -327680, 0, 8, 983039, 0, 8, 917503, 0, 8, 851967, 0, 8, 786431, 0, 8, 720895, 0, 8, 655359, 0, 8, 589823, 0, 8, 524287, 0, 8, 458751, 0, 8, 393215, 0, 8, 327679, 0, 8, 262143, 0, 8, 196607, 0, 8, 131071, 0, 8, 65535, 0, 8, -1, 0, 8, -65537, 0, 8, -131073, 0, 8, -196609, 0, 8, -262145, 0, 8, 983038, 0, 8, 917502, 0, 8, 851966, 0, 8, 786430, 0, 8, 720894, 0, 8, 655358, 0, 8, 589822, 0, 8, 524286, 0, 8, 458750, 0, 8, 393214, 0, 8, 327678, 0, 8, 262142, 0, 8, 196606, 0, 8, 131070, 0, 8, 65534, 0, 8, -2, 0, 8, -65538, 0, 8, -131074, 0, 8, -196610, 0, 8, -262146, 0, 8, 983037, 0, 8, 917501, 0, 8, 851965, 0, 8, 786429, 0, 8, 720893, 0, 8, 655357, 0, 8, 589821, 0, 8, 524285, 0, 8, 458749, 0, 8, 393213, 0, 8, 327677, 0, 8, 262141, 0, 8, 196605, 0, 8, 131069, 0, 8, 65533, 0, 8, -3, 0, 8, -65539, 0, 8, -131075, 0, 8, -196611, 0, 8, -262147, 0, 8, 983036, 0, 8, 917500, 0, 8, 851964, 0, 8, 786428, 0, 8, 720892, 0, 8, 655356, 0, 8, 589820, 0, 8, 524284, 0, 8, 458748, 0, 8, 393212, 0, 8, 327676, 0, 8, 262140, 0, 8, 196604, 0, 8, 131068, 0, 8, 65532, 0, 8, -4, 0, 8, -65540, 0, 8, -131076, 0, 8, -196612, 0, 8, -262148, 0, 8, 983035, 0, 8, 917499, 0, 8, 851963, 0, 8, 786427, 0, 8, 720891, 0, 8, 655355, 0, 8, 589819, 0, 8, 524283, 0, 8, 458747, 0, 8, 393211, 0, 8, 327675, 0, 8, 262139, 0, 8, 196603, 0, 8, 131067, 0, 8, 65531, 0, 8, -5, 0, 8, -65541, 0, 8, -131077, 0, 8, -196613, 0, 8, -262149, 0, 8, -196614, 196608, 3, -262150, 196608, 3, -327686, 196608, 4, -327685, 131072, 7, -327684, 131072, 7, -131078, 196608, 3, -65542, 196608, 3, -6, 196608, 3, 65530, 196608, 3, 131066, 196608, 3, 196602, 196608, 3, 262138, 196608, 3, 327674, 196608, 3, 393210, 196608, 3, 458746, 196608, 3, 524282, 196608, 3, 589818, 196608, 3, 655354, 196608, 3, 720890, 196608, 7, 786426, 0, 8, 851962, 0, 8, 917498, 0, 8, 983034, 0, 8, 1048572, 0, 8, 1048571, 0, 8, 1048570, 0, 8, -327683, 131072, 7, 1048573, 0, 8, -327682, 131072, 7, 1048574, 0, 8, -327681, 131072, 7, 1048575, 0, 8, -393216, 131072, 7, 983040, 0, 8, -393215, 131072, 7, 983041, 0, 8, -393214, 131072, 7, 983042, 0, 8, -393213, 131072, 7, 983043, 0, 8, -393212, 131072, 7, 983044, 0, 8, -393211, 131072, 7, 983045, 0, 8, -393210, 131072, 7, 983046, 0, 8, -393209, 131072, 7, 983047, 0, 8, -393208, 131072, 7, 983048, 0, 8, -393207, 131072, 7, 983049, 0, 8, -393206, 131072, 7, 983050, 0, 8, -393205, 131072, 7, 983051, 0, 8, -393204, 131072, 7, 983052, 0, 8, -393203, 131072, 7, 983053, 0, 8, -393202, 131072, 7, 983054, 0, 8, -393201, 131072, 7, 983055, 0, 8, -393200, 131072, 7, 983056, 0, 8, -393199, 131072, 7, 983057, 0, 8, -393198, 131072, 7, 983058, 65536, 2, -393197, 131072, 7, 983059, 131072, 2, -393196, 131072, 7, 983060, 131072, 2, -393195, 131072, 7, 983061, 131072, 2, -393194, 131072, 7, 983062, 131072, 2, -393193, 131072, 7, 983063, 131072, 2, -327656, 65536, 3, -262120, 65536, 3, -393192, 65536, 4, -196584, 65536, 3, -131048, 65536, 3, -65512, 65536, 3, 24, 65536, 3, 65560, 65536, 3, 131096, 65536, 3, 196632, 65536, 3, 262168, 65536, 3, 327704, 65536, 3, 393240, 65536, 3, 458776, 65536, 3, 524312, 65536, 3, 589848, 65536, 3, 655384, 65536, 3, 720920, 65536, 3, 786456, 65536, 3, 851992, 65536, 3, 917528, 65536, 3, 983064, 851968, 2, 3670033, 0, 8, 3604497, 0, 8, 3538961, 0, 8, 3473425, 0, 8, 3407889, 0, 8, 3342353, 0, 8, 3276817, 0, 8, 3211281, 0, 8, 3145745, 0, 8, 3080209, 0, 8, 3014673, 0, 8, 2949137, 0, 8, 2883601, 0, 8, 2818065, 0, 8, 2752529, 0, 8, 2686993, 0, 8, 2621457, 0, 8, 2555921, 0, 8, 2490385, 0, 8, 2424849, 0, 8, 2359313, 0, 8, 2293777, 0, 8, 2228241, 0, 8, 2162705, 0, 8, 2097169, 0, 8, 2031633, 0, 8, 1966097, 0, 8, 1900561, 0, 8, 1835025, 0, 8, 1769489, 0, 8, 1703953, 0, 8, 1638417, 0, 8, 1572881, 0, 8, 1507345, 0, 8, 1441809, 0, 8, 1376273, 0, 8, 1310737, 0, 8, 1245201, 0, 8, 1179665, 0, 8, 1114129, 0, 8, 1048593, 0, 8, 3670032, 0, 8, 3604496, 0, 8, 3538960, 0, 8, 3473424, 0, 8, 3407888, 0, 8, 3342352, 0, 8, 3276816, 0, 8, 3211280, 0, 8, 3145744, 0, 8, 3080208, 0, 8, 3014672, 0, 8, 2949136, 0, 8, 2883600, 0, 8, 2818064, 0, 8, 2752528, 0, 8, 2686992, 0, 8, 2621456, 0, 8, 2555920, 0, 8, 2490384, 0, 8, 2424848, 0, 8, 2359312, 0, 8, 2293776, 0, 8, 2228240, 0, 8, 2162704, 0, 8, 2097168, 0, 8, 2031632, 0, 8, 1966096, 0, 8, 1900560, 0, 8, 1835024, 0, 8, 1769488, 0, 8, 1703952, 0, 8, 1638416, 0, 8, 1572880, 0, 8, 1507344, 0, 8, 1441808, 0, 8, 1376272, 0, 8, 1310736, 0, 8, 1245200, 0, 8, 1179664, 0, 8, 1114128, 0, 8, 1048592, 0, 8, 3670031, 0, 8, 3604495, 0, 8, 3538959, 0, 8, 3473423, 0, 8, 3407887, 0, 8, 3342351, 0, 8, 3276815, 0, 8, 3211279, 0, 8, 3145743, 0, 8, 3080207, 0, 8, 3014671, 0, 8, 2949135, 0, 8, 2883599, 0, 8, 2818063, 0, 8, 2752527, 0, 8, 2686991, 0, 8, 2621455, 0, 8, 2555919, 0, 8, 2490383, 0, 8, 2424847, 0, 8, 2359311, 0, 8, 2293775, 0, 8, 2228239, 0, 8, 2162703, 0, 8, 2097167, 0, 8, 2031631, 0, 8, 1966095, 0, 8, 1900559, 0, 8, 1835023, 0, 8, 1769487, 0, 8, 1703951, 0, 8, 1638415, 0, 8, 1572879, 0, 8, 1507343, 0, 8, 1441807, 0, 8, 1376271, 0, 8, 1310735, 0, 8, 1245199, 0, 8, 1179663, 0, 8, 1114127, 0, 8, 1048591, 0, 8, 3670030, 0, 8, 3604494, 0, 8, 3538958, 0, 8, 3473422, 0, 8, 3407886, 0, 8, 3342350, 0, 8, 3276814, 0, 8, 3211278, 0, 8, 3145742, 0, 8, 3080206, 0, 8, 3014670, 0, 8, 2949134, 0, 8, 2883598, 0, 8, 2818062, 0, 8, 2752526, 0, 8, 2686990, 0, 8, 2621454, 0, 8, 2555918, 0, 8, 2490382, 0, 8, 2424846, 0, 8, 2359310, 0, 8, 2293774, 0, 8, 2228238, 0, 8, 2162702, 0, 8, 2097166, 0, 8, 2031630, 0, 8, 1966094, 0, 8, 1900558, 0, 8, 1835022, 0, 8, 1769486, 0, 8, 1703950, 0, 8, 1638414, 0, 8, 1572878, 0, 8, 1507342, 0, 8, 1441806, 0, 8, 1376270, 0, 8, 1310734, 0, 8, 1245198, 0, 8, 1179662, 0, 8, 1114126, 0, 8, 1048590, 0, 8, 3670029, 0, 8, 3604493, 0, 8, 3538957, 0, 8, 3473421, 0, 8, 3407885, 0, 8, 3342349, 0, 8, 3276813, 0, 8, 3211277, 0, 8, 3145741, 0, 8, 3080205, 0, 8, 3014669, 0, 8, 2949133, 0, 8, 2883597, 0, 8, 2818061, 0, 8, 2752525, 0, 8, 2686989, 0, 8, 2621453, 0, 8, 2555917, 0, 8, 2490381, 0, 8, 2424845, 0, 8, 2359309, 0, 8, 2293773, 0, 8, 2228237, 0, 8, 2162701, 0, 8, 2097165, 0, 8, 2031629, 0, 8, 1966093, 0, 8, 1900557, 0, 8, 1835021, 0, 8, 1769485, 0, 8, 1703949, 0, 8, 1638413, 0, 8, 1572877, 0, 8, 1507341, 0, 8, 1441805, 0, 8, 1376269, 0, 8, 1310733, 0, 8, 1245197, 0, 8, 1179661, 0, 8, 1114125, 0, 8, 1048589, 0, 8, 3670028, 0, 8, 3604492, 0, 8, 3538956, 0, 8, 3473420, 0, 8, 3407884, 0, 8, 3342348, 0, 8, 3276812, 0, 8, 3211276, 0, 8, 3145740, 0, 8, 3080204, 0, 8, 3014668, 0, 8, 2949132, 0, 8, 2883596, 0, 8, 2818060, 0, 8, 2752524, 0, 8, 2686988, 0, 8, 2621452, 0, 8, 2555916, 0, 8, 2490380, 0, 8, 2424844, 0, 8, 2359308, 0, 8, 2293772, 0, 8, 2228236, 0, 8, 2162700, 0, 8, 2097164, 0, 8, 2031628, 0, 8, 1966092, 0, 8, 1900556, 0, 8, 1835020, 0, 8, 1769484, 0, 8, 1703948, 0, 8, 1638412, 0, 8, 1572876, 0, 8, 1507340, 0, 8, 1441804, 0, 8, 1376268, 0, 8, 1310732, 0, 8, 1245196, 0, 8, 1179660, 0, 8, 1114124, 0, 8, 1048588, 0, 8, 3670027, 0, 8, 3604491, 0, 8, 3538955, 0, 8, 3473419, 0, 8, 3407883, 0, 8, 3342347, 0, 8, 3276811, 0, 8, 3211275, 0, 8, 3145739, 0, 8, 3080203, 0, 8, 3014667, 0, 8, 2949131, 0, 8, 2883595, 0, 8, 2818059, 0, 8, 2752523, 0, 8, 2686987, 0, 8, 2621451, 0, 8, 2555915, 0, 8, 2490379, 0, 8, 2424843, 0, 8, 2359307, 0, 8, 2293771, 0, 8, 2228235, 0, 8, 2162699, 0, 8, 2097163, 0, 8, 2031627, 0, 8, 1966091, 0, 8, 1900555, 0, 8, 1835019, 0, 8, 1769483, 0, 8, 1703947, 0, 8, 1638411, 0, 8, 1572875, 0, 8, 1507339, 0, 8, 1441803, 0, 8, 1376267, 0, 8, 1310731, 0, 8, 1245195, 0, 8, 1179659, 0, 8, 1114123, 0, 8, 1048587, 0, 8, 3670026, 0, 8, 3604490, 0, 8, 3538954, 0, 8, 3473418, 0, 8, 3407882, 0, 8, 3342346, 0, 8, 3276810, 0, 8, 3211274, 0, 8, 3145738, 0, 8, 3080202, 0, 8, 3014666, 0, 8, 2949130, 0, 8, 2883594, 0, 8, 2818058, 0, 8, 2752522, 0, 8, 2686986, 0, 8, 2621450, 0, 8, 2555914, 0, 8, 2490378, 0, 8, 2424842, 0, 8, 2359306, 0, 8, 2293770, 0, 8, 2228234, 0, 8, 2162698, 0, 8, 2097162, 0, 8, 2031626, 0, 8, 1966090, 0, 8, 1900554, 0, 8, 1835018, 0, 8, 1769482, 0, 8, 1703946, 0, 8, 1638410, 0, 8, 1572874, 0, 8, 1507338, 0, 8, 1441802, 0, 8, 1376266, 0, 8, 1310730, 0, 8, 1245194, 0, 8, 1179658, 0, 8, 1114122, 0, 8, 1048586, 0, 8, 3670025, 0, 8, 3604489, 0, 8, 3538953, 0, 8, 3473417, 0, 8, 3407881, 0, 8, 3342345, 0, 8, 3276809, 0, 8, 3211273, 0, 8, 3145737, 0, 8, 3080201, 0, 8, 3014665, 0, 8, 2949129, 0, 8, 2883593, 0, 8, 2818057, 0, 8, 2752521, 0, 8, 2686985, 0, 8, 2621449, 0, 8, 2555913, 0, 8, 2490377, 0, 8, 2424841, 0, 8, 2359305, 0, 8, 2293769, 0, 8, 2228233, 0, 8, 2162697, 0, 8, 2097161, 0, 8, 2031625, 0, 8, 1966089, 0, 8, 1900553, 0, 8, 1835017, 0, 8, 1769481, 0, 8, 1703945, 0, 8, 1638409, 0, 8, 1572873, 0, 8, 1507337, 0, 8, 1441801, 0, 8, 1376265, 0, 8, 1310729, 0, 8, 1245193, 0, 8, 1179657, 0, 8, 1114121, 0, 8, 1048585, 0, 8, 3670024, 0, 8, 3604488, 0, 8, 3538952, 0, 8, 3473416, 0, 8, 3407880, 0, 8, 3342344, 0, 8, 3276808, 0, 8, 3211272, 0, 8, 3145736, 0, 8, 3080200, 0, 8, 3014664, 0, 8, 2949128, 0, 8, 2883592, 0, 8, 2818056, 0, 8, 2752520, 0, 8, 2686984, 0, 8, 2621448, 0, 8, 2555912, 0, 8, 2490376, 0, 8, 2424840, 0, 8, 2359304, 0, 8, 2293768, 0, 8, 2228232, 0, 8, 2162696, 0, 8, 2097160, 0, 8, 2031624, 0, 8, 1966088, 0, 8, 1900552, 0, 8, 1835016, 0, 8, 1769480, 0, 8, 1703944, 0, 8, 1638408, 0, 8, 1572872, 0, 8, 1507336, 0, 8, 1441800, 0, 8, 1376264, 0, 8, 1310728, 0, 8, 1245192, 0, 8, 1179656, 0, 8, 1114120, 0, 8, 1048584, 0, 8, 3670023, 0, 8, 3604487, 0, 8, 3538951, 0, 8, 3473415, 0, 8, 3407879, 0, 8, 3342343, 0, 8, 3276807, 0, 8, 3211271, 0, 8, 3145735, 0, 8, 3080199, 0, 8, 3014663, 0, 8, 2949127, 0, 8, 2883591, 0, 8, 2818055, 0, 8, 2752519, 0, 8, 2686983, 0, 8, 2621447, 0, 8, 2555911, 0, 8, 2490375, 0, 8, 2424839, 0, 8, 2359303, 0, 8, 2293767, 0, 8, 2228231, 0, 8, 2162695, 0, 8, 2097159, 0, 8, 2031623, 0, 8, 1966087, 0, 8, 1900551, 0, 8, 1835015, 0, 8, 1769479, 0, 8, 1703943, 0, 8, 1638407, 0, 8, 1572871, 0, 8, 1507335, 0, 8, 1441799, 0, 8, 1376263, 0, 8, 1310727, 0, 8, 1245191, 0, 8, 1179655, 0, 8, 1114119, 0, 8, 1048583, 0, 8, 3670022, 0, 8, 3604486, 0, 8, 3538950, 0, 8, 3473414, 0, 8, 3407878, 0, 8, 3342342, 0, 8, 3276806, 0, 8, 3211270, 0, 8, 3145734, 0, 8, 3080198, 0, 8, 3014662, 0, 8, 2949126, 0, 8, 2883590, 0, 8, 2818054, 0, 8, 2752518, 0, 8, 2686982, 0, 8, 2621446, 0, 8, 2555910, 0, 8, 2490374, 0, 8, 2424838, 0, 8, 2359302, 0, 8, 2293766, 0, 8, 2228230, 0, 8, 2162694, 0, 8, 2097158, 0, 8, 2031622, 0, 8, 1966086, 0, 8, 1900550, 0, 8, 1835014, 0, 8, 1769478, 0, 8, 1703942, 0, 8, 1638406, 0, 8, 1572870, 0, 8, 1507334, 0, 8, 1441798, 0, 8, 1376262, 0, 8, 1310726, 0, 8, 1245190, 0, 8, 1179654, 0, 8, 1114118, 0, 8, 1048582, 0, 8, 3670021, 0, 8, 3604485, 0, 8, 3538949, 0, 8, 3473413, 0, 8, 3407877, 0, 8, 3342341, 0, 8, 3276805, 0, 8, 3211269, 0, 8, 3145733, 0, 8, 3080197, 0, 8, 3014661, 0, 8, 2949125, 0, 8, 2883589, 0, 8, 2818053, 0, 8, 2752517, 0, 8, 2686981, 0, 8, 2621445, 0, 8, 2555909, 0, 8, 2490373, 0, 8, 2424837, 0, 8, 2359301, 0, 8, 2293765, 0, 8, 2228229, 0, 8, 2162693, 0, 8, 2097157, 0, 8, 2031621, 0, 8, 1966085, 0, 8, 1900549, 0, 8, 1835013, 0, 8, 1769477, 0, 8, 1703941, 0, 8, 1638405, 0, 8, 1572869, 0, 8, 1507333, 0, 8, 1441797, 0, 8, 1376261, 0, 8, 1310725, 0, 8, 1245189, 0, 8, 1179653, 0, 8, 1114117, 0, 8, 1048581, 0, 8, 3670020, 0, 8, 3604484, 0, 8, 3538948, 0, 8, 3473412, 0, 8, 3407876, 0, 8, 3342340, 0, 8, 3276804, 0, 8, 3211268, 0, 8, 3145732, 0, 8, 3080196, 0, 8, 3014660, 0, 8, 2949124, 0, 8, 2883588, 0, 8, 2818052, 0, 8, 2752516, 0, 8, 2686980, 0, 8, 2621444, 0, 8, 2555908, 0, 8, 2490372, 0, 8, 2424836, 0, 8, 2359300, 0, 8, 2293764, 0, 8, 2228228, 0, 8, 2162692, 0, 8, 2097156, 0, 8, 2031620, 0, 8, 1966084, 0, 8, 1900548, 0, 8, 1835012, 0, 8, 1769476, 0, 8, 1703940, 0, 8, 1638404, 0, 8, 1572868, 0, 8, 1507332, 0, 8, 1441796, 0, 8, 1376260, 0, 8, 1310724, 0, 8, 1245188, 0, 8, 1179652, 0, 8, 1114116, 0, 8, 1048580, 0, 8, 3670019, 0, 8, 3604483, 0, 8, 3538947, 0, 8, 3473411, 0, 8, 3407875, 0, 8, 3342339, 0, 8, 3276803, 0, 8, 3211267, 0, 8, 3145731, 0, 8, 3080195, 0, 8, 3014659, 0, 8, 2949123, 0, 8, 2883587, 0, 8, 2818051, 0, 8, 2752515, 0, 8, 2686979, 0, 8, 2621443, 0, 8, 2555907, 0, 8, 2490371, 0, 8, 2424835, 0, 8, 2359299, 0, 8, 2293763, 0, 8, 2228227, 0, 8, 2162691, 0, 8, 2097155, 0, 8, 2031619, 0, 8, 1966083, 0, 8, 1900547, 0, 8, 1835011, 0, 8, 1769475, 0, 8, 1703939, 0, 8, 1638403, 0, 8, 1572867, 0, 8, 1507331, 0, 8, 1441795, 0, 8, 1376259, 0, 8, 1310723, 0, 8, 1245187, 0, 8, 1179651, 0, 8, 1114115, 0, 8, 1048579, 0, 8, 3670018, 0, 8, 3604482, 0, 8, 3538946, 0, 8, 3473410, 0, 8, 3407874, 0, 8, 3342338, 0, 8, 3276802, 0, 8, 3211266, 0, 8, 3145730, 0, 8, 3080194, 0, 8, 3014658, 0, 8, 2949122, 0, 8, 2883586, 0, 8, 2818050, 0, 8, 2752514, 0, 8, 2686978, 0, 8, 2621442, 0, 8, 2555906, 0, 8, 2490370, 0, 8, 2424834, 0, 8, 2359298, 0, 8, 2293762, 0, 8, 2228226, 0, 8, 2162690, 0, 8, 2097154, 0, 8, 2031618, 0, 8, 1966082, 0, 8, 1900546, 0, 8, 1835010, 0, 8, 1769474, 0, 8, 1703938, 0, 8, 1638402, 0, 8, 1572866, 0, 8, 1507330, 0, 8, 1441794, 0, 8, 1376258, 0, 8, 1310722, 0, 8, 1245186, 0, 8, 1179650, 0, 8, 1114114, 0, 8, 1048578, 0, 8, 3670017, 0, 8, 3604481, 0, 8, 3538945, 0, 8, 3473409, 0, 8, 3407873, 0, 8, 3342337, 0, 8, 3276801, 0, 8, 3211265, 0, 8, 3145729, 0, 8, 3080193, 0, 8, 3014657, 0, 8, 2949121, 0, 8, 2883585, 0, 8, 2818049, 0, 8, 2752513, 0, 8, 2686977, 0, 8, 2621441, 0, 8, 2555905, 0, 8, 2490369, 0, 8, 2424833, 0, 8, 2359297, 0, 8, 2293761, 0, 8, 2228225, 0, 8, 2162689, 0, 8, 2097153, 0, 8, 2031617, 0, 8, 1966081, 0, 8, 1900545, 0, 8, 1835009, 0, 8, 1769473, 0, 8, 1703937, 0, 8, 1638401, 0, 8, 1572865, 0, 8, 1507329, 0, 8, 1441793, 0, 8, 1376257, 0, 8, 1310721, 0, 8, 1245185, 0, 8, 1179649, 0, 8, 1114113, 0, 8, 1048577, 0, 8, 3670016, 0, 8, 3604480, 0, 8, 3538944, 0, 8, 3473408, 0, 8, 3407872, 0, 8, 3342336, 0, 8, 3276800, 0, 8, 3211264, 0, 8, 3145728, 0, 8, 3080192, 0, 8, 3014656, 0, 8, 2949120, 0, 8, 2883584, 0, 8, 2818048, 0, 8, 2752512, 0, 8, 2686976, 0, 8, 2621440, 0, 8, 2555904, 0, 8, 2490368, 0, 8, 2424832, 0, 8, 2359296, 0, 8, 2293760, 0, 8, 2228224, 0, 8, 2162688, 0, 8, 2097152, 0, 8, 2031616, 0, 8, 1966080, 0, 8, 1900544, 0, 8, 1835008, 0, 8, 1769472, 0, 8, 1703936, 0, 8, 1638400, 0, 8, 1572864, 0, 8, 1507328, 0, 8, 1441792, 0, 8, 1376256, 0, 8, 1310720, 0, 8, 1245184, 0, 8, 1179648, 0, 8, 1114112, 0, 8, 1048576, 0, 8, 3735551, 0, 8, 3670015, 0, 8, 3604479, 0, 8, 3538943, 0, 8, 3473407, 0, 8, 3407871, 0, 8, 3342335, 0, 8, 3276799, 0, 8, 3211263, 0, 8, 3145727, 0, 8, 3080191, 0, 8, 3014655, 0, 8, 2949119, 0, 8, 2883583, 0, 8, 2818047, 0, 8, 2752511, 0, 8, 2686975, 0, 8, 2621439, 0, 8, 2555903, 0, 8, 2490367, 0, 8, 2424831, 0, 8, 2359295, 0, 8, 2293759, 0, 8, 2228223, 0, 8, 2162687, 0, 8, 2097151, 0, 8, 2031615, 0, 8, 1966079, 0, 8, 1900543, 0, 8, 1835007, 0, 8, 1769471, 0, 8, 1703935, 0, 8, 1638399, 0, 8, 1572863, 0, 8, 1507327, 0, 8, 1441791, 0, 8, 1376255, 0, 8, 1310719, 0, 8, 1245183, 0, 8, 1179647, 0, 8, 1114111, 0, 8, 3735550, 0, 8, 3670014, 0, 8, 3604478, 0, 8, 3538942, 0, 8, 3473406, 0, 8, 3407870, 0, 8, 3342334, 0, 8, 3276798, 0, 8, 3211262, 0, 8, 3145726, 0, 8, 3080190, 0, 8, 3014654, 0, 8, 2949118, 0, 8, 2883582, 0, 8, 2818046, 0, 8, 2752510, 0, 8, 2686974, 0, 8, 2621438, 0, 8, 2555902, 0, 8, 2490366, 0, 8, 2424830, 0, 8, 2359294, 0, 8, 2293758, 0, 8, 2228222, 0, 8, 2162686, 0, 8, 2097150, 0, 8, 2031614, 0, 8, 1966078, 0, 8, 1900542, 0, 8, 1835006, 0, 8, 1769470, 0, 8, 1703934, 0, 8, 1638398, 0, 8, 1572862, 0, 8, 1507326, 0, 8, 1441790, 0, 8, 1376254, 0, 8, 1310718, 0, 8, 1245182, 0, 8, 1179646, 0, 8, 1114110, 0, 8, 3735549, 0, 8, 3670013, 0, 8, 3604477, 0, 8, 3538941, 0, 8, 3473405, 0, 8, 3407869, 0, 8, 3342333, 0, 8, 3276797, 0, 8, 3211261, 0, 8, 3145725, 0, 8, 3080189, 0, 8, 3014653, 0, 8, 2949117, 0, 8, 2883581, 0, 8, 2818045, 0, 8, 2752509, 0, 8, 2686973, 0, 8, 2621437, 0, 8, 2555901, 0, 8, 2490365, 0, 8, 2424829, 0, 8, 2359293, 0, 8, 2293757, 0, 8, 2228221, 0, 8, 2162685, 0, 8, 2097149, 0, 8, 2031613, 0, 8, 1966077, 0, 8, 1900541, 0, 8, 1835005, 0, 8, 1769469, 0, 8, 1703933, 0, 8, 1638397, 0, 8, 1572861, 0, 8, 1507325, 0, 8, 1441789, 0, 8, 1376253, 0, 8, 1310717, 0, 8, 1245181, 0, 8, 1179645, 0, 8, 1114109, 0, 8, 3735548, 0, 8, 3670012, 0, 8, 3604476, 0, 8, 3538940, 0, 8, 3473404, 0, 8, 3407868, 0, 8, 3342332, 0, 8, 3276796, 0, 8, 3211260, 0, 8, 3145724, 0, 8, 3080188, 0, 8, 3014652, 0, 8, 2949116, 0, 8, 2883580, 0, 8, 2818044, 0, 8, 2752508, 0, 8, 2686972, 0, 8, 2621436, 0, 8, 2555900, 0, 8, 2490364, 0, 8, 2424828, 0, 8, 2359292, 0, 8, 2293756, 0, 8, 2228220, 0, 8, 2162684, 0, 8, 2097148, 0, 8, 2031612, 0, 8, 1966076, 0, 8, 1900540, 0, 8, 1835004, 0, 8, 1769468, 0, 8, 1703932, 0, 8, 1638396, 0, 8, 1572860, 0, 8, 1507324, 0, 8, 1441788, 0, 8, 1376252, 0, 8, 1310716, 0, 8, 1245180, 0, 8, 1179644, 0, 8, 1114108, 0, 8, 3735547, 0, 8, 3670011, 0, 8, 3604475, 0, 8, 3538939, 0, 8, 3473403, 0, 8, 3407867, 0, 8, 3342331, 0, 8, 3276795, 0, 8, 3211259, 0, 8, 3145723, 0, 8, 3080187, 0, 8, 3014651, 0, 8, 2949115, 0, 8, 2883579, 0, 8, 2818043, 0, 8, 2752507, 0, 8, 2686971, 0, 8, 2621435, 0, 8, 2555899, 0, 8, 2490363, 0, 8, 2424827, 0, 8, 2359291, 0, 8, 2293755, 0, 8, 2228219, 0, 8, 2162683, 0, 8, 2097147, 0, 8, 2031611, 0, 8, 1966075, 0, 8, 1900539, 0, 8, 1835003, 0, 8, 1769467, 0, 8, 1703931, 0, 8, 1638395, 0, 8, 1572859, 0, 8, 1507323, 0, 8, 1441787, 0, 8, 1376251, 0, 8, 1310715, 0, 8, 1245179, 0, 8, 1179643, 0, 8, 1114107, 0, 8, 3735546, 0, 8, 3670010, 0, 8, 3604474, 0, 8, 3538938, 0, 8, 3473402, 0, 8, 3407866, 0, 8, 3342330, 0, 8, 3276794, 0, 8, 3211258, 0, 8, 3145722, 0, 8, 3080186, 0, 8, 3014650, 0, 8, 2949114, 0, 8, 2883578, 0, 8, 2818042, 0, 8, 2752506, 0, 8, 2686970, 0, 8, 2621434, 0, 8, 2555898, 0, 8, 2490362, 0, 8, 2424826, 0, 8, 2359290, 0, 8, 2293754, 0, 8, 2228218, 0, 8, 2162682, 0, 8, 2097146, 0, 8, 2031610, 0, 8, 1966074, 0, 8, 1900538, 0, 8, 1835002, 0, 8, 1769466, 0, 8, 1703930, 0, 8, 1638394, 0, 8, 1572858, 0, 8, 1507322, 0, 8, 1441786, 0, 8, 1376250, 0, 8, 1310714, 0, 8, 1245178, 0, 8, 1179642, 0, 8, 1114106, 0, 8, 3735545, 0, 8, 3670009, 0, 8, 3604473, 0, 8, 3538937, 0, 8, 3473401, 0, 8, 3407865, 0, 8, 3342329, 0, 8, 3276793, 0, 8, 3211257, 0, 8, 3145721, 0, 8, 3080185, 0, 8, 3014649, 0, 8, 2949113, 0, 8, 2883577, 0, 8, 2818041, 0, 8, 2752505, 0, 8, 2686969, 0, 8, 2621433, 0, 8, 2555897, 0, 8, 2490361, 0, 8, 2424825, 0, 8, 2359289, 0, 8, 2293753, 0, 8, 2228217, 0, 8, 2162681, 0, 8, 2097145, 0, 8, 2031609, 0, 8, 1966073, 0, 8, 1900537, 0, 8, 1835001, 0, 8, 1769465, 0, 8, 1703929, 0, 8, 1638393, 0, 8, 1572857, 0, 8, 1507321, 0, 8, 1441785, 0, 8, 1376249, 0, 8, 1310713, 0, 8, 1245177, 0, 8, 1179641, 0, 8, 1114105, 0, 8, 1048569, 0, 8, 983033, 0, 8, 917497, 0, 8, 851961, 0, 8, 786425, 0, 8, 3735544, 0, 8, 3670008, 0, 8, 3604472, 0, 8, 3538936, 0, 8, 3473400, 0, 8, 3407864, 0, 8, 3342328, 0, 8, 3276792, 0, 8, 3211256, 0, 8, 3145720, 0, 8, 3080184, 0, 8, 3014648, 0, 8, 2949112, 0, 8, 2883576, 0, 8, 2818040, 0, 8, 2752504, 0, 8, 2686968, 0, 8, 2621432, 0, 8, 2555896, 0, 8, 2490360, 0, 8, 2424824, 0, 8, 2359288, 0, 8, 2293752, 0, 8, 2228216, 0, 8, 2162680, 0, 8, 2097144, 0, 8, 2031608, 0, 8, 1966072, 0, 8, 1900536, 0, 8, 1835000, 0, 8, 1769464, 0, 8, 1703928, 0, 8, 1638392, 0, 8, 1572856, 0, 8, 1507320, 0, 8, 1441784, 0, 8, 1376248, 0, 8, 1310712, 0, 8, 1245176, 0, 8, 1179640, 0, 8, 1114104, 0, 8, 1048568, 0, 8, 983032, 0, 8, 917496, 0, 8, 851960, 0, 8, 786424, 0, 8, 851959, 196608, 3, 720887, 196608, 4, 720889, 131072, 7, 917495, 196608, 3, 786423, 196608, 3, 983031, 196608, 3, 1048567, 196608, 3, 1114103, 196608, 3, 1179639, 196608, 3, 1245175, 196608, 3, 1310711, 196608, 3, 1376247, 196608, 3, 1441783, 196608, 3, 1507319, 196608, 3, 1572855, 196608, 3, 1638391, 196608, 3, 1703927, 196608, 3, 1769463, 196608, 3, 1834999, 196608, 3, 1900535, 196608, 3, 1966071, 196608, 3, 2031607, 196608, 3, 2097143, 196608, 3, 2162679, 196608, 3, 2228215, 196608, 3, 2293751, 196608, 3, 2359287, 196608, 3, 2424823, 196608, 3, 2490359, 196608, 3, 2555895, 196608, 3, 2621431, 196608, 3, 2686967, 196608, 3, 2752503, 196608, 3, 2818039, 196608, 3, 2883575, 196608, 3, 2949111, 196608, 3, 3014647, 196608, 3, 3080183, 196608, 3, 3145719, 196608, 3, 3211255, 196608, 3, 3276791, 196608, 3, 3342327, 196608, 3, 3407863, 196608, 3, 3473399, 196608, 3, 3538935, 196608, 3, 3604471, 196608, 3, 3670007, 196608, 3, 3735543, 196608, 3, 3801081, 131072, 2, 3801079, 720896, 2, 720888, 131072, 7, 3801082, 131072, 2, 3801080, 131072, 2, 3801083, 131072, 2, 3801084, 131072, 2, 3801085, 131072, 2, 3801086, 131072, 2, 3801087, 131072, 2, 3735552, 131072, 2, 3735553, 131072, 2, 3735554, 131072, 2, 3735555, 131072, 2, 3735556, 131072, 2, 3735557, 131072, 2, 3735558, 131072, 2, 3735559, 131072, 2, 3735560, 131072, 2, 3735561, 131072, 2, 3735562, 131072, 2, 3735563, 131072, 2, 3735564, 196608, 2, 3735565, 0, 8, 3735566, 0, 8, 3735567, 0, 8, 3735568, 0, 8, 3735569, 0, 8, 1048594, 65536, 3, 1114130, 65536, 3, 1179666, 65536, 3, 1245202, 65536, 3, 1310738, 65536, 3, 1376274, 65536, 3, 1441810, 65536, 3, 1507346, 65536, 3, 1572882, 65536, 3, 1638418, 65536, 3, 1703954, 65536, 3, 1769490, 65536, 3, 1835026, 65536, 3, 1900562, 65536, 3, 1966098, 65536, 3, 2031634, 65536, 3, 2097170, 65536, 3, 2162706, 65536, 3, 2228242, 65536, 3, 2293778, 65536, 3, 2359314, 65536, 3, 2424850, 65536, 3, 2490386, 65536, 7, 2555922, 0, 8, 2621458, 0, 8, 2686994, 0, 8, 2752530, 0, 8, 2818066, 0, 8, 2883602, 0, 8, 2949138, 0, 8, 3014674, 0, 8, 3080210, 0, 8, 3145746, 0, 8, 3211282, 0, 8, 3276818, 0, 8, 3342354, 0, 8, 3407890, 0, 8, 3473426, 0, 8, 3538962, 0, 8, 3604498, 0, 8, 3670034, 0, 8, 3735570, 0, 8, 5046336, 0, 8, 4980800, 0, 8, 4915264, 0, 8, 4849728, 0, 8, 4784192, 0, 8, 4718656, 0, 8, 4653120, 0, 8, 4587584, 0, 8, 4522048, 0, 8, 4456512, 0, 8, 4390976, 0, 8, 4325440, 0, 8, 4259904, 0, 8, 4194368, 0, 8, 4128832, 0, 8, 4063296, 0, 8, 3997760, 0, 8, 3932224, 0, 8, 3866688, 0, 8, 3801152, 0, 8, 3735616, 0, 8, 3670080, 0, 8, 3604544, 0, 8, 3539008, 0, 8, 3473472, 0, 8, 3407936, 0, 8, 3342400, 0, 8, 3276864, 0, 8, 3211328, 0, 8, 3145792, 0, 8, 3080256, 0, 8, 3014720, 0, 8, 2949184, 0, 8, 2883648, 0, 8, 2818112, 0, 8, 2752576, 0, 8, 2687040, 0, 8, 2621504, 0, 8, 2555968, 0, 8, 5046335, 0, 8, 4980799, 0, 8, 4915263, 0, 8, 4849727, 0, 8, 4784191, 0, 8, 4718655, 0, 8, 4653119, 0, 8, 4587583, 0, 8, 4522047, 0, 8, 4456511, 0, 8, 4390975, 0, 8, 4325439, 0, 8, 4259903, 0, 8, 4194367, 0, 8, 4128831, 0, 8, 4063295, 0, 8, 3997759, 0, 8, 3932223, 0, 8, 3866687, 0, 8, 3801151, 0, 8, 3735615, 0, 8, 3670079, 0, 8, 3604543, 0, 8, 3539007, 0, 8, 3473471, 0, 8, 3407935, 0, 8, 3342399, 0, 8, 3276863, 0, 8, 3211327, 0, 8, 3145791, 0, 8, 3080255, 0, 8, 3014719, 0, 8, 2949183, 0, 8, 2883647, 0, 8, 2818111, 0, 8, 2752575, 0, 8, 2687039, 0, 8, 2621503, 0, 8, 2555967, 0, 8, 5046334, 0, 8, 4980798, 0, 8, 4915262, 0, 8, 4849726, 0, 8, 4784190, 0, 8, 4718654, 0, 8, 4653118, 0, 8, 4587582, 0, 8, 4522046, 0, 8, 4456510, 0, 8, 4390974, 0, 8, 4325438, 0, 8, 4259902, 0, 8, 4194366, 0, 8, 4128830, 0, 8, 4063294, 0, 8, 3997758, 0, 8, 3932222, 0, 8, 3866686, 0, 8, 3801150, 0, 8, 3735614, 0, 8, 3670078, 0, 8, 3604542, 0, 8, 3539006, 0, 8, 3473470, 0, 8, 3407934, 0, 8, 3342398, 0, 8, 3276862, 0, 8, 3211326, 0, 8, 3145790, 0, 8, 3080254, 0, 8, 3014718, 0, 8, 2949182, 0, 8, 2883646, 0, 8, 2818110, 0, 8, 2752574, 0, 8, 2687038, 0, 8, 2621502, 0, 8, 2555966, 0, 8, 5046333, 0, 8, 4980797, 0, 8, 4915261, 0, 8, 4849725, 0, 8, 4784189, 0, 8, 4718653, 0, 8, 4653117, 0, 8, 4587581, 0, 8, 4522045, 0, 8, 4456509, 0, 8, 4390973, 0, 8, 4325437, 0, 8, 4259901, 0, 8, 4194365, 0, 8, 4128829, 0, 8, 4063293, 0, 8, 3997757, 0, 8, 3932221, 0, 8, 3866685, 0, 8, 3801149, 0, 8, 3735613, 0, 8, 3670077, 0, 8, 3604541, 0, 8, 3539005, 0, 8, 3473469, 0, 8, 3407933, 0, 8, 3342397, 0, 8, 3276861, 0, 8, 3211325, 0, 8, 3145789, 0, 8, 3080253, 0, 8, 3014717, 0, 8, 2949181, 0, 8, 2883645, 0, 8, 2818109, 0, 8, 2752573, 0, 8, 2687037, 0, 8, 2621501, 0, 8, 2555965, 0, 8, 5046332, 0, 8, 4980796, 0, 8, 4915260, 0, 8, 4849724, 0, 8, 4784188, 0, 8, 4718652, 0, 8, 4653116, 0, 8, 4587580, 0, 8, 4522044, 0, 8, 4456508, 0, 8, 4390972, 0, 8, 4325436, 0, 8, 4259900, 0, 8, 4194364, 0, 8, 4128828, 0, 8, 4063292, 0, 8, 3997756, 0, 8, 3932220, 0, 8, 3866684, 0, 8, 3801148, 0, 8, 3735612, 0, 8, 3670076, 0, 8, 3604540, 0, 8, 3539004, 0, 8, 3473468, 0, 8, 3407932, 0, 8, 3342396, 0, 8, 3276860, 0, 8, 3211324, 0, 8, 3145788, 0, 8, 3080252, 0, 8, 3014716, 0, 8, 2949180, 0, 8, 2883644, 0, 8, 2818108, 0, 8, 2752572, 0, 8, 2687036, 0, 8, 2621500, 0, 8, 2555964, 0, 8, 5046331, 0, 8, 4980795, 0, 8, 4915259, 0, 8, 4849723, 0, 8, 4784187, 0, 8, 4718651, 0, 8, 4653115, 0, 8, 4587579, 0, 8, 4522043, 0, 8, 4456507, 0, 8, 4390971, 0, 8, 4325435, 0, 8, 4259899, 0, 8, 4194363, 0, 8, 4128827, 0, 8, 4063291, 0, 8, 3997755, 0, 8, 3932219, 0, 8, 3866683, 0, 8, 3801147, 0, 8, 3735611, 0, 8, 3670075, 0, 8, 3604539, 0, 8, 3539003, 0, 8, 3473467, 0, 8, 3407931, 0, 8, 3342395, 0, 8, 3276859, 0, 8, 3211323, 0, 8, 3145787, 0, 8, 3080251, 0, 8, 3014715, 0, 8, 2949179, 0, 8, 2883643, 0, 8, 2818107, 0, 8, 2752571, 0, 8, 2687035, 0, 8, 2621499, 0, 8, 2555963, 0, 8, 5046330, 0, 8, 4980794, 0, 8, 4915258, 0, 8, 4849722, 0, 8, 4784186, 0, 8, 4718650, 0, 8, 4653114, 0, 8, 4587578, 0, 8, 4522042, 0, 8, 4456506, 0, 8, 4390970, 0, 8, 4325434, 0, 8, 4259898, 0, 8, 4194362, 0, 8, 4128826, 0, 8, 4063290, 0, 8, 3997754, 0, 8, 3932218, 0, 8, 3866682, 0, 8, 3801146, 0, 8, 3735610, 0, 8, 3670074, 0, 8, 3604538, 0, 8, 3539002, 0, 8, 3473466, 0, 8, 3407930, 0, 8, 3342394, 0, 8, 3276858, 0, 8, 3211322, 0, 8, 3145786, 0, 8, 3080250, 0, 8, 3014714, 0, 8, 2949178, 0, 8, 2883642, 0, 8, 2818106, 0, 8, 2752570, 0, 8, 2687034, 0, 8, 2621498, 0, 8, 2555962, 0, 8, 5046329, 0, 8, 4980793, 0, 8, 4915257, 0, 8, 4849721, 0, 8, 4784185, 0, 8, 4718649, 0, 8, 4653113, 0, 8, 4587577, 0, 8, 4522041, 0, 8, 4456505, 0, 8, 4390969, 0, 8, 4325433, 0, 8, 4259897, 0, 8, 4194361, 0, 8, 4128825, 0, 8, 4063289, 0, 8, 3997753, 0, 8, 3932217, 0, 8, 3866681, 0, 8, 3801145, 0, 8, 3735609, 0, 8, 3670073, 0, 8, 3604537, 0, 8, 3539001, 0, 8, 3473465, 0, 8, 3407929, 0, 8, 3342393, 0, 8, 3276857, 0, 8, 3211321, 0, 8, 3145785, 0, 8, 3080249, 0, 8, 3014713, 0, 8, 2949177, 0, 8, 2883641, 0, 8, 2818105, 0, 8, 2752569, 0, 8, 2687033, 0, 8, 2621497, 0, 8, 2555961, 0, 8, 5046328, 0, 8, 4980792, 0, 8, 4915256, 0, 8, 4849720, 0, 8, 4784184, 0, 8, 4718648, 0, 8, 4653112, 0, 8, 4587576, 0, 8, 4522040, 0, 8, 4456504, 0, 8, 4390968, 0, 8, 4325432, 0, 8, 4259896, 0, 8, 4194360, 0, 8, 4128824, 0, 8, 4063288, 0, 8, 3997752, 0, 8, 3932216, 0, 8, 3866680, 0, 8, 3801144, 0, 8, 3735608, 0, 8, 3670072, 0, 8, 3604536, 0, 8, 3539000, 0, 8, 3473464, 0, 8, 3407928, 0, 8, 3342392, 0, 8, 3276856, 0, 8, 3211320, 0, 8, 3145784, 0, 8, 3080248, 0, 8, 3014712, 0, 8, 2949176, 0, 8, 2883640, 0, 8, 2818104, 0, 8, 2752568, 0, 8, 2687032, 0, 8, 2621496, 0, 8, 2555960, 0, 8, 5046327, 0, 8, 4980791, 0, 8, 4915255, 0, 8, 4849719, 0, 8, 4784183, 0, 8, 4718647, 0, 8, 4653111, 0, 8, 4587575, 0, 8, 4522039, 0, 8, 4456503, 0, 8, 4390967, 0, 8, 4325431, 0, 8, 4259895, 0, 8, 4194359, 0, 8, 4128823, 0, 8, 4063287, 0, 8, 3997751, 0, 8, 3932215, 0, 8, 3866679, 0, 8, 3801143, 0, 8, 3735607, 0, 8, 3670071, 0, 8, 3604535, 0, 8, 3538999, 0, 8, 3473463, 0, 8, 3407927, 0, 8, 3342391, 0, 8, 3276855, 0, 8, 3211319, 0, 8, 3145783, 0, 8, 3080247, 0, 8, 3014711, 0, 8, 2949175, 0, 8, 2883639, 0, 8, 2818103, 0, 8, 2752567, 0, 8, 2687031, 0, 8, 2621495, 0, 8, 2555959, 0, 8, 5046326, 0, 8, 4980790, 0, 8, 4915254, 0, 8, 4849718, 0, 8, 4784182, 0, 8, 4718646, 0, 8, 4653110, 0, 8, 4587574, 0, 8, 4522038, 0, 8, 4456502, 0, 8, 4390966, 0, 8, 4325430, 0, 8, 4259894, 0, 8, 4194358, 0, 8, 4128822, 0, 8, 4063286, 0, 8, 3997750, 0, 8, 3932214, 0, 8, 3866678, 0, 8, 3801142, 0, 8, 3735606, 0, 8, 3670070, 0, 8, 3604534, 0, 8, 3538998, 0, 8, 3473462, 0, 8, 3407926, 0, 8, 3342390, 0, 8, 3276854, 0, 8, 3211318, 0, 8, 3145782, 0, 8, 3080246, 0, 8, 3014710, 0, 8, 2949174, 0, 8, 2883638, 0, 8, 2818102, 0, 8, 2752566, 0, 8, 2687030, 0, 8, 2621494, 0, 8, 2555958, 0, 8, 5046325, 0, 8, 4980789, 0, 8, 4915253, 0, 8, 4849717, 0, 8, 4784181, 0, 8, 4718645, 0, 8, 4653109, 0, 8, 4587573, 0, 8, 4522037, 0, 8, 4456501, 0, 8, 4390965, 0, 8, 4325429, 0, 8, 4259893, 0, 8, 4194357, 0, 8, 4128821, 0, 8, 4063285, 0, 8, 3997749, 0, 8, 3932213, 0, 8, 3866677, 0, 8, 3801141, 0, 8, 3735605, 0, 8, 3670069, 0, 8, 3604533, 0, 8, 3538997, 0, 8, 3473461, 0, 8, 3407925, 0, 8, 3342389, 0, 8, 3276853, 0, 8, 3211317, 0, 8, 3145781, 0, 8, 3080245, 0, 8, 3014709, 0, 8, 2949173, 0, 8, 2883637, 0, 8, 2818101, 0, 8, 2752565, 0, 8, 2687029, 0, 8, 2621493, 0, 8, 2555957, 0, 8, 5046324, 0, 8, 4980788, 0, 8, 4915252, 0, 8, 4849716, 0, 8, 4784180, 0, 8, 4718644, 0, 8, 4653108, 0, 8, 4587572, 0, 8, 4522036, 0, 8, 4456500, 0, 8, 4390964, 0, 8, 4325428, 0, 8, 4259892, 0, 8, 4194356, 0, 8, 4128820, 0, 8, 4063284, 0, 8, 3997748, 0, 8, 3932212, 0, 8, 3866676, 0, 8, 3801140, 0, 8, 3735604, 0, 8, 3670068, 0, 8, 3604532, 0, 8, 3538996, 0, 8, 3473460, 0, 8, 3407924, 0, 8, 3342388, 0, 8, 3276852, 0, 8, 3211316, 0, 8, 3145780, 0, 8, 3080244, 0, 8, 3014708, 0, 8, 2949172, 0, 8, 2883636, 0, 8, 2818100, 0, 8, 2752564, 0, 8, 2687028, 0, 8, 2621492, 0, 8, 2555956, 0, 8, 5046323, 0, 8, 4980787, 0, 8, 4915251, 0, 8, 4849715, 0, 8, 4784179, 0, 8, 4718643, 0, 8, 4653107, 0, 8, 4587571, 0, 8, 4522035, 0, 8, 4456499, 0, 8, 4390963, 0, 8, 4325427, 0, 8, 4259891, 0, 8, 4194355, 0, 8, 4128819, 0, 8, 4063283, 0, 8, 3997747, 0, 8, 3932211, 0, 8, 3866675, 0, 8, 3801139, 0, 8, 3735603, 0, 8, 3670067, 0, 8, 3604531, 0, 8, 3538995, 0, 8, 3473459, 0, 8, 3407923, 0, 8, 3342387, 0, 8, 3276851, 0, 8, 3211315, 0, 8, 3145779, 0, 8, 3080243, 0, 8, 3014707, 0, 8, 2949171, 0, 8, 2883635, 0, 8, 2818099, 0, 8, 2752563, 0, 8, 2687027, 0, 8, 2621491, 0, 8, 2555955, 0, 8, 5046322, 0, 8, 4980786, 0, 8, 4915250, 0, 8, 4849714, 0, 8, 4784178, 0, 8, 4718642, 0, 8, 4653106, 0, 8, 4587570, 0, 8, 4522034, 0, 8, 4456498, 0, 8, 4390962, 0, 8, 4325426, 0, 8, 4259890, 0, 8, 4194354, 0, 8, 4128818, 0, 8, 4063282, 0, 8, 3997746, 0, 8, 3932210, 0, 8, 3866674, 0, 8, 3801138, 0, 8, 3735602, 0, 8, 3670066, 0, 8, 3604530, 0, 8, 3538994, 0, 8, 3473458, 0, 8, 3407922, 0, 8, 3342386, 0, 8, 3276850, 0, 8, 3211314, 0, 8, 3145778, 0, 8, 3080242, 0, 8, 3014706, 0, 8, 2949170, 0, 8, 2883634, 0, 8, 2818098, 0, 8, 2752562, 0, 8, 2687026, 0, 8, 2621490, 0, 8, 2555954, 0, 8, 5046321, 0, 8, 4980785, 0, 8, 4915249, 0, 8, 4849713, 0, 8, 4784177, 0, 8, 4718641, 0, 8, 4653105, 0, 8, 4587569, 0, 8, 4522033, 0, 8, 4456497, 0, 8, 4390961, 0, 8, 4325425, 0, 8, 4259889, 0, 8, 4194353, 0, 8, 4128817, 0, 8, 4063281, 0, 8, 3997745, 0, 8, 3932209, 0, 8, 3866673, 0, 8, 3801137, 0, 8, 3735601, 0, 8, 3670065, 0, 8, 3604529, 0, 8, 3538993, 0, 8, 3473457, 0, 8, 3407921, 0, 8, 3342385, 0, 8, 3276849, 0, 8, 3211313, 0, 8, 3145777, 0, 8, 3080241, 0, 8, 3014705, 0, 8, 2949169, 0, 8, 2883633, 0, 8, 2818097, 0, 8, 2752561, 0, 8, 2687025, 0, 8, 2621489, 0, 8, 2555953, 0, 8, 5046320, 0, 8, 4980784, 0, 8, 4915248, 0, 8, 4849712, 0, 8, 4784176, 0, 8, 4718640, 0, 8, 4653104, 0, 8, 4587568, 0, 8, 4522032, 0, 8, 4456496, 0, 8, 4390960, 0, 8, 4325424, 0, 8, 4259888, 0, 8, 4194352, 0, 8, 4128816, 0, 8, 4063280, 0, 8, 3997744, 0, 8, 3932208, 0, 8, 3866672, 0, 8, 3801136, 0, 8, 3735600, 0, 8, 3670064, 0, 8, 3604528, 0, 8, 3538992, 0, 8, 3473456, 0, 8, 3407920, 0, 8, 3342384, 0, 8, 3276848, 0, 8, 3211312, 0, 8, 3145776, 0, 8, 3080240, 0, 8, 3014704, 0, 8, 2949168, 0, 8, 2883632, 0, 8, 2818096, 0, 8, 2752560, 0, 8, 2687024, 0, 8, 2621488, 0, 8, 2555952, 0, 8, 5046319, 0, 8, 4980783, 0, 8, 4915247, 0, 8, 4849711, 0, 8, 4784175, 0, 8, 4718639, 0, 8, 4653103, 0, 8, 4587567, 0, 8, 4522031, 0, 8, 4456495, 0, 8, 4390959, 0, 8, 4325423, 0, 8, 4259887, 0, 8, 4194351, 0, 8, 4128815, 0, 8, 4063279, 0, 8, 3997743, 0, 8, 3932207, 0, 8, 3866671, 0, 8, 3801135, 0, 8, 3735599, 0, 8, 3670063, 0, 8, 3604527, 0, 8, 3538991, 0, 8, 3473455, 0, 8, 3407919, 0, 8, 3342383, 0, 8, 3276847, 0, 8, 3211311, 0, 8, 3145775, 0, 8, 3080239, 0, 8, 3014703, 0, 8, 2949167, 0, 8, 2883631, 0, 8, 2818095, 0, 8, 2752559, 0, 8, 2687023, 0, 8, 2621487, 0, 8, 2555951, 0, 8, 5046318, 0, 8, 4980782, 0, 8, 4915246, 0, 8, 4849710, 0, 8, 4784174, 0, 8, 4718638, 0, 8, 4653102, 0, 8, 4587566, 0, 8, 4522030, 0, 8, 4456494, 0, 8, 4390958, 0, 8, 4325422, 0, 8, 4259886, 0, 8, 4194350, 0, 8, 4128814, 0, 8, 4063278, 0, 8, 3997742, 0, 8, 3932206, 0, 8, 3866670, 0, 8, 3801134, 0, 8, 3735598, 0, 8, 3670062, 0, 8, 3604526, 0, 8, 3538990, 0, 8, 3473454, 0, 8, 3407918, 0, 8, 3342382, 0, 8, 3276846, 0, 8, 3211310, 0, 8, 3145774, 0, 8, 3080238, 0, 8, 3014702, 0, 8, 2949166, 0, 8, 2883630, 0, 8, 2818094, 0, 8, 2752558, 0, 8, 2687022, 0, 8, 2621486, 0, 8, 2555950, 0, 8, 5046317, 0, 8, 4980781, 0, 8, 4915245, 0, 8, 4849709, 0, 8, 4784173, 0, 8, 4718637, 0, 8, 4653101, 0, 8, 4587565, 0, 8, 4522029, 0, 8, 4456493, 0, 8, 4390957, 0, 8, 4325421, 0, 8, 4259885, 0, 8, 4194349, 0, 8, 4128813, 0, 8, 4063277, 0, 8, 3997741, 0, 8, 3932205, 0, 8, 3866669, 0, 8, 3801133, 0, 8, 3735597, 0, 8, 3670061, 0, 8, 3604525, 0, 8, 3538989, 0, 8, 3473453, 0, 8, 3407917, 0, 8, 3342381, 0, 8, 3276845, 0, 8, 3211309, 0, 8, 3145773, 0, 8, 3080237, 0, 8, 3014701, 0, 8, 2949165, 0, 8, 2883629, 0, 8, 2818093, 0, 8, 2752557, 0, 8, 2687021, 0, 8, 2621485, 0, 8, 2555949, 0, 8, 5046316, 0, 8, 4980780, 0, 8, 4915244, 0, 8, 4849708, 0, 8, 4784172, 0, 8, 4718636, 0, 8, 4653100, 0, 8, 4587564, 0, 8, 4522028, 0, 8, 4456492, 0, 8, 4390956, 0, 8, 4325420, 0, 8, 4259884, 0, 8, 4194348, 0, 8, 4128812, 0, 8, 4063276, 0, 8, 3997740, 0, 8, 3932204, 0, 8, 3866668, 0, 8, 3801132, 0, 8, 3735596, 0, 8, 3670060, 0, 8, 3604524, 0, 8, 3538988, 0, 8, 3473452, 0, 8, 3407916, 0, 8, 3342380, 0, 8, 3276844, 0, 8, 3211308, 0, 8, 3145772, 0, 8, 3080236, 0, 8, 3014700, 0, 8, 2949164, 0, 8, 2883628, 0, 8, 2818092, 0, 8, 2752556, 0, 8, 2687020, 0, 8, 2621484, 0, 8, 2555948, 0, 8, 5046315, 0, 8, 4980779, 0, 8, 4915243, 0, 8, 4849707, 0, 8, 4784171, 0, 8, 4718635, 0, 8, 4653099, 0, 8, 4587563, 0, 8, 4522027, 0, 8, 4456491, 0, 8, 4390955, 0, 8, 4325419, 0, 8, 4259883, 0, 8, 4194347, 0, 8, 4128811, 0, 8, 4063275, 0, 8, 3997739, 0, 8, 3932203, 0, 8, 3866667, 0, 8, 3801131, 0, 8, 3735595, 0, 8, 3670059, 0, 8, 3604523, 0, 8, 3538987, 0, 8, 3473451, 0, 8, 3407915, 0, 8, 3342379, 0, 8, 3276843, 0, 8, 3211307, 0, 8, 3145771, 0, 8, 3080235, 0, 8, 3014699, 0, 8, 2949163, 0, 8, 2883627, 0, 8, 2818091, 0, 8, 2752555, 0, 8, 2687019, 0, 8, 2621483, 0, 8, 2555947, 0, 8, 5046314, 0, 8, 4980778, 0, 8, 4915242, 0, 8, 4849706, 0, 8, 4784170, 0, 8, 4718634, 0, 8, 4653098, 0, 8, 4587562, 0, 8, 4522026, 0, 8, 4456490, 0, 8, 4390954, 0, 8, 4325418, 0, 8, 4259882, 0, 8, 4194346, 0, 8, 4128810, 0, 8, 4063274, 0, 8, 3997738, 0, 8, 3932202, 0, 8, 3866666, 0, 8, 3801130, 0, 8, 3735594, 0, 8, 3670058, 0, 8, 3604522, 0, 8, 3538986, 0, 8, 3473450, 0, 8, 3407914, 0, 8, 3342378, 0, 8, 3276842, 0, 8, 3211306, 0, 8, 3145770, 0, 8, 3080234, 0, 8, 3014698, 0, 8, 2949162, 0, 8, 2883626, 0, 8, 2818090, 0, 8, 2752554, 0, 8, 2687018, 0, 8, 2621482, 0, 8, 2555946, 0, 8, 5046313, 0, 8, 4980777, 0, 8, 4915241, 0, 8, 4849705, 0, 8, 4784169, 0, 8, 4718633, 0, 8, 4653097, 0, 8, 4587561, 0, 8, 4522025, 0, 8, 4456489, 0, 8, 4390953, 0, 8, 4325417, 0, 8, 4259881, 0, 8, 4194345, 0, 8, 4128809, 0, 8, 4063273, 0, 8, 3997737, 0, 8, 3932201, 0, 8, 3866665, 0, 8, 3801129, 0, 8, 3735593, 0, 8, 3670057, 0, 8, 3604521, 0, 8, 3538985, 0, 8, 3473449, 0, 8, 3407913, 0, 8, 3342377, 0, 8, 3276841, 0, 8, 3211305, 0, 8, 3145769, 0, 8, 3080233, 0, 8, 3014697, 0, 8, 2949161, 0, 8, 2883625, 0, 8, 2818089, 0, 8, 2752553, 0, 8, 2687017, 0, 8, 2621481, 0, 8, 2555945, 0, 8, 5046312, 0, 8, 4980776, 0, 8, 4915240, 0, 8, 4849704, 0, 8, 4784168, 0, 8, 4718632, 0, 8, 4653096, 0, 8, 4587560, 0, 8, 4522024, 0, 8, 4456488, 0, 8, 4390952, 0, 8, 4325416, 0, 8, 4259880, 0, 8, 4194344, 0, 8, 4128808, 0, 8, 4063272, 0, 8, 3997736, 0, 8, 3932200, 0, 8, 3866664, 0, 8, 3801128, 0, 8, 3735592, 0, 8, 3670056, 0, 8, 3604520, 0, 8, 3538984, 0, 8, 3473448, 0, 8, 3407912, 0, 8, 3342376, 0, 8, 3276840, 0, 8, 3211304, 0, 8, 3145768, 0, 8, 3080232, 0, 8, 3014696, 0, 8, 2949160, 0, 8, 2883624, 0, 8, 2818088, 0, 8, 2752552, 0, 8, 2687016, 0, 8, 2621480, 0, 8, 2555944, 0, 8, 5046311, 0, 8, 4980775, 0, 8, 4915239, 0, 8, 4849703, 0, 8, 4784167, 0, 8, 4718631, 0, 8, 4653095, 0, 8, 4587559, 0, 8, 4522023, 0, 8, 4456487, 0, 8, 4390951, 0, 8, 4325415, 0, 8, 4259879, 0, 8, 4194343, 0, 8, 4128807, 0, 8, 4063271, 0, 8, 3997735, 0, 8, 3932199, 0, 8, 3866663, 0, 8, 3801127, 0, 8, 3735591, 0, 8, 3670055, 0, 8, 3604519, 0, 8, 3538983, 0, 8, 3473447, 0, 8, 3407911, 0, 8, 3342375, 0, 8, 3276839, 0, 8, 3211303, 0, 8, 3145767, 0, 8, 3080231, 0, 8, 3014695, 0, 8, 2949159, 0, 8, 2883623, 0, 8, 2818087, 0, 8, 2752551, 0, 8, 2687015, 0, 8, 2621479, 0, 8, 2555943, 0, 8, 5046310, 0, 8, 4980774, 0, 8, 4915238, 0, 8, 4849702, 0, 8, 4784166, 0, 8, 4718630, 0, 8, 4653094, 0, 8, 4587558, 0, 8, 4522022, 0, 8, 4456486, 0, 8, 4390950, 0, 8, 4325414, 0, 8, 4259878, 0, 8, 4194342, 0, 8, 4128806, 0, 8, 4063270, 0, 8, 3997734, 0, 8, 3932198, 0, 8, 3866662, 0, 8, 3801126, 0, 8, 3735590, 0, 8, 3670054, 0, 8, 3604518, 0, 8, 3538982, 0, 8, 3473446, 0, 8, 3407910, 0, 8, 3342374, 0, 8, 3276838, 0, 8, 3211302, 0, 8, 3145766, 0, 8, 3080230, 0, 8, 3014694, 0, 8, 2949158, 0, 8, 2883622, 0, 8, 2818086, 0, 8, 2752550, 0, 8, 2687014, 0, 8, 2621478, 0, 8, 2555942, 0, 8, 5046309, 0, 8, 4980773, 0, 8, 4915237, 0, 8, 4849701, 0, 8, 4784165, 0, 8, 4718629, 0, 8, 4653093, 0, 8, 4587557, 0, 8, 4522021, 0, 8, 4456485, 0, 8, 4390949, 0, 8, 4325413, 0, 8, 4259877, 0, 8, 4194341, 0, 8, 4128805, 0, 8, 4063269, 0, 8, 3997733, 0, 8, 3932197, 0, 8, 3866661, 0, 8, 3801125, 0, 8, 3735589, 0, 8, 3670053, 0, 8, 3604517, 0, 8, 3538981, 0, 8, 3473445, 0, 8, 3407909, 0, 8, 3342373, 0, 8, 3276837, 0, 8, 3211301, 0, 8, 3145765, 0, 8, 3080229, 0, 8, 3014693, 0, 8, 2949157, 0, 8, 2883621, 0, 8, 2818085, 0, 8, 2752549, 0, 8, 2687013, 0, 8, 2621477, 0, 8, 2555941, 0, 8, 5046308, 0, 8, 4980772, 0, 8, 4915236, 0, 8, 4849700, 0, 8, 4784164, 0, 8, 4718628, 0, 8, 4653092, 0, 8, 4587556, 0, 8, 4522020, 0, 8, 4456484, 0, 8, 4390948, 0, 8, 4325412, 0, 8, 4259876, 0, 8, 4194340, 0, 8, 4128804, 0, 8, 4063268, 0, 8, 3997732, 0, 8, 3932196, 0, 8, 3866660, 0, 8, 3801124, 0, 8, 3735588, 0, 8, 3670052, 0, 8, 3604516, 0, 8, 3538980, 0, 8, 3473444, 0, 8, 3407908, 0, 8, 3342372, 0, 8, 3276836, 0, 8, 3211300, 0, 8, 3145764, 0, 8, 3080228, 0, 8, 3014692, 0, 8, 2949156, 0, 8, 2883620, 0, 8, 2818084, 0, 8, 2752548, 0, 8, 2687012, 0, 8, 2621476, 0, 8, 2555940, 0, 8, 5046307, 0, 8, 4980771, 0, 8, 4915235, 0, 8, 4849699, 0, 8, 4784163, 0, 8, 4718627, 0, 8, 4653091, 0, 8, 4587555, 0, 8, 4522019, 0, 8, 4456483, 0, 8, 4390947, 0, 8, 4325411, 0, 8, 4259875, 0, 8, 4194339, 0, 8, 4128803, 0, 8, 4063267, 0, 8, 3997731, 0, 8, 3932195, 0, 8, 3866659, 0, 8, 3801123, 0, 8, 3735587, 0, 8, 3670051, 0, 8, 3604515, 0, 8, 3538979, 0, 8, 3473443, 0, 8, 3407907, 0, 8, 3342371, 0, 8, 3276835, 0, 8, 3211299, 0, 8, 3145763, 0, 8, 3080227, 0, 8, 3014691, 0, 8, 2949155, 0, 8, 2883619, 0, 8, 2818083, 0, 8, 2752547, 0, 8, 2687011, 0, 8, 2621475, 0, 8, 2555939, 0, 8, 5046306, 0, 8, 4980770, 0, 8, 4915234, 0, 8, 4849698, 0, 8, 4784162, 0, 8, 4718626, 0, 8, 4653090, 0, 8, 4587554, 0, 8, 4522018, 0, 8, 4456482, 0, 8, 4390946, 0, 8, 4325410, 0, 8, 4259874, 0, 8, 4194338, 0, 8, 4128802, 0, 8, 4063266, 0, 8, 3997730, 0, 8, 3932194, 0, 8, 3866658, 0, 8, 3801122, 0, 8, 3735586, 0, 8, 3670050, 0, 8, 3604514, 0, 8, 3538978, 0, 8, 3473442, 0, 8, 3407906, 0, 8, 3342370, 0, 8, 3276834, 0, 8, 3211298, 0, 8, 3145762, 0, 8, 3080226, 0, 8, 3014690, 0, 8, 2949154, 0, 8, 2883618, 0, 8, 2818082, 0, 8, 2752546, 0, 8, 2687010, 0, 8, 2621474, 0, 8, 2555938, 0, 8, 5046305, 0, 8, 4980769, 0, 8, 4915233, 0, 8, 4849697, 0, 8, 4784161, 0, 8, 4718625, 0, 8, 4653089, 0, 8, 4587553, 0, 8, 4522017, 0, 8, 4456481, 0, 8, 4390945, 0, 8, 4325409, 0, 8, 4259873, 0, 8, 4194337, 0, 8, 4128801, 0, 8, 4063265, 0, 8, 3997729, 0, 8, 3932193, 0, 8, 3866657, 0, 8, 3801121, 0, 8, 3735585, 0, 8, 3670049, 0, 8, 3604513, 0, 8, 3538977, 0, 8, 3473441, 0, 8, 3407905, 0, 8, 3342369, 0, 8, 3276833, 0, 8, 3211297, 0, 8, 3145761, 0, 8, 3080225, 0, 8, 3014689, 0, 8, 2949153, 0, 8, 2883617, 0, 8, 2818081, 0, 8, 2752545, 0, 8, 2687009, 0, 8, 2621473, 0, 8, 2555937, 0, 8, 5046304, 0, 8, 4980768, 0, 8, 4915232, 0, 8, 4849696, 0, 8, 4784160, 0, 8, 4718624, 0, 8, 4653088, 0, 8, 4587552, 0, 8, 4522016, 0, 8, 4456480, 0, 8, 4390944, 0, 8, 4325408, 0, 8, 4259872, 0, 8, 4194336, 0, 8, 4128800, 0, 8, 4063264, 0, 8, 3997728, 0, 8, 3932192, 0, 8, 3866656, 0, 8, 3801120, 0, 8, 3735584, 0, 8, 3670048, 0, 8, 3604512, 0, 8, 3538976, 0, 8, 3473440, 0, 8, 3407904, 0, 8, 3342368, 0, 8, 3276832, 0, 8, 3211296, 0, 8, 3145760, 0, 8, 3080224, 0, 8, 3014688, 0, 8, 2949152, 0, 8, 2883616, 0, 8, 2818080, 0, 8, 2752544, 0, 8, 2687008, 0, 8, 2621472, 0, 8, 2555936, 0, 8, 5046303, 0, 8, 4980767, 0, 8, 4915231, 0, 8, 4849695, 0, 8, 4784159, 0, 8, 4718623, 0, 8, 4653087, 0, 8, 4587551, 0, 8, 4522015, 0, 8, 4456479, 0, 8, 4390943, 0, 8, 4325407, 0, 8, 4259871, 0, 8, 4194335, 0, 8, 4128799, 0, 8, 4063263, 0, 8, 3997727, 0, 8, 3932191, 0, 8, 3866655, 0, 8, 3801119, 0, 8, 3735583, 0, 8, 3670047, 0, 8, 3604511, 0, 8, 3538975, 0, 8, 3473439, 0, 8, 3407903, 0, 8, 3342367, 0, 8, 3276831, 0, 8, 3211295, 0, 8, 3145759, 0, 8, 3080223, 0, 8, 3014687, 0, 8, 2949151, 0, 8, 2883615, 0, 8, 2818079, 0, 8, 2752543, 0, 8, 2687007, 0, 8, 2621471, 0, 8, 2555935, 0, 8, 5046302, 0, 8, 4980766, 0, 8, 4915230, 0, 8, 4849694, 0, 8, 4784158, 0, 8, 4718622, 0, 8, 4653086, 0, 8, 4587550, 0, 8, 4522014, 0, 8, 4456478, 0, 8, 4390942, 0, 8, 4325406, 0, 8, 4259870, 0, 8, 4194334, 0, 8, 4128798, 0, 8, 4063262, 0, 8, 3997726, 0, 8, 3932190, 0, 8, 3866654, 0, 8, 3801118, 0, 8, 3735582, 0, 8, 3670046, 0, 8, 3604510, 0, 8, 3538974, 0, 8, 3473438, 0, 8, 3407902, 0, 8, 3342366, 0, 8, 3276830, 0, 8, 3211294, 0, 8, 3145758, 0, 8, 3080222, 0, 8, 3014686, 0, 8, 2949150, 0, 8, 2883614, 0, 8, 2818078, 0, 8, 2752542, 0, 8, 2687006, 0, 8, 2621470, 0, 8, 2555934, 0, 8, 5046301, 0, 8, 4980765, 0, 8, 4915229, 0, 8, 4849693, 0, 8, 4784157, 0, 8, 4718621, 0, 8, 4653085, 0, 8, 4587549, 0, 8, 4522013, 0, 8, 4456477, 0, 8, 4390941, 0, 8, 4325405, 0, 8, 4259869, 0, 8, 4194333, 0, 8, 4128797, 0, 8, 4063261, 0, 8, 3997725, 0, 8, 3932189, 0, 8, 3866653, 0, 8, 3801117, 0, 8, 3735581, 0, 8, 3670045, 0, 8, 3604509, 0, 8, 3538973, 0, 8, 3473437, 0, 8, 3407901, 0, 8, 3342365, 0, 8, 3276829, 0, 8, 3211293, 0, 8, 3145757, 0, 8, 3080221, 0, 8, 3014685, 0, 8, 2949149, 0, 8, 2883613, 0, 8, 2818077, 0, 8, 2752541, 0, 8, 2687005, 0, 8, 2621469, 0, 8, 2555933, 0, 8, 5046300, 0, 8, 4980764, 0, 8, 4915228, 0, 8, 4849692, 0, 8, 4784156, 0, 8, 4718620, 0, 8, 4653084, 0, 8, 4587548, 0, 8, 4522012, 0, 8, 4456476, 0, 8, 4390940, 0, 8, 4325404, 0, 8, 4259868, 0, 8, 4194332, 0, 8, 4128796, 0, 8, 4063260, 0, 8, 3997724, 0, 8, 3932188, 0, 8, 3866652, 0, 8, 3801116, 0, 8, 3735580, 0, 8, 3670044, 0, 8, 3604508, 0, 8, 3538972, 0, 8, 3473436, 0, 8, 3407900, 0, 8, 3342364, 0, 8, 3276828, 0, 8, 3211292, 0, 8, 3145756, 0, 8, 3080220, 0, 8, 3014684, 0, 8, 2949148, 0, 8, 2883612, 0, 8, 2818076, 0, 8, 2752540, 0, 8, 2687004, 0, 8, 2621468, 0, 8, 2555932, 0, 8, 5046299, 0, 8, 4980763, 0, 8, 4915227, 0, 8, 4849691, 0, 8, 4784155, 0, 8, 4718619, 0, 8, 4653083, 0, 8, 4587547, 0, 8, 4522011, 0, 8, 4456475, 0, 8, 4390939, 0, 8, 4325403, 0, 8, 4259867, 0, 8, 4194331, 0, 8, 4128795, 0, 8, 4063259, 0, 8, 3997723, 0, 8, 3932187, 0, 8, 3866651, 0, 8, 3801115, 0, 8, 3735579, 0, 8, 3670043, 0, 8, 3604507, 0, 8, 3538971, 0, 8, 3473435, 0, 8, 3407899, 0, 8, 3342363, 0, 8, 3276827, 0, 8, 3211291, 0, 8, 3145755, 0, 8, 3080219, 0, 8, 3014683, 0, 8, 2949147, 0, 8, 2883611, 0, 8, 2818075, 0, 8, 2752539, 0, 8, 2687003, 0, 8, 2621467, 0, 8, 2555931, 0, 8, 5046298, 0, 8, 4980762, 0, 8, 4915226, 0, 8, 4849690, 0, 8, 4784154, 0, 8, 4718618, 0, 8, 4653082, 0, 8, 4587546, 0, 8, 4522010, 0, 8, 4456474, 0, 8, 4390938, 0, 8, 4325402, 0, 8, 4259866, 0, 8, 4194330, 0, 8, 4128794, 0, 8, 4063258, 0, 8, 3997722, 0, 8, 3932186, 0, 8, 3866650, 0, 8, 3801114, 0, 8, 3735578, 0, 8, 3670042, 0, 8, 3604506, 0, 8, 3538970, 0, 8, 3473434, 0, 8, 3407898, 0, 8, 3342362, 0, 8, 3276826, 0, 8, 3211290, 0, 8, 3145754, 0, 8, 3080218, 0, 8, 3014682, 0, 8, 2949146, 0, 8, 2883610, 0, 8, 2818074, 0, 8, 2752538, 0, 8, 2687002, 0, 8, 2621466, 0, 8, 2555930, 0, 8, 5046297, 0, 8, 4980761, 0, 8, 4915225, 0, 8, 4849689, 0, 8, 4784153, 0, 8, 4718617, 0, 8, 4653081, 0, 8, 4587545, 0, 8, 4522009, 0, 8, 4456473, 0, 8, 4390937, 0, 8, 4325401, 0, 8, 4259865, 0, 8, 4194329, 0, 8, 4128793, 0, 8, 4063257, 0, 8, 3997721, 0, 8, 3932185, 0, 8, 3866649, 0, 8, 3801113, 0, 8, 3735577, 0, 8, 3670041, 0, 8, 3604505, 0, 8, 3538969, 0, 8, 3473433, 0, 8, 3407897, 0, 8, 3342361, 0, 8, 3276825, 0, 8, 3211289, 0, 8, 3145753, 0, 8, 3080217, 0, 8, 3014681, 0, 8, 2949145, 0, 8, 2883609, 0, 8, 2818073, 0, 8, 2752537, 0, 8, 2687001, 0, 8, 2621465, 0, 8, 2555929, 0, 8, 5046296, 0, 8, 4980760, 0, 8, 4915224, 0, 8, 4849688, 0, 8, 4784152, 0, 8, 4718616, 0, 8, 4653080, 0, 8, 4587544, 0, 8, 4522008, 0, 8, 4456472, 0, 8, 4390936, 0, 8, 4325400, 0, 8, 4259864, 0, 8, 4194328, 0, 8, 4128792, 0, 8, 4063256, 0, 8, 3997720, 0, 8, 3932184, 0, 8, 3866648, 0, 8, 3801112, 0, 8, 3735576, 0, 8, 3670040, 0, 8, 3604504, 0, 8, 3538968, 0, 8, 3473432, 0, 8, 3407896, 0, 8, 3342360, 0, 8, 3276824, 0, 8, 3211288, 0, 8, 3145752, 0, 8, 3080216, 0, 8, 3014680, 0, 8, 2949144, 0, 8, 2883608, 0, 8, 2818072, 0, 8, 2752536, 0, 8, 2687000, 0, 8, 2621464, 0, 8, 2555928, 0, 8, 5046295, 0, 8, 4980759, 0, 8, 4915223, 0, 8, 4849687, 0, 8, 4784151, 0, 8, 4718615, 0, 8, 4653079, 0, 8, 4587543, 0, 8, 4522007, 0, 8, 4456471, 0, 8, 4390935, 0, 8, 4325399, 0, 8, 4259863, 0, 8, 4194327, 0, 8, 4128791, 0, 8, 4063255, 0, 8, 3997719, 0, 8, 3932183, 0, 8, 3866647, 0, 8, 3801111, 0, 8, 3735575, 0, 8, 3670039, 0, 8, 3604503, 0, 8, 3538967, 0, 8, 3473431, 0, 8, 3407895, 0, 8, 3342359, 0, 8, 3276823, 0, 8, 3211287, 0, 8, 3145751, 0, 8, 3080215, 0, 8, 3014679, 0, 8, 2949143, 0, 8, 2883607, 0, 8, 2818071, 0, 8, 2752535, 0, 8, 2686999, 0, 8, 2621463, 0, 8, 2555927, 0, 8, 5046294, 0, 8, 4980758, 0, 8, 4915222, 0, 8, 4849686, 0, 8, 4784150, 0, 8, 4718614, 0, 8, 4653078, 0, 8, 4587542, 0, 8, 4522006, 0, 8, 4456470, 0, 8, 4390934, 0, 8, 4325398, 0, 8, 4259862, 0, 8, 4194326, 0, 8, 4128790, 0, 8, 4063254, 0, 8, 3997718, 0, 8, 3932182, 0, 8, 3866646, 0, 8, 3801110, 0, 8, 3735574, 0, 8, 3670038, 0, 8, 3604502, 0, 8, 3538966, 0, 8, 3473430, 0, 8, 3407894, 0, 8, 3342358, 0, 8, 3276822, 0, 8, 3211286, 0, 8, 3145750, 0, 8, 3080214, 0, 8, 3014678, 0, 8, 2949142, 0, 8, 2883606, 0, 8, 2818070, 0, 8, 2752534, 0, 8, 2686998, 0, 8, 2621462, 0, 8, 2555926, 0, 8, 5046293, 0, 8, 4980757, 0, 8, 4915221, 0, 8, 4849685, 0, 8, 4784149, 0, 8, 4718613, 0, 8, 4653077, 0, 8, 4587541, 0, 8, 4522005, 0, 8, 4456469, 0, 8, 4390933, 0, 8, 4325397, 0, 8, 4259861, 0, 8, 4194325, 0, 8, 4128789, 0, 8, 4063253, 0, 8, 3997717, 0, 8, 3932181, 0, 8, 3866645, 0, 8, 3801109, 0, 8, 3735573, 0, 8, 3670037, 0, 8, 3604501, 0, 8, 3538965, 0, 8, 3473429, 0, 8, 3407893, 0, 8, 3342357, 0, 8, 3276821, 0, 8, 3211285, 0, 8, 3145749, 0, 8, 3080213, 0, 8, 3014677, 0, 8, 2949141, 0, 8, 2883605, 0, 8, 2818069, 0, 8, 2752533, 0, 8, 2686997, 0, 8, 2621461, 0, 8, 2555925, 0, 8, 5046292, 0, 8, 4980756, 0, 8, 4915220, 0, 8, 4849684, 0, 8, 4784148, 0, 8, 4718612, 0, 8, 4653076, 0, 8, 4587540, 0, 8, 4522004, 0, 8, 4456468, 0, 8, 4390932, 0, 8, 4325396, 0, 8, 4259860, 0, 8, 4194324, 0, 8, 4128788, 0, 8, 4063252, 0, 8, 3997716, 0, 8, 3932180, 0, 8, 3866644, 0, 8, 3801108, 0, 8, 3735572, 0, 8, 3670036, 0, 8, 3604500, 0, 8, 3538964, 0, 8, 3473428, 0, 8, 3407892, 0, 8, 3342356, 0, 8, 3276820, 0, 8, 3211284, 0, 8, 3145748, 0, 8, 3080212, 0, 8, 3014676, 0, 8, 2949140, 0, 8, 2883604, 0, 8, 2818068, 0, 8, 2752532, 0, 8, 2686996, 0, 8, 2621460, 0, 8, 2555924, 0, 8, 5046291, 0, 8, 4980755, 0, 8, 4915219, 0, 8, 4849683, 0, 8, 4784147, 0, 8, 4718611, 0, 8, 4653075, 0, 8, 4587539, 0, 8, 4522003, 0, 8, 4456467, 0, 8, 4390931, 0, 8, 4325395, 0, 8, 4259859, 0, 8, 4194323, 0, 8, 4128787, 0, 8, 4063251, 0, 8, 3997715, 0, 8, 3932179, 0, 8, 3866643, 0, 8, 3801107, 0, 8, 3735571, 0, 8, 3670035, 0, 8, 3604499, 0, 8, 3538963, 0, 8, 3473427, 0, 8, 3407891, 0, 8, 3342355, 0, 8, 3276819, 0, 8, 3211283, 0, 8, 3145747, 0, 8, 3080211, 0, 8, 3014675, 0, 8, 2949139, 0, 8, 2883603, 0, 8, 2818067, 0, 8, 2752531, 0, 8, 2686995, 0, 8, 2621459, 0, 8, 2555923, 0, 8, 5046290, 0, 8, 4980754, 0, 8, 4915218, 0, 8, 4849682, 0, 8, 4784146, 0, 8, 4718610, 0, 8, 4653074, 0, 8, 4587538, 0, 8, 4522002, 0, 8, 4456466, 0, 8, 4390930, 0, 8, 4325394, 0, 8, 4259858, 0, 8, 4194322, 0, 8, 4128786, 0, 8, 4063250, 0, 8, 3997714, 0, 8, 3932178, 0, 8, 3866642, 0, 8, 3801106, 0, 8, 5046289, 0, 8, 4980753, 0, 8, 4915217, 0, 8, 4849681, 0, 8, 4784145, 0, 8, 4718609, 0, 8, 4653073, 0, 8, 4587537, 0, 8, 4522001, 0, 8, 4456465, 0, 8, 4390929, 0, 8, 4325393, 0, 8, 4259857, 0, 8, 4194321, 0, 8, 4128785, 0, 8, 4063249, 0, 8, 3997713, 0, 8, 3932177, 0, 8, 3866641, 0, 8, 3801105, 0, 8, 5046288, 0, 8, 4980752, 0, 8, 4915216, 0, 8, 4849680, 0, 8, 4784144, 0, 8, 4718608, 0, 8, 4653072, 0, 8, 4587536, 0, 8, 4522000, 0, 8, 4456464, 0, 8, 4390928, 0, 8, 4325392, 0, 8, 4259856, 0, 8, 4194320, 0, 8, 4128784, 0, 8, 4063248, 0, 8, 3997712, 0, 8, 3932176, 0, 8, 3866640, 0, 8, 3801104, 0, 8, 5046287, 0, 8, 4980751, 0, 8, 4915215, 0, 8, 4849679, 0, 8, 4784143, 0, 8, 4718607, 0, 8, 4653071, 0, 8, 4587535, 0, 8, 4521999, 0, 8, 4456463, 0, 8, 4390927, 0, 8, 4325391, 0, 8, 4259855, 0, 8, 4194319, 0, 8, 4128783, 0, 8, 4063247, 0, 8, 3997711, 0, 8, 3932175, 0, 8, 3866639, 0, 8, 3801103, 0, 8, 5046286, 0, 8, 4980750, 0, 8, 4915214, 0, 8, 4849678, 0, 8, 4784142, 0, 8, 4718606, 0, 8, 4653070, 0, 8, 4587534, 0, 8, 4521998, 0, 8, 4456462, 0, 8, 4390926, 0, 8, 4325390, 0, 8, 4259854, 0, 8, 4194318, 0, 8, 4128782, 0, 8, 4063246, 0, 8, 3997710, 0, 8, 3932174, 0, 8, 3866638, 0, 8, 3801102, 0, 8, 5046285, 0, 8, 4980749, 0, 8, 4915213, 0, 8, 4849677, 0, 8, 4784141, 0, 8, 4718605, 0, 8, 4653069, 0, 8, 4587533, 0, 8, 4521997, 0, 8, 4456461, 0, 8, 4390925, 0, 8, 4325389, 0, 8, 4259853, 0, 8, 4194317, 0, 8, 4128781, 0, 8, 4063245, 0, 8, 3997709, 0, 8, 3932173, 0, 8, 3866637, 0, 8, 3801101, 0, 8, 3801100, 196608, 3, 3866636, 196608, 3, 3932172, 196608, 3, 3997708, 196608, 3, 4063244, 196608, 3, 4128780, 196608, 3, 4194316, 196608, 3, 4259852, 196608, 3, 4325388, 196608, 3, 4390924, 196608, 3, 4456460, 196608, 3, 4521996, 196608, 3, 4587532, 196608, 3, 4653068, 196608, 3, 4718604, 196608, 3, 4784140, 196608, 3, 4849676, 196608, 3, 4915212, 196608, 3, 4980748, 196608, 3, 5046284, 196608, 3, 5111822, 131072, 2, 5111820, 720896, 2, 5111823, 131072, 2, 5111821, 131072, 2, 5111824, 131072, 2, 5111825, 131072, 2, 5111826, 131072, 2, 2490387, 131072, 7, 5111827, 131072, 2, 2490388, 131072, 7, 5111828, 131072, 2, 2490389, 131072, 7, 5111829, 131072, 2, 2490390, 131072, 7, 5111830, 131072, 2, 2490391, 131072, 7, 5111831, 131072, 2, 2490392, 131072, 7, 5111832, 131072, 2, 2490393, 131072, 7, 5111833, 131072, 2, 2490394, 131072, 7, 5111834, 131072, 2, 2490395, 131072, 7, 5111835, 131072, 2, 2490396, 131072, 7, 5111836, 131072, 2, 2490397, 131072, 7, 5111837, 131072, 2, 2490398, 131072, 7, 5111838, 131072, 2, 2490399, 131072, 7, 5111839, 131072, 2, 2490400, 131072, 7, 5111840, 131072, 2, 2490401, 131072, 7, 5111841, 131072, 2, 2490402, 131072, 7, 5111842, 131072, 2, 2490403, 131072, 7, 5111843, 131072, 2, 2490404, 131072, 7, 5111844, 131072, 2, 2490405, 131072, 7, 5111845, 131072, 2, 2490406, 131072, 7, 5111846, 131072, 2, 2490407, 131072, 7, 5111847, 131072, 2, 2490408, 131072, 7, 5111848, 131072, 2, 2490409, 196608, 7, 5111849, 131072, 2, 2490410, 0, 8, 5111850, 131072, 2, 2490411, 0, 8, 5111851, 131072, 2, 2490412, 0, 8, 5111852, 131072, 2, 2490413, 0, 8, 5111853, 131072, 2, 2490414, 0, 8, 5111854, 131072, 2, 2490415, 0, 8, 5111855, 131072, 2, 2490416, 0, 8, 5111856, 131072, 2, 2490417, 0, 8, 5111857, 131072, 2, 2490418, 0, 8, 5111858, 131072, 2, 2490419, 0, 8, 5111859, 131072, 2, 2490420, 0, 8, 5111860, 131072, 2, 2490421, 0, 8, 5111861, 131072, 2, 2490422, 0, 8, 5111862, 131072, 2, 2490423, 0, 8, 5111863, 131072, 2, 2490424, 0, 8, 5111864, 131072, 2, 2490425, 0, 8, 5111865, 131072, 2, 2490426, 0, 8, 5111866, 131072, 2, 2490427, 0, 8, 5111867, 131072, 2, 2490428, 0, 8, 5111868, 131072, 2, 2490429, 0, 8, 5111869, 131072, 2, 2490430, 0, 8, 5111870, 131072, 2, 2490431, 0, 8, 5111871, 131072, 2, 2490432, 0, 8, 5111872, 131072, 2, 2621505, 0, 8, 2490433, 0, 8, 2687041, 0, 8, 2555969, 0, 8, 2752577, 0, 8, 2818113, 0, 8, 2883649, 0, 8, 2949185, 0, 8, 3014721, 0, 8, 3080257, 0, 8, 3145793, 0, 8, 3211329, 0, 8, 3276865, 0, 8, 3342401, 0, 8, 3407937, 0, 8, 3473473, 0, 8, 3539009, 0, 8, 3604545, 0, 8, 3670081, 0, 8, 3735617, 0, 8, 3801153, 0, 8, 3866689, 0, 8, 3932225, 0, 8, 3997761, 0, 8, 4063297, 0, 8, 4128833, 0, 8, 4194369, 0, 8, 4259905, 0, 8, 4325441, 0, 8, 4390977, 0, 8, 4456513, 0, 8, 4522049, 65536, 2, 4587585, 65536, 3, 4653121, 65536, 3, 4718657, 65536, 3, 4784193, 65536, 3, 4849729, 65536, 3, 4915265, 65536, 3, 4980801, 65536, 3, 5046337, 65536, 3, 5111873, 851968, 2, 4456579, 0, 8, 4391043, 0, 8, 4325507, 0, 8, 4259971, 0, 8, 4194435, 0, 8, 4128899, 0, 8, 4063363, 0, 8, 3997827, 0, 8, 3932291, 0, 8, 3866755, 0, 8, 3801219, 0, 8, 3735683, 0, 8, 3670147, 0, 8, 3604611, 0, 8, 3539075, 0, 8, 3473539, 0, 8, 3408003, 0, 8, 3342467, 0, 8, 3276931, 0, 8, 3211395, 0, 8, 4456578, 0, 8, 4391042, 0, 8, 4325506, 0, 8, 4259970, 0, 8, 4194434, 0, 8, 4128898, 0, 8, 4063362, 0, 8, 3997826, 0, 8, 3932290, 0, 8, 3866754, 0, 8, 3801218, 0, 8, 3735682, 0, 8, 3670146, 0, 8, 3604610, 0, 8, 3539074, 0, 8, 3473538, 0, 8, 3408002, 0, 8, 3342466, 0, 8, 3276930, 0, 8, 3211394, 0, 8, 4456577, 0, 8, 4391041, 0, 8, 4325505, 0, 8, 4259969, 0, 8, 4194433, 0, 8, 4128897, 0, 8, 4063361, 0, 8, 3997825, 0, 8, 3932289, 0, 8, 3866753, 0, 8, 3801217, 0, 8, 3735681, 0, 8, 3670145, 0, 8, 3604609, 0, 8, 3539073, 0, 8, 3473537, 0, 8, 3408001, 0, 8, 3342465, 0, 8, 3276929, 0, 8, 3211393, 0, 8, 4456576, 0, 8, 4391040, 0, 8, 4325504, 0, 8, 4259968, 0, 8, 4194432, 0, 8, 4128896, 0, 8, 4063360, 0, 8, 3997824, 0, 8, 3932288, 0, 8, 3866752, 0, 8, 3801216, 0, 8, 3735680, 0, 8, 3670144, 0, 8, 3604608, 0, 8, 3539072, 0, 8, 3473536, 0, 8, 3408000, 0, 8, 3342464, 0, 8, 3276928, 0, 8, 3211392, 0, 8, 4456575, 0, 8, 4391039, 0, 8, 4325503, 0, 8, 4259967, 0, 8, 4194431, 0, 8, 4128895, 0, 8, 4063359, 0, 8, 3997823, 0, 8, 3932287, 0, 8, 3866751, 0, 8, 3801215, 0, 8, 3735679, 0, 8, 3670143, 0, 8, 3604607, 0, 8, 3539071, 0, 8, 3473535, 0, 8, 3407999, 0, 8, 3342463, 0, 8, 3276927, 0, 8, 3211391, 0, 8, 4456574, 0, 8, 4391038, 0, 8, 4325502, 0, 8, 4259966, 0, 8, 4194430, 0, 8, 4128894, 0, 8, 4063358, 0, 8, 3997822, 0, 8, 3932286, 0, 8, 3866750, 0, 8, 3801214, 0, 8, 3735678, 0, 8, 3670142, 0, 8, 3604606, 0, 8, 3539070, 0, 8, 3473534, 0, 8, 3407998, 0, 8, 3342462, 0, 8, 3276926, 0, 8, 3211390, 0, 8, 4456573, 0, 8, 4391037, 0, 8, 4325501, 0, 8, 4259965, 0, 8, 4194429, 0, 8, 4128893, 0, 8, 4063357, 0, 8, 3997821, 0, 8, 3932285, 0, 8, 3866749, 0, 8, 3801213, 0, 8, 3735677, 0, 8, 3670141, 0, 8, 3604605, 0, 8, 3539069, 0, 8, 3473533, 0, 8, 3407997, 0, 8, 3342461, 0, 8, 3276925, 0, 8, 3211389, 0, 8, 4456572, 0, 8, 4391036, 0, 8, 4325500, 0, 8, 4259964, 0, 8, 4194428, 0, 8, 4128892, 0, 8, 4063356, 0, 8, 3997820, 0, 8, 3932284, 0, 8, 3866748, 0, 8, 3801212, 0, 8, 3735676, 0, 8, 3670140, 0, 8, 3604604, 0, 8, 3539068, 0, 8, 3473532, 0, 8, 3407996, 0, 8, 3342460, 0, 8, 3276924, 0, 8, 3211388, 0, 8, 4456571, 0, 8, 4391035, 0, 8, 4325499, 0, 8, 4259963, 0, 8, 4194427, 0, 8, 4128891, 0, 8, 4063355, 0, 8, 3997819, 0, 8, 3932283, 0, 8, 3866747, 0, 8, 3801211, 0, 8, 3735675, 0, 8, 3670139, 0, 8, 3604603, 0, 8, 3539067, 0, 8, 3473531, 0, 8, 3407995, 0, 8, 3342459, 0, 8, 3276923, 0, 8, 3211387, 0, 8, 4456570, 0, 8, 4391034, 0, 8, 4325498, 0, 8, 4259962, 0, 8, 4194426, 0, 8, 4128890, 0, 8, 4063354, 0, 8, 3997818, 0, 8, 3932282, 0, 8, 3866746, 0, 8, 3801210, 0, 8, 3735674, 0, 8, 3670138, 0, 8, 3604602, 0, 8, 3539066, 0, 8, 3473530, 0, 8, 3407994, 0, 8, 3342458, 0, 8, 3276922, 0, 8, 3211386, 0, 8, 4456569, 0, 8, 4391033, 0, 8, 4325497, 0, 8, 4259961, 0, 8, 4194425, 0, 8, 4128889, 0, 8, 4063353, 0, 8, 3997817, 0, 8, 3932281, 0, 8, 3866745, 0, 8, 3801209, 0, 8, 3735673, 0, 8, 3670137, 0, 8, 3604601, 0, 8, 3539065, 0, 8, 3473529, 0, 8, 3407993, 0, 8, 3342457, 0, 8, 3276921, 0, 8, 3211385, 0, 8, 4456568, 0, 8, 4391032, 0, 8, 4325496, 0, 8, 4259960, 0, 8, 4194424, 0, 8, 4128888, 0, 8, 4063352, 0, 8, 3997816, 0, 8, 3932280, 0, 8, 3866744, 0, 8, 3801208, 0, 8, 3735672, 0, 8, 3670136, 0, 8, 3604600, 0, 8, 3539064, 0, 8, 3473528, 0, 8, 3407992, 0, 8, 3342456, 0, 8, 3276920, 0, 8, 3211384, 0, 8, 4456567, 0, 8, 4391031, 0, 8, 4325495, 0, 8, 4259959, 0, 8, 4194423, 0, 8, 4128887, 0, 8, 4063351, 0, 8, 3997815, 0, 8, 3932279, 0, 8, 3866743, 0, 8, 3801207, 0, 8, 3735671, 0, 8, 3670135, 0, 8, 3604599, 0, 8, 3539063, 0, 8, 3473527, 0, 8, 3407991, 0, 8, 3342455, 0, 8, 3276919, 0, 8, 3211383, 0, 8, 4456566, 0, 8, 4391030, 0, 8, 4325494, 0, 8, 4259958, 0, 8, 4194422, 0, 8, 4128886, 0, 8, 4063350, 0, 8, 3997814, 0, 8, 3932278, 0, 8, 3866742, 0, 8, 3801206, 0, 8, 3735670, 0, 8, 3670134, 0, 8, 3604598, 0, 8, 3539062, 0, 8, 3473526, 0, 8, 3407990, 0, 8, 3342454, 0, 8, 3276918, 0, 8, 3211382, 0, 8, 4456565, 0, 8, 4391029, 0, 8, 4325493, 0, 8, 4259957, 0, 8, 4194421, 0, 8, 4128885, 0, 8, 4063349, 0, 8, 3997813, 0, 8, 3932277, 0, 8, 3866741, 0, 8, 3801205, 0, 8, 3735669, 0, 8, 3670133, 0, 8, 3604597, 0, 8, 3539061, 0, 8, 3473525, 0, 8, 3407989, 0, 8, 3342453, 0, 8, 3276917, 0, 8, 3211381, 0, 8, 4456564, 0, 8, 4391028, 0, 8, 4325492, 0, 8, 4259956, 0, 8, 4194420, 0, 8, 4128884, 0, 8, 4063348, 0, 8, 3997812, 0, 8, 3932276, 0, 8, 3866740, 0, 8, 3801204, 0, 8, 3735668, 0, 8, 3670132, 0, 8, 3604596, 0, 8, 3539060, 0, 8, 3473524, 0, 8, 3407988, 0, 8, 3342452, 0, 8, 3276916, 0, 8, 3211380, 0, 8, 4456563, 0, 8, 4391027, 0, 8, 4325491, 0, 8, 4259955, 0, 8, 4194419, 0, 8, 4128883, 0, 8, 4063347, 0, 8, 3997811, 0, 8, 3932275, 0, 8, 3866739, 0, 8, 3801203, 0, 8, 3735667, 0, 8, 3670131, 0, 8, 3604595, 0, 8, 3539059, 0, 8, 3473523, 0, 8, 3407987, 0, 8, 3342451, 0, 8, 3276915, 0, 8, 3211379, 0, 8, 4456562, 0, 8, 4391026, 0, 8, 4325490, 0, 8, 4259954, 0, 8, 4194418, 0, 8, 4128882, 0, 8, 4063346, 0, 8, 3997810, 0, 8, 3932274, 0, 8, 3866738, 0, 8, 3801202, 0, 8, 3735666, 0, 8, 3670130, 0, 8, 3604594, 0, 8, 3539058, 0, 8, 3473522, 0, 8, 3407986, 0, 8, 3342450, 0, 8, 3276914, 0, 8, 3211378, 0, 8, 4456561, 0, 8, 4391025, 0, 8, 4325489, 0, 8, 4259953, 0, 8, 4194417, 0, 8, 4128881, 0, 8, 4063345, 0, 8, 3997809, 0, 8, 3932273, 0, 8, 3866737, 0, 8, 3801201, 0, 8, 3735665, 0, 8, 3670129, 0, 8, 3604593, 0, 8, 3539057, 0, 8, 3473521, 0, 8, 3407985, 0, 8, 3342449, 0, 8, 3276913, 0, 8, 3211377, 0, 8, 4456560, 0, 8, 4391024, 0, 8, 4325488, 0, 8, 4259952, 0, 8, 4194416, 0, 8, 4128880, 0, 8, 4063344, 0, 8, 3997808, 0, 8, 3932272, 0, 8, 3866736, 0, 8, 3801200, 0, 8, 3735664, 0, 8, 3670128, 0, 8, 3604592, 0, 8, 3539056, 0, 8, 3473520, 0, 8, 3407984, 0, 8, 3342448, 0, 8, 3276912, 0, 8, 3211376, 0, 8, 4456559, 0, 8, 4391023, 0, 8, 4325487, 0, 8, 4259951, 0, 8, 4194415, 0, 8, 4128879, 0, 8, 4063343, 0, 8, 3997807, 0, 8, 3932271, 0, 8, 3866735, 0, 8, 3801199, 0, 8, 3735663, 0, 8, 3670127, 0, 8, 3604591, 0, 8, 3539055, 0, 8, 3473519, 0, 8, 3407983, 0, 8, 3342447, 0, 8, 3276911, 0, 8, 3211375, 0, 8, 4456558, 0, 8, 4391022, 0, 8, 4325486, 0, 8, 4259950, 0, 8, 4194414, 0, 8, 4128878, 0, 8, 4063342, 0, 8, 3997806, 0, 8, 3932270, 0, 8, 3866734, 0, 8, 3801198, 0, 8, 3735662, 0, 8, 3670126, 0, 8, 3604590, 0, 8, 3539054, 0, 8, 3473518, 0, 8, 3407982, 0, 8, 3342446, 0, 8, 3276910, 0, 8, 3211374, 0, 8, 4456557, 0, 8, 4391021, 0, 8, 4325485, 0, 8, 4259949, 0, 8, 4194413, 0, 8, 4128877, 0, 8, 4063341, 0, 8, 3997805, 0, 8, 3932269, 0, 8, 3866733, 0, 8, 3801197, 0, 8, 3735661, 0, 8, 3670125, 0, 8, 3604589, 0, 8, 3539053, 0, 8, 3473517, 0, 8, 3407981, 0, 8, 3342445, 0, 8, 3276909, 0, 8, 3211373, 0, 8, 4456556, 0, 8, 4391020, 0, 8, 4325484, 0, 8, 4259948, 0, 8, 4194412, 0, 8, 4128876, 0, 8, 4063340, 0, 8, 3997804, 0, 8, 3932268, 0, 8, 3866732, 0, 8, 3801196, 0, 8, 3735660, 0, 8, 3670124, 0, 8, 3604588, 0, 8, 3539052, 0, 8, 3473516, 0, 8, 3407980, 0, 8, 3342444, 0, 8, 3276908, 0, 8, 3211372, 0, 8, 4456555, 0, 8, 4391019, 0, 8, 4325483, 0, 8, 4259947, 0, 8, 4194411, 0, 8, 4128875, 0, 8, 4063339, 0, 8, 3997803, 0, 8, 3932267, 0, 8, 3866731, 0, 8, 3801195, 0, 8, 3735659, 0, 8, 3670123, 0, 8, 3604587, 0, 8, 3539051, 0, 8, 3473515, 0, 8, 3407979, 0, 8, 3342443, 0, 8, 3276907, 0, 8, 3211371, 0, 8, 4456554, 0, 8, 4391018, 0, 8, 4325482, 0, 8, 4259946, 0, 8, 4194410, 0, 8, 4128874, 0, 8, 4063338, 0, 8, 3997802, 0, 8, 3932266, 0, 8, 3866730, 0, 8, 3801194, 0, 8, 3735658, 0, 8, 3670122, 0, 8, 3604586, 0, 8, 3539050, 0, 8, 3473514, 0, 8, 3407978, 0, 8, 3342442, 0, 8, 3276906, 0, 8, 3211370, 0, 8, 4456553, 0, 8, 4391017, 0, 8, 4325481, 0, 8, 4259945, 0, 8, 4194409, 0, 8, 4128873, 0, 8, 4063337, 0, 8, 3997801, 0, 8, 3932265, 0, 8, 3866729, 0, 8, 3801193, 0, 8, 3735657, 0, 8, 3670121, 0, 8, 3604585, 0, 8, 3539049, 0, 8, 3473513, 0, 8, 3407977, 0, 8, 3342441, 0, 8, 3276905, 0, 8, 3211369, 0, 8, 4456552, 0, 8, 4391016, 0, 8, 4325480, 0, 8, 4259944, 0, 8, 4194408, 0, 8, 4128872, 0, 8, 4063336, 0, 8, 3997800, 0, 8, 3932264, 0, 8, 3866728, 0, 8, 3801192, 0, 8, 3735656, 0, 8, 3670120, 0, 8, 3604584, 0, 8, 3539048, 0, 8, 3473512, 0, 8, 3407976, 0, 8, 3342440, 0, 8, 3276904, 0, 8, 3211368, 0, 8, 4456551, 0, 8, 4391015, 0, 8, 4325479, 0, 8, 4259943, 0, 8, 4194407, 0, 8, 4128871, 0, 8, 4063335, 0, 8, 3997799, 0, 8, 3932263, 0, 8, 3866727, 0, 8, 3801191, 0, 8, 3735655, 0, 8, 3670119, 0, 8, 3604583, 0, 8, 3539047, 0, 8, 3473511, 0, 8, 3407975, 0, 8, 3342439, 0, 8, 3276903, 0, 8, 3211367, 0, 8, 4456550, 0, 8, 4391014, 0, 8, 4325478, 0, 8, 4259942, 0, 8, 4194406, 0, 8, 4128870, 0, 8, 4063334, 0, 8, 3997798, 0, 8, 3932262, 0, 8, 3866726, 0, 8, 3801190, 0, 8, 3735654, 0, 8, 3670118, 0, 8, 3604582, 0, 8, 3539046, 0, 8, 3473510, 0, 8, 3407974, 0, 8, 3342438, 0, 8, 3276902, 0, 8, 3211366, 0, 8, 4456549, 0, 8, 4391013, 0, 8, 4325477, 0, 8, 4259941, 0, 8, 4194405, 0, 8, 4128869, 0, 8, 4063333, 0, 8, 3997797, 0, 8, 3932261, 0, 8, 3866725, 0, 8, 3801189, 0, 8, 3735653, 0, 8, 3670117, 0, 8, 3604581, 0, 8, 3539045, 0, 8, 3473509, 0, 8, 3407973, 0, 8, 3342437, 0, 8, 3276901, 0, 8, 3211365, 0, 8, 4456548, 0, 8, 4391012, 0, 8, 4325476, 0, 8, 4259940, 0, 8, 4194404, 0, 8, 4128868, 0, 8, 4063332, 0, 8, 3997796, 0, 8, 3932260, 0, 8, 3866724, 0, 8, 3801188, 0, 8, 3735652, 0, 8, 3670116, 0, 8, 3604580, 0, 8, 3539044, 0, 8, 3473508, 0, 8, 3407972, 0, 8, 3342436, 0, 8, 3276900, 0, 8, 3211364, 0, 8, 4456547, 0, 8, 4391011, 0, 8, 4325475, 0, 8, 4259939, 0, 8, 4194403, 0, 8, 4128867, 0, 8, 4063331, 0, 8, 3997795, 0, 8, 3932259, 0, 8, 3866723, 0, 8, 3801187, 0, 8, 3735651, 0, 8, 3670115, 0, 8, 3604579, 0, 8, 3539043, 0, 8, 3473507, 0, 8, 3407971, 0, 8, 3342435, 0, 8, 3276899, 0, 8, 3211363, 0, 8, 4456546, 0, 8, 4391010, 0, 8, 4325474, 0, 8, 4259938, 0, 8, 4194402, 0, 8, 4128866, 0, 8, 4063330, 0, 8, 3997794, 0, 8, 3932258, 0, 8, 3866722, 0, 8, 3801186, 0, 8, 3735650, 0, 8, 3670114, 0, 8, 3604578, 0, 8, 3539042, 0, 8, 3473506, 0, 8, 3407970, 0, 8, 3342434, 0, 8, 3276898, 0, 8, 3211362, 0, 8, 4456545, 0, 8, 4391009, 0, 8, 4325473, 0, 8, 4259937, 0, 8, 4194401, 0, 8, 4128865, 0, 8, 4063329, 0, 8, 3997793, 0, 8, 3932257, 0, 8, 3866721, 0, 8, 3801185, 0, 8, 3735649, 0, 8, 3670113, 0, 8, 3604577, 0, 8, 3539041, 0, 8, 3473505, 0, 8, 3407969, 0, 8, 3342433, 0, 8, 3276897, 0, 8, 3211361, 0, 8, 4456544, 0, 8, 4391008, 0, 8, 4325472, 0, 8, 4259936, 0, 8, 4194400, 0, 8, 4128864, 0, 8, 4063328, 0, 8, 3997792, 0, 8, 3932256, 0, 8, 3866720, 0, 8, 3801184, 0, 8, 3735648, 0, 8, 3670112, 0, 8, 3604576, 0, 8, 3539040, 0, 8, 3473504, 0, 8, 3407968, 0, 8, 3342432, 0, 8, 3276896, 0, 8, 3211360, 0, 8, 4456543, 0, 8, 4391007, 0, 8, 4325471, 0, 8, 4259935, 0, 8, 4194399, 0, 8, 4128863, 0, 8, 4063327, 0, 8, 3997791, 0, 8, 3932255, 0, 8, 3866719, 0, 8, 3801183, 0, 8, 3735647, 0, 8, 3670111, 0, 8, 3604575, 0, 8, 3539039, 0, 8, 3473503, 0, 8, 3407967, 0, 8, 3342431, 0, 8, 3276895, 0, 8, 3211359, 0, 8, 4456542, 0, 8, 4391006, 0, 8, 4325470, 0, 8, 4259934, 0, 8, 4194398, 0, 8, 4128862, 0, 8, 4063326, 0, 8, 3997790, 0, 8, 3932254, 0, 8, 3866718, 0, 8, 3801182, 0, 8, 3735646, 0, 8, 3670110, 0, 8, 3604574, 0, 8, 3539038, 0, 8, 3473502, 0, 8, 3407966, 0, 8, 3342430, 0, 8, 3276894, 0, 8, 3211358, 0, 8, 4456541, 0, 8, 4391005, 0, 8, 4325469, 0, 8, 4259933, 0, 8, 4194397, 0, 8, 4128861, 0, 8, 4063325, 0, 8, 3997789, 0, 8, 3932253, 0, 8, 3866717, 0, 8, 3801181, 0, 8, 3735645, 0, 8, 3670109, 0, 8, 3604573, 0, 8, 3539037, 0, 8, 3473501, 0, 8, 3407965, 0, 8, 3342429, 0, 8, 3276893, 0, 8, 3211357, 0, 8, 4456540, 0, 8, 4391004, 0, 8, 4325468, 0, 8, 4259932, 0, 8, 4194396, 0, 8, 4128860, 0, 8, 4063324, 0, 8, 3997788, 0, 8, 3932252, 0, 8, 3866716, 0, 8, 3801180, 0, 8, 3735644, 0, 8, 3670108, 0, 8, 3604572, 0, 8, 3539036, 0, 8, 3473500, 0, 8, 3407964, 0, 8, 3342428, 0, 8, 3276892, 0, 8, 3211356, 0, 8, 4456539, 0, 8, 4391003, 0, 8, 4325467, 0, 8, 4259931, 0, 8, 4194395, 0, 8, 4128859, 0, 8, 4063323, 0, 8, 3997787, 0, 8, 3932251, 0, 8, 3866715, 0, 8, 3801179, 0, 8, 3735643, 0, 8, 3670107, 0, 8, 3604571, 0, 8, 3539035, 0, 8, 3473499, 0, 8, 3407963, 0, 8, 3342427, 0, 8, 3276891, 0, 8, 3211355, 0, 8, 4456538, 0, 8, 4391002, 0, 8, 4325466, 0, 8, 4259930, 0, 8, 4194394, 0, 8, 4128858, 0, 8, 4063322, 0, 8, 3997786, 0, 8, 3932250, 0, 8, 3866714, 0, 8, 3801178, 0, 8, 3735642, 0, 8, 3670106, 0, 8, 3604570, 0, 8, 3539034, 0, 8, 3473498, 0, 8, 3407962, 0, 8, 3342426, 0, 8, 3276890, 0, 8, 3211354, 0, 8, 4456537, 0, 8, 4391001, 0, 8, 4325465, 0, 8, 4259929, 0, 8, 4194393, 0, 8, 4128857, 0, 8, 4063321, 0, 8, 3997785, 0, 8, 3932249, 0, 8, 3866713, 0, 8, 3801177, 0, 8, 3735641, 0, 8, 3670105, 0, 8, 3604569, 0, 8, 3539033, 0, 8, 3473497, 0, 8, 3407961, 0, 8, 3342425, 0, 8, 3276889, 0, 8, 3211353, 0, 8, 4456536, 0, 8, 4391000, 0, 8, 4325464, 0, 8, 4259928, 0, 8, 4194392, 0, 8, 4128856, 0, 8, 4063320, 0, 8, 3997784, 0, 8, 3932248, 0, 8, 3866712, 0, 8, 3801176, 0, 8, 3735640, 0, 8, 3670104, 0, 8, 3604568, 0, 8, 3539032, 0, 8, 3473496, 0, 8, 3407960, 0, 8, 3342424, 0, 8, 3276888, 0, 8, 3211352, 0, 8, 4456535, 0, 8, 4390999, 0, 8, 4325463, 0, 8, 4259927, 0, 8, 4194391, 0, 8, 4128855, 0, 8, 4063319, 0, 8, 3997783, 0, 8, 3932247, 0, 8, 3866711, 0, 8, 3801175, 0, 8, 3735639, 0, 8, 3670103, 0, 8, 3604567, 0, 8, 3539031, 0, 8, 3473495, 0, 8, 3407959, 0, 8, 3342423, 0, 8, 3276887, 0, 8, 3211351, 0, 8, 4456534, 0, 8, 4390998, 0, 8, 4325462, 0, 8, 4259926, 0, 8, 4194390, 0, 8, 4128854, 0, 8, 4063318, 0, 8, 3997782, 0, 8, 3932246, 0, 8, 3866710, 0, 8, 3801174, 0, 8, 3735638, 0, 8, 3670102, 0, 8, 3604566, 0, 8, 3539030, 0, 8, 3473494, 0, 8, 3407958, 0, 8, 3342422, 0, 8, 3276886, 0, 8, 3211350, 0, 8, 4456533, 0, 8, 4390997, 0, 8, 4325461, 0, 8, 4259925, 0, 8, 4194389, 0, 8, 4128853, 0, 8, 4063317, 0, 8, 3997781, 0, 8, 3932245, 0, 8, 3866709, 0, 8, 3801173, 0, 8, 3735637, 0, 8, 3670101, 0, 8, 3604565, 0, 8, 3539029, 0, 8, 3473493, 0, 8, 3407957, 0, 8, 3342421, 0, 8, 3276885, 0, 8, 3211349, 0, 8, 4456532, 0, 8, 4390996, 0, 8, 4325460, 0, 8, 4259924, 0, 8, 4194388, 0, 8, 4128852, 0, 8, 4063316, 0, 8, 3997780, 0, 8, 3932244, 0, 8, 3866708, 0, 8, 3801172, 0, 8, 3735636, 0, 8, 3670100, 0, 8, 3604564, 0, 8, 3539028, 0, 8, 3473492, 0, 8, 3407956, 0, 8, 3342420, 0, 8, 3276884, 0, 8, 3211348, 0, 8, 4456531, 0, 8, 4390995, 0, 8, 4325459, 0, 8, 4259923, 0, 8, 4194387, 0, 8, 4128851, 0, 8, 4063315, 0, 8, 3997779, 0, 8, 3932243, 0, 8, 3866707, 0, 8, 3801171, 0, 8, 3735635, 0, 8, 3670099, 0, 8, 3604563, 0, 8, 3539027, 0, 8, 3473491, 0, 8, 3407955, 0, 8, 3342419, 0, 8, 3276883, 0, 8, 3211347, 0, 8, 4456530, 0, 8, 4390994, 0, 8, 4325458, 0, 8, 4259922, 0, 8, 4194386, 0, 8, 4128850, 0, 8, 4063314, 0, 8, 3997778, 0, 8, 3932242, 0, 8, 3866706, 0, 8, 3801170, 0, 8, 3735634, 0, 8, 3670098, 0, 8, 3604562, 0, 8, 3539026, 0, 8, 3473490, 0, 8, 3407954, 0, 8, 3342418, 0, 8, 3276882, 0, 8, 3211346, 0, 8, 4456529, 0, 8, 4390993, 0, 8, 4325457, 0, 8, 4259921, 0, 8, 4194385, 0, 8, 4128849, 0, 8, 4063313, 0, 8, 3997777, 0, 8, 3932241, 0, 8, 3866705, 0, 8, 3801169, 0, 8, 3735633, 0, 8, 3670097, 0, 8, 3604561, 0, 8, 3539025, 0, 8, 3473489, 0, 8, 3407953, 0, 8, 3342417, 0, 8, 3276881, 0, 8, 3211345, 0, 8, 4456528, 0, 8, 4390992, 0, 8, 4325456, 0, 8, 4259920, 0, 8, 4194384, 0, 8, 4128848, 0, 8, 4063312, 0, 8, 3997776, 0, 8, 3932240, 0, 8, 3866704, 0, 8, 3801168, 0, 8, 3735632, 0, 8, 3670096, 0, 8, 3604560, 0, 8, 3539024, 0, 8, 3473488, 0, 8, 3407952, 0, 8, 3342416, 0, 8, 3276880, 0, 8, 3211344, 0, 8, 4456527, 0, 8, 4390991, 0, 8, 4325455, 0, 8, 4259919, 0, 8, 4194383, 0, 8, 4128847, 0, 8, 4063311, 0, 8, 3997775, 0, 8, 3932239, 0, 8, 3866703, 0, 8, 3801167, 0, 8, 3735631, 0, 8, 3670095, 0, 8, 3604559, 0, 8, 3539023, 0, 8, 3473487, 0, 8, 3407951, 0, 8, 3342415, 0, 8, 3276879, 0, 8, 3211343, 0, 8, 4456526, 0, 8, 4390990, 0, 8, 4325454, 0, 8, 4259918, 0, 8, 4194382, 0, 8, 4128846, 0, 8, 4063310, 0, 8, 3997774, 0, 8, 3932238, 0, 8, 3866702, 0, 8, 3801166, 0, 8, 3735630, 0, 8, 3670094, 0, 8, 3604558, 0, 8, 3539022, 0, 8, 3473486, 0, 8, 3407950, 0, 8, 3342414, 0, 8, 3276878, 0, 8, 3211342, 0, 8, 4456525, 0, 8, 4390989, 0, 8, 4325453, 0, 8, 4259917, 0, 8, 4194381, 0, 8, 4128845, 0, 8, 4063309, 0, 8, 3997773, 0, 8, 3932237, 0, 8, 3866701, 0, 8, 3801165, 0, 8, 3735629, 0, 8, 3670093, 0, 8, 3604557, 0, 8, 3539021, 0, 8, 3473485, 0, 8, 3407949, 0, 8, 3342413, 0, 8, 3276877, 0, 8, 3211341, 0, 8, 4456524, 0, 8, 4390988, 0, 8, 4325452, 0, 8, 4259916, 0, 8, 4194380, 0, 8, 4128844, 0, 8, 4063308, 0, 8, 3997772, 0, 8, 3932236, 0, 8, 3866700, 0, 8, 3801164, 0, 8, 3735628, 0, 8, 3670092, 0, 8, 3604556, 0, 8, 3539020, 0, 8, 3473484, 0, 8, 3407948, 0, 8, 3342412, 0, 8, 3276876, 0, 8, 3211340, 0, 8, 4456523, 0, 8, 4390987, 0, 8, 4325451, 0, 8, 4259915, 0, 8, 4194379, 0, 8, 4128843, 0, 8, 4063307, 0, 8, 3997771, 0, 8, 3932235, 0, 8, 3866699, 0, 8, 3801163, 0, 8, 3735627, 0, 8, 3670091, 0, 8, 3604555, 0, 8, 3539019, 0, 8, 3473483, 0, 8, 3407947, 0, 8, 3342411, 0, 8, 3276875, 0, 8, 3211339, 0, 8, 4456522, 0, 8, 4390986, 0, 8, 4325450, 0, 8, 4259914, 0, 8, 4194378, 0, 8, 4128842, 0, 8, 4063306, 0, 8, 3997770, 0, 8, 3932234, 0, 8, 3866698, 0, 8, 3801162, 0, 8, 3735626, 0, 8, 3670090, 0, 8, 3604554, 0, 8, 3539018, 0, 8, 3473482, 0, 8, 3407946, 0, 8, 3342410, 0, 8, 3276874, 0, 8, 3211338, 0, 8, 4456521, 0, 8, 4390985, 0, 8, 4325449, 0, 8, 4259913, 0, 8, 4194377, 0, 8, 4128841, 0, 8, 4063305, 0, 8, 3997769, 0, 8, 3932233, 0, 8, 3866697, 0, 8, 3801161, 0, 8, 3735625, 0, 8, 3670089, 0, 8, 3604553, 0, 8, 3539017, 0, 8, 3473481, 0, 8, 3407945, 0, 8, 3342409, 0, 8, 3276873, 0, 8, 3211337, 0, 8, 4456520, 0, 8, 4390984, 0, 8, 4325448, 0, 8, 4259912, 0, 8, 4194376, 0, 8, 4128840, 0, 8, 4063304, 0, 8, 3997768, 0, 8, 3932232, 0, 8, 3866696, 0, 8, 3801160, 0, 8, 3735624, 0, 8, 3670088, 0, 8, 3604552, 0, 8, 3539016, 0, 8, 3473480, 0, 8, 3407944, 0, 8, 3342408, 0, 8, 3276872, 0, 8, 3211336, 0, 8, 4456519, 0, 8, 4390983, 0, 8, 4325447, 0, 8, 4259911, 0, 8, 4194375, 0, 8, 4128839, 0, 8, 4063303, 0, 8, 3997767, 0, 8, 3932231, 0, 8, 3866695, 0, 8, 3801159, 0, 8, 3735623, 0, 8, 3670087, 0, 8, 3604551, 0, 8, 3539015, 0, 8, 3473479, 0, 8, 3407943, 0, 8, 3342407, 0, 8, 3276871, 0, 8, 3211335, 0, 8, 4456518, 0, 8, 4390982, 0, 8, 4325446, 0, 8, 4259910, 0, 8, 4194374, 0, 8, 4128838, 0, 8, 4063302, 0, 8, 3997766, 0, 8, 3932230, 0, 8, 3866694, 0, 8, 3801158, 0, 8, 3735622, 0, 8, 3670086, 0, 8, 3604550, 0, 8, 3539014, 0, 8, 3473478, 0, 8, 3407942, 0, 8, 3342406, 0, 8, 3276870, 0, 8, 3211334, 0, 8, 4456517, 0, 8, 4390981, 0, 8, 4325445, 0, 8, 4259909, 0, 8, 4194373, 0, 8, 4128837, 0, 8, 4063301, 0, 8, 3997765, 0, 8, 3932229, 0, 8, 3866693, 0, 8, 3801157, 0, 8, 3735621, 0, 8, 3670085, 0, 8, 3604549, 0, 8, 3539013, 0, 8, 3473477, 0, 8, 3407941, 0, 8, 3342405, 0, 8, 3276869, 0, 8, 3211333, 0, 8, 4456516, 0, 8, 4390980, 0, 8, 4325444, 0, 8, 4259908, 0, 8, 4194372, 0, 8, 4128836, 0, 8, 4063300, 0, 8, 3997764, 0, 8, 3932228, 0, 8, 3866692, 0, 8, 3801156, 0, 8, 3735620, 0, 8, 3670084, 0, 8, 3604548, 0, 8, 3539012, 0, 8, 3473476, 0, 8, 3407940, 0, 8, 3342404, 0, 8, 3276868, 0, 8, 3211332, 0, 8, 4456515, 0, 8, 4390979, 0, 8, 4325443, 0, 8, 4259907, 0, 8, 4194371, 0, 8, 4128835, 0, 8, 4063299, 0, 8, 3997763, 0, 8, 3932227, 0, 8, 3866691, 0, 8, 3801155, 0, 8, 3735619, 0, 8, 3670083, 0, 8, 3604547, 0, 8, 3539011, 0, 8, 3473475, 0, 8, 3407939, 0, 8, 3342403, 0, 8, 3276867, 0, 8, 3211331, 0, 8, 4456514, 0, 8, 4390978, 0, 8, 4325442, 0, 8, 4259906, 0, 8, 4194370, 0, 8, 4128834, 0, 8, 4063298, 0, 8, 3997762, 0, 8, 3932226, 0, 8, 3866690, 0, 8, 3801154, 0, 8, 3735618, 0, 8, 3670082, 0, 8, 3604546, 0, 8, 3539010, 0, 8, 3473474, 0, 8, 3407938, 0, 8, 3342402, 0, 8, 3276866, 0, 8, 3211330, 0, 8, 3145794, 0, 8, 4522050, 131072, 2, 3145795, 0, 8, 4522051, 131072, 2, 3145796, 0, 8, 4522052, 131072, 2, 3145797, 0, 8, 4522053, 131072, 2, 3145798, 0, 8, 4522054, 131072, 2, 3145799, 0, 8, 4522055, 131072, 2, 3145800, 0, 8, 4522056, 131072, 2, 3145801, 0, 8, 4522057, 131072, 2, 3145802, 0, 8, 4522058, 131072, 2, 3145803, 0, 8, 4522059, 131072, 2, 3145804, 0, 8, 4522060, 131072, 2, 3145805, 0, 8, 4522061, 131072, 2, 3145806, 0, 8, 4522062, 131072, 2, 3145807, 0, 8, 4522063, 131072, 2, 3145808, 0, 8, 4522064, 131072, 2, 3145809, 0, 8, 4522065, 131072, 2, 3145810, 0, 8, 4522066, 131072, 2, 3145811, 0, 8, 4522067, 131072, 2, 3145812, 0, 8, 4522068, 131072, 2, 3145813, 0, 8, 4522069, 131072, 2, 3145814, 0, 8, 4522070, 131072, 2, 3145815, 0, 8, 4522071, 131072, 2, 3145816, 0, 8, 4522072, 131072, 2, 3145817, 0, 8, 4522073, 131072, 2, 3145818, 0, 8, 4522074, 131072, 2, 3145819, 0, 8, 4522075, 131072, 2, 3145820, 0, 8, 4522076, 131072, 2, 3145821, 0, 8, 4522077, 131072, 2, 3145822, 0, 8, 4522078, 131072, 2, 3145823, 0, 8, 4522079, 131072, 2, 3145824, 0, 8, 4522080, 131072, 2, 3145825, 0, 8, 4522081, 131072, 2, 3145826, 0, 8, 4522082, 131072, 2, 3145827, 0, 8, 4522083, 131072, 2, 3145828, 0, 8, 4522084, 131072, 2, 3145829, 0, 8, 4522085, 131072, 2, 3145830, 0, 8, 4522086, 131072, 2, 3145831, 0, 8, 4522087, 131072, 2, 3145832, 65536, 7, 4522088, 131072, 2, 3145833, 131072, 7, 4522089, 131072, 2, 3145834, 131072, 7, 4522090, 131072, 2, 3145835, 131072, 7, 4522091, 131072, 2, 3145836, 131072, 7, 4522092, 131072, 2, 3145837, 131072, 7, 4522093, 131072, 2, 3145838, 131072, 7, 4522094, 131072, 2, 3145839, 131072, 7, 4522095, 131072, 2, 3145840, 131072, 7, 4522096, 131072, 2, 3145841, 131072, 7, 4522097, 131072, 2, 3145842, 131072, 7, 4522098, 131072, 2, 3145843, 131072, 7, 4522099, 131072, 2, 3145844, 131072, 7, 4522100, 131072, 2, 3145845, 131072, 7, 4522101, 131072, 2, 3145846, 131072, 7, 4522102, 131072, 2, 3145847, 131072, 7, 4522103, 131072, 2, 3145848, 131072, 7, 4522104, 131072, 2, 3145849, 131072, 7, 4522105, 131072, 2, 3145850, 131072, 7, 4522106, 131072, 2, 3145851, 131072, 7, 4522107, 131072, 2, 3145852, 131072, 7, 4522108, 131072, 2, 3145853, 131072, 7, 4522109, 131072, 2, 3145854, 131072, 7, 4522110, 131072, 2, 3145855, 131072, 7, 4522111, 131072, 2, 3145856, 131072, 7, 4522112, 131072, 2, 3145857, 131072, 7, 4522113, 131072, 2, 3145858, 131072, 7, 4522114, 131072, 2, 3145859, 131072, 7, 4522115, 131072, 2, 3276932, 65536, 3, 3145860, 65536, 4, 3342468, 65536, 3, 3211396, 65536, 3, 3408004, 65536, 3, 3473540, 65536, 3, 3539076, 65536, 3, 3604612, 65536, 3, 3670148, 65536, 3, 3735684, 65536, 3, 3801220, 65536, 3, 3866756, 65536, 3, 3932292, 65536, 3, 3997828, 65536, 3, 4063364, 65536, 3, 4128900, 65536, 3, 4194436, 65536, 3, 4259972, 65536, 3, 4325508, 65536, 3, 4391044, 65536, 3, 4456580, 65536, 3, 4522116, 851968, 2, 3080295, 0, 8, 3014759, 0, 8, 2949223, 0, 8, 2883687, 0, 8, 2818151, 0, 8, 2752615, 0, 8, 2687079, 0, 8, 2621543, 0, 8, 2556007, 0, 8, 2490471, 0, 8, 2424935, 0, 8, 2359399, 0, 8, 2293863, 0, 8, 2228327, 0, 8, 2162791, 0, 8, 2097255, 0, 8, 2031719, 0, 8, 1966183, 0, 8, 1900647, 0, 8, 1835111, 0, 8, 1769575, 0, 8, 1704039, 0, 8, 1638503, 0, 8, 1572967, 0, 8, 1507431, 0, 8, 1441895, 0, 8, 1376359, 0, 8, 1310823, 0, 8, 1245287, 0, 8, 1179751, 0, 8, 1114215, 0, 8, 1048679, 0, 8, 983143, 0, 8, 917607, 0, 8, 852071, 0, 8, 786535, 0, 8, 720999, 0, 8, 655463, 0, 8, 589927, 0, 8, 524391, 0, 8, 3080294, 0, 8, 3014758, 0, 8, 2949222, 0, 8, 2883686, 0, 8, 2818150, 0, 8, 2752614, 0, 8, 2687078, 0, 8, 2621542, 0, 8, 2556006, 0, 8, 2490470, 0, 8, 2424934, 0, 8, 2359398, 0, 8, 2293862, 0, 8, 2228326, 0, 8, 2162790, 0, 8, 2097254, 0, 8, 2031718, 0, 8, 1966182, 0, 8, 1900646, 0, 8, 1835110, 0, 8, 1769574, 0, 8, 1704038, 0, 8, 1638502, 0, 8, 1572966, 0, 8, 1507430, 0, 8, 1441894, 0, 8, 1376358, 0, 8, 1310822, 0, 8, 1245286, 0, 8, 1179750, 0, 8, 1114214, 0, 8, 1048678, 0, 8, 983142, 0, 8, 917606, 0, 8, 852070, 0, 8, 786534, 0, 8, 720998, 0, 8, 655462, 0, 8, 589926, 0, 8, 524390, 0, 8, 3080293, 0, 8, 3014757, 0, 8, 2949221, 0, 8, 2883685, 0, 8, 2818149, 0, 8, 2752613, 0, 8, 2687077, 0, 8, 2621541, 0, 8, 2556005, 0, 8, 2490469, 0, 8, 2424933, 0, 8, 2359397, 0, 8, 2293861, 0, 8, 2228325, 0, 8, 2162789, 0, 8, 2097253, 0, 8, 2031717, 0, 8, 1966181, 0, 8, 1900645, 0, 8, 1835109, 0, 8, 1769573, 0, 8, 1704037, 0, 8, 1638501, 0, 8, 1572965, 0, 8, 1507429, 0, 8, 1441893, 0, 8, 1376357, 0, 8, 1310821, 0, 8, 1245285, 0, 8, 1179749, 0, 8, 1114213, 0, 8, 1048677, 0, 8, 983141, 0, 8, 917605, 0, 8, 852069, 0, 8, 786533, 0, 8, 720997, 0, 8, 655461, 0, 8, 589925, 0, 8, 524389, 0, 8, 3080292, 0, 8, 3014756, 0, 8, 2949220, 0, 8, 2883684, 0, 8, 2818148, 0, 8, 2752612, 0, 8, 2687076, 0, 8, 2621540, 0, 8, 2556004, 0, 8, 2490468, 0, 8, 2424932, 0, 8, 2359396, 0, 8, 2293860, 0, 8, 2228324, 0, 8, 2162788, 0, 8, 2097252, 0, 8, 2031716, 0, 8, 1966180, 0, 8, 1900644, 0, 8, 1835108, 0, 8, 1769572, 0, 8, 1704036, 0, 8, 1638500, 0, 8, 1572964, 0, 8, 1507428, 0, 8, 1441892, 0, 8, 1376356, 0, 8, 1310820, 0, 8, 1245284, 0, 8, 1179748, 0, 8, 1114212, 0, 8, 1048676, 0, 8, 983140, 0, 8, 917604, 0, 8, 852068, 0, 8, 786532, 0, 8, 720996, 0, 8, 655460, 0, 8, 589924, 0, 8, 524388, 0, 8, 3080291, 0, 8, 3014755, 0, 8, 2949219, 0, 8, 2883683, 0, 8, 2818147, 0, 8, 2752611, 0, 8, 2687075, 0, 8, 2621539, 0, 8, 2556003, 0, 8, 2490467, 0, 8, 2424931, 0, 8, 2359395, 0, 8, 2293859, 0, 8, 2228323, 0, 8, 2162787, 0, 8, 2097251, 0, 8, 2031715, 0, 8, 1966179, 0, 8, 1900643, 0, 8, 1835107, 0, 8, 1769571, 0, 8, 1704035, 0, 8, 1638499, 0, 8, 1572963, 0, 8, 1507427, 0, 8, 1441891, 0, 8, 1376355, 0, 8, 1310819, 0, 8, 1245283, 0, 8, 1179747, 0, 8, 1114211, 0, 8, 1048675, 0, 8, 983139, 0, 8, 917603, 0, 8, 852067, 0, 8, 786531, 0, 8, 720995, 0, 8, 655459, 0, 8, 589923, 0, 8, 524387, 0, 8, 3080290, 0, 8, 3014754, 0, 8, 2949218, 0, 8, 2883682, 0, 8, 2818146, 0, 8, 2752610, 0, 8, 2687074, 0, 8, 2621538, 0, 8, 2556002, 0, 8, 2490466, 0, 8, 2424930, 0, 8, 2359394, 0, 8, 2293858, 0, 8, 2228322, 0, 8, 2162786, 0, 8, 2097250, 0, 8, 2031714, 0, 8, 1966178, 0, 8, 1900642, 0, 8, 1835106, 0, 8, 1769570, 0, 8, 1704034, 0, 8, 1638498, 0, 8, 1572962, 0, 8, 1507426, 0, 8, 1441890, 0, 8, 1376354, 0, 8, 1310818, 0, 8, 1245282, 0, 8, 1179746, 0, 8, 1114210, 0, 8, 1048674, 0, 8, 983138, 0, 8, 917602, 0, 8, 852066, 0, 8, 786530, 0, 8, 720994, 0, 8, 655458, 0, 8, 589922, 0, 8, 524386, 0, 8, 3080289, 0, 8, 3014753, 0, 8, 2949217, 0, 8, 2883681, 0, 8, 2818145, 0, 8, 2752609, 0, 8, 2687073, 0, 8, 2621537, 0, 8, 2556001, 0, 8, 2490465, 0, 8, 2424929, 0, 8, 2359393, 0, 8, 2293857, 0, 8, 2228321, 0, 8, 2162785, 0, 8, 2097249, 0, 8, 2031713, 0, 8, 1966177, 0, 8, 1900641, 0, 8, 1835105, 0, 8, 1769569, 0, 8, 1704033, 0, 8, 1638497, 0, 8, 1572961, 0, 8, 1507425, 0, 8, 1441889, 0, 8, 1376353, 0, 8, 1310817, 0, 8, 1245281, 0, 8, 1179745, 0, 8, 1114209, 0, 8, 1048673, 0, 8, 983137, 0, 8, 917601, 0, 8, 852065, 0, 8, 786529, 0, 8, 720993, 0, 8, 655457, 0, 8, 589921, 0, 8, 524385, 0, 8, 3080288, 0, 8, 3014752, 0, 8, 2949216, 0, 8, 2883680, 0, 8, 2818144, 0, 8, 2752608, 0, 8, 2687072, 0, 8, 2621536, 0, 8, 2556000, 0, 8, 2490464, 0, 8, 2424928, 0, 8, 2359392, 0, 8, 2293856, 0, 8, 2228320, 0, 8, 2162784, 0, 8, 2097248, 0, 8, 2031712, 0, 8, 1966176, 0, 8, 1900640, 0, 8, 1835104, 0, 8, 1769568, 0, 8, 1704032, 0, 8, 1638496, 0, 8, 1572960, 0, 8, 1507424, 0, 8, 1441888, 0, 8, 1376352, 0, 8, 1310816, 0, 8, 1245280, 0, 8, 1179744, 0, 8, 1114208, 0, 8, 1048672, 0, 8, 983136, 0, 8, 917600, 0, 8, 852064, 0, 8, 786528, 0, 8, 720992, 0, 8, 655456, 0, 8, 589920, 0, 8, 524384, 0, 8, 3080287, 0, 8, 3014751, 0, 8, 2949215, 0, 8, 2883679, 0, 8, 2818143, 0, 8, 2752607, 0, 8, 2687071, 0, 8, 2621535, 0, 8, 2555999, 0, 8, 2490463, 0, 8, 2424927, 0, 8, 2359391, 0, 8, 2293855, 0, 8, 2228319, 0, 8, 2162783, 0, 8, 2097247, 0, 8, 2031711, 0, 8, 1966175, 0, 8, 1900639, 0, 8, 1835103, 0, 8, 1769567, 0, 8, 1704031, 0, 8, 1638495, 0, 8, 1572959, 0, 8, 1507423, 0, 8, 1441887, 0, 8, 1376351, 0, 8, 1310815, 0, 8, 1245279, 0, 8, 1179743, 0, 8, 1114207, 0, 8, 1048671, 0, 8, 983135, 0, 8, 917599, 0, 8, 852063, 0, 8, 786527, 0, 8, 720991, 0, 8, 655455, 0, 8, 589919, 0, 8, 524383, 0, 8, 3080286, 0, 8, 3014750, 0, 8, 2949214, 0, 8, 2883678, 0, 8, 2818142, 0, 8, 2752606, 0, 8, 2687070, 0, 8, 2621534, 0, 8, 2555998, 0, 8, 2490462, 0, 8, 2424926, 0, 8, 2359390, 0, 8, 2293854, 0, 8, 2228318, 0, 8, 2162782, 0, 8, 2097246, 0, 8, 2031710, 0, 8, 1966174, 0, 8, 1900638, 0, 8, 1835102, 0, 8, 1769566, 0, 8, 1704030, 0, 8, 1638494, 0, 8, 1572958, 0, 8, 1507422, 0, 8, 1441886, 0, 8, 1376350, 0, 8, 1310814, 0, 8, 1245278, 0, 8, 1179742, 0, 8, 1114206, 0, 8, 1048670, 0, 8, 983134, 0, 8, 917598, 0, 8, 852062, 0, 8, 786526, 0, 8, 720990, 0, 8, 655454, 0, 8, 589918, 0, 8, 524382, 0, 8, 3080285, 0, 8, 3014749, 0, 8, 2949213, 0, 8, 2883677, 0, 8, 2818141, 0, 8, 2752605, 0, 8, 2687069, 0, 8, 2621533, 0, 8, 2555997, 0, 8, 2490461, 0, 8, 2424925, 0, 8, 2359389, 0, 8, 2293853, 0, 8, 2228317, 0, 8, 2162781, 0, 8, 2097245, 0, 8, 2031709, 0, 8, 1966173, 0, 8, 1900637, 0, 8, 1835101, 0, 8, 1769565, 0, 8, 1704029, 0, 8, 1638493, 0, 8, 1572957, 0, 8, 1507421, 0, 8, 1441885, 0, 8, 1376349, 0, 8, 1310813, 0, 8, 1245277, 0, 8, 1179741, 0, 8, 1114205, 0, 8, 1048669, 0, 8, 983133, 0, 8, 917597, 0, 8, 852061, 0, 8, 786525, 0, 8, 720989, 0, 8, 655453, 0, 8, 589917, 0, 8, 524381, 0, 8, 3080284, 0, 8, 3014748, 0, 8, 2949212, 0, 8, 2883676, 0, 8, 2818140, 0, 8, 2752604, 0, 8, 2687068, 0, 8, 2621532, 0, 8, 2555996, 0, 8, 2490460, 0, 8, 2424924, 0, 8, 2359388, 0, 8, 2293852, 0, 8, 2228316, 0, 8, 2162780, 0, 8, 2097244, 0, 8, 2031708, 0, 8, 1966172, 0, 8, 1900636, 0, 8, 1835100, 0, 8, 1769564, 0, 8, 1704028, 0, 8, 1638492, 0, 8, 1572956, 0, 8, 1507420, 0, 8, 1441884, 0, 8, 1376348, 0, 8, 1310812, 0, 8, 1245276, 0, 8, 1179740, 0, 8, 1114204, 0, 8, 1048668, 0, 8, 983132, 0, 8, 917596, 0, 8, 852060, 0, 8, 786524, 0, 8, 720988, 0, 8, 655452, 0, 8, 589916, 0, 8, 524380, 0, 8, 3080283, 0, 8, 3014747, 0, 8, 2949211, 0, 8, 2883675, 0, 8, 2818139, 0, 8, 2752603, 0, 8, 2687067, 0, 8, 2621531, 0, 8, 2555995, 0, 8, 2490459, 0, 8, 2424923, 0, 8, 2359387, 0, 8, 2293851, 0, 8, 2228315, 0, 8, 2162779, 0, 8, 2097243, 0, 8, 2031707, 0, 8, 1966171, 0, 8, 1900635, 0, 8, 1835099, 0, 8, 1769563, 0, 8, 1704027, 0, 8, 1638491, 0, 8, 1572955, 0, 8, 1507419, 0, 8, 1441883, 0, 8, 1376347, 0, 8, 1310811, 0, 8, 1245275, 0, 8, 1179739, 0, 8, 1114203, 0, 8, 1048667, 0, 8, 983131, 0, 8, 917595, 0, 8, 852059, 0, 8, 786523, 0, 8, 720987, 0, 8, 655451, 0, 8, 589915, 0, 8, 524379, 0, 8, 3080282, 0, 8, 3014746, 0, 8, 2949210, 0, 8, 2883674, 0, 8, 2818138, 0, 8, 2752602, 0, 8, 2687066, 0, 8, 2621530, 0, 8, 2555994, 0, 8, 2490458, 0, 8, 2424922, 0, 8, 2359386, 0, 8, 2293850, 0, 8, 2228314, 0, 8, 2162778, 0, 8, 2097242, 0, 8, 2031706, 0, 8, 1966170, 0, 8, 1900634, 0, 8, 1835098, 0, 8, 1769562, 0, 8, 1704026, 0, 8, 1638490, 0, 8, 1572954, 0, 8, 1507418, 0, 8, 1441882, 0, 8, 1376346, 0, 8, 1310810, 0, 8, 1245274, 0, 8, 1179738, 0, 8, 1114202, 0, 8, 1048666, 0, 8, 983130, 0, 8, 917594, 0, 8, 852058, 0, 8, 786522, 0, 8, 720986, 0, 8, 655450, 0, 8, 589914, 0, 8, 524378, 0, 8, 3080281, 0, 8, 3014745, 0, 8, 2949209, 0, 8, 2883673, 0, 8, 2818137, 0, 8, 2752601, 0, 8, 2687065, 0, 8, 2621529, 0, 8, 2555993, 0, 8, 2490457, 0, 8, 2424921, 0, 8, 2359385, 0, 8, 2293849, 0, 8, 2228313, 0, 8, 2162777, 0, 8, 2097241, 0, 8, 2031705, 0, 8, 1966169, 0, 8, 1900633, 0, 8, 1835097, 0, 8, 1769561, 0, 8, 1704025, 0, 8, 1638489, 0, 8, 1572953, 0, 8, 1507417, 0, 8, 1441881, 0, 8, 1376345, 0, 8, 1310809, 0, 8, 1245273, 0, 8, 1179737, 0, 8, 1114201, 0, 8, 1048665, 0, 8, 983129, 0, 8, 917593, 0, 8, 852057, 0, 8, 786521, 0, 8, 720985, 0, 8, 655449, 0, 8, 589913, 0, 8, 524377, 0, 8, 3080280, 0, 8, 3014744, 0, 8, 2949208, 0, 8, 2883672, 0, 8, 2818136, 0, 8, 2752600, 0, 8, 2687064, 0, 8, 2621528, 0, 8, 2555992, 0, 8, 2490456, 0, 8, 2424920, 0, 8, 2359384, 0, 8, 2293848, 0, 8, 2228312, 0, 8, 2162776, 0, 8, 2097240, 0, 8, 2031704, 0, 8, 1966168, 0, 8, 1900632, 0, 8, 1835096, 0, 8, 1769560, 0, 8, 1704024, 0, 8, 1638488, 0, 8, 1572952, 0, 8, 1507416, 0, 8, 1441880, 0, 8, 1376344, 0, 8, 1310808, 0, 8, 1245272, 0, 8, 1179736, 0, 8, 1114200, 0, 8, 1048664, 0, 8, 983128, 0, 8, 917592, 0, 8, 852056, 0, 8, 786520, 0, 8, 720984, 0, 8, 655448, 0, 8, 589912, 0, 8, 524376, 0, 8, 3080279, 0, 8, 3014743, 0, 8, 2949207, 0, 8, 2883671, 0, 8, 2818135, 0, 8, 2752599, 0, 8, 2687063, 0, 8, 2621527, 0, 8, 2555991, 0, 8, 2490455, 0, 8, 2424919, 0, 8, 2359383, 0, 8, 2293847, 0, 8, 2228311, 0, 8, 2162775, 0, 8, 2097239, 0, 8, 2031703, 0, 8, 1966167, 0, 8, 1900631, 0, 8, 1835095, 0, 8, 1769559, 0, 8, 1704023, 0, 8, 1638487, 0, 8, 1572951, 0, 8, 1507415, 0, 8, 1441879, 0, 8, 1376343, 0, 8, 1310807, 0, 8, 1245271, 0, 8, 1179735, 0, 8, 1114199, 0, 8, 1048663, 0, 8, 983127, 0, 8, 917591, 0, 8, 852055, 0, 8, 786519, 0, 8, 720983, 0, 8, 655447, 0, 8, 589911, 0, 8, 524375, 0, 8, 3080278, 0, 8, 3014742, 0, 8, 2949206, 0, 8, 2883670, 0, 8, 2818134, 0, 8, 2752598, 0, 8, 2687062, 0, 8, 2621526, 0, 8, 2555990, 0, 8, 2490454, 0, 8, 2424918, 0, 8, 2359382, 0, 8, 2293846, 0, 8, 2228310, 0, 8, 2162774, 0, 8, 2097238, 0, 8, 2031702, 0, 8, 1966166, 0, 8, 1900630, 0, 8, 1835094, 0, 8, 1769558, 0, 8, 1704022, 0, 8, 1638486, 0, 8, 1572950, 0, 8, 1507414, 0, 8, 1441878, 0, 8, 1376342, 0, 8, 1310806, 0, 8, 1245270, 0, 8, 1179734, 0, 8, 1114198, 0, 8, 1048662, 0, 8, 983126, 0, 8, 917590, 0, 8, 852054, 0, 8, 786518, 0, 8, 720982, 0, 8, 655446, 0, 8, 589910, 0, 8, 524374, 0, 8, 3080277, 0, 8, 3014741, 0, 8, 2949205, 0, 8, 2883669, 0, 8, 2818133, 0, 8, 2752597, 0, 8, 2687061, 0, 8, 2621525, 0, 8, 2555989, 0, 8, 2490453, 0, 8, 2424917, 0, 8, 2359381, 0, 8, 2293845, 0, 8, 2228309, 0, 8, 2162773, 0, 8, 2097237, 0, 8, 2031701, 0, 8, 1966165, 0, 8, 1900629, 0, 8, 1835093, 0, 8, 1769557, 0, 8, 1704021, 0, 8, 1638485, 0, 8, 1572949, 0, 8, 1507413, 0, 8, 1441877, 0, 8, 1376341, 0, 8, 1310805, 0, 8, 1245269, 0, 8, 1179733, 0, 8, 1114197, 0, 8, 1048661, 0, 8, 983125, 0, 8, 917589, 0, 8, 852053, 0, 8, 786517, 0, 8, 720981, 0, 8, 655445, 0, 8, 589909, 0, 8, 524373, 0, 8, 3080276, 0, 8, 3014740, 0, 8, 2949204, 0, 8, 2883668, 0, 8, 2818132, 0, 8, 2752596, 0, 8, 2687060, 0, 8, 2621524, 0, 8, 2555988, 0, 8, 2490452, 0, 8, 2424916, 0, 8, 2359380, 0, 8, 2293844, 0, 8, 2228308, 0, 8, 2162772, 0, 8, 2097236, 0, 8, 2031700, 0, 8, 1966164, 0, 8, 1900628, 0, 8, 1835092, 0, 8, 1769556, 0, 8, 1704020, 0, 8, 1638484, 0, 8, 1572948, 0, 8, 1507412, 0, 8, 1441876, 0, 8, 1376340, 0, 8, 1310804, 0, 8, 1245268, 0, 8, 1179732, 0, 8, 1114196, 0, 8, 1048660, 0, 8, 983124, 0, 8, 917588, 0, 8, 852052, 0, 8, 786516, 0, 8, 720980, 0, 8, 655444, 0, 8, 589908, 0, 8, 524372, 0, 8, 3080275, 0, 8, 3014739, 0, 8, 2949203, 0, 8, 2883667, 0, 8, 2818131, 0, 8, 2752595, 0, 8, 2687059, 0, 8, 2621523, 0, 8, 2555987, 0, 8, 2490451, 0, 8, 2424915, 0, 8, 2359379, 0, 8, 2293843, 0, 8, 2228307, 0, 8, 2162771, 0, 8, 2097235, 0, 8, 2031699, 0, 8, 1966163, 0, 8, 1900627, 0, 8, 1835091, 0, 8, 1769555, 0, 8, 1704019, 0, 8, 1638483, 0, 8, 1572947, 0, 8, 1507411, 0, 8, 1441875, 0, 8, 1376339, 0, 8, 1310803, 0, 8, 1245267, 0, 8, 1179731, 0, 8, 1114195, 0, 8, 1048659, 0, 8, 983123, 0, 8, 917587, 0, 8, 852051, 0, 8, 786515, 0, 8, 720979, 0, 8, 655443, 0, 8, 589907, 0, 8, 524371, 0, 8, 3080274, 0, 8, 3014738, 0, 8, 2949202, 0, 8, 2883666, 0, 8, 2818130, 0, 8, 2752594, 0, 8, 2687058, 0, 8, 2621522, 0, 8, 2555986, 0, 8, 2490450, 0, 8, 2424914, 0, 8, 2359378, 0, 8, 2293842, 0, 8, 2228306, 0, 8, 2162770, 0, 8, 2097234, 0, 8, 2031698, 0, 8, 1966162, 0, 8, 1900626, 0, 8, 1835090, 0, 8, 1769554, 0, 8, 1704018, 0, 8, 1638482, 0, 8, 1572946, 0, 8, 1507410, 0, 8, 1441874, 0, 8, 1376338, 0, 8, 1310802, 0, 8, 1245266, 0, 8, 1179730, 0, 8, 1114194, 0, 8, 1048658, 0, 8, 983122, 0, 8, 917586, 0, 8, 852050, 0, 8, 786514, 0, 8, 720978, 0, 8, 655442, 0, 8, 589906, 0, 8, 524370, 0, 8, 3080273, 0, 8, 3014737, 0, 8, 2949201, 0, 8, 2883665, 0, 8, 2818129, 0, 8, 2752593, 0, 8, 2687057, 0, 8, 2621521, 0, 8, 2555985, 0, 8, 2490449, 0, 8, 2424913, 0, 8, 2359377, 0, 8, 2293841, 0, 8, 2228305, 0, 8, 2162769, 0, 8, 2097233, 0, 8, 2031697, 0, 8, 1966161, 0, 8, 1900625, 0, 8, 1835089, 0, 8, 1769553, 0, 8, 1704017, 0, 8, 1638481, 0, 8, 1572945, 0, 8, 1507409, 0, 8, 1441873, 0, 8, 1376337, 0, 8, 1310801, 0, 8, 1245265, 0, 8, 1179729, 0, 8, 1114193, 0, 8, 1048657, 0, 8, 983121, 0, 8, 917585, 0, 8, 852049, 0, 8, 786513, 0, 8, 720977, 0, 8, 655441, 0, 8, 589905, 0, 8, 524369, 0, 8, 3080272, 0, 8, 3014736, 0, 8, 2949200, 0, 8, 2883664, 0, 8, 2818128, 0, 8, 2752592, 0, 8, 2687056, 0, 8, 2621520, 0, 8, 2555984, 0, 8, 2490448, 0, 8, 2424912, 0, 8, 2359376, 0, 8, 2293840, 0, 8, 2228304, 0, 8, 2162768, 0, 8, 2097232, 0, 8, 2031696, 0, 8, 1966160, 0, 8, 1900624, 0, 8, 1835088, 0, 8, 1769552, 0, 8, 1704016, 0, 8, 1638480, 0, 8, 1572944, 0, 8, 1507408, 0, 8, 1441872, 0, 8, 1376336, 0, 8, 1310800, 0, 8, 1245264, 0, 8, 1179728, 0, 8, 1114192, 0, 8, 1048656, 0, 8, 983120, 0, 8, 917584, 0, 8, 852048, 0, 8, 786512, 0, 8, 720976, 0, 8, 655440, 0, 8, 589904, 0, 8, 524368, 0, 8, 3080271, 0, 8, 3014735, 0, 8, 2949199, 0, 8, 2883663, 0, 8, 2818127, 0, 8, 2752591, 0, 8, 2687055, 0, 8, 2621519, 0, 8, 2555983, 0, 8, 2490447, 0, 8, 2424911, 0, 8, 2359375, 0, 8, 2293839, 0, 8, 2228303, 0, 8, 2162767, 0, 8, 2097231, 0, 8, 2031695, 0, 8, 1966159, 0, 8, 1900623, 0, 8, 1835087, 0, 8, 1769551, 0, 8, 1704015, 0, 8, 1638479, 0, 8, 1572943, 0, 8, 1507407, 0, 8, 1441871, 0, 8, 1376335, 0, 8, 1310799, 0, 8, 1245263, 0, 8, 1179727, 0, 8, 1114191, 0, 8, 1048655, 0, 8, 983119, 0, 8, 917583, 0, 8, 852047, 0, 8, 786511, 0, 8, 720975, 0, 8, 655439, 0, 8, 589903, 0, 8, 524367, 0, 8, 3080270, 0, 8, 3014734, 0, 8, 2949198, 0, 8, 2883662, 0, 8, 2818126, 0, 8, 2752590, 0, 8, 2687054, 0, 8, 2621518, 0, 8, 2555982, 0, 8, 2490446, 0, 8, 2424910, 0, 8, 2359374, 0, 8, 2293838, 0, 8, 2228302, 0, 8, 2162766, 0, 8, 2097230, 0, 8, 2031694, 0, 8, 1966158, 0, 8, 1900622, 0, 8, 1835086, 0, 8, 1769550, 0, 8, 1704014, 0, 8, 1638478, 0, 8, 1572942, 0, 8, 1507406, 0, 8, 1441870, 0, 8, 1376334, 0, 8, 1310798, 0, 8, 1245262, 0, 8, 1179726, 0, 8, 1114190, 0, 8, 1048654, 0, 8, 983118, 0, 8, 917582, 0, 8, 852046, 0, 8, 786510, 0, 8, 720974, 0, 8, 655438, 0, 8, 589902, 0, 8, 524366, 0, 8, 3080269, 0, 8, 3014733, 0, 8, 2949197, 0, 8, 2883661, 0, 8, 2818125, 0, 8, 2752589, 0, 8, 2687053, 0, 8, 2621517, 0, 8, 2555981, 0, 8, 2490445, 0, 8, 2424909, 0, 8, 2359373, 0, 8, 2293837, 0, 8, 2228301, 0, 8, 2162765, 0, 8, 2097229, 0, 8, 2031693, 0, 8, 1966157, 0, 8, 1900621, 0, 8, 1835085, 0, 8, 1769549, 0, 8, 1704013, 0, 8, 1638477, 0, 8, 1572941, 0, 8, 1507405, 0, 8, 1441869, 0, 8, 1376333, 0, 8, 1310797, 0, 8, 1245261, 0, 8, 1179725, 0, 8, 1114189, 0, 8, 1048653, 0, 8, 983117, 0, 8, 917581, 0, 8, 852045, 0, 8, 786509, 0, 8, 720973, 0, 8, 655437, 0, 8, 589901, 0, 8, 524365, 0, 8, 3080268, 0, 8, 3014732, 0, 8, 2949196, 0, 8, 2883660, 0, 8, 2818124, 0, 8, 2752588, 0, 8, 2687052, 0, 8, 2621516, 0, 8, 2555980, 0, 8, 2490444, 0, 8, 2424908, 0, 8, 2359372, 0, 8, 2293836, 0, 8, 2228300, 0, 8, 2162764, 0, 8, 2097228, 0, 8, 2031692, 0, 8, 1966156, 0, 8, 1900620, 0, 8, 1835084, 0, 8, 1769548, 0, 8, 1704012, 0, 8, 1638476, 0, 8, 1572940, 0, 8, 1507404, 0, 8, 1441868, 0, 8, 1376332, 0, 8, 1310796, 0, 8, 1245260, 0, 8, 1179724, 0, 8, 1114188, 0, 8, 1048652, 0, 8, 983116, 0, 8, 917580, 0, 8, 852044, 0, 8, 786508, 0, 8, 720972, 0, 8, 655436, 0, 8, 589900, 0, 8, 524364, 0, 8, 3080267, 0, 8, 3014731, 0, 8, 2949195, 0, 8, 2883659, 0, 8, 2818123, 0, 8, 2752587, 0, 8, 2687051, 0, 8, 2621515, 0, 8, 2555979, 0, 8, 2490443, 0, 8, 2424907, 0, 8, 2359371, 0, 8, 2293835, 0, 8, 2228299, 0, 8, 2162763, 0, 8, 2097227, 0, 8, 2031691, 0, 8, 1966155, 0, 8, 1900619, 0, 8, 1835083, 0, 8, 1769547, 0, 8, 1704011, 0, 8, 1638475, 0, 8, 1572939, 0, 8, 1507403, 0, 8, 1441867, 0, 8, 1376331, 0, 8, 1310795, 0, 8, 1245259, 0, 8, 1179723, 0, 8, 1114187, 0, 8, 1048651, 0, 8, 983115, 0, 8, 917579, 0, 8, 852043, 0, 8, 786507, 0, 8, 720971, 0, 8, 655435, 0, 8, 589899, 0, 8, 524363, 0, 8, 3080266, 0, 8, 3014730, 0, 8, 2949194, 0, 8, 2883658, 0, 8, 2818122, 0, 8, 2752586, 0, 8, 2687050, 0, 8, 2621514, 0, 8, 2555978, 0, 8, 2490442, 0, 8, 2424906, 0, 8, 2359370, 0, 8, 2293834, 0, 8, 2228298, 0, 8, 2162762, 0, 8, 2097226, 0, 8, 2031690, 0, 8, 1966154, 0, 8, 1900618, 0, 8, 1835082, 0, 8, 1769546, 0, 8, 1704010, 0, 8, 1638474, 0, 8, 1572938, 0, 8, 1507402, 0, 8, 1441866, 0, 8, 1376330, 0, 8, 1310794, 0, 8, 1245258, 0, 8, 1179722, 0, 8, 1114186, 0, 8, 1048650, 0, 8, 983114, 0, 8, 917578, 0, 8, 852042, 0, 8, 786506, 0, 8, 720970, 0, 8, 655434, 0, 8, 589898, 0, 8, 524362, 0, 8, 3080265, 0, 8, 3014729, 0, 8, 2949193, 0, 8, 2883657, 0, 8, 2818121, 0, 8, 2752585, 0, 8, 2687049, 0, 8, 2621513, 0, 8, 2555977, 0, 8, 2490441, 0, 8, 2424905, 0, 8, 2359369, 0, 8, 2293833, 0, 8, 2228297, 0, 8, 2162761, 0, 8, 2097225, 0, 8, 2031689, 0, 8, 1966153, 0, 8, 1900617, 0, 8, 1835081, 0, 8, 1769545, 0, 8, 1704009, 0, 8, 1638473, 0, 8, 1572937, 0, 8, 1507401, 0, 8, 1441865, 0, 8, 1376329, 0, 8, 1310793, 0, 8, 1245257, 0, 8, 1179721, 0, 8, 1114185, 0, 8, 1048649, 0, 8, 983113, 0, 8, 917577, 0, 8, 852041, 0, 8, 786505, 0, 8, 720969, 0, 8, 655433, 0, 8, 589897, 0, 8, 524361, 0, 8, 3080264, 0, 8, 3014728, 0, 8, 2949192, 0, 8, 2883656, 0, 8, 2818120, 0, 8, 2752584, 0, 8, 2687048, 0, 8, 2621512, 0, 8, 2555976, 0, 8, 2490440, 0, 8, 2424904, 0, 8, 2359368, 0, 8, 2293832, 0, 8, 2228296, 0, 8, 2162760, 0, 8, 2097224, 0, 8, 2031688, 0, 8, 1966152, 0, 8, 1900616, 0, 8, 1835080, 0, 8, 1769544, 0, 8, 1704008, 0, 8, 1638472, 0, 8, 1572936, 0, 8, 1507400, 0, 8, 1441864, 0, 8, 1376328, 0, 8, 1310792, 0, 8, 1245256, 0, 8, 1179720, 0, 8, 1114184, 0, 8, 1048648, 0, 8, 983112, 0, 8, 917576, 0, 8, 852040, 0, 8, 786504, 0, 8, 720968, 0, 8, 655432, 0, 8, 589896, 0, 8, 524360, 0, 8, 3080263, 0, 8, 3014727, 0, 8, 2949191, 0, 8, 2883655, 0, 8, 2818119, 0, 8, 2752583, 0, 8, 2687047, 0, 8, 2621511, 0, 8, 2555975, 0, 8, 2490439, 0, 8, 2424903, 0, 8, 2359367, 0, 8, 2293831, 0, 8, 2228295, 0, 8, 2162759, 0, 8, 2097223, 0, 8, 2031687, 0, 8, 1966151, 0, 8, 1900615, 0, 8, 1835079, 0, 8, 1769543, 0, 8, 1704007, 0, 8, 1638471, 0, 8, 1572935, 0, 8, 1507399, 0, 8, 1441863, 0, 8, 1376327, 0, 8, 1310791, 0, 8, 1245255, 0, 8, 1179719, 0, 8, 1114183, 0, 8, 1048647, 0, 8, 983111, 0, 8, 917575, 0, 8, 852039, 0, 8, 786503, 0, 8, 720967, 0, 8, 655431, 0, 8, 589895, 0, 8, 524359, 0, 8, 3080262, 0, 8, 3014726, 0, 8, 2949190, 0, 8, 2883654, 0, 8, 2818118, 0, 8, 2752582, 0, 8, 2687046, 0, 8, 2621510, 0, 8, 2555974, 0, 8, 2490438, 0, 8, 2424902, 0, 8, 2359366, 0, 8, 2293830, 0, 8, 2228294, 0, 8, 2162758, 0, 8, 2097222, 0, 8, 2031686, 0, 8, 1966150, 0, 8, 1900614, 0, 8, 1835078, 0, 8, 1769542, 0, 8, 1704006, 0, 8, 1638470, 0, 8, 1572934, 0, 8, 1507398, 0, 8, 1441862, 0, 8, 1376326, 0, 8, 1310790, 0, 8, 1245254, 0, 8, 1179718, 0, 8, 1114182, 0, 8, 1048646, 0, 8, 983110, 0, 8, 917574, 0, 8, 852038, 0, 8, 786502, 0, 8, 720966, 0, 8, 655430, 0, 8, 589894, 0, 8, 524358, 0, 8, 3080261, 0, 8, 3014725, 0, 8, 2949189, 0, 8, 2883653, 0, 8, 2818117, 0, 8, 2752581, 0, 8, 2687045, 0, 8, 2621509, 0, 8, 2555973, 0, 8, 2490437, 0, 8, 2424901, 0, 8, 2359365, 0, 8, 2293829, 0, 8, 2228293, 0, 8, 2162757, 0, 8, 2097221, 0, 8, 2031685, 0, 8, 1966149, 0, 8, 1900613, 0, 8, 1835077, 0, 8, 1769541, 0, 8, 1704005, 0, 8, 1638469, 0, 8, 1572933, 0, 8, 1507397, 0, 8, 1441861, 0, 8, 1376325, 0, 8, 1310789, 0, 8, 1245253, 0, 8, 1179717, 0, 8, 1114181, 0, 8, 1048645, 0, 8, 983109, 0, 8, 917573, 0, 8, 852037, 0, 8, 786501, 0, 8, 720965, 0, 8, 655429, 0, 8, 589893, 0, 8, 524357, 0, 8, 3080260, 0, 8, 3014724, 0, 8, 2949188, 0, 8, 2883652, 0, 8, 2818116, 0, 8, 2752580, 0, 8, 2687044, 0, 8, 2621508, 0, 8, 2555972, 0, 8, 2490436, 0, 8, 2424900, 0, 8, 2359364, 0, 8, 2293828, 0, 8, 2228292, 0, 8, 2162756, 0, 8, 2097220, 0, 8, 2031684, 0, 8, 1966148, 0, 8, 1900612, 0, 8, 1835076, 0, 8, 1769540, 0, 8, 1704004, 0, 8, 1638468, 0, 8, 1572932, 0, 8, 1507396, 0, 8, 1441860, 0, 8, 1376324, 0, 8, 1310788, 0, 8, 1245252, 0, 8, 1179716, 0, 8, 1114180, 0, 8, 1048644, 0, 8, 983108, 0, 8, 917572, 0, 8, 852036, 0, 8, 786500, 0, 8, 720964, 0, 8, 655428, 0, 8, 589892, 0, 8, 524356, 0, 8, 3080259, 0, 8, 3014723, 0, 8, 2949187, 0, 8, 2883651, 0, 8, 2818115, 0, 8, 2752579, 0, 8, 2687043, 0, 8, 2621507, 0, 8, 2555971, 0, 8, 2490435, 0, 8, 2424899, 0, 8, 2359363, 0, 8, 2293827, 0, 8, 2228291, 0, 8, 2162755, 0, 8, 2097219, 0, 8, 2031683, 0, 8, 1966147, 0, 8, 1900611, 0, 8, 1835075, 0, 8, 1769539, 0, 8, 1704003, 0, 8, 1638467, 0, 8, 1572931, 0, 8, 1507395, 0, 8, 1441859, 0, 8, 1376323, 0, 8, 1310787, 0, 8, 1245251, 0, 8, 1179715, 0, 8, 1114179, 0, 8, 1048643, 0, 8, 983107, 0, 8, 917571, 0, 8, 852035, 0, 8, 786499, 0, 8, 720963, 0, 8, 655427, 0, 8, 589891, 0, 8, 524355, 0, 8, 589890, 0, 8, 458818, 0, 8, 458820, 0, 8, 655426, 0, 8, 524354, 0, 8, 720962, 0, 8, 786498, 0, 8, 852034, 0, 8, 917570, 0, 8, 983106, 0, 8, 1048642, 0, 8, 1114178, 0, 8, 1179714, 0, 8, 1245250, 0, 8, 1310786, 0, 8, 1376322, 0, 8, 1441858, 0, 8, 1507394, 0, 8, 1572930, 196608, 2, 1638466, 196608, 3, 1704002, 196608, 3, 1769538, 196608, 3, 1835074, 196608, 3, 1900610, 196608, 3, 1966146, 196608, 3, 2031682, 196608, 3, 2097218, 196608, 7, 2162754, 0, 8, 2228290, 0, 8, 2293826, 0, 8, 2359362, 0, 8, 2424898, 0, 8, 2490434, 0, 8, 2555970, 0, 8, 2621506, 0, 8, 2687042, 0, 8, 2752578, 0, 8, 2818114, 0, 8, 2883650, 0, 8, 2949186, 0, 8, 3014722, 0, 8, 3080258, 0, 8, 458819, 0, 8, 458821, 0, 8, 458822, 0, 8, 458823, 0, 8, 458824, 0, 8, 458825, 0, 8, 458826, 0, 8, 458827, 0, 8, 458828, 65536, 7, 458829, 131072, 7, 458830, 131072, 7, 458831, 131072, 7, 458832, 131072, 7, 458833, 131072, 7, 458834, 131072, 7, 458835, 131072, 7, 458836, 131072, 7, 458837, 131072, 7, 458838, 131072, 7, 458839, 131072, 7, 458840, 131072, 7, 458841, 131072, 7, 458842, 131072, 7, 458843, 131072, 7, 458844, 131072, 7, 458845, 131072, 7, 458846, 131072, 7, 458847, 131072, 7, 458848, 131072, 7, 458849, 131072, 7, 458850, 131072, 7, 458851, 131072, 7, 458852, 131072, 7, 458853, 131072, 7, 458854, 131072, 7, 458855, 131072, 7, 589928, 65536, 3, 458856, 65536, 4, 655464, 65536, 3, 524392, 65536, 3, 721000, 65536, 3, 786536, 65536, 3, 852072, 65536, 3, 917608, 65536, 7, 983144, 0, 8, 1048680, 0, 8, 1114216, 0, 8, 1179752, 0, 8, 1245288, 0, 8, 1310824, 0, 8, 1376360, 0, 8, 1441896, 0, 8, 1507432, 0, 8, 1572968, 0, 8, 1638504, 0, 8, 1704040, 0, 8, 1769576, 0, 8, 1835112, 0, 8, 1900648, 0, 8, 1966184, 0, 8, 2031720, 0, 8, 2097256, 0, 8, 2162792, 0, 8, 2228328, 0, 8, 2293864, 65536, 2, 2359400, 65536, 3, 2424936, 65536, 3, 2490472, 65536, 3, 2556008, 65536, 3, 2621544, 65536, 3, 2687080, 65536, 3, 2752616, 65536, 3, 2818152, 65536, 3, 2883688, 65536, 3, 2949224, 65536, 3, 3014760, 65536, 3, 3080296, 65536, 3, 2424897, 0, 8, 2359361, 0, 8, 2293825, 0, 8, 2228289, 0, 8, 2162753, 0, 8, 2424896, 0, 8, 2359360, 0, 8, 2293824, 0, 8, 2228288, 0, 8, 2162752, 0, 8, 2424895, 0, 8, 2359359, 0, 8, 2293823, 0, 8, 2228287, 0, 8, 2162751, 0, 8, 2424894, 0, 8, 2359358, 0, 8, 2293822, 0, 8, 2228286, 0, 8, 2162750, 0, 8, 2424893, 0, 8, 2359357, 0, 8, 2293821, 0, 8, 2228285, 0, 8, 2162749, 0, 8, 2424892, 0, 8, 2359356, 0, 8, 2293820, 0, 8, 2228284, 0, 8, 2162748, 0, 8, 2424891, 0, 8, 2359355, 0, 8, 2293819, 0, 8, 2228283, 0, 8, 2162747, 0, 8, 2424890, 0, 8, 2359354, 0, 8, 2293818, 0, 8, 2228282, 0, 8, 2162746, 0, 8, 2424889, 0, 8, 2359353, 0, 8, 2293817, 0, 8, 2228281, 0, 8, 2162745, 0, 8, 2424888, 0, 8, 2359352, 0, 8, 2293816, 0, 8, 2228280, 0, 8, 2162744, 0, 8, 2424887, 0, 8, 2359351, 0, 8, 2293815, 0, 8, 2228279, 0, 8, 2162743, 0, 8, 2424886, 0, 8, 2359350, 0, 8, 2293814, 0, 8, 2228278, 0, 8, 2162742, 0, 8, 2424885, 0, 8, 2359349, 0, 8, 2293813, 0, 8, 2228277, 0, 8, 2162741, 0, 8, 2424884, 0, 8, 2359348, 0, 8, 2293812, 0, 8, 2228276, 0, 8, 2162740, 0, 8, 2424883, 0, 8, 2359347, 0, 8, 2293811, 0, 8, 2228275, 0, 8, 2162739, 0, 8, 2424882, 0, 8, 2359346, 0, 8, 2293810, 0, 8, 2228274, 0, 8, 2162738, 0, 8, 2424881, 0, 8, 2359345, 0, 8, 2293809, 0, 8, 2228273, 0, 8, 2162737, 0, 8, 2424880, 0, 8, 2359344, 0, 8, 2293808, 0, 8, 2228272, 0, 8, 2162736, 0, 8, 2424879, 0, 8, 2359343, 0, 8, 2293807, 0, 8, 2228271, 0, 8, 2162735, 0, 8, 2424878, 0, 8, 2359342, 0, 8, 2293806, 0, 8, 2228270, 0, 8, 2162734, 0, 8, 2424877, 0, 8, 2359341, 0, 8, 2293805, 0, 8, 2228269, 0, 8, 2162733, 0, 8, 2424876, 0, 8, 2359340, 0, 8, 2293804, 0, 8, 2228268, 0, 8, 2162732, 0, 8, 2424875, 0, 8, 2359339, 0, 8, 2293803, 0, 8, 2228267, 0, 8, 2162731, 0, 8, 2424874, 0, 8, 2359338, 0, 8, 2293802, 0, 8, 2228266, 0, 8, 2162730, 0, 8, 2228265, 196608, 3, 2097193, 196608, 4, 2097195, 131072, 7, 2293801, 196608, 3, 2162729, 196608, 3, 2359337, 196608, 3, 2424873, 196608, 3, 2097194, 131072, 7, 2097196, 131072, 7, 2097197, 131072, 7, 2097198, 131072, 7, 2097199, 131072, 7, 2097200, 131072, 7, 2097201, 131072, 7, 2097202, 131072, 7, 2097203, 131072, 7, 2097204, 131072, 7, 2097205, 131072, 7, 2097206, 131072, 7, 2097207, 131072, 7, 2097208, 131072, 7, 2097209, 131072, 7, 2097210, 131072, 7, 2097211, 131072, 7, 2097212, 131072, 7, 2097213, 131072, 7, 2097214, 131072, 7, 2097215, 131072, 7, 2097216, 131072, 7, 2097217, 131072, 7, 2228361, 0, 8, 2162825, 0, 8, 2097289, 0, 8, 2031753, 0, 8, 1966217, 0, 8, 1900681, 0, 8, 1835145, 0, 8, 1769609, 0, 8, 1704073, 0, 8, 1638537, 0, 8, 1573001, 0, 8, 1507465, 0, 8, 1441929, 0, 8, 1376393, 0, 8, 1310857, 0, 8, 1245321, 0, 8, 1179785, 0, 8, 1114249, 0, 8, 1048713, 0, 8, 983177, 0, 8, 2228360, 0, 8, 2162824, 0, 8, 2097288, 0, 8, 2031752, 0, 8, 1966216, 0, 8, 1900680, 0, 8, 1835144, 0, 8, 1769608, 0, 8, 1704072, 0, 8, 1638536, 0, 8, 1573000, 0, 8, 1507464, 0, 8, 1441928, 0, 8, 1376392, 0, 8, 1310856, 0, 8, 1245320, 0, 8, 1179784, 0, 8, 1114248, 0, 8, 1048712, 0, 8, 983176, 0, 8, 2228359, 0, 8, 2162823, 0, 8, 2097287, 0, 8, 2031751, 0, 8, 1966215, 0, 8, 1900679, 0, 8, 1835143, 0, 8, 1769607, 0, 8, 1704071, 0, 8, 1638535, 0, 8, 1572999, 0, 8, 1507463, 0, 8, 1441927, 0, 8, 1376391, 0, 8, 1310855, 0, 8, 1245319, 0, 8, 1179783, 0, 8, 1114247, 0, 8, 1048711, 0, 8, 983175, 0, 8, 2228358, 0, 8, 2162822, 0, 8, 2097286, 0, 8, 2031750, 0, 8, 1966214, 0, 8, 1900678, 0, 8, 1835142, 0, 8, 1769606, 0, 8, 1704070, 0, 8, 1638534, 0, 8, 1572998, 0, 8, 1507462, 0, 8, 1441926, 0, 8, 1376390, 0, 8, 1310854, 0, 8, 1245318, 0, 8, 1179782, 0, 8, 1114246, 0, 8, 1048710, 0, 8, 983174, 0, 8, 2228357, 0, 8, 2162821, 0, 8, 2097285, 0, 8, 2031749, 0, 8, 1966213, 0, 8, 1900677, 0, 8, 1835141, 0, 8, 1769605, 0, 8, 1704069, 0, 8, 1638533, 0, 8, 1572997, 0, 8, 1507461, 0, 8, 1441925, 0, 8, 1376389, 0, 8, 1310853, 0, 8, 1245317, 0, 8, 1179781, 0, 8, 1114245, 0, 8, 1048709, 0, 8, 983173, 0, 8, 2228356, 0, 8, 2162820, 0, 8, 2097284, 0, 8, 2031748, 0, 8, 1966212, 0, 8, 1900676, 0, 8, 1835140, 0, 8, 1769604, 0, 8, 1704068, 0, 8, 1638532, 0, 8, 1572996, 0, 8, 1507460, 0, 8, 1441924, 0, 8, 1376388, 0, 8, 1310852, 0, 8, 1245316, 0, 8, 1179780, 0, 8, 1114244, 0, 8, 1048708, 0, 8, 983172, 0, 8, 2228355, 0, 8, 2162819, 0, 8, 2097283, 0, 8, 2031747, 0, 8, 1966211, 0, 8, 1900675, 0, 8, 1835139, 0, 8, 1769603, 0, 8, 1704067, 0, 8, 1638531, 0, 8, 1572995, 0, 8, 1507459, 0, 8, 1441923, 0, 8, 1376387, 0, 8, 1310851, 0, 8, 1245315, 0, 8, 1179779, 0, 8, 1114243, 0, 8, 1048707, 0, 8, 983171, 0, 8, 2228354, 0, 8, 2162818, 0, 8, 2097282, 0, 8, 2031746, 0, 8, 1966210, 0, 8, 1900674, 0, 8, 1835138, 0, 8, 1769602, 0, 8, 1704066, 0, 8, 1638530, 0, 8, 1572994, 0, 8, 1507458, 0, 8, 1441922, 0, 8, 1376386, 0, 8, 1310850, 0, 8, 1245314, 0, 8, 1179778, 0, 8, 1114242, 0, 8, 1048706, 0, 8, 983170, 0, 8, 2228353, 0, 8, 2162817, 0, 8, 2097281, 0, 8, 2031745, 0, 8, 1966209, 0, 8, 1900673, 0, 8, 1835137, 0, 8, 1769601, 0, 8, 1704065, 0, 8, 1638529, 0, 8, 1572993, 0, 8, 1507457, 0, 8, 1441921, 0, 8, 1376385, 0, 8, 1310849, 0, 8, 1245313, 0, 8, 1179777, 0, 8, 1114241, 0, 8, 1048705, 0, 8, 983169, 0, 8, 2228352, 0, 8, 2162816, 0, 8, 2097280, 0, 8, 2031744, 0, 8, 1966208, 0, 8, 1900672, 0, 8, 1835136, 0, 8, 1769600, 0, 8, 1704064, 0, 8, 1638528, 0, 8, 1572992, 0, 8, 1507456, 0, 8, 1441920, 0, 8, 1376384, 0, 8, 1310848, 0, 8, 1245312, 0, 8, 1179776, 0, 8, 1114240, 0, 8, 1048704, 0, 8, 983168, 0, 8, 2228351, 0, 8, 2162815, 0, 8, 2097279, 0, 8, 2031743, 0, 8, 1966207, 0, 8, 1900671, 0, 8, 1835135, 0, 8, 1769599, 0, 8, 1704063, 0, 8, 1638527, 0, 8, 1572991, 0, 8, 1507455, 0, 8, 1441919, 0, 8, 1376383, 0, 8, 1310847, 0, 8, 1245311, 0, 8, 1179775, 0, 8, 1114239, 0, 8, 1048703, 0, 8, 983167, 0, 8, 2228350, 0, 8, 2162814, 0, 8, 2097278, 0, 8, 2031742, 0, 8, 1966206, 0, 8, 1900670, 0, 8, 1835134, 0, 8, 1769598, 0, 8, 1704062, 0, 8, 1638526, 0, 8, 1572990, 0, 8, 1507454, 0, 8, 1441918, 0, 8, 1376382, 0, 8, 1310846, 0, 8, 1245310, 0, 8, 1179774, 0, 8, 1114238, 0, 8, 1048702, 0, 8, 983166, 0, 8, 2228349, 0, 8, 2162813, 0, 8, 2097277, 0, 8, 2031741, 0, 8, 1966205, 0, 8, 1900669, 0, 8, 1835133, 0, 8, 1769597, 0, 8, 1704061, 0, 8, 1638525, 0, 8, 1572989, 0, 8, 1507453, 0, 8, 1441917, 0, 8, 1376381, 0, 8, 1310845, 0, 8, 1245309, 0, 8, 1179773, 0, 8, 1114237, 0, 8, 1048701, 0, 8, 983165, 0, 8, 2228348, 0, 8, 2162812, 0, 8, 2097276, 0, 8, 2031740, 0, 8, 1966204, 0, 8, 1900668, 0, 8, 1835132, 0, 8, 1769596, 0, 8, 1704060, 0, 8, 1638524, 0, 8, 1572988, 0, 8, 1507452, 0, 8, 1441916, 0, 8, 1376380, 0, 8, 1310844, 0, 8, 1245308, 0, 8, 1179772, 0, 8, 1114236, 0, 8, 1048700, 0, 8, 983164, 0, 8, 2228347, 0, 8, 2162811, 0, 8, 2097275, 0, 8, 2031739, 0, 8, 1966203, 0, 8, 1900667, 0, 8, 1835131, 0, 8, 1769595, 0, 8, 1704059, 0, 8, 1638523, 0, 8, 1572987, 0, 8, 1507451, 0, 8, 1441915, 0, 8, 1376379, 0, 8, 1310843, 0, 8, 1245307, 0, 8, 1179771, 0, 8, 1114235, 0, 8, 1048699, 0, 8, 983163, 0, 8, 2228346, 0, 8, 2162810, 0, 8, 2097274, 0, 8, 2031738, 0, 8, 1966202, 0, 8, 1900666, 0, 8, 1835130, 0, 8, 1769594, 0, 8, 1704058, 0, 8, 1638522, 0, 8, 1572986, 0, 8, 1507450, 0, 8, 1441914, 0, 8, 1376378, 0, 8, 1310842, 0, 8, 1245306, 0, 8, 1179770, 0, 8, 1114234, 0, 8, 1048698, 0, 8, 983162, 0, 8, 2228345, 0, 8, 2162809, 0, 8, 2097273, 0, 8, 2031737, 0, 8, 1966201, 0, 8, 1900665, 0, 8, 1835129, 0, 8, 1769593, 0, 8, 1704057, 0, 8, 1638521, 0, 8, 1572985, 0, 8, 1507449, 0, 8, 1441913, 0, 8, 1376377, 0, 8, 1310841, 0, 8, 1245305, 0, 8, 1179769, 0, 8, 1114233, 0, 8, 1048697, 0, 8, 983161, 0, 8, 2228344, 0, 8, 2162808, 0, 8, 2097272, 0, 8, 2031736, 0, 8, 1966200, 0, 8, 1900664, 0, 8, 1835128, 0, 8, 1769592, 0, 8, 1704056, 0, 8, 1638520, 0, 8, 1572984, 0, 8, 1507448, 0, 8, 1441912, 0, 8, 1376376, 0, 8, 1310840, 0, 8, 1245304, 0, 8, 1179768, 0, 8, 1114232, 0, 8, 1048696, 0, 8, 983160, 0, 8, 2228343, 0, 8, 2162807, 0, 8, 2097271, 0, 8, 2031735, 0, 8, 1966199, 0, 8, 1900663, 0, 8, 1835127, 0, 8, 1769591, 0, 8, 1704055, 0, 8, 1638519, 0, 8, 1572983, 0, 8, 1507447, 0, 8, 1441911, 0, 8, 1376375, 0, 8, 1310839, 0, 8, 1245303, 0, 8, 1179767, 0, 8, 1114231, 0, 8, 1048695, 0, 8, 983159, 0, 8, 2228342, 0, 8, 2162806, 0, 8, 2097270, 0, 8, 2031734, 0, 8, 1966198, 0, 8, 1900662, 0, 8, 1835126, 0, 8, 1769590, 0, 8, 1704054, 0, 8, 1638518, 0, 8, 1572982, 0, 8, 1507446, 0, 8, 1441910, 0, 8, 1376374, 0, 8, 1310838, 0, 8, 1245302, 0, 8, 1179766, 0, 8, 1114230, 0, 8, 1048694, 0, 8, 983158, 0, 8, 2228341, 0, 8, 2162805, 0, 8, 2097269, 0, 8, 2031733, 0, 8, 1966197, 0, 8, 1900661, 0, 8, 1835125, 0, 8, 1769589, 0, 8, 1704053, 0, 8, 1638517, 0, 8, 1572981, 0, 8, 1507445, 0, 8, 1441909, 0, 8, 1376373, 0, 8, 1310837, 0, 8, 1245301, 0, 8, 1179765, 0, 8, 1114229, 0, 8, 1048693, 0, 8, 983157, 0, 8, 2228340, 0, 8, 2162804, 0, 8, 2097268, 0, 8, 2031732, 0, 8, 1966196, 0, 8, 1900660, 0, 8, 1835124, 0, 8, 1769588, 0, 8, 1704052, 0, 8, 1638516, 0, 8, 1572980, 0, 8, 1507444, 0, 8, 1441908, 0, 8, 1376372, 0, 8, 1310836, 0, 8, 1245300, 0, 8, 1179764, 0, 8, 1114228, 0, 8, 1048692, 0, 8, 983156, 0, 8, 2228339, 0, 8, 2162803, 0, 8, 2097267, 0, 8, 2031731, 0, 8, 1966195, 0, 8, 1900659, 0, 8, 1835123, 0, 8, 1769587, 0, 8, 1704051, 0, 8, 1638515, 0, 8, 1572979, 0, 8, 1507443, 0, 8, 1441907, 0, 8, 1376371, 0, 8, 1310835, 0, 8, 1245299, 0, 8, 1179763, 0, 8, 1114227, 0, 8, 1048691, 0, 8, 983155, 0, 8, 2228338, 0, 8, 2162802, 0, 8, 2097266, 0, 8, 2031730, 0, 8, 1966194, 0, 8, 1900658, 0, 8, 1835122, 0, 8, 1769586, 0, 8, 1704050, 0, 8, 1638514, 0, 8, 1572978, 0, 8, 1507442, 0, 8, 1441906, 0, 8, 1376370, 0, 8, 1310834, 0, 8, 1245298, 0, 8, 1179762, 0, 8, 1114226, 0, 8, 1048690, 0, 8, 983154, 0, 8, 2228337, 0, 8, 2162801, 0, 8, 2097265, 0, 8, 2031729, 0, 8, 1966193, 0, 8, 1900657, 0, 8, 1835121, 0, 8, 1769585, 0, 8, 1704049, 0, 8, 1638513, 0, 8, 1572977, 0, 8, 1507441, 0, 8, 1441905, 0, 8, 1376369, 0, 8, 1310833, 0, 8, 1245297, 0, 8, 1179761, 0, 8, 1114225, 0, 8, 1048689, 0, 8, 983153, 0, 8, 2228336, 0, 8, 2162800, 0, 8, 2097264, 0, 8, 2031728, 0, 8, 1966192, 0, 8, 1900656, 0, 8, 1835120, 0, 8, 1769584, 0, 8, 1704048, 0, 8, 1638512, 0, 8, 1572976, 0, 8, 1507440, 0, 8, 1441904, 0, 8, 1376368, 0, 8, 1310832, 0, 8, 1245296, 0, 8, 1179760, 0, 8, 1114224, 0, 8, 1048688, 0, 8, 983152, 0, 8, 2228335, 0, 8, 2162799, 0, 8, 2097263, 0, 8, 2031727, 0, 8, 1966191, 0, 8, 1900655, 0, 8, 1835119, 0, 8, 1769583, 0, 8, 1704047, 0, 8, 1638511, 0, 8, 1572975, 0, 8, 1507439, 0, 8, 1441903, 0, 8, 1376367, 0, 8, 1310831, 0, 8, 1245295, 0, 8, 1179759, 0, 8, 1114223, 0, 8, 1048687, 0, 8, 983151, 0, 8, 2228334, 0, 8, 2162798, 0, 8, 2097262, 0, 8, 2031726, 0, 8, 1966190, 0, 8, 1900654, 0, 8, 1835118, 0, 8, 1769582, 0, 8, 1704046, 0, 8, 1638510, 0, 8, 1572974, 0, 8, 1507438, 0, 8, 1441902, 0, 8, 1376366, 0, 8, 1310830, 0, 8, 1245294, 0, 8, 1179758, 0, 8, 1114222, 0, 8, 1048686, 0, 8, 983150, 0, 8, 2228333, 0, 8, 2162797, 0, 8, 2097261, 0, 8, 2031725, 0, 8, 1966189, 0, 8, 1900653, 0, 8, 1835117, 0, 8, 1769581, 0, 8, 1704045, 0, 8, 1638509, 0, 8, 1572973, 0, 8, 1507437, 0, 8, 1441901, 0, 8, 1376365, 0, 8, 1310829, 0, 8, 1245293, 0, 8, 1179757, 0, 8, 1114221, 0, 8, 1048685, 0, 8, 983149, 0, 8, 2228332, 0, 8, 2162796, 0, 8, 2097260, 0, 8, 2031724, 0, 8, 1966188, 0, 8, 1900652, 0, 8, 1835116, 0, 8, 1769580, 0, 8, 1704044, 0, 8, 1638508, 0, 8, 1572972, 0, 8, 1507436, 0, 8, 1441900, 0, 8, 1376364, 0, 8, 1310828, 0, 8, 1245292, 0, 8, 1179756, 0, 8, 1114220, 0, 8, 1048684, 0, 8, 983148, 0, 8, 2228331, 0, 8, 2162795, 0, 8, 2097259, 0, 8, 2031723, 0, 8, 1966187, 0, 8, 1900651, 0, 8, 1835115, 0, 8, 1769579, 0, 8, 1704043, 0, 8, 1638507, 0, 8, 1572971, 0, 8, 1507435, 0, 8, 1441899, 0, 8, 1376363, 0, 8, 1310827, 0, 8, 1245291, 0, 8, 1179755, 0, 8, 1114219, 0, 8, 1048683, 0, 8, 983147, 0, 8, 2228330, 0, 8, 2162794, 0, 8, 2097258, 0, 8, 2031722, 0, 8, 1966186, 0, 8, 1900650, 0, 8, 1835114, 0, 8, 1769578, 0, 8, 1704042, 0, 8, 1638506, 0, 8, 1572970, 0, 8, 1507434, 0, 8, 1441898, 0, 8, 1376362, 0, 8, 1310826, 0, 8, 1245290, 0, 8, 1179754, 0, 8, 1114218, 0, 8, 1048682, 0, 8, 983146, 0, 8, 2228329, 0, 8, 2162793, 0, 8, 2097257, 0, 8, 2031721, 0, 8, 1966185, 0, 8, 1900649, 0, 8, 1835113, 0, 8, 1769577, 0, 8, 1704041, 0, 8, 1638505, 0, 8, 1572969, 0, 8, 1507433, 0, 8, 1441897, 0, 8, 1376361, 0, 8, 1310825, 0, 8, 1245289, 0, 8, 1179753, 0, 8, 1114217, 0, 8, 1048681, 0, 8, 983145, 0, 8, 917609, 131072, 7, 2293865, 131072, 2, 917610, 131072, 7, 2293866, 131072, 2, 917611, 131072, 7, 2293867, 131072, 2, 917612, 131072, 7, 2293868, 131072, 2, 917613, 131072, 7, 2293869, 131072, 2, 917614, 131072, 7, 2293870, 131072, 2, 917615, 131072, 7, 2293871, 131072, 2, 917616, 131072, 7, 2293872, 131072, 2, 917617, 131072, 7, 2293873, 131072, 2, 917618, 131072, 7, 2293874, 131072, 2, 917619, 131072, 7, 2293875, 131072, 2, 917620, 131072, 7, 2293876, 131072, 2, 917621, 131072, 7, 2293877, 131072, 2, 917622, 131072, 7, 2293878, 131072, 2, 917623, 131072, 7, 2293879, 131072, 2, 917624, 131072, 7, 2293880, 131072, 2, 917625, 131072, 7, 2293881, 131072, 2, 917626, 131072, 7, 2293882, 131072, 2, 917627, 131072, 7, 2293883, 131072, 2, 917628, 131072, 7, 2293884, 131072, 2, 917629, 131072, 7, 2293885, 131072, 2, 917630, 131072, 7, 2293886, 131072, 2, 917631, 131072, 7, 2293887, 131072, 2, 917632, 131072, 7, 2293888, 131072, 2, 917633, 131072, 7, 2293889, 131072, 2, 917634, 131072, 7, 2293890, 131072, 2, 917635, 131072, 7, 2293891, 131072, 2, 917636, 131072, 7, 2293892, 131072, 2, 917637, 131072, 7, 2293893, 131072, 2, 917638, 131072, 7, 2293894, 131072, 2, 917639, 131072, 7, 2293895, 131072, 2, 917640, 131072, 7, 2293896, 131072, 2, 917641, 131072, 7, 2293897, 131072, 2, 1048714, 65536, 3, 917642, 65536, 4, 1114250, 65536, 3, 983178, 65536, 3, 1179786, 65536, 3, 1245322, 65536, 3, 1310858, 65536, 3, 1376394, 65536, 3, 1441930, 65536, 3, 1507466, 65536, 3, 1573002, 65536, 3, 1638538, 65536, 3, 1704074, 65536, 3, 1769610, 65536, 3, 1835146, 65536, 3, 1900682, 65536, 3, 1966218, 65536, 3, 2031754, 65536, 3, 2097290, 65536, 3, 2162826, 65536, 3, 2228362, 65536, 3, 2293898, 851968, 2, 917560, 0, 8, 852024, 0, 8, 786488, 0, 8, 720952, 0, 8, 655416, 0, 8, 589880, 0, 8, 524344, 0, 8, 458808, 0, 8, 393272, 0, 8, 327736, 0, 8, 262200, 0, 8, 196664, 0, 8, 131128, 0, 8, 65592, 0, 8, 56, 0, 8, -65480, 0, 8, -131016, 0, 8, -196552, 0, 8, -262088, 0, 8, -327624, 0, 8, -393160, 0, 8, -458696, 0, 8, -524232, 0, 8, -589768, 0, 8, 917559, 0, 8, 852023, 0, 8, 786487, 0, 8, 720951, 0, 8, 655415, 0, 8, 589879, 0, 8, 524343, 0, 8, 458807, 0, 8, 393271, 0, 8, 327735, 0, 8, 262199, 0, 8, 196663, 0, 8, 131127, 0, 8, 65591, 0, 8, 55, 0, 8, -65481, 0, 8, -131017, 0, 8, -196553, 0, 8, -262089, 0, 8, -327625, 0, 8, -393161, 0, 8, -458697, 0, 8, -524233, 0, 8, -589769, 0, 8, 917558, 0, 8, 852022, 0, 8, 786486, 0, 8, 720950, 0, 8, 655414, 0, 8, 589878, 0, 8, 524342, 0, 8, 458806, 0, 8, 393270, 0, 8, 327734, 0, 8, 262198, 0, 8, 196662, 0, 8, 131126, 0, 8, 65590, 0, 8, 54, 0, 8, -65482, 0, 8, -131018, 0, 8, -196554, 0, 8, -262090, 0, 8, -327626, 0, 8, -393162, 0, 8, -458698, 0, 8, -524234, 0, 8, -589770, 0, 8, 917557, 0, 8, 852021, 0, 8, 786485, 0, 8, 720949, 0, 8, 655413, 0, 8, 589877, 0, 8, 524341, 0, 8, 458805, 0, 8, 393269, 0, 8, 327733, 0, 8, 262197, 0, 8, 196661, 0, 8, 131125, 0, 8, 65589, 0, 8, 53, 0, 8, -65483, 0, 8, -131019, 0, 8, -196555, 0, 8, -262091, 0, 8, -327627, 0, 8, -393163, 0, 8, -458699, 0, 8, -524235, 0, 8, -589771, 0, 8, 917556, 0, 8, 852020, 0, 8, 786484, 0, 8, 720948, 0, 8, 655412, 0, 8, 589876, 0, 8, 524340, 0, 8, 458804, 0, 8, 393268, 0, 8, 327732, 0, 8, 262196, 0, 8, 196660, 0, 8, 131124, 0, 8, 65588, 0, 8, 52, 0, 8, -65484, 0, 8, -131020, 0, 8, -196556, 0, 8, -262092, 0, 8, -327628, 0, 8, -393164, 0, 8, -458700, 0, 8, -524236, 0, 8, -589772, 0, 8, 917555, 0, 8, 852019, 0, 8, 786483, 0, 8, 720947, 0, 8, 655411, 0, 8, 589875, 0, 8, 524339, 0, 8, 458803, 0, 8, 393267, 0, 8, 327731, 0, 8, 262195, 0, 8, 196659, 0, 8, 131123, 0, 8, 65587, 0, 8, 51, 0, 8, -65485, 0, 8, -131021, 0, 8, -196557, 0, 8, -262093, 0, 8, -327629, 0, 8, -393165, 0, 8, -458701, 0, 8, -524237, 0, 8, -589773, 0, 8, 917554, 0, 8, 852018, 0, 8, 786482, 0, 8, 720946, 0, 8, 655410, 0, 8, 589874, 0, 8, 524338, 0, 8, 458802, 0, 8, 393266, 0, 8, 327730, 0, 8, 262194, 0, 8, 196658, 0, 8, 131122, 0, 8, 65586, 0, 8, 50, 0, 8, -65486, 0, 8, -131022, 0, 8, -196558, 0, 8, -262094, 0, 8, -327630, 0, 8, -393166, 0, 8, -458702, 0, 8, -524238, 0, 8, -589774, 0, 8, 917553, 0, 8, 852017, 0, 8, 786481, 0, 8, 720945, 0, 8, 655409, 0, 8, 589873, 0, 8, 524337, 0, 8, 458801, 0, 8, 393265, 0, 8, 327729, 0, 8, 262193, 0, 8, 196657, 0, 8, 131121, 0, 8, 65585, 0, 8, 49, 0, 8, -65487, 0, 8, -131023, 0, 8, -196559, 0, 8, -262095, 0, 8, -327631, 0, 8, -393167, 0, 8, -458703, 0, 8, -524239, 0, 8, -589775, 0, 8, 917552, 0, 8, 852016, 0, 8, 786480, 0, 8, 720944, 0, 8, 655408, 0, 8, 589872, 0, 8, 524336, 0, 8, 458800, 0, 8, 393264, 0, 8, 327728, 0, 8, 262192, 0, 8, 196656, 0, 8, 131120, 0, 8, 65584, 0, 8, 48, 0, 8, -65488, 0, 8, -131024, 0, 8, -196560, 0, 8, -262096, 0, 8, -327632, 0, 8, -393168, 0, 8, -458704, 0, 8, -524240, 0, 8, -589776, 0, 8, 917551, 0, 8, 852015, 0, 8, 786479, 0, 8, 720943, 0, 8, 655407, 0, 8, 589871, 0, 8, 524335, 0, 8, 458799, 0, 8, 393263, 0, 8, 327727, 0, 8, 262191, 0, 8, 196655, 0, 8, 131119, 0, 8, 65583, 0, 8, 47, 0, 8, -65489, 0, 8, -131025, 0, 8, -196561, 0, 8, -262097, 0, 8, -327633, 0, 8, -393169, 0, 8, -458705, 0, 8, -524241, 0, 8, -589777, 0, 8, 917550, 0, 8, 852014, 0, 8, 786478, 0, 8, 720942, 0, 8, 655406, 0, 8, 589870, 0, 8, 524334, 0, 8, 458798, 0, 8, 393262, 0, 8, 327726, 0, 8, 262190, 0, 8, 196654, 0, 8, 131118, 0, 8, 65582, 0, 8, 46, 0, 8, -65490, 0, 8, -131026, 0, 8, -196562, 0, 8, -262098, 0, 8, -327634, 0, 8, -393170, 0, 8, -458706, 0, 8, -524242, 0, 8, -589778, 0, 8, 917549, 0, 8, 852013, 0, 8, 786477, 0, 8, 720941, 0, 8, 655405, 0, 8, 589869, 0, 8, 524333, 0, 8, 458797, 0, 8, 393261, 0, 8, 327725, 0, 8, 262189, 0, 8, 196653, 0, 8, 131117, 0, 8, 65581, 0, 8, 45, 0, 8, -65491, 0, 8, -131027, 0, 8, -196563, 0, 8, -262099, 0, 8, -327635, 0, 8, -393171, 0, 8, -458707, 0, 8, -524243, 0, 8, -589779, 0, 8, 917548, 0, 8, 852012, 0, 8, 786476, 0, 8, 720940, 0, 8, 655404, 0, 8, 589868, 0, 8, 524332, 0, 8, 458796, 0, 8, 393260, 0, 8, 327724, 0, 8, 262188, 0, 8, 196652, 0, 8, 131116, 0, 8, 65580, 0, 8, 44, 0, 8, -65492, 0, 8, -131028, 0, 8, -196564, 0, 8, -262100, 0, 8, -327636, 0, 8, -393172, 0, 8, -458708, 0, 8, -524244, 0, 8, -589780, 0, 8, 917547, 0, 8, 852011, 0, 8, 786475, 0, 8, 720939, 0, 8, 655403, 0, 8, 589867, 0, 8, 524331, 0, 8, 458795, 0, 8, 393259, 0, 8, 327723, 0, 8, 262187, 0, 8, 196651, 0, 8, 131115, 0, 8, 65579, 0, 8, 43, 0, 8, -65493, 0, 8, -131029, 0, 8, -196565, 0, 8, -262101, 0, 8, -327637, 0, 8, -393173, 0, 8, -458709, 0, 8, -524245, 0, 8, -589781, 0, 8, 917546, 0, 8, 852010, 0, 8, 786474, 0, 8, 720938, 0, 8, 655402, 0, 8, 589866, 0, 8, 524330, 0, 8, 458794, 0, 8, 393258, 0, 8, 327722, 0, 8, 262186, 0, 8, 196650, 0, 8, 131114, 0, 8, 65578, 0, 8, 42, 0, 8, -65494, 0, 8, -131030, 0, 8, -196566, 0, 8, -262102, 0, 8, -327638, 0, 8, -393174, 0, 8, -458710, 0, 8, -524246, 0, 8, -589782, 0, 8, 917545, 0, 8, 852009, 0, 8, 786473, 0, 8, 720937, 0, 8, 655401, 0, 8, 589865, 0, 8, 524329, 0, 8, 458793, 0, 8, 393257, 0, 8, 327721, 0, 8, 262185, 0, 8, 196649, 0, 8, 131113, 0, 8, 65577, 0, 8, 41, 0, 8, -65495, 0, 8, -131031, 0, 8, -196567, 0, 8, -262103, 0, 8, -327639, 0, 8, -393175, 0, 8, -458711, 0, 8, -524247, 0, 8, -589783, 0, 8, 917544, 0, 8, 852008, 0, 8, 786472, 0, 8, 720936, 0, 8, 655400, 0, 8, 589864, 0, 8, 524328, 0, 8, 458792, 0, 8, 393256, 0, 8, 327720, 0, 8, 262184, 0, 8, 196648, 0, 8, 131112, 0, 8, 65576, 0, 8, 40, 0, 8, -65496, 0, 8, -131032, 0, 8, -196568, 0, 8, -262104, 0, 8, -327640, 0, 8, -393176, 0, 8, -458712, 0, 8, -524248, 0, 8, -589784, 0, 8, 917543, 0, 8, 852007, 0, 8, 786471, 0, 8, 720935, 0, 8, 655399, 0, 8, 589863, 0, 8, 524327, 0, 8, 458791, 0, 8, 393255, 0, 8, 327719, 0, 8, 262183, 0, 8, 196647, 0, 8, 131111, 0, 8, 65575, 0, 8, 39, 0, 8, -65497, 0, 8, -131033, 0, 8, -196569, 0, 8, -262105, 0, 8, -327641, 0, 8, -393177, 0, 8, -458713, 0, 8, -524249, 0, 8, -589785, 0, 8, 917542, 0, 8, 852006, 0, 8, 786470, 0, 8, 720934, 0, 8, 655398, 0, 8, 589862, 0, 8, 524326, 0, 8, 458790, 0, 8, 393254, 0, 8, 327718, 0, 8, 262182, 0, 8, 196646, 0, 8, 131110, 0, 8, 65574, 0, 8, 38, 0, 8, -65498, 0, 8, -131034, 0, 8, -196570, 0, 8, -262106, 0, 8, -327642, 0, 8, -393178, 0, 8, -458714, 0, 8, -524250, 0, 8, -589786, 0, 8, 917541, 0, 8, 852005, 0, 8, 786469, 0, 8, 720933, 0, 8, 655397, 0, 8, 589861, 0, 8, 524325, 0, 8, 458789, 0, 8, 393253, 0, 8, 327717, 0, 8, 262181, 0, 8, 196645, 0, 8, 131109, 0, 8, 65573, 0, 8, 37, 0, 8, -65499, 0, 8, -131035, 0, 8, -196571, 0, 8, -262107, 0, 8, -327643, 0, 8, -393179, 0, 8, -458715, 0, 8, -524251, 0, 8, -589787, 0, 8, 917540, 0, 8, 852004, 0, 8, 786468, 0, 8, 720932, 0, 8, 655396, 0, 8, 589860, 0, 8, 524324, 0, 8, 458788, 0, 8, 393252, 0, 8, 327716, 0, 8, 262180, 0, 8, 196644, 0, 8, 131108, 0, 8, 65572, 0, 8, 36, 0, 8, -65500, 0, 8, -131036, 0, 8, -196572, 0, 8, -262108, 0, 8, -327644, 0, 8, -393180, 0, 8, -458716, 0, 8, -524252, 0, 8, -589788, 0, 8, 917539, 0, 8, 852003, 0, 8, 786467, 0, 8, 720931, 0, 8, 655395, 0, 8, 589859, 0, 8, 524323, 0, 8, 458787, 0, 8, 393251, 0, 8, 327715, 0, 8, 262179, 0, 8, 196643, 0, 8, 131107, 0, 8, 65571, 0, 8, 35, 0, 8, -65501, 0, 8, -131037, 0, 8, -196573, 0, 8, -262109, 0, 8, -327645, 0, 8, -393181, 0, 8, -458717, 0, 8, -524253, 0, 8, -589789, 0, 8, 917538, 0, 8, 852002, 0, 8, 786466, 0, 8, 720930, 0, 8, 655394, 0, 8, 589858, 0, 8, 524322, 0, 8, 458786, 0, 8, 393250, 0, 8, 327714, 0, 8, 262178, 0, 8, 196642, 0, 8, 131106, 0, 8, 65570, 0, 8, 34, 0, 8, -65502, 0, 8, -131038, 0, 8, -196574, 0, 8, -262110, 0, 8, -327646, 0, 8, -393182, 0, 8, -458718, 0, 8, -524254, 0, 8, -589790, 0, 8, -524255, 196608, 3, -655327, 196608, 4, -655325, 131072, 7, -458719, 196608, 3, -589791, 196608, 3, -393183, 196608, 3, -327647, 196608, 3, -262111, 196608, 3, -196575, 196608, 3, -131039, 196608, 3, -65503, 196608, 3, 33, 196608, 3, 65569, 196608, 3, 131105, 196608, 3, 196641, 196608, 3, 262177, 196608, 3, 327713, 196608, 3, 393249, 196608, 3, 458785, 196608, 3, 524321, 196608, 3, 589857, 196608, 3, 655393, 196608, 3, 720929, 196608, 3, 786465, 196608, 3, 852001, 196608, 3, 917537, 196608, 3, 983075, 131072, 2, 983073, 720896, 2, -655326, 131072, 7, -655324, 131072, 7, 983076, 131072, 2, 983074, 131072, 2, -655323, 131072, 7, 983077, 131072, 2, -655322, 131072, 7, 983078, 131072, 2, -655321, 131072, 7, 983079, 131072, 2, -655320, 131072, 7, 983080, 131072, 2, -655319, 131072, 7, 983081, 131072, 2, -655318, 131072, 7, 983082, 131072, 2, -655317, 131072, 7, 983083, 131072, 2, -655316, 131072, 7, 983084, 131072, 2, -655315, 131072, 7, 983085, 131072, 2, -655314, 131072, 7, 983086, 131072, 2, -655313, 131072, 7, 983087, 131072, 2, -655312, 131072, 7, 983088, 131072, 2, -655311, 131072, 7, 983089, 131072, 2, -655310, 131072, 7, 983090, 131072, 2, -655309, 131072, 7, 983091, 196608, 2, -655308, 131072, 7, 983092, 0, 8, -655307, 131072, 7, 983093, 0, 8, -655306, 131072, 7, 983094, 0, 8, -655305, 131072, 7, 983095, 0, 8, -655304, 131072, 7, 983096, 0, 8, -524231, 65536, 3, -655303, 65536, 4, -458695, 65536, 3, -589767, 65536, 3, -393159, 65536, 3, -327623, 65536, 3, -262087, 65536, 3, -196551, 65536, 3, -131015, 65536, 3, -65479, 65536, 3, 57, 65536, 3, 65593, 65536, 3, 131129, 65536, 3, 196665, 65536, 7, 262201, 0, 8, 327737, 0, 8, 393273, 0, 8, 458809, 0, 8, 524345, 0, 8, 589881, 0, 8, 655417, 0, 8, 720953, 0, 8, 786489, 0, 8, 852025, 0, 8, 917561, 0, 8, 983097, 0, 8, 393291, 0, 8, 327755, 0, 8, 262219, 0, 8, 393290, 0, 8, 327754, 0, 8, 262218, 0, 8, 393289, 0, 8, 327753, 0, 8, 262217, 0, 8, 393288, 0, 8, 327752, 0, 8, 262216, 0, 8, 393287, 0, 8, 327751, 0, 8, 262215, 0, 8, 393286, 0, 8, 327750, 0, 8, 262214, 0, 8, 393285, 0, 8, 327749, 0, 8, 262213, 0, 8, 393284, 0, 8, 327748, 0, 8, 262212, 0, 8, 393283, 0, 8, 327747, 0, 8, 262211, 0, 8, 393282, 0, 8, 327746, 0, 8, 262210, 0, 8, 1507393, 0, 8, 1441857, 0, 8, 1376321, 0, 8, 1310785, 0, 8, 1245249, 0, 8, 1179713, 0, 8, 1114177, 0, 8, 1048641, 0, 8, 983105, 0, 8, 917569, 0, 8, 852033, 0, 8, 786497, 0, 8, 720961, 0, 8, 655425, 0, 8, 589889, 0, 8, 524353, 0, 8, 458817, 0, 8, 393281, 0, 8, 327745, 0, 8, 262209, 0, 8, 1507392, 0, 8, 1441856, 0, 8, 1376320, 0, 8, 1310784, 0, 8, 1245248, 0, 8, 1179712, 0, 8, 1114176, 0, 8, 1048640, 0, 8, 983104, 0, 8, 917568, 0, 8, 852032, 0, 8, 786496, 0, 8, 720960, 0, 8, 655424, 0, 8, 589888, 0, 8, 524352, 0, 8, 458816, 0, 8, 393280, 0, 8, 327744, 0, 8, 262208, 0, 8, 1507391, 0, 8, 1441855, 0, 8, 1376319, 0, 8, 1310783, 0, 8, 1245247, 0, 8, 1179711, 0, 8, 1114175, 0, 8, 1048639, 0, 8, 983103, 0, 8, 917567, 0, 8, 852031, 0, 8, 786495, 0, 8, 720959, 0, 8, 655423, 0, 8, 589887, 0, 8, 524351, 0, 8, 458815, 0, 8, 393279, 0, 8, 327743, 0, 8, 262207, 0, 8, 1507390, 0, 8, 1441854, 0, 8, 1376318, 0, 8, 1310782, 0, 8, 1245246, 0, 8, 1179710, 0, 8, 1114174, 0, 8, 1048638, 0, 8, 983102, 0, 8, 917566, 0, 8, 852030, 0, 8, 786494, 0, 8, 720958, 0, 8, 655422, 0, 8, 589886, 0, 8, 524350, 0, 8, 458814, 0, 8, 393278, 0, 8, 327742, 0, 8, 262206, 0, 8, 1507389, 0, 8, 1441853, 0, 8, 1376317, 0, 8, 1310781, 0, 8, 1245245, 0, 8, 1179709, 0, 8, 1114173, 0, 8, 1048637, 0, 8, 983101, 0, 8, 917565, 0, 8, 852029, 0, 8, 786493, 0, 8, 720957, 0, 8, 655421, 0, 8, 589885, 0, 8, 524349, 0, 8, 458813, 0, 8, 393277, 0, 8, 327741, 0, 8, 262205, 0, 8, 1507388, 0, 8, 1441852, 0, 8, 1376316, 0, 8, 1310780, 0, 8, 1245244, 0, 8, 1179708, 0, 8, 1114172, 0, 8, 1048636, 0, 8, 983100, 0, 8, 917564, 0, 8, 852028, 0, 8, 786492, 0, 8, 720956, 0, 8, 655420, 0, 8, 589884, 0, 8, 524348, 0, 8, 458812, 0, 8, 393276, 0, 8, 327740, 0, 8, 262204, 0, 8, 1507387, 0, 8, 1441851, 0, 8, 1376315, 0, 8, 1310779, 0, 8, 1245243, 0, 8, 1179707, 0, 8, 1114171, 0, 8, 1048635, 0, 8, 983099, 0, 8, 917563, 0, 8, 852027, 0, 8, 786491, 0, 8, 720955, 0, 8, 655419, 0, 8, 589883, 0, 8, 524347, 0, 8, 458811, 0, 8, 393275, 0, 8, 327739, 0, 8, 262203, 0, 8, 1507386, 0, 8, 1441850, 0, 8, 1376314, 0, 8, 1310778, 0, 8, 1245242, 0, 8, 1179706, 0, 8, 1114170, 0, 8, 1048634, 0, 8, 983098, 0, 8, 917562, 0, 8, 852026, 0, 8, 786490, 0, 8, 720954, 0, 8, 655418, 0, 8, 589882, 0, 8, 524346, 0, 8, 458810, 0, 8, 393274, 0, 8, 327738, 0, 8, 262202, 0, 8, 1507385, 0, 8, 1441849, 0, 8, 1376313, 0, 8, 1310777, 0, 8, 1245241, 0, 8, 1179705, 0, 8, 1114169, 0, 8, 1048633, 0, 8, 1507384, 0, 8, 1441848, 0, 8, 1376312, 0, 8, 1310776, 0, 8, 1245240, 0, 8, 1179704, 0, 8, 1114168, 0, 8, 1048632, 0, 8, 1507383, 0, 8, 1441847, 0, 8, 1376311, 0, 8, 1310775, 0, 8, 1245239, 0, 8, 1179703, 0, 8, 1114167, 0, 8, 1048631, 0, 8, 1507382, 0, 8, 1441846, 0, 8, 1376310, 0, 8, 1310774, 0, 8, 1245238, 0, 8, 1179702, 0, 8, 1114166, 0, 8, 1048630, 0, 8, 1507381, 0, 8, 1441845, 0, 8, 1376309, 0, 8, 1310773, 0, 8, 1245237, 0, 8, 1179701, 0, 8, 1114165, 0, 8, 1048629, 0, 8, 1507380, 0, 8, 1441844, 0, 8, 1376308, 0, 8, 1310772, 0, 8, 1245236, 0, 8, 1179700, 0, 8, 1114164, 0, 8, 1048628, 0, 8, 1048627, 196608, 3, 1114163, 196608, 3, 1179699, 196608, 3, 1245235, 196608, 3, 1310771, 196608, 3, 1376307, 196608, 3, 1441843, 196608, 3, 1507379, 196608, 3, 1572917, 131072, 2, 1572915, 720896, 2, 1572918, 131072, 2, 1572916, 131072, 2, 1572919, 131072, 2, 1572920, 131072, 2, 1572921, 131072, 2, 196666, 131072, 7, 1572922, 131072, 2, 196667, 131072, 7, 1572923, 131072, 2, 196668, 131072, 7, 1572924, 131072, 2, 196669, 131072, 7, 1572925, 131072, 2, 196670, 131072, 7, 1572926, 131072, 2, 196671, 131072, 7, 1572927, 131072, 2, 196672, 131072, 7, 1572928, 131072, 2, 196673, 131072, 7, 1572929, 131072, 2, 196674, 131072, 7, 196675, 131072, 7, 196676, 131072, 7, 196677, 131072, 7, 196678, 131072, 7, 196679, 131072, 7, 196680, 131072, 7, 196681, 131072, 7, 196682, 131072, 7, 196683, 131072, 7, 327756, 65536, 3, 196684, 65536, 4, 393292, 65536, 3, 262220, 65536, 3)
diff --git a/DungeonShooting_Godot/scene/test/TestNavigation2.tscn b/DungeonShooting_Godot/scene/test/TestNavigation2.tscn
index bd27dfe..eae5866 100644
--- a/DungeonShooting_Godot/scene/test/TestNavigation2.tscn
+++ b/DungeonShooting_Godot/scene/test/TestNavigation2.tscn
@@ -7,16 +7,19 @@
vertices = PackedVector2Array(1138, 78, 1168, 948, 1070, 733, 1033, 218, 79, 73, 950, 211, 975, 834, 888, 830, 62, 978, 806, 831, 883, 208, 796, 205, 288, 833, 286, 610, 807, 609, 208, 836, 212, 202, 795, 525, 300, 527, 292, 192)
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 0, 3, 5), PackedInt32Array(6, 2, 1), PackedInt32Array(7, 6, 1, 8, 9), PackedInt32Array(5, 6, 7, 10), PackedInt32Array(4, 5, 10), PackedInt32Array(4, 10, 11), PackedInt32Array(12, 13, 14, 9), PackedInt32Array(12, 9, 8, 15), PackedInt32Array(15, 8, 4, 16), PackedInt32Array(11, 17, 18, 19), PackedInt32Array(4, 11, 19), PackedInt32Array(4, 19, 16)])
outlines = Array[PackedVector2Array]([PackedVector2Array(79, 73, 62, 978, 1168, 948, 1138, 78), PackedVector2Array(212, 202, 208, 836, 288, 833, 286, 610, 807, 609, 806, 831, 888, 830, 883, 208, 796, 205, 795, 525, 300, 527, 292, 192), PackedVector2Array(950, 211, 975, 834, 1070, 733, 1033, 218)])
+source_geometry_group_name = &"navigation_polygon_source_group"
[sub_resource type="NavigationPolygon" id="NavigationPolygon_oawm0"]
vertices = PackedVector2Array(606, 123, 648, 952, 62, 978, 79, 73)
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
outlines = Array[PackedVector2Array]([PackedVector2Array(79, 73, 62, 978, 648, 952, 606, 123)])
+source_geometry_group_name = &"navigation_polygon_source_group"
[sub_resource type="NavigationPolygon" id="NavigationPolygon_nrkta"]
vertices = PackedVector2Array(379, 510, 374, 753, 172, 747, 161, 524)
polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)])
outlines = Array[PackedVector2Array]([PackedVector2Array(161, 524, 172, 747, 374, 753, 379, 510)])
+source_geometry_group_name = &"navigation_polygon_source_group"
[node name="TestNavigation2" type="Node2D"]
script = ExtResource("1")
diff --git a/DungeonShooting_Godot/scene/test/TestNewTerrain.tscn b/DungeonShooting_Godot/scene/test/TestNewTerrain.tscn
new file mode 100644
index 0000000..da3d648
--- /dev/null
+++ b/DungeonShooting_Godot/scene/test/TestNewTerrain.tscn
@@ -0,0 +1,126 @@
+[gd_scene load_steps=10 format=3 uid="uid://iwm27vpirfef"]
+
+[ext_resource type="Script" path="res://src/test/TestNewTerrain.cs" id="1_68mbo"]
+[ext_resource type="PackedScene" uid="uid://cxhrcytrx0kcf" path="res://prefab/role/Role0001.tscn" id="3_bo13a"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="4_iy0ux"]
+[ext_resource type="Texture2D" uid="uid://bda63puujv425" path="res://resource/sprite/role/common/Role_query.png" id="5_rv0km"]
+[ext_resource type="Shader" path="res://resource/material/GodRays.gdshader" id="6_bcjt6"]
+[ext_resource type="Texture2D" uid="uid://uhhfgdhpk7i4" path="res://icon.png" id="7_34lsg"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_7va3f"]
+resource_local_to_scene = true
+shader = ExtResource("4_iy0ux")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_fwac7"]
+shader = ExtResource("6_bcjt6")
+shader_parameter/angle = 0.535
+shader_parameter/position = 0.28
+shader_parameter/spread = 0.5
+shader_parameter/cutoff = 0.1
+shader_parameter/falloff = 0.221
+shader_parameter/edge_fade = 0.15
+shader_parameter/speed = 1.0
+shader_parameter/ray1_density = 8.0
+shader_parameter/ray2_density = 30.0
+shader_parameter/ray2_intensity = 0.3
+shader_parameter/color = Color(1, 0.901961, 0.65098, 0.619608)
+shader_parameter/hdr = false
+shader_parameter/seed = 5.0
+
+[node name="TestNewTerrain" type="Node2D"]
+scale = Vector2(2, 2)
+script = ExtResource("1_68mbo")
+
+[node name="TileMap2" type="TileMap" parent="." groups=["navigation"]]
+z_index = -1
+y_sort_enabled = true
+format = 2
+layer_0/tile_data = PackedInt32Array(1769510, 720896, 3, 1703974, 720896, 2, 1638438, 720896, 2, 1572902, 720896, 2, 1507366, 720896, 2, 1441830, 720896, 2, 1376294, 720896, 2, 1310758, 720896, 2, 1245222, 720896, 2, 1179686, 720896, 2, 1114150, 720896, 2, 1048614, 720896, 2, 983078, 720896, 2, 917542, 720896, 2, 852006, 720896, 2, 786470, 720896, 2, 1769509, 589824, 3, 1703973, 589824, 2, 1638437, 589824, 2, 1572901, 589824, 2, 1507365, 589824, 2, 1441829, 589824, 2, 1376293, 589824, 2, 1310757, 589824, 2, 1245221, 589824, 2, 1179685, 589824, 2, 1114149, 589824, 2, 1048613, 589824, 2, 983077, 589824, 2, 917541, 589824, 2, 852005, 589824, 2, 786469, 589824, 2, 1769508, 589824, 3, 1703972, 589824, 2, 1638436, 589824, 2, 1572900, 589824, 2, 1507364, 589824, 2, 1441828, 589824, 2, 1376292, 589824, 2, 1310756, 589824, 2, 1245220, 589824, 2, 1179684, 589824, 2, 1114148, 589824, 2, 1048612, 589824, 2, 983076, 589824, 2, 917540, 589824, 2, 852004, 589824, 2, 786468, 589824, 2, 1769507, 589824, 3, 1703971, 589824, 2, 1638435, 589824, 2, 1572899, 589824, 2, 1507363, 589824, 2, 1441827, 589824, 2, 1376291, 589824, 2, 1310755, 589824, 2, 1245219, 589824, 2, 1179683, 589824, 2, 1114147, 589824, 2, 1048611, 589824, 2, 983075, 589824, 2, 917539, 589824, 2, 852003, 589824, 2, 786467, 589824, 2, 1769506, 589824, 3, 1703970, 589824, 2, 1638434, 589824, 2, 1572898, 589824, 2, 1507362, 589824, 2, 1441826, 589824, 2, 1376290, 589824, 2, 1310754, 589824, 2, 1245218, 327680, 1, 1179682, 524288, 1, 1114146, 524288, 1, 1048610, 524288, 1, 983074, 327680, 2, 917538, 589824, 2, 852002, 589824, 2, 786466, 589824, 2, 1769505, 589824, 3, 1703969, 589824, 2, 1638433, 589824, 2, 1572897, 589824, 2, 1507361, 589824, 2, 1441825, 589824, 2, 1376289, 589824, 2, 1310753, 589824, 2, 1245217, 655360, 0, 983073, 589824, 3, 917537, 589824, 2, 852001, 589824, 2, 786465, 589824, 2, 1769504, 589824, 3, 1703968, 589824, 2, 1638432, 589824, 2, 1572896, 589824, 2, 1507360, 589824, 2, 1441824, 589824, 2, 1376288, 589824, 2, 1310752, 589824, 2, 1245216, 655360, 0, 983072, 589824, 3, 917536, 589824, 2, 852000, 589824, 2, 786464, 589824, 2, 1769503, 589824, 3, 1703967, 589824, 2, 1638431, 589824, 2, 1572895, 589824, 2, 1507359, 327680, 1, 1441823, 524288, 1, 1376287, 524288, 1, 1310751, 524288, 1, 1245215, 524288, 0, 983071, 589824, 3, 917535, 589824, 2, 851999, 589824, 2, 786463, 589824, 2, 1769502, 589824, 3, 1703966, 589824, 2, 1638430, 589824, 2, 1572894, 589824, 2, 1507358, 655360, 0, 983070, 327680, 3, 851998, 524288, 1, 786462, 327680, 2, 1769501, 589824, 3, 1703965, 589824, 2, 1638429, 589824, 2, 1572893, 327680, 1, 1507357, 524288, 0, 983069, 131072, 3, 786461, 589824, 3, 1769500, 589824, 3, 1703964, 589824, 2, 1638428, 327680, 1, 1572892, 524288, 0, 983068, 131072, 3, 786460, 589824, 3, 1769499, 589824, 3, 1703963, 589824, 2, 1638427, 655360, 0, 1376283, 196608, 3, 983067, 131072, 3, 786459, 589824, 3, 1769498, 589824, 3, 1703962, 589824, 2, 1638426, 655360, 0, 1376282, 131072, 2, 983066, 131072, 3, 786458, 589824, 3, 1769497, 589824, 3, 1703961, 589824, 2, 1638425, 393216, 1, 1572889, 720896, 0, 1376281, 65536, 3, 983065, 65536, 3, 786457, 589824, 3, 1769496, 589824, 3, 1703960, 589824, 2, 1638424, 589824, 2, 1572888, 655360, 0, 786456, 589824, 3, 1769495, 589824, 3, 1703959, 589824, 2, 1638423, 589824, 2, 1572887, 393216, 1, 1507351, 720896, 0, 983063, 720896, 3, 917527, 720896, 2, 851991, 720896, 2, 786455, 393216, 2, 1769494, 589824, 3, 1703958, 589824, 2, 1638422, 589824, 2, 1572886, 589824, 2, 1507350, 655360, 0, 983062, 589824, 3, 917526, 589824, 2, 851990, 589824, 2, 786454, 589824, 2, 1769493, 589824, 3, 1703957, 589824, 2, 1638421, 589824, 2, 1572885, 589824, 2, 1507349, 655360, 0, 983061, 589824, 3, 917525, 589824, 2, 851989, 589824, 2, 786453, 589824, 2, 1769492, 589824, 3, 1703956, 589824, 2, 1638420, 589824, 2, 1572884, 589824, 2, 1507348, 393216, 1, 1441812, 720896, 2, 1376276, 720896, 2, 1310740, 720896, 0, 983060, 589824, 3, 917524, 589824, 2, 851988, 589824, 2, 786452, 589824, 2, 1769491, 589824, 3, 1703955, 589824, 2, 1638419, 589824, 2, 1572883, 589824, 2, 1507347, 589824, 2, 1441811, 589824, 2, 1376275, 589824, 2, 1310739, 393216, 1, 1245203, 720896, 0, 1048595, 720896, 3, 983059, 393216, 2, 917523, 589824, 2, 851987, 589824, 2, 786451, 589824, 2, 1769490, 589824, 3, 1703954, 589824, 2, 1638418, 589824, 2, 1572882, 589824, 2, 1507346, 589824, 2, 1441810, 589824, 2, 1376274, 589824, 2, 1310738, 589824, 2, 1245202, 655360, 0, 1048594, 589824, 3, 983058, 589824, 2, 917522, 589824, 2, 851986, 589824, 2, 786450, 589824, 2, 1769489, 589824, 3, 1703953, 589824, 2, 1638417, 589824, 2, 1572881, 589824, 2, 1507345, 589824, 2, 1441809, 589824, 2, 1376273, 589824, 2, 1310737, 589824, 2, 1245201, 655360, 0, 1048593, 589824, 3, 983057, 589824, 2, 917521, 589824, 2, 851985, 589824, 2, 786449, 589824, 2, 1769488, 589824, 3, 1703952, 589824, 2, 1638416, 589824, 2, 1572880, 589824, 2, 1507344, 589824, 2, 1441808, 589824, 2, 1376272, 589824, 2, 1310736, 589824, 2, 1245200, 655360, 0, 1048592, 589824, 3, 983056, 589824, 2, 917520, 589824, 2, 851984, 589824, 2, 786448, 589824, 2, 1769487, 589824, 3, 1703951, 589824, 2, 1638415, 589824, 2, 1572879, 589824, 2, 1507343, 589824, 2, 1441807, 589824, 2, 1376271, 589824, 2, 1310735, 589824, 2, 1245199, 393216, 1, 1179663, 720896, 2, 1114127, 720896, 2, 1048591, 393216, 2, 983055, 589824, 2, 917519, 589824, 2, 851983, 589824, 2, 786447, 589824, 2, 1769486, 589824, 3, 1703950, 589824, 2, 1638414, 589824, 2, 1572878, 589824, 2, 1507342, 589824, 2, 1441806, 589824, 2, 1376270, 589824, 2, 1310734, 589824, 2, 1245198, 589824, 2, 1179662, 589824, 2, 1114126, 589824, 2, 1048590, 589824, 2, 983054, 589824, 2, 917518, 589824, 2, 851982, 589824, 2, 786446, 589824, 2, 1769485, 589824, 3, 1703949, 589824, 2, 1638413, 589824, 2, 1572877, 589824, 2, 1507341, 589824, 2, 1441805, 589824, 2, 1376269, 589824, 2, 1310733, 589824, 2, 1245197, 589824, 2, 1179661, 589824, 2, 1114125, 589824, 2, 1048589, 589824, 2, 983053, 589824, 2, 917517, 589824, 2, 851981, 589824, 2, 786445, 589824, 2, 1769484, 524288, 3, 1703948, 524288, 1, 1638412, 524288, 1, 1572876, 524288, 1, 1507340, 524288, 1, 1441804, 524288, 1, 1376268, 524288, 1, 1310732, 524288, 1, 1245196, 524288, 1, 1179660, 524288, 1, 1114124, 524288, 1, 1048588, 524288, 1, 983052, 524288, 1, 917516, 524288, 1, 851980, 524288, 1, 786444, 524288, 1, 720934, 720896, 2, 655398, 720896, 2, 589862, 720896, 0, 720933, 589824, 2, 655397, 589824, 2, 589861, 655360, 0, 720932, 589824, 2, 655396, 589824, 2, 589860, 655360, 0, 720931, 589824, 2, 655395, 589824, 2, 589859, 655360, 0, 720930, 589824, 2, 655394, 589824, 2, 589858, 655360, 0, 720929, 589824, 2, 655393, 589824, 2, 589857, 655360, 0, 720928, 589824, 2, 655392, 589824, 2, 589856, 655360, 0, 720927, 589824, 2, 655391, 589824, 2, 589855, 655360, 0, 720926, 589824, 2, 655390, 589824, 2, 589854, 655360, 0, 720925, 589824, 2, 655389, 589824, 2, 589853, 655360, 0, 720924, 589824, 2, 655388, 589824, 2, 589852, 655360, 0, 720923, 589824, 2, 655387, 589824, 2, 589851, 655360, 0, 720922, 589824, 2, 655386, 589824, 2, 589850, 655360, 0, 720921, 589824, 2, 655385, 589824, 2, 589849, 655360, 0, 720920, 589824, 2, 655384, 589824, 2, 589848, 655360, 0, 720919, 589824, 2, 655383, 589824, 2, 589847, 655360, 0, 720918, 589824, 2, 655382, 589824, 2, 589846, 655360, 0, 720917, 589824, 2, 655381, 589824, 2, 589845, 655360, 0, 720916, 589824, 2, 655380, 589824, 2, 589844, 655360, 0, 720915, 589824, 2, 655379, 589824, 2, 589843, 655360, 0, 720914, 589824, 2, 655378, 589824, 2, 589842, 655360, 0, 720913, 589824, 2, 655377, 589824, 2, 589841, 655360, 0, 720912, 589824, 2, 655376, 589824, 2, 589840, 655360, 0, 720911, 589824, 2, 655375, 589824, 2, 589839, 655360, 0, 720910, 589824, 2, 655374, 589824, 2, 589838, 655360, 0, 720909, 589824, 2, 655373, 589824, 2, 589837, 655360, 0, 720908, 524288, 1, 655372, 524288, 1, 589836, 524288, 0, 1114128, 131072, 4, 1114129, 131072, 4, 1114130, 131072, 4, 1114131, 196608, 4, 1048609, 131072, 4, 1048608, 131072, 4, 1048607, 131072, 4, 1048606, 131072, 4, 1048605, 131072, 4, 1048604, 131072, 4, 1048603, 131072, 4, 1048602, 131072, 4, 1048601, 65536, 4, 851993, 131072, 4, 851994, 131072, 4, 851995, 131072, 4, 851996, 131072, 4, 851997, 131072, 4, 917534, 524288, 1, 1048596, 131072, 4, 1048597, 131072, 4, 1048598, 131072, 4, 1048599, 196608, 4, 851992, 131072, 4, 1441817, 65536, 4, 1441818, 131072, 4, 1441819, 196608, 4, 1179671, 0, 3, 1245207, 262144, 4, 1310746, 0, 0, 1310742, 0, 4, 1245206, 0, 4, 1179670, 0, 4, 1114134, 0, 4, 1114133, 0, 4, 1114132, 0, 4, 1179668, 0, 4, 1179667, 0, 4, 1179666, 0, 4, 1179665, 0, 4, 1179664, 0, 4, 1245204, 0, 4, 1245205, 0, 4, 1179669, 0, 4, 1310741, 0, 4, 1376277, 0, 4, 1441813, 0, 4, 1441814, 0, 4, 1376278, 0, 4, 1376279, 0, 4, 1310743, 0, 4, 1310744, 0, 4, 1245208, 0, 4, 1179672, 0, 4, 1114136, 0, 4, 1048600, 0, 4, 983064, 0, 4, 917528, 0, 4, 917529, 0, 4, 917530, 0, 4, 917531, 0, 4, 917532, 0, 4, 917533, 0, 4, 1114135, 0, 4, 1114137, 0, 4, 1179673, 0, 4, 1245209, 0, 4, 1310745, 0, 4, 1245210, 0, 4, 1179674, 0, 4, 1114138, 0, 4, 1114139, 0, 4, 1179675, 0, 4, 1245211, 0, 4, 1310747, 0, 4, 1310748, 0, 4, 1245212, 0, 4, 1179676, 0, 4, 1114140, 0, 4, 1114141, 0, 4, 1179677, 0, 4, 1245213, 0, 4, 1310749, 0, 4, 1376285, 0, 4, 1376284, 0, 4, 1441820, 0, 4, 1507356, 0, 4, 1507355, 0, 4, 1507354, 0, 4, 1507353, 0, 4, 1507352, 0, 4, 1441816, 0, 4, 1376280, 0, 4, 1441815, 0, 4, 1572890, 0, 4, 1572891, 0, 4, 1441821, 0, 4, 1441822, 0, 4, 1376286, 0, 4, 1310750, 0, 4, 1245214, 0, 4, 1179678, 0, 4, 1114142, 0, 4, 1114143, 0, 4, 1179679, 0, 4, 1179680, 0, 4, 1114144, 0, 4, 1114145, 0, 4, 1179681, 0, 4)
+layer_1/name = "floor"
+layer_1/z_index = -10
+layer_1/tile_data = PackedInt32Array(65541, 0, 4, 131077, 0, 4, 196613, 0, 4, 262149, 0, 4, 262150, 0, 4, 196614, 0, 4, 131078, 0, 4, 65542, 0, 4, 6, 0, 4, 5, 0, 4, 327685, 0, 4, 327686, 0, 4, 7, 0, 4, 65543, 0, 4, 131079, 0, 4, 196615, 0, 4, 262151, 0, 4, 327687, 0, 4, 327688, 0, 4, 262152, 0, 4, 196616, 0, 4, 8, 0, 4, 65544, 0, 4, 131080, 0, 4, 327689, 0, 4, 262153, 0, 4, 262154, 0, 4, 327690, 0, 4, 327691, 0, 4, 262155, 0, 4, 196619, 0, 4, 196618, 0, 4, 196617, 0, 4)
+layer_2/name = "middle"
+layer_2/y_sort_enabled = true
+layer_2/tile_data = PackedInt32Array(-65531, 131072, 4, -65530, 131072, 4, -65529, 131072, 4, -65528, 131072, 4, 131081, 65536, 4, 131082, 131072, 4, 131083, 131072, 4, -131067, 589824, 3, -131066, 589824, 3, -131065, 589824, 3, -131064, 589824, 3, 65547, 589824, 3, 65546, 589824, 3, 65545, 524288, 3)
+layer_3/name = "top"
+layer_3/z_index = 10
+layer_3/tile_data = PackedInt32Array(393221, 655360, 0, 393222, 655360, 0, 393223, 655360, 0, 393224, 655360, 0, 327684, 720896, 2, 262148, 720896, 2, 196612, 720896, 2, 131076, 720896, 2, 65540, 720896, 2, 4, 720896, 2, 9, 524288, 1, 393220, 393216, 1, -131063, 327680, 2, -131068, 393216, 2, -65527, 524288, 1, -65532, 720896, 2, 393225, 655360, 0, 393226, 655360, 0, 393227, 655360, 0, 65548, 327680, 2, 393228, 327680, 1, 327692, 524288, 1, 262156, 524288, 1, 196620, 524288, 1, 131084, 524288, 1)
+
+[node name="NavigationRegion2D" type="NavigationRegion2D" parent="TileMap2"]
+
+[node name="NormalLayer" type="Node2D" parent="TileMap2"]
+z_index = -1
+y_sort_enabled = true
+
+[node name="Role0001" parent="TileMap2/NormalLayer" node_paths=PackedStringArray("HurtArea", "HurtCollision", "InteractiveArea", "InteractiveCollision", "TipRoot", "TipSprite", "AnimationPlayer", "MountPoint", "BackMountPoint", "MeleeAttackArea", "MeleeAttackCollision", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("3_bo13a")]
+position = Vector2(125.5, 64)
+HurtArea = NodePath("../../YSortLayer/Role0001/HurtArea")
+HurtCollision = NodePath("../../YSortLayer/Role0001/HurtArea/HurtCollision")
+InteractiveArea = NodePath("../../YSortLayer/Role0001/InteractiveArea")
+InteractiveCollision = NodePath("../../YSortLayer/Role0001/InteractiveArea/InteractiveCollision")
+TipRoot = NodePath("../../YSortLayer/Role0001/TipRoot")
+TipSprite = NodePath("../../YSortLayer/Role0001/TipRoot/TipSprite")
+AnimationPlayer = NodePath("../../YSortLayer/Role0001/AnimationPlayer")
+MountPoint = NodePath("../../YSortLayer/Role0001/MountPoint")
+BackMountPoint = NodePath("../../YSortLayer/Role0001/BackMountPoint")
+MeleeAttackArea = NodePath("../../YSortLayer/Role0001/MountPoint/MeleeAttackArea")
+MeleeAttackCollision = NodePath("../../YSortLayer/Role0001/MountPoint/MeleeAttackArea/MeleeAttackCollision")
+ShadowSprite = NodePath("../../YSortLayer/Role0001/ShadowSprite")
+AnimatedSprite = NodePath("../../YSortLayer/Role0001/AnimatedSprite")
+Collision = NodePath("../../YSortLayer/Role0001/Collision")
+metadata/_edit_group_ = true
+
+[node name="AnimatedSprite" parent="TileMap2/NormalLayer/Role0001" index="2"]
+material = SubResource("ShaderMaterial_7va3f")
+animation = &"idle"
+
+[node name="Collision" parent="TileMap2/NormalLayer/Role0001" index="3"]
+visible = false
+
+[node name="HurtArea" parent="TileMap2/NormalLayer/Role0001" index="4"]
+visible = false
+
+[node name="InteractiveArea" parent="TileMap2/NormalLayer/Role0001" index="5"]
+visible = false
+
+[node name="YSortLayer" type="Node2D" parent="TileMap2"]
+y_sort_enabled = true
+
+[node name="Role0001" parent="TileMap2/YSortLayer" instance=ExtResource("3_bo13a")]
+position = Vector2(145, 55)
+metadata/_edit_group_ = true
+
+[node name="AnimatedSprite" parent="TileMap2/YSortLayer/Role0001" index="2"]
+material = SubResource("ShaderMaterial_7va3f")
+animation = &"idle"
+
+[node name="Collision" parent="TileMap2/YSortLayer/Role0001" index="3"]
+visible = false
+
+[node name="HurtArea" parent="TileMap2/YSortLayer/Role0001" index="4"]
+visible = false
+
+[node name="InteractiveArea" parent="TileMap2/YSortLayer/Role0001" index="5"]
+visible = false
+
+[node name="Sprite2D" type="Sprite2D" parent="TileMap2/YSortLayer"]
+z_index = 1
+position = Vector2(103, 32.5)
+texture = ExtResource("5_rv0km")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+material = SubResource("ShaderMaterial_fwac7")
+position = Vector2(420, 252)
+scale = Vector2(3.09375, 2.65625)
+texture = ExtResource("7_34lsg")
+
+[editable path="TileMap2/NormalLayer/Role0001"]
+[editable path="TileMap2/YSortLayer/Role0001"]
diff --git a/DungeonShooting_Godot/scene/test/TestNewTileMap.tscn b/DungeonShooting_Godot/scene/test/TestNewTileMap.tscn
index 7d954b0..9c083c5 100644
--- a/DungeonShooting_Godot/scene/test/TestNewTileMap.tscn
+++ b/DungeonShooting_Godot/scene/test/TestNewTileMap.tscn
@@ -1,6 +1,5 @@
[gd_scene load_steps=3 format=3 uid="uid://dr72ij0rwlafo"]
-[ext_resource type="TileSet" uid="uid://b00g22o1cqhe8" path="res://resource/map/tileSet/map1/TileSet1.tres" id="1_oisp3"]
@@ -10,7 +9,6 @@
[node name="TileMap" type="TileMap" parent="."]
y_sort_enabled = true
-tile_set = ExtResource("1_oisp3")
format = 2
layer_0/name = "layer1"
layer_0/y_sort_enabled = true
diff --git a/DungeonShooting_Godot/scene/test/TestPerfectPixelScene.tscn b/DungeonShooting_Godot/scene/test/TestPerfectPixelScene.tscn
index e8bcfc6..1619299 100644
--- a/DungeonShooting_Godot/scene/test/TestPerfectPixelScene.tscn
+++ b/DungeonShooting_Godot/scene/test/TestPerfectPixelScene.tscn
@@ -1,10 +1,10 @@
[gd_scene load_steps=6 format=3 uid="uid://b3ybffxcq0kkb"]
[ext_resource type="Script" path="res://src/test/TestPerfectPixelScene.cs" id="1_u6ihh"]
-[ext_resource type="TileSet" uid="uid://b00g22o1cqhe8" path="res://resource/map/tileSet/map1/TileSet1.tres" id="1_wc2ux"]
[ext_resource type="Texture2D" uid="uid://dto03bc2qbhnj" path="res://resource/sprite/shell/Shell0001.png" id="3_kc4l0"]
[ext_resource type="SpriteFrames" uid="uid://n11thtali6es" path="res://resource/spriteFrames/role/Role0001.tres" id="4_6nerw"]
+
[sub_resource type="RectangleShape2D" id="RectangleShape2D_tmsub"]
[node name="TestPerfectPixelScene" type="Node2D" node_paths=PackedStringArray("Player", "FpsLabel", "Camera2D")]
@@ -17,7 +17,6 @@
Type = 2
[node name="TileMap" type="TileMap" parent="."]
-tile_set = ExtResource("1_wc2ux")
format = 2
layer_0/tile_data = PackedInt32Array(1900589, 0, 8, 1835053, 0, 8, 1769517, 0, 8, 1703981, 0, 8, 1638445, 0, 8, 1572909, 0, 8, 1507373, 0, 8, 1441837, 0, 8, 1376301, 0, 8, 1310765, 0, 8, 1245229, 0, 8, 1179693, 0, 8, 1114157, 0, 8, 1048621, 0, 8, 983085, 0, 8, 917549, 0, 8, 852013, 0, 8, 786477, 0, 8, 720941, 0, 8, 655405, 0, 8, 589869, 0, 8, 524333, 0, 8, 458797, 0, 8, 393261, 0, 8, 327725, 0, 8, 262189, 0, 8, 196653, 0, 8, 131117, 0, 8, 65581, 0, 8, 45, 0, 8, -65491, 0, 8, -131027, 0, 8, -196563, 0, 8, -262099, 0, 8, 1900588, 0, 8, 1835052, 0, 8, 1769516, 0, 8, 1703980, 0, 8, 1638444, 0, 8, 1572908, 0, 8, 1507372, 0, 8, 1441836, 0, 8, 1376300, 0, 8, 1310764, 0, 8, 1245228, 0, 8, 1179692, 0, 8, 1114156, 0, 8, 1048620, 0, 8, 983084, 0, 8, 917548, 0, 8, 852012, 0, 8, 786476, 0, 8, 720940, 0, 8, 655404, 0, 8, 589868, 0, 8, 524332, 0, 8, 458796, 0, 8, 393260, 0, 8, 327724, 0, 8, 262188, 0, 8, 196652, 0, 8, 131116, 0, 8, 65580, 0, 8, 44, 0, 8, -65492, 0, 8, -131028, 0, 8, -196564, 0, 8, -262100, 0, 8, 1900587, 0, 8, 1835051, 0, 8, 1769515, 0, 8, 1703979, 0, 8, 1638443, 0, 8, 1572907, 0, 8, 1507371, 0, 8, 1441835, 0, 8, 1376299, 0, 8, 1310763, 0, 8, 1245227, 0, 8, 1179691, 0, 8, 1114155, 0, 8, 1048619, 0, 8, 983083, 0, 8, 917547, 0, 8, 852011, 0, 8, 786475, 0, 8, 720939, 0, 8, 655403, 0, 8, 589867, 0, 8, 524331, 0, 8, 458795, 0, 8, 393259, 0, 8, 327723, 0, 8, 262187, 0, 8, 196651, 0, 8, 131115, 0, 8, 65579, 0, 8, 43, 0, 8, -65493, 0, 8, -131029, 0, 8, -196565, 0, 8, -262101, 0, 8, 1900586, 0, 8, 1835050, 0, 8, 1769514, 0, 8, 1703978, 0, 8, 1638442, 0, 8, 1572906, 0, 8, 1507370, 0, 8, 1441834, 0, 8, 1376298, 0, 8, 1310762, 0, 8, 1245226, 0, 8, 1179690, 0, 8, 1114154, 0, 8, 1048618, 0, 8, 983082, 0, 8, 917546, 0, 8, 852010, 0, 8, 786474, 0, 8, 720938, 0, 8, 655402, 0, 8, 589866, 0, 8, 524330, 0, 8, 458794, 0, 8, 393258, 0, 8, 327722, 0, 8, 262186, 0, 8, 196650, 0, 8, 131114, 0, 8, 65578, 0, 8, 42, 0, 8, -65494, 0, 8, -131030, 0, 8, -196566, 0, 8, -262102, 0, 8, 1900585, 0, 8, 1835049, 0, 8, 1769513, 0, 8, 1703977, 0, 8, 1638441, 0, 8, 1572905, 0, 8, 1507369, 0, 8, 1441833, 0, 8, 1376297, 0, 8, 1310761, 0, 8, 1245225, 0, 8, 1179689, 0, 8, 1114153, 0, 8, 1048617, 0, 8, 983081, 0, 8, 917545, 0, 8, 852009, 0, 8, 786473, 0, 8, 720937, 0, 8, 655401, 0, 8, 589865, 0, 8, 524329, 0, 8, 458793, 0, 8, 393257, 0, 8, 327721, 0, 8, 262185, 0, 8, 196649, 0, 8, 131113, 0, 8, 65577, 0, 8, 41, 0, 8, -65495, 0, 8, -131031, 0, 8, -196567, 0, 8, -262103, 0, 8, 1900584, 0, 8, 1835048, 0, 8, 1769512, 0, 8, 1703976, 0, 8, 1638440, 0, 8, 1572904, 0, 8, 1507368, 0, 8, 1441832, 0, 8, 1376296, 0, 8, 1310760, 0, 8, 1245224, 0, 8, 1179688, 0, 8, 1114152, 0, 8, 1048616, 0, 8, 983080, 0, 8, 917544, 0, 8, 852008, 0, 8, 786472, 0, 8, 720936, 0, 8, 655400, 0, 8, 589864, 0, 8, 524328, 0, 8, 458792, 0, 8, 393256, 0, 8, 327720, 0, 8, 262184, 0, 8, 196648, 0, 8, 131112, 0, 8, 65576, 0, 8, 40, 0, 8, -65496, 0, 8, -131032, 0, 8, -196568, 0, 8, -262104, 0, 8, 1900583, 0, 8, 1835047, 0, 8, 1769511, 0, 8, 1703975, 0, 8, 1638439, 0, 8, 1572903, 0, 8, 1507367, 0, 8, 1441831, 0, 8, 1376295, 0, 8, 1310759, 0, 8, 1245223, 0, 8, 1179687, 0, 8, 1114151, 0, 8, 1048615, 0, 8, 983079, 0, 8, 917543, 0, 8, 852007, 0, 8, 786471, 0, 8, 720935, 0, 8, 655399, 0, 8, 589863, 0, 8, 524327, 0, 8, 458791, 0, 8, 393255, 0, 8, 327719, 0, 8, 262183, 0, 8, 196647, 0, 8, 131111, 0, 8, 65575, 0, 8, 39, 0, 8, -65497, 0, 8, -131033, 0, 8, -196569, 0, 8, -262105, 0, 8, 1900582, 0, 8, 1835046, 0, 8, 1769510, 0, 8, 1703974, 0, 8, 1638438, 0, 8, 1572902, 0, 8, 1507366, 0, 8, 1441830, 0, 8, 1376294, 0, 8, 1310758, 0, 8, 1245222, 0, 8, 1179686, 0, 8, 1114150, 0, 8, 1048614, 0, 8, 983078, 0, 8, 917542, 0, 8, 852006, 0, 8, 786470, 0, 8, 720934, 0, 8, 655398, 0, 8, 589862, 0, 8, 524326, 0, 8, 458790, 0, 8, 393254, 0, 8, 327718, 0, 8, 262182, 0, 8, 196646, 0, 8, 131110, 0, 8, 65574, 0, 8, 38, 0, 8, -65498, 0, 8, -131034, 0, 8, -196570, 0, 8, -262106, 0, 8, 1900581, 0, 8, 1835045, 0, 8, 1769509, 0, 8, 1703973, 0, 8, 1638437, 0, 8, 1572901, 0, 8, 1507365, 0, 8, 1441829, 0, 8, 1376293, 0, 8, 1310757, 0, 8, 1245221, 0, 8, 1179685, 0, 8, 1114149, 0, 8, 1048613, 0, 8, 983077, 0, 8, 917541, 0, 8, 852005, 0, 8, 786469, 0, 8, 720933, 0, 8, 655397, 0, 8, 589861, 0, 8, 524325, 0, 8, 458789, 0, 8, 393253, 0, 8, 327717, 0, 8, 262181, 0, 8, 196645, 0, 8, 131109, 0, 8, 65573, 0, 8, 37, 0, 8, -65499, 0, 8, -131035, 0, 8, -196571, 0, 8, -262107, 0, 8, 1900580, 0, 8, 1835044, 0, 8, 1769508, 0, 8, 1703972, 0, 8, 1638436, 0, 8, 1572900, 0, 8, 1507364, 0, 8, 1441828, 0, 8, 1376292, 0, 8, 1310756, 0, 8, 1245220, 0, 8, 1179684, 0, 8, 1114148, 0, 8, 1048612, 0, 8, 983076, 0, 8, 917540, 0, 8, 852004, 0, 8, 786468, 0, 8, 720932, 0, 8, 655396, 0, 8, 589860, 0, 8, 524324, 0, 8, 458788, 0, 8, 393252, 0, 8, 327716, 0, 8, 262180, 0, 8, 196644, 0, 8, 131108, 0, 8, 65572, 0, 8, 36, 0, 8, -65500, 0, 8, -131036, 0, 8, -196572, 0, 8, -262108, 0, 8, 1900579, 0, 8, 1835043, 0, 8, 1769507, 0, 8, 1703971, 0, 8, 1638435, 0, 8, 1572899, 0, 8, 1507363, 0, 8, 1441827, 0, 8, 1376291, 0, 8, 1310755, 0, 8, 1245219, 0, 8, 1179683, 0, 8, 1114147, 0, 8, 1048611, 0, 8, 983075, 0, 8, 917539, 0, 8, 852003, 0, 8, 786467, 0, 8, 720931, 0, 8, 655395, 0, 8, 589859, 0, 8, 524323, 0, 8, 458787, 0, 8, 393251, 0, 8, 327715, 0, 8, 262179, 0, 8, 196643, 0, 8, 131107, 0, 8, 65571, 0, 8, 35, 0, 8, -65501, 0, 8, -131037, 0, 8, -196573, 0, 8, -262109, 0, 8, 1900578, 0, 8, 1835042, 0, 8, 1769506, 0, 8, 1703970, 0, 8, 1638434, 0, 8, 1572898, 0, 8, 1507362, 0, 8, 1441826, 0, 8, 1376290, 0, 8, 1310754, 0, 8, 1245218, 0, 8, 1179682, 0, 8, 1114146, 0, 8, 1048610, 0, 8, 983074, 0, 8, 917538, 0, 8, 852002, 0, 8, 786466, 0, 8, 720930, 0, 8, 655394, 0, 8, 589858, 0, 8, 524322, 0, 8, 458786, 0, 8, 393250, 0, 8, 327714, 0, 8, 262178, 0, 8, 196642, 0, 8, 131106, 0, 8, 65570, 0, 8, 34, 0, 8, -65502, 0, 8, -131038, 0, 8, -196574, 0, 8, -262110, 0, 8, 1900577, 0, 8, 1835041, 0, 8, 1769505, 0, 8, 1703969, 0, 8, 1638433, 0, 8, 1572897, 0, 8, 1507361, 0, 8, 1441825, 0, 8, 1376289, 0, 8, 1310753, 0, 8, 1245217, 0, 8, 1179681, 0, 8, 1114145, 0, 8, 1048609, 0, 8, 983073, 0, 8, 917537, 0, 8, 852001, 0, 8, 786465, 0, 8, 720929, 0, 8, 655393, 0, 8, 589857, 0, 8, 524321, 0, 8, 458785, 0, 8, 393249, 0, 8, 327713, 0, 8, 262177, 0, 8, 196641, 0, 8, 131105, 0, 8, 65569, 0, 8, 33, 0, 8, -65503, 0, 8, -131039, 0, 8, -196575, 0, 8, -262111, 0, 8, 1900576, 0, 8, 1835040, 0, 8, 1769504, 0, 8, 1703968, 0, 8, 1638432, 0, 8, 1572896, 0, 8, 1507360, 0, 8, 1441824, 0, 8, 1376288, 0, 8, 1310752, 0, 8, 1245216, 0, 8, 1179680, 0, 8, 1114144, 0, 8, 1048608, 0, 8, 983072, 0, 8, 917536, 0, 8, 852000, 0, 8, 786464, 0, 8, 720928, 0, 8, 655392, 0, 8, 589856, 0, 8, 524320, 0, 8, 458784, 0, 8, 393248, 0, 8, 327712, 0, 8, 262176, 0, 8, 196640, 0, 8, 131104, 0, 8, 65568, 0, 8, 32, 0, 8, -65504, 0, 8, -131040, 0, 8, -196576, 0, 8, -262112, 0, 8, 1900575, 0, 8, 1835039, 0, 8, 1769503, 0, 8, 1703967, 0, 8, 1638431, 0, 8, 1572895, 0, 8, 1507359, 0, 8, 1441823, 0, 8, 1376287, 0, 8, 1310751, 0, 8, 1245215, 0, 8, 1179679, 0, 8, 1114143, 0, 8, 1048607, 0, 8, 983071, 0, 8, 917535, 0, 8, 851999, 0, 8, 786463, 0, 8, 720927, 0, 8, 655391, 0, 8, 589855, 0, 8, 524319, 0, 8, 458783, 0, 8, 393247, 0, 8, 327711, 0, 8, 262175, 0, 8, 196639, 0, 8, 131103, 0, 8, 65567, 0, 8, 31, 0, 8, -65505, 0, 8, -131041, 0, 8, -196577, 0, 8, -262113, 0, 8, 1900574, 0, 8, 1835038, 0, 8, 1769502, 0, 8, 1703966, 0, 8, 1638430, 0, 8, 1572894, 0, 8, 1507358, 0, 8, 1441822, 0, 8, 1376286, 0, 8, 1310750, 0, 8, 1245214, 0, 8, 1179678, 0, 8, 1114142, 0, 8, 1048606, 0, 8, 983070, 0, 8, 917534, 0, 8, 851998, 0, 8, 786462, 0, 8, 720926, 0, 8, 655390, 0, 8, 589854, 0, 8, 524318, 0, 8, 458782, 0, 8, 393246, 0, 8, 327710, 0, 8, 262174, 0, 8, 196638, 0, 8, 131102, 0, 8, 65566, 0, 8, 30, 0, 8, -65506, 0, 8, -131042, 0, 8, -196578, 0, 8, -262114, 0, 8, 1900573, 0, 8, 1835037, 0, 8, 1769501, 0, 8, 1703965, 0, 8, 1638429, 0, 8, 1572893, 0, 8, 1507357, 0, 8, 1441821, 0, 8, 1376285, 0, 8, 1310749, 0, 8, 1245213, 0, 8, 1179677, 0, 8, 1114141, 0, 8, 1048605, 0, 8, 983069, 0, 8, 917533, 0, 8, 851997, 0, 8, 786461, 0, 8, 720925, 0, 8, 655389, 0, 8, 589853, 0, 8, 524317, 0, 8, 458781, 0, 8, 393245, 0, 8, 327709, 0, 8, 262173, 0, 8, 196637, 0, 8, 131101, 0, 8, 65565, 0, 8, 29, 0, 8, -65507, 0, 8, -131043, 0, 8, -196579, 0, 8, -262115, 0, 8, 1900572, 0, 8, 1835036, 0, 8, 1769500, 0, 8, 1703964, 0, 8, 1638428, 0, 8, 1572892, 0, 8, 1507356, 0, 8, 1441820, 0, 8, 1376284, 0, 8, 1310748, 0, 8, 1245212, 0, 8, 1179676, 0, 8, 1114140, 0, 8, 1048604, 0, 8, 983068, 0, 8, 917532, 0, 8, 851996, 0, 8, 786460, 0, 8, 720924, 0, 8, 655388, 0, 8, 589852, 0, 8, 524316, 0, 8, 458780, 0, 8, 393244, 0, 8, 327708, 0, 8, 262172, 0, 8, 196636, 0, 8, 131100, 0, 8, 65564, 0, 8, 28, 0, 8, -65508, 0, 8, -131044, 0, 8, -196580, 0, 8, -262116, 0, 8, 1900571, 0, 8, 1835035, 0, 8, 1769499, 0, 8, 1703963, 0, 8, 1638427, 0, 8, 1572891, 0, 8, 1507355, 0, 8, 1441819, 0, 8, 1376283, 0, 8, 1310747, 0, 8, 1245211, 0, 8, 1179675, 0, 8, 1114139, 0, 8, 1048603, 0, 8, 983067, 0, 8, 917531, 0, 8, 851995, 0, 8, 786459, 0, 8, 720923, 0, 8, 655387, 0, 8, 589851, 0, 8, 524315, 0, 8, 458779, 0, 8, 393243, 0, 8, 327707, 0, 8, 262171, 0, 8, 196635, 0, 8, 131099, 0, 8, 65563, 0, 8, 27, 0, 8, -65509, 0, 8, -131045, 0, 8, -196581, 0, 8, -262117, 0, 8, 1900570, 0, 8, 1835034, 0, 8, 1769498, 0, 8, 1703962, 0, 8, 1638426, 0, 8, 1572890, 0, 8, 1507354, 0, 8, 1441818, 0, 8, 1376282, 0, 8, 1310746, 0, 8, 1245210, 0, 8, 1179674, 0, 8, 1114138, 0, 8, 1048602, 0, 8, 983066, 0, 8, 917530, 0, 8, 851994, 0, 8, 786458, 0, 8, 720922, 0, 8, 655386, 0, 8, 589850, 0, 8, 524314, 0, 8, 458778, 0, 8, 393242, 0, 8, 327706, 0, 8, 262170, 0, 8, 196634, 0, 8, 131098, 0, 8, 65562, 0, 8, 26, 0, 8, -65510, 0, 8, -131046, 0, 8, -196582, 0, 8, -262118, 0, 8, 1900569, 0, 8, 1835033, 0, 8, 1769497, 0, 8, 1703961, 0, 8, 1638425, 0, 8, 1572889, 0, 8, 1507353, 0, 8, 1441817, 0, 8, 1376281, 0, 8, 1310745, 0, 8, 1245209, 0, 8, 1179673, 0, 8, 1114137, 0, 8, 1048601, 0, 8, 983065, 0, 8, 917529, 0, 8, 851993, 0, 8, 786457, 0, 8, 720921, 0, 8, 655385, 0, 8, 589849, 0, 8, 524313, 0, 8, 458777, 0, 8, 393241, 0, 8, 327705, 0, 8, 262169, 0, 8, 196633, 0, 8, 131097, 0, 8, 65561, 0, 8, 25, 0, 8, -65511, 0, 8, -131047, 0, 8, -196583, 0, 8, -262119, 0, 8, 1900568, 0, 8, 1835032, 0, 8, 1769496, 0, 8, 1703960, 0, 8, 1638424, 0, 8, 1572888, 0, 8, 1507352, 0, 8, 1441816, 0, 8, 1376280, 0, 8, 1310744, 0, 8, 1245208, 0, 8, 1179672, 0, 8, 1114136, 0, 8, 1048600, 0, 8, 983064, 0, 8, 917528, 0, 8, 851992, 0, 8, 786456, 0, 8, 720920, 0, 8, 655384, 0, 8, 589848, 0, 8, 524312, 0, 8, 458776, 0, 8, 393240, 0, 8, 327704, 0, 8, 262168, 0, 8, 196632, 0, 8, 131096, 0, 8, 65560, 0, 8, 24, 0, 8, -65512, 0, 8, -131048, 0, 8, -196584, 0, 8, -262120, 0, 8, 1900567, 0, 8, 1835031, 0, 8, 1769495, 0, 8, 1703959, 0, 8, 1638423, 0, 8, 1572887, 0, 8, 1507351, 0, 8, 1441815, 0, 8, 1376279, 0, 8, 1310743, 0, 8, 1245207, 0, 8, 1179671, 0, 8, 1114135, 0, 8, 1048599, 0, 8, 983063, 0, 8, 917527, 0, 8, 851991, 0, 8, 786455, 0, 8, 720919, 0, 8, 655383, 0, 8, 589847, 0, 8, 524311, 0, 8, 458775, 0, 8, 393239, 0, 8, 327703, 0, 8, 262167, 0, 8, 196631, 0, 8, 131095, 0, 8, 65559, 0, 8, 23, 0, 8, -65513, 0, 8, -131049, 0, 8, -196585, 0, 8, -262121, 0, 8, 1900566, 0, 8, 1835030, 0, 8, 1769494, 0, 8, 1703958, 0, 8, 1638422, 0, 8, 1572886, 0, 8, 1507350, 0, 8, 1441814, 0, 8, 1376278, 0, 8, 1310742, 0, 8, 1245206, 0, 8, 1179670, 0, 8, 1114134, 0, 8, 1048598, 0, 8, 983062, 0, 8, 917526, 0, 8, 851990, 0, 8, 786454, 0, 8, 720918, 0, 8, 655382, 0, 8, 589846, 0, 8, 524310, 0, 8, 458774, 0, 8, 393238, 0, 8, 327702, 0, 8, 262166, 0, 8, 196630, 0, 8, 131094, 0, 8, 65558, 0, 8, 22, 0, 8, -65514, 0, 8, -131050, 0, 8, -196586, 0, 8, -262122, 0, 8, 1900565, 0, 8, 1835029, 0, 8, 1769493, 0, 8, 1703957, 0, 8, 1638421, 0, 8, 1572885, 0, 8, 1507349, 0, 8, 1441813, 0, 8, 1376277, 0, 8, 1310741, 0, 8, 1245205, 0, 8, 1179669, 0, 8, 1114133, 0, 8, 1048597, 0, 8, 983061, 0, 8, 917525, 0, 8, 851989, 0, 8, 786453, 0, 8, 720917, 0, 8, 655381, 0, 8, 589845, 0, 8, 524309, 0, 8, 458773, 0, 8, 393237, 0, 8, 327701, 0, 8, 262165, 0, 8, 196629, 0, 8, 131093, 0, 8, 65557, 0, 8, 21, 0, 8, -65515, 0, 8, -131051, 0, 8, -196587, 0, 8, -262123, 0, 8, 1900564, 0, 8, 1835028, 0, 8, 1769492, 0, 8, 1703956, 0, 8, 1638420, 0, 8, 1572884, 0, 8, 1507348, 0, 8, 1441812, 0, 8, 1376276, 0, 8, 1310740, 0, 8, 1245204, 0, 8, 1179668, 0, 8, 1114132, 0, 8, 1048596, 0, 8, 983060, 0, 8, 917524, 0, 8, 851988, 0, 8, 786452, 0, 8, 720916, 0, 8, 655380, 0, 8, 589844, 0, 8, 524308, 0, 8, 458772, 0, 8, 393236, 0, 8, 327700, 0, 8, 262164, 0, 8, 196628, 0, 8, 131092, 0, 8, 65556, 0, 8, 20, 0, 8, -65516, 0, 8, -131052, 0, 8, -196588, 0, 8, -262124, 0, 8, 1900563, 0, 8, 1835027, 0, 8, 1769491, 0, 8, 1703955, 0, 8, 1638419, 0, 8, 1572883, 0, 8, 1507347, 0, 8, 1441811, 0, 8, 1376275, 0, 8, 1310739, 0, 8, 1245203, 0, 8, 1179667, 0, 8, 1114131, 0, 8, 1048595, 0, 8, 983059, 0, 8, 917523, 0, 8, 851987, 0, 8, 786451, 0, 8, 720915, 0, 8, 655379, 0, 8, 589843, 0, 8, 524307, 0, 8, 458771, 0, 8, 393235, 0, 8, 327699, 0, 8, 262163, 0, 8, 196627, 0, 8, 131091, 0, 8, 65555, 0, 8, 19, 0, 8, -65517, 0, 8, -131053, 0, 8, -196589, 0, 8, -262125, 0, 8, 1900562, 0, 8, 1835026, 0, 8, 1769490, 0, 8, 1703954, 0, 8, 1638418, 0, 8, 1572882, 0, 8, 1507346, 0, 8, 1441810, 0, 8, 1376274, 0, 8, 1310738, 0, 8, 1245202, 0, 8, 1179666, 0, 8, 1114130, 0, 8, 1048594, 0, 8, 983058, 0, 8, 917522, 0, 8, 851986, 0, 8, 786450, 0, 8, 720914, 0, 8, 655378, 0, 8, 589842, 0, 8, 524306, 0, 8, 458770, 0, 8, 393234, 0, 8, 327698, 0, 8, 262162, 0, 8, 196626, 0, 8, 131090, 0, 8, 65554, 0, 8, 18, 0, 8, -65518, 0, 8, -131054, 0, 8, -196590, 0, 8, -262126, 0, 8, 1900561, 0, 8, 1835025, 0, 8, 1769489, 0, 8, 1703953, 0, 8, 1638417, 0, 8, 1572881, 0, 8, 1507345, 0, 8, 1441809, 0, 8, 1376273, 0, 8, 1310737, 0, 8, 1245201, 0, 8, 1179665, 0, 8, 1114129, 0, 8, 1048593, 0, 8, 983057, 0, 8, 917521, 0, 8, 851985, 0, 8, 786449, 0, 8, 720913, 0, 8, 655377, 0, 8, 589841, 0, 8, 524305, 0, 8, 458769, 0, 8, 393233, 0, 8, 327697, 0, 8, 262161, 0, 8, 196625, 0, 8, 131089, 0, 8, 65553, 0, 8, 17, 0, 8, -65519, 0, 8, -131055, 0, 8, -196591, 0, 8, -262127, 0, 8, 1900560, 0, 8, 1835024, 0, 8, 1769488, 0, 8, 1703952, 0, 8, 1638416, 0, 8, 1572880, 0, 8, 1507344, 0, 8, 1441808, 0, 8, 1376272, 0, 8, 1310736, 0, 8, 1245200, 0, 8, 1179664, 0, 8, 1114128, 0, 8, 1048592, 0, 8, 983056, 0, 8, 917520, 0, 8, 851984, 0, 8, 786448, 0, 8, 720912, 0, 8, 655376, 0, 8, 589840, 0, 8, 524304, 0, 8, 458768, 0, 8, 393232, 0, 8, 327696, 0, 8, 262160, 0, 8, 196624, 0, 8, 131088, 0, 8, 65552, 0, 8, 16, 0, 8, -65520, 0, 8, -131056, 0, 8, -196592, 0, 8, -262128, 0, 8, 1900559, 0, 8, 1835023, 0, 8, 1769487, 0, 8, 1703951, 0, 8, 1638415, 0, 8, 1572879, 0, 8, 1507343, 0, 8, 1441807, 0, 8, 1376271, 0, 8, 1310735, 0, 8, 1245199, 0, 8, 1179663, 0, 8, 1114127, 0, 8, 1048591, 0, 8, 983055, 0, 8, 917519, 0, 8, 851983, 0, 8, 786447, 0, 8, 720911, 0, 8, 655375, 0, 8, 589839, 0, 8, 524303, 0, 8, 458767, 0, 8, 393231, 0, 8, 327695, 0, 8, 262159, 0, 8, 196623, 0, 8, 131087, 0, 8, 65551, 0, 8, 15, 0, 8, -65521, 0, 8, -131057, 0, 8, -196593, 0, 8, -262129, 0, 8, 1900558, 0, 8, 1835022, 0, 8, 1769486, 0, 8, 1703950, 0, 8, 1638414, 0, 8, 1572878, 0, 8, 1507342, 0, 8, 1441806, 0, 8, 1376270, 0, 8, 1310734, 0, 8, 1245198, 0, 8, 1179662, 0, 8, 1114126, 0, 8, 1048590, 0, 8, 983054, 0, 8, 917518, 0, 8, 851982, 0, 8, 786446, 0, 8, 720910, 0, 8, 655374, 0, 8, 589838, 0, 8, 524302, 0, 8, 458766, 0, 8, 393230, 0, 8, 327694, 0, 8, 262158, 0, 8, 196622, 0, 8, 131086, 0, 8, 65550, 0, 8, 14, 0, 8, -65522, 0, 8, -131058, 0, 8, -196594, 0, 8, -262130, 0, 8, 1900557, 0, 8, 1835021, 0, 8, 1769485, 0, 8, 1703949, 0, 8, 1638413, 0, 8, 1572877, 0, 8, 1507341, 0, 8, 1441805, 0, 8, 1376269, 0, 8, 1310733, 0, 8, 1245197, 0, 8, 1179661, 0, 8, 1114125, 0, 8, 1048589, 0, 8, 983053, 0, 8, 917517, 0, 8, 851981, 0, 8, 786445, 0, 8, 720909, 0, 8, 655373, 0, 8, 589837, 0, 8, 524301, 0, 8, 458765, 0, 8, 393229, 0, 8, 327693, 0, 8, 262157, 0, 8, 196621, 0, 8, 131085, 0, 8, 65549, 0, 8, 13, 0, 8, -65523, 0, 8, -131059, 0, 8, -196595, 0, 8, -262131, 0, 8, 1900556, 0, 8, 1835020, 0, 8, 1769484, 0, 8, 1703948, 0, 8, 1638412, 0, 8, 1572876, 0, 8, 1507340, 0, 8, 1441804, 0, 8, 1376268, 0, 8, 1310732, 0, 8, 1245196, 0, 8, 1179660, 0, 8, 1114124, 0, 8, 1048588, 0, 8, 983052, 0, 8, 917516, 0, 8, 851980, 0, 8, 786444, 0, 8, 720908, 0, 8, 655372, 0, 8, 589836, 0, 8, 524300, 0, 8, 458764, 0, 8, 393228, 0, 8, 327692, 0, 8, 262156, 0, 8, 196620, 0, 8, 131084, 0, 8, 65548, 0, 8, 12, 0, 8, -65524, 0, 8, -131060, 0, 8, -196596, 0, 8, -262132, 0, 8, 1900555, 0, 8, 1835019, 0, 8, 1769483, 0, 8, 1703947, 0, 8, 1638411, 0, 8, 1572875, 0, 8, 1507339, 0, 8, 1441803, 0, 8, 1376267, 0, 8, 1310731, 0, 8, 1245195, 0, 8, 1179659, 0, 8, 1114123, 0, 8, 1048587, 0, 8, 983051, 0, 8, 917515, 0, 8, 851979, 0, 8, 786443, 0, 8, 720907, 0, 8, 655371, 0, 8, 589835, 0, 8, 524299, 0, 8, 458763, 0, 8, 393227, 0, 8, 327691, 0, 8, 262155, 0, 8, 196619, 0, 8, 131083, 0, 8, 65547, 0, 8, 11, 0, 8, -65525, 0, 8, -131061, 0, 8, -196597, 0, 8, -262133, 0, 8, 1900554, 0, 8, 1835018, 0, 8, 1769482, 0, 8, 1703946, 0, 8, 1638410, 0, 8, 1572874, 0, 8, 1507338, 0, 8, 1441802, 0, 8, 1376266, 0, 8, 1310730, 0, 8, 1245194, 0, 8, 1179658, 0, 8, 1114122, 0, 8, 1048586, 0, 8, 983050, 0, 8, 917514, 0, 8, 851978, 0, 8, 786442, 0, 8, 720906, 0, 8, 655370, 0, 8, 589834, 0, 8, 524298, 0, 8, 458762, 0, 8, 393226, 0, 8, 327690, 0, 8, 262154, 0, 8, 196618, 0, 8, 131082, 0, 8, 65546, 0, 8, 10, 0, 8, -65526, 0, 8, -131062, 0, 8, -196598, 0, 8, -262134, 0, 8, 1900553, 0, 8, 1835017, 0, 8, 1769481, 0, 8, 1703945, 0, 8, 1638409, 0, 8, 1572873, 0, 8, 1507337, 0, 8, 1441801, 0, 8, 1376265, 0, 8, 1310729, 0, 8, 1245193, 0, 8, 1179657, 0, 8, 1114121, 0, 8, 1048585, 0, 8, 983049, 0, 8, 917513, 0, 8, 851977, 0, 8, 786441, 0, 8, 720905, 0, 8, 655369, 0, 8, 589833, 0, 8, 524297, 0, 8, 458761, 0, 8, 393225, 0, 8, 327689, 0, 8, 262153, 0, 8, 196617, 0, 8, 131081, 0, 8, 65545, 0, 8, 9, 0, 8, -65527, 0, 8, -131063, 0, 8, -196599, 0, 8, -262135, 0, 8, 1900552, 0, 8, 1835016, 0, 8, 1769480, 0, 8, 1703944, 0, 8, 1638408, 0, 8, 1572872, 0, 8, 1507336, 0, 8, 1441800, 0, 8, 1376264, 0, 8, 1310728, 0, 8, 1245192, 0, 8, 1179656, 0, 8, 1114120, 0, 8, 1048584, 0, 8, 983048, 0, 8, 917512, 0, 8, 851976, 0, 8, 786440, 0, 8, 720904, 0, 8, 655368, 0, 8, 589832, 0, 8, 524296, 0, 8, 458760, 0, 8, 393224, 0, 8, 327688, 0, 8, 262152, 0, 8, 196616, 0, 8, 131080, 0, 8, 65544, 0, 8, 8, 0, 8, -65528, 0, 8, -131064, 0, 8, -196600, 0, 8, -262136, 0, 8, 1900551, 0, 8, 1835015, 0, 8, 1769479, 0, 8, 1703943, 0, 8, 1638407, 0, 8, 1572871, 0, 8, 1507335, 0, 8, 1441799, 0, 8, 1376263, 0, 8, 1310727, 0, 8, 1245191, 0, 8, 1179655, 0, 8, 1114119, 0, 8, 1048583, 0, 8, 983047, 0, 8, 917511, 0, 8, 851975, 0, 8, 786439, 0, 8, 720903, 0, 8, 655367, 0, 8, 589831, 0, 8, 524295, 0, 8, 458759, 0, 8, 393223, 0, 8, 327687, 0, 8, 262151, 0, 8, 196615, 0, 8, 131079, 0, 8, 65543, 0, 8, 7, 0, 8, -65529, 0, 8, -131065, 0, 8, -196601, 0, 8, -262137, 0, 8, 1900550, 0, 8, 1835014, 0, 8, 1769478, 0, 8, 1703942, 0, 8, 1638406, 0, 8, 1572870, 0, 8, 1507334, 0, 8, 1441798, 0, 8, 1376262, 0, 8, 1310726, 0, 8, 1245190, 0, 8, 1179654, 0, 8, 1114118, 0, 8, 1048582, 0, 8, 983046, 0, 8, 917510, 0, 8, 851974, 0, 8, 786438, 0, 8, 720902, 0, 8, 655366, 0, 8, 589830, 0, 8, 524294, 0, 8, 458758, 0, 8, 393222, 0, 8, 327686, 0, 8, 262150, 0, 8, 196614, 0, 8, 131078, 0, 8, 65542, 0, 8, 6, 0, 8, -65530, 0, 8, -131066, 0, 8, -196602, 0, 8, -262138, 0, 8, 1900549, 0, 8, 1835013, 0, 8, 1769477, 0, 8, 1703941, 0, 8, 1638405, 0, 8, 1572869, 0, 8, 1507333, 0, 8, 1441797, 0, 8, 1376261, 0, 8, 1310725, 0, 8, 1245189, 0, 8, 1179653, 0, 8, 1114117, 0, 8, 1048581, 0, 8, 983045, 0, 8, 917509, 0, 8, 851973, 0, 8, 786437, 0, 8, 720901, 0, 8, 655365, 0, 8, 589829, 0, 8, 524293, 0, 8, 458757, 0, 8, 393221, 0, 8, 327685, 0, 8, 262149, 0, 8, 196613, 0, 8, 131077, 0, 8, 65541, 0, 8, 5, 0, 8, -65531, 0, 8, -131067, 0, 8, -196603, 0, 8, -262139, 0, 8, 1900548, 0, 8, 1835012, 0, 8, 1769476, 0, 8, 1703940, 0, 8, 1638404, 0, 8, 1572868, 0, 8, 1507332, 0, 8, 1441796, 0, 8, 1376260, 0, 8, 1310724, 0, 8, 1245188, 0, 8, 1179652, 0, 8, 1114116, 0, 8, 1048580, 0, 8, 983044, 0, 8, 917508, 0, 8, 851972, 0, 8, 786436, 0, 8, 720900, 0, 8, 655364, 0, 8, 589828, 0, 8, 524292, 0, 8, 458756, 0, 8, 393220, 0, 8, 327684, 0, 8, 262148, 0, 8, 196612, 0, 8, 131076, 0, 8, 65540, 0, 8, 4, 0, 8, -65532, 0, 8, -131068, 0, 8, -196604, 0, 8, -262140, 0, 8, 1900547, 0, 8, 1835011, 0, 8, 1769475, 0, 8, 1703939, 0, 8, 1638403, 0, 8, 1572867, 0, 8, 1507331, 0, 8, 1441795, 0, 8, 1376259, 0, 8, 1310723, 0, 8, 1245187, 0, 8, 1179651, 0, 8, 1114115, 0, 8, 1048579, 0, 8, 983043, 0, 8, 917507, 0, 8, 851971, 0, 8, 786435, 0, 8, 720899, 0, 8, 655363, 0, 8, 589827, 0, 8, 524291, 0, 8, 458755, 0, 8, 393219, 0, 8, 327683, 0, 8, 262147, 0, 8, 196611, 0, 8, 131075, 0, 8, 65539, 0, 8, 3, 0, 8, -65533, 0, 8, -131069, 0, 8, -196605, 0, 8, -262141, 0, 8, 1900546, 0, 8, 1835010, 0, 8, 1769474, 0, 8, 1703938, 0, 8, 1638402, 0, 8, 1572866, 0, 8, 1507330, 0, 8, 1441794, 0, 8, 1376258, 0, 8, 1310722, 0, 8, 1245186, 0, 8, 1179650, 0, 8, 1114114, 0, 8, 1048578, 0, 8, 983042, 0, 8, 917506, 0, 8, 851970, 0, 8, 786434, 0, 8, 720898, 0, 8, 655362, 0, 8, 589826, 0, 8, 524290, 0, 8, 458754, 0, 8, 393218, 0, 8, 327682, 0, 8, 262146, 0, 8, 196610, 0, 8, 131074, 0, 8, 65538, 0, 8, 2, 0, 8, -65534, 0, 8, -131070, 0, 8, -196606, 0, 8, -262142, 0, 8, 1900545, 0, 8, 1835009, 0, 8, 1769473, 0, 8, 1703937, 0, 8, 1638401, 0, 8, 1572865, 0, 8, 1507329, 0, 8, 1441793, 0, 8, 1376257, 0, 8, 1310721, 0, 8, 1245185, 0, 8, 1179649, 0, 8, 1114113, 0, 8, 1048577, 0, 8, 983041, 0, 8, 917505, 0, 8, 851969, 0, 8, 786433, 0, 8, 720897, 0, 8, 655361, 0, 8, 589825, 0, 8, 524289, 0, 8, 458753, 0, 8, 393217, 0, 8, 327681, 0, 8, 262145, 0, 8, 196609, 0, 8, 131073, 0, 8, 65537, 0, 8, 1, 0, 8, -65535, 0, 8, -131071, 0, 8, -196607, 0, 8, -262143, 0, 8, 1900544, 0, 8, 1835008, 0, 8, 1769472, 0, 8, 1703936, 0, 8, 1638400, 0, 8, 1572864, 0, 8, 1507328, 0, 8, 1441792, 0, 8, 1376256, 0, 8, 1310720, 0, 8, 1245184, 0, 8, 1179648, 0, 8, 1114112, 0, 8, 1048576, 0, 8, 983040, 0, 8, 917504, 0, 8, 851968, 0, 8, 786432, 0, 8, 720896, 0, 8, 655360, 0, 8, 589824, 0, 8, 524288, 0, 8, 458752, 0, 8, 393216, 0, 8, 327680, 0, 8, 262144, 0, 8, 196608, 0, 8, 131072, 0, 8, 65536, 0, 8, 0, 0, 8, -65536, 0, 8, -131072, 0, 8, -196608, 0, 8, -262144, 0, 8, 1966079, 0, 8, 1900543, 0, 8, 1835007, 0, 8, 1769471, 0, 8, 1703935, 0, 8, 1638399, 0, 8, 1572863, 0, 8, 1507327, 0, 8, 1441791, 0, 8, 1376255, 0, 8, 1310719, 0, 8, 1245183, 0, 8, 1179647, 0, 8, 1114111, 0, 8, 1048575, 0, 8, 983039, 0, 8, 917503, 0, 8, 851967, 0, 8, 786431, 0, 8, 720895, 0, 8, 655359, 0, 8, 589823, 0, 8, 524287, 0, 8, 458751, 0, 8, 393215, 0, 8, 327679, 0, 8, 262143, 0, 8, 196607, 0, 8, 131071, 0, 8, 65535, 0, 8, -1, 0, 8, -65537, 0, 8, -131073, 0, 8, -196609, 0, 8, 1966078, 0, 8, 1900542, 0, 8, 1835006, 0, 8, 1769470, 0, 8, 1703934, 0, 8, 1638398, 0, 8, 1572862, 0, 8, 1507326, 0, 8, 1441790, 0, 8, 1376254, 0, 8, 1310718, 0, 8, 1245182, 0, 8, 1179646, 0, 8, 1114110, 0, 8, 1048574, 0, 8, 983038, 0, 8, 917502, 0, 8, 851966, 0, 8, 786430, 0, 8, 720894, 0, 8, 655358, 0, 8, 589822, 0, 8, 524286, 0, 8, 458750, 0, 8, 393214, 0, 8, 327678, 0, 8, 262142, 0, 8, 196606, 0, 8, 131070, 0, 8, 65534, 0, 8, -2, 0, 8, -65538, 0, 8, -131074, 0, 8, -196610, 0, 8, 1966077, 0, 8, 1900541, 0, 8, 1835005, 0, 8, 1769469, 0, 8, 1703933, 0, 8, 1638397, 0, 8, 1572861, 0, 8, 1507325, 0, 8, 1441789, 0, 8, 1376253, 0, 8, 1310717, 0, 8, 1245181, 0, 8, 1179645, 0, 8, 1114109, 0, 8, 1048573, 0, 8, 983037, 0, 8, 917501, 0, 8, 851965, 0, 8, 786429, 0, 8, 720893, 0, 8, 655357, 0, 8, 589821, 0, 8, 524285, 0, 8, 458749, 0, 8, 393213, 0, 8, 327677, 0, 8, 262141, 0, 8, 196605, 0, 8, 131069, 0, 8, 65533, 0, 8, -3, 0, 8, -65539, 0, 8, -131075, 0, 8, -196611, 0, 8, 1966076, 0, 8, 1900540, 0, 8, 1835004, 0, 8, 1769468, 0, 8, 1703932, 0, 8, 1638396, 0, 8, 1572860, 0, 8, 1507324, 0, 8, 1441788, 0, 8, 1376252, 0, 8, 1310716, 0, 8, 1245180, 0, 8, 1179644, 0, 8, 1114108, 0, 8, 1048572, 0, 8, 983036, 0, 8, 917500, 0, 8, 851964, 0, 8, 786428, 0, 8, 720892, 0, 8, 655356, 0, 8, 589820, 0, 8, 524284, 0, 8, 458748, 0, 8, 393212, 0, 8, 327676, 0, 8, 262140, 0, 8, 196604, 0, 8, 131068, 0, 8, 65532, 0, 8, -4, 0, 8, -65540, 0, 8, -131076, 0, 8, -196612, 0, 8, 1966075, 0, 8, 1900539, 0, 8, 1835003, 0, 8, 1769467, 0, 8, 1703931, 0, 8, 1638395, 0, 8, 1572859, 0, 8, 1507323, 0, 8, 1441787, 0, 8, 1376251, 0, 8, 1310715, 0, 8, 1245179, 0, 8, 1179643, 0, 8, 1114107, 0, 8, 1048571, 0, 8, 983035, 0, 8, 917499, 0, 8, 851963, 0, 8, 786427, 0, 8, 720891, 0, 8, 655355, 0, 8, 589819, 0, 8, 524283, 0, 8, 458747, 0, 8, 393211, 0, 8, 327675, 0, 8, 262139, 0, 8, 196603, 0, 8, 131067, 0, 8, 65531, 0, 8, -5, 0, 8, -65541, 0, 8, -131077, 0, 8, -196613, 0, 8, -131078, 196608, 3, -262150, 196608, 4, -262148, 131072, 7, -65542, 196608, 3, -196614, 196608, 3, -6, 196608, 3, 65530, 196608, 3, 131066, 196608, 3, 196602, 196608, 3, 262138, 196608, 3, 327674, 196608, 3, 393210, 196608, 3, 458746, 196608, 3, 524282, 196608, 3, 589818, 196608, 3, 655354, 196608, 3, 720890, 196608, 3, 786426, 196608, 3, 851962, 196608, 3, 917498, 196608, 3, 983034, 196608, 3, 1048570, 196608, 3, 1114106, 196608, 3, 1179642, 196608, 3, 1245178, 196608, 3, 1310714, 196608, 3, 1376250, 196608, 3, 1441786, 196608, 3, 1507322, 196608, 3, 1572858, 196608, 3, 1638394, 196608, 3, 1703930, 196608, 3, 1769466, 196608, 3, 1835002, 196608, 3, 1900538, 196608, 3, 1966074, 196608, 3, 2031612, 131072, 2, 2031610, 720896, 2, -262149, 131072, 7, -262147, 131072, 7, 2031613, 131072, 2, 2031611, 131072, 2, -262146, 131072, 7, 2031614, 131072, 2, -262145, 131072, 7, 2031615, 131072, 2, -327680, 131072, 7, 1966080, 131072, 2, -327679, 131072, 7, 1966081, 131072, 2, -327678, 131072, 7, 1966082, 131072, 2, -327677, 131072, 7, 1966083, 131072, 2, -327676, 131072, 7, 1966084, 131072, 2, -327675, 131072, 7, 1966085, 131072, 2, -327674, 131072, 7, 1966086, 131072, 2, -327673, 131072, 7, 1966087, 131072, 2, -327672, 131072, 7, 1966088, 131072, 2, -327671, 131072, 7, 1966089, 196608, 2, -327670, 131072, 7, 1966090, 0, 8, -327669, 131072, 7, 1966091, 0, 8, -327668, 131072, 7, 1966092, 0, 8, -327667, 131072, 7, 1966093, 0, 8, -327666, 131072, 7, 1966094, 0, 8, -327665, 131072, 7, 1966095, 0, 8, -327664, 131072, 7, 1966096, 0, 8, -327663, 131072, 7, 1966097, 0, 8, -327662, 131072, 7, 1966098, 0, 8, -327661, 131072, 7, 1966099, 0, 8, -327660, 131072, 7, 1966100, 0, 8, -327659, 131072, 7, 1966101, 0, 8, -327658, 131072, 7, 1966102, 0, 8, -327657, 131072, 7, 1966103, 0, 8, -327656, 131072, 7, 1966104, 0, 8, -327655, 131072, 7, 1966105, 0, 8, -327654, 131072, 7, 1966106, 0, 8, -327653, 131072, 7, 1966107, 65536, 2, -327652, 131072, 7, 1966108, 131072, 2, -327651, 131072, 7, 1966109, 131072, 2, -327650, 131072, 7, 1966110, 131072, 2, -327649, 131072, 7, 1966111, 131072, 2, -327648, 131072, 7, 1966112, 131072, 2, -327647, 131072, 7, 1966113, 131072, 2, -327646, 131072, 7, 1966114, 131072, 2, -327645, 131072, 7, 1966115, 131072, 2, -327644, 131072, 7, 1966116, 196608, 2, -327643, 131072, 7, 1966117, 0, 8, -327642, 131072, 7, 1966118, 0, 8, -327641, 131072, 7, 1966119, 0, 8, -327640, 131072, 7, 1966120, 0, 8, -327639, 131072, 7, 1966121, 0, 8, -327638, 131072, 7, 1966122, 0, 8, -327637, 131072, 7, 1966123, 0, 8, -327636, 131072, 7, 1966124, 0, 8, -327635, 131072, 7, 1966125, 0, 8, -196562, 65536, 3, -327634, 65536, 4, -131026, 65536, 3, -262098, 65536, 3, -65490, 65536, 3, 46, 65536, 3, 65582, 65536, 3, 131118, 65536, 3, 196654, 65536, 3, 262190, 65536, 3, 327726, 65536, 3, 393262, 65536, 3, 458798, 65536, 3, 524334, 65536, 3, 589870, 65536, 3, 655406, 65536, 7, 720942, 0, 8, 786478, 0, 8, 852014, 0, 8, 917550, 0, 8, 983086, 0, 8, 1048622, 0, 8, 1114158, 0, 8, 1179694, 0, 8, 1245230, 0, 8, 1310766, 0, 8, 1376302, 0, 8, 1441838, 0, 8, 1507374, 0, 8, 1572910, 0, 8, 1638446, 0, 8, 1703982, 0, 8, 1769518, 0, 8, 1835054, 0, 8, 1900590, 0, 8, 1966126, 0, 8, 2949189, 0, 8, 2883653, 0, 8, 2818117, 0, 8, 2752581, 0, 8, 2687045, 0, 8, 2621509, 0, 8, 2555973, 0, 8, 2490437, 0, 8, 2424901, 0, 8, 2359365, 0, 8, 2293829, 0, 8, 2228293, 0, 8, 2162757, 0, 8, 2097221, 0, 8, 2031685, 0, 8, 1966149, 0, 8, 1900613, 0, 8, 1835077, 0, 8, 1769541, 0, 8, 1704005, 0, 8, 1638469, 0, 8, 1572933, 0, 8, 1507397, 0, 8, 1441861, 0, 8, 1376325, 0, 8, 1310789, 0, 8, 1245253, 0, 8, 1179717, 0, 8, 1114181, 0, 8, 1048645, 0, 8, 983109, 0, 8, 917573, 0, 8, 852037, 0, 8, 786501, 0, 8, 720965, 0, 8, 2949188, 0, 8, 2883652, 0, 8, 2818116, 0, 8, 2752580, 0, 8, 2687044, 0, 8, 2621508, 0, 8, 2555972, 0, 8, 2490436, 0, 8, 2424900, 0, 8, 2359364, 0, 8, 2293828, 0, 8, 2228292, 0, 8, 2162756, 0, 8, 2097220, 0, 8, 2031684, 0, 8, 1966148, 0, 8, 1900612, 0, 8, 1835076, 0, 8, 1769540, 0, 8, 1704004, 0, 8, 1638468, 0, 8, 1572932, 0, 8, 1507396, 0, 8, 1441860, 0, 8, 1376324, 0, 8, 1310788, 0, 8, 1245252, 0, 8, 1179716, 0, 8, 1114180, 0, 8, 1048644, 0, 8, 983108, 0, 8, 917572, 0, 8, 852036, 0, 8, 786500, 0, 8, 720964, 0, 8, 2949187, 0, 8, 2883651, 0, 8, 2818115, 0, 8, 2752579, 0, 8, 2687043, 0, 8, 2621507, 0, 8, 2555971, 0, 8, 2490435, 0, 8, 2424899, 0, 8, 2359363, 0, 8, 2293827, 0, 8, 2228291, 0, 8, 2162755, 0, 8, 2097219, 0, 8, 2031683, 0, 8, 1966147, 0, 8, 1900611, 0, 8, 1835075, 0, 8, 1769539, 0, 8, 1704003, 0, 8, 1638467, 0, 8, 1572931, 0, 8, 1507395, 0, 8, 1441859, 0, 8, 1376323, 0, 8, 1310787, 0, 8, 1245251, 0, 8, 1179715, 0, 8, 1114179, 0, 8, 1048643, 0, 8, 983107, 0, 8, 917571, 0, 8, 852035, 0, 8, 786499, 0, 8, 720963, 0, 8, 2949186, 0, 8, 2883650, 0, 8, 2818114, 0, 8, 2752578, 0, 8, 2687042, 0, 8, 2621506, 0, 8, 2555970, 0, 8, 2490434, 0, 8, 2424898, 0, 8, 2359362, 0, 8, 2293826, 0, 8, 2228290, 0, 8, 2162754, 0, 8, 2097218, 0, 8, 2031682, 0, 8, 1966146, 0, 8, 1900610, 0, 8, 1835074, 0, 8, 1769538, 0, 8, 1704002, 0, 8, 1638466, 0, 8, 1572930, 0, 8, 1507394, 0, 8, 1441858, 0, 8, 1376322, 0, 8, 1310786, 0, 8, 1245250, 0, 8, 1179714, 0, 8, 1114178, 0, 8, 1048642, 0, 8, 983106, 0, 8, 917570, 0, 8, 852034, 0, 8, 786498, 0, 8, 720962, 0, 8, 2949185, 0, 8, 2883649, 0, 8, 2818113, 0, 8, 2752577, 0, 8, 2687041, 0, 8, 2621505, 0, 8, 2555969, 0, 8, 2490433, 0, 8, 2424897, 0, 8, 2359361, 0, 8, 2293825, 0, 8, 2228289, 0, 8, 2162753, 0, 8, 2097217, 0, 8, 2031681, 0, 8, 1966145, 0, 8, 1900609, 0, 8, 1835073, 0, 8, 1769537, 0, 8, 1704001, 0, 8, 1638465, 0, 8, 1572929, 0, 8, 1507393, 0, 8, 1441857, 0, 8, 1376321, 0, 8, 1310785, 0, 8, 1245249, 0, 8, 1179713, 0, 8, 1114177, 0, 8, 1048641, 0, 8, 983105, 0, 8, 917569, 0, 8, 852033, 0, 8, 786497, 0, 8, 720961, 0, 8, 2949184, 0, 8, 2883648, 0, 8, 2818112, 0, 8, 2752576, 0, 8, 2687040, 0, 8, 2621504, 0, 8, 2555968, 0, 8, 2490432, 0, 8, 2424896, 0, 8, 2359360, 0, 8, 2293824, 0, 8, 2228288, 0, 8, 2162752, 0, 8, 2097216, 0, 8, 2031680, 0, 8, 1966144, 0, 8, 1900608, 0, 8, 1835072, 0, 8, 1769536, 0, 8, 1704000, 0, 8, 1638464, 0, 8, 1572928, 0, 8, 1507392, 0, 8, 1441856, 0, 8, 1376320, 0, 8, 1310784, 0, 8, 1245248, 0, 8, 1179712, 0, 8, 1114176, 0, 8, 1048640, 0, 8, 983104, 0, 8, 917568, 0, 8, 852032, 0, 8, 786496, 0, 8, 720960, 0, 8, 2949183, 0, 8, 2883647, 0, 8, 2818111, 0, 8, 2752575, 0, 8, 2687039, 0, 8, 2621503, 0, 8, 2555967, 0, 8, 2490431, 0, 8, 2424895, 0, 8, 2359359, 0, 8, 2293823, 0, 8, 2228287, 0, 8, 2162751, 0, 8, 2097215, 0, 8, 2031679, 0, 8, 1966143, 0, 8, 1900607, 0, 8, 1835071, 0, 8, 1769535, 0, 8, 1703999, 0, 8, 1638463, 0, 8, 1572927, 0, 8, 1507391, 0, 8, 1441855, 0, 8, 1376319, 0, 8, 1310783, 0, 8, 1245247, 0, 8, 1179711, 0, 8, 1114175, 0, 8, 1048639, 0, 8, 983103, 0, 8, 917567, 0, 8, 852031, 0, 8, 786495, 0, 8, 720959, 0, 8, 2949182, 0, 8, 2883646, 0, 8, 2818110, 0, 8, 2752574, 0, 8, 2687038, 0, 8, 2621502, 0, 8, 2555966, 0, 8, 2490430, 0, 8, 2424894, 0, 8, 2359358, 0, 8, 2293822, 0, 8, 2228286, 0, 8, 2162750, 0, 8, 2097214, 0, 8, 2031678, 0, 8, 1966142, 0, 8, 1900606, 0, 8, 1835070, 0, 8, 1769534, 0, 8, 1703998, 0, 8, 1638462, 0, 8, 1572926, 0, 8, 1507390, 0, 8, 1441854, 0, 8, 1376318, 0, 8, 1310782, 0, 8, 1245246, 0, 8, 1179710, 0, 8, 1114174, 0, 8, 1048638, 0, 8, 983102, 0, 8, 917566, 0, 8, 852030, 0, 8, 786494, 0, 8, 720958, 0, 8, 2949181, 0, 8, 2883645, 0, 8, 2818109, 0, 8, 2752573, 0, 8, 2687037, 0, 8, 2621501, 0, 8, 2555965, 0, 8, 2490429, 0, 8, 2424893, 0, 8, 2359357, 0, 8, 2293821, 0, 8, 2228285, 0, 8, 2162749, 0, 8, 2097213, 0, 8, 2031677, 0, 8, 1966141, 0, 8, 1900605, 0, 8, 1835069, 0, 8, 1769533, 0, 8, 1703997, 0, 8, 1638461, 0, 8, 1572925, 0, 8, 1507389, 0, 8, 1441853, 0, 8, 1376317, 0, 8, 1310781, 0, 8, 1245245, 0, 8, 1179709, 0, 8, 1114173, 0, 8, 1048637, 0, 8, 983101, 0, 8, 917565, 0, 8, 852029, 0, 8, 786493, 0, 8, 720957, 0, 8, 2949180, 0, 8, 2883644, 0, 8, 2818108, 0, 8, 2752572, 0, 8, 2687036, 0, 8, 2621500, 0, 8, 2555964, 0, 8, 2490428, 0, 8, 2424892, 0, 8, 2359356, 0, 8, 2293820, 0, 8, 2228284, 0, 8, 2162748, 0, 8, 2097212, 0, 8, 2031676, 0, 8, 1966140, 0, 8, 1900604, 0, 8, 1835068, 0, 8, 1769532, 0, 8, 1703996, 0, 8, 1638460, 0, 8, 1572924, 0, 8, 1507388, 0, 8, 1441852, 0, 8, 1376316, 0, 8, 1310780, 0, 8, 1245244, 0, 8, 1179708, 0, 8, 1114172, 0, 8, 1048636, 0, 8, 983100, 0, 8, 917564, 0, 8, 852028, 0, 8, 786492, 0, 8, 720956, 0, 8, 2949179, 0, 8, 2883643, 0, 8, 2818107, 0, 8, 2752571, 0, 8, 2687035, 0, 8, 2621499, 0, 8, 2555963, 0, 8, 2490427, 0, 8, 2424891, 0, 8, 2359355, 0, 8, 2293819, 0, 8, 2228283, 0, 8, 2162747, 0, 8, 2097211, 0, 8, 2031675, 0, 8, 1966139, 0, 8, 1900603, 0, 8, 1835067, 0, 8, 1769531, 0, 8, 1703995, 0, 8, 1638459, 0, 8, 1572923, 0, 8, 1507387, 0, 8, 1441851, 0, 8, 1376315, 0, 8, 1310779, 0, 8, 1245243, 0, 8, 1179707, 0, 8, 1114171, 0, 8, 1048635, 0, 8, 983099, 0, 8, 917563, 0, 8, 852027, 0, 8, 786491, 0, 8, 720955, 0, 8, 2949178, 0, 8, 2883642, 0, 8, 2818106, 0, 8, 2752570, 0, 8, 2687034, 0, 8, 2621498, 0, 8, 2555962, 0, 8, 2490426, 0, 8, 2424890, 0, 8, 2359354, 0, 8, 2293818, 0, 8, 2228282, 0, 8, 2162746, 0, 8, 2097210, 0, 8, 2031674, 0, 8, 1966138, 0, 8, 1900602, 0, 8, 1835066, 0, 8, 1769530, 0, 8, 1703994, 0, 8, 1638458, 0, 8, 1572922, 0, 8, 1507386, 0, 8, 1441850, 0, 8, 1376314, 0, 8, 1310778, 0, 8, 1245242, 0, 8, 1179706, 0, 8, 1114170, 0, 8, 1048634, 0, 8, 983098, 0, 8, 917562, 0, 8, 852026, 0, 8, 786490, 0, 8, 720954, 0, 8, 2949177, 0, 8, 2883641, 0, 8, 2818105, 0, 8, 2752569, 0, 8, 2687033, 0, 8, 2621497, 0, 8, 2555961, 0, 8, 2490425, 0, 8, 2424889, 0, 8, 2359353, 0, 8, 2293817, 0, 8, 2228281, 0, 8, 2162745, 0, 8, 2097209, 0, 8, 2031673, 0, 8, 1966137, 0, 8, 1900601, 0, 8, 1835065, 0, 8, 1769529, 0, 8, 1703993, 0, 8, 1638457, 0, 8, 1572921, 0, 8, 1507385, 0, 8, 1441849, 0, 8, 1376313, 0, 8, 1310777, 0, 8, 1245241, 0, 8, 1179705, 0, 8, 1114169, 0, 8, 1048633, 0, 8, 983097, 0, 8, 917561, 0, 8, 852025, 0, 8, 786489, 0, 8, 720953, 0, 8, 2949176, 0, 8, 2883640, 0, 8, 2818104, 0, 8, 2752568, 0, 8, 2687032, 0, 8, 2621496, 0, 8, 2555960, 0, 8, 2490424, 0, 8, 2424888, 0, 8, 2359352, 0, 8, 2293816, 0, 8, 2228280, 0, 8, 2162744, 0, 8, 2097208, 0, 8, 2031672, 0, 8, 1966136, 0, 8, 1900600, 0, 8, 1835064, 0, 8, 1769528, 0, 8, 1703992, 0, 8, 1638456, 0, 8, 1572920, 0, 8, 1507384, 0, 8, 1441848, 0, 8, 1376312, 0, 8, 1310776, 0, 8, 1245240, 0, 8, 1179704, 0, 8, 1114168, 0, 8, 1048632, 0, 8, 983096, 0, 8, 917560, 0, 8, 852024, 0, 8, 786488, 0, 8, 720952, 0, 8, 2949175, 0, 8, 2883639, 0, 8, 2818103, 0, 8, 2752567, 0, 8, 2687031, 0, 8, 2621495, 0, 8, 2555959, 0, 8, 2490423, 0, 8, 2424887, 0, 8, 2359351, 0, 8, 2293815, 0, 8, 2228279, 0, 8, 2162743, 0, 8, 2097207, 0, 8, 2031671, 0, 8, 1966135, 0, 8, 1900599, 0, 8, 1835063, 0, 8, 1769527, 0, 8, 1703991, 0, 8, 1638455, 0, 8, 1572919, 0, 8, 1507383, 0, 8, 1441847, 0, 8, 1376311, 0, 8, 1310775, 0, 8, 1245239, 0, 8, 1179703, 0, 8, 1114167, 0, 8, 1048631, 0, 8, 983095, 0, 8, 917559, 0, 8, 852023, 0, 8, 786487, 0, 8, 720951, 0, 8, 2949174, 0, 8, 2883638, 0, 8, 2818102, 0, 8, 2752566, 0, 8, 2687030, 0, 8, 2621494, 0, 8, 2555958, 0, 8, 2490422, 0, 8, 2424886, 0, 8, 2359350, 0, 8, 2293814, 0, 8, 2228278, 0, 8, 2162742, 0, 8, 2097206, 0, 8, 2031670, 0, 8, 1966134, 0, 8, 1900598, 0, 8, 1835062, 0, 8, 1769526, 0, 8, 1703990, 0, 8, 1638454, 0, 8, 1572918, 0, 8, 1507382, 0, 8, 1441846, 0, 8, 1376310, 0, 8, 1310774, 0, 8, 1245238, 0, 8, 1179702, 0, 8, 1114166, 0, 8, 1048630, 0, 8, 983094, 0, 8, 917558, 0, 8, 852022, 0, 8, 786486, 0, 8, 720950, 0, 8, 2949173, 0, 8, 2883637, 0, 8, 2818101, 0, 8, 2752565, 0, 8, 2687029, 0, 8, 2621493, 0, 8, 2555957, 0, 8, 2490421, 0, 8, 2424885, 0, 8, 2359349, 0, 8, 2293813, 0, 8, 2228277, 0, 8, 2162741, 0, 8, 2097205, 0, 8, 2031669, 0, 8, 1966133, 0, 8, 1900597, 0, 8, 1835061, 0, 8, 1769525, 0, 8, 1703989, 0, 8, 1638453, 0, 8, 1572917, 0, 8, 1507381, 0, 8, 1441845, 0, 8, 1376309, 0, 8, 1310773, 0, 8, 1245237, 0, 8, 1179701, 0, 8, 1114165, 0, 8, 1048629, 0, 8, 983093, 0, 8, 917557, 0, 8, 852021, 0, 8, 786485, 0, 8, 720949, 0, 8, 2949172, 0, 8, 2883636, 0, 8, 2818100, 0, 8, 2752564, 0, 8, 2687028, 0, 8, 2621492, 0, 8, 2555956, 0, 8, 2490420, 0, 8, 2424884, 0, 8, 2359348, 0, 8, 2293812, 0, 8, 2228276, 0, 8, 2162740, 0, 8, 2097204, 0, 8, 2031668, 0, 8, 1966132, 0, 8, 1900596, 0, 8, 1835060, 0, 8, 1769524, 0, 8, 1703988, 0, 8, 1638452, 0, 8, 1572916, 0, 8, 1507380, 0, 8, 1441844, 0, 8, 1376308, 0, 8, 1310772, 0, 8, 1245236, 0, 8, 1179700, 0, 8, 1114164, 0, 8, 1048628, 0, 8, 983092, 0, 8, 917556, 0, 8, 852020, 0, 8, 786484, 0, 8, 720948, 0, 8, 2949171, 0, 8, 2883635, 0, 8, 2818099, 0, 8, 2752563, 0, 8, 2687027, 0, 8, 2621491, 0, 8, 2555955, 0, 8, 2490419, 0, 8, 2424883, 0, 8, 2359347, 0, 8, 2293811, 0, 8, 2228275, 0, 8, 2162739, 0, 8, 2097203, 0, 8, 2031667, 0, 8, 1966131, 0, 8, 1900595, 0, 8, 1835059, 0, 8, 1769523, 0, 8, 1703987, 0, 8, 1638451, 0, 8, 1572915, 0, 8, 1507379, 0, 8, 1441843, 0, 8, 1376307, 0, 8, 1310771, 0, 8, 1245235, 0, 8, 1179699, 0, 8, 1114163, 0, 8, 1048627, 0, 8, 983091, 0, 8, 917555, 0, 8, 852019, 0, 8, 786483, 0, 8, 720947, 0, 8, 2949170, 0, 8, 2883634, 0, 8, 2818098, 0, 8, 2752562, 0, 8, 2687026, 0, 8, 2621490, 0, 8, 2555954, 0, 8, 2490418, 0, 8, 2424882, 0, 8, 2359346, 0, 8, 2293810, 0, 8, 2228274, 0, 8, 2162738, 0, 8, 2097202, 0, 8, 2031666, 0, 8, 1966130, 0, 8, 1900594, 0, 8, 1835058, 0, 8, 1769522, 0, 8, 1703986, 0, 8, 1638450, 0, 8, 1572914, 0, 8, 1507378, 0, 8, 1441842, 0, 8, 1376306, 0, 8, 1310770, 0, 8, 1245234, 0, 8, 1179698, 0, 8, 1114162, 0, 8, 1048626, 0, 8, 983090, 0, 8, 917554, 0, 8, 852018, 0, 8, 786482, 0, 8, 720946, 0, 8, 2949169, 0, 8, 2883633, 0, 8, 2818097, 0, 8, 2752561, 0, 8, 2687025, 0, 8, 2621489, 0, 8, 2555953, 0, 8, 2490417, 0, 8, 2424881, 0, 8, 2359345, 0, 8, 2293809, 0, 8, 2228273, 0, 8, 2162737, 0, 8, 2097201, 0, 8, 2031665, 0, 8, 1966129, 0, 8, 1900593, 0, 8, 1835057, 0, 8, 1769521, 0, 8, 1703985, 0, 8, 1638449, 0, 8, 1572913, 0, 8, 1507377, 0, 8, 1441841, 0, 8, 1376305, 0, 8, 1310769, 0, 8, 1245233, 0, 8, 1179697, 0, 8, 1114161, 0, 8, 1048625, 0, 8, 983089, 0, 8, 917553, 0, 8, 852017, 0, 8, 786481, 0, 8, 720945, 0, 8, 2949168, 0, 8, 2883632, 0, 8, 2818096, 0, 8, 2752560, 0, 8, 2687024, 0, 8, 2621488, 0, 8, 2555952, 0, 8, 2490416, 0, 8, 2424880, 0, 8, 2359344, 0, 8, 2293808, 0, 8, 2228272, 0, 8, 2162736, 0, 8, 2097200, 0, 8, 2031664, 0, 8, 1966128, 0, 8, 1900592, 0, 8, 1835056, 0, 8, 1769520, 0, 8, 1703984, 0, 8, 1638448, 0, 8, 1572912, 0, 8, 1507376, 0, 8, 1441840, 0, 8, 1376304, 0, 8, 1310768, 0, 8, 1245232, 0, 8, 1179696, 0, 8, 1114160, 0, 8, 1048624, 0, 8, 983088, 0, 8, 917552, 0, 8, 852016, 0, 8, 786480, 0, 8, 720944, 0, 8, 2949167, 0, 8, 2883631, 0, 8, 2818095, 0, 8, 2752559, 0, 8, 2687023, 0, 8, 2621487, 0, 8, 2555951, 0, 8, 2490415, 0, 8, 2424879, 0, 8, 2359343, 0, 8, 2293807, 0, 8, 2228271, 0, 8, 2162735, 0, 8, 2097199, 0, 8, 2031663, 0, 8, 1966127, 0, 8, 1900591, 0, 8, 1835055, 0, 8, 1769519, 0, 8, 1703983, 0, 8, 1638447, 0, 8, 1572911, 0, 8, 1507375, 0, 8, 1441839, 0, 8, 1376303, 0, 8, 1310767, 0, 8, 1245231, 0, 8, 1179695, 0, 8, 1114159, 0, 8, 1048623, 0, 8, 983087, 0, 8, 917551, 0, 8, 852015, 0, 8, 786479, 0, 8, 720943, 0, 8, 2949166, 0, 8, 2883630, 0, 8, 2818094, 0, 8, 2752558, 0, 8, 2687022, 0, 8, 2621486, 0, 8, 2555950, 0, 8, 2490414, 0, 8, 2424878, 0, 8, 2359342, 0, 8, 2293806, 0, 8, 2228270, 0, 8, 2162734, 0, 8, 2097198, 0, 8, 2031662, 0, 8, 2949165, 0, 8, 2883629, 0, 8, 2818093, 0, 8, 2752557, 0, 8, 2687021, 0, 8, 2621485, 0, 8, 2555949, 0, 8, 2490413, 0, 8, 2424877, 0, 8, 2359341, 0, 8, 2293805, 0, 8, 2228269, 0, 8, 2162733, 0, 8, 2097197, 0, 8, 2031661, 0, 8, 2949164, 0, 8, 2883628, 0, 8, 2818092, 0, 8, 2752556, 0, 8, 2687020, 0, 8, 2621484, 0, 8, 2555948, 0, 8, 2490412, 0, 8, 2424876, 0, 8, 2359340, 0, 8, 2293804, 0, 8, 2228268, 0, 8, 2162732, 0, 8, 2097196, 0, 8, 2031660, 0, 8, 2949163, 0, 8, 2883627, 0, 8, 2818091, 0, 8, 2752555, 0, 8, 2687019, 0, 8, 2621483, 0, 8, 2555947, 0, 8, 2490411, 0, 8, 2424875, 0, 8, 2359339, 0, 8, 2293803, 0, 8, 2228267, 0, 8, 2162731, 0, 8, 2097195, 0, 8, 2031659, 0, 8, 2949162, 0, 8, 2883626, 0, 8, 2818090, 0, 8, 2752554, 0, 8, 2687018, 0, 8, 2621482, 0, 8, 2555946, 0, 8, 2490410, 0, 8, 2424874, 0, 8, 2359338, 0, 8, 2293802, 0, 8, 2228266, 0, 8, 2162730, 0, 8, 2097194, 0, 8, 2031658, 0, 8, 2949161, 0, 8, 2883625, 0, 8, 2818089, 0, 8, 2752553, 0, 8, 2687017, 0, 8, 2621481, 0, 8, 2555945, 0, 8, 2490409, 0, 8, 2424873, 0, 8, 2359337, 0, 8, 2293801, 0, 8, 2228265, 0, 8, 2162729, 0, 8, 2097193, 0, 8, 2031657, 0, 8, 2949160, 0, 8, 2883624, 0, 8, 2818088, 0, 8, 2752552, 0, 8, 2687016, 0, 8, 2621480, 0, 8, 2555944, 0, 8, 2490408, 0, 8, 2424872, 0, 8, 2359336, 0, 8, 2293800, 0, 8, 2228264, 0, 8, 2162728, 0, 8, 2097192, 0, 8, 2031656, 0, 8, 2949159, 0, 8, 2883623, 0, 8, 2818087, 0, 8, 2752551, 0, 8, 2687015, 0, 8, 2621479, 0, 8, 2555943, 0, 8, 2490407, 0, 8, 2424871, 0, 8, 2359335, 0, 8, 2293799, 0, 8, 2228263, 0, 8, 2162727, 0, 8, 2097191, 0, 8, 2031655, 0, 8, 2949158, 0, 8, 2883622, 0, 8, 2818086, 0, 8, 2752550, 0, 8, 2687014, 0, 8, 2621478, 0, 8, 2555942, 0, 8, 2490406, 0, 8, 2424870, 0, 8, 2359334, 0, 8, 2293798, 0, 8, 2228262, 0, 8, 2162726, 0, 8, 2097190, 0, 8, 2031654, 0, 8, 2949157, 0, 8, 2883621, 0, 8, 2818085, 0, 8, 2752549, 0, 8, 2687013, 0, 8, 2621477, 0, 8, 2555941, 0, 8, 2490405, 0, 8, 2424869, 0, 8, 2359333, 0, 8, 2293797, 0, 8, 2228261, 0, 8, 2162725, 0, 8, 2097189, 0, 8, 2031653, 0, 8, 2031652, 196608, 3, 2097188, 196608, 3, 2162724, 196608, 3, 2228260, 196608, 3, 2293796, 196608, 3, 2359332, 196608, 3, 2424868, 196608, 3, 2490404, 196608, 3, 2555940, 196608, 3, 2621476, 196608, 3, 2687012, 196608, 3, 2752548, 196608, 3, 2818084, 196608, 3, 2883620, 196608, 3, 2949156, 196608, 3, 3014694, 131072, 2, 3014692, 720896, 2, 3014695, 131072, 2, 3014693, 131072, 2, 3014696, 131072, 2, 3014697, 131072, 2, 3014698, 131072, 2, 3014699, 131072, 2, 3014700, 131072, 2, 3014701, 131072, 2, 3014702, 131072, 2, 655407, 131072, 7, 3014703, 131072, 2, 655408, 131072, 7, 3014704, 131072, 2, 655409, 131072, 7, 3014705, 131072, 2, 655410, 131072, 7, 3014706, 131072, 2, 655411, 131072, 7, 3014707, 131072, 2, 655412, 131072, 7, 3014708, 131072, 2, 655413, 131072, 7, 3014709, 131072, 2, 655414, 131072, 7, 3014710, 131072, 2, 655415, 131072, 7, 3014711, 131072, 2, 655416, 131072, 7, 3014712, 131072, 2, 655417, 131072, 7, 3014713, 131072, 2, 655418, 131072, 7, 3014714, 196608, 2, 655419, 131072, 7, 3014715, 0, 8, 655420, 131072, 7, 3014716, 0, 8, 655421, 131072, 7, 3014717, 0, 8, 655422, 131072, 7, 3014718, 0, 8, 655423, 131072, 7, 3014719, 0, 8, 655424, 196608, 7, 3014720, 0, 8, 655425, 0, 8, 3014721, 0, 8, 655426, 0, 8, 3014722, 0, 8, 655427, 0, 8, 3014723, 0, 8, 655428, 0, 8, 3014724, 0, 8, 655429, 0, 8, 3014725, 0, 8, 786502, 0, 8, 655430, 0, 8, 852038, 0, 8, 720966, 0, 8, 917574, 0, 8, 983110, 0, 8, 1048646, 0, 8, 1114182, 0, 8, 1179718, 0, 8, 1245254, 0, 8, 1310790, 0, 8, 1376326, 0, 8, 1441862, 65536, 2, 1507398, 65536, 3, 1572934, 65536, 3, 1638470, 65536, 3, 1704006, 65536, 3, 1769542, 65536, 3, 1835078, 65536, 3, 1900614, 65536, 3, 1966150, 65536, 3, 2031686, 65536, 3, 2097222, 65536, 3, 2162758, 65536, 3, 2228294, 65536, 3, 2293830, 65536, 3, 2359366, 65536, 3, 2424902, 65536, 3, 2490438, 65536, 3, 2555974, 65536, 3, 2621510, 65536, 3, 2687046, 65536, 7, 2752582, 0, 8, 2818118, 0, 8, 2883654, 0, 8, 2949190, 0, 8, 3014726, 0, 8, 3801114, 0, 8, 3735578, 0, 8, 3670042, 0, 8, 3604506, 0, 8, 3538970, 0, 8, 3473434, 0, 8, 3407898, 0, 8, 3342362, 0, 8, 3276826, 0, 8, 3211290, 0, 8, 3145754, 0, 8, 3080218, 0, 8, 3014682, 0, 8, 2949146, 0, 8, 2883610, 0, 8, 2818074, 0, 8, 2752538, 0, 8, 2687002, 0, 8, 2621466, 0, 8, 2555930, 0, 8, 2490394, 0, 8, 2424858, 0, 8, 2359322, 0, 8, 2293786, 0, 8, 2228250, 0, 8, 2162714, 0, 8, 2097178, 0, 8, 2031642, 0, 8, 3801113, 0, 8, 3735577, 0, 8, 3670041, 0, 8, 3604505, 0, 8, 3538969, 0, 8, 3473433, 0, 8, 3407897, 0, 8, 3342361, 0, 8, 3276825, 0, 8, 3211289, 0, 8, 3145753, 0, 8, 3080217, 0, 8, 3014681, 0, 8, 2949145, 0, 8, 2883609, 0, 8, 2818073, 0, 8, 2752537, 0, 8, 2687001, 0, 8, 2621465, 0, 8, 2555929, 0, 8, 2490393, 0, 8, 2424857, 0, 8, 2359321, 0, 8, 2293785, 0, 8, 2228249, 0, 8, 2162713, 0, 8, 2097177, 0, 8, 2031641, 0, 8, 3801112, 0, 8, 3735576, 0, 8, 3670040, 0, 8, 3604504, 0, 8, 3538968, 0, 8, 3473432, 0, 8, 3407896, 0, 8, 3342360, 0, 8, 3276824, 0, 8, 3211288, 0, 8, 3145752, 0, 8, 3080216, 0, 8, 3014680, 0, 8, 2949144, 0, 8, 2883608, 0, 8, 2818072, 0, 8, 2752536, 0, 8, 2687000, 0, 8, 2621464, 0, 8, 2555928, 0, 8, 2490392, 0, 8, 2424856, 0, 8, 2359320, 0, 8, 2293784, 0, 8, 2228248, 0, 8, 2162712, 0, 8, 2097176, 0, 8, 2031640, 0, 8, 3801111, 0, 8, 3735575, 0, 8, 3670039, 0, 8, 3604503, 0, 8, 3538967, 0, 8, 3473431, 0, 8, 3407895, 0, 8, 3342359, 0, 8, 3276823, 0, 8, 3211287, 0, 8, 3145751, 0, 8, 3080215, 0, 8, 3014679, 0, 8, 2949143, 0, 8, 2883607, 0, 8, 2818071, 0, 8, 2752535, 0, 8, 2686999, 0, 8, 2621463, 0, 8, 2555927, 0, 8, 2490391, 0, 8, 2424855, 0, 8, 2359319, 0, 8, 2293783, 0, 8, 2228247, 0, 8, 2162711, 0, 8, 2097175, 0, 8, 2031639, 0, 8, 3801110, 0, 8, 3735574, 0, 8, 3670038, 0, 8, 3604502, 0, 8, 3538966, 0, 8, 3473430, 0, 8, 3407894, 0, 8, 3342358, 0, 8, 3276822, 0, 8, 3211286, 0, 8, 3145750, 0, 8, 3080214, 0, 8, 3014678, 0, 8, 2949142, 0, 8, 2883606, 0, 8, 2818070, 0, 8, 2752534, 0, 8, 2686998, 0, 8, 2621462, 0, 8, 2555926, 0, 8, 2490390, 0, 8, 2424854, 0, 8, 2359318, 0, 8, 2293782, 0, 8, 2228246, 0, 8, 2162710, 0, 8, 2097174, 0, 8, 2031638, 0, 8, 3801109, 0, 8, 3735573, 0, 8, 3670037, 0, 8, 3604501, 0, 8, 3538965, 0, 8, 3473429, 0, 8, 3407893, 0, 8, 3342357, 0, 8, 3276821, 0, 8, 3211285, 0, 8, 3145749, 0, 8, 3080213, 0, 8, 3014677, 0, 8, 2949141, 0, 8, 2883605, 0, 8, 2818069, 0, 8, 2752533, 0, 8, 2686997, 0, 8, 2621461, 0, 8, 2555925, 0, 8, 2490389, 0, 8, 2424853, 0, 8, 2359317, 0, 8, 2293781, 0, 8, 2228245, 0, 8, 2162709, 0, 8, 2097173, 0, 8, 2031637, 0, 8, 3801108, 0, 8, 3735572, 0, 8, 3670036, 0, 8, 3604500, 0, 8, 3538964, 0, 8, 3473428, 0, 8, 3407892, 0, 8, 3342356, 0, 8, 3276820, 0, 8, 3211284, 0, 8, 3145748, 0, 8, 3080212, 0, 8, 3014676, 0, 8, 2949140, 0, 8, 2883604, 0, 8, 2818068, 0, 8, 2752532, 0, 8, 2686996, 0, 8, 2621460, 0, 8, 2555924, 0, 8, 2490388, 0, 8, 2424852, 0, 8, 2359316, 0, 8, 2293780, 0, 8, 2228244, 0, 8, 2162708, 0, 8, 2097172, 0, 8, 2031636, 0, 8, 3801107, 0, 8, 3735571, 0, 8, 3670035, 0, 8, 3604499, 0, 8, 3538963, 0, 8, 3473427, 0, 8, 3407891, 0, 8, 3342355, 0, 8, 3276819, 0, 8, 3211283, 0, 8, 3145747, 0, 8, 3080211, 0, 8, 3014675, 0, 8, 2949139, 0, 8, 2883603, 0, 8, 2818067, 0, 8, 2752531, 0, 8, 2686995, 0, 8, 2621459, 0, 8, 2555923, 0, 8, 2490387, 0, 8, 2424851, 0, 8, 2359315, 0, 8, 2293779, 0, 8, 2228243, 0, 8, 2162707, 0, 8, 2097171, 0, 8, 2031635, 0, 8, 3801106, 0, 8, 3735570, 0, 8, 3670034, 0, 8, 3604498, 0, 8, 3538962, 0, 8, 3473426, 0, 8, 3407890, 0, 8, 3342354, 0, 8, 3276818, 0, 8, 3211282, 0, 8, 3145746, 0, 8, 3080210, 0, 8, 3014674, 0, 8, 2949138, 0, 8, 2883602, 0, 8, 2818066, 0, 8, 2752530, 0, 8, 2686994, 0, 8, 2621458, 0, 8, 2555922, 0, 8, 2490386, 0, 8, 2424850, 0, 8, 2359314, 0, 8, 2293778, 0, 8, 2228242, 0, 8, 2162706, 0, 8, 2097170, 0, 8, 2031634, 0, 8, 3801105, 0, 8, 3735569, 0, 8, 3670033, 0, 8, 3604497, 0, 8, 3538961, 0, 8, 3473425, 0, 8, 3407889, 0, 8, 3342353, 0, 8, 3276817, 0, 8, 3211281, 0, 8, 3145745, 0, 8, 3080209, 0, 8, 3014673, 0, 8, 2949137, 0, 8, 2883601, 0, 8, 2818065, 0, 8, 2752529, 0, 8, 2686993, 0, 8, 2621457, 0, 8, 2555921, 0, 8, 2490385, 0, 8, 2424849, 0, 8, 2359313, 0, 8, 2293777, 0, 8, 2228241, 0, 8, 2162705, 0, 8, 2097169, 0, 8, 2031633, 0, 8, 3801104, 0, 8, 3735568, 0, 8, 3670032, 0, 8, 3604496, 0, 8, 3538960, 0, 8, 3473424, 0, 8, 3407888, 0, 8, 3342352, 0, 8, 3276816, 0, 8, 3211280, 0, 8, 3145744, 0, 8, 3080208, 0, 8, 3014672, 0, 8, 2949136, 0, 8, 2883600, 0, 8, 2818064, 0, 8, 2752528, 0, 8, 2686992, 0, 8, 2621456, 0, 8, 2555920, 0, 8, 2490384, 0, 8, 2424848, 0, 8, 2359312, 0, 8, 2293776, 0, 8, 2228240, 0, 8, 2162704, 0, 8, 2097168, 0, 8, 2031632, 0, 8, 3801103, 0, 8, 3735567, 0, 8, 3670031, 0, 8, 3604495, 0, 8, 3538959, 0, 8, 3473423, 0, 8, 3407887, 0, 8, 3342351, 0, 8, 3276815, 0, 8, 3211279, 0, 8, 3145743, 0, 8, 3080207, 0, 8, 3014671, 0, 8, 2949135, 0, 8, 2883599, 0, 8, 2818063, 0, 8, 2752527, 0, 8, 2686991, 0, 8, 2621455, 0, 8, 2555919, 0, 8, 2490383, 0, 8, 2424847, 0, 8, 2359311, 0, 8, 2293775, 0, 8, 2228239, 0, 8, 2162703, 0, 8, 2097167, 0, 8, 2031631, 0, 8, 3801102, 0, 8, 3735566, 0, 8, 3670030, 0, 8, 3604494, 0, 8, 3538958, 0, 8, 3473422, 0, 8, 3407886, 0, 8, 3342350, 0, 8, 3276814, 0, 8, 3211278, 0, 8, 3145742, 0, 8, 3080206, 0, 8, 3014670, 0, 8, 2949134, 0, 8, 2883598, 0, 8, 2818062, 0, 8, 2752526, 0, 8, 2686990, 0, 8, 2621454, 0, 8, 2555918, 0, 8, 2490382, 0, 8, 2424846, 0, 8, 2359310, 0, 8, 2293774, 0, 8, 2228238, 0, 8, 2162702, 0, 8, 2097166, 0, 8, 2031630, 0, 8, 3801101, 0, 8, 3735565, 0, 8, 3670029, 0, 8, 3604493, 0, 8, 3538957, 0, 8, 3473421, 0, 8, 3407885, 0, 8, 3342349, 0, 8, 3276813, 0, 8, 3211277, 0, 8, 3145741, 0, 8, 3080205, 0, 8, 3014669, 0, 8, 2949133, 0, 8, 2883597, 0, 8, 2818061, 0, 8, 2752525, 0, 8, 2686989, 0, 8, 2621453, 0, 8, 2555917, 0, 8, 2490381, 0, 8, 2424845, 0, 8, 2359309, 0, 8, 2293773, 0, 8, 2228237, 0, 8, 2162701, 0, 8, 2097165, 0, 8, 2031629, 0, 8, 3801100, 0, 8, 3735564, 0, 8, 3670028, 0, 8, 3604492, 0, 8, 3538956, 0, 8, 3473420, 0, 8, 3407884, 0, 8, 3342348, 0, 8, 3276812, 0, 8, 3211276, 0, 8, 3145740, 0, 8, 3080204, 0, 8, 3014668, 0, 8, 2949132, 0, 8, 2883596, 0, 8, 2818060, 0, 8, 2752524, 0, 8, 2686988, 0, 8, 2621452, 0, 8, 2555916, 0, 8, 2490380, 0, 8, 2424844, 0, 8, 2359308, 0, 8, 2293772, 0, 8, 2228236, 0, 8, 2162700, 0, 8, 2097164, 0, 8, 2031628, 0, 8, 3801099, 0, 8, 3735563, 0, 8, 3670027, 0, 8, 3604491, 0, 8, 3538955, 0, 8, 3473419, 0, 8, 3407883, 0, 8, 3342347, 0, 8, 3276811, 0, 8, 3211275, 0, 8, 3145739, 0, 8, 3080203, 0, 8, 3014667, 0, 8, 2949131, 0, 8, 2883595, 0, 8, 2818059, 0, 8, 2752523, 0, 8, 2686987, 0, 8, 2621451, 0, 8, 2555915, 0, 8, 2490379, 0, 8, 2424843, 0, 8, 2359307, 0, 8, 2293771, 0, 8, 2228235, 0, 8, 2162699, 0, 8, 2097163, 0, 8, 2031627, 0, 8, 3801098, 0, 8, 3735562, 0, 8, 3670026, 0, 8, 3604490, 0, 8, 3538954, 0, 8, 3473418, 0, 8, 3407882, 0, 8, 3342346, 0, 8, 3276810, 0, 8, 3211274, 0, 8, 3145738, 0, 8, 3080202, 0, 8, 3014666, 0, 8, 2949130, 0, 8, 2883594, 0, 8, 2818058, 0, 8, 2752522, 0, 8, 2686986, 0, 8, 2621450, 0, 8, 2555914, 0, 8, 2490378, 0, 8, 2424842, 0, 8, 2359306, 0, 8, 2293770, 0, 8, 2228234, 0, 8, 2162698, 0, 8, 2097162, 0, 8, 2031626, 0, 8, 2031625, 196608, 3, 2097161, 196608, 3, 2162697, 196608, 3, 2228233, 196608, 3, 2293769, 196608, 3, 2359305, 196608, 3, 2424841, 196608, 3, 2490377, 196608, 3, 2555913, 196608, 3, 2621449, 196608, 3, 2686985, 196608, 3, 2752521, 196608, 3, 2818057, 196608, 3, 2883593, 196608, 3, 2949129, 196608, 3, 3014665, 196608, 3, 3080201, 196608, 3, 3145737, 196608, 3, 3211273, 196608, 3, 3276809, 196608, 3, 3342345, 196608, 3, 3407881, 196608, 3, 3473417, 196608, 3, 3538953, 196608, 3, 3604489, 196608, 7, 3670025, 0, 8, 3735561, 0, 8, 3801097, 0, 8, 3866635, 0, 8, 3866633, 0, 8, 3866636, 0, 8, 3866634, 0, 8, 3866637, 0, 8, 3866638, 0, 8, 3866639, 0, 8, 3866640, 0, 8, 3866641, 0, 8, 3866642, 0, 8, 3866643, 0, 8, 3866644, 0, 8, 3866645, 0, 8, 3866646, 0, 8, 3866647, 0, 8, 3866648, 0, 8, 3866649, 0, 8, 3866650, 0, 8, 2031643, 65536, 3, 2097179, 65536, 3, 2162715, 65536, 3, 2228251, 65536, 3, 2293787, 65536, 3, 2359323, 65536, 3, 2424859, 65536, 3, 2490395, 65536, 3, 2555931, 65536, 3, 2621467, 65536, 3, 2687003, 65536, 3, 2752539, 65536, 3, 2818075, 65536, 3, 2883611, 65536, 3, 2949147, 65536, 3, 3014683, 65536, 3, 3080219, 65536, 3, 3145755, 65536, 3, 3211291, 65536, 3, 3276827, 65536, 3, 3342363, 65536, 3, 3407899, 65536, 3, 3473435, 65536, 3, 3538971, 65536, 3, 3604507, 65536, 7, 3670043, 0, 8, 3735579, 0, 8, 3801115, 0, 8, 3866651, 0, 8, 4915231, 0, 8, 4849695, 0, 8, 4784159, 0, 8, 4718623, 0, 8, 4653087, 0, 8, 4587551, 0, 8, 4522015, 0, 8, 4456479, 0, 8, 4390943, 0, 8, 4325407, 0, 8, 4259871, 0, 8, 4194335, 0, 8, 4128799, 0, 8, 4063263, 0, 8, 3997727, 0, 8, 3932191, 0, 8, 3866655, 0, 8, 3801119, 0, 8, 3735583, 0, 8, 3670047, 0, 8, 4915230, 0, 8, 4849694, 0, 8, 4784158, 0, 8, 4718622, 0, 8, 4653086, 0, 8, 4587550, 0, 8, 4522014, 0, 8, 4456478, 0, 8, 4390942, 0, 8, 4325406, 0, 8, 4259870, 0, 8, 4194334, 0, 8, 4128798, 0, 8, 4063262, 0, 8, 3997726, 0, 8, 3932190, 0, 8, 3866654, 0, 8, 3801118, 0, 8, 3735582, 0, 8, 3670046, 0, 8, 4915229, 0, 8, 4849693, 0, 8, 4784157, 0, 8, 4718621, 0, 8, 4653085, 0, 8, 4587549, 0, 8, 4522013, 0, 8, 4456477, 0, 8, 4390941, 0, 8, 4325405, 0, 8, 4259869, 0, 8, 4194333, 0, 8, 4128797, 0, 8, 4063261, 0, 8, 3997725, 0, 8, 3932189, 0, 8, 3866653, 0, 8, 3801117, 0, 8, 3735581, 0, 8, 3670045, 0, 8, 4915228, 0, 8, 4849692, 0, 8, 4784156, 0, 8, 4718620, 0, 8, 4653084, 0, 8, 4587548, 0, 8, 4522012, 0, 8, 4456476, 0, 8, 4390940, 0, 8, 4325404, 0, 8, 4259868, 0, 8, 4194332, 0, 8, 4128796, 0, 8, 4063260, 0, 8, 3997724, 0, 8, 3932188, 0, 8, 3866652, 0, 8, 3801116, 0, 8, 3735580, 0, 8, 3670044, 0, 8, 4915227, 0, 8, 4849691, 0, 8, 4784155, 0, 8, 4718619, 0, 8, 4653083, 0, 8, 4587547, 0, 8, 4522011, 0, 8, 4456475, 0, 8, 4390939, 0, 8, 4325403, 0, 8, 4259867, 0, 8, 4194331, 0, 8, 4128795, 0, 8, 4063259, 0, 8, 3997723, 0, 8, 3932187, 0, 8, 4915226, 0, 8, 4849690, 0, 8, 4784154, 0, 8, 4718618, 0, 8, 4653082, 0, 8, 4587546, 0, 8, 4522010, 0, 8, 4456474, 0, 8, 4390938, 0, 8, 4325402, 0, 8, 4259866, 0, 8, 4194330, 0, 8, 4128794, 0, 8, 4063258, 0, 8, 3997722, 0, 8, 3932186, 0, 8, 4915225, 0, 8, 4849689, 0, 8, 4784153, 0, 8, 4718617, 0, 8, 4653081, 0, 8, 4587545, 0, 8, 4522009, 0, 8, 4456473, 0, 8, 4390937, 0, 8, 4325401, 0, 8, 4259865, 0, 8, 4194329, 0, 8, 4128793, 0, 8, 4063257, 0, 8, 3997721, 0, 8, 3932185, 0, 8, 4915224, 0, 8, 4849688, 0, 8, 4784152, 0, 8, 4718616, 0, 8, 4653080, 0, 8, 4587544, 0, 8, 4522008, 0, 8, 4456472, 0, 8, 4390936, 0, 8, 4325400, 0, 8, 4259864, 0, 8, 4194328, 0, 8, 4128792, 0, 8, 4063256, 0, 8, 3997720, 0, 8, 3932184, 0, 8, 4915223, 0, 8, 4849687, 0, 8, 4784151, 0, 8, 4718615, 0, 8, 4653079, 0, 8, 4587543, 0, 8, 4522007, 0, 8, 4456471, 0, 8, 4390935, 0, 8, 4325399, 0, 8, 4259863, 0, 8, 4194327, 0, 8, 4128791, 0, 8, 4063255, 0, 8, 3997719, 0, 8, 3932183, 0, 8, 4915222, 0, 8, 4849686, 0, 8, 4784150, 0, 8, 4718614, 0, 8, 4653078, 0, 8, 4587542, 0, 8, 4522006, 0, 8, 4456470, 0, 8, 4390934, 0, 8, 4325398, 0, 8, 4259862, 0, 8, 4194326, 0, 8, 4128790, 0, 8, 4063254, 0, 8, 3997718, 0, 8, 3932182, 0, 8, 4915221, 0, 8, 4849685, 0, 8, 4784149, 0, 8, 4718613, 0, 8, 4653077, 0, 8, 4587541, 0, 8, 4522005, 0, 8, 4456469, 0, 8, 4390933, 0, 8, 4325397, 0, 8, 4259861, 0, 8, 4194325, 0, 8, 4128789, 0, 8, 4063253, 0, 8, 3997717, 0, 8, 3932181, 0, 8, 4915220, 0, 8, 4849684, 0, 8, 4784148, 0, 8, 4718612, 0, 8, 4653076, 0, 8, 4587540, 0, 8, 4522004, 0, 8, 4456468, 0, 8, 4390932, 0, 8, 4325396, 0, 8, 4259860, 0, 8, 4194324, 0, 8, 4128788, 0, 8, 4063252, 0, 8, 3997716, 0, 8, 3932180, 0, 8, 4915219, 0, 8, 4849683, 0, 8, 4784147, 0, 8, 4718611, 0, 8, 4653075, 0, 8, 4587539, 0, 8, 4522003, 0, 8, 4456467, 0, 8, 4390931, 0, 8, 4325395, 0, 8, 4259859, 0, 8, 4194323, 0, 8, 4128787, 0, 8, 4063251, 0, 8, 3997715, 0, 8, 3932179, 0, 8, 4915218, 0, 8, 4849682, 0, 8, 4784146, 0, 8, 4718610, 0, 8, 4653074, 0, 8, 4587538, 0, 8, 4522002, 0, 8, 4456466, 0, 8, 4390930, 0, 8, 4325394, 0, 8, 4259858, 0, 8, 4194322, 0, 8, 4128786, 0, 8, 4063250, 0, 8, 3997714, 0, 8, 3932178, 0, 8, 4915217, 0, 8, 4849681, 0, 8, 4784145, 0, 8, 4718609, 0, 8, 4653073, 0, 8, 4587537, 0, 8, 4522001, 0, 8, 4456465, 0, 8, 4390929, 0, 8, 4325393, 0, 8, 4259857, 0, 8, 4194321, 0, 8, 4128785, 0, 8, 4063249, 0, 8, 3997713, 0, 8, 3932177, 0, 8, 4915216, 0, 8, 4849680, 0, 8, 4784144, 0, 8, 4718608, 0, 8, 4653072, 0, 8, 4587536, 0, 8, 4522000, 0, 8, 4456464, 0, 8, 4390928, 0, 8, 4325392, 0, 8, 4259856, 0, 8, 4194320, 0, 8, 4128784, 0, 8, 4063248, 0, 8, 3997712, 0, 8, 3932176, 0, 8, 4915215, 0, 8, 4849679, 0, 8, 4784143, 0, 8, 4718607, 0, 8, 4653071, 0, 8, 4587535, 0, 8, 4521999, 0, 8, 4456463, 0, 8, 4390927, 0, 8, 4325391, 0, 8, 4259855, 0, 8, 4194319, 0, 8, 4128783, 0, 8, 4063247, 0, 8, 3997711, 0, 8, 3932175, 0, 8, 4915214, 0, 8, 4849678, 0, 8, 4784142, 0, 8, 4718606, 0, 8, 4653070, 0, 8, 4587534, 0, 8, 4521998, 0, 8, 4456462, 0, 8, 4390926, 0, 8, 4325390, 0, 8, 4259854, 0, 8, 4194318, 0, 8, 4128782, 0, 8, 4063246, 0, 8, 3997710, 0, 8, 3932174, 0, 8, 4915213, 0, 8, 4849677, 0, 8, 4784141, 0, 8, 4718605, 0, 8, 4653069, 0, 8, 4587533, 0, 8, 4521997, 0, 8, 4456461, 0, 8, 4390925, 0, 8, 4325389, 0, 8, 4259853, 0, 8, 4194317, 0, 8, 4128781, 0, 8, 4063245, 0, 8, 3997709, 0, 8, 3932173, 0, 8, 4915212, 0, 8, 4849676, 0, 8, 4784140, 0, 8, 4718604, 0, 8, 4653068, 0, 8, 4587532, 0, 8, 4521996, 0, 8, 4456460, 0, 8, 4390924, 0, 8, 4325388, 0, 8, 4259852, 0, 8, 4194316, 0, 8, 4128780, 0, 8, 4063244, 0, 8, 3997708, 0, 8, 3932172, 0, 8, 4915211, 0, 8, 4849675, 0, 8, 4784139, 0, 8, 4718603, 0, 8, 4653067, 0, 8, 4587531, 0, 8, 4521995, 0, 8, 4456459, 0, 8, 4390923, 0, 8, 4325387, 0, 8, 4259851, 0, 8, 4194315, 0, 8, 4128779, 0, 8, 4063243, 0, 8, 3997707, 0, 8, 3932171, 0, 8, 4915210, 0, 8, 4849674, 0, 8, 4784138, 0, 8, 4718602, 0, 8, 4653066, 0, 8, 4587530, 0, 8, 4521994, 0, 8, 4456458, 0, 8, 4390922, 0, 8, 4325386, 0, 8, 4259850, 0, 8, 4194314, 0, 8, 4128778, 0, 8, 4063242, 0, 8, 3997706, 0, 8, 3932170, 0, 8, 4915209, 0, 8, 4849673, 0, 8, 4784137, 0, 8, 4718601, 0, 8, 4653065, 0, 8, 4587529, 0, 8, 4521993, 0, 8, 4456457, 0, 8, 4390921, 0, 8, 4325385, 0, 8, 4259849, 0, 8, 4194313, 0, 8, 4128777, 0, 8, 4063241, 0, 8, 3997705, 0, 8, 3932169, 0, 8, 4915208, 0, 8, 4849672, 0, 8, 4784136, 0, 8, 4718600, 0, 8, 4653064, 0, 8, 4587528, 0, 8, 4521992, 0, 8, 4456456, 0, 8, 4390920, 0, 8, 4325384, 0, 8, 4259848, 0, 8, 4194312, 0, 8, 4128776, 0, 8, 4063240, 0, 8, 3997704, 0, 8, 3932168, 0, 8, 3866632, 0, 8, 3801096, 0, 8, 3735560, 0, 8, 3670024, 0, 8, 4915207, 0, 8, 4849671, 0, 8, 4784135, 0, 8, 4718599, 0, 8, 4653063, 0, 8, 4587527, 0, 8, 4521991, 0, 8, 4456455, 0, 8, 4390919, 0, 8, 4325383, 0, 8, 4259847, 0, 8, 4194311, 0, 8, 4128775, 0, 8, 4063239, 0, 8, 3997703, 0, 8, 3932167, 0, 8, 3866631, 0, 8, 3801095, 0, 8, 3735559, 0, 8, 3670023, 0, 8, 4915206, 0, 8, 4849670, 0, 8, 4784134, 0, 8, 4718598, 0, 8, 4653062, 0, 8, 4587526, 0, 8, 4521990, 0, 8, 4456454, 0, 8, 4390918, 0, 8, 4325382, 0, 8, 4259846, 0, 8, 4194310, 0, 8, 4128774, 0, 8, 4063238, 0, 8, 3997702, 0, 8, 3932166, 0, 8, 3866630, 0, 8, 3801094, 0, 8, 3735558, 0, 8, 3670022, 0, 8, 4915205, 0, 8, 4849669, 0, 8, 4784133, 0, 8, 4718597, 0, 8, 4653061, 0, 8, 4587525, 0, 8, 4521989, 0, 8, 4456453, 0, 8, 4390917, 0, 8, 4325381, 0, 8, 4259845, 0, 8, 4194309, 0, 8, 4128773, 0, 8, 4063237, 0, 8, 3997701, 0, 8, 3932165, 0, 8, 3866629, 0, 8, 3801093, 0, 8, 3735557, 0, 8, 3670021, 0, 8, 4915204, 0, 8, 4849668, 0, 8, 4784132, 0, 8, 4718596, 0, 8, 4653060, 0, 8, 4587524, 0, 8, 4521988, 0, 8, 4456452, 0, 8, 4390916, 0, 8, 4325380, 0, 8, 4259844, 0, 8, 4194308, 0, 8, 4128772, 0, 8, 4063236, 0, 8, 3997700, 0, 8, 3932164, 0, 8, 3866628, 0, 8, 3801092, 0, 8, 3735556, 0, 8, 3670020, 0, 8, 4915203, 0, 8, 4849667, 0, 8, 4784131, 0, 8, 4718595, 0, 8, 4653059, 0, 8, 4587523, 0, 8, 4521987, 0, 8, 4456451, 0, 8, 4390915, 0, 8, 4325379, 0, 8, 4259843, 0, 8, 4194307, 0, 8, 4128771, 0, 8, 4063235, 0, 8, 3997699, 0, 8, 3932163, 0, 8, 3866627, 0, 8, 3801091, 0, 8, 3735555, 0, 8, 3670019, 0, 8, 4915202, 0, 8, 4849666, 0, 8, 4784130, 0, 8, 4718594, 0, 8, 4653058, 0, 8, 4587522, 0, 8, 4521986, 0, 8, 4456450, 0, 8, 4390914, 0, 8, 4325378, 0, 8, 4259842, 0, 8, 4194306, 0, 8, 4128770, 0, 8, 4063234, 0, 8, 3997698, 0, 8, 3932162, 0, 8, 3866626, 0, 8, 3801090, 0, 8, 3735554, 0, 8, 3670018, 0, 8, 4915201, 0, 8, 4849665, 0, 8, 4784129, 0, 8, 4718593, 0, 8, 4653057, 0, 8, 4587521, 0, 8, 4521985, 0, 8, 4456449, 0, 8, 4390913, 0, 8, 4325377, 0, 8, 4259841, 0, 8, 4194305, 0, 8, 4128769, 0, 8, 4063233, 0, 8, 3997697, 0, 8, 3932161, 0, 8, 3866625, 0, 8, 3801089, 0, 8, 3735553, 0, 8, 3670017, 0, 8, 4915200, 0, 8, 4849664, 0, 8, 4784128, 0, 8, 4718592, 0, 8, 4653056, 0, 8, 4587520, 0, 8, 4521984, 0, 8, 4456448, 0, 8, 4390912, 0, 8, 4325376, 0, 8, 4259840, 0, 8, 4194304, 0, 8, 4128768, 0, 8, 4063232, 0, 8, 3997696, 0, 8, 3932160, 0, 8, 3866624, 0, 8, 3801088, 0, 8, 3735552, 0, 8, 3670016, 0, 8, 4980735, 0, 8, 4915199, 0, 8, 4849663, 0, 8, 4784127, 0, 8, 4718591, 0, 8, 4653055, 0, 8, 4587519, 0, 8, 4521983, 0, 8, 4456447, 0, 8, 4390911, 0, 8, 4325375, 0, 8, 4259839, 0, 8, 4194303, 0, 8, 4128767, 0, 8, 4063231, 0, 8, 3997695, 0, 8, 3932159, 0, 8, 3866623, 0, 8, 3801087, 0, 8, 3735551, 0, 8, 4980734, 0, 8, 4915198, 0, 8, 4849662, 0, 8, 4784126, 0, 8, 4718590, 0, 8, 4653054, 0, 8, 4587518, 0, 8, 4521982, 0, 8, 4456446, 0, 8, 4390910, 0, 8, 4325374, 0, 8, 4259838, 0, 8, 4194302, 0, 8, 4128766, 0, 8, 4063230, 0, 8, 3997694, 0, 8, 3932158, 0, 8, 3866622, 0, 8, 3801086, 0, 8, 3735550, 0, 8, 4980733, 0, 8, 4915197, 0, 8, 4849661, 0, 8, 4784125, 0, 8, 4718589, 0, 8, 4653053, 0, 8, 4587517, 0, 8, 4521981, 0, 8, 4456445, 0, 8, 4390909, 0, 8, 4325373, 0, 8, 4259837, 0, 8, 4194301, 0, 8, 4128765, 0, 8, 4063229, 0, 8, 3997693, 0, 8, 3932157, 0, 8, 3866621, 0, 8, 3801085, 0, 8, 3735549, 0, 8, 4980732, 0, 8, 4915196, 0, 8, 4849660, 0, 8, 4784124, 0, 8, 4718588, 0, 8, 4653052, 0, 8, 4587516, 0, 8, 4521980, 0, 8, 4456444, 0, 8, 4390908, 0, 8, 4325372, 0, 8, 4259836, 0, 8, 4194300, 0, 8, 4128764, 0, 8, 4063228, 0, 8, 3997692, 0, 8, 3932156, 0, 8, 3866620, 0, 8, 3801084, 0, 8, 3735548, 0, 8, 4980731, 0, 8, 4915195, 0, 8, 4849659, 0, 8, 4784123, 0, 8, 4718587, 0, 8, 4653051, 0, 8, 4587515, 0, 8, 4521979, 0, 8, 4456443, 0, 8, 4390907, 0, 8, 4325371, 0, 8, 4259835, 0, 8, 4194299, 0, 8, 4128763, 0, 8, 4063227, 0, 8, 3997691, 0, 8, 3932155, 0, 8, 3866619, 0, 8, 3801083, 0, 8, 3735547, 0, 8, 3801082, 196608, 3, 3670010, 196608, 4, 3670012, 131072, 7, 3866618, 196608, 3, 3735546, 196608, 3, 3932154, 196608, 3, 3997690, 196608, 3, 4063226, 196608, 3, 4128762, 196608, 3, 4194298, 196608, 3, 4259834, 196608, 3, 4325370, 196608, 3, 4390906, 196608, 3, 4456442, 196608, 3, 4521978, 196608, 3, 4587514, 196608, 3, 4653050, 196608, 3, 4718586, 196608, 3, 4784122, 196608, 3, 4849658, 196608, 3, 4915194, 196608, 3, 4980730, 196608, 3, 5046268, 131072, 2, 5046266, 720896, 2, 3670011, 131072, 7, 3670013, 131072, 7, 5046269, 131072, 2, 5046267, 131072, 2, 3670014, 131072, 7, 5046270, 131072, 2, 3670015, 131072, 7, 5046271, 131072, 2, 3604480, 131072, 7, 4980736, 131072, 2, 3604481, 131072, 7, 4980737, 131072, 2, 3604482, 131072, 7, 4980738, 131072, 2, 3604483, 131072, 7, 4980739, 131072, 2, 3604484, 131072, 7, 4980740, 131072, 2, 3604485, 131072, 7, 4980741, 131072, 2, 3604486, 131072, 7, 4980742, 131072, 2, 3604487, 131072, 7, 4980743, 131072, 2, 3604488, 131072, 7, 4980744, 131072, 2, 4980745, 131072, 2, 4980746, 131072, 2, 4980747, 131072, 2, 4980748, 131072, 2, 4980749, 131072, 2, 4980750, 131072, 2, 4980751, 131072, 2, 4980752, 131072, 2, 4980753, 131072, 2, 4980754, 196608, 2, 4980755, 0, 8, 4980756, 0, 8, 4980757, 0, 8, 4980758, 0, 8, 4980759, 0, 8, 4980760, 0, 8, 4980761, 0, 8, 4980762, 0, 8, 4980763, 0, 8, 3604508, 131072, 7, 4980764, 0, 8, 3604509, 131072, 7, 4980765, 0, 8, 3604510, 131072, 7, 4980766, 0, 8, 3604511, 131072, 7, 4980767, 0, 8, 3735584, 65536, 3, 3604512, 65536, 4, 3801120, 65536, 3, 3670048, 65536, 3, 3866656, 65536, 3, 3932192, 65536, 3, 3997728, 65536, 3, 4063264, 65536, 3, 4128800, 65536, 3, 4194336, 65536, 3, 4259872, 65536, 3, 4325408, 65536, 3, 4390944, 65536, 3, 4456480, 65536, 3, 4522016, 65536, 3, 4587552, 65536, 3, 4653088, 65536, 3, 4718624, 65536, 7, 4784160, 0, 8, 4849696, 0, 8, 4915232, 0, 8, 4980768, 0, 8, 4915288, 0, 8, 4849752, 0, 8, 4784216, 0, 8, 4718680, 0, 8, 4653144, 0, 8, 4587608, 0, 8, 4522072, 0, 8, 3604568, 0, 8, 3539032, 0, 8, 3473496, 0, 8, 3407960, 0, 8, 3342424, 0, 8, 3276888, 0, 8, 3211352, 0, 8, 3145816, 0, 8, 3080280, 0, 8, 3014744, 0, 8, 2949208, 0, 8, 2883672, 0, 8, 2818136, 0, 8, 2752600, 0, 8, 4915287, 0, 8, 4849751, 0, 8, 4784215, 0, 8, 4718679, 0, 8, 4653143, 0, 8, 4587607, 0, 8, 4522071, 0, 8, 4456535, 0, 8, 4390999, 0, 8, 4325463, 0, 8, 4259927, 0, 8, 4194391, 0, 8, 4128855, 0, 8, 4063319, 0, 8, 3997783, 0, 8, 3932247, 0, 8, 3866711, 0, 8, 3801175, 0, 8, 3735639, 0, 8, 3670103, 0, 8, 3604567, 0, 8, 3539031, 0, 8, 3473495, 0, 8, 3407959, 0, 8, 3342423, 0, 8, 3276887, 0, 8, 3211351, 0, 8, 3145815, 0, 8, 3080279, 0, 8, 3014743, 0, 8, 2949207, 0, 8, 2883671, 0, 8, 2818135, 0, 8, 2752599, 0, 8, 4915286, 0, 8, 4849750, 0, 8, 4784214, 0, 8, 4718678, 0, 8, 4653142, 0, 8, 4587606, 0, 8, 4522070, 0, 8, 4456534, 0, 8, 4390998, 0, 8, 4325462, 0, 8, 4259926, 0, 8, 4194390, 0, 8, 4128854, 0, 8, 4063318, 0, 8, 3997782, 0, 8, 3932246, 0, 8, 3866710, 0, 8, 3801174, 0, 8, 3735638, 0, 8, 3670102, 0, 8, 3604566, 0, 8, 3539030, 0, 8, 3473494, 0, 8, 3407958, 0, 8, 3342422, 0, 8, 3276886, 0, 8, 3211350, 0, 8, 3145814, 0, 8, 3080278, 0, 8, 3014742, 0, 8, 2949206, 0, 8, 2883670, 0, 8, 2818134, 0, 8, 2752598, 0, 8, 4915285, 0, 8, 4849749, 0, 8, 4784213, 0, 8, 4718677, 0, 8, 4653141, 0, 8, 4587605, 0, 8, 4522069, 0, 8, 4456533, 0, 8, 4390997, 0, 8, 4325461, 0, 8, 4259925, 0, 8, 4194389, 0, 8, 4128853, 0, 8, 4063317, 0, 8, 3997781, 0, 8, 3932245, 0, 8, 3866709, 0, 8, 3801173, 0, 8, 3735637, 0, 8, 3670101, 0, 8, 3604565, 0, 8, 3539029, 0, 8, 3473493, 0, 8, 3407957, 0, 8, 3342421, 0, 8, 3276885, 0, 8, 3211349, 0, 8, 3145813, 0, 8, 3080277, 0, 8, 3014741, 0, 8, 2949205, 0, 8, 2883669, 0, 8, 2818133, 0, 8, 2752597, 0, 8, 4915284, 0, 8, 4849748, 0, 8, 4784212, 0, 8, 4718676, 0, 8, 4653140, 0, 8, 4587604, 0, 8, 4522068, 0, 8, 4456532, 0, 8, 4390996, 0, 8, 4325460, 0, 8, 4259924, 0, 8, 4194388, 0, 8, 4128852, 0, 8, 4063316, 0, 8, 3997780, 0, 8, 3932244, 0, 8, 3866708, 0, 8, 3801172, 0, 8, 3735636, 0, 8, 3670100, 0, 8, 3604564, 0, 8, 3539028, 0, 8, 3473492, 0, 8, 3407956, 0, 8, 3342420, 0, 8, 3276884, 0, 8, 3211348, 0, 8, 3145812, 0, 8, 3080276, 0, 8, 3014740, 0, 8, 2949204, 0, 8, 2883668, 0, 8, 2818132, 0, 8, 2752596, 0, 8, 4915283, 0, 8, 4849747, 0, 8, 4784211, 0, 8, 4718675, 0, 8, 4653139, 0, 8, 4587603, 0, 8, 4522067, 0, 8, 4456531, 0, 8, 4390995, 0, 8, 4325459, 0, 8, 4259923, 0, 8, 4194387, 0, 8, 4128851, 0, 8, 4063315, 0, 8, 3997779, 0, 8, 3932243, 0, 8, 3866707, 0, 8, 3801171, 0, 8, 3735635, 0, 8, 3670099, 0, 8, 3604563, 0, 8, 3539027, 0, 8, 3473491, 0, 8, 3407955, 0, 8, 3342419, 0, 8, 3276883, 0, 8, 3211347, 0, 8, 3145811, 0, 8, 3080275, 0, 8, 3014739, 0, 8, 2949203, 0, 8, 2883667, 0, 8, 2818131, 0, 8, 2752595, 0, 8, 4915282, 0, 8, 4849746, 0, 8, 4784210, 0, 8, 4718674, 0, 8, 4653138, 0, 8, 4587602, 0, 8, 4522066, 0, 8, 4456530, 0, 8, 4390994, 0, 8, 4325458, 0, 8, 4259922, 0, 8, 4194386, 0, 8, 4128850, 0, 8, 4063314, 0, 8, 3997778, 0, 8, 3932242, 0, 8, 3866706, 0, 8, 3801170, 0, 8, 3735634, 0, 8, 3670098, 0, 8, 3604562, 0, 8, 3539026, 0, 8, 3473490, 0, 8, 3407954, 0, 8, 3342418, 0, 8, 3276882, 0, 8, 3211346, 0, 8, 3145810, 0, 8, 3080274, 0, 8, 3014738, 0, 8, 2949202, 0, 8, 2883666, 0, 8, 2818130, 0, 8, 2752594, 0, 8, 4915281, 0, 8, 4849745, 0, 8, 4784209, 0, 8, 4718673, 0, 8, 4653137, 0, 8, 4587601, 0, 8, 4522065, 0, 8, 4456529, 0, 8, 4390993, 0, 8, 4325457, 0, 8, 4259921, 0, 8, 4194385, 0, 8, 4128849, 0, 8, 4063313, 0, 8, 3997777, 0, 8, 3932241, 0, 8, 3866705, 0, 8, 3801169, 0, 8, 3735633, 0, 8, 3670097, 0, 8, 3604561, 0, 8, 3539025, 0, 8, 3473489, 0, 8, 3407953, 0, 8, 3342417, 0, 8, 3276881, 0, 8, 3211345, 0, 8, 3145809, 0, 8, 3080273, 0, 8, 3014737, 0, 8, 2949201, 0, 8, 2883665, 0, 8, 2818129, 0, 8, 2752593, 0, 8, 4915280, 0, 8, 4849744, 0, 8, 4784208, 0, 8, 4718672, 0, 8, 4653136, 0, 8, 4587600, 0, 8, 4522064, 0, 8, 4456528, 0, 8, 4390992, 0, 8, 4325456, 0, 8, 4259920, 0, 8, 4194384, 0, 8, 4128848, 0, 8, 4063312, 0, 8, 3997776, 0, 8, 3932240, 0, 8, 3866704, 0, 8, 3801168, 0, 8, 3735632, 0, 8, 3670096, 0, 8, 3604560, 0, 8, 3539024, 0, 8, 3473488, 0, 8, 3407952, 0, 8, 3342416, 0, 8, 3276880, 0, 8, 3211344, 0, 8, 3145808, 0, 8, 3080272, 0, 8, 3014736, 0, 8, 2949200, 0, 8, 2883664, 0, 8, 2818128, 0, 8, 2752592, 0, 8, 4915279, 0, 8, 4849743, 0, 8, 4784207, 0, 8, 4718671, 0, 8, 4653135, 0, 8, 4587599, 0, 8, 4522063, 0, 8, 4456527, 0, 8, 4390991, 0, 8, 4325455, 0, 8, 4259919, 0, 8, 4194383, 0, 8, 4128847, 0, 8, 4063311, 0, 8, 3997775, 0, 8, 3932239, 0, 8, 3866703, 0, 8, 3801167, 0, 8, 3735631, 0, 8, 3670095, 0, 8, 3604559, 0, 8, 3539023, 0, 8, 3473487, 0, 8, 3407951, 0, 8, 3342415, 0, 8, 3276879, 0, 8, 3211343, 0, 8, 3145807, 0, 8, 3080271, 0, 8, 3014735, 0, 8, 2949199, 0, 8, 2883663, 0, 8, 2818127, 0, 8, 2752591, 0, 8, 4915278, 0, 8, 4849742, 0, 8, 4784206, 0, 8, 4718670, 0, 8, 4653134, 0, 8, 4587598, 0, 8, 4522062, 0, 8, 4456526, 0, 8, 4390990, 0, 8, 4325454, 0, 8, 4259918, 0, 8, 4194382, 0, 8, 4128846, 0, 8, 4063310, 0, 8, 3997774, 0, 8, 3932238, 0, 8, 3866702, 0, 8, 3801166, 0, 8, 3735630, 0, 8, 3670094, 0, 8, 3604558, 0, 8, 3539022, 0, 8, 3473486, 0, 8, 3407950, 0, 8, 3342414, 0, 8, 3276878, 0, 8, 3211342, 0, 8, 3145806, 0, 8, 3080270, 0, 8, 3014734, 0, 8, 2949198, 0, 8, 2883662, 0, 8, 2818126, 0, 8, 2752590, 0, 8, 4915277, 0, 8, 4849741, 0, 8, 4784205, 0, 8, 4718669, 0, 8, 4653133, 0, 8, 4587597, 0, 8, 4522061, 0, 8, 4456525, 0, 8, 4390989, 0, 8, 4325453, 0, 8, 4259917, 0, 8, 4194381, 0, 8, 4128845, 0, 8, 4063309, 0, 8, 3997773, 0, 8, 3932237, 0, 8, 3866701, 0, 8, 3801165, 0, 8, 3735629, 0, 8, 3670093, 0, 8, 3604557, 0, 8, 3539021, 0, 8, 3473485, 0, 8, 3407949, 0, 8, 3342413, 0, 8, 3276877, 0, 8, 3211341, 0, 8, 3145805, 0, 8, 3080269, 0, 8, 3014733, 0, 8, 2949197, 0, 8, 2883661, 0, 8, 2818125, 0, 8, 2752589, 0, 8, 4915276, 0, 8, 4849740, 0, 8, 4784204, 0, 8, 4718668, 0, 8, 4653132, 0, 8, 4587596, 0, 8, 4522060, 0, 8, 4456524, 0, 8, 4390988, 0, 8, 4325452, 0, 8, 4259916, 0, 8, 4194380, 0, 8, 4128844, 0, 8, 4063308, 0, 8, 3997772, 0, 8, 3932236, 0, 8, 3866700, 0, 8, 3801164, 0, 8, 3735628, 0, 8, 3670092, 0, 8, 3604556, 0, 8, 3539020, 0, 8, 3473484, 0, 8, 3407948, 0, 8, 3342412, 0, 8, 3276876, 0, 8, 3211340, 0, 8, 3145804, 0, 8, 3080268, 0, 8, 3014732, 0, 8, 2949196, 0, 8, 2883660, 0, 8, 2818124, 0, 8, 2752588, 0, 8, 4915275, 0, 8, 4849739, 0, 8, 4784203, 0, 8, 4718667, 0, 8, 4653131, 0, 8, 4587595, 0, 8, 4522059, 0, 8, 4456523, 0, 8, 4390987, 0, 8, 4325451, 0, 8, 4259915, 0, 8, 4194379, 0, 8, 4128843, 0, 8, 4063307, 0, 8, 3997771, 0, 8, 3932235, 0, 8, 3866699, 0, 8, 3801163, 0, 8, 3735627, 0, 8, 3670091, 0, 8, 3604555, 0, 8, 3539019, 0, 8, 3473483, 0, 8, 3407947, 0, 8, 3342411, 0, 8, 3276875, 0, 8, 3211339, 0, 8, 3145803, 0, 8, 3080267, 0, 8, 3014731, 0, 8, 2949195, 0, 8, 2883659, 0, 8, 2818123, 0, 8, 2752587, 0, 8, 4915274, 0, 8, 4849738, 0, 8, 4784202, 0, 8, 4718666, 0, 8, 4653130, 0, 8, 4587594, 0, 8, 4522058, 0, 8, 4456522, 0, 8, 4390986, 0, 8, 4325450, 0, 8, 4259914, 0, 8, 4194378, 0, 8, 4128842, 0, 8, 4063306, 0, 8, 3997770, 0, 8, 3932234, 0, 8, 3866698, 0, 8, 3801162, 0, 8, 3735626, 0, 8, 3670090, 0, 8, 3604554, 0, 8, 3539018, 0, 8, 3473482, 0, 8, 3407946, 0, 8, 3342410, 0, 8, 3276874, 0, 8, 3211338, 0, 8, 3145802, 0, 8, 3080266, 0, 8, 3014730, 0, 8, 2949194, 0, 8, 2883658, 0, 8, 2818122, 0, 8, 2752586, 0, 8, 4915273, 0, 8, 4849737, 0, 8, 4784201, 0, 8, 4718665, 0, 8, 4653129, 0, 8, 4587593, 0, 8, 4522057, 0, 8, 4456521, 0, 8, 4390985, 0, 8, 4325449, 0, 8, 4259913, 0, 8, 4194377, 0, 8, 4128841, 0, 8, 4063305, 0, 8, 3997769, 0, 8, 3932233, 0, 8, 3866697, 0, 8, 3801161, 0, 8, 3735625, 0, 8, 3670089, 0, 8, 3604553, 0, 8, 3539017, 0, 8, 3473481, 0, 8, 3407945, 0, 8, 3342409, 0, 8, 3276873, 0, 8, 3211337, 0, 8, 3145801, 0, 8, 3080265, 0, 8, 3014729, 0, 8, 2949193, 0, 8, 2883657, 0, 8, 2818121, 0, 8, 2752585, 0, 8, 4915272, 0, 8, 4849736, 0, 8, 4784200, 0, 8, 4718664, 0, 8, 4653128, 0, 8, 4587592, 0, 8, 4522056, 0, 8, 4456520, 0, 8, 4390984, 0, 8, 4325448, 0, 8, 4259912, 0, 8, 4194376, 0, 8, 4128840, 0, 8, 4063304, 0, 8, 3997768, 0, 8, 3932232, 0, 8, 3866696, 0, 8, 3801160, 0, 8, 3735624, 0, 8, 3670088, 0, 8, 3604552, 0, 8, 3539016, 0, 8, 3473480, 0, 8, 3407944, 0, 8, 3342408, 0, 8, 3276872, 0, 8, 3211336, 0, 8, 3145800, 0, 8, 3080264, 0, 8, 3014728, 0, 8, 2949192, 0, 8, 2883656, 0, 8, 2818120, 0, 8, 2752584, 0, 8, 4915271, 0, 8, 4849735, 0, 8, 4784199, 0, 8, 4718663, 0, 8, 4653127, 0, 8, 4587591, 0, 8, 4522055, 0, 8, 4456519, 0, 8, 4390983, 0, 8, 4325447, 0, 8, 4259911, 0, 8, 4194375, 0, 8, 4128839, 0, 8, 4063303, 0, 8, 3997767, 0, 8, 3932231, 0, 8, 3866695, 0, 8, 3801159, 0, 8, 3735623, 0, 8, 3670087, 0, 8, 3604551, 0, 8, 3539015, 0, 8, 3473479, 0, 8, 3407943, 0, 8, 3342407, 0, 8, 3276871, 0, 8, 3211335, 0, 8, 3145799, 0, 8, 3080263, 0, 8, 3014727, 0, 8, 2949191, 0, 8, 2883655, 0, 8, 2818119, 0, 8, 2752583, 0, 8, 4915270, 0, 8, 4849734, 0, 8, 4784198, 0, 8, 4718662, 0, 8, 4653126, 0, 8, 4587590, 0, 8, 4522054, 0, 8, 4456518, 0, 8, 4390982, 0, 8, 4325446, 0, 8, 4259910, 0, 8, 4194374, 0, 8, 4128838, 0, 8, 4063302, 0, 8, 3997766, 0, 8, 3932230, 0, 8, 3866694, 0, 8, 3801158, 0, 8, 3735622, 0, 8, 3670086, 0, 8, 3604550, 0, 8, 3539014, 0, 8, 3473478, 0, 8, 3407942, 0, 8, 3342406, 0, 8, 3276870, 0, 8, 3211334, 0, 8, 3145798, 0, 8, 3080262, 0, 8, 4915269, 0, 8, 4849733, 0, 8, 4784197, 0, 8, 4718661, 0, 8, 4653125, 0, 8, 4587589, 0, 8, 4522053, 0, 8, 4456517, 0, 8, 4390981, 0, 8, 4325445, 0, 8, 4259909, 0, 8, 4194373, 0, 8, 4128837, 0, 8, 4063301, 0, 8, 3997765, 0, 8, 3932229, 0, 8, 3866693, 0, 8, 3801157, 0, 8, 3735621, 0, 8, 3670085, 0, 8, 3604549, 0, 8, 3539013, 0, 8, 3473477, 0, 8, 3407941, 0, 8, 3342405, 0, 8, 3276869, 0, 8, 3211333, 0, 8, 3145797, 0, 8, 3080261, 0, 8, 4915268, 0, 8, 4849732, 0, 8, 4784196, 0, 8, 4718660, 0, 8, 4653124, 0, 8, 4587588, 0, 8, 4522052, 0, 8, 4456516, 0, 8, 4390980, 0, 8, 4325444, 0, 8, 4259908, 0, 8, 4194372, 0, 8, 4128836, 0, 8, 4063300, 0, 8, 3997764, 0, 8, 3932228, 0, 8, 3866692, 0, 8, 3801156, 0, 8, 3735620, 0, 8, 3670084, 0, 8, 3604548, 0, 8, 3539012, 0, 8, 3473476, 0, 8, 3407940, 0, 8, 3342404, 0, 8, 3276868, 0, 8, 3211332, 0, 8, 3145796, 0, 8, 3080260, 0, 8, 4915267, 0, 8, 4849731, 0, 8, 4784195, 0, 8, 4718659, 0, 8, 4653123, 0, 8, 4587587, 0, 8, 4522051, 0, 8, 4456515, 0, 8, 4390979, 0, 8, 4325443, 0, 8, 4259907, 0, 8, 4194371, 0, 8, 4128835, 0, 8, 4063299, 0, 8, 3997763, 0, 8, 3932227, 0, 8, 3866691, 0, 8, 3801155, 0, 8, 3735619, 0, 8, 3670083, 0, 8, 3604547, 0, 8, 3539011, 0, 8, 3473475, 0, 8, 3407939, 0, 8, 3342403, 0, 8, 3276867, 0, 8, 3211331, 0, 8, 3145795, 0, 8, 3080259, 0, 8, 4915266, 0, 8, 4849730, 0, 8, 4784194, 0, 8, 4718658, 0, 8, 4653122, 0, 8, 4587586, 0, 8, 4522050, 0, 8, 4456514, 0, 8, 4390978, 0, 8, 4325442, 0, 8, 4259906, 0, 8, 4194370, 0, 8, 4128834, 0, 8, 4063298, 0, 8, 3997762, 0, 8, 3932226, 0, 8, 3866690, 0, 8, 3801154, 0, 8, 3735618, 0, 8, 3670082, 0, 8, 3604546, 0, 8, 3539010, 0, 8, 3473474, 0, 8, 3407938, 0, 8, 3342402, 0, 8, 3276866, 0, 8, 3211330, 0, 8, 3145794, 0, 8, 3080258, 0, 8, 4915265, 0, 8, 4849729, 0, 8, 4784193, 0, 8, 4718657, 0, 8, 4653121, 0, 8, 4587585, 0, 8, 4522049, 0, 8, 4456513, 0, 8, 4390977, 0, 8, 4325441, 0, 8, 4259905, 0, 8, 4194369, 0, 8, 4128833, 0, 8, 4063297, 0, 8, 3997761, 0, 8, 3932225, 0, 8, 3866689, 0, 8, 3801153, 0, 8, 3735617, 0, 8, 3670081, 0, 8, 3604545, 0, 8, 3539009, 0, 8, 3473473, 0, 8, 3407937, 0, 8, 3342401, 0, 8, 3276865, 0, 8, 3211329, 0, 8, 3145793, 0, 8, 3080257, 0, 8, 4915264, 0, 8, 4849728, 0, 8, 4784192, 0, 8, 4718656, 0, 8, 4653120, 0, 8, 4587584, 0, 8, 4522048, 0, 8, 4456512, 0, 8, 4390976, 0, 8, 4325440, 0, 8, 4259904, 0, 8, 4194368, 0, 8, 4128832, 0, 8, 4063296, 0, 8, 3997760, 0, 8, 3932224, 0, 8, 3866688, 0, 8, 3801152, 0, 8, 3735616, 0, 8, 3670080, 0, 8, 3604544, 0, 8, 3539008, 0, 8, 3473472, 0, 8, 3407936, 0, 8, 3342400, 0, 8, 3276864, 0, 8, 3211328, 0, 8, 3145792, 0, 8, 3080256, 0, 8, 4915263, 0, 8, 4849727, 0, 8, 4784191, 0, 8, 4718655, 0, 8, 4653119, 0, 8, 4587583, 0, 8, 4522047, 0, 8, 4456511, 0, 8, 4390975, 0, 8, 4325439, 0, 8, 4259903, 0, 8, 4194367, 0, 8, 4128831, 0, 8, 4063295, 0, 8, 3997759, 0, 8, 3932223, 0, 8, 3866687, 0, 8, 3801151, 0, 8, 3735615, 0, 8, 3670079, 0, 8, 3604543, 0, 8, 3539007, 0, 8, 3473471, 0, 8, 3407935, 0, 8, 3342399, 0, 8, 3276863, 0, 8, 3211327, 0, 8, 3145791, 0, 8, 3080255, 0, 8, 4915262, 0, 8, 4849726, 0, 8, 4784190, 0, 8, 4718654, 0, 8, 4653118, 0, 8, 4587582, 0, 8, 4522046, 0, 8, 4456510, 0, 8, 4390974, 0, 8, 4325438, 0, 8, 4259902, 0, 8, 4194366, 0, 8, 4128830, 0, 8, 4063294, 0, 8, 3997758, 0, 8, 3932222, 0, 8, 3866686, 0, 8, 3801150, 0, 8, 3735614, 0, 8, 3670078, 0, 8, 3604542, 0, 8, 3539006, 0, 8, 3473470, 0, 8, 3407934, 0, 8, 3342398, 0, 8, 3276862, 0, 8, 3211326, 0, 8, 3145790, 0, 8, 3080254, 0, 8, 4915261, 0, 8, 4849725, 0, 8, 4784189, 0, 8, 4718653, 0, 8, 4653117, 0, 8, 4587581, 0, 8, 4522045, 0, 8, 4456509, 0, 8, 4390973, 0, 8, 4325437, 0, 8, 4259901, 0, 8, 4194365, 0, 8, 4128829, 0, 8, 4063293, 0, 8, 3997757, 0, 8, 3932221, 0, 8, 3866685, 0, 8, 3801149, 0, 8, 3735613, 0, 8, 3670077, 0, 8, 3604541, 0, 8, 3539005, 0, 8, 3473469, 0, 8, 3407933, 0, 8, 3342397, 0, 8, 3276861, 0, 8, 3211325, 0, 8, 3145789, 0, 8, 3080253, 0, 8, 4915260, 0, 8, 4849724, 0, 8, 4784188, 0, 8, 4718652, 0, 8, 4653116, 0, 8, 4587580, 0, 8, 4522044, 0, 8, 4456508, 0, 8, 4390972, 0, 8, 4325436, 0, 8, 4259900, 0, 8, 4194364, 0, 8, 4128828, 0, 8, 4063292, 0, 8, 3997756, 0, 8, 3932220, 0, 8, 3866684, 0, 8, 3801148, 0, 8, 3735612, 0, 8, 3670076, 0, 8, 3604540, 0, 8, 3539004, 0, 8, 3473468, 0, 8, 3407932, 0, 8, 3342396, 0, 8, 3276860, 0, 8, 3211324, 0, 8, 3145788, 0, 8, 3080252, 0, 8, 4915259, 0, 8, 4849723, 0, 8, 4784187, 0, 8, 4718651, 0, 8, 4653115, 0, 8, 4587579, 0, 8, 4522043, 0, 8, 4456507, 0, 8, 4390971, 0, 8, 4325435, 0, 8, 4259899, 0, 8, 4194363, 0, 8, 4128827, 0, 8, 4063291, 0, 8, 3997755, 0, 8, 3932219, 0, 8, 3866683, 0, 8, 3801147, 0, 8, 3735611, 0, 8, 3670075, 0, 8, 3604539, 0, 8, 3539003, 0, 8, 3473467, 0, 8, 3407931, 0, 8, 3342395, 0, 8, 3276859, 0, 8, 3211323, 0, 8, 3145787, 0, 8, 3080251, 0, 8, 3080250, 196608, 3, 3145786, 196608, 3, 3211322, 196608, 3, 3276858, 196608, 3, 3342394, 196608, 3, 3407930, 196608, 3, 3473466, 196608, 3, 3539002, 196608, 3, 3604538, 196608, 3, 3670074, 196608, 3, 3735610, 196608, 3, 3801146, 196608, 3, 3866682, 196608, 3, 3932218, 196608, 3, 3997754, 196608, 3, 4063290, 196608, 3, 4128826, 196608, 3, 4194362, 196608, 3, 4259898, 196608, 3, 4325434, 196608, 3, 4390970, 196608, 3, 4456506, 196608, 3, 4522042, 196608, 3, 4587578, 196608, 3, 4653114, 196608, 3, 4718650, 196608, 7, 4784186, 0, 8, 4849722, 0, 8, 4915258, 0, 8, 4980796, 0, 8, 4980794, 0, 8, 4980797, 0, 8, 4980795, 0, 8, 4980798, 0, 8, 4980799, 0, 8, 4980800, 0, 8, 4980801, 0, 8, 4980802, 65536, 2, 4980803, 131072, 2, 4980804, 131072, 2, 4980805, 131072, 2, 4980806, 131072, 2, 2687047, 131072, 7, 4980807, 131072, 2, 2687048, 131072, 7, 4980808, 131072, 2, 2687049, 131072, 7, 4980809, 131072, 2, 2687050, 131072, 7, 4980810, 131072, 2, 2687051, 131072, 7, 4980811, 131072, 2, 2687052, 131072, 7, 4980812, 131072, 2, 2687053, 131072, 7, 4980813, 131072, 2, 2687054, 131072, 7, 4980814, 196608, 2, 2687055, 131072, 7, 4980815, 0, 8, 2687056, 131072, 7, 4980816, 0, 8, 2687057, 131072, 7, 4980817, 0, 8, 2687058, 131072, 7, 4980818, 0, 8, 2687059, 131072, 7, 4980819, 0, 8, 2687060, 131072, 7, 4980820, 0, 8, 2687061, 196608, 7, 4980821, 0, 8, 2687062, 0, 8, 4980822, 0, 8, 2687063, 0, 8, 4980823, 0, 8, 2687064, 0, 8, 4980824, 0, 8, 2818137, 0, 8, 2687065, 0, 8, 2883673, 0, 8, 2752601, 0, 8, 2949209, 0, 8, 3014745, 0, 8, 3080281, 0, 8, 3145817, 0, 8, 3211353, 0, 8, 3276889, 0, 8, 3342425, 0, 8, 3407961, 0, 8, 3473497, 0, 8, 3539033, 0, 8, 3604569, 0, 8, 4522073, 0, 8, 4587609, 0, 8, 4653145, 0, 8, 4718681, 0, 8, 4784217, 0, 8, 4849753, 0, 8, 4915289, 0, 8, 4980825, 0, 8, 589888, 196608, 4, 589890, 0, 8, 589889, 196608, 7, 589891, 0, 8, 1376353, 0, 8, 1310817, 0, 8, 1245281, 0, 8, 1179745, 0, 8, 1114209, 0, 8, 1048673, 0, 8, 983137, 0, 8, 917601, 0, 8, 852065, 0, 8, 786529, 0, 8, 720993, 0, 8, 655457, 0, 8, 589921, 0, 8, 524385, 0, 8, 458849, 0, 8, 393313, 0, 8, 327777, 0, 8, 262241, 0, 8, 196705, 0, 8, 131169, 0, 8, 1376352, 0, 8, 1310816, 0, 8, 1245280, 0, 8, 1179744, 0, 8, 1114208, 0, 8, 1048672, 0, 8, 983136, 0, 8, 917600, 0, 8, 852064, 0, 8, 786528, 0, 8, 720992, 0, 8, 655456, 0, 8, 589920, 0, 8, 524384, 0, 8, 458848, 0, 8, 393312, 0, 8, 327776, 0, 8, 262240, 0, 8, 196704, 0, 8, 131168, 0, 8, 1376351, 0, 8, 1310815, 0, 8, 1245279, 0, 8, 1179743, 0, 8, 1114207, 0, 8, 1048671, 0, 8, 983135, 0, 8, 917599, 0, 8, 852063, 0, 8, 786527, 0, 8, 720991, 0, 8, 655455, 0, 8, 589919, 0, 8, 524383, 0, 8, 458847, 0, 8, 393311, 0, 8, 327775, 0, 8, 262239, 0, 8, 196703, 0, 8, 131167, 0, 8, 1376350, 0, 8, 1310814, 0, 8, 1245278, 0, 8, 1179742, 0, 8, 1114206, 0, 8, 1048670, 0, 8, 983134, 0, 8, 917598, 0, 8, 852062, 0, 8, 786526, 0, 8, 720990, 0, 8, 655454, 0, 8, 589918, 0, 8, 524382, 0, 8, 458846, 0, 8, 393310, 0, 8, 327774, 0, 8, 262238, 0, 8, 196702, 0, 8, 131166, 0, 8, 1376349, 0, 8, 1310813, 0, 8, 1245277, 0, 8, 1179741, 0, 8, 1114205, 0, 8, 1048669, 0, 8, 983133, 0, 8, 917597, 0, 8, 852061, 0, 8, 786525, 0, 8, 720989, 0, 8, 655453, 0, 8, 589917, 0, 8, 524381, 0, 8, 458845, 0, 8, 393309, 0, 8, 327773, 0, 8, 262237, 0, 8, 196701, 0, 8, 131165, 0, 8, 1376348, 0, 8, 1310812, 0, 8, 1245276, 0, 8, 1179740, 0, 8, 1114204, 0, 8, 1048668, 0, 8, 983132, 0, 8, 917596, 0, 8, 852060, 0, 8, 786524, 0, 8, 720988, 0, 8, 655452, 0, 8, 589916, 0, 8, 524380, 0, 8, 458844, 0, 8, 393308, 0, 8, 327772, 0, 8, 262236, 0, 8, 196700, 0, 8, 131164, 0, 8, 1376347, 0, 8, 1310811, 0, 8, 1245275, 0, 8, 1179739, 0, 8, 1114203, 0, 8, 1048667, 0, 8, 983131, 0, 8, 917595, 0, 8, 852059, 0, 8, 786523, 0, 8, 720987, 0, 8, 655451, 0, 8, 589915, 0, 8, 524379, 0, 8, 458843, 0, 8, 393307, 0, 8, 327771, 0, 8, 262235, 0, 8, 196699, 0, 8, 131163, 0, 8, 1376346, 0, 8, 1310810, 0, 8, 1245274, 0, 8, 1179738, 0, 8, 1114202, 0, 8, 1048666, 0, 8, 983130, 0, 8, 917594, 0, 8, 852058, 0, 8, 786522, 0, 8, 720986, 0, 8, 655450, 0, 8, 589914, 0, 8, 524378, 0, 8, 458842, 0, 8, 393306, 0, 8, 327770, 0, 8, 262234, 0, 8, 196698, 0, 8, 131162, 0, 8, 1376345, 0, 8, 1310809, 0, 8, 1245273, 0, 8, 1179737, 0, 8, 1114201, 0, 8, 1048665, 0, 8, 983129, 0, 8, 917593, 0, 8, 852057, 0, 8, 786521, 0, 8, 720985, 0, 8, 655449, 0, 8, 589913, 0, 8, 524377, 0, 8, 458841, 0, 8, 393305, 0, 8, 327769, 0, 8, 262233, 0, 8, 196697, 0, 8, 131161, 0, 8, 1376344, 0, 8, 1310808, 0, 8, 1245272, 0, 8, 1179736, 0, 8, 1114200, 0, 8, 1048664, 0, 8, 983128, 0, 8, 917592, 0, 8, 852056, 0, 8, 786520, 0, 8, 720984, 0, 8, 655448, 0, 8, 589912, 0, 8, 524376, 0, 8, 458840, 0, 8, 393304, 0, 8, 327768, 0, 8, 262232, 0, 8, 196696, 0, 8, 131160, 0, 8, 1376343, 0, 8, 1310807, 0, 8, 1245271, 0, 8, 1179735, 0, 8, 1114199, 0, 8, 1048663, 0, 8, 983127, 0, 8, 917591, 0, 8, 852055, 0, 8, 786519, 0, 8, 720983, 0, 8, 655447, 0, 8, 589911, 0, 8, 524375, 0, 8, 458839, 0, 8, 393303, 0, 8, 327767, 0, 8, 262231, 0, 8, 196695, 0, 8, 131159, 0, 8, 1376342, 0, 8, 1310806, 0, 8, 1245270, 0, 8, 1179734, 0, 8, 1114198, 0, 8, 1048662, 0, 8, 983126, 0, 8, 917590, 0, 8, 852054, 0, 8, 786518, 0, 8, 720982, 0, 8, 655446, 0, 8, 589910, 0, 8, 524374, 0, 8, 458838, 0, 8, 393302, 0, 8, 327766, 0, 8, 262230, 0, 8, 196694, 0, 8, 131158, 0, 8, 1376341, 0, 8, 1310805, 0, 8, 1245269, 0, 8, 1179733, 0, 8, 1114197, 0, 8, 1048661, 0, 8, 983125, 0, 8, 917589, 0, 8, 852053, 0, 8, 786517, 0, 8, 720981, 0, 8, 655445, 0, 8, 589909, 0, 8, 524373, 0, 8, 458837, 0, 8, 393301, 0, 8, 327765, 0, 8, 262229, 0, 8, 196693, 0, 8, 131157, 0, 8, 1376340, 0, 8, 1310804, 0, 8, 1245268, 0, 8, 1179732, 0, 8, 1114196, 0, 8, 1048660, 0, 8, 983124, 0, 8, 917588, 0, 8, 852052, 0, 8, 786516, 0, 8, 720980, 0, 8, 655444, 0, 8, 589908, 0, 8, 524372, 0, 8, 458836, 0, 8, 393300, 0, 8, 327764, 0, 8, 262228, 0, 8, 196692, 0, 8, 131156, 0, 8, 1376339, 0, 8, 1310803, 0, 8, 1245267, 0, 8, 1179731, 0, 8, 1114195, 0, 8, 1048659, 0, 8, 983123, 0, 8, 917587, 0, 8, 852051, 0, 8, 786515, 0, 8, 720979, 0, 8, 655443, 0, 8, 589907, 0, 8, 524371, 0, 8, 458835, 0, 8, 393299, 0, 8, 327763, 0, 8, 262227, 0, 8, 196691, 0, 8, 131155, 0, 8, 1376338, 0, 8, 1310802, 0, 8, 1245266, 0, 8, 1179730, 0, 8, 1114194, 0, 8, 1048658, 0, 8, 983122, 0, 8, 917586, 0, 8, 852050, 0, 8, 786514, 0, 8, 720978, 0, 8, 655442, 0, 8, 589906, 0, 8, 524370, 0, 8, 458834, 0, 8, 393298, 0, 8, 327762, 0, 8, 262226, 0, 8, 196690, 0, 8, 131154, 0, 8, 1376337, 0, 8, 1310801, 0, 8, 1245265, 0, 8, 1179729, 0, 8, 1114193, 0, 8, 1048657, 0, 8, 983121, 0, 8, 917585, 0, 8, 852049, 0, 8, 786513, 0, 8, 720977, 0, 8, 655441, 0, 8, 589905, 0, 8, 524369, 0, 8, 458833, 0, 8, 393297, 0, 8, 327761, 0, 8, 262225, 0, 8, 196689, 0, 8, 131153, 0, 8, 1376336, 0, 8, 1310800, 0, 8, 1245264, 0, 8, 1179728, 0, 8, 1114192, 0, 8, 1048656, 0, 8, 983120, 0, 8, 917584, 0, 8, 852048, 0, 8, 786512, 0, 8, 720976, 0, 8, 655440, 0, 8, 589904, 0, 8, 524368, 0, 8, 458832, 0, 8, 393296, 0, 8, 327760, 0, 8, 262224, 0, 8, 196688, 0, 8, 131152, 0, 8, 1376335, 0, 8, 1310799, 0, 8, 1245263, 0, 8, 1179727, 0, 8, 1114191, 0, 8, 1048655, 0, 8, 983119, 0, 8, 917583, 0, 8, 852047, 0, 8, 786511, 0, 8, 720975, 0, 8, 655439, 0, 8, 589903, 0, 8, 524367, 0, 8, 458831, 0, 8, 393295, 0, 8, 327759, 0, 8, 262223, 0, 8, 196687, 0, 8, 131151, 0, 8, 1376334, 0, 8, 1310798, 0, 8, 1245262, 0, 8, 1179726, 0, 8, 1114190, 0, 8, 1048654, 0, 8, 983118, 0, 8, 917582, 0, 8, 852046, 0, 8, 786510, 0, 8, 720974, 0, 8, 655438, 0, 8, 589902, 0, 8, 524366, 0, 8, 458830, 0, 8, 393294, 0, 8, 327758, 0, 8, 262222, 0, 8, 196686, 0, 8, 131150, 0, 8, 1376333, 0, 8, 1310797, 0, 8, 1245261, 0, 8, 1179725, 0, 8, 1114189, 0, 8, 1048653, 0, 8, 983117, 0, 8, 917581, 0, 8, 852045, 0, 8, 786509, 0, 8, 720973, 0, 8, 655437, 0, 8, 589901, 0, 8, 524365, 0, 8, 458829, 0, 8, 393293, 0, 8, 327757, 0, 8, 262221, 0, 8, 196685, 0, 8, 131149, 0, 8, 1376332, 0, 8, 1310796, 0, 8, 1245260, 0, 8, 1179724, 0, 8, 1114188, 0, 8, 1048652, 0, 8, 983116, 0, 8, 917580, 0, 8, 852044, 0, 8, 786508, 0, 8, 720972, 0, 8, 655436, 0, 8, 589900, 0, 8, 524364, 0, 8, 458828, 0, 8, 393292, 0, 8, 327756, 0, 8, 262220, 0, 8, 196684, 0, 8, 131148, 0, 8, 1376331, 0, 8, 1310795, 0, 8, 1245259, 0, 8, 1179723, 0, 8, 1114187, 0, 8, 1048651, 0, 8, 983115, 0, 8, 917579, 0, 8, 852043, 0, 8, 786507, 0, 8, 720971, 0, 8, 655435, 0, 8, 589899, 0, 8, 524363, 0, 8, 458827, 0, 8, 393291, 0, 8, 327755, 0, 8, 262219, 0, 8, 196683, 0, 8, 131147, 0, 8, 1376330, 0, 8, 1310794, 0, 8, 1245258, 0, 8, 1179722, 0, 8, 1114186, 0, 8, 1048650, 0, 8, 983114, 0, 8, 917578, 0, 8, 852042, 0, 8, 786506, 0, 8, 720970, 0, 8, 655434, 0, 8, 589898, 0, 8, 524362, 0, 8, 458826, 0, 8, 393290, 0, 8, 327754, 0, 8, 262218, 0, 8, 196682, 0, 8, 131146, 0, 8, 1376329, 0, 8, 1310793, 0, 8, 1245257, 0, 8, 1179721, 0, 8, 1114185, 0, 8, 1048649, 0, 8, 983113, 0, 8, 917577, 0, 8, 852041, 0, 8, 786505, 0, 8, 720969, 0, 8, 655433, 0, 8, 589897, 0, 8, 524361, 0, 8, 458825, 0, 8, 393289, 0, 8, 327753, 0, 8, 262217, 0, 8, 196681, 0, 8, 131145, 0, 8, 1376328, 0, 8, 1310792, 0, 8, 1245256, 0, 8, 1179720, 0, 8, 1114184, 0, 8, 1048648, 0, 8, 983112, 0, 8, 917576, 0, 8, 852040, 0, 8, 786504, 0, 8, 720968, 0, 8, 655432, 0, 8, 589896, 0, 8, 524360, 0, 8, 458824, 0, 8, 393288, 0, 8, 327752, 0, 8, 262216, 0, 8, 196680, 0, 8, 131144, 0, 8, 1376327, 0, 8, 1310791, 0, 8, 1245255, 0, 8, 1179719, 0, 8, 1114183, 0, 8, 1048647, 0, 8, 983111, 0, 8, 917575, 0, 8, 852039, 0, 8, 786503, 0, 8, 720967, 0, 8, 655431, 0, 8, 589895, 0, 8, 524359, 0, 8, 458823, 0, 8, 393287, 0, 8, 327751, 0, 8, 262215, 0, 8, 196679, 0, 8, 131143, 0, 8, 589894, 0, 8, 524358, 0, 8, 458822, 0, 8, 393286, 0, 8, 327750, 0, 8, 262214, 0, 8, 196678, 0, 8, 131142, 0, 8, 589893, 0, 8, 524357, 0, 8, 458821, 0, 8, 393285, 0, 8, 327749, 0, 8, 262213, 0, 8, 196677, 0, 8, 131141, 0, 8, 589892, 0, 8, 524356, 0, 8, 458820, 0, 8, 393284, 0, 8, 327748, 0, 8, 262212, 0, 8, 196676, 0, 8, 131140, 0, 8, 524355, 0, 8, 458819, 0, 8, 393283, 0, 8, 327747, 0, 8, 262211, 0, 8, 196675, 0, 8, 131139, 0, 8, 524354, 0, 8, 458818, 0, 8, 393282, 0, 8, 327746, 0, 8, 262210, 0, 8, 196674, 0, 8, 131138, 0, 8, 196673, 196608, 3, 65601, 196608, 4, 65603, 131072, 7, 262209, 196608, 3, 131137, 196608, 3, 327745, 196608, 3, 393281, 196608, 3, 458817, 196608, 3, 524353, 196608, 3, 65602, 131072, 7, 65604, 131072, 7, 65605, 131072, 7, 65606, 131072, 7, 65607, 131072, 7, 1441863, 131072, 2, 65608, 131072, 7, 1441864, 131072, 2, 65609, 131072, 7, 1441865, 131072, 2, 65610, 131072, 7, 1441866, 131072, 2, 65611, 131072, 7, 1441867, 131072, 2, 65612, 131072, 7, 1441868, 131072, 2, 65613, 131072, 7, 1441869, 131072, 2, 65614, 131072, 7, 1441870, 131072, 2, 65615, 131072, 7, 1441871, 131072, 2, 65616, 131072, 7, 1441872, 131072, 2, 65617, 131072, 7, 1441873, 131072, 2, 65618, 131072, 7, 1441874, 131072, 2, 65619, 131072, 7, 1441875, 131072, 2, 65620, 131072, 7, 1441876, 131072, 2, 65621, 131072, 7, 1441877, 196608, 2, 65622, 131072, 7, 1441878, 0, 8, 65623, 131072, 7, 1441879, 0, 8, 65624, 131072, 7, 1441880, 0, 8, 65625, 131072, 7, 1441881, 0, 8, 65626, 131072, 7, 1441882, 0, 8, 65627, 131072, 7, 1441883, 0, 8, 65628, 131072, 7, 1441884, 0, 8, 65629, 131072, 7, 1441885, 0, 8, 65630, 131072, 7, 1441886, 0, 8, 65631, 131072, 7, 1441887, 0, 8, 65632, 131072, 7, 1441888, 0, 8, 65633, 131072, 7, 1441889, 0, 8, 196706, 65536, 3, 65634, 65536, 4, 262242, 65536, 3, 131170, 65536, 3, 327778, 65536, 3, 393314, 65536, 3, 458850, 65536, 3, 524386, 65536, 3, 589922, 65536, 3, 655458, 65536, 3, 720994, 65536, 3, 786530, 65536, 3, 852066, 65536, 7, 917602, 0, 8, 983138, 0, 8, 1048674, 0, 8, 1114210, 0, 8, 1179746, 0, 8, 1245282, 0, 8, 1310818, 0, 8, 1376354, 0, 8, 1441890, 0, 8, 3539069, 0, 8, 3473533, 0, 8, 3407997, 0, 8, 3342461, 0, 8, 3276925, 0, 8, 3211389, 0, 8, 3145853, 0, 8, 3080317, 0, 8, 3014781, 0, 8, 2949245, 0, 8, 2883709, 0, 8, 2818173, 0, 8, 2752637, 0, 8, 2687101, 0, 8, 2621565, 0, 8, 2556029, 0, 8, 2490493, 0, 8, 2424957, 0, 8, 2359421, 0, 8, 2293885, 0, 8, 2228349, 0, 8, 2162813, 0, 8, 2097277, 0, 8, 2031741, 0, 8, 1966205, 0, 8, 1900669, 0, 8, 1835133, 0, 8, 1769597, 0, 8, 1704061, 0, 8, 1638525, 0, 8, 1572989, 0, 8, 1507453, 0, 8, 1441917, 0, 8, 1376381, 0, 8, 1310845, 0, 8, 1245309, 0, 8, 1179773, 0, 8, 1114237, 0, 8, 1048701, 0, 8, 983165, 0, 8, 917629, 0, 8, 3539068, 0, 8, 3473532, 0, 8, 3407996, 0, 8, 3342460, 0, 8, 3276924, 0, 8, 3211388, 0, 8, 3145852, 0, 8, 3080316, 0, 8, 3014780, 0, 8, 2949244, 0, 8, 2883708, 0, 8, 2818172, 0, 8, 2752636, 0, 8, 2687100, 0, 8, 2621564, 0, 8, 2556028, 0, 8, 2490492, 0, 8, 2424956, 0, 8, 2359420, 0, 8, 2293884, 0, 8, 2228348, 0, 8, 2162812, 0, 8, 2097276, 0, 8, 2031740, 0, 8, 1966204, 0, 8, 1900668, 0, 8, 1835132, 0, 8, 1769596, 0, 8, 1704060, 0, 8, 1638524, 0, 8, 1572988, 0, 8, 1507452, 0, 8, 1441916, 0, 8, 1376380, 0, 8, 1310844, 0, 8, 1245308, 0, 8, 1179772, 0, 8, 1114236, 0, 8, 1048700, 0, 8, 983164, 0, 8, 917628, 0, 8, 3539067, 0, 8, 3473531, 0, 8, 3407995, 0, 8, 3342459, 0, 8, 3276923, 0, 8, 3211387, 0, 8, 3145851, 0, 8, 3080315, 0, 8, 3014779, 0, 8, 2949243, 0, 8, 2883707, 0, 8, 2818171, 0, 8, 2752635, 0, 8, 2687099, 0, 8, 2621563, 0, 8, 2556027, 0, 8, 2490491, 0, 8, 2424955, 0, 8, 2359419, 0, 8, 2293883, 0, 8, 2228347, 0, 8, 2162811, 0, 8, 2097275, 0, 8, 2031739, 0, 8, 1966203, 0, 8, 1900667, 0, 8, 1835131, 0, 8, 1769595, 0, 8, 1704059, 0, 8, 1638523, 0, 8, 1572987, 0, 8, 1507451, 0, 8, 1441915, 0, 8, 1376379, 0, 8, 1310843, 0, 8, 1245307, 0, 8, 1179771, 0, 8, 1114235, 0, 8, 1048699, 0, 8, 983163, 0, 8, 917627, 0, 8, 3539066, 0, 8, 3473530, 0, 8, 3407994, 0, 8, 3342458, 0, 8, 3276922, 0, 8, 3211386, 0, 8, 3145850, 0, 8, 3080314, 0, 8, 3014778, 0, 8, 2949242, 0, 8, 2883706, 0, 8, 2818170, 0, 8, 2752634, 0, 8, 2687098, 0, 8, 2621562, 0, 8, 2556026, 0, 8, 2490490, 0, 8, 2424954, 0, 8, 2359418, 0, 8, 2293882, 0, 8, 2228346, 0, 8, 2162810, 0, 8, 2097274, 0, 8, 2031738, 0, 8, 1966202, 0, 8, 1900666, 0, 8, 1835130, 0, 8, 1769594, 0, 8, 1704058, 0, 8, 1638522, 0, 8, 1572986, 0, 8, 1507450, 0, 8, 1441914, 0, 8, 1376378, 0, 8, 1310842, 0, 8, 1245306, 0, 8, 1179770, 0, 8, 1114234, 0, 8, 1048698, 0, 8, 983162, 0, 8, 917626, 0, 8, 3539065, 0, 8, 3473529, 0, 8, 3407993, 0, 8, 3342457, 0, 8, 3276921, 0, 8, 3211385, 0, 8, 3145849, 0, 8, 3080313, 0, 8, 3014777, 0, 8, 2949241, 0, 8, 2883705, 0, 8, 2818169, 0, 8, 2752633, 0, 8, 2687097, 0, 8, 2621561, 0, 8, 2556025, 0, 8, 2490489, 0, 8, 2424953, 0, 8, 2359417, 0, 8, 2293881, 0, 8, 2228345, 0, 8, 2162809, 0, 8, 2097273, 0, 8, 2031737, 0, 8, 1966201, 0, 8, 1900665, 0, 8, 1835129, 0, 8, 1769593, 0, 8, 1704057, 0, 8, 1638521, 0, 8, 1572985, 0, 8, 1507449, 0, 8, 1441913, 0, 8, 1376377, 0, 8, 1310841, 0, 8, 1245305, 0, 8, 1179769, 0, 8, 1114233, 0, 8, 1048697, 0, 8, 983161, 0, 8, 917625, 0, 8, 3539064, 0, 8, 3473528, 0, 8, 3407992, 0, 8, 3342456, 0, 8, 3276920, 0, 8, 3211384, 0, 8, 3145848, 0, 8, 3080312, 0, 8, 3014776, 0, 8, 2949240, 0, 8, 2883704, 0, 8, 2818168, 0, 8, 2752632, 0, 8, 2687096, 0, 8, 2621560, 0, 8, 2556024, 0, 8, 2490488, 0, 8, 2424952, 0, 8, 2359416, 0, 8, 2293880, 0, 8, 2228344, 0, 8, 2162808, 0, 8, 2097272, 0, 8, 2031736, 0, 8, 1966200, 0, 8, 1900664, 0, 8, 1835128, 0, 8, 1769592, 0, 8, 1704056, 0, 8, 1638520, 0, 8, 1572984, 0, 8, 1507448, 0, 8, 1441912, 0, 8, 1376376, 0, 8, 1310840, 0, 8, 1245304, 0, 8, 1179768, 0, 8, 1114232, 0, 8, 1048696, 0, 8, 983160, 0, 8, 917624, 0, 8, 3539063, 0, 8, 3473527, 0, 8, 3407991, 0, 8, 3342455, 0, 8, 3276919, 0, 8, 3211383, 0, 8, 3145847, 0, 8, 3080311, 0, 8, 3014775, 0, 8, 2949239, 0, 8, 2883703, 0, 8, 2818167, 0, 8, 2752631, 0, 8, 2687095, 0, 8, 2621559, 0, 8, 2556023, 0, 8, 2490487, 0, 8, 2424951, 0, 8, 2359415, 0, 8, 2293879, 0, 8, 2228343, 0, 8, 2162807, 0, 8, 2097271, 0, 8, 2031735, 0, 8, 1966199, 0, 8, 1900663, 0, 8, 1835127, 0, 8, 1769591, 0, 8, 1704055, 0, 8, 1638519, 0, 8, 1572983, 0, 8, 1507447, 0, 8, 1441911, 0, 8, 1376375, 0, 8, 1310839, 0, 8, 1245303, 0, 8, 1179767, 0, 8, 1114231, 0, 8, 1048695, 0, 8, 983159, 0, 8, 917623, 0, 8, 3539062, 0, 8, 3473526, 0, 8, 3407990, 0, 8, 3342454, 0, 8, 3276918, 0, 8, 3211382, 0, 8, 3145846, 0, 8, 3080310, 0, 8, 3014774, 0, 8, 2949238, 0, 8, 2883702, 0, 8, 2818166, 0, 8, 2752630, 0, 8, 2687094, 0, 8, 2621558, 0, 8, 2556022, 0, 8, 2490486, 0, 8, 2424950, 0, 8, 2359414, 0, 8, 2293878, 0, 8, 2228342, 0, 8, 2162806, 0, 8, 2097270, 0, 8, 2031734, 0, 8, 1966198, 0, 8, 1900662, 0, 8, 1835126, 0, 8, 1769590, 0, 8, 1704054, 0, 8, 1638518, 0, 8, 1572982, 0, 8, 1507446, 0, 8, 1441910, 0, 8, 1376374, 0, 8, 1310838, 0, 8, 1245302, 0, 8, 1179766, 0, 8, 1114230, 0, 8, 1048694, 0, 8, 983158, 0, 8, 917622, 0, 8, 3539061, 0, 8, 3473525, 0, 8, 3407989, 0, 8, 3342453, 0, 8, 3276917, 0, 8, 3211381, 0, 8, 3145845, 0, 8, 3080309, 0, 8, 3014773, 0, 8, 2949237, 0, 8, 2883701, 0, 8, 2818165, 0, 8, 2752629, 0, 8, 2687093, 0, 8, 2621557, 0, 8, 2556021, 0, 8, 2490485, 0, 8, 2424949, 0, 8, 2359413, 0, 8, 2293877, 0, 8, 2228341, 0, 8, 2162805, 0, 8, 2097269, 0, 8, 2031733, 0, 8, 1966197, 0, 8, 1900661, 0, 8, 1835125, 0, 8, 1769589, 0, 8, 1704053, 0, 8, 1638517, 0, 8, 1572981, 0, 8, 1507445, 0, 8, 1441909, 0, 8, 1376373, 0, 8, 1310837, 0, 8, 1245301, 0, 8, 1179765, 0, 8, 1114229, 0, 8, 1048693, 0, 8, 983157, 0, 8, 917621, 0, 8, 3539060, 0, 8, 3473524, 0, 8, 3407988, 0, 8, 3342452, 0, 8, 3276916, 0, 8, 3211380, 0, 8, 3145844, 0, 8, 3080308, 0, 8, 3014772, 0, 8, 2949236, 0, 8, 2883700, 0, 8, 2818164, 0, 8, 2752628, 0, 8, 2687092, 0, 8, 2621556, 0, 8, 2556020, 0, 8, 2490484, 0, 8, 2424948, 0, 8, 2359412, 0, 8, 2293876, 0, 8, 2228340, 0, 8, 2162804, 0, 8, 2097268, 0, 8, 2031732, 0, 8, 1966196, 0, 8, 1900660, 0, 8, 1835124, 0, 8, 1769588, 0, 8, 1704052, 0, 8, 1638516, 0, 8, 1572980, 0, 8, 1507444, 0, 8, 1441908, 0, 8, 1376372, 0, 8, 1310836, 0, 8, 1245300, 0, 8, 1179764, 0, 8, 1114228, 0, 8, 1048692, 0, 8, 983156, 0, 8, 917620, 0, 8, 3539059, 0, 8, 3473523, 0, 8, 3407987, 0, 8, 3342451, 0, 8, 3276915, 0, 8, 3211379, 0, 8, 3145843, 0, 8, 3080307, 0, 8, 3014771, 0, 8, 2949235, 0, 8, 2883699, 0, 8, 2818163, 0, 8, 2752627, 0, 8, 2687091, 0, 8, 2621555, 0, 8, 2556019, 0, 8, 2490483, 0, 8, 2424947, 0, 8, 2359411, 0, 8, 2293875, 0, 8, 2228339, 0, 8, 2162803, 0, 8, 2097267, 0, 8, 2031731, 0, 8, 1966195, 0, 8, 1900659, 0, 8, 1835123, 0, 8, 1769587, 0, 8, 1704051, 0, 8, 1638515, 0, 8, 1572979, 0, 8, 1507443, 0, 8, 1441907, 0, 8, 1376371, 0, 8, 1310835, 0, 8, 1245299, 0, 8, 1179763, 0, 8, 1114227, 0, 8, 1048691, 0, 8, 983155, 0, 8, 917619, 0, 8, 3539058, 0, 8, 3473522, 0, 8, 3407986, 0, 8, 3342450, 0, 8, 3276914, 0, 8, 3211378, 0, 8, 3145842, 0, 8, 3080306, 0, 8, 3014770, 0, 8, 2949234, 0, 8, 2883698, 0, 8, 2818162, 0, 8, 2752626, 0, 8, 2687090, 0, 8, 2621554, 0, 8, 2556018, 0, 8, 2490482, 0, 8, 2424946, 0, 8, 2359410, 0, 8, 2293874, 0, 8, 2228338, 0, 8, 2162802, 0, 8, 2097266, 0, 8, 2031730, 0, 8, 1966194, 0, 8, 1900658, 0, 8, 1835122, 0, 8, 1769586, 0, 8, 1704050, 0, 8, 1638514, 0, 8, 1572978, 0, 8, 1507442, 0, 8, 1441906, 0, 8, 1376370, 0, 8, 1310834, 0, 8, 1245298, 0, 8, 1179762, 0, 8, 1114226, 0, 8, 1048690, 0, 8, 983154, 0, 8, 917618, 0, 8, 3539057, 0, 8, 3473521, 0, 8, 3407985, 0, 8, 3342449, 0, 8, 3276913, 0, 8, 3211377, 0, 8, 3145841, 0, 8, 3080305, 0, 8, 3014769, 0, 8, 2949233, 0, 8, 2883697, 0, 8, 2818161, 0, 8, 2752625, 0, 8, 2687089, 0, 8, 2621553, 0, 8, 2556017, 0, 8, 2490481, 0, 8, 2424945, 0, 8, 2359409, 0, 8, 2293873, 0, 8, 2228337, 0, 8, 2162801, 0, 8, 2097265, 0, 8, 2031729, 0, 8, 1966193, 0, 8, 1900657, 0, 8, 1835121, 0, 8, 1769585, 0, 8, 1704049, 0, 8, 1638513, 0, 8, 1572977, 0, 8, 1507441, 0, 8, 1441905, 0, 8, 1376369, 0, 8, 1310833, 0, 8, 1245297, 0, 8, 1179761, 0, 8, 1114225, 0, 8, 1048689, 0, 8, 983153, 0, 8, 917617, 0, 8, 3539056, 0, 8, 3473520, 0, 8, 3407984, 0, 8, 3342448, 0, 8, 3276912, 0, 8, 3211376, 0, 8, 3145840, 0, 8, 3080304, 0, 8, 3014768, 0, 8, 2949232, 0, 8, 2883696, 0, 8, 2818160, 0, 8, 2752624, 0, 8, 2687088, 0, 8, 2621552, 0, 8, 2556016, 0, 8, 2490480, 0, 8, 2424944, 0, 8, 2359408, 0, 8, 2293872, 0, 8, 2228336, 0, 8, 2162800, 0, 8, 2097264, 0, 8, 2031728, 0, 8, 1966192, 0, 8, 1900656, 0, 8, 1835120, 0, 8, 1769584, 0, 8, 1704048, 0, 8, 1638512, 0, 8, 1572976, 0, 8, 1507440, 0, 8, 1441904, 0, 8, 1376368, 0, 8, 1310832, 0, 8, 1245296, 0, 8, 1179760, 0, 8, 1114224, 0, 8, 1048688, 0, 8, 983152, 0, 8, 917616, 0, 8, 3539055, 0, 8, 3473519, 0, 8, 3407983, 0, 8, 3342447, 0, 8, 3276911, 0, 8, 3211375, 0, 8, 3145839, 0, 8, 3080303, 0, 8, 3014767, 0, 8, 2949231, 0, 8, 2883695, 0, 8, 2818159, 0, 8, 2752623, 0, 8, 2687087, 0, 8, 2621551, 0, 8, 2556015, 0, 8, 2490479, 0, 8, 2424943, 0, 8, 2359407, 0, 8, 2293871, 0, 8, 2228335, 0, 8, 2162799, 0, 8, 2097263, 0, 8, 2031727, 0, 8, 1966191, 0, 8, 1900655, 0, 8, 1835119, 0, 8, 1769583, 0, 8, 1704047, 0, 8, 1638511, 0, 8, 1572975, 0, 8, 1507439, 0, 8, 1441903, 0, 8, 1376367, 0, 8, 1310831, 0, 8, 1245295, 0, 8, 1179759, 0, 8, 1114223, 0, 8, 1048687, 0, 8, 983151, 0, 8, 917615, 0, 8, 3539054, 0, 8, 3473518, 0, 8, 3407982, 0, 8, 3342446, 0, 8, 3276910, 0, 8, 3211374, 0, 8, 3145838, 0, 8, 3080302, 0, 8, 3014766, 0, 8, 2949230, 0, 8, 2883694, 0, 8, 2818158, 0, 8, 2752622, 0, 8, 2687086, 0, 8, 2621550, 0, 8, 2556014, 0, 8, 2490478, 0, 8, 2424942, 0, 8, 2359406, 0, 8, 2293870, 0, 8, 2228334, 0, 8, 2162798, 0, 8, 2097262, 0, 8, 2031726, 0, 8, 1966190, 0, 8, 1900654, 0, 8, 1835118, 0, 8, 1769582, 0, 8, 1704046, 0, 8, 1638510, 0, 8, 1572974, 0, 8, 1507438, 0, 8, 1441902, 0, 8, 1376366, 0, 8, 1310830, 0, 8, 1245294, 0, 8, 1179758, 0, 8, 1114222, 0, 8, 1048686, 0, 8, 983150, 0, 8, 917614, 0, 8, 3539053, 0, 8, 3473517, 0, 8, 3407981, 0, 8, 3342445, 0, 8, 3276909, 0, 8, 3211373, 0, 8, 3145837, 0, 8, 3080301, 0, 8, 3014765, 0, 8, 2949229, 0, 8, 2883693, 0, 8, 2818157, 0, 8, 2752621, 0, 8, 2687085, 0, 8, 2621549, 0, 8, 2556013, 0, 8, 2490477, 0, 8, 2424941, 0, 8, 2359405, 0, 8, 2293869, 0, 8, 2228333, 0, 8, 2162797, 0, 8, 2097261, 0, 8, 2031725, 0, 8, 1966189, 0, 8, 1900653, 0, 8, 1835117, 0, 8, 1769581, 0, 8, 1704045, 0, 8, 1638509, 0, 8, 1572973, 0, 8, 1507437, 0, 8, 1441901, 0, 8, 1376365, 0, 8, 1310829, 0, 8, 1245293, 0, 8, 1179757, 0, 8, 1114221, 0, 8, 1048685, 0, 8, 983149, 0, 8, 917613, 0, 8, 3539052, 0, 8, 3473516, 0, 8, 3407980, 0, 8, 3342444, 0, 8, 3276908, 0, 8, 3211372, 0, 8, 3145836, 0, 8, 3080300, 0, 8, 3014764, 0, 8, 2949228, 0, 8, 2883692, 0, 8, 2818156, 0, 8, 2752620, 0, 8, 2687084, 0, 8, 2621548, 0, 8, 2556012, 0, 8, 2490476, 0, 8, 2424940, 0, 8, 2359404, 0, 8, 2293868, 0, 8, 2228332, 0, 8, 2162796, 0, 8, 2097260, 0, 8, 2031724, 0, 8, 1966188, 0, 8, 1900652, 0, 8, 1835116, 0, 8, 1769580, 0, 8, 1704044, 0, 8, 1638508, 0, 8, 1572972, 0, 8, 1507436, 0, 8, 1441900, 0, 8, 1376364, 0, 8, 1310828, 0, 8, 1245292, 0, 8, 1179756, 0, 8, 1114220, 0, 8, 1048684, 0, 8, 983148, 0, 8, 917612, 0, 8, 3539051, 0, 8, 3473515, 0, 8, 3407979, 0, 8, 3342443, 0, 8, 3276907, 0, 8, 3211371, 0, 8, 3145835, 0, 8, 3080299, 0, 8, 3014763, 0, 8, 2949227, 0, 8, 2883691, 0, 8, 2818155, 0, 8, 2752619, 0, 8, 2687083, 0, 8, 2621547, 0, 8, 2556011, 0, 8, 2490475, 0, 8, 2424939, 0, 8, 2359403, 0, 8, 2293867, 0, 8, 2228331, 0, 8, 2162795, 0, 8, 2097259, 0, 8, 2031723, 0, 8, 1966187, 0, 8, 1900651, 0, 8, 1835115, 0, 8, 1769579, 0, 8, 1704043, 0, 8, 1638507, 0, 8, 1572971, 0, 8, 1507435, 0, 8, 1441899, 0, 8, 1376363, 0, 8, 1310827, 0, 8, 1245291, 0, 8, 1179755, 0, 8, 1114219, 0, 8, 1048683, 0, 8, 983147, 0, 8, 917611, 0, 8, 3539050, 0, 8, 3473514, 0, 8, 3407978, 0, 8, 3342442, 0, 8, 3276906, 0, 8, 3211370, 0, 8, 3145834, 0, 8, 3080298, 0, 8, 3014762, 0, 8, 2949226, 0, 8, 2883690, 0, 8, 2818154, 0, 8, 2752618, 0, 8, 2687082, 0, 8, 2621546, 0, 8, 2556010, 0, 8, 2490474, 0, 8, 2424938, 0, 8, 2359402, 0, 8, 2293866, 0, 8, 2228330, 0, 8, 2162794, 0, 8, 2097258, 0, 8, 2031722, 0, 8, 1966186, 0, 8, 1900650, 0, 8, 1835114, 0, 8, 1769578, 0, 8, 1704042, 0, 8, 1638506, 0, 8, 1572970, 0, 8, 1507434, 0, 8, 1441898, 0, 8, 1376362, 0, 8, 1310826, 0, 8, 1245290, 0, 8, 1179754, 0, 8, 1114218, 0, 8, 1048682, 0, 8, 983146, 0, 8, 917610, 0, 8, 3539049, 0, 8, 3473513, 0, 8, 3407977, 0, 8, 3342441, 0, 8, 3276905, 0, 8, 3211369, 0, 8, 3145833, 0, 8, 3080297, 0, 8, 3014761, 0, 8, 2949225, 0, 8, 2883689, 0, 8, 2818153, 0, 8, 2752617, 0, 8, 2687081, 0, 8, 2621545, 0, 8, 2556009, 0, 8, 2490473, 0, 8, 2424937, 0, 8, 2359401, 0, 8, 2293865, 0, 8, 2228329, 0, 8, 2162793, 0, 8, 2097257, 0, 8, 2031721, 0, 8, 1966185, 0, 8, 1900649, 0, 8, 1835113, 0, 8, 1769577, 0, 8, 1704041, 0, 8, 1638505, 0, 8, 1572969, 0, 8, 1507433, 0, 8, 1441897, 0, 8, 1376361, 0, 8, 1310825, 0, 8, 1245289, 0, 8, 1179753, 0, 8, 1114217, 0, 8, 1048681, 0, 8, 983145, 0, 8, 917609, 0, 8, 3539048, 0, 8, 3473512, 0, 8, 3407976, 0, 8, 3342440, 0, 8, 3276904, 0, 8, 3211368, 0, 8, 3145832, 0, 8, 3080296, 0, 8, 3014760, 0, 8, 2949224, 0, 8, 2883688, 0, 8, 2818152, 0, 8, 2752616, 0, 8, 2687080, 0, 8, 2621544, 0, 8, 2556008, 0, 8, 2490472, 0, 8, 2424936, 0, 8, 2359400, 0, 8, 2293864, 0, 8, 2228328, 0, 8, 2162792, 0, 8, 2097256, 0, 8, 2031720, 0, 8, 1966184, 0, 8, 1900648, 0, 8, 1835112, 0, 8, 1769576, 0, 8, 1704040, 0, 8, 1638504, 0, 8, 1572968, 0, 8, 1507432, 0, 8, 1441896, 0, 8, 1376360, 0, 8, 1310824, 0, 8, 1245288, 0, 8, 1179752, 0, 8, 1114216, 0, 8, 1048680, 0, 8, 983144, 0, 8, 917608, 0, 8, 3539047, 0, 8, 3473511, 0, 8, 3407975, 0, 8, 3342439, 0, 8, 3276903, 0, 8, 3211367, 0, 8, 3145831, 0, 8, 3080295, 0, 8, 3014759, 0, 8, 2949223, 0, 8, 2883687, 0, 8, 2818151, 0, 8, 2752615, 0, 8, 2687079, 0, 8, 2621543, 0, 8, 2556007, 0, 8, 2490471, 0, 8, 2424935, 0, 8, 2359399, 0, 8, 2293863, 0, 8, 2228327, 0, 8, 2162791, 0, 8, 2097255, 0, 8, 2031719, 0, 8, 1966183, 0, 8, 1900647, 0, 8, 1835111, 0, 8, 1769575, 0, 8, 1704039, 0, 8, 1638503, 0, 8, 1572967, 0, 8, 1507431, 0, 8, 1441895, 0, 8, 1376359, 0, 8, 1310823, 0, 8, 1245287, 0, 8, 1179751, 0, 8, 1114215, 0, 8, 1048679, 0, 8, 983143, 0, 8, 917607, 0, 8, 3539046, 0, 8, 3473510, 0, 8, 3407974, 0, 8, 3342438, 0, 8, 3276902, 0, 8, 3211366, 0, 8, 3145830, 0, 8, 3080294, 0, 8, 3014758, 0, 8, 2949222, 0, 8, 2883686, 0, 8, 2818150, 0, 8, 2752614, 0, 8, 2687078, 0, 8, 2621542, 0, 8, 2556006, 0, 8, 2490470, 0, 8, 2424934, 0, 8, 2359398, 0, 8, 2293862, 0, 8, 2228326, 0, 8, 2162790, 0, 8, 2097254, 0, 8, 2031718, 0, 8, 1966182, 0, 8, 1900646, 0, 8, 1835110, 0, 8, 1769574, 0, 8, 1704038, 0, 8, 1638502, 0, 8, 1572966, 0, 8, 1507430, 0, 8, 1441894, 0, 8, 1376358, 0, 8, 1310822, 0, 8, 1245286, 0, 8, 1179750, 0, 8, 1114214, 0, 8, 1048678, 0, 8, 983142, 0, 8, 917606, 0, 8, 3539045, 0, 8, 3473509, 0, 8, 3407973, 0, 8, 3342437, 0, 8, 3276901, 0, 8, 3211365, 0, 8, 3145829, 0, 8, 3080293, 0, 8, 3014757, 0, 8, 2949221, 0, 8, 2883685, 0, 8, 2818149, 0, 8, 2752613, 0, 8, 2687077, 0, 8, 2621541, 0, 8, 2556005, 0, 8, 2490469, 0, 8, 2424933, 0, 8, 2359397, 0, 8, 2293861, 0, 8, 2228325, 0, 8, 2162789, 0, 8, 2097253, 0, 8, 2031717, 0, 8, 1966181, 0, 8, 1900645, 0, 8, 1835109, 0, 8, 1769573, 0, 8, 1704037, 0, 8, 1638501, 0, 8, 1572965, 0, 8, 1507429, 0, 8, 1441893, 0, 8, 1376357, 0, 8, 1310821, 0, 8, 1245285, 0, 8, 1179749, 0, 8, 1114213, 0, 8, 1048677, 0, 8, 983141, 0, 8, 917605, 0, 8, 3539044, 0, 8, 3473508, 0, 8, 3407972, 0, 8, 3342436, 0, 8, 3276900, 0, 8, 3211364, 0, 8, 3145828, 0, 8, 3080292, 0, 8, 3014756, 0, 8, 2949220, 0, 8, 2883684, 0, 8, 2818148, 0, 8, 2752612, 0, 8, 2687076, 0, 8, 2621540, 0, 8, 2556004, 0, 8, 2490468, 0, 8, 2424932, 0, 8, 2359396, 0, 8, 2293860, 0, 8, 2228324, 0, 8, 2162788, 0, 8, 2097252, 0, 8, 2031716, 0, 8, 1966180, 0, 8, 1900644, 0, 8, 1835108, 0, 8, 1769572, 0, 8, 1704036, 0, 8, 1638500, 0, 8, 1572964, 0, 8, 1507428, 0, 8, 1441892, 0, 8, 1376356, 0, 8, 1310820, 0, 8, 1245284, 0, 8, 1179748, 0, 8, 1114212, 0, 8, 1048676, 0, 8, 983140, 0, 8, 917604, 0, 8, 3539043, 0, 8, 3473507, 0, 8, 3407971, 0, 8, 3342435, 0, 8, 3276899, 0, 8, 3211363, 0, 8, 3145827, 0, 8, 3080291, 0, 8, 3014755, 0, 8, 2949219, 0, 8, 2883683, 0, 8, 2818147, 0, 8, 2752611, 0, 8, 2687075, 0, 8, 2621539, 0, 8, 2556003, 0, 8, 2490467, 0, 8, 2424931, 0, 8, 2359395, 0, 8, 2293859, 0, 8, 2228323, 0, 8, 2162787, 0, 8, 2097251, 0, 8, 2031715, 0, 8, 1966179, 0, 8, 1900643, 0, 8, 1835107, 0, 8, 1769571, 0, 8, 1704035, 0, 8, 1638499, 0, 8, 1572963, 0, 8, 1507427, 0, 8, 1441891, 0, 8, 1376355, 0, 8, 1310819, 0, 8, 1245283, 0, 8, 1179747, 0, 8, 1114211, 0, 8, 1048675, 0, 8, 983139, 0, 8, 917603, 0, 8, 3539042, 0, 8, 3473506, 0, 8, 3407970, 0, 8, 3342434, 0, 8, 3276898, 0, 8, 3211362, 0, 8, 3145826, 0, 8, 3080290, 0, 8, 3014754, 0, 8, 2949218, 0, 8, 2883682, 0, 8, 2818146, 0, 8, 2752610, 0, 8, 2687074, 0, 8, 2621538, 0, 8, 2556002, 0, 8, 2490466, 0, 8, 2424930, 0, 8, 2359394, 0, 8, 2293858, 0, 8, 2228322, 0, 8, 2162786, 0, 8, 2097250, 0, 8, 2031714, 0, 8, 1966178, 0, 8, 1900642, 0, 8, 1835106, 0, 8, 1769570, 0, 8, 1704034, 0, 8, 1638498, 0, 8, 1572962, 0, 8, 1507426, 0, 8, 3539041, 0, 8, 3473505, 0, 8, 3407969, 0, 8, 3342433, 0, 8, 3276897, 0, 8, 3211361, 0, 8, 3145825, 0, 8, 3080289, 0, 8, 3014753, 0, 8, 2949217, 0, 8, 2883681, 0, 8, 2818145, 0, 8, 2752609, 0, 8, 2687073, 0, 8, 2621537, 0, 8, 2556001, 0, 8, 2490465, 0, 8, 2424929, 0, 8, 2359393, 0, 8, 2293857, 0, 8, 2228321, 0, 8, 2162785, 0, 8, 2097249, 0, 8, 2031713, 0, 8, 1966177, 0, 8, 1900641, 0, 8, 1835105, 0, 8, 1769569, 0, 8, 1704033, 0, 8, 1638497, 0, 8, 1572961, 0, 8, 1507425, 0, 8, 3539040, 0, 8, 3473504, 0, 8, 3407968, 0, 8, 3342432, 0, 8, 3276896, 0, 8, 3211360, 0, 8, 3145824, 0, 8, 3080288, 0, 8, 3014752, 0, 8, 2949216, 0, 8, 2883680, 0, 8, 2818144, 0, 8, 2752608, 0, 8, 2687072, 0, 8, 2621536, 0, 8, 2556000, 0, 8, 2490464, 0, 8, 2424928, 0, 8, 2359392, 0, 8, 2293856, 0, 8, 2228320, 0, 8, 2162784, 0, 8, 2097248, 0, 8, 2031712, 0, 8, 1966176, 0, 8, 1900640, 0, 8, 1835104, 0, 8, 1769568, 0, 8, 1704032, 0, 8, 1638496, 0, 8, 1572960, 0, 8, 1507424, 0, 8, 3539039, 0, 8, 3473503, 0, 8, 3407967, 0, 8, 3342431, 0, 8, 3276895, 0, 8, 3211359, 0, 8, 3145823, 0, 8, 3080287, 0, 8, 3014751, 0, 8, 2949215, 0, 8, 2883679, 0, 8, 2818143, 0, 8, 2752607, 0, 8, 2687071, 0, 8, 2621535, 0, 8, 2555999, 0, 8, 2490463, 0, 8, 2424927, 0, 8, 2359391, 0, 8, 2293855, 0, 8, 2228319, 0, 8, 2162783, 0, 8, 2097247, 0, 8, 2031711, 0, 8, 1966175, 0, 8, 1900639, 0, 8, 1835103, 0, 8, 1769567, 0, 8, 1704031, 0, 8, 1638495, 0, 8, 1572959, 0, 8, 1507423, 0, 8, 3539038, 0, 8, 3473502, 0, 8, 3407966, 0, 8, 3342430, 0, 8, 3276894, 0, 8, 3211358, 0, 8, 3145822, 0, 8, 3080286, 0, 8, 3014750, 0, 8, 2949214, 0, 8, 2883678, 0, 8, 2818142, 0, 8, 2752606, 0, 8, 2687070, 0, 8, 2621534, 0, 8, 2555998, 0, 8, 2490462, 0, 8, 2424926, 0, 8, 2359390, 0, 8, 2293854, 0, 8, 2228318, 0, 8, 2162782, 0, 8, 2097246, 0, 8, 2031710, 0, 8, 1966174, 0, 8, 1900638, 0, 8, 1835102, 0, 8, 1769566, 0, 8, 1704030, 0, 8, 1638494, 0, 8, 1572958, 0, 8, 1507422, 0, 8, 3539037, 0, 8, 3473501, 0, 8, 3407965, 0, 8, 3342429, 0, 8, 3276893, 0, 8, 3211357, 0, 8, 3145821, 0, 8, 3080285, 0, 8, 3014749, 0, 8, 2949213, 0, 8, 2883677, 0, 8, 2818141, 0, 8, 2752605, 0, 8, 2687069, 0, 8, 2621533, 0, 8, 2555997, 0, 8, 2490461, 0, 8, 2424925, 0, 8, 2359389, 0, 8, 2293853, 0, 8, 2228317, 0, 8, 2162781, 0, 8, 2097245, 0, 8, 2031709, 0, 8, 1966173, 0, 8, 1900637, 0, 8, 1835101, 0, 8, 1769565, 0, 8, 1704029, 0, 8, 1638493, 0, 8, 1572957, 0, 8, 1507421, 0, 8, 3539036, 0, 8, 3473500, 0, 8, 3407964, 0, 8, 3342428, 0, 8, 3276892, 0, 8, 3211356, 0, 8, 3145820, 0, 8, 3080284, 0, 8, 3014748, 0, 8, 2949212, 0, 8, 2883676, 0, 8, 2818140, 0, 8, 2752604, 0, 8, 2687068, 0, 8, 2621532, 0, 8, 2555996, 0, 8, 2490460, 0, 8, 2424924, 0, 8, 2359388, 0, 8, 2293852, 0, 8, 2228316, 0, 8, 2162780, 0, 8, 2097244, 0, 8, 2031708, 0, 8, 1966172, 0, 8, 1900636, 0, 8, 1835100, 0, 8, 1769564, 0, 8, 1704028, 0, 8, 1638492, 0, 8, 1572956, 0, 8, 1507420, 0, 8, 3539035, 0, 8, 3473499, 0, 8, 3407963, 0, 8, 3342427, 0, 8, 3276891, 0, 8, 3211355, 0, 8, 3145819, 0, 8, 3080283, 0, 8, 3014747, 0, 8, 2949211, 0, 8, 2883675, 0, 8, 2818139, 0, 8, 2752603, 0, 8, 2687067, 0, 8, 2621531, 0, 8, 2555995, 0, 8, 2490459, 0, 8, 2424923, 0, 8, 2359387, 0, 8, 2293851, 0, 8, 2228315, 0, 8, 2162779, 0, 8, 2097243, 0, 8, 2031707, 0, 8, 1966171, 0, 8, 1900635, 0, 8, 1835099, 0, 8, 1769563, 0, 8, 1704027, 0, 8, 1638491, 0, 8, 1572955, 0, 8, 1507419, 0, 8, 3539034, 0, 8, 3473498, 0, 8, 3407962, 0, 8, 3342426, 0, 8, 3276890, 0, 8, 3211354, 0, 8, 3145818, 0, 8, 3080282, 0, 8, 3014746, 0, 8, 2949210, 0, 8, 2883674, 0, 8, 2818138, 0, 8, 2752602, 0, 8, 2687066, 0, 8, 2621530, 0, 8, 2555994, 0, 8, 2490458, 0, 8, 2424922, 0, 8, 2359386, 0, 8, 2293850, 0, 8, 2228314, 0, 8, 2162778, 0, 8, 2097242, 0, 8, 2031706, 0, 8, 1966170, 0, 8, 1900634, 0, 8, 1835098, 0, 8, 1769562, 0, 8, 1704026, 0, 8, 1638490, 0, 8, 1572954, 0, 8, 1507418, 0, 8, 2621529, 0, 8, 2555993, 0, 8, 2490457, 0, 8, 2424921, 0, 8, 2359385, 0, 8, 2293849, 0, 8, 2228313, 0, 8, 2162777, 0, 8, 2097241, 0, 8, 2031705, 0, 8, 1966169, 0, 8, 1900633, 0, 8, 1835097, 0, 8, 1769561, 0, 8, 1704025, 0, 8, 1638489, 0, 8, 1572953, 0, 8, 1507417, 0, 8, 2621528, 0, 8, 2555992, 0, 8, 2490456, 0, 8, 2424920, 0, 8, 2359384, 0, 8, 2293848, 0, 8, 2228312, 0, 8, 2162776, 0, 8, 2097240, 0, 8, 2031704, 0, 8, 1966168, 0, 8, 1900632, 0, 8, 1835096, 0, 8, 1769560, 0, 8, 1704024, 0, 8, 1638488, 0, 8, 1572952, 0, 8, 1507416, 0, 8, 2621527, 0, 8, 2555991, 0, 8, 2490455, 0, 8, 2424919, 0, 8, 2359383, 0, 8, 2293847, 0, 8, 2228311, 0, 8, 2162775, 0, 8, 2097239, 0, 8, 2031703, 0, 8, 1966167, 0, 8, 1900631, 0, 8, 1835095, 0, 8, 1769559, 0, 8, 1704023, 0, 8, 1638487, 0, 8, 1572951, 0, 8, 1507415, 0, 8, 2621526, 0, 8, 2555990, 0, 8, 2490454, 0, 8, 2424918, 0, 8, 2359382, 0, 8, 2293846, 0, 8, 2228310, 0, 8, 2162774, 0, 8, 2097238, 0, 8, 2031702, 0, 8, 1966166, 0, 8, 1900630, 0, 8, 1835094, 0, 8, 1769558, 0, 8, 1704022, 0, 8, 1638486, 0, 8, 1572950, 0, 8, 1507414, 0, 8, 1507413, 196608, 3, 1572949, 196608, 3, 1638485, 196608, 3, 1704021, 196608, 3, 1769557, 196608, 3, 1835093, 196608, 3, 1900629, 196608, 3, 1966165, 196608, 3, 2031701, 196608, 3, 2097237, 196608, 3, 2162773, 196608, 3, 2228309, 196608, 3, 2293845, 196608, 3, 2359381, 196608, 3, 2424917, 196608, 3, 2490453, 196608, 3, 2555989, 196608, 3, 2621525, 196608, 3, 3604570, 0, 8, 3604571, 0, 8, 3604572, 0, 8, 3604573, 0, 8, 3604574, 0, 8, 3604575, 0, 8, 3604576, 0, 8, 3604577, 0, 8, 3604578, 0, 8, 852067, 131072, 7, 3604579, 0, 8, 852068, 131072, 7, 3604580, 0, 8, 852069, 131072, 7, 3604581, 0, 8, 852070, 131072, 7, 3604582, 0, 8, 852071, 131072, 7, 3604583, 0, 8, 852072, 131072, 7, 3604584, 0, 8, 852073, 131072, 7, 3604585, 0, 8, 852074, 131072, 7, 3604586, 0, 8, 852075, 131072, 7, 3604587, 0, 8, 852076, 131072, 7, 3604588, 0, 8, 852077, 131072, 7, 3604589, 0, 8, 852078, 131072, 7, 3604590, 0, 8, 852079, 131072, 7, 3604591, 0, 8, 852080, 131072, 7, 3604592, 0, 8, 852081, 131072, 7, 3604593, 0, 8, 852082, 131072, 7, 3604594, 0, 8, 852083, 131072, 7, 3604595, 0, 8, 852084, 131072, 7, 3604596, 0, 8, 852085, 131072, 7, 3604597, 0, 8, 852086, 131072, 7, 3604598, 0, 8, 852087, 131072, 7, 3604599, 0, 8, 852088, 131072, 7, 3604600, 0, 8, 852089, 131072, 7, 3604601, 65536, 2, 852090, 131072, 7, 3604602, 131072, 2, 852091, 131072, 7, 3604603, 131072, 2, 852092, 131072, 7, 3604604, 131072, 2, 852093, 131072, 7, 3604605, 131072, 2, 983166, 65536, 3, 852094, 65536, 4, 1048702, 65536, 3, 917630, 65536, 3, 1114238, 65536, 3, 1179774, 65536, 3, 1245310, 65536, 3, 1310846, 65536, 3, 1376382, 65536, 3, 1441918, 65536, 3, 1507454, 65536, 3, 1572990, 65536, 3, 1638526, 65536, 3, 1704062, 65536, 3, 1769598, 65536, 3, 1835134, 65536, 3, 1900670, 65536, 3, 1966206, 65536, 3, 2031742, 65536, 3, 2097278, 65536, 3, 2162814, 65536, 3, 2228350, 65536, 3, 2293886, 65536, 3, 2359422, 65536, 3, 2424958, 65536, 3, 2490494, 65536, 3, 2556030, 65536, 3, 2621566, 65536, 3, 2687102, 65536, 3, 2752638, 65536, 3, 2818174, 65536, 3, 2883710, 65536, 3, 2949246, 65536, 3, 3014782, 65536, 3, 3080318, 65536, 3, 3145854, 65536, 3, 3211390, 65536, 3, 3276926, 65536, 3, 3342462, 65536, 3, 3407998, 65536, 3, 3473534, 65536, 3, 3539070, 65536, 3, 3604606, 851968, 2, 5701752, 0, 8, 5636216, 0, 8, 5570680, 0, 8, 5505144, 0, 8, 5439608, 0, 8, 5374072, 0, 8, 5308536, 0, 8, 5243000, 0, 8, 5177464, 0, 8, 5111928, 0, 8, 5046392, 0, 8, 4980856, 0, 8, 4915320, 0, 8, 4849784, 0, 8, 4784248, 0, 8, 4718712, 0, 8, 4653176, 0, 8, 4587640, 0, 8, 4522104, 0, 8, 4456568, 0, 8, 4391032, 0, 8, 4325496, 0, 8, 4259960, 0, 8, 4194424, 0, 8, 4128888, 0, 8, 4063352, 0, 8, 3997816, 0, 8, 3932280, 0, 8, 3866744, 0, 8, 3801208, 0, 8, 3735672, 0, 8, 3670136, 0, 8, 5701751, 0, 8, 5636215, 0, 8, 5570679, 0, 8, 5505143, 0, 8, 5439607, 0, 8, 5374071, 0, 8, 5308535, 0, 8, 5242999, 0, 8, 5177463, 0, 8, 5111927, 0, 8, 5046391, 0, 8, 4980855, 0, 8, 4915319, 0, 8, 4849783, 0, 8, 4784247, 0, 8, 4718711, 0, 8, 4653175, 0, 8, 4587639, 0, 8, 4522103, 0, 8, 4456567, 0, 8, 4391031, 0, 8, 4325495, 0, 8, 4259959, 0, 8, 4194423, 0, 8, 4128887, 0, 8, 4063351, 0, 8, 3997815, 0, 8, 3932279, 0, 8, 3866743, 0, 8, 3801207, 0, 8, 3735671, 0, 8, 3670135, 0, 8, 5701750, 0, 8, 5636214, 0, 8, 5570678, 0, 8, 5505142, 0, 8, 5439606, 0, 8, 5374070, 0, 8, 5308534, 0, 8, 5242998, 0, 8, 5177462, 0, 8, 5111926, 0, 8, 5046390, 0, 8, 4980854, 0, 8, 4915318, 0, 8, 4849782, 0, 8, 4784246, 0, 8, 4718710, 0, 8, 4653174, 0, 8, 4587638, 0, 8, 4522102, 0, 8, 4456566, 0, 8, 4391030, 0, 8, 4325494, 0, 8, 4259958, 0, 8, 4194422, 0, 8, 4128886, 0, 8, 4063350, 0, 8, 3997814, 0, 8, 3932278, 0, 8, 3866742, 0, 8, 3801206, 0, 8, 3735670, 0, 8, 3670134, 0, 8, 5701749, 0, 8, 5636213, 0, 8, 5570677, 0, 8, 5505141, 0, 8, 5439605, 0, 8, 5374069, 0, 8, 5308533, 0, 8, 5242997, 0, 8, 5177461, 0, 8, 5111925, 0, 8, 5046389, 0, 8, 4980853, 0, 8, 4915317, 0, 8, 4849781, 0, 8, 4784245, 0, 8, 4718709, 0, 8, 4653173, 0, 8, 4587637, 0, 8, 4522101, 0, 8, 4456565, 0, 8, 4391029, 0, 8, 4325493, 0, 8, 4259957, 0, 8, 4194421, 0, 8, 4128885, 0, 8, 4063349, 0, 8, 3997813, 0, 8, 3932277, 0, 8, 3866741, 0, 8, 3801205, 0, 8, 3735669, 0, 8, 3670133, 0, 8, 5701748, 0, 8, 5636212, 0, 8, 5570676, 0, 8, 5505140, 0, 8, 5439604, 0, 8, 5374068, 0, 8, 5308532, 0, 8, 5242996, 0, 8, 5177460, 0, 8, 5111924, 0, 8, 5046388, 0, 8, 4980852, 0, 8, 4915316, 0, 8, 4849780, 0, 8, 4784244, 0, 8, 4718708, 0, 8, 4653172, 0, 8, 4587636, 0, 8, 4522100, 0, 8, 4456564, 0, 8, 4391028, 0, 8, 4325492, 0, 8, 4259956, 0, 8, 4194420, 0, 8, 4128884, 0, 8, 4063348, 0, 8, 3997812, 0, 8, 3932276, 0, 8, 3866740, 0, 8, 3801204, 0, 8, 3735668, 0, 8, 3670132, 0, 8, 5701747, 0, 8, 5636211, 0, 8, 5570675, 0, 8, 5505139, 0, 8, 5439603, 0, 8, 5374067, 0, 8, 5308531, 0, 8, 5242995, 0, 8, 5177459, 0, 8, 5111923, 0, 8, 5046387, 0, 8, 4980851, 0, 8, 4915315, 0, 8, 4849779, 0, 8, 4784243, 0, 8, 4718707, 0, 8, 4653171, 0, 8, 4587635, 0, 8, 4522099, 0, 8, 4456563, 0, 8, 4391027, 0, 8, 4325491, 0, 8, 4259955, 0, 8, 4194419, 0, 8, 4128883, 0, 8, 4063347, 0, 8, 3997811, 0, 8, 3932275, 0, 8, 3866739, 0, 8, 3801203, 0, 8, 3735667, 0, 8, 3670131, 0, 8, 5701746, 0, 8, 5636210, 0, 8, 5570674, 0, 8, 5505138, 0, 8, 5439602, 0, 8, 5374066, 0, 8, 5308530, 0, 8, 5242994, 0, 8, 5177458, 0, 8, 5111922, 0, 8, 5046386, 0, 8, 4980850, 0, 8, 4915314, 0, 8, 4849778, 0, 8, 4784242, 0, 8, 4718706, 0, 8, 4653170, 0, 8, 4587634, 0, 8, 4522098, 0, 8, 4456562, 0, 8, 4391026, 0, 8, 4325490, 0, 8, 4259954, 0, 8, 4194418, 0, 8, 4128882, 0, 8, 4063346, 0, 8, 3997810, 0, 8, 3932274, 0, 8, 3866738, 0, 8, 3801202, 0, 8, 3735666, 0, 8, 3670130, 0, 8, 5701745, 0, 8, 5636209, 0, 8, 5570673, 0, 8, 5505137, 0, 8, 5439601, 0, 8, 5374065, 0, 8, 5308529, 0, 8, 5242993, 0, 8, 5177457, 0, 8, 5111921, 0, 8, 5046385, 0, 8, 4980849, 0, 8, 4915313, 0, 8, 4849777, 0, 8, 4784241, 0, 8, 4718705, 0, 8, 4653169, 0, 8, 4587633, 0, 8, 4522097, 0, 8, 4456561, 0, 8, 4391025, 0, 8, 4325489, 0, 8, 4259953, 0, 8, 4194417, 0, 8, 4128881, 0, 8, 4063345, 0, 8, 3997809, 0, 8, 3932273, 0, 8, 3866737, 0, 8, 3801201, 0, 8, 3735665, 0, 8, 3670129, 0, 8, 5701744, 0, 8, 5636208, 0, 8, 5570672, 0, 8, 5505136, 0, 8, 5439600, 0, 8, 5374064, 0, 8, 5308528, 0, 8, 5242992, 0, 8, 5177456, 0, 8, 5111920, 0, 8, 5046384, 0, 8, 4980848, 0, 8, 4915312, 0, 8, 4849776, 0, 8, 4784240, 0, 8, 4718704, 0, 8, 4653168, 0, 8, 4587632, 0, 8, 4522096, 0, 8, 4456560, 0, 8, 4391024, 0, 8, 4325488, 0, 8, 4259952, 0, 8, 4194416, 0, 8, 4128880, 0, 8, 4063344, 0, 8, 3997808, 0, 8, 3932272, 0, 8, 3866736, 0, 8, 3801200, 0, 8, 3735664, 0, 8, 3670128, 0, 8, 5701743, 0, 8, 5636207, 0, 8, 5570671, 0, 8, 5505135, 0, 8, 5439599, 0, 8, 5374063, 0, 8, 5308527, 0, 8, 5242991, 0, 8, 5177455, 0, 8, 5111919, 0, 8, 5046383, 0, 8, 4980847, 0, 8, 4915311, 0, 8, 4849775, 0, 8, 4784239, 0, 8, 4718703, 0, 8, 4653167, 0, 8, 4587631, 0, 8, 4522095, 0, 8, 4456559, 0, 8, 4391023, 0, 8, 4325487, 0, 8, 4259951, 0, 8, 4194415, 0, 8, 4128879, 0, 8, 4063343, 0, 8, 3997807, 0, 8, 3932271, 0, 8, 3866735, 0, 8, 3801199, 0, 8, 3735663, 0, 8, 3670127, 0, 8, 5701742, 0, 8, 5636206, 0, 8, 5570670, 0, 8, 5505134, 0, 8, 5439598, 0, 8, 5374062, 0, 8, 5308526, 0, 8, 5242990, 0, 8, 5177454, 0, 8, 5111918, 0, 8, 5046382, 0, 8, 4980846, 0, 8, 4915310, 0, 8, 4849774, 0, 8, 4784238, 0, 8, 4718702, 0, 8, 4653166, 0, 8, 4587630, 0, 8, 4522094, 0, 8, 4456558, 0, 8, 4391022, 0, 8, 4325486, 0, 8, 4259950, 0, 8, 4194414, 0, 8, 4128878, 0, 8, 4063342, 0, 8, 3997806, 0, 8, 3932270, 0, 8, 3866734, 0, 8, 3801198, 0, 8, 3735662, 0, 8, 3670126, 0, 8, 5701741, 0, 8, 5636205, 0, 8, 5570669, 0, 8, 5505133, 0, 8, 5439597, 0, 8, 5374061, 0, 8, 5308525, 0, 8, 5242989, 0, 8, 5177453, 0, 8, 5111917, 0, 8, 5046381, 0, 8, 4980845, 0, 8, 4915309, 0, 8, 4849773, 0, 8, 4784237, 0, 8, 4718701, 0, 8, 4653165, 0, 8, 4587629, 0, 8, 4522093, 0, 8, 4456557, 0, 8, 4391021, 0, 8, 4325485, 0, 8, 4259949, 0, 8, 4194413, 0, 8, 4128877, 0, 8, 4063341, 0, 8, 3997805, 0, 8, 3932269, 0, 8, 3866733, 0, 8, 3801197, 0, 8, 3735661, 0, 8, 3670125, 0, 8, 5701740, 0, 8, 5636204, 0, 8, 5570668, 0, 8, 5505132, 0, 8, 5439596, 0, 8, 5374060, 0, 8, 5308524, 0, 8, 5242988, 0, 8, 5177452, 0, 8, 5111916, 0, 8, 5046380, 0, 8, 4980844, 0, 8, 4915308, 0, 8, 4849772, 0, 8, 4784236, 0, 8, 4718700, 0, 8, 4653164, 0, 8, 4587628, 0, 8, 4522092, 0, 8, 4456556, 0, 8, 4391020, 0, 8, 4325484, 0, 8, 4259948, 0, 8, 4194412, 0, 8, 4128876, 0, 8, 4063340, 0, 8, 3997804, 0, 8, 3932268, 0, 8, 3866732, 0, 8, 3801196, 0, 8, 3735660, 0, 8, 3670124, 0, 8, 5701739, 0, 8, 5636203, 0, 8, 5570667, 0, 8, 5505131, 0, 8, 5439595, 0, 8, 5374059, 0, 8, 5308523, 0, 8, 5242987, 0, 8, 5177451, 0, 8, 5111915, 0, 8, 5046379, 0, 8, 4980843, 0, 8, 4915307, 0, 8, 4849771, 0, 8, 4784235, 0, 8, 4718699, 0, 8, 4653163, 0, 8, 4587627, 0, 8, 4522091, 0, 8, 4456555, 0, 8, 4391019, 0, 8, 4325483, 0, 8, 4259947, 0, 8, 4194411, 0, 8, 4128875, 0, 8, 4063339, 0, 8, 3997803, 0, 8, 3932267, 0, 8, 3866731, 0, 8, 3801195, 0, 8, 3735659, 0, 8, 3670123, 0, 8, 5701738, 0, 8, 5636202, 0, 8, 5570666, 0, 8, 5505130, 0, 8, 5439594, 0, 8, 5374058, 0, 8, 5308522, 0, 8, 5242986, 0, 8, 5177450, 0, 8, 5111914, 0, 8, 5046378, 0, 8, 4980842, 0, 8, 4915306, 0, 8, 4849770, 0, 8, 4784234, 0, 8, 4718698, 0, 8, 4653162, 0, 8, 4587626, 0, 8, 4522090, 0, 8, 4456554, 0, 8, 4391018, 0, 8, 4325482, 0, 8, 4259946, 0, 8, 4194410, 0, 8, 4128874, 0, 8, 4063338, 0, 8, 3997802, 0, 8, 3932266, 0, 8, 3866730, 0, 8, 3801194, 0, 8, 3735658, 0, 8, 3670122, 0, 8, 5701737, 0, 8, 5636201, 0, 8, 5570665, 0, 8, 5505129, 0, 8, 5439593, 0, 8, 5374057, 0, 8, 5308521, 0, 8, 5242985, 0, 8, 5177449, 0, 8, 5111913, 0, 8, 5046377, 0, 8, 4980841, 0, 8, 4915305, 0, 8, 4849769, 0, 8, 4784233, 0, 8, 4718697, 0, 8, 4653161, 0, 8, 4587625, 0, 8, 4522089, 0, 8, 4456553, 0, 8, 4391017, 0, 8, 4325481, 0, 8, 4259945, 0, 8, 4194409, 0, 8, 4128873, 0, 8, 4063337, 0, 8, 3997801, 0, 8, 3932265, 0, 8, 3866729, 0, 8, 3801193, 0, 8, 3735657, 0, 8, 3670121, 0, 8, 5701736, 0, 8, 5636200, 0, 8, 5570664, 0, 8, 5505128, 0, 8, 5439592, 0, 8, 5374056, 0, 8, 5308520, 0, 8, 5242984, 0, 8, 5177448, 0, 8, 5111912, 0, 8, 5046376, 0, 8, 4980840, 0, 8, 4915304, 0, 8, 4849768, 0, 8, 4784232, 0, 8, 4718696, 0, 8, 4653160, 0, 8, 4587624, 0, 8, 4522088, 0, 8, 4456552, 0, 8, 4391016, 0, 8, 4325480, 0, 8, 4259944, 0, 8, 4194408, 0, 8, 4128872, 0, 8, 4063336, 0, 8, 3997800, 0, 8, 3932264, 0, 8, 3866728, 0, 8, 3801192, 0, 8, 3735656, 0, 8, 3670120, 0, 8, 5701735, 0, 8, 5636199, 0, 8, 5570663, 0, 8, 5505127, 0, 8, 5439591, 0, 8, 5374055, 0, 8, 5308519, 0, 8, 5242983, 0, 8, 5177447, 0, 8, 5111911, 0, 8, 5046375, 0, 8, 4980839, 0, 8, 4915303, 0, 8, 4849767, 0, 8, 4784231, 0, 8, 4718695, 0, 8, 4653159, 0, 8, 4587623, 0, 8, 4522087, 0, 8, 4456551, 0, 8, 4391015, 0, 8, 4325479, 0, 8, 4259943, 0, 8, 4194407, 0, 8, 4128871, 0, 8, 4063335, 0, 8, 3997799, 0, 8, 3932263, 0, 8, 3866727, 0, 8, 3801191, 0, 8, 3735655, 0, 8, 3670119, 0, 8, 5701734, 0, 8, 5636198, 0, 8, 5570662, 0, 8, 5505126, 0, 8, 5439590, 0, 8, 5374054, 0, 8, 5308518, 0, 8, 5242982, 0, 8, 5177446, 0, 8, 5111910, 0, 8, 5046374, 0, 8, 4980838, 0, 8, 4915302, 0, 8, 4849766, 0, 8, 4784230, 0, 8, 4718694, 0, 8, 4653158, 0, 8, 4587622, 0, 8, 4522086, 0, 8, 5701733, 0, 8, 5636197, 0, 8, 5570661, 0, 8, 5505125, 0, 8, 5439589, 0, 8, 5374053, 0, 8, 5308517, 0, 8, 5242981, 0, 8, 5177445, 0, 8, 5111909, 0, 8, 5046373, 0, 8, 4980837, 0, 8, 4915301, 0, 8, 4849765, 0, 8, 4784229, 0, 8, 4718693, 0, 8, 4653157, 0, 8, 4587621, 0, 8, 4522085, 0, 8, 5701732, 0, 8, 5636196, 0, 8, 5570660, 0, 8, 5505124, 0, 8, 5439588, 0, 8, 5374052, 0, 8, 5308516, 0, 8, 5242980, 0, 8, 5177444, 0, 8, 5111908, 0, 8, 5046372, 0, 8, 4980836, 0, 8, 4915300, 0, 8, 4849764, 0, 8, 4784228, 0, 8, 4718692, 0, 8, 4653156, 0, 8, 4587620, 0, 8, 4522084, 0, 8, 5701731, 0, 8, 5636195, 0, 8, 5570659, 0, 8, 5505123, 0, 8, 5439587, 0, 8, 5374051, 0, 8, 5308515, 0, 8, 5242979, 0, 8, 5177443, 0, 8, 5111907, 0, 8, 5046371, 0, 8, 4980835, 0, 8, 4915299, 0, 8, 4849763, 0, 8, 4784227, 0, 8, 4718691, 0, 8, 4653155, 0, 8, 4587619, 0, 8, 4522083, 0, 8, 5701730, 0, 8, 5636194, 0, 8, 5570658, 0, 8, 5505122, 0, 8, 5439586, 0, 8, 5374050, 0, 8, 5308514, 0, 8, 5242978, 0, 8, 5177442, 0, 8, 5111906, 0, 8, 5046370, 0, 8, 4980834, 0, 8, 4915298, 0, 8, 4849762, 0, 8, 4784226, 0, 8, 4718690, 0, 8, 4653154, 0, 8, 4587618, 0, 8, 4522082, 0, 8, 5701729, 0, 8, 5636193, 0, 8, 5570657, 0, 8, 5505121, 0, 8, 5439585, 0, 8, 5374049, 0, 8, 5308513, 0, 8, 5242977, 0, 8, 5177441, 0, 8, 5111905, 0, 8, 5046369, 0, 8, 4980833, 0, 8, 4915297, 0, 8, 4849761, 0, 8, 4784225, 0, 8, 4718689, 0, 8, 4653153, 0, 8, 4587617, 0, 8, 4522081, 0, 8, 5701728, 0, 8, 5636192, 0, 8, 5570656, 0, 8, 5505120, 0, 8, 5439584, 0, 8, 5374048, 0, 8, 5308512, 0, 8, 5242976, 0, 8, 5177440, 0, 8, 5111904, 0, 8, 5046368, 0, 8, 4980832, 0, 8, 4915296, 0, 8, 4849760, 0, 8, 4784224, 0, 8, 4718688, 0, 8, 4653152, 0, 8, 4587616, 0, 8, 4522080, 0, 8, 5701727, 0, 8, 5636191, 0, 8, 5570655, 0, 8, 5505119, 0, 8, 5439583, 0, 8, 5374047, 0, 8, 5308511, 0, 8, 5242975, 0, 8, 5177439, 0, 8, 5111903, 0, 8, 5046367, 0, 8, 4980831, 0, 8, 4915295, 0, 8, 4849759, 0, 8, 4784223, 0, 8, 4718687, 0, 8, 4653151, 0, 8, 4587615, 0, 8, 4522079, 0, 8, 5701726, 0, 8, 5636190, 0, 8, 5570654, 0, 8, 5505118, 0, 8, 5439582, 0, 8, 5374046, 0, 8, 5308510, 0, 8, 5242974, 0, 8, 5177438, 0, 8, 5111902, 0, 8, 5046366, 0, 8, 4980830, 0, 8, 4915294, 0, 8, 4849758, 0, 8, 4784222, 0, 8, 4718686, 0, 8, 4653150, 0, 8, 4587614, 0, 8, 4522078, 0, 8, 5701725, 0, 8, 5636189, 0, 8, 5570653, 0, 8, 5505117, 0, 8, 5439581, 0, 8, 5374045, 0, 8, 5308509, 0, 8, 5242973, 0, 8, 5177437, 0, 8, 5111901, 0, 8, 5046365, 0, 8, 4980829, 0, 8, 4915293, 0, 8, 4849757, 0, 8, 4784221, 0, 8, 4718685, 0, 8, 4653149, 0, 8, 4587613, 0, 8, 4522077, 0, 8, 5701724, 0, 8, 5636188, 0, 8, 5570652, 0, 8, 5505116, 0, 8, 5439580, 0, 8, 5374044, 0, 8, 5308508, 0, 8, 5242972, 0, 8, 5177436, 0, 8, 5111900, 0, 8, 5046364, 0, 8, 4980828, 0, 8, 4915292, 0, 8, 4849756, 0, 8, 4784220, 0, 8, 4718684, 0, 8, 4653148, 0, 8, 4587612, 0, 8, 4522076, 0, 8, 5701723, 0, 8, 5636187, 0, 8, 5570651, 0, 8, 5505115, 0, 8, 5439579, 0, 8, 5374043, 0, 8, 5308507, 0, 8, 5242971, 0, 8, 5177435, 0, 8, 5111899, 0, 8, 5046363, 0, 8, 4980827, 0, 8, 4915291, 0, 8, 4849755, 0, 8, 4784219, 0, 8, 4718683, 0, 8, 4653147, 0, 8, 4587611, 0, 8, 4522075, 0, 8, 5701722, 0, 8, 5636186, 0, 8, 5570650, 0, 8, 5505114, 0, 8, 5439578, 0, 8, 5374042, 0, 8, 5308506, 0, 8, 5242970, 0, 8, 5177434, 0, 8, 5111898, 0, 8, 5046362, 0, 8, 4980826, 0, 8, 4915290, 0, 8, 4849754, 0, 8, 4784218, 0, 8, 4718682, 0, 8, 4653146, 0, 8, 4587610, 0, 8, 4522074, 0, 8, 5701721, 0, 8, 5636185, 0, 8, 5570649, 0, 8, 5505113, 0, 8, 5439577, 0, 8, 5374041, 0, 8, 5308505, 0, 8, 5242969, 0, 8, 5177433, 0, 8, 5111897, 0, 8, 5046361, 0, 8, 5701720, 0, 8, 5636184, 0, 8, 5570648, 0, 8, 5505112, 0, 8, 5439576, 0, 8, 5374040, 0, 8, 5308504, 0, 8, 5242968, 0, 8, 5177432, 0, 8, 5111896, 0, 8, 5046360, 0, 8, 5701719, 0, 8, 5636183, 0, 8, 5570647, 0, 8, 5505111, 0, 8, 5439575, 0, 8, 5374039, 0, 8, 5308503, 0, 8, 5242967, 0, 8, 5177431, 0, 8, 5111895, 0, 8, 5046359, 0, 8, 5701718, 0, 8, 5636182, 0, 8, 5570646, 0, 8, 5505110, 0, 8, 5439574, 0, 8, 5374038, 0, 8, 5308502, 0, 8, 5242966, 0, 8, 5177430, 0, 8, 5111894, 0, 8, 5046358, 0, 8, 5701717, 0, 8, 5636181, 0, 8, 5570645, 0, 8, 5505109, 0, 8, 5439573, 0, 8, 5374037, 0, 8, 5308501, 0, 8, 5242965, 0, 8, 5177429, 0, 8, 5111893, 0, 8, 5046357, 0, 8, 5701716, 0, 8, 5636180, 0, 8, 5570644, 0, 8, 5505108, 0, 8, 5439572, 0, 8, 5374036, 0, 8, 5308500, 0, 8, 5242964, 0, 8, 5177428, 0, 8, 5111892, 0, 8, 5046356, 0, 8, 5701715, 0, 8, 5636179, 0, 8, 5570643, 0, 8, 5505107, 0, 8, 5439571, 0, 8, 5374035, 0, 8, 5308499, 0, 8, 5242963, 0, 8, 5177427, 0, 8, 5111891, 0, 8, 5046355, 0, 8, 5701714, 0, 8, 5636178, 0, 8, 5570642, 0, 8, 5505106, 0, 8, 5439570, 0, 8, 5374034, 0, 8, 5308498, 0, 8, 5242962, 0, 8, 5177426, 0, 8, 5111890, 0, 8, 5046354, 0, 8, 5701713, 0, 8, 5636177, 0, 8, 5570641, 0, 8, 5505105, 0, 8, 5439569, 0, 8, 5374033, 0, 8, 5308497, 0, 8, 5242961, 0, 8, 5177425, 0, 8, 5111889, 0, 8, 5046353, 0, 8, 5701712, 0, 8, 5636176, 0, 8, 5570640, 0, 8, 5505104, 0, 8, 5439568, 0, 8, 5374032, 0, 8, 5308496, 0, 8, 5242960, 0, 8, 5177424, 0, 8, 5111888, 0, 8, 5046352, 0, 8, 5701711, 0, 8, 5636175, 0, 8, 5570639, 0, 8, 5505103, 0, 8, 5439567, 0, 8, 5374031, 0, 8, 5308495, 0, 8, 5242959, 0, 8, 5177423, 0, 8, 5111887, 0, 8, 5046351, 0, 8, 5046350, 196608, 3, 5111886, 196608, 3, 5177422, 196608, 3, 5242958, 196608, 3, 5308494, 196608, 3, 5374030, 196608, 3, 5439566, 196608, 3, 5505102, 196608, 3, 5570638, 196608, 3, 5636174, 196608, 3, 5701710, 196608, 3, 5767248, 131072, 2, 5767246, 720896, 2, 5767249, 131072, 2, 5767247, 131072, 2, 5767250, 131072, 2, 5767251, 131072, 2, 5767252, 131072, 2, 5767253, 131072, 2, 5767254, 131072, 2, 5767255, 131072, 2, 5767256, 131072, 2, 5767257, 131072, 2, 5767258, 131072, 2, 5767259, 131072, 2, 5767260, 131072, 2, 5767261, 131072, 2, 5767262, 131072, 2, 5767263, 131072, 2, 5767264, 131072, 2, 5767265, 131072, 2, 5767266, 131072, 2, 5767267, 131072, 2, 5767268, 131072, 2, 5767269, 131072, 2, 5767270, 131072, 2, 5767271, 131072, 2, 5767272, 131072, 2, 5767273, 131072, 2, 5767274, 131072, 2, 5767275, 131072, 2, 5767276, 131072, 2, 5767277, 131072, 2, 5767278, 131072, 2, 5767279, 131072, 2, 5767280, 131072, 2, 5767281, 131072, 2, 5767282, 131072, 2, 5767283, 131072, 2, 5767284, 131072, 2, 5767285, 131072, 2, 5767286, 131072, 2, 5767287, 131072, 2, 5767288, 131072, 2, 3670137, 65536, 3, 3735673, 65536, 3, 3801209, 65536, 3, 3866745, 65536, 3, 3932281, 65536, 3, 3997817, 65536, 3, 4063353, 65536, 3, 4128889, 65536, 3, 4194425, 65536, 3, 4259961, 65536, 3, 4325497, 65536, 3, 4391033, 65536, 3, 4456569, 65536, 3, 4522105, 65536, 3, 4587641, 65536, 3, 4653177, 65536, 3, 4718713, 65536, 3, 4784249, 65536, 3, 4849785, 65536, 3, 4915321, 65536, 3, 4980857, 65536, 3, 5046393, 65536, 3, 5111929, 65536, 3, 5177465, 65536, 3, 5243001, 65536, 3, 5308537, 65536, 3, 5374073, 65536, 3, 5439609, 65536, 3, 5505145, 65536, 3, 5570681, 65536, 3, 5636217, 65536, 3, 5701753, 65536, 3, 5767289, 851968, 2, 3670104, 65536, 2, 3670105, 131072, 2, 3670106, 131072, 2, 3670107, 131072, 2, 3670108, 131072, 2, 3670109, 131072, 2, 3670110, 131072, 2, 3670111, 131072, 2, 3670112, 131072, 2, 3670113, 131072, 2, 3670114, 131072, 2, 3670115, 131072, 2, 3670116, 131072, 2, 3670117, 131072, 2, 3670118, 196608, 2, 3735654, 196608, 3, 3801190, 196608, 3, 3866726, 196608, 3, 3932262, 196608, 3, 3997798, 196608, 3, 4063334, 196608, 3, 4128870, 196608, 3, 4194406, 196608, 3, 4259942, 196608, 3, 4325478, 196608, 3, 4391014, 196608, 3, 4456550, 196608, 7, 4456536, 65536, 7, 4456537, 131072, 7, 4456538, 131072, 7, 4456539, 131072, 7, 4456540, 131072, 7, 4456541, 131072, 7, 4456542, 131072, 7, 4456543, 131072, 7, 4456544, 131072, 7, 4456545, 131072, 7, 4456546, 131072, 7, 4456547, 131072, 7, 4456548, 131072, 7, 4456549, 131072, 7, 3735640, 65536, 3, 3801176, 65536, 3, 3866712, 65536, 3, 3932248, 65536, 3, 3997784, 65536, 3, 4063320, 65536, 3, 4128856, 65536, 3, 4194392, 65536, 3, 4259928, 65536, 3, 4325464, 65536, 3, 4391000, 65536, 3, 6094913, 0, 8, 6029377, 0, 8, 5963841, 0, 8, 5898305, 0, 8, 5832769, 0, 8, 5767233, 0, 8, 5701697, 0, 8, 5636161, 0, 8, 5570625, 0, 8, 5505089, 0, 8, 5439553, 0, 8, 5374017, 0, 8, 5308481, 0, 8, 5242945, 0, 8, 5177409, 0, 8, 5111873, 0, 8, 5046337, 0, 8, 6094912, 0, 8, 6029376, 0, 8, 5963840, 0, 8, 5898304, 0, 8, 5832768, 0, 8, 5767232, 0, 8, 5701696, 0, 8, 5636160, 0, 8, 5570624, 0, 8, 5505088, 0, 8, 5439552, 0, 8, 5374016, 0, 8, 5308480, 0, 8, 5242944, 0, 8, 5177408, 0, 8, 5111872, 0, 8, 5046336, 0, 8, 6094911, 0, 8, 6029375, 0, 8, 5963839, 0, 8, 5898303, 0, 8, 5832767, 0, 8, 5767231, 0, 8, 5701695, 0, 8, 5636159, 0, 8, 5570623, 0, 8, 5505087, 0, 8, 5439551, 0, 8, 5374015, 0, 8, 5308479, 0, 8, 5242943, 0, 8, 5177407, 0, 8, 5111871, 0, 8, 5046335, 0, 8, 6094910, 0, 8, 6029374, 0, 8, 5963838, 0, 8, 5898302, 0, 8, 5832766, 0, 8, 5767230, 0, 8, 5701694, 0, 8, 5636158, 0, 8, 5570622, 0, 8, 5505086, 0, 8, 5439550, 0, 8, 5374014, 0, 8, 5308478, 0, 8, 5242942, 0, 8, 5177406, 0, 8, 5111870, 0, 8, 5046334, 0, 8, 6094909, 0, 8, 6029373, 0, 8, 5963837, 0, 8, 5898301, 0, 8, 5832765, 0, 8, 5767229, 0, 8, 5701693, 0, 8, 5636157, 0, 8, 5570621, 0, 8, 5505085, 0, 8, 5439549, 0, 8, 5374013, 0, 8, 5308477, 0, 8, 5242941, 0, 8, 5177405, 0, 8, 5111869, 0, 8, 5046333, 0, 8, 6094908, 0, 8, 6029372, 0, 8, 5963836, 0, 8, 5898300, 0, 8, 5832764, 0, 8, 5767228, 0, 8, 5701692, 0, 8, 5636156, 0, 8, 5570620, 0, 8, 5505084, 0, 8, 5439548, 0, 8, 5374012, 0, 8, 5308476, 0, 8, 5242940, 0, 8, 5177404, 0, 8, 5111868, 0, 8, 5046332, 0, 8, 6094907, 0, 8, 6029371, 0, 8, 5963835, 0, 8, 5898299, 0, 8, 5832763, 0, 8, 5767227, 0, 8, 5701691, 0, 8, 5636155, 0, 8, 5570619, 0, 8, 5505083, 0, 8, 5439547, 0, 8, 5374011, 0, 8, 5308475, 0, 8, 5242939, 0, 8, 5177403, 0, 8, 5111867, 0, 8, 5046331, 0, 8, 6094906, 0, 8, 6029370, 0, 8, 5963834, 0, 8, 5898298, 0, 8, 5832762, 0, 8, 5767226, 0, 8, 5701690, 0, 8, 5636154, 0, 8, 5570618, 0, 8, 5505082, 0, 8, 5439546, 0, 8, 5374010, 0, 8, 5308474, 0, 8, 5242938, 0, 8, 5177402, 0, 8, 5111866, 0, 8, 5046330, 0, 8, 6094905, 0, 8, 6029369, 0, 8, 5963833, 0, 8, 5898297, 0, 8, 5832761, 0, 8, 5767225, 0, 8, 5701689, 0, 8, 5636153, 0, 8, 5570617, 0, 8, 5505081, 0, 8, 5439545, 0, 8, 5374009, 0, 8, 5308473, 0, 8, 5242937, 0, 8, 5177401, 0, 8, 5111865, 0, 8, 5046329, 0, 8, 4980793, 0, 8, 4915257, 0, 8, 4849721, 0, 8, 4784185, 0, 8, 6094904, 0, 8, 6029368, 0, 8, 5963832, 0, 8, 5898296, 0, 8, 5832760, 0, 8, 5767224, 0, 8, 5701688, 0, 8, 5636152, 0, 8, 5570616, 0, 8, 5505080, 0, 8, 5439544, 0, 8, 5374008, 0, 8, 5308472, 0, 8, 5242936, 0, 8, 5177400, 0, 8, 5111864, 0, 8, 5046328, 0, 8, 4980792, 0, 8, 4915256, 0, 8, 4849720, 0, 8, 4784184, 0, 8, 6094903, 0, 8, 6029367, 0, 8, 5963831, 0, 8, 5898295, 0, 8, 5832759, 0, 8, 5767223, 0, 8, 5701687, 0, 8, 5636151, 0, 8, 5570615, 0, 8, 5505079, 0, 8, 5439543, 0, 8, 5374007, 0, 8, 5308471, 0, 8, 5242935, 0, 8, 5177399, 0, 8, 5111863, 0, 8, 5046327, 0, 8, 4980791, 0, 8, 4915255, 0, 8, 4849719, 0, 8, 4784183, 0, 8, 6094902, 0, 8, 6029366, 0, 8, 5963830, 0, 8, 5898294, 0, 8, 5832758, 0, 8, 5767222, 0, 8, 5701686, 0, 8, 5636150, 0, 8, 5570614, 0, 8, 5505078, 0, 8, 5439542, 0, 8, 5374006, 0, 8, 5308470, 0, 8, 5242934, 0, 8, 5177398, 0, 8, 5111862, 0, 8, 5046326, 0, 8, 4980790, 0, 8, 4915254, 0, 8, 4849718, 0, 8, 4784182, 0, 8, 6094901, 0, 8, 6029365, 0, 8, 5963829, 0, 8, 5898293, 0, 8, 5832757, 0, 8, 5767221, 0, 8, 5701685, 0, 8, 5636149, 0, 8, 5570613, 0, 8, 5505077, 0, 8, 5439541, 0, 8, 5374005, 0, 8, 5308469, 0, 8, 5242933, 0, 8, 5177397, 0, 8, 5111861, 0, 8, 5046325, 0, 8, 4980789, 0, 8, 4915253, 0, 8, 4849717, 0, 8, 4784181, 0, 8, 6094900, 0, 8, 6029364, 0, 8, 5963828, 0, 8, 5898292, 0, 8, 5832756, 0, 8, 5767220, 0, 8, 5701684, 0, 8, 5636148, 0, 8, 5570612, 0, 8, 5505076, 0, 8, 5439540, 0, 8, 5374004, 0, 8, 5308468, 0, 8, 5242932, 0, 8, 5177396, 0, 8, 5111860, 0, 8, 5046324, 0, 8, 4980788, 0, 8, 4915252, 0, 8, 4849716, 0, 8, 4784180, 0, 8, 6094899, 0, 8, 6029363, 0, 8, 5963827, 0, 8, 5898291, 0, 8, 5832755, 0, 8, 5767219, 0, 8, 5701683, 0, 8, 5636147, 0, 8, 5570611, 0, 8, 5505075, 0, 8, 5439539, 0, 8, 5374003, 0, 8, 5308467, 0, 8, 5242931, 0, 8, 5177395, 0, 8, 5111859, 0, 8, 5046323, 0, 8, 4980787, 0, 8, 4915251, 0, 8, 4849715, 0, 8, 4784179, 0, 8, 6094898, 0, 8, 6029362, 0, 8, 5963826, 0, 8, 5898290, 0, 8, 5832754, 0, 8, 5767218, 0, 8, 5701682, 0, 8, 5636146, 0, 8, 5570610, 0, 8, 5505074, 0, 8, 5439538, 0, 8, 5374002, 0, 8, 5308466, 0, 8, 5242930, 0, 8, 5177394, 0, 8, 5111858, 0, 8, 5046322, 0, 8, 4980786, 0, 8, 4915250, 0, 8, 4849714, 0, 8, 4784178, 0, 8, 6094897, 0, 8, 6029361, 0, 8, 5963825, 0, 8, 5898289, 0, 8, 5832753, 0, 8, 5767217, 0, 8, 5701681, 0, 8, 5636145, 0, 8, 5570609, 0, 8, 5505073, 0, 8, 5439537, 0, 8, 5374001, 0, 8, 5308465, 0, 8, 5242929, 0, 8, 5177393, 0, 8, 5111857, 0, 8, 5046321, 0, 8, 4980785, 0, 8, 4915249, 0, 8, 4849713, 0, 8, 4784177, 0, 8, 6094896, 0, 8, 6029360, 0, 8, 5963824, 0, 8, 5898288, 0, 8, 5832752, 0, 8, 5767216, 0, 8, 5701680, 0, 8, 5636144, 0, 8, 5570608, 0, 8, 5505072, 0, 8, 5439536, 0, 8, 5374000, 0, 8, 5308464, 0, 8, 5242928, 0, 8, 5177392, 0, 8, 5111856, 0, 8, 5046320, 0, 8, 4980784, 0, 8, 4915248, 0, 8, 4849712, 0, 8, 4784176, 0, 8, 6094895, 0, 8, 6029359, 0, 8, 5963823, 0, 8, 5898287, 0, 8, 5832751, 0, 8, 5767215, 0, 8, 5701679, 0, 8, 5636143, 0, 8, 5570607, 0, 8, 5505071, 0, 8, 5439535, 0, 8, 5373999, 0, 8, 5308463, 0, 8, 5242927, 0, 8, 5177391, 0, 8, 5111855, 0, 8, 5046319, 0, 8, 4980783, 0, 8, 4915247, 0, 8, 4849711, 0, 8, 4784175, 0, 8, 6094894, 0, 8, 6029358, 0, 8, 5963822, 0, 8, 5898286, 0, 8, 5832750, 0, 8, 5767214, 0, 8, 5701678, 0, 8, 5636142, 0, 8, 5570606, 0, 8, 5505070, 0, 8, 5439534, 0, 8, 5373998, 0, 8, 5308462, 0, 8, 5242926, 0, 8, 5177390, 0, 8, 5111854, 0, 8, 5046318, 0, 8, 4980782, 0, 8, 4915246, 0, 8, 4849710, 0, 8, 4784174, 0, 8, 6094893, 0, 8, 6029357, 0, 8, 5963821, 0, 8, 5898285, 0, 8, 5832749, 0, 8, 5767213, 0, 8, 5701677, 0, 8, 5636141, 0, 8, 5570605, 0, 8, 5505069, 0, 8, 5439533, 0, 8, 5373997, 0, 8, 5308461, 0, 8, 5242925, 0, 8, 5177389, 0, 8, 5111853, 0, 8, 5046317, 0, 8, 4980781, 0, 8, 4915245, 0, 8, 4849709, 0, 8, 4784173, 0, 8, 6094892, 0, 8, 6029356, 0, 8, 5963820, 0, 8, 5898284, 0, 8, 5832748, 0, 8, 5767212, 0, 8, 5701676, 0, 8, 5636140, 0, 8, 5570604, 0, 8, 5505068, 0, 8, 5439532, 0, 8, 5373996, 0, 8, 5308460, 0, 8, 5242924, 0, 8, 5177388, 0, 8, 5111852, 0, 8, 5046316, 0, 8, 4980780, 0, 8, 4915244, 0, 8, 4849708, 0, 8, 4784172, 0, 8, 6094891, 0, 8, 6029355, 0, 8, 5963819, 0, 8, 5898283, 0, 8, 5832747, 0, 8, 5767211, 0, 8, 5701675, 0, 8, 5636139, 0, 8, 5570603, 0, 8, 5505067, 0, 8, 5439531, 0, 8, 5373995, 0, 8, 5308459, 0, 8, 5242923, 0, 8, 5177387, 0, 8, 5111851, 0, 8, 5046315, 0, 8, 4980779, 0, 8, 4915243, 0, 8, 4849707, 0, 8, 4784171, 0, 8, 6094890, 0, 8, 6029354, 0, 8, 5963818, 0, 8, 5898282, 0, 8, 5832746, 0, 8, 5767210, 0, 8, 5701674, 0, 8, 5636138, 0, 8, 5570602, 0, 8, 5505066, 0, 8, 5439530, 0, 8, 5373994, 0, 8, 5308458, 0, 8, 5242922, 0, 8, 5177386, 0, 8, 5111850, 0, 8, 5046314, 0, 8, 4980778, 0, 8, 4915242, 0, 8, 4849706, 0, 8, 4784170, 0, 8, 6094889, 0, 8, 6029353, 0, 8, 5963817, 0, 8, 5898281, 0, 8, 5832745, 0, 8, 5767209, 0, 8, 5701673, 0, 8, 5636137, 0, 8, 5570601, 0, 8, 5505065, 0, 8, 5439529, 0, 8, 5373993, 0, 8, 5308457, 0, 8, 5242921, 0, 8, 5177385, 0, 8, 5111849, 0, 8, 5046313, 0, 8, 4980777, 0, 8, 4915241, 0, 8, 4849705, 0, 8, 4784169, 0, 8, 6094888, 0, 8, 6029352, 0, 8, 5963816, 0, 8, 5898280, 0, 8, 5832744, 0, 8, 5767208, 0, 8, 5701672, 0, 8, 5636136, 0, 8, 5570600, 0, 8, 5505064, 0, 8, 5439528, 0, 8, 5373992, 0, 8, 5308456, 0, 8, 5242920, 0, 8, 5177384, 0, 8, 5111848, 0, 8, 5046312, 0, 8, 4980776, 0, 8, 4915240, 0, 8, 4849704, 0, 8, 4784168, 0, 8, 6094887, 0, 8, 6029351, 0, 8, 5963815, 0, 8, 5898279, 0, 8, 5832743, 0, 8, 5767207, 0, 8, 5701671, 0, 8, 5636135, 0, 8, 5570599, 0, 8, 5505063, 0, 8, 5439527, 0, 8, 5373991, 0, 8, 5308455, 0, 8, 5242919, 0, 8, 5177383, 0, 8, 5111847, 0, 8, 5046311, 0, 8, 4980775, 0, 8, 4915239, 0, 8, 4849703, 0, 8, 4784167, 0, 8, 6094886, 0, 8, 6029350, 0, 8, 5963814, 0, 8, 5898278, 0, 8, 5832742, 0, 8, 5767206, 0, 8, 5701670, 0, 8, 5636134, 0, 8, 5570598, 0, 8, 5505062, 0, 8, 5439526, 0, 8, 5373990, 0, 8, 5308454, 0, 8, 5242918, 0, 8, 5177382, 0, 8, 5111846, 0, 8, 5046310, 0, 8, 4980774, 0, 8, 4915238, 0, 8, 4849702, 0, 8, 4784166, 0, 8, 6094885, 0, 8, 6029349, 0, 8, 5963813, 0, 8, 5898277, 0, 8, 5832741, 0, 8, 5767205, 0, 8, 5701669, 0, 8, 5636133, 0, 8, 5570597, 0, 8, 5505061, 0, 8, 5439525, 0, 8, 5373989, 0, 8, 5308453, 0, 8, 5242917, 0, 8, 5177381, 0, 8, 5111845, 0, 8, 5046309, 0, 8, 4980773, 0, 8, 4915237, 0, 8, 4849701, 0, 8, 4784165, 0, 8, 6094884, 0, 8, 6029348, 0, 8, 5963812, 0, 8, 5898276, 0, 8, 5832740, 0, 8, 5767204, 0, 8, 5701668, 0, 8, 5636132, 0, 8, 5570596, 0, 8, 5505060, 0, 8, 5439524, 0, 8, 5373988, 0, 8, 5308452, 0, 8, 5242916, 0, 8, 5177380, 0, 8, 5111844, 0, 8, 5046308, 0, 8, 4980772, 0, 8, 4915236, 0, 8, 4849700, 0, 8, 4784164, 0, 8, 6094883, 0, 8, 6029347, 0, 8, 5963811, 0, 8, 5898275, 0, 8, 5832739, 0, 8, 5767203, 0, 8, 5701667, 0, 8, 5636131, 0, 8, 5570595, 0, 8, 5505059, 0, 8, 5439523, 0, 8, 5373987, 0, 8, 5308451, 0, 8, 5242915, 0, 8, 5177379, 0, 8, 5111843, 0, 8, 5046307, 0, 8, 4980771, 0, 8, 4915235, 0, 8, 4849699, 0, 8, 4784163, 0, 8, 6094882, 0, 8, 6029346, 0, 8, 5963810, 0, 8, 5898274, 0, 8, 5832738, 0, 8, 5767202, 0, 8, 5701666, 0, 8, 5636130, 0, 8, 5570594, 0, 8, 5505058, 0, 8, 5439522, 0, 8, 5373986, 0, 8, 5308450, 0, 8, 5242914, 0, 8, 5177378, 0, 8, 5111842, 0, 8, 5046306, 0, 8, 4980770, 0, 8, 4915234, 0, 8, 4849698, 0, 8, 4784162, 0, 8, 6094881, 0, 8, 6029345, 0, 8, 5963809, 0, 8, 5898273, 0, 8, 5832737, 0, 8, 5767201, 0, 8, 5701665, 0, 8, 5636129, 0, 8, 5570593, 0, 8, 5505057, 0, 8, 5439521, 0, 8, 5373985, 0, 8, 5308449, 0, 8, 5242913, 0, 8, 5177377, 0, 8, 5111841, 0, 8, 5046305, 0, 8, 4980769, 0, 8, 4915233, 0, 8, 4849697, 0, 8, 4784161, 0, 8, 6094880, 0, 8, 6029344, 0, 8, 5963808, 0, 8, 5898272, 0, 8, 5832736, 0, 8, 5767200, 0, 8, 5701664, 0, 8, 5636128, 0, 8, 5570592, 0, 8, 5505056, 0, 8, 5439520, 0, 8, 5373984, 0, 8, 5308448, 0, 8, 5242912, 0, 8, 5177376, 0, 8, 5111840, 0, 8, 5046304, 0, 8, 6094879, 0, 8, 6029343, 0, 8, 5963807, 0, 8, 5898271, 0, 8, 5832735, 0, 8, 5767199, 0, 8, 5701663, 0, 8, 5636127, 0, 8, 5570591, 0, 8, 5505055, 0, 8, 5439519, 0, 8, 5373983, 0, 8, 5308447, 0, 8, 5242911, 0, 8, 5177375, 0, 8, 5111839, 0, 8, 5046303, 0, 8, 6094878, 0, 8, 6029342, 0, 8, 5963806, 0, 8, 5898270, 0, 8, 5832734, 0, 8, 5767198, 0, 8, 5701662, 0, 8, 5636126, 0, 8, 5570590, 0, 8, 5505054, 0, 8, 5439518, 0, 8, 5373982, 0, 8, 5308446, 0, 8, 5242910, 0, 8, 5177374, 0, 8, 5111838, 0, 8, 5046302, 0, 8, 6094877, 0, 8, 6029341, 0, 8, 5963805, 0, 8, 5898269, 0, 8, 5832733, 0, 8, 5767197, 0, 8, 5701661, 0, 8, 5636125, 0, 8, 5570589, 0, 8, 5505053, 0, 8, 5439517, 0, 8, 5373981, 0, 8, 5308445, 0, 8, 5242909, 0, 8, 5177373, 0, 8, 5111837, 0, 8, 5046301, 0, 8, 6094876, 0, 8, 6029340, 0, 8, 5963804, 0, 8, 5898268, 0, 8, 5832732, 0, 8, 5767196, 0, 8, 5701660, 0, 8, 5636124, 0, 8, 5570588, 0, 8, 5505052, 0, 8, 5439516, 0, 8, 5373980, 0, 8, 5308444, 0, 8, 5242908, 0, 8, 5177372, 0, 8, 5111836, 0, 8, 5046300, 0, 8, 6094875, 0, 8, 6029339, 0, 8, 5963803, 0, 8, 5898267, 0, 8, 5832731, 0, 8, 5767195, 0, 8, 5701659, 0, 8, 5636123, 0, 8, 5570587, 0, 8, 5505051, 0, 8, 5439515, 0, 8, 5373979, 0, 8, 5308443, 0, 8, 5242907, 0, 8, 5177371, 0, 8, 5111835, 0, 8, 5046299, 0, 8, 6094874, 0, 8, 6029338, 0, 8, 5963802, 0, 8, 5898266, 0, 8, 5832730, 0, 8, 5767194, 0, 8, 5701658, 0, 8, 5636122, 0, 8, 5570586, 0, 8, 5505050, 0, 8, 5439514, 0, 8, 5373978, 0, 8, 5308442, 0, 8, 5242906, 0, 8, 5177370, 0, 8, 5111834, 0, 8, 5046298, 0, 8, 6094873, 0, 8, 6029337, 0, 8, 5963801, 0, 8, 5898265, 0, 8, 5832729, 0, 8, 5767193, 0, 8, 5701657, 0, 8, 5636121, 0, 8, 5570585, 0, 8, 5505049, 0, 8, 5439513, 0, 8, 5373977, 0, 8, 5308441, 0, 8, 5242905, 0, 8, 5177369, 0, 8, 5111833, 0, 8, 5046297, 0, 8, 6094872, 0, 8, 6029336, 0, 8, 5963800, 0, 8, 5898264, 0, 8, 5832728, 0, 8, 5767192, 0, 8, 5701656, 0, 8, 5636120, 0, 8, 5570584, 0, 8, 5505048, 0, 8, 5439512, 0, 8, 5373976, 0, 8, 5308440, 0, 8, 5242904, 0, 8, 5177368, 0, 8, 5111832, 0, 8, 5046296, 0, 8, 6094871, 0, 8, 6029335, 0, 8, 5963799, 0, 8, 5898263, 0, 8, 5832727, 0, 8, 5767191, 0, 8, 5701655, 0, 8, 5636119, 0, 8, 5570583, 0, 8, 5505047, 0, 8, 5439511, 0, 8, 5373975, 0, 8, 5308439, 0, 8, 5242903, 0, 8, 5177367, 0, 8, 5111831, 0, 8, 5046295, 0, 8, 6094870, 0, 8, 6029334, 0, 8, 5963798, 0, 8, 5898262, 0, 8, 5832726, 0, 8, 5767190, 0, 8, 5701654, 0, 8, 5636118, 0, 8, 5570582, 0, 8, 5505046, 0, 8, 5439510, 0, 8, 5373974, 0, 8, 5308438, 0, 8, 5242902, 0, 8, 5177366, 0, 8, 5111830, 0, 8, 5046294, 0, 8, 6094869, 0, 8, 6029333, 0, 8, 5963797, 0, 8, 5898261, 0, 8, 5832725, 0, 8, 5767189, 0, 8, 5701653, 0, 8, 5636117, 0, 8, 5570581, 0, 8, 5505045, 0, 8, 5439509, 0, 8, 5373973, 0, 8, 5308437, 0, 8, 5242901, 0, 8, 5177365, 0, 8, 5111829, 0, 8, 5046293, 0, 8, 6094868, 0, 8, 6029332, 0, 8, 5963796, 0, 8, 5898260, 0, 8, 5832724, 0, 8, 5767188, 0, 8, 5701652, 0, 8, 5636116, 0, 8, 5570580, 0, 8, 5505044, 0, 8, 5439508, 0, 8, 5373972, 0, 8, 5308436, 0, 8, 5242900, 0, 8, 5177364, 0, 8, 5111828, 0, 8, 5046292, 0, 8, 6094867, 0, 8, 6029331, 0, 8, 5963795, 0, 8, 5898259, 0, 8, 5832723, 0, 8, 5767187, 0, 8, 5701651, 0, 8, 5636115, 0, 8, 5570579, 0, 8, 5505043, 0, 8, 5439507, 0, 8, 5373971, 0, 8, 5308435, 0, 8, 5242899, 0, 8, 5177363, 0, 8, 5111827, 0, 8, 5046291, 0, 8, 5046290, 196608, 3, 5111826, 196608, 3, 5177362, 196608, 3, 5242898, 196608, 3, 5308434, 196608, 3, 5373970, 196608, 3, 5439506, 196608, 3, 5505042, 196608, 3, 5570578, 196608, 3, 5636114, 196608, 3, 5701650, 196608, 3, 5767186, 196608, 3, 5832722, 196608, 3, 5898258, 196608, 3, 5963794, 196608, 3, 6029330, 196608, 3, 6094866, 196608, 3, 6160404, 131072, 2, 6160402, 720896, 2, 6160405, 131072, 2, 6160403, 131072, 2, 6160406, 131072, 2, 6160407, 131072, 2, 6160408, 131072, 2, 6160409, 131072, 2, 6160410, 131072, 2, 6160411, 131072, 2, 6160412, 131072, 2, 6160413, 131072, 2, 6160414, 131072, 2, 6160415, 131072, 2, 6160416, 131072, 2, 4718625, 131072, 7, 6160417, 131072, 2, 4718626, 131072, 7, 6160418, 131072, 2, 4718627, 131072, 7, 6160419, 131072, 2, 4718628, 131072, 7, 6160420, 131072, 2, 4718629, 131072, 7, 6160421, 131072, 2, 4718630, 131072, 7, 6160422, 131072, 2, 4718631, 131072, 7, 6160423, 131072, 2, 4718632, 131072, 7, 6160424, 131072, 2, 4718633, 131072, 7, 6160425, 131072, 2, 4718634, 131072, 7, 6160426, 131072, 2, 4718635, 131072, 7, 6160427, 131072, 2, 4718636, 131072, 7, 6160428, 131072, 2, 4718637, 131072, 7, 6160429, 131072, 2, 4718638, 131072, 7, 6160430, 131072, 2, 4718639, 131072, 7, 6160431, 131072, 2, 4718640, 131072, 7, 6160432, 131072, 2, 4718641, 131072, 7, 6160433, 131072, 2, 4718642, 131072, 7, 6160434, 131072, 2, 4718643, 131072, 7, 6160435, 131072, 2, 4718644, 131072, 7, 6160436, 131072, 2, 4718645, 131072, 7, 6160437, 131072, 2, 4718646, 131072, 7, 6160438, 131072, 2, 4718647, 131072, 7, 6160439, 131072, 2, 4718648, 131072, 7, 6160440, 131072, 2, 4718649, 131072, 7, 6160441, 131072, 2, 6160442, 131072, 2, 6160443, 131072, 2, 6160444, 131072, 2, 6160445, 131072, 2, 6160446, 131072, 2, 6160447, 131072, 2, 6160448, 131072, 2, 6160449, 131072, 2, 5046338, 65536, 3, 5111874, 65536, 3, 5177410, 65536, 3, 5242946, 65536, 3, 5308482, 65536, 3, 5374018, 65536, 3, 5439554, 65536, 3, 5505090, 65536, 3, 5570626, 65536, 3, 5636162, 65536, 3, 5701698, 65536, 3, 5767234, 65536, 3, 5832770, 65536, 3, 5898306, 65536, 3, 5963842, 65536, 3, 6029378, 65536, 3, 6094914, 65536, 3, 6160450, 851968, 2)
diff --git a/DungeonShooting_Godot/scene/test/TestTerrain2x2.tscn b/DungeonShooting_Godot/scene/test/TestTerrain2x2.tscn
new file mode 100644
index 0000000..3244a52
--- /dev/null
+++ b/DungeonShooting_Godot/scene/test/TestTerrain2x2.tscn
@@ -0,0 +1,123 @@
+[gd_scene load_steps=4 format=3 uid="uid://bwxo7kc5ybrou"]
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_23gwl"]
+0:0/0 = 0
+1:0/0 = 0
+2:0/0 = 0
+3:0/0 = 0
+4:0/0 = 0
+5:0/0 = 0
+6:0/0 = 0
+7:0/0 = 0
+8:0/0 = 0
+8:0/0/terrain_set = 0
+8:0/0/terrain = 0
+8:0/0/terrains_peering_bit/bottom_right_corner = 0
+9:0/0 = 0
+10:0/0 = 0
+10:0/0/terrain_set = 0
+10:0/0/terrain = 0
+10:0/0/terrains_peering_bit/bottom_right_corner = 0
+10:0/0/terrains_peering_bit/bottom_left_corner = 0
+11:0/0 = 0
+11:0/0/terrain_set = 0
+11:0/0/terrain = 0
+11:0/0/terrains_peering_bit/bottom_left_corner = 0
+0:1/0 = 0
+1:1/0 = 0
+2:1/0 = 0
+3:1/0 = 0
+4:1/0 = 0
+5:1/0 = 0
+5:1/0/terrain_set = 0
+5:1/0/terrain = 0
+5:1/0/terrains_peering_bit/bottom_right_corner = 0
+5:1/0/terrains_peering_bit/bottom_left_corner = 0
+5:1/0/terrains_peering_bit/top_right_corner = 0
+6:1/0 = 0
+6:1/0/terrain_set = 0
+6:1/0/terrain = 0
+6:1/0/terrains_peering_bit/bottom_right_corner = 0
+6:1/0/terrains_peering_bit/bottom_left_corner = 0
+6:1/0/terrains_peering_bit/top_left_corner = 0
+7:1/0 = 0
+8:1/0 = 0
+8:1/0/terrain_set = 0
+8:1/0/terrain = 0
+8:1/0/terrains_peering_bit/bottom_right_corner = 0
+8:1/0/terrains_peering_bit/top_right_corner = 0
+9:1/0 = 0
+11:1/0 = 0
+0:2/0 = 0
+1:2/0 = 0
+2:2/0 = 0
+3:2/0 = 0
+4:2/0 = 0
+5:2/0 = 0
+5:2/0/terrain_set = 0
+5:2/0/terrain = 0
+5:2/0/terrains_peering_bit/bottom_right_corner = 0
+5:2/0/terrains_peering_bit/top_left_corner = 0
+5:2/0/terrains_peering_bit/top_right_corner = 0
+6:2/0 = 0
+6:2/0/terrain_set = 0
+6:2/0/terrain = 0
+6:2/0/terrains_peering_bit/bottom_left_corner = 0
+6:2/0/terrains_peering_bit/top_left_corner = 0
+6:2/0/terrains_peering_bit/top_right_corner = 0
+7:2/0 = 0
+8:2/0 = 0
+8:2/0/terrain_set = 0
+9:2/0 = 0
+9:2/0/terrain_set = 0
+9:2/0/terrain = 0
+9:2/0/terrains_peering_bit/bottom_right_corner = 0
+9:2/0/terrains_peering_bit/bottom_left_corner = 0
+9:2/0/terrains_peering_bit/top_left_corner = 0
+9:2/0/terrains_peering_bit/top_right_corner = 0
+10:2/0 = 0
+11:2/0 = 0
+11:2/0/terrain_set = 0
+11:2/0/terrain = 0
+11:2/0/terrains_peering_bit/bottom_left_corner = 0
+11:2/0/terrains_peering_bit/top_left_corner = 0
+0:3/0 = 0
+1:3/0 = 0
+2:3/0 = 0
+3:3/0 = 0
+4:3/0 = 0
+5:3/0 = 0
+6:3/0 = 0
+7:3/0 = 0
+8:3/0 = 0
+8:3/0/terrain_set = 0
+8:3/0/terrain = 0
+8:3/0/terrains_peering_bit/top_right_corner = 0
+9:3/0 = 0
+9:3/0/terrain_set = 0
+9:3/0/terrain = 0
+9:3/0/terrains_peering_bit/top_left_corner = 0
+9:3/0/terrains_peering_bit/top_right_corner = 0
+10:3/0 = 0
+11:3/0 = 0
+11:3/0/terrain_set = 0
+11:3/0/terrain = 0
+11:3/0/terrains_peering_bit/top_left_corner = 0
+0:4/0 = 0
+1:4/0 = 0
+2:4/0 = 0
+3:4/0 = 0
+4:4/0 = 0
+
+[sub_resource type="TileSet" id="TileSet_ii6g3"]
+terrain_set_0/mode = 1
+terrain_set_0/terrain_0/name = "Terrain 0"
+terrain_set_0/terrain_0/color = Color(0.501961, 0.345098, 0.25098, 1)
+sources/0 = SubResource("TileSetAtlasSource_23gwl")
+
+[node name="TestTerrain2x2" type="Node2D"]
+
+[node name="TileMap" type="TileMap" parent="."]
+tile_set = SubResource("TileSet_ii6g3")
+format = 2
+layer_0/tile_data = PackedInt32Array(-1, 589824, 2, -65536, 589824, 2, -65535, 589824, 2, -65534, 589824, 2, -65533, 589824, 2, 1, 589824, 2, 0, 589824, 2, 65535, 589824, 2, -65529, 589824, 2, -65530, 589824, 2, 7, 589824, 2, -131065, 589824, 2, -196601, 589824, 2, -131066, 589824, 2, -196602, 589824, 2, -131072, 589824, 2, -196608, 589824, 2, -65537, 589824, 2, -131073, 589824, 2, -2, 589824, 2, -65538, 589824, 2, -131074, 327680, 1, -3, 327680, 2, -65539, 589824, 2, -131075, 655360, 0, -4, 524288, 3, -65540, 524288, 1, -131076, 524288, 0, 196606, 327680, 2, 131070, 589824, 2, 65534, 589824, 2, 196605, 524288, 3, 131069, 524288, 1, 65533, 524288, 1, 131075, 589824, 2, 65539, 589824, 2, 196610, 589824, 2, 131074, 589824, 2, 65538, 589824, 2, 196609, 589824, 2, 131073, 589824, 2, 65537, 589824, 2, 196608, 589824, 2, 131072, 589824, 2, 65536, 589824, 2, 131077, 589824, 2, -65528, 589824, 2, -65527, 589824, 2, 9, 589824, 2, 10, 720896, 2, 8, 589824, 2, -65526, 720896, 2, -131069, 589824, 2, -196605, 589824, 2, -196606, 589824, 2, -262142, 655360, 0, -262141, 655360, 0, -131070, 589824, 2, 262146, 589824, 2, 327682, 589824, 2, 393218, 589824, 3, 262145, 589824, 2, 327681, 589824, 2, 393217, 589824, 3, 327683, 589824, 2, 327684, 589824, 2, 327685, 589824, 2, 393221, 589824, 3, 393220, 589824, 3, 393219, 589824, 3, 327680, 589824, 2, 393216, 589824, 3, 458751, 589824, 3, 393215, 589824, 2, 393214, 327680, 1, 393213, 655360, 0, 458750, 589824, 3, 458749, 589824, 3, 393211, 655360, 0, 458747, 589824, 3, 458748, 589824, 3, 393212, 655360, 0, 393210, 655360, 0, 458746, 589824, 3, 393209, 393216, 1, 393208, 327680, 2, 458744, 524288, 3, 458745, 589824, 3, 327673, 720896, 2, 327672, 327680, 1, 262136, 524288, 1, 262137, 720896, 2, 196601, 720896, 2, 196600, 327680, 2, -7, 720896, 2, -8, 524288, 1, 65529, 720896, 2, 65528, 524288, 1, 131065, 720896, 2, 131064, 327680, 1, -65543, 720896, 2, -131079, 720896, 0, -65544, 327680, 2, -131080, 655360, 0, -65545, 589824, 3, -131081, 655360, 0, -65546, 524288, 3, -131082, 524288, 0, 196599, 589824, 3, 131063, 655360, 0, 196598, 524288, 3, 131062, 524288, 0, 393207, 524288, 3, 327671, 524288, 0, -196609, 393216, 1, -262145, 720896, 0, -196610, 524288, 1, -262146, 524288, 0, 131081, 589824, 2, 65545, 589824, 2, 131080, 589824, 2, 65544, 589824, 2, 131079, 589824, 2, 393223, 589824, 3, 327687, 589824, 2, 262151, 589824, 2, 196615, 589824, 2, 393222, 589824, 3, 327686, 589824, 2, 262150, 589824, 2, -131067, 589824, 2, -131064, 589824, 2, 196616, 589824, 2, 262147, 589824, 2, 65541, 589824, 2, 262144, 589824, 2, 3, 589824, 2, -196604, 589824, 2, -196603, 589824, 2, -131068, 589824, 2, -65532, 589824, 2, 4, 589824, 2, 131076, 589824, 2, 196612, 589824, 2, 196613, 589824, 2, 131078, 589824, 2, 65542, 589824, 2, 6, 589824, 2, 5, 589824, 2, 262149, 589824, 2, 262148, 589824, 2, 196614, 589824, 2, 327688, 589824, 2, 262152, 589824, 2, -65531, 589824, 2, -262140, 655360, 0, -262143, 655360, 0, -262144, 655360, 0, -131071, 589824, 2, -196607, 589824, 2, -262139, 655360, 0, -262138, 655360, 0, -262137, 655360, 0, -262136, 655360, 0, -196600, 589824, 2, -131063, 589824, 2, -196599, 589824, 2, -262135, 655360, 0, -131062, 720896, 2, -196598, 720896, 2, -262134, 720896, 0, 65546, 720896, 2, 131082, 720896, 2, 196618, 720896, 2, 262154, 720896, 2, 327690, 720896, 2, 262153, 589824, 2, 196617, 589824, 2, 393224, 589824, 3, 393225, 589824, 3, 327689, 589824, 2, 393226, 720896, 3, 327679, 589824, 2, 262143, 589824, 2, 196607, 589824, 2, 131071, 589824, 2, 327678, 524288, 1, 262142, 524288, 1, 196611, 589824, 2, 2, 589824, 2, 65543, 589824, 2, -655350, 655360, 0, -589814, 589824, 2, -589813, 589824, 2, 65540, 589824, 2, -655349, 655360, 0, -589812, 589824, 2, -589811, 589824, 2, -589810, 589824, 2, -589809, 720896, 2, -655345, 720896, 0, -655346, 655360, 0, -655347, 655360, 0, -655348, 655360, 0, -589815, 589824, 2, -655351, 655360, 0, -655352, 655360, 0, -655353, 655360, 0, -589817, 589824, 2, -589816, 589824, 2, -524278, 589824, 2, -524277, 589824, 2, -458741, 589824, 3, -458742, 589824, 3, -524276, 589824, 2, -524275, 589824, 2, -524279, 589824, 2, -524280, 589824, 2, -524281, 589824, 2, -458744, 589824, 3, -458743, 589824, 3, -458740, 589824, 3, -458739, 589824, 3, -458738, 589824, 3, -524274, 589824, 2, -524273, 720896, 2, -458737, 720896, 3, -458745, 589824, 3, -655354, 524288, 0, -589818, 524288, 1, -524282, 524288, 1, -458746, 524288, 3)
diff --git a/DungeonShooting_Godot/scene/test/TestTileLayer.tscn b/DungeonShooting_Godot/scene/test/TestTileLayer.tscn
index 43c3ad7..1e47c5b 100644
--- a/DungeonShooting_Godot/scene/test/TestTileLayer.tscn
+++ b/DungeonShooting_Godot/scene/test/TestTileLayer.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=13 format=3 uid="uid://d1m4kunwifxax"]
-[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/map/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1"]
[ext_resource type="Texture2D" uid="uid://ddhkhfaos2w1g" path="res://resource/sprite/role/enemy0001/enemy0001.png" id="2"]
[ext_resource type="Texture2D" uid="uid://5geiuvv6hyov" path="res://resource/sprite/weapon/gun2.png" id="3"]
[ext_resource type="Texture2D" uid="uid://dto03bc2qbhnj" path="res://resource/sprite/shell/Shell0001.png" id="4"]
@@ -8,6 +8,7 @@
+
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ch2b5"]
texture = ExtResource("1")
margins = Vector2i(80, 144)
diff --git a/DungeonShooting_Godot/scene/test/TestTrail.tscn b/DungeonShooting_Godot/scene/test/TestTrail.tscn
new file mode 100644
index 0000000..79afee9
--- /dev/null
+++ b/DungeonShooting_Godot/scene/test/TestTrail.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=5 format=3 uid="uid://brum5fmbt1br4"]
+
+[ext_resource type="Script" path="res://src/test/TestTrail.cs" id="1_mefd0"]
+[ext_resource type="PackedScene" uid="uid://ddwikcidm0gsi" path="res://prefab/effect/common/Trail0001.tscn" id="2_t308a"]
+[ext_resource type="Texture2D" uid="uid://bn8k07n2y6lmr" path="res://resource/sprite/bullet/normal/bullet0006.png" id="2_w7ffd"]
+
+[sub_resource type="Gradient" id="Gradient_gds2p"]
+resource_local_to_scene = true
+offsets = PackedFloat32Array(0.825949, 1)
+colors = PackedColorArray(1, 1, 1, 0.705882, 1, 1, 1, 0)
+
+[node name="TestTrail" type="Node2D"]
+script = ExtResource("1_mefd0")
+
+[node name="Trail" parent="." instance=ExtResource("2_t308a")]
+gradient = SubResource("Gradient_gds2p")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture = ExtResource("2_w7ffd")
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig.cs b/DungeonShooting_Godot/src/config/ExcelConfig.cs
index bf3c620..8bb7fd3 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig.cs
@@ -8,13 +8,22 @@
public static partial class ExcelConfig
{
///
- /// ActivityBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ /// Sound.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
///
- public static List ActivityBase_List { get; private set; }
+ public static List Sound_List { get; private set; }
///
- /// ActivityBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ /// Sound.xlsx表数据集合, 里 Map 形式存储, key 为 Id
///
- public static Dictionary ActivityBase_Map { get; private set; }
+ public static Dictionary Sound_Map { get; private set; }
+
+ ///
+ /// WeaponBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ ///
+ public static List WeaponBase_List { get; private set; }
+ ///
+ /// WeaponBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ ///
+ public static Dictionary WeaponBase_Map { get; private set; }
///
/// ActivityMaterial.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
@@ -53,6 +62,15 @@
public static Dictionary EnemyBase_Map { get; private set; }
///
+ /// ActivityBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ ///
+ public static List ActivityBase_List { get; private set; }
+ ///
+ /// ActivityBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ ///
+ public static Dictionary ActivityBase_Map { get; private set; }
+
+ ///
/// LiquidMaterial.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
///
public static List LiquidMaterial_List { get; private set; }
@@ -61,24 +79,6 @@
///
public static Dictionary LiquidMaterial_Map { get; private set; }
- ///
- /// Sound.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
- ///
- public static List Sound_List { get; private set; }
- ///
- /// Sound.xlsx表数据集合, 里 Map 形式存储, key 为 Id
- ///
- public static Dictionary Sound_Map { get; private set; }
-
- ///
- /// WeaponBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
- ///
- public static List WeaponBase_List { get; private set; }
- ///
- /// WeaponBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
- ///
- public static Dictionary WeaponBase_Map { get; private set; }
-
private static bool _init = false;
///
@@ -89,35 +89,53 @@
if (_init) return;
_init = true;
- _InitActivityBaseConfig();
+ _InitSoundConfig();
+ _InitWeaponBaseConfig();
_InitActivityMaterialConfig();
_InitAiAttackAttrConfig();
_InitBulletBaseConfig();
_InitEnemyBaseConfig();
+ _InitActivityBaseConfig();
_InitLiquidMaterialConfig();
- _InitSoundConfig();
- _InitWeaponBaseConfig();
- _InitActivityBaseRef();
- _InitEnemyBaseRef();
_InitWeaponBaseRef();
+ _InitEnemyBaseRef();
+ _InitActivityBaseRef();
}
- private static void _InitActivityBaseConfig()
+ private static void _InitSoundConfig()
{
try
{
- var text = _ReadConfigAsText("res://resource/config/ActivityBase.json");
- ActivityBase_List = new List(JsonSerializer.Deserialize>(text));
- ActivityBase_Map = new Dictionary();
- foreach (var item in ActivityBase_List)
+ var text = _ReadConfigAsText("res://resource/config/Sound.json");
+ Sound_List = JsonSerializer.Deserialize>(text);
+ Sound_Map = new Dictionary();
+ foreach (var item in Sound_List)
{
- ActivityBase_Map.Add(item.Id, item);
+ Sound_Map.Add(item.Id, item);
}
}
catch (Exception e)
{
GD.PrintErr(e.ToString());
- throw new Exception("初始化表'ActivityBase'失败!");
+ throw new Exception("初始化表'Sound'失败!");
+ }
+ }
+ private static void _InitWeaponBaseConfig()
+ {
+ try
+ {
+ var text = _ReadConfigAsText("res://resource/config/WeaponBase.json");
+ WeaponBase_List = new List(JsonSerializer.Deserialize>(text));
+ WeaponBase_Map = new Dictionary();
+ foreach (var item in WeaponBase_List)
+ {
+ WeaponBase_Map.Add(item.Id, item);
+ }
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化表'WeaponBase'失败!");
}
}
private static void _InitActivityMaterialConfig()
@@ -192,6 +210,24 @@
throw new Exception("初始化表'EnemyBase'失败!");
}
}
+ private static void _InitActivityBaseConfig()
+ {
+ try
+ {
+ var text = _ReadConfigAsText("res://resource/config/ActivityBase.json");
+ ActivityBase_List = new List(JsonSerializer.Deserialize>(text));
+ ActivityBase_Map = new Dictionary();
+ foreach (var item in ActivityBase_List)
+ {
+ ActivityBase_Map.Add(item.Id, item);
+ }
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化表'ActivityBase'失败!");
+ }
+ }
private static void _InitLiquidMaterialConfig()
{
try
@@ -210,81 +246,7 @@
throw new Exception("初始化表'LiquidMaterial'失败!");
}
}
- private static void _InitSoundConfig()
- {
- try
- {
- var text = _ReadConfigAsText("res://resource/config/Sound.json");
- Sound_List = JsonSerializer.Deserialize>(text);
- Sound_Map = new Dictionary();
- foreach (var item in Sound_List)
- {
- Sound_Map.Add(item.Id, item);
- }
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- throw new Exception("初始化表'Sound'失败!");
- }
- }
- private static void _InitWeaponBaseConfig()
- {
- try
- {
- var text = _ReadConfigAsText("res://resource/config/WeaponBase.json");
- WeaponBase_List = new List(JsonSerializer.Deserialize>(text));
- WeaponBase_Map = new Dictionary();
- foreach (var item in WeaponBase_List)
- {
- WeaponBase_Map.Add(item.Id, item);
- }
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- throw new Exception("初始化表'WeaponBase'失败!");
- }
- }
- private static void _InitActivityBaseRef()
- {
- foreach (Ref_ActivityBase item in ActivityBase_List)
- {
- try
- {
- if (!string.IsNullOrEmpty(item.__Material))
- {
- item.Material = ActivityMaterial_Map[item.__Material];
- }
-
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- throw new Exception("初始化'ActivityBase'引用其他表数据失败, 当前行id: " + item.Id);
- }
- }
- }
- private static void _InitEnemyBaseRef()
- {
- foreach (Ref_EnemyBase item in EnemyBase_List)
- {
- try
- {
- if (!string.IsNullOrEmpty(item.__Activity))
- {
- item.Activity = ActivityBase_Map[item.__Activity];
- }
-
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- throw new Exception("初始化'EnemyBase'引用其他表数据失败, 当前行id: " + item.Id);
- }
- }
- }
private static void _InitWeaponBaseRef()
{
foreach (Ref_WeaponBase item in WeaponBase_List)
@@ -340,11 +302,6 @@
}
}
- if (!string.IsNullOrEmpty(item.__AiUseAttribute))
- {
- item.AiUseAttribute = WeaponBase_Map[item.__AiUseAttribute];
- }
-
if (!string.IsNullOrEmpty(item.__AiAttackAttr))
{
item.AiAttackAttr = AiAttackAttr_Map[item.__AiAttackAttr];
@@ -358,6 +315,44 @@
}
}
}
+ private static void _InitEnemyBaseRef()
+ {
+ foreach (Ref_EnemyBase item in EnemyBase_List)
+ {
+ try
+ {
+ if (!string.IsNullOrEmpty(item.__Activity))
+ {
+ item.Activity = ActivityBase_Map[item.__Activity];
+ }
+
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化'EnemyBase'引用其他表数据失败, 当前行id: " + item.Id);
+ }
+ }
+ }
+ private static void _InitActivityBaseRef()
+ {
+ foreach (Ref_ActivityBase item in ActivityBase_List)
+ {
+ try
+ {
+ if (!string.IsNullOrEmpty(item.__Material))
+ {
+ item.Material = ActivityMaterial_Map[item.__Material];
+ }
+
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化'ActivityBase'引用其他表数据失败, 当前行id: " + item.Id);
+ }
+ }
+ }
private static string _ReadConfigAsText(string path)
{
var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_ActivityBase.cs b/DungeonShooting_Godot/src/config/ExcelConfig_ActivityBase.cs
index 76d7bfb..d19cfa0 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig_ActivityBase.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_ActivityBase.cs
@@ -23,10 +23,11 @@
/// Shell(弹壳): 7
/// Effect(特效): 8
/// Prop(道具): 9
+ /// Treasure(宝箱): 10
/// Other(其它类型): 99
///
[JsonInclude]
- public int Type;
+ public ActivityType Type;
///
/// 物体名称
@@ -35,6 +36,25 @@
public string Name;
///
+ /// 物体品质, 用于武器和道具
+ /// 通用物品: 1
+ /// 基础: 2
+ /// 普通: 3
+ /// 稀有: 4
+ /// 史诗: 5
+ /// 传说: 6
+ /// 独一无二: 7
+ ///
+ [JsonInclude]
+ public ActivityQuality Quality;
+
+ ///
+ /// 商店售价
+ ///
+ [JsonInclude]
+ public uint Price;
+
+ ///
/// 物体简介
/// 一句对物体简短的介绍, 比如拾起物体时弹出的描述
///
@@ -88,6 +108,8 @@
inst.Id = Id;
inst.Type = Type;
inst.Name = Name;
+ inst.Quality = Quality;
+ inst.Price = Price;
inst.Intro = Intro;
inst.Details = Details;
inst.IsStatic = IsStatic;
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_ActivityMaterial.cs b/DungeonShooting_Godot/src/config/ExcelConfig_ActivityMaterial.cs
index f3fa9c6..fe76940 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig_ActivityMaterial.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_ActivityMaterial.cs
@@ -77,7 +77,7 @@
public float FallBounceRotation;
///
- /// 动态开关碰撞器,在物体高度大于16时是否关闭碰撞检测
+ /// 动态开关碰撞器,在物体高度大于32时是否关闭碰撞检测
///
[JsonInclude]
public bool DynamicCollision;
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs b/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs
index cedad80..99bf73c 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_EnemyBase.cs
@@ -25,6 +25,12 @@
public string Remark;
///
+ /// 血量
+ ///
+ [JsonInclude]
+ public int Hp;
+
+ ///
/// 移动速度
///
[JsonInclude]
@@ -43,6 +49,13 @@
public float Friction;
///
+ /// 单次攻击间隔时间, 秒
+ /// 注意, 敌人攻击后计算间隔时间会使用当前字段值与武器上的TriggerInterval叠加
+ ///
+ [JsonInclude]
+ public float AttackInterval;
+
+ ///
/// 是否可以拾起武器
///
[JsonInclude]
@@ -67,6 +80,13 @@
public float BackViewRange;
///
+ /// 掉落金币数量区间, 如果为负数或者0则不会掉落金币
+ /// 格式为[value]或者[min,max]
+ ///
+ [JsonInclude]
+ public int[] Gold;
+
+ ///
/// 返回浅拷贝出的新对象
///
public EnemyBase Clone()
@@ -75,13 +95,16 @@
inst.Id = Id;
inst.Activity = Activity;
inst.Remark = Remark;
+ inst.Hp = Hp;
inst.MoveSpeed = MoveSpeed;
inst.Acceleration = Acceleration;
inst.Friction = Friction;
+ inst.AttackInterval = AttackInterval;
inst.CanPickUpWeapon = CanPickUpWeapon;
inst.ViewRange = ViewRange;
inst.TailAfterViewRange = TailAfterViewRange;
inst.BackViewRange = BackViewRange;
+ inst.Gold = Gold;
return inst;
}
}
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_WeaponBase.cs b/DungeonShooting_Godot/src/config/ExcelConfig_WeaponBase.cs
index e3de8cf..57323b4 100644
--- a/DungeonShooting_Godot/src/config/ExcelConfig_WeaponBase.cs
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_WeaponBase.cs
@@ -70,6 +70,18 @@
public int StandbyAmmoCapacity;
///
+ /// 换弹是否显示换弹进度
+ ///
+ [JsonInclude]
+ public bool ShowReloadBar;
+
+ ///
+ /// 弹夹打空是否自动换弹
+ ///
+ [JsonInclude]
+ public bool AutoReload;
+
+ ///
/// 装弹时间 (单位: 秒)
///
[JsonInclude]
@@ -259,7 +271,7 @@
public float UpliftAngleRestore;
///
- /// 开火特效
+ /// 开火特效, 该特效脚本必须实现IEffect接口
///
[JsonInclude]
public string FireEffect;
@@ -281,18 +293,18 @@
public bool ReloadThrowShell;
///
+ /// 抛壳数量
+ ///
+ [JsonInclude]
+ public int ThrowShellCount;
+
+ ///
/// 投抛弹壳的延时时间
///
[JsonInclude]
public float ThrowShellDelayTime;
///
- /// 投抛状态下物体碰撞器大小
- ///
- [JsonInclude]
- public SerializeVector2 ThrowCollisionSize;
-
- ///
/// 是否可以触发近战攻击
///
[JsonInclude]
@@ -368,13 +380,6 @@
public Dictionary OtherSoundMap;
///
- /// Ai属性
- /// Ai 使用该武器时的武器数据, 设置该字段, 可让同一把武器在敌人和玩家手上有不同属性
- /// 如果不填则Ai和玩家使用同一种属性
- ///
- public WeaponBase AiUseAttribute;
-
- ///
/// Ai使用该武器开火时的一些额外配置属性
/// 玩家使用的武器不需要填写该字段
///
@@ -396,6 +401,8 @@
inst.AmmoCapacity = AmmoCapacity;
inst.MaxAmmoCapacity = MaxAmmoCapacity;
inst.StandbyAmmoCapacity = StandbyAmmoCapacity;
+ inst.ShowReloadBar = ShowReloadBar;
+ inst.AutoReload = AutoReload;
inst.ReloadTime = ReloadTime;
inst.AloneReload = AloneReload;
inst.AloneReloadCount = AloneReloadCount;
@@ -431,8 +438,8 @@
inst.Bullet = Bullet;
inst.Shell = Shell;
inst.ReloadThrowShell = ReloadThrowShell;
+ inst.ThrowShellCount = ThrowShellCount;
inst.ThrowShellDelayTime = ThrowShellDelayTime;
- inst.ThrowCollisionSize = ThrowCollisionSize;
inst.CanMeleeAttack = CanMeleeAttack;
inst.MeleeAttackHarmRange = MeleeAttackHarmRange;
inst.MeleeAttackRepelRange = MeleeAttackRepelRange;
@@ -446,7 +453,6 @@
inst.BeLoadedSound = BeLoadedSound;
inst.BeLoadedSoundDelayTime = BeLoadedSoundDelayTime;
inst.OtherSoundMap = OtherSoundMap;
- inst.AiUseAttribute = AiUseAttribute;
inst.AiAttackAttr = AiAttackAttr;
return inst;
}
@@ -481,9 +487,6 @@
public Dictionary __OtherSoundMap;
[JsonInclude]
- public string __AiUseAttribute;
-
- [JsonInclude]
public string __AiAttackAttr;
}
diff --git a/DungeonShooting_Godot/src/framework/InfiniteGrid.cs b/DungeonShooting_Godot/src/framework/InfiniteGrid.cs
index 09b986f..85713a4 100644
--- a/DungeonShooting_Godot/src/framework/InfiniteGrid.cs
+++ b/DungeonShooting_Godot/src/framework/InfiniteGrid.cs
@@ -10,8 +10,10 @@
///
/// 遍历网格数据回调
///
- public delegate void EachGridCallback(int x, int y, T data);
+ public delegate bool EachGridCallback(int x, int y, T data);
+ private bool _isDirty = false;
+ private Rect2I _rect = new Rect2I();
private readonly Dictionary> _map = new Dictionary>();
///
@@ -49,6 +51,7 @@
value = new Dictionary();
value.Add(y, data);
_map.Add(x, value);
+ _isDirty = true;
}
}
@@ -91,7 +94,11 @@
{
if (_map.TryGetValue(x, out var value))
{
- return value.Remove(y);
+ if (value.Remove(y))
+ {
+ _isDirty = true;
+ return true;
+ }
}
return false;
@@ -120,6 +127,7 @@
value = new Dictionary();
value.Add(y + j, data);
_map.Add(x + i, value);
+ _isDirty = true;
}
}
}
@@ -140,7 +148,11 @@
{
if (_map.TryGetValue(x + i, out var value))
{
- value.Remove(y + j);
+ if (value.Remove(y + j))
+ {
+ _isDirty = true;
+ }
+
if (value.Count == 0)
{
_map.Remove(x + i);
@@ -156,6 +168,7 @@
public void Clear()
{
_map.Clear();
+ _isDirty = true;
}
///
@@ -191,7 +204,7 @@
}
///
- /// 遍历网格数据
+ /// 遍历网格数据, 回调返回 false 则停止遍历
///
public void ForEach(EachGridCallback cb)
{
@@ -199,8 +212,51 @@
{
foreach (var pair2 in pair1.Value)
{
- cb(pair1.Key, pair2.Key, pair2.Value);
+ if (!cb(pair1.Key, pair2.Key, pair2.Value))
+ {
+ return;
+ }
}
}
}
+
+ ///
+ /// 获取网格的包围矩形
+ ///
+ public Rect2I GetRect()
+ {
+ if (!_isDirty)
+ {
+ return _rect;
+ }
+
+ _isDirty = false;
+
+ var flag = false;
+ var minX = int.MaxValue;
+ var minY = int.MaxValue;
+ var maxX = int.MinValue;
+ var maxY = int.MinValue;
+ foreach (var pair1 in _map)
+ {
+ var x = pair1.Key;
+ foreach (var pair2 in pair1.Value)
+ {
+ var y = pair2.Key;
+ minX = Mathf.Min(x, minX);
+ minY = Mathf.Min(y, minY);
+ maxX = Mathf.Max(x, maxX);
+ maxY = Mathf.Max(y, maxY);
+ flag = true;
+ }
+ }
+
+ if (!flag)
+ {
+ return new Rect2I();
+ }
+
+ _rect = new Rect2I(minX, minY, maxX - minX + 1, maxY - minY + 1);
+ return _rect;
+ }
}
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityId.cs b/DungeonShooting_Godot/src/framework/activity/ActivityId.cs
index f4232b5..44068c1 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityId.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityId.cs
@@ -5,75 +5,8 @@
public static class ActivityId
{
///
- /// 测试单位
- ///
- public const string Test = "test";
- ///
- /// 角色
- ///
- public const string Role = "role";
- ///
- /// 敌人
- ///
- public const string Enemy = "enemy";
- ///
- /// 武器
- ///
- public const string Weapon = "weapon";
- ///
- /// 子弹
- ///
- public const string Bullet = "bullet";
- ///
- /// 弹壳
- ///
- public const string Shell = "shell";
- ///
- /// 特效
- ///
- public const string Effect = "effect";
- ///
- /// 道具
- ///
- public const string Prop = "prop";
- ///
- /// 其他类型
- ///
- public const string Other = "other";
-
- ///
/// 根据 ActivityType 中的枚举类型获取类型名称的字符串
///
- public static string GetIdPrefix(ActivityType activityType)
- {
- switch (activityType)
- {
- case ActivityType.None:
- return "";
- case ActivityType.Test:
- return Test;
- case ActivityType.Role:
- case ActivityType.Player:
- return Role;
- case ActivityType.Enemy:
- return Enemy;
- case ActivityType.Weapon:
- return Weapon;
- case ActivityType.Bullet:
- return Bullet;
- case ActivityType.Shell:
- return Shell;
- case ActivityType.Effect:
- return Effect;
- case ActivityType.Prop:
- return Prop;
- case ActivityType.Other:
- return Other;
- }
-
- return "";
- }
-
public static string GetTypeName(ActivityType activityType)
{
switch (activityType)
@@ -97,6 +30,8 @@
return "特效";
case ActivityType.Prop:
return "道具";
+ case ActivityType.Treasure:
+ return "宝箱";
case ActivityType.Other:
return "其他";
}
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs b/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs
new file mode 100644
index 0000000..4fad3a7
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs
@@ -0,0 +1,325 @@
+
+using System;
+using System.IO;
+using Godot;
+
+///
+/// 用于在预制场景中创建 ActivityObject
+///
+[Tool]
+public partial class ActivityInstance : Node2D
+{
+ ///
+ /// 物体Id
+ ///
+ [Export]
+ public string Id
+ {
+ get => _id;
+ set
+ {
+ _id = value;
+ _dirty = true;
+ }
+ }
+
+ ///
+ /// 默认所在层级
+ ///
+ [Export]
+ public RoomLayerEnum DefaultLayer { get; set; } = RoomLayerEnum.NormalLayer;
+
+ ///
+ /// 是否显示阴影
+ ///
+ [Export]
+ public bool ShowShadow
+ {
+ get => _showShadow;
+ set
+ {
+ _showShadow = value;
+ if (_activityObject != null)
+ {
+ if (value)
+ {
+ _activityObject.ShowShadowSprite();
+ }
+ else
+ {
+ _activityObject.HideShadowSprite();
+ }
+ }
+ }
+ }
+
+ ///
+ /// 阴影偏移
+ ///
+ [Export]
+ public Vector2 ShowOffset
+ {
+ get => _showOffset;
+ set
+ {
+ _showOffset = value;
+ if (_activityObject != null)
+ {
+ _activityObject.ShadowOffset = value;
+ }
+ }
+ }
+
+ ///
+ /// 初始海拔高度
+ ///
+ [Export]
+ public float Altitude
+ {
+ get => _altitude;
+ set
+ {
+ _altitude = value;
+ if (_activityObject != null)
+ {
+ _activityObject.Altitude = value;
+ _activityObject.Collision.Position = _collPos;
+ _activityObject.UpdateShadowSprite((float)GetProcessDeltaTime());
+ _activityObject.CalcThrowAnimatedPosition();
+ }
+ }
+ }
+
+ ///
+ /// 是否启用垂直运动模拟
+ ///
+ [Export]
+ public bool VerticalMotion { get; private set; } = true;
+
+ ///
+ /// 编辑器属性, 物体子碰撞器在编辑器中是否可见
+ ///
+ [Export]
+ public bool CollisionVisible
+ {
+ get => _collisionVisible;
+ set
+ {
+ _collisionVisible = value;
+ OnChangeCollisionVisible();
+ }
+ }
+
+ private bool _dirty = false;
+ private bool _collisionVisible = true;
+ private string _prevId;
+ private string _id;
+ private ActivityObject _activityObject;
+ private Sprite2D _errorSprite;
+ private bool _showShadow = true;
+ private Vector2 _showOffset = new Vector2(0, 2);
+ private float _altitude;
+
+ private Vector2 _collPos;
+ private bool _createFlag = false;
+
+ private static string _jsonText;
+
+ public override void _Ready()
+ {
+#if TOOLS
+ if (!Engine.IsEditorHint())
+ {
+#endif
+ var world = World.Current;
+ if (world != null && world.YSortLayer != null && world.NormalLayer != null)
+ {
+ DoCreateObject();
+ }
+#if TOOLS
+ }
+#endif
+ }
+
+ public override void _Process(double delta)
+ {
+#if TOOLS
+ if (Engine.IsEditorHint())
+ {
+ if (_dirty || (_activityObject != null && _activityObject.GetParent() != this))
+ {
+ _dirty = false;
+
+ if (_prevId != _id)
+ {
+ OnChangeActivityId(_id);
+ }
+ else if (string.IsNullOrEmpty(_id))
+ {
+ ShowErrorSprite();
+ }
+
+ OnChangeCollisionVisible();
+ }
+
+ if (_activityObject != null)
+ {
+ _activityObject.Collision.Position = _collPos;
+ _activityObject.UpdateShadowSprite((float)delta);
+ _activityObject.CalcThrowAnimatedPosition();
+ }
+ }
+ else
+ {
+#endif
+ var world = World.Current;
+ if (world != null && world.YSortLayer != null && world.NormalLayer != null)
+ {
+ DoCreateObject();
+ }
+#if TOOLS
+ }
+#endif
+ }
+
+ public override void _EnterTree()
+ {
+#if TOOLS
+ if (Engine.IsEditorHint())
+ {
+ var children = GetChildren();
+ foreach (var child in children)
+ {
+ child.QueueFree();
+ }
+ _dirty = true;
+ _activityObject = null;
+ _prevId = null;
+ }
+#endif
+ }
+
+ public override void _ExitTree()
+ {
+#if TOOLS
+ if (Engine.IsEditorHint() && _activityObject != null)
+ {
+ _activityObject.QueueFree();
+ _activityObject = null;
+ }
+#endif
+ }
+
+ private void DoCreateObject()
+ {
+ if (_createFlag)
+ {
+ return;
+ }
+
+ _createFlag = true;
+ var activityObject = ActivityObject.Create(Id);
+ activityObject.Position = GlobalPosition;
+ activityObject.Scale = GlobalScale;
+ activityObject.Rotation = GlobalRotation;
+ activityObject.Name = Name;
+ activityObject.Visible = Visible;
+ activityObject.ShadowOffset = _showOffset;
+ activityObject.Altitude = _altitude;
+ activityObject.EnableVerticalMotion = VerticalMotion;
+ activityObject.PutDown(DefaultLayer, _showShadow);
+ QueueFree();
+ }
+
+ private void OnChangeActivityId(string id)
+ {
+ _prevId = id;
+
+ if (_activityObject != null)
+ {
+ _activityObject.QueueFree();
+ _activityObject = null;
+ }
+
+ if (string.IsNullOrEmpty(id))
+ {
+ GD.Print("删除物体");
+ ShowErrorSprite();
+ return;
+ }
+
+ if (_jsonText == null)
+ {
+ _jsonText = File.ReadAllText("resource/config/ActivityBase.json");
+ }
+ var str = $"\"Id\": \"{id}\",";
+ var index = _jsonText.IndexOf(str, StringComparison.Ordinal);
+ if (index > -1)
+ {
+ const string s = "\"Prefab\": \"";
+ var startIndex = _jsonText.IndexOf(s, index, StringComparison.Ordinal);
+ if (startIndex > -1)
+ {
+ var endIndex = _jsonText.IndexOf('"', startIndex + s.Length + 1);
+ if (endIndex > -1)
+ {
+ var prefab = _jsonText.Substring(startIndex + s.Length, endIndex - (startIndex + s.Length));
+ GD.Print("创建物体: " + id);
+ var instance = ResourceManager.LoadAndInstantiate(prefab);
+ _activityObject = instance;
+ _collPos = instance.Collision.Position - instance.AnimatedSprite.Position - instance.AnimatedSprite.Offset;
+ Debug.Log("_collPos: " + _collPos);
+ instance.IsCustomShadowSprite = instance.ShadowSprite.Texture != null;
+ instance.Altitude = _altitude;
+ instance.ShadowOffset = _showOffset;
+ if (_showShadow)
+ {
+ instance.ShowShadowSprite();
+ }
+ AddChild(instance);
+ HideErrorSprite();
+ return;
+ }
+ }
+ }
+ GD.PrintErr($"未找到Id为'{id}'的物体!");
+ ShowErrorSprite();
+ }
+
+ private void OnChangeCollisionVisible()
+ {
+ if (_activityObject != null)
+ {
+ Utils.EachNode(_activityObject, node =>
+ {
+ if (node is CollisionShape2D collisionShape2D)
+ {
+ collisionShape2D.Visible = _collisionVisible;
+ }
+ else if (node is CollisionPolygon2D collisionPolygon2D)
+ {
+ collisionPolygon2D.Visible = _collisionVisible;
+ }
+ });
+ }
+ }
+
+ private void ShowErrorSprite()
+ {
+ if (_errorSprite == null)
+ {
+ _errorSprite = new Sprite2D();
+ _errorSprite.Texture = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Error_mini_png);
+ AddChild(_errorSprite);
+ }
+ }
+
+ private void HideErrorSprite()
+ {
+ if (_errorSprite != null)
+ {
+ _errorSprite.QueueFree();
+ _errorSprite = null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
index acf87b7..e5b5a58 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
@@ -75,7 +75,7 @@
/// 阴影偏移
///
[Export]
- public Vector2 ShadowOffset { get; protected set; } = new Vector2(0, 2);
+ public Vector2 ShadowOffset { get; set; } = new Vector2(0, 2);
///
/// 移动控制器
@@ -126,6 +126,11 @@
}
///
+ /// 下坠逻辑是否执行完成
+ ///
+ public bool IsFallOver => _isFallOver;
+
+ ///
/// 是否正在投抛过程中
///
public bool IsThrowing => VerticalSpeed != 0 && !_isFallOver;
@@ -161,12 +166,6 @@
private float _verticalSpeed;
///
- /// 投抛状态下物体碰撞器大小, 如果 (x, y) 都小于 0, 则默认使用 AnimatedSprite 的默认动画第一帧的大小
- ///
- [Export]
- public Vector2 ThrowCollisionSize { get; set; } = new Vector2(-1, -1);
-
- ///
/// 是否启用垂直方向上的运动模拟, 默认开启, 如果禁用, 那么下落和投抛效果, 同样 Throw() 函数也将失效
///
public bool EnableVerticalMotion { get; set; } = true;
@@ -206,11 +205,11 @@
/// 物体材质数据
///
public ExcelConfig.ActivityMaterial ActivityMaterial { get; private set; }
-
+
///
/// 所在的 World 对象
///
- public World World { get; private set; }
+ public World World { get; set; }
///
/// 是否开启描边
@@ -246,7 +245,7 @@
///
/// 是否是自定义阴影纹理
///
- public bool IsCustomShadowSprite { get; private set; }
+ public bool IsCustomShadowSprite { get; set; }
///
/// 记录绘制液体的笔刷上一次绘制的位置
@@ -254,6 +253,16 @@
///
public Vector2I? BrushPrevPosition { get; set; }
+ ///
+ /// 默认所在层级
+ ///
+ public RoomLayerEnum DefaultLayer { get; set; }
+
+ ///
+ /// 投抛状态下的碰撞器层级
+ ///
+ public uint ThrowCollisionMask { get; set; } = PhysicsLayer.Wall;
+
// --------------------------------------------------------------------------------
//是否正在调用组件 Update 函数
@@ -278,9 +287,6 @@
//存储投抛该物体时所产生的数据
private readonly ActivityFallData _fallData = new ActivityFallData();
- //所在层级
- private RoomLayerEnum _currLayer;
-
//标记字典
private Dictionary _signMap;
@@ -296,9 +302,6 @@
//下坠是否已经结束
private bool _isFallOver = true;
- //下坠状态碰撞器形状
- private RectangleShape2D _throwRectangleShape;
-
//投抛移动速率
private ExternalForce _throwForce;
@@ -315,6 +318,12 @@
//击退外力
private ExternalForce _repelForce;
+ //绑定销毁物体集合
+ private HashSet _destroySet;
+
+ //挂载的物体集合
+ private HashSet _mountObjects;
+
// --------------------------------------------------------------------------------
//实例索引
@@ -650,9 +659,9 @@
///
public virtual void PutDown(RoomLayerEnum layer, bool showShadow = true)
{
- _currLayer = layer;
+ DefaultLayer = layer;
var parent = GetParent();
- var root = GameApplication.Instance.World.GetRoomLayer(layer);
+ var root = World.Current.GetRoomLayer(layer);
if (parent != root)
{
if (parent != null)
@@ -705,17 +714,6 @@
/// 旋转速度
public void Throw(float altitude, float verticalSpeed, Vector2 velocity, float rotateSpeed)
{
- var parent = GetParent();
- if (parent == null)
- {
- GameApplication.Instance.World.YSortLayer.AddChild(this);
- }
- else if (parent != GameApplication.Instance.World.YSortLayer)
- {
- parent.RemoveChild(this);
- GameApplication.Instance.World.YSortLayer.AddChild(this);
- }
-
Altitude = altitude;
//Position = Position + new Vector2(0, altitude);
VerticalSpeed = verticalSpeed;
@@ -1118,8 +1116,8 @@
_altitude += VerticalSpeed * delta;
_verticalSpeed -= GameConfig.G * ActivityMaterial.GravityScale * delta;
- //当高度大于16时, 显示在所有物体上, 并且关闭碰撞
- if (Altitude >= 16)
+ //当高度大于32时, 显示在所有物体上, 并且关闭碰撞
+ if (Altitude >= 32)
{
AnimatedSprite.ZIndex = 20;
}
@@ -1130,7 +1128,7 @@
//动态开关碰撞器
if (ActivityMaterial.DynamicCollision)
{
- Collision.Disabled = Altitude >= 16;
+ Collision.Disabled = Altitude >= 32;
}
//达到最高点
@@ -1363,8 +1361,10 @@
ShadowSprite.GlobalPosition = new Vector2(pos.X + ShadowOffset.X, pos.Y + ShadowOffset.Y + Altitude);
}
- //计算位置
- private void CalcThrowAnimatedPosition()
+ ///
+ /// 计算物体精灵和阴影位置
+ ///
+ public void CalcThrowAnimatedPosition()
{
if (Scale.Y < 0)
{
@@ -1387,6 +1387,16 @@
{
return;
}
+
+ if (_mountObjects != null)
+ {
+ foreach (var item in _mountObjects)
+ {
+ item.OnUnmount(this);
+ }
+
+ _mountObjects = null;
+ }
IsDestroyed = true;
if (AffiliationArea != null)
@@ -1409,6 +1419,16 @@
}
_components.Clear();
+
+ if (_destroySet != null)
+ {
+ foreach (var destroy in _destroySet)
+ {
+ destroy.Destroy();
+ }
+
+ _destroySet = null;
+ }
}
///
@@ -1430,6 +1450,19 @@
}
///
+ /// 获取投抛该物体时所产生的数据, 只在 IsFallOver 为 false 时有效
+ ///
+ public ActivityFallData GetFallData()
+ {
+ if (!IsFallOver && !_fallData.UseOrigin)
+ {
+ return _fallData;
+ }
+
+ return null;
+ }
+
+ ///
/// 触发投抛动作
///
private void Throw()
@@ -1440,10 +1473,9 @@
{
this.AddToActivityRoot(RoomLayerEnum.YSortLayer);
}
- else if (parent == GameApplication.Instance.World.NormalLayer)
+ else if (parent != World.Current.YSortLayer)
{
- parent.RemoveChild(this);
- this.AddToActivityRoot(RoomLayerEnum.YSortLayer);
+ Reparent(World.Current.YSortLayer);
}
CalcThrowAnimatedPosition();
@@ -1461,7 +1493,7 @@
///
private void SetFallCollision()
{
- if (_fallData != null && _fallData.UseOrigin)
+ if (_fallData.UseOrigin)
{
_fallData.OriginShape = Collision.Shape;
_fallData.OriginPosition = Collision.Position;
@@ -1476,12 +1508,6 @@
_fallData.OriginCollisionMask = CollisionMask;
_fallData.OriginCollisionLayer = CollisionLayer;
- if (_throwRectangleShape == null)
- {
- _throwRectangleShape = new RectangleShape2D();
- }
-
- Collision.Shape = _throwRectangleShape;
Collision.Position = Vector2.Zero;
Collision.Rotation = 0;
Collision.Scale = Vector2.One;
@@ -1490,7 +1516,7 @@
Collision.Position = Vector2.Zero;
Collision.Rotation = 0;
Collision.Scale = Vector2.One;
- CollisionMask = 1;
+ CollisionMask = ThrowCollisionMask;
CollisionLayer = _fallData.OriginCollisionLayer | PhysicsLayer.Throwing;
_fallData.UseOrigin = false;
}
@@ -1501,7 +1527,7 @@
///
private void RestoreCollision()
{
- if (_fallData != null && !_fallData.UseOrigin)
+ if (!_fallData.UseOrigin)
{
Collision.Shape = _fallData.OriginShape;
Collision.Position = _fallData.OriginPosition;
@@ -1526,7 +1552,7 @@
private void ThrowOver()
{
var parent = GetParent();
- var roomLayer = GameApplication.Instance.World.GetRoomLayer(_currLayer);
+ var roomLayer = World.Current.GetRoomLayer(DefaultLayer);
if (parent != roomLayer)
{
parent.RemoveChild(this);
@@ -1546,15 +1572,6 @@
_firstFall = true;
_hasResilienceVerticalSpeed = false;
_resilienceVerticalSpeed = 0;
-
- if (ThrowCollisionSize.X < 0 && ThrowCollisionSize.Y < 0)
- {
- _throwRectangleShape.Size = GetDefaultTexture().GetSize();
- }
- else
- {
- _throwRectangleShape.Size = ThrowCollisionSize;
- }
Throw();
}
@@ -1754,7 +1771,7 @@
///
/// 设置物体朝向
///
- public void SetFace(FaceDirection face)
+ public void SetForwardDirection(FaceDirection face)
{
if ((face == FaceDirection.Left && Scale.X > 0) || (face == FaceDirection.Right && Scale.X < 0))
{
@@ -1848,4 +1865,83 @@
BrushPrevPosition = pos;
}
}
+
+ ///
+ /// 绑定可销毁对象, 绑定的物体会在当前物体销毁时触发销毁
+ ///
+ public void AddDestroyObject(IDestroy destroy)
+ {
+ if (_destroySet == null)
+ {
+ _destroySet = new HashSet();
+ }
+
+ _destroySet.Add(destroy);
+ }
+
+ ///
+ /// 移除绑定可销毁对象
+ ///
+ public void RemoveDestroyObject(IDestroy destroy)
+ {
+ if (_destroySet == null)
+ {
+ return;
+ }
+
+ _destroySet.Remove(destroy);
+ }
+
+ ///
+ /// 绑定挂载对象, 绑定的物体会在当前物体销毁时触发扔出
+ ///
+ public void AddMountObject(IMountItem target)
+ {
+ if (_mountObjects == null)
+ {
+ _mountObjects = new HashSet();
+ }
+
+ if (_mountObjects.Add(target))
+ {
+ target.OnMount(this);
+ }
+ }
+
+ ///
+ /// 移除绑定挂载对象
+ ///
+ public void RemoveMountObject(IMountItem target)
+ {
+ if (_mountObjects == null)
+ {
+ return;
+ }
+
+ if (_mountObjects.Remove(target))
+ {
+ target.OnUnmount(this);
+ }
+ }
+
+ ///
+ /// 设置是否启用碰撞层, 该函数是设置下载状态下原碰撞层
+ ///
+ public void SetOriginCollisionLayerValue(uint layer, bool vale)
+ {
+ if (vale)
+ {
+ if (!Utils.CollisionMaskWithLayer(_fallData.OriginCollisionLayer, layer))
+ {
+ _fallData.OriginCollisionLayer |= layer;
+ }
+ }
+ else
+ {
+ if (Utils.CollisionMaskWithLayer(_fallData.OriginCollisionLayer, layer))
+ {
+ _fallData.OriginCollisionLayer ^= layer;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Create.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Create.cs
index ebc901a..3805d0f 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Create.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Create.cs
@@ -9,10 +9,10 @@
///
public static ActivityObject Create(ExcelConfig.ActivityBase config)
{
- var world = GameApplication.Instance.World;
+ var world = World.Current;
if (world == null)
{
- throw new Exception("实例化 ActivityObject 前请先调用 'GameApplication.Instance.CreateNewWorld()' 初始化 World 对象");
+ throw new Exception("实例化 ActivityObject 前请先调用 'GameApplication.Instance.DungeonManager.CreateNewWorld()' 初始化 World 对象");
}
var instance = ResourceManager.LoadAndInstantiate(config.Prefab);
instance._InitNode(config, world);
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject_EditorTool.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject_EditorTool.cs
index cace31a..587de4e 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject_EditorTool.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject_EditorTool.cs
@@ -73,7 +73,7 @@
{
owner = parent.Owner;
}
- else if (Plugin.Plugin.Instance.GetEditorInterface().GetEditedSceneRoot() == this)
+ else if (EditorInterface.Singleton.GetEditedSceneRoot() == this)
{
owner = this;
}
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
index 79056c5..f872352 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
@@ -69,6 +69,31 @@
///
public const string Id_weapon0009 = "weapon0009";
///
+ /// 名称: M1型热能狙击枪
+ /// 简介:
+ ///
+ public const string Id_weapon0010 = "weapon0010";
+ ///
+ /// 名称: weapon0011
+ /// 简介:
+ ///
+ public const string Id_weapon0011 = "weapon0011";
+ ///
+ /// 名称: P90
+ /// 简介:
+ ///
+ public const string Id_weapon0013 = "weapon0013";
+ ///
+ /// 名称: 左轮
+ /// 简介:
+ ///
+ public const string Id_weapon0014 = "weapon0014";
+ ///
+ /// 名称: 木质短弓
+ /// 简介:
+ ///
+ public const string Id_weapon0016 = "weapon0016";
+ ///
/// 名称:
/// 简介:
///
@@ -94,6 +119,26 @@
///
public const string Id_bullet0005 = "bullet0005";
///
+ /// 名称: 拖尾子弹
+ /// 简介:
+ ///
+ public const string Id_bullet0006 = "bullet0006";
+ ///
+ /// 名称:
+ /// 简介:
+ ///
+ public const string Id_bullet0007 = "bullet0007";
+ ///
+ /// 名称:
+ /// 简介:
+ ///
+ public const string Id_bullet0008 = "bullet0008";
+ ///
+ /// 名称: 弓箭
+ /// 简介:
+ ///
+ public const string Id_bullet0009 = "bullet0009";
+ ///
/// 名称:
/// 简介:
///
@@ -204,6 +249,11 @@
///
public const string Id_prop5001 = "prop5001";
///
+ /// 名称: 木质宝箱
+ /// 简介: 木质宝箱
+ ///
+ public const string Id_treasure_box0001 = "treasure_box0001";
+ ///
/// 名称:
/// 简介: 地牢房间的门(东侧)
///
@@ -223,5 +273,20 @@
/// 简介: 地牢房间的门(北侧)
///
public const string Id_other_door_n = "other_door_n";
+ ///
+ /// 名称: 金币
+ /// 简介: 获得10金币
+ ///
+ public const string Id_gold_10 = "gold_10";
+ ///
+ /// 名称: 银币
+ /// 简介: 获得5金币
+ ///
+ public const string Id_gold_5 = "gold_5";
+ ///
+ /// 名称: 铜币
+ /// 简介: 获得1金币
+ ///
+ public const string Id_gold_1 = "gold_1";
}
}
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityQuality.cs b/DungeonShooting_Godot/src/framework/activity/ActivityQuality.cs
new file mode 100644
index 0000000..9d5641d
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityQuality.cs
@@ -0,0 +1,39 @@
+
+///
+/// 物体品质
+///
+public enum ActivityQuality
+{
+ ///
+ /// 未设置
+ ///
+ None = 0,
+ ///
+ /// 通用物品
+ ///
+ Common = 1,
+ ///
+ /// 基础
+ ///
+ Basic = 2,
+ ///
+ /// 普通
+ ///
+ Ordinary = 3,
+ ///
+ /// 稀有
+ ///
+ Rare = 4,
+ ///
+ /// 史诗
+ ///
+ Epic = 5,
+ ///
+ /// 传说
+ ///
+ Legend = 6,
+ ///
+ /// 独一无二
+ ///
+ Unique = 7
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityType.cs b/DungeonShooting_Godot/src/framework/activity/ActivityType.cs
index 3a82149..d094992 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityType.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityType.cs
@@ -45,6 +45,10 @@
///
Prop,
///
+ /// 宝箱
+ ///
+ Treasure,
+ ///
/// 其它类型
///
Other = 99,
diff --git a/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs b/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs
index 99b1296..fb38e21 100644
--- a/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs
+++ b/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs
@@ -20,6 +20,14 @@
/// 替换
///
Replace,
+ ///
+ /// 打开宝箱
+ ///
+ OpenTreasureBox,
+ ///
+ /// 其他互动类型
+ ///
+ Other,
}
///
diff --git a/DungeonShooting_Godot/src/framework/activity/components/MoveController.cs b/DungeonShooting_Godot/src/framework/activity/components/MoveController.cs
index ef0f435..0f51b39 100644
--- a/DungeonShooting_Godot/src/framework/activity/components/MoveController.cs
+++ b/DungeonShooting_Godot/src/framework/activity/components/MoveController.cs
@@ -382,29 +382,32 @@
var no = collision.GetNormal().Rotated(Mathf.Pi * 0.5f);
newVelocity = finallyEf.Reflect(no);
var rotation = newVelocity.Angle();
-
- if (Master.ActivityMaterial.RotationType == 1) //跟着反弹角度
- {
- Rotation = rotation;
- }
- else if (Master.ActivityMaterial.RotationType == 2) //跟着反弹角度, 带垂直角度
- {
- Rotation = rotation;
- AnimatedSprite.Rotation = new Vector2(newVelocity.X, newVelocity.Y - Master.VerticalSpeed).Angle() - rotation;
- }
- var length = _forceList.Count;
- if (length != 0)
- {
- var v = newVelocity / (length / Master.ActivityMaterial.BounceStrength);
- for (var i = 0; i < _forceList.Count; i++)
- {
- _forceList[i].Velocity = v;
- }
- }
-
//调用反弹函数
Master.OnBounce(rotation);
+
+ if (Enable && !Master.IsDestroyed)
+ {
+ if (Master.ActivityMaterial.RotationType == 1) //跟着反弹角度
+ {
+ Rotation = rotation;
+ }
+ else if (Master.ActivityMaterial.RotationType == 2) //跟着反弹角度, 带垂直角度
+ {
+ Rotation = rotation;
+ AnimatedSprite.Rotation = new Vector2(newVelocity.X, newVelocity.Y - Master.VerticalSpeed).Angle() - rotation;
+ }
+
+ var length = _forceList.Count;
+ if (length != 0)
+ {
+ var v = newVelocity / (length / Master.ActivityMaterial.BounceStrength);
+ for (var i = 0; i < _forceList.Count; i++)
+ {
+ _forceList[i].Velocity = v;
+ }
+ }
+ }
}
else //没有撞到物体
{
diff --git a/DungeonShooting_Godot/src/framework/activity/hurt/HurtArea.cs b/DungeonShooting_Godot/src/framework/activity/hurt/HurtArea.cs
new file mode 100644
index 0000000..8631faa
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/hurt/HurtArea.cs
@@ -0,0 +1,29 @@
+using Godot;
+
+[Tool]
+public partial class HurtArea : Area2D, IHurt
+{
+ public delegate void HurtDelegate(ActivityObject target, int damage, float angle);
+
+ public event HurtDelegate OnHurtEvent;
+
+ public ActivityObject ActivityObject { get; private set; }
+
+ public void InitActivityObject(ActivityObject activityObject)
+ {
+ ActivityObject = activityObject;
+ }
+
+ public override void _Ready()
+ {
+ Monitoring = false;
+ }
+
+ public void Hurt(ActivityObject target, int damage, float angle)
+ {
+ if (OnHurtEvent != null)
+ {
+ OnHurtEvent(target, damage, angle);
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/hurt/IHurt.cs b/DungeonShooting_Godot/src/framework/activity/hurt/IHurt.cs
new file mode 100644
index 0000000..fd27abc
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/hurt/IHurt.cs
@@ -0,0 +1,13 @@
+
+using Godot;
+
+public interface IHurt
+{
+ ///
+ /// 受到伤害
+ ///
+ /// 触发伤害的对象, 为 null 表示不存在对象或者对象已经被销毁
+ /// 伤害的量
+ /// 伤害角度(弧度制)
+ void Hurt(ActivityObject target, int damage, float angle);
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/mount/IMountItem.cs b/DungeonShooting_Godot/src/framework/activity/mount/IMountItem.cs
new file mode 100644
index 0000000..bf2c397
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/mount/IMountItem.cs
@@ -0,0 +1,16 @@
+
+///
+/// 可被 ActivityObject 挂载的物体
+///
+public interface IMountItem
+{
+ ///
+ /// 挂载到 ActivityObject 时调用
+ ///
+ void OnMount(ActivityObject target);
+
+ ///
+ /// 从 ActivityObject 卸载时调用
+ ///
+ void OnUnmount(ActivityObject target);
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/common/DragButtonEnum.cs b/DungeonShooting_Godot/src/framework/common/DragButtonEnum.cs
new file mode 100644
index 0000000..329b5e1
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/common/DragButtonEnum.cs
@@ -0,0 +1,22 @@
+
+using System;
+
+///
+/// 用于拖拽的鼠标键位
+///
+[Flags]
+public enum DragButtonEnum
+{
+ ///
+ /// 鼠标左键
+ ///
+ Left = 0b1,
+ ///
+ /// 鼠标右键
+ ///
+ Right = 0b10,
+ ///
+ /// 鼠标中键
+ ///
+ Middle = 0b100,
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/common/DragState.cs b/DungeonShooting_Godot/src/framework/common/DragState.cs
new file mode 100644
index 0000000..04f4fb0
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/common/DragState.cs
@@ -0,0 +1,19 @@
+
+///
+/// 拖拽状态
+///
+public enum DragState
+{
+ ///
+ /// 拖拽开始
+ ///
+ DragStart,
+ ///
+ /// 拖拽中
+ ///
+ DragMove,
+ ///
+ /// 拖拽结束
+ ///
+ DragEnd
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/common/NodeExtend.cs b/DungeonShooting_Godot/src/framework/common/NodeExtend.cs
index e9988f0..e04437d 100644
--- a/DungeonShooting_Godot/src/framework/common/NodeExtend.cs
+++ b/DungeonShooting_Godot/src/framework/common/NodeExtend.cs
@@ -8,47 +8,51 @@
public static class NodeExtend
{
///
- /// 尝试将一个 Node2d 节点转换成一个 ActivityObject 对象, 如果转换失败, 则返回 null
+ /// 获取 IHurt 绑定的 ActivityObject, 没有则返回 null
///
- public static ActivityObject AsActivityObject(this Node2D node2d)
+ ///
+ ///
+ public static ActivityObject GetActivityObject(this IHurt hurt)
{
- if (node2d is ActivityObject p)
+ if (hurt is ActivityObject activityObject)
{
- return p;
+ return activityObject;
}
- var parent = node2d.GetParent();
- if (parent != null && parent is ActivityObject p2)
+
+ if (hurt is HurtArea hurtArea)
{
- return p2;
+ return hurtArea.ActivityObject;
}
- return null;
- }
-
- ///
- /// 尝试将一个 Node2d 节点转换成一个 ActivityObject 对象, 如果转换失败, 则返回 null
- ///
- public static T AsActivityObject(this Node2D node2d) where T : ActivityObject
- {
- if (node2d is T p)
- {
- return p;
- }
- var parent = node2d.GetParent();
- if (parent != null && parent is T p2)
- {
- return p2;
- }
+
return null;
}
///
+ /// 获取 IHurt 节点的坐标
+ ///
+ public static Vector2 GetPosition(this IHurt hurt)
+ {
+ if (hurt is ActivityObject role)
+ {
+ return role.GetCenterPosition();
+ }
+
+ if (hurt is Node2D node2D)
+ {
+ return node2D.GlobalPosition;
+ }
+
+ return Vector2.Zero;
+ }
+
+ ///
/// 将节点插入的房间物体根节点
///
/// 实例
/// 放入的层
public static void AddToActivityRoot(this Node2D node, RoomLayerEnum layer)
{
- GameApplication.Instance.World.GetRoomLayer(layer).AddChild(node);
+ GameApplication.Instance.DungeonManager.CurrWorld.GetRoomLayer(layer).AddChild(node);
}
///
@@ -58,7 +62,7 @@
/// 放入的层
public static void AddToActivityRootDeferred(this Node2D node, RoomLayerEnum layer)
{
- GameApplication.Instance.World.GetRoomLayer(layer).CallDeferred(Node.MethodName.AddChild, node);
+ World.Current.GetRoomLayer(layer).CallDeferred(Node.MethodName.AddChild, node);
}
///
@@ -83,6 +87,21 @@
{
return (control.SizeFlagsHorizontal & Control.SizeFlags.Expand) != 0;
}
+
+ ///
+ /// 返回鼠标是否在Ui矩形内
+ ///
+ public static bool IsMouseInRect(this Control control, float border = 0)
+ {
+ var pos = control.GetLocalMousePosition();
+ if (pos.X < border || pos.Y < border)
+ {
+ return false;
+ }
+
+ var size = control.Size;
+ return pos.X <= size.X - border && pos.Y <= size.Y - border;
+ }
///
/// 设置是否启用节点
@@ -189,4 +208,107 @@
yield return new WaitForSeconds(delayTime);
cb(arg1,arg2, arg3);
}
+
+ ///
+ /// 给Ui节点添加拖拽事件
+ ///
+ /// 需要绑定事件的节点对象
+ /// 拖拽回调函数
+ public static UiEventBinder AddDragListener(this Control control, Action callback)
+ {
+ return AddDragListener(control, DragButtonEnum.Left, callback);
+ }
+
+ ///
+ /// 给Ui节点添加拖拽事件
+ ///
+ /// 需要绑定拖拽的节点对象
+ /// 可触发拖拽的按钮
+ /// 拖拽回调函数
+ public static UiEventBinder AddDragListener(this Control control, DragButtonEnum triggerButton, Action callback)
+ {
+ var dragFlag = false;
+ Control.GuiInputEventHandler handler = (ev) =>
+ {
+ if (!dragFlag) //未开始拖拽
+ {
+ if (ev is InputEventMouseButton mouseButton && mouseButton.Pressed &&
+ CheckDragButton(mouseButton.ButtonIndex, triggerButton)) //按下按钮
+ {
+ control.AcceptEvent();
+ dragFlag = true;
+ callback(DragState.DragStart, Vector2.Zero);
+ }
+ }
+ else //拖拽中
+ {
+ if (ev is InputEventMouseButton mouseButton)
+ {
+ if (!mouseButton.Pressed && CheckDragButton(mouseButton.ButtonIndex, triggerButton)) //松开按钮
+ {
+ control.AcceptEvent();
+ dragFlag = false;
+ callback(DragState.DragEnd, Vector2.Zero);
+ }
+ } else if (ev is InputEventMouseMotion mouseMotion) //拖拽中
+ {
+ control.AcceptEvent();
+ var delta = mouseMotion.Relative;
+ if (delta != Vector2.Zero)
+ {
+ callback(DragState.DragMove, mouseMotion.Relative);
+ }
+ }
+ }
+ };
+ control.GuiInput += handler;
+ return new UiEventBinder(control, handler);
+ }
+
+ private static bool CheckDragButton(MouseButton button, DragButtonEnum triggerButton)
+ {
+ DragButtonEnum buttonEnum;
+ switch (button)
+ {
+ case MouseButton.Left:
+ buttonEnum = DragButtonEnum.Left;
+ break;
+ case MouseButton.Right:
+ buttonEnum = DragButtonEnum.Right;
+ break;
+ case MouseButton.Middle:
+ buttonEnum = DragButtonEnum.Middle;
+ break;
+ default: return false;
+ }
+
+ return (buttonEnum & triggerButton) != 0;
+ }
+
+ ///
+ /// 给Ui节点添加鼠标滚轮事件
+ ///
+ /// 需要绑定事件的节点对象
+ /// 滚轮回调, 参数 -1 表示滚轮向下滚动, 1 表示滚轮向上滚动
+ public static UiEventBinder AddMouseWheelListener(this Control control, Action callback)
+ {
+ Control.GuiInputEventHandler handler = (ev) =>
+ {
+ if (ev is InputEventMouseButton mouseButton)
+ {
+ if (mouseButton.ButtonIndex == MouseButton.WheelDown)
+ {
+ control.AcceptEvent();
+ callback(-1);
+ }
+ else if (mouseButton.ButtonIndex == MouseButton.WheelUp)
+ {
+ control.AcceptEvent();
+ callback(1);
+ }
+ }
+ };
+ control.GuiInput += handler;
+ return new UiEventBinder(control, handler);
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/common/SeedRandom.cs b/DungeonShooting_Godot/src/framework/common/SeedRandom.cs
index 11acb6f..20e88c5 100644
--- a/DungeonShooting_Godot/src/framework/common/SeedRandom.cs
+++ b/DungeonShooting_Godot/src/framework/common/SeedRandom.cs
@@ -192,77 +192,73 @@
///
/// 返回指定区域内的随机坐标点, 该函数比较慢, 请谨慎调用
///
- /// 碰撞区域数据
- /// 需要随机点的数量
- public Vector2[] GetRandomPositionInPolygon(List polygonDataList, int count)
+ public Vector2[] GetRandomPositionInPolygon(List vertices, List polygons, int count)
{
+ if (vertices.Count == 0 || polygons.Count == 0)
+ {
+ return Vector2.Zero.MakeArray(count);
+ }
var minX = int.MaxValue;
var maxX = int.MinValue;
var minY = int.MaxValue;
var maxY = int.MinValue;
-
- var outCount = 0;
// 遍历多边形的顶点,找到最小和最大的x、y坐标
- foreach (var navigationPolygonData in polygonDataList)
+ foreach (var vertex in vertices)
{
- if (navigationPolygonData.Type == NavigationPolygonType.Out)
+ if (vertex.X < minX)
{
- outCount++;
+ minX = Mathf.CeilToInt(vertex.X);
}
- foreach (var vertex in navigationPolygonData.GetPoints())
+ else if (vertex.X > maxX)
{
- if (vertex.X < minX)
- {
- minX = Mathf.CeilToInt(vertex.X);
- }
- else if (vertex.X > maxX)
- {
- maxX = Mathf.FloorToInt(vertex.X);
- }
- if (vertex.Y < minY)
- {
- minY = Mathf.CeilToInt(vertex.Y);
- }
- else if (vertex.Y > maxY)
- {
- maxY = Mathf.FloorToInt(vertex.Y);
- }
+ maxX = Mathf.FloorToInt(vertex.X);
+ }
+ if (vertex.Y < minY)
+ {
+ minY = Mathf.CeilToInt(vertex.Y);
+ }
+ else if (vertex.Y > maxY)
+ {
+ maxY = Mathf.FloorToInt(vertex.Y);
}
}
var list = new List();
+ var tryCount = 0;
while (true)
{
- var flag = outCount == 0;
- var point = new Vector2(RandomRangeInt(minX, maxX), RandomRangeInt(minY, maxY));
-
- foreach (var navigationPolygonData in polygonDataList)
+ if (tryCount >= 2000) //尝试2000次后放弃
{
- if (navigationPolygonData.Type == NavigationPolygonType.Out)
+ while (list.Count < count)
{
- if (!flag && Utils.IsPointInPolygon(navigationPolygonData.GetPoints(), point))
- {
- flag = true;
- }
+ list.Add(Vector2.Zero);
}
- else
- {
- if (flag && Utils.IsPointInPolygon(navigationPolygonData.GetPoints(), point))
- {
- flag = false;
- }
- }
+ break;
}
- if (flag)
+ tryCount++;
+ var point = new Vector2(RandomRangeInt(minX, maxX), RandomRangeInt(minY, maxY));
+ foreach (var ps in polygons)
{
- list.Add(point);
- if (list.Count >= count)
+ var arr = new List();
+ foreach (var i in ps)
{
- return list.ToArray();
+ arr.Add(vertices[i]);
+ }
+
+ if (Utils.IsPointInPolygon(arr, point))
+ {
+ tryCount = 0;
+ list.Add(point);
+ if (list.Count >= count)
+ {
+ return list.ToArray();
+ }
}
}
}
+
+ return list.ToArray();
}
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/common/UiEventBinder.cs b/DungeonShooting_Godot/src/framework/common/UiEventBinder.cs
new file mode 100644
index 0000000..37ff894
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/common/UiEventBinder.cs
@@ -0,0 +1,26 @@
+
+using Godot;
+
+///
+/// Ui事件绑定数据对象
+///
+public class UiEventBinder
+{
+
+ private Control Control;
+ private Control.GuiInputEventHandler Callback;
+
+ public UiEventBinder(Control control, Control.GuiInputEventHandler callback)
+ {
+ Control = control;
+ Callback = callback;
+ }
+
+ ///
+ /// 解除绑定事件
+ ///
+ public void UnBind()
+ {
+ Control.GuiInput -= Callback;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/common/Utils.cs b/DungeonShooting_Godot/src/framework/common/Utils.cs
index b102450..07b4751 100644
--- a/DungeonShooting_Godot/src/framework/common/Utils.cs
+++ b/DungeonShooting_Godot/src/framework/common/Utils.cs
@@ -1,4 +1,8 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
using Godot;
+using UI.TileSetEditorCombination;
///
/// 常用函数工具类
@@ -8,9 +12,12 @@
///
/// 默认随机数对象
///
- public static SeedRandom Random { get; }
+ public static SeedRandom Random { get; private set; }
- static Utils()
+ ///
+ /// 初始化随机种子
+ ///
+ public static void InitRandom()
{
Random = new SeedRandom();
Debug.Log("随机种子为: ", Random.Seed);
@@ -45,36 +52,6 @@
{
return (mask & layer) != 0;
}
-
- ///
- /// 使用定的 canvasItem 绘制导航区域, 注意, 该函数只能在 draw 函数中调用
- ///
- public static void DrawNavigationPolygon(CanvasItem canvasItem, NavigationPolygonData[] polygonData, float width = 1)
- {
- for (var i = 0; i < polygonData.Length; i++)
- {
- var item = polygonData[i];
- var points = item.GetPoints();
- if (points.Length>= 2)
- {
- var array = new Vector2[points.Length + 1];
- for (var j = 0; j < points.Length; j++)
- {
- array[j] = points[j];
- }
-
- array[array.Length - 1] = points[0];
- if (item.Type == NavigationPolygonType.In)
- {
- canvasItem.DrawPolyline(array, Colors.Orange, width);
- }
- else
- {
- canvasItem.DrawPolyline(array, Colors.Orange, width);
- }
- }
- }
- }
///
/// 将一个任意角度转为0到360度
@@ -96,7 +73,7 @@
///
/// 原数值
/// 吸附步长
- public static float Adsorption(float value, float step)
+ public static float Adsorption(this float value, float step)
{
var f = Mathf.Round(value / step);
return f * step;
@@ -107,7 +84,7 @@
///
/// 原数值
/// 吸附步长
- public static int Adsorption(float value, int step)
+ public static int Adsorption(this float value, int step)
{
var f = Mathf.RoundToInt(value / step);
return f * step;
@@ -118,7 +95,7 @@
///
/// 原数值
/// 吸附步长
- public static Vector2 Adsorption(Vector2 value, Vector2 step)
+ public static Vector2 Adsorption(this Vector2 value, Vector2 step)
{
var x = Mathf.Round(value.X / step.X);
var y = Mathf.Round(value.Y / step.Y);
@@ -130,12 +107,58 @@
///
/// 原数值
/// 吸附步长
- public static Vector2I Adsorption(Vector2 value, Vector2I step)
+ public static Vector2I Adsorption(this Vector2 value, Vector2I step)
{
var x = Mathf.RoundToInt(value.X / step.X);
var y = Mathf.RoundToInt(value.Y / step.Y);
return new Vector2I(x * step.X, y * step.Y);
}
+
+ ///
+ /// 根据步长按照 Floor() 函数吸附值
+ ///
+ /// 原数值
+ /// 吸附步长
+ public static float FloorAdsorption(this float value, float step)
+ {
+ var f = Mathf.Floor(value / step);
+ return f * step;
+ }
+
+ ///
+ /// 根据步长按照 Floor() 函数吸附值
+ ///
+ /// 原数值
+ /// 吸附步长
+ public static int FloorAdsorption(this float value, int step)
+ {
+ var f = Mathf.FloorToInt(value / step);
+ return f * step;
+ }
+
+ ///
+ /// 根据步长按照 Floor() 函数吸附值
+ ///
+ /// 原数值
+ /// 吸附步长
+ public static Vector2 FloorAdsorption(this Vector2 value, Vector2 step)
+ {
+ var x = Mathf.Floor(value.X / step.X);
+ var y = Mathf.Floor(value.Y / step.Y);
+ return new Vector2(x * step.X, y * step.Y);
+ }
+
+ ///
+ /// 根据步长按照 Floor() 函数吸附值
+ ///
+ /// 原数值
+ /// 吸附步长
+ public static Vector2I FloorAdsorption(this Vector2 value, Vector2I step)
+ {
+ var x = Mathf.FloorToInt(value.X / step.X);
+ var y = Mathf.FloorToInt(value.Y / step.Y);
+ return new Vector2I(x * step.X, y * step.Y);
+ }
///
/// 字符串首字母小写
@@ -162,17 +185,6 @@
}
///
- /// 返回指定坐标是否在UI节范围点内
- ///
- public static bool IsPositionOver(this Control control, Vector2 position)
- {
- var globalPosition = control.GlobalPosition;
- var size = control.Size * control.Scale;
- return position.X >= globalPosition.X && position.X <= (globalPosition.X + size.X) &&
- position.Y >= globalPosition.Y && position.Y <= (globalPosition.Y + size.Y);
- }
-
- ///
/// 判断点是否在区域内
///
public static bool IsPositionInRect(Vector2 pos, Rect2 rect2)
@@ -290,6 +302,27 @@
return isInside;
}
+
+ ///
+ /// 返回一个点是否在 Polygon 内部
+ ///
+ /// 多边形顶点
+ /// 目标点
+ public static bool IsPointInPolygon(List polygon, Vector2 point)
+ {
+ var isInside = false;
+ for (int i = 0, j = polygon.Count - 1; i < polygon.Count; j = i++)
+ {
+ if ((polygon[i].Y > point.Y) != (polygon[j].Y > point.Y) &&
+ point.X < (polygon[j].X - polygon[i].X) * (point.Y - polygon[i].Y) / (polygon[j].Y - polygon[i].Y) +
+ polygon[i].X)
+ {
+ isInside = !isInside;
+ }
+ }
+
+ return isInside;
+ }
///
/// 根据法线翻转向量
@@ -306,4 +339,239 @@
{
return ReflectByNormal(Vector2.FromAngle(rotation), normal).Angle();
}
+
+ ///
+ /// 计算Vector2点所占用的区域
+ ///
+ public static Rect2I CalcRect(IEnumerable cells)
+ {
+ var count = cells.Count();
+ if (count == 0)
+ {
+ return new Rect2I();
+ }
+ //单位: 像素
+ var canvasXStart = int.MaxValue;
+ var canvasYStart = int.MaxValue;
+ var canvasXEnd = int.MinValue;
+ var canvasYEnd = int.MinValue;
+
+ foreach (var pos in cells)
+ {
+ canvasXStart = Mathf.Min(pos.X, canvasXStart);
+ canvasYStart = Mathf.Min(pos.Y, canvasYStart);
+ canvasXEnd = Mathf.Max(pos.X + 1, canvasXEnd);
+ canvasYEnd = Mathf.Max(pos.Y + 1, canvasYEnd);
+ }
+
+ return new Rect2I(
+ canvasXStart,
+ canvasYStart,
+ canvasXEnd - canvasXStart,
+ canvasYEnd - canvasYStart
+ );
+ }
+
+ ///
+ /// 计算TileSet Cell所占用的区域
+ ///
+ public static Rect2I CalcTileRect(IEnumerable cells)
+ {
+ //单位: 像素
+ var canvasXStart = int.MaxValue;
+ var canvasYStart = int.MaxValue;
+ var canvasXEnd = int.MinValue;
+ var canvasYEnd = int.MinValue;
+
+ foreach (var pos in cells)
+ {
+ canvasXStart = Mathf.Min(pos.X, canvasXStart);
+ canvasYStart = Mathf.Min(pos.Y, canvasYStart);
+ canvasXEnd = Mathf.Max(pos.X + GameConfig.TileCellSize, canvasXEnd);
+ canvasYEnd = Mathf.Max(pos.Y + GameConfig.TileCellSize, canvasYEnd);
+ }
+
+ return new Rect2I(
+ canvasXStart,
+ canvasYStart,
+ canvasXEnd - canvasXStart,
+ canvasYEnd - canvasYStart
+ );
+ }
+
+ ///
+ /// 计算TileSet Cell所占用的区域
+ ///
+ public static Rect2I CalcTileRect(IEnumerable cells)
+ {
+ //单位: 像素
+ var canvasXStart = float.MaxValue;
+ var canvasYStart = float.MaxValue;
+ var canvasXEnd = float.MinValue;
+ var canvasYEnd = float.MinValue;
+
+ foreach (var pos in cells)
+ {
+ canvasXStart = Mathf.Min(pos.X, canvasXStart);
+ canvasYStart = Mathf.Min(pos.Y, canvasYStart);
+ canvasXEnd = Mathf.Max(pos.X + GameConfig.TileCellSize, canvasXEnd);
+ canvasYEnd = Mathf.Max(pos.Y + GameConfig.TileCellSize, canvasYEnd);
+ }
+
+ return new Rect2I(
+ (int)canvasXStart,
+ (int)canvasYStart,
+ (int)(canvasXEnd - canvasXStart),
+ (int)(canvasYEnd - canvasYStart)
+ );
+ }
+
+ ///
+ /// 根据鼠标位置执行单步放大逻辑
+ ///
+ public static bool DoMagnifyByMousePosition(Control control, float maxXScale)
+ {
+ var offset = control.GetLocalMousePosition();
+ var prevScale = control.Scale;
+ var newScale = prevScale * 1.1f;
+ if (newScale.X <= maxXScale)
+ {
+ control.Scale = newScale;
+ var position = control.Position - offset * 0.1f * prevScale;
+ control.Position = position;
+ return true;
+ }
+
+ return false;
+ }
+
+ ///
+ /// 根据鼠标位置执行单步放大逻辑
+ ///
+ public static bool DoMagnifyByMousePosition(Node2D node, float maxXScale)
+ {
+ var offset = node.GetLocalMousePosition();
+ var prevScale = node.Scale;
+ var newScale = prevScale * 1.1f;
+ if (newScale.X <= maxXScale)
+ {
+ node.Scale = newScale;
+ var position = node.Position - offset * 0.1f * prevScale;
+ node.Position = position;
+ return true;
+ }
+
+ return false;
+ }
+
+ ///
+ /// 根据鼠标位置执行单步缩小逻辑
+ ///
+ public static bool DoShrinkByMousePosition(Control control, float minXScale)
+ {
+ var offset = control.GetLocalMousePosition();
+ var prevScale = control.Scale;
+ var newScale = prevScale / 1.1f;
+ if (newScale.X >= minXScale)
+ {
+ control.Scale = newScale;
+ var position = control.Position + offset * 0.1f * newScale;
+ control.Position = position;
+ return true;
+ }
+
+ return false;
+ }
+
+ ///
+ /// 根据鼠标位置执行单步缩小逻辑
+ ///
+ public static bool DoShrinkByMousePosition(Node2D node, float minXScale)
+ {
+ var offset = node.GetLocalMousePosition();
+ var prevScale = node.Scale;
+ var newScale = prevScale / 1.1f;
+ if (newScale.X >= minXScale)
+ {
+ node.Scale = newScale;
+ var position = node.Position + offset * 0.1f * newScale;
+ node.Position = position;
+ return true;
+ }
+
+ return false;
+ }
+
+ ///
+ /// 聚焦Ui节点
+ ///
+ /// 需要聚焦的节点
+ /// 父节点容器大小
+ /// 当前节点容器大小
+ public static void DoFocusNode(Control control, Vector2 parentSize, Vector2 selfSize)
+ {
+ control.Position = parentSize / 2 - selfSize * 0.5f * control.Scale;
+ }
+
+ ///
+ /// 返回鼠标所在的单元格位置, 相对于Ui节点左上角
+ ///
+ public static Vector2I GetMouseCellPosition(CanvasItem control)
+ {
+ var pos = control.GetLocalMousePosition() / GameConfig.TileCellSize;
+ return pos.AsVector2I();
+ }
+
+ ///
+ /// 创建一个数组, 并填充该对象
+ ///
+ public static T[] MakeArray(this T data, int len)
+ {
+ var arr = new T[len];
+ for (var i = 0; i < len; i++)
+ {
+ arr[i] = data;
+ }
+ return arr;
+ }
+
+ ///
+ /// 根据金币数量获取金币对象id数组
+ ///
+ public static string[] GetGoldList(int gold)
+ {
+ var list = new List();
+ while (gold > 0)
+ {
+ if (gold >= 10)
+ {
+ list.Add(ActivityObject.Ids.Id_gold_10);
+ gold -= 10;
+ }
+ else if (gold >= 5)
+ {
+ list.Add(ActivityObject.Ids.Id_gold_5);
+ gold -= 5;
+ }
+ else
+ {
+ list.Add(ActivityObject.Ids.Id_gold_1);
+ gold -= 1;
+ }
+ }
+ return list.ToArray();
+ }
+
+ ///
+ /// 遍历节点树
+ ///
+ public static void EachNode(Node node, Action action)
+ {
+ action(node);
+ var childCount = node.GetChildCount();
+ for (var i = 0; i < childCount; i++)
+ {
+ EachNode(node.GetChild(i), action);
+ }
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/coroutine/ProxyCoroutineHandler.cs b/DungeonShooting_Godot/src/framework/coroutine/ProxyCoroutineHandler.cs
index d902fe9..e463ddf 100644
--- a/DungeonShooting_Godot/src/framework/coroutine/ProxyCoroutineHandler.cs
+++ b/DungeonShooting_Godot/src/framework/coroutine/ProxyCoroutineHandler.cs
@@ -23,8 +23,8 @@
for (var i = 0; i < pairs.Length; i++)
{
var item = pairs[i];
- //try
- {
+ // try
+ // {
var canNext = true;
if (item.WaitState == CoroutineData.WaitTypeEnum.WaitForSeconds) //等待秒数
@@ -130,7 +130,7 @@
}
}
}
- }
+ // }
// catch (Exception e)
// {
// Debug.LogError("执行协程发生异常: \n" + e);
diff --git a/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs b/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs
index d943e6a..0ebce39 100644
--- a/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs
+++ b/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs
@@ -85,12 +85,13 @@
activityObject.AffiliationArea._includeItems.Remove(activityObject);
}
activityObject.AffiliationArea = this;
- _includeItems.Add(activityObject);
-
- //如果是玩家
- if (activityObject == Player.Current)
+ if (_includeItems.Add(activityObject))
{
- CallDeferred(nameof(OnPlayerInsertRoom));
+ //如果是玩家
+ if (activityObject == Player.Current)
+ {
+ CallDeferred(nameof(OnPlayerInsertRoom));
+ }
}
}
diff --git a/DungeonShooting_Godot/src/framework/map/DoorNavigationInfo.cs b/DungeonShooting_Godot/src/framework/map/DoorNavigationInfo.cs
deleted file mode 100644
index 21651c2..0000000
--- a/DungeonShooting_Godot/src/framework/map/DoorNavigationInfo.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-
-using Godot;
-
-///
-/// 房间连接门的站位导航数据
-///
-public class DoorNavigationInfo
-{
- public DoorNavigationInfo(RoomDoorInfo doorInfo, NavigationPolygonData openNavigationData, NavigationPolygonData closeNavigationData)
- {
- DoorInfo = doorInfo;
- OpenNavigationData = openNavigationData;
- CloseNavigationData = closeNavigationData;
- }
-
- ///
- /// 绑定的门对象
- ///
- public RoomDoorInfo DoorInfo;
-
- ///
- /// 门开启时导航区域节点
- ///
- public NavigationRegion2D OpenNavigationNode;
-
- ///
- /// 门关闭时导航区域节点
- ///
- public NavigationRegion2D CloseNavigationNode;
-
- ///
- /// 门开启时导航形状数据
- ///
- public NavigationPolygonData OpenNavigationData;
-
- ///
- /// 门关闭时导航形状数据
- ///
- public NavigationPolygonData CloseNavigationData;
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs b/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs
index 92e1b0d..2fc4437 100644
--- a/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs
+++ b/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs
@@ -7,25 +7,104 @@
public class DungeonConfig
{
///
+ /// 地牢使用的随机种子
+ ///
+ public int? RandomSeed = null;
+
+ ///
/// 地牢组名称
///
public string GroupName;
///
+ /// 战斗房间数量
+ ///
+ public int BattleRoomCount = 15;
+
+ ///
+ /// 奖励房间数量
+ ///
+ public int RewardRoomCount = 2;
+
+ ///
+ /// 商店数量
+ ///
+ public int ShopRoomCount = 1;
+
+ ///
+ /// 出口房间数量
+ ///
+ public int OutRoomCount = 1;
+
+ ///
+ /// Boss房间数量
+ ///
+ public int BossRoomCount = 1;
+
+ ///
/// 房间数量
///
- public int RoomCount = 20;
+ public int RoomCount => BattleRoomCount + RewardRoomCount + ShopRoomCount + OutRoomCount + BossRoomCount;
+
+ ///
+ /// 房间最大层级
+ ///
+ public int MaxLayer = 5;
+
+ ///
+ /// 房间最小间隔
+ ///
+ public int RoomMinInterval = 2;
+
+ ///
+ /// 房间最大间隔
+ ///
+ public int RoomMaxInterval = 2;
+
+ ///
+ /// 房间横轴最小分散程度
+ ///
+ public float RoomHorizontalMinDispersion = -0.6f;
+
+ ///
+ /// 房间横轴最大分散程度
+ ///
+ public float RoomHorizontalMaxDispersion = 0.6f;
///
+ /// 房间纵轴最小分散程度
+ ///
+ public float RoomVerticalMinDispersion = -0.6f;
+
+ ///
+ /// 房间纵轴最大分散程度
+ ///
+ public float RoomVerticalMaxDispersion = 0.6f;
+
+ ///
+ /// 是否启用区域限制
+ ///
+ public bool EnableLimitRange = true;
+
+ ///
+ /// 横轴范围
+ ///
+ public int RangeX = 120;
+
+ ///
+ /// 纵轴范围
+ ///
+ public int RangeY = 120;
+
+ //----------------------- 地牢编辑使用 -------------------------
+ ///
/// 是否指定了房间
///
public bool HasDesignatedRoom => DesignatedRoom != null && DesignatedRoom.Count > 0;
-
///
/// 指定房间类型
///
public DungeonRoomType DesignatedType;
-
///
/// 指定房间列表
///
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs b/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs
index a8e5533..feb8ca2 100644
--- a/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs
+++ b/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs
@@ -18,51 +18,56 @@
/// 起始房间
///
public RoomInfo StartRoomInfo { get; private set; }
+
+ ///
+ /// 战斗房间
+ ///
+ public List BattleRoomInfos { get; } = new List();
///
/// 结束房间
///
- public RoomInfo EndRoomInfo { get; private set; }
+ public List EndRoomInfos { get; } = new List();
///
/// boss房间
///
- public List BossRoom { get; } = new List();
+ public List BossRoomInfos { get; } = new List();
+
+ ///
+ /// 奖励房间
+ ///
+ public List RewardRoomInfos { get; } = new List();
+
+ ///
+ /// 商店房间
+ ///
+ public List ShopRoomInfos { get; } = new List();
+
+ ///
+ /// 地牢配置数据
+ ///
+ public DungeonConfig Config { get; }
+ ///
+ /// 所属地牢组
+ ///
+ public DungeonRoomGroup RoomGroup { get; }
///
/// 随机数对象
///
- private SeedRandom _random;
+ public SeedRandom Random;
//用于标记地图上的坐标是否被占用
private InfiniteGrid _roomGrid { get; } = new InfiniteGrid();
- //当前房间数量
- private int _count = 0;
//房间id
private int _id;
//下一个房间类型
- private DungeonRoomType _nextRoomType = DungeonRoomType.Battle;
+ private DungeonRoomType _nextRoomType = DungeonRoomType.None;
- //间隔
- private int _roomMinInterval = 5;
- private int _roomMaxInterval = 6;
-
- //房间横轴分散程度
- private float _roomHorizontalMinDispersion = 0f;
- private float _roomHorizontalMaxDispersion = 0.5f;
- // private float _roomHorizontalMinDispersion = 0f;
- // private float _roomHorizontalMaxDispersion = 2f;
-
- //房间纵轴分散程度
- private float _roomVerticalMinDispersion = 0f;
- private float _roomVerticalMaxDispersion = 0.5f;
- // private float _roomVerticalMinDispersion = 0f;
- // private float _roomVerticalMaxDispersion = 2f;
-
//区域限制
- private bool _enableLimitRange = true;
private int _rangeX = 120;
private int _rangeY = 120;
@@ -74,28 +79,20 @@
private int _maxTryCount = 10;
private int _currMaxLayer = 0;
- //地牢配置
- private DungeonConfig _config;
- private DungeonRoomGroup _roomGroup;
-
- private enum GenerateRoomErrorCode
- {
- NoError,
- //超出区域
- OutArea,
- //没有合适的位置
- NoSuitableLocation
- // //碰到其他房间或过道
- // HasCollision,
- // //没有合适的门
- // NoProperDoor,
- }
+ //地牢房间规则处理类
+ private DungeonRule _rule;
+
+ //上一个房间
+ private RoomInfo prevRoomInfo = null;
+ private readonly List _tempList = new List();
public DungeonGenerator(DungeonConfig config, SeedRandom seedRandom)
{
- _config = config;
- _random = seedRandom;
- _roomGroup = GameApplication.Instance.RoomConfig[config.GroupName];
+ Config = config;
+ Random = seedRandom;
+ RoomGroup = GameApplication.Instance.RoomConfig[config.GroupName];
+ _rangeX = config.RangeX;
+ _rangeY = config.RangeY;
//验证该组是否满足生成地牢的条件
var result = DungeonManager.CheckDungeon(config.GroupName);
@@ -104,8 +101,8 @@
throw new Exception("当前组'" + config.GroupName + "'" + result.ErrorMessage + ", 不能生成地牢!");
}
- Debug.Log("创建地牢生成器, 随机种子: " + _random.Seed);
- _roomGroup.InitWeight(_random);
+ Debug.Log("创建地牢生成器, 随机种子: " + Random.Seed);
+ RoomGroup.InitWeight(Random);
}
///
@@ -155,60 +152,28 @@
///
/// 生成房间
///
- public void Generate()
+ public bool Generate(DungeonRule rule)
{
- if (StartRoomInfo != null) return;
+ if (StartRoomInfo != null) return false;
+ _rule = rule;
- CalcNextRoomType(null);
- //用于排除上一级房间
- var excludePrevRoom = new List();
- //上一个房间
- RoomInfo prevRoomInfo = null;
-
- var chainTryCount = 0;
- var chainMaxTryCount = 3;
+ //最大尝试次数
+ var maxTryCount = 1000;
+
+ //当前尝试次数
+ var currTryCount = 0;
//如果房间数量不够, 就一直生成
- while (_count < _config.RoomCount || EndRoomInfo == null)
+ while (!_rule.CanOverGenerator())
{
- var nextRoomType = GetNextRoomType();
+ if (_nextRoomType == DungeonRoomType.None)
+ {
+ _nextRoomType = _rule.GetNextRoomType(prevRoomInfo);
+ }
+ var nextRoomType = _nextRoomType;
//上一个房间
- RoomInfo tempPrevRoomInfo;
- if (nextRoomType == DungeonRoomType.Inlet)
- {
- tempPrevRoomInfo = null;
- }
- else if (nextRoomType == DungeonRoomType.Boss)
- {
- tempPrevRoomInfo = FindMaxLayerRoom(excludePrevRoom);
- }
- else if (nextRoomType == DungeonRoomType.Outlet)
- {
- tempPrevRoomInfo = prevRoomInfo;
- }
- else if (nextRoomType == DungeonRoomType.Battle)
- {
- if (chainTryCount < chainMaxTryCount)
- {
- if (prevRoomInfo != null && prevRoomInfo.Layer > 6) //层数太高, 下一个房间生成在低层级
- {
- tempPrevRoomInfo = RoundRoomLessThanLayer(3);
- }
- else
- {
- tempPrevRoomInfo = prevRoomInfo;
- }
- }
- else
- {
- tempPrevRoomInfo = _random.RandomChoose(RoomInfos);
- }
- }
- else
- {
- tempPrevRoomInfo = _random.RandomChoose(RoomInfos);
- }
+ var tempPrevRoomInfo = _rule.GetConnectPrevRoom(prevRoomInfo, nextRoomType);
//生成下一个房间
var errorCode = GenerateRoom(tempPrevRoomInfo, nextRoomType, out var nextRoom);
@@ -222,51 +187,33 @@
}
else if (nextRoomType == DungeonRoomType.Boss) //boss房间
{
- BossRoom.Add(nextRoom);
- excludePrevRoom.Clear();
+ BossRoomInfos.Add(nextRoom);
}
else if (nextRoomType == DungeonRoomType.Outlet)
{
- EndRoomInfo = nextRoom;
+ EndRoomInfos.Add(nextRoom);
}
else if (nextRoomType == DungeonRoomType.Battle)
{
- chainTryCount = 0;
- chainMaxTryCount = _random.RandomRangeInt(1, 3);
+ BattleRoomInfos.Add(nextRoom);
+ }
+ else if (nextRoomType == DungeonRoomType.Reward)
+ {
+ RewardRoomInfos.Add(nextRoom);
+ }
+ else if (nextRoomType == DungeonRoomType.Shop)
+ {
+ ShopRoomInfos.Add(nextRoom);
}
prevRoomInfo = nextRoom;
- CalcNextRoomType(prevRoomInfo);
+ _rule.GenerateRoomSuccess(tempPrevRoomInfo, nextRoom);
+ _nextRoomType = _rule.GetNextRoomType(nextRoom);
}
else //生成失败
{
- if (nextRoomType == DungeonRoomType.Boss)
- {
- //生成boss房间成功
- excludePrevRoom.Add(tempPrevRoomInfo);
- if (excludePrevRoom.Count >= RoomInfos.Count)
- {
- //全都没找到合适的, 那就再来一遍
- excludePrevRoom.Clear();
- }
- }
- else if (nextRoomType == DungeonRoomType.Outlet)
- {
- //生成结束房间失败, 那么只能回滚boss房间
- if (prevRoomInfo != null)
- {
- var bossPrev = prevRoomInfo.Prev;
- BossRoom.Remove(prevRoomInfo);
- RollbackRoom(prevRoomInfo);
- CalcNextRoomType(bossPrev);
- prevRoomInfo = null;
- }
- }
- else if (nextRoomType == DungeonRoomType.Battle)
- {
- chainTryCount++;
- }
+ _rule.GenerateRoomFail(tempPrevRoomInfo, nextRoomType);
- Debug.Log("生成第" + (_count + 1) + "个房间失败! 失败原因: " + errorCode);
+ //Debug.Log("生成第" + (_count + 1) + "个房间失败! 失败原因: " + errorCode);
if (errorCode == GenerateRoomErrorCode.OutArea)
{
_failCount++;
@@ -280,15 +227,22 @@
Debug.Log("生成房间失败次数过多, 增大区域");
}
}
+ currTryCount++;
+ if (currTryCount >= maxTryCount)
+ {
+ return false;
+ }
}
}
_roomGrid.Clear();
Debug.Log("房间总数: " + RoomInfos.Count);
+ Debug.Log("尝试次数: " + currTryCount);
+ return true;
}
//生成房间
- private GenerateRoomErrorCode GenerateRoom(RoomInfo prevRoomInfo, DungeonRoomType roomType, out RoomInfo resultRoomInfo)
+ private GenerateRoomErrorCode GenerateRoom(RoomInfo prevRoom, DungeonRoomType roomType, out RoomInfo resultRoomInfo)
{
// if (_count >= _config.RoomCount)
// {
@@ -297,21 +251,21 @@
// }
DungeonRoomSplit roomSplit;
- if (_config.HasDesignatedRoom && _config.DesignatedType == roomType) //执行指定了房间
+ if (Config.HasDesignatedRoom && Config.DesignatedType == roomType) //执行指定了房间
{
- roomSplit = _random.RandomChoose(_config.DesignatedRoom);
+ roomSplit = Random.RandomChoose(Config.DesignatedRoom);
}
else //没有指定房间
{
//随机选择一个房间
- var list = _roomGroup.GetRoomList(roomType);
- if (list.Count == 0) //如果没有指定类型的房间, 就生成战斗房间
+ var list = RoomGroup.GetRoomList(roomType);
+ if (list.Count == 0) //如果没有指定类型的房间, 或者房间数量不够, 就生成战斗房间
{
- roomSplit = _roomGroup.GetRandomRoom(DungeonRoomType.Battle);
+ roomSplit = RoomGroup.GetRandomRoom(DungeonRoomType.Battle);
}
else
{
- roomSplit = _roomGroup.GetRandomRoom(roomType);
+ roomSplit = RoomGroup.GetRandomRoom(roomType);
}
}
@@ -320,9 +274,9 @@
//房间大小
room.Size = new Vector2I((int)roomSplit.RoomInfo.Size.X, (int)roomSplit.RoomInfo.Size.Y);
- if (prevRoomInfo != null) //表示这不是第一个房间, 就得判断当前位置下的房间是否被遮挡
+ if (prevRoom != null) //表示这不是第一个房间, 就得判断当前位置下的房间是否被遮挡
{
- room.Layer = prevRoomInfo.Layer + 1;
+ room.Layer = prevRoom.Layer + 1;
if (_currMaxLayer < room.Layer)
{
_currMaxLayer = room.Layer;
@@ -340,46 +294,37 @@
}
for (; tryCount < maxTryCount; tryCount++)
{
- var direction = _random.RandomRangeInt(0, 3);
+ //下一个房间方向
+ var direction = _rule.GetNextRoomDoorDirection(prevRoom, roomType);
//房间间隔
- var space = _random.RandomRangeInt(_roomMinInterval, _roomMaxInterval);
+ var space = _rule.GetNextRoomInterval(prevRoom, roomType, direction);
//中心偏移
- int offset;
- if (direction == 0 || direction == 2)
- {
- offset = _random.RandomRangeInt(-(int)(prevRoomInfo.Size.X * _roomVerticalMinDispersion),
- (int)(prevRoomInfo.Size.X * _roomVerticalMaxDispersion));
- }
- else
- {
- offset = _random.RandomRangeInt(-(int)(prevRoomInfo.Size.Y * _roomHorizontalMinDispersion),
- (int)(prevRoomInfo.Size.Y * _roomHorizontalMaxDispersion));
- }
+ var offset = _rule.GetNextRoomOffset(prevRoom, roomType, direction);
//计算房间位置
- if (direction == 0) //上
+ if (direction == RoomDirection.Up) //上
{
- room.Position = new Vector2I(prevRoomInfo.Position.X + offset,
- prevRoomInfo.Position.Y - room.Size.Y - space);
+ room.Position = new Vector2I(prevRoom.Position.X + offset,
+ prevRoom.Position.Y - room.Size.Y - space);
}
- else if (direction == 1) //右
+ else if (direction == RoomDirection.Right) //右
{
- room.Position = new Vector2I(prevRoomInfo.Position.X + prevRoomInfo.Size.Y + space,
- prevRoomInfo.Position.Y + offset);
+ room.Position = new Vector2I(prevRoom.Position.X + prevRoom.Size.Y + space,
+ prevRoom.Position.Y + offset);
}
- else if (direction == 2) //下
+ else if (direction == RoomDirection.Down) //下
{
- room.Position = new Vector2I(prevRoomInfo.Position.X + offset,
- prevRoomInfo.Position.Y + prevRoomInfo.Size.Y + space);
+ room.Position = new Vector2I(prevRoom.Position.X + offset,
+ prevRoom.Position.Y + prevRoom.Size.Y + space);
}
- else if (direction == 3) //左
+ else if (direction == RoomDirection.Left) //左
{
- room.Position = new Vector2I(prevRoomInfo.Position.X - room.Size.X - space,
- prevRoomInfo.Position.Y + offset);
+ room.Position = new Vector2I(prevRoom.Position.X - room.Size.X - space,
+ prevRoom.Position.Y + offset);
}
//是否在限制区域内
- if (_enableLimitRange)
+ if (Config.EnableLimitRange)
{
if (room.GetHorizontalStart() < -_rangeX || room.GetHorizontalEnd() > _rangeX ||
room.GetVerticalStart() < -_rangeY || room.GetVerticalEnd() > _rangeY)
@@ -391,19 +336,20 @@
}
//是否碰到其他房间或者过道
- if (_roomGrid.RectCollision(room.Position - new Vector2I(GameConfig.RoomSpace, GameConfig.RoomSpace), room.Size + new Vector2I(GameConfig.RoomSpace * 2, GameConfig.RoomSpace * 2)))
+ if (_roomGrid.RectCollision(room.Position - new Vector2I(2, 2), room.Size + new Vector2I(4, 5)))
{
//碰到其他墙壁, 再一次尝试
continue;
//return GenerateRoomErrorCode.HasCollision;
}
-
+
_roomGrid.SetRect(room.Position, room.Size, true);
//找门, 与上一个房间是否能连通
- if (!ConnectDoor(prevRoomInfo, room))
+ if (!ConnectDoor(prevRoom, room))
{
_roomGrid.RemoveRect(room.Position, room.Size);
+ //Debug.Log("链接通道失败");
//房间过道没有连接上, 再一次尝试
continue;
//return GenerateRoomErrorCode.NoProperDoor;
@@ -423,67 +369,43 @@
room.Layer = 0;
_roomGrid.SetRect(room.Position, room.Size, true);
}
-
- if (IsParticipateCounting(room))
- {
- _count++;
- }
_id++;
- room.Prev = prevRoomInfo;
- if (prevRoomInfo != null)
+ room.Prev = prevRoom;
+ if (prevRoom != null)
{
- prevRoomInfo.Next.Add(room);
+ prevRoom.Next.Add(room);
}
resultRoomInfo = room;
return GenerateRoomErrorCode.NoError;
}
- //判断房间是否参与计数
- private bool IsParticipateCounting(RoomInfo roomInfo)
+ ///
+ /// 设置上一个房间
+ ///
+ public void SetPrevRoom(RoomInfo roomInfo)
{
- return roomInfo.RoomType == DungeonRoomType.Battle || roomInfo.RoomType == DungeonRoomType.Boss;
+ prevRoomInfo = roomInfo;
}
- //计算下一个房间类型
- private void CalcNextRoomType(RoomInfo prev)
- {
- if (prev == null) //生成第一个房间
- {
- _nextRoomType = DungeonRoomType.Inlet;
- }
- else if (_count == _config.RoomCount - 1) //最后一个房间是boss房间
- {
- _nextRoomType = DungeonRoomType.Boss;
- }
- else if (_count >= _config.RoomCount) //结束房间
- {
- _nextRoomType = DungeonRoomType.Outlet;
- }
- else if (prev.RoomType == DungeonRoomType.Boss) //生成结束房间
- {
- _nextRoomType = DungeonRoomType.Outlet;
- }
- else
- {
- _nextRoomType = DungeonRoomType.Battle;
- }
- }
-
- //获取下一个房间类型
- private DungeonRoomType GetNextRoomType()
- {
- return _nextRoomType;
- }
-
- //回滚一个房间
- private bool RollbackRoom(RoomInfo roomInfo)
+ ///
+ /// 回滚一个房间
+ ///
+ public bool RollbackRoom(RoomInfo roomInfo)
{
if (roomInfo.Next.Count > 0)
{
Debug.LogError("当前房间还有连接的子房间, 不能回滚!");
return false;
}
+
+ if (!roomInfo.CanRollback)
+ {
+ Debug.LogError("当前房间不能回滚!");
+ return false;
+ }
+ var prevRoom = roomInfo.Prev;
+
//退掉占用的房间区域和过道占用区域
_roomGrid.RemoveRect(roomInfo.Position, roomInfo.Size);
foreach (var rect2 in roomInfo.AisleArea)
@@ -492,7 +414,7 @@
}
//roomInfo.Doors[0].
- if (roomInfo.Prev != null)
+ if (prevRoom != null)
{
roomInfo.Prev.Next.Remove(roomInfo);
}
@@ -505,32 +427,54 @@
}
RoomInfos.Remove(roomInfo);
- roomInfo.Destroy();
-
- if (IsParticipateCounting(roomInfo))
+ switch (roomInfo.RoomType)
{
- _count--;
+ case DungeonRoomType.Battle:
+ BattleRoomInfos.Remove(roomInfo);
+ break;
+ case DungeonRoomType.Inlet:
+ StartRoomInfo = null;
+ break;
+ case DungeonRoomType.Outlet:
+ EndRoomInfos.Remove(roomInfo);
+ break;
+ case DungeonRoomType.Boss:
+ BossRoomInfos.Remove(roomInfo);
+ break;
+ case DungeonRoomType.Reward:
+ RewardRoomInfos.Remove(roomInfo);
+ break;
+ case DungeonRoomType.Shop:
+ ShopRoomInfos.Remove(roomInfo);
+ break;
+ case DungeonRoomType.Event:
+ break;
}
-
+
+ roomInfo.Destroy();
_id--;
+ _nextRoomType = DungeonRoomType.None;
+ SetPrevRoom(prevRoom);
return true;
}
///
/// 寻找层级最高的房间
///
+ /// 指定房间类型, 如果传 None 则表示选择所有类型房间
/// 排除的房间
- private RoomInfo FindMaxLayerRoom(List exclude)
+ public RoomInfo FindMaxLayerRoom(DungeonRoomType roomType, List exclude = null)
{
RoomInfo temp = null;
foreach (var roomInfo in RoomInfos)
{
- if (temp == null || roomInfo.Layer > temp.Layer)
+ if (roomInfo.CanRollback)
{
- if (exclude == null || !exclude.Contains(roomInfo))
- {
- temp = roomInfo;
- }
+ continue;
+ }
+ if ((temp == null || roomInfo.Layer > temp.Layer) && (roomType == DungeonRoomType.None || (roomInfo.RoomType & roomType) != DungeonRoomType.None) && (exclude == null || !exclude.Contains(roomInfo)))
+ {
+ temp = roomInfo;
}
}
@@ -540,18 +484,83 @@
///
/// 随机抽取层级小于 layer 的房间
///
- private RoomInfo RoundRoomLessThanLayer(int layer)
+ /// 指定房间类型, 如果传 None 则表示选择所有类型房间
+ ///
+ /// 排除的房间
+ public RoomInfo RandomRoomLessThanLayer(DungeonRoomType roomType, int layer, List exclude = null)
{
- var list = new List();
+ _tempList.Clear();
foreach (var roomInfo in RoomInfos)
{
- if (roomInfo.Layer < layer)
+ if (roomInfo.CanRollback)
{
- list.Add(roomInfo);
+ continue;
+ }
+ if (roomInfo.Layer < layer && (roomType == DungeonRoomType.None || (roomInfo.RoomType & roomType) != DungeonRoomType.None) && (exclude == null || !exclude.Contains(roomInfo)))
+ {
+ _tempList.Add(roomInfo);
}
}
- return _random.RandomChoose(list);
+ return Random.RandomChoose(_tempList);
+ }
+
+ ///
+ /// 随机抽取层级大于 layer 的房间
+ ///
+ /// 指定房间类型, 如果传 None 则表示选择所有类型房间
+ ///
+ /// 排除的房间
+ public RoomInfo RandomRoomGreaterThanLayer(DungeonRoomType roomType, int layer, List exclude = null)
+ {
+ _tempList.Clear();
+ foreach (var roomInfo in RoomInfos)
+ {
+ if (roomInfo.CanRollback)
+ {
+ continue;
+ }
+ if (roomInfo.Layer > layer && (roomType == DungeonRoomType.None || (roomInfo.RoomType & roomType) != DungeonRoomType.None) && (exclude == null || !exclude.Contains(roomInfo)))
+ {
+ _tempList.Add(roomInfo);
+ }
+ }
+
+ return Random.RandomChoose(_tempList);
+ }
+
+ ///
+ /// 随机抽取房间
+ ///
+ /// 指定房间类型, 如果传 None 则表示选择所有类型房间
+ public RoomInfo GetRandomRoom(DungeonRoomType roomType)
+ {
+ _tempList.Clear();
+ foreach (var roomInfo in RoomInfos)
+ {
+ if (roomInfo.CanRollback)
+ {
+ continue;
+ }
+
+ if (roomType == DungeonRoomType.None || (roomInfo.RoomType & roomType) != DungeonRoomType.None)
+ {
+ _tempList.Add(roomInfo);
+ }
+ }
+
+ return Random.RandomChoose(_tempList);
+ }
+
+ ///
+ /// 提交所有可以回滚的房间
+ ///
+ public void SubmitCanRollbackRoom()
+ {
+ foreach (var roomInfo in RoomInfos)
+ {
+ roomInfo.CanRollback = false;
+ }
}
///
@@ -571,16 +580,7 @@
nextRoomDoor.ConnectDoor = roomDoor;
//先寻找直通门
- if (_random.RandomBoolean())
- {
- //直行通道, 优先横轴
- if (TryConnectHorizontalDoor(roomInfo, roomDoor, nextRoomInfo, nextRoomDoor)
- || TryConnectVerticalDoor(roomInfo, roomDoor, nextRoomInfo, nextRoomDoor))
- {
- return true;
- }
- }
- else
+ if (Random.RandomBoolean())
{
//直行通道, 优先纵轴
if (TryConnectVerticalDoor(roomInfo, roomDoor, nextRoomInfo, nextRoomDoor)
@@ -589,21 +589,34 @@
return true;
}
}
-
- //包含拐角的通道
+ else
+ {
+ //直行通道, 优先横轴
+ if (TryConnectHorizontalDoor(roomInfo, roomDoor, nextRoomInfo, nextRoomDoor)
+ || TryConnectVerticalDoor(roomInfo, roomDoor, nextRoomInfo, nextRoomDoor))
+ {
+ return true;
+ }
+ }
+
+ //包含1个拐角的通道
return TryConnectCrossDoor(roomInfo, roomDoor, nextRoomInfo, nextRoomDoor);
+ //包含2个拐角的通道 (后面再开发)
}
///
- /// 尝试寻找横轴方向上两个房间的连通的门, 只查找直线通道, 返回是否找到
+ /// 尝试寻找纵轴方向上两个房间的连通的门, 只查找直线通道, 返回是否找到
///
- private bool TryConnectHorizontalDoor(RoomInfo roomInfo, RoomDoorInfo roomDoor, RoomInfo nextRoomInfo, RoomDoorInfo nextRoomDoor)
+ private bool TryConnectVerticalDoor(RoomInfo roomInfo, RoomDoorInfo roomDoor, RoomInfo nextRoomInfo, RoomDoorInfo nextRoomDoor)
{
var overlapX = Mathf.Min(roomInfo.GetHorizontalEnd(), nextRoomInfo.GetHorizontalEnd()) -
Mathf.Max(roomInfo.GetHorizontalStart(), nextRoomInfo.GetHorizontalStart());
//这种情况下x轴有重叠
if (overlapX >= 6)
{
+ //填充通通道地板格子
+ var floorCell = new HashSet();
+
//找到重叠区域
var rangeList = FindPassage(roomInfo, nextRoomInfo,
roomInfo.GetVerticalStart() < nextRoomInfo.GetVerticalStart() ? DoorDirection.S : DoorDirection.N);
@@ -611,34 +624,56 @@
while (rangeList.Count > 0)
{
//找到重叠区域
- var range = _random.RandomChooseAndRemove(rangeList);
- var x = _random.RandomRangeInt(range.X, range.Y);
+ var range = Random.RandomChooseAndRemove(rangeList);
+ var x = Random.RandomRangeInt(range.X, range.Y) + 2;
if (roomInfo.GetVerticalStart() < nextRoomInfo.GetVerticalStart()) //room在上, nextRoom在下
{
roomDoor.Direction = DoorDirection.S;
nextRoomDoor.Direction = DoorDirection.N;
- roomDoor.OriginPosition = new Vector2I(x, roomInfo.GetVerticalEnd());
- nextRoomDoor.OriginPosition = new Vector2I(x, nextRoomInfo.GetVerticalStart());
+ roomDoor.OriginPosition = new Vector2I(x, roomInfo.GetVerticalDoorEnd());
+ nextRoomDoor.OriginPosition = new Vector2I(x, nextRoomInfo.GetVerticalDoorStart());
+
+ var sv = roomInfo.GetVerticalDoorEnd() - 1;
+ var ev = nextRoomInfo.GetVerticalDoorStart() + 1;
+ for (var i = sv; i < ev; i++)
+ {
+ floorCell.Add(new Vector2I(x + 1, i));
+ floorCell.Add(new Vector2I(x + 2, i));
+ }
}
else //room在下, nextRoom在上
{
roomDoor.Direction = DoorDirection.N;
nextRoomDoor.Direction = DoorDirection.S;
- roomDoor.OriginPosition = new Vector2I(x, roomInfo.GetVerticalStart());
- nextRoomDoor.OriginPosition = new Vector2I(x, nextRoomInfo.GetVerticalEnd());
+ roomDoor.OriginPosition = new Vector2I(x, roomInfo.GetVerticalDoorStart());
+ nextRoomDoor.OriginPosition = new Vector2I(x, nextRoomInfo.GetVerticalDoorEnd());
+
+ var sv = nextRoomInfo.GetVerticalDoorEnd() - 1;
+ var ev = roomInfo.GetVerticalDoorStart() + 1;
+ for (var i = sv; i < ev; i++)
+ {
+ floorCell.Add(new Vector2I(x + 1, i));
+ floorCell.Add(new Vector2I(x + 2, i));
+ }
}
//判断门之间的通道是否有物体碰到
if (!AddCorridorToGridRange(roomDoor, nextRoomDoor))
{
//此门不能连通
+ floorCell.Clear();
continue;
}
//没有撞到物体
roomInfo.Doors.Add(roomDoor);
nextRoomInfo.Doors.Add(nextRoomDoor);
+
+ roomDoor.AisleFloorCell = floorCell;
+ nextRoomDoor.AisleFloorCell = floorCell;
+ roomDoor.AisleFloorRect = Utils.CalcRect(floorCell);;
+ nextRoomDoor.AisleFloorRect = roomDoor.AisleFloorRect;
return true;
}
}
@@ -647,15 +682,18 @@
}
///
- /// 尝试寻找纵轴方向上两个房间的连通的门, 只查找直线通道, 返回是否找到
+ /// 尝试寻找横轴方向上两个房间的连通的门, 只查找直线通道, 返回是否找到
///
- private bool TryConnectVerticalDoor(RoomInfo roomInfo, RoomDoorInfo roomDoor, RoomInfo nextRoomInfo, RoomDoorInfo nextRoomDoor)
+ private bool TryConnectHorizontalDoor(RoomInfo roomInfo, RoomDoorInfo roomDoor, RoomInfo nextRoomInfo, RoomDoorInfo nextRoomDoor)
{
var overlapY = Mathf.Min(roomInfo.GetVerticalEnd(), nextRoomInfo.GetVerticalEnd()) -
Mathf.Max(roomInfo.GetVerticalStart(), nextRoomInfo.GetVerticalStart());
//这种情况下y轴有重叠
if (overlapY >= 6)
{
+ //填充通通道地板格子
+ var floorCell = new HashSet();
+
//找到重叠区域
var rangeList = FindPassage(roomInfo, nextRoomInfo,
roomInfo.GetHorizontalStart() < nextRoomInfo.GetHorizontalStart() ? DoorDirection.E : DoorDirection.W);
@@ -663,34 +701,54 @@
while (rangeList.Count > 0)
{
//找到重叠区域
- var range = _random.RandomChooseAndRemove(rangeList);
- var y = _random.RandomRangeInt(range.X, range.Y);
+ var range = Random.RandomChooseAndRemove(rangeList);
+ var y = Random.RandomRangeInt(range.X, range.Y) + 3;
if (roomInfo.GetHorizontalStart() < nextRoomInfo.GetHorizontalStart()) //room在左, nextRoom在右
{
roomDoor.Direction = DoorDirection.E;
nextRoomDoor.Direction = DoorDirection.W;
- roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalEnd(), y);
- nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalStart(), y);
+ roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalDoorEnd(), y);
+ nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalDoorStart(), y);
+
+ var sv = roomInfo.GetHorizontalDoorEnd() - 1;
+ var ev = nextRoomInfo.GetHorizontalDoorStart() + 1;
+ for (var i = sv; i < ev; i++)
+ {
+ floorCell.Add(new Vector2I(i, y + 2));
+ }
}
else //room在右, nextRoom在左
{
roomDoor.Direction = DoorDirection.W;
nextRoomDoor.Direction = DoorDirection.E;
- roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalStart(), y);
- nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalEnd(), y);
+ roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalDoorStart(), y);
+ nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalDoorEnd(), y);
+
+ var sv = nextRoomInfo.GetHorizontalDoorEnd() - 1;
+ var ev = roomInfo.GetHorizontalDoorStart() + 1;
+ for (var i = sv; i < ev; i++)
+ {
+ floorCell.Add(new Vector2I(i, y + 2));
+ }
}
//判断门之间的通道是否有物体碰到
if (!AddCorridorToGridRange(roomDoor, nextRoomDoor))
{
//此门不能连通
+ floorCell.Clear();
continue;
}
//没有撞到物体
roomInfo.Doors.Add(roomDoor);
nextRoomInfo.Doors.Add(nextRoomDoor);
+
+ roomDoor.AisleFloorCell = floorCell;
+ nextRoomDoor.AisleFloorCell = floorCell;
+ roomDoor.AisleFloorRect = Utils.CalcRect(floorCell);;
+ nextRoomDoor.AisleFloorRect = roomDoor.AisleFloorRect;
return true;
}
}
@@ -710,7 +768,7 @@
{
if (roomInfo.GetVerticalStart() > nextRoomInfo.GetVerticalStart())
{
- if (_random.RandomBoolean()) //↑ //→
+ if (Random.RandomBoolean()) //↑ //→
{
if (!TryConnect_NE_Door(roomInfo, nextRoomInfo, roomDoor, nextRoomDoor, ref cross) &&
!TryConnect_WS_Door(roomInfo, nextRoomInfo, roomDoor, nextRoomDoor, ref cross))
@@ -729,7 +787,7 @@
}
else
{
- if (_random.RandomBoolean()) //↓ //→
+ if (Random.RandomBoolean()) //↓ //→
{
if (!TryConnect_SE_Door(roomInfo, nextRoomInfo, roomDoor, nextRoomDoor, ref cross) &&
!TryConnect_WN_Door(roomInfo, nextRoomInfo, roomDoor, nextRoomDoor, ref cross))
@@ -751,7 +809,7 @@
{
if (roomInfo.GetVerticalStart() > nextRoomInfo.GetVerticalStart()) //→ //↓
{
- if (_random.RandomBoolean())
+ if (Random.RandomBoolean())
{
if (!TryConnect_ES_Door(roomInfo, nextRoomInfo, roomDoor, nextRoomDoor, ref cross) &&
!TryConnect_NW_Door(roomInfo, nextRoomInfo, roomDoor, nextRoomDoor, ref cross))
@@ -770,7 +828,7 @@
}
else
{
- if (_random.RandomBoolean()) //→ //↑
+ if (Random.RandomBoolean()) //→ //↑
{
if (!TryConnect_EN_Door(roomInfo, nextRoomInfo, roomDoor, nextRoomDoor, ref cross) &&
!TryConnect_SW_Door(roomInfo, nextRoomInfo, roomDoor, nextRoomDoor, ref cross))
@@ -850,8 +908,8 @@
if (areaInfo.Direction == DoorDirection.N || areaInfo.Direction == DoorDirection.S) //纵向门
{
var num = room1.GetHorizontalStart();
- var p1 = num + areaInfo.Start / GameConfig.TileCellSize;
- var p2 = num + areaInfo.End / GameConfig.TileCellSize;
+ var p1 = num + GetDoorAreaInfoStart(areaInfo) / GameConfig.TileCellSize;
+ var p2 = num + GetDoorAreaInfoEnd(areaInfo) / GameConfig.TileCellSize;
if (room1.Position.X > room2.Position.X)
{
@@ -893,8 +951,8 @@
else //横向门
{
var num = room1.GetVerticalStart();
- var p1 = num + areaInfo.Start / GameConfig.TileCellSize;
- var p2 = num + areaInfo.End / GameConfig.TileCellSize;
+ var p1 = num + GetDoorAreaInfoStart(areaInfo) / GameConfig.TileCellSize;
+ var p2 = num + GetDoorAreaInfoEnd(areaInfo) / GameConfig.TileCellSize;
if (room1.Position.Y > room2.Position.Y)
{
@@ -946,17 +1004,39 @@
{
return false;
}
-
- roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalStart() + offset1, roomInfo.GetVerticalStart());
- nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalEnd(),
- nextRoomInfo.GetVerticalStart() + offset2);
+
+ offset1 += 1;
+ offset2 += 1;
+ roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalDoorStart() + offset1, roomInfo.GetVerticalDoorStart());
+ nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalDoorEnd(), nextRoomInfo.GetVerticalDoorStart() + offset2);
cross = new Vector2I(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
+
+ var floorCell = new HashSet();
+
+ //纵轴地板
+ for (var y = cross.Y + 3; y <= roomDoor.OriginPosition.Y; y++)
+ {
+ floorCell.Add(new Vector2I(roomDoor.OriginPosition.X + 1, y));
+ floorCell.Add(new Vector2I(roomDoor.OriginPosition.X + 2, y));
+ }
+ //横轴地板
+ for (var x = nextRoomDoor.OriginPosition.X - 1; x <= cross.X; x++)
+ {
+ floorCell.Add(new Vector2I(x, nextRoomDoor.OriginPosition.Y + 2));
+ }
+ //交叉点地板
+ floorCell.Add(new Vector2I(cross.X + 1, cross.Y + 2));
+ floorCell.Add(new Vector2I(cross.X + 2, cross.Y + 2));
+
+ roomDoor.AisleFloorCell = floorCell;
+ nextRoomDoor.AisleFloorCell = floorCell;
+ roomDoor.AisleFloorRect = Utils.CalcRect(floorCell);
+ nextRoomDoor.AisleFloorRect = roomDoor.AisleFloorRect;
return true;
}
private bool TryConnect_WS_Door(RoomInfo roomInfo, RoomInfo nextRoomInfo, RoomDoorInfo roomDoor, RoomDoorInfo nextRoomDoor, ref Vector2I cross)
{
- //ok
var offset1 = 0;
var offset2 = 0;
roomDoor.Direction = DoorDirection.W; //←
@@ -966,10 +1046,35 @@
{
return false;
}
-
- roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalStart(), roomInfo.GetVerticalStart() + offset1);
- nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalStart() + offset2, nextRoomInfo.GetVerticalEnd());
+
+ offset1 += 1;
+ offset2 += 1;
+ roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalDoorStart(), roomInfo.GetVerticalDoorStart() + offset1);
+ nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalDoorStart() + offset2, nextRoomInfo.GetVerticalDoorEnd());
cross = new Vector2I(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
+
+ var floorCell = new HashSet();
+
+ //横轴地板
+ for (var x = cross.X + 3; x <= roomDoor.OriginPosition.X; x++)
+ {
+ floorCell.Add(new Vector2I(x, roomDoor.OriginPosition.Y + 2));
+ }
+ //纵轴地板
+ for (var y = nextRoomDoor.OriginPosition.Y - 1; y <= cross.Y + 1; y++)
+ {
+ floorCell.Add(new Vector2I(nextRoomDoor.OriginPosition.X + 1, y));
+ floorCell.Add(new Vector2I(nextRoomDoor.OriginPosition.X + 2, y));
+ }
+
+ //交叉点地板
+ floorCell.Add(new Vector2I(cross.X + 1, cross.Y + 2));
+ floorCell.Add(new Vector2I(cross.X + 2, cross.Y + 2));
+
+ roomDoor.AisleFloorCell = floorCell;
+ nextRoomDoor.AisleFloorCell = floorCell;
+ roomDoor.AisleFloorRect = Utils.CalcRect(floorCell);
+ nextRoomDoor.AisleFloorRect = roomDoor.AisleFloorRect;
return true;
}
@@ -985,10 +1090,35 @@
return false;
}
- roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalStart() + offset1, roomInfo.GetVerticalEnd());
- nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalEnd(),
- nextRoomInfo.GetVerticalStart() + offset2);
+ offset1 += 1;
+ offset2 += 1;
+ roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalDoorStart() + offset1, roomInfo.GetVerticalDoorEnd());
+ nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalDoorEnd(), nextRoomInfo.GetVerticalDoorStart() + offset2);
cross = new Vector2I(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
+
+ var floorCell = new HashSet();
+
+ //纵轴地板
+ for (var y = roomDoor.OriginPosition.Y - 1; y <= cross.Y + 1; y++)
+ {
+ floorCell.Add(new Vector2I(roomDoor.OriginPosition.X + 1, y));
+ floorCell.Add(new Vector2I(roomDoor.OriginPosition.X + 2, y));
+ }
+
+ //横轴地板
+ for (var x = nextRoomDoor.OriginPosition.X - 1; x <= cross.X; x++)
+ {
+ floorCell.Add(new Vector2I(x, nextRoomDoor.OriginPosition.Y + 2));
+ }
+
+ //交叉点地板
+ floorCell.Add(new Vector2I(cross.X + 1, cross.Y + 2));
+ floorCell.Add(new Vector2I(cross.X + 2, cross.Y + 2));
+
+ roomDoor.AisleFloorCell = floorCell;
+ nextRoomDoor.AisleFloorCell = floorCell;
+ roomDoor.AisleFloorRect = Utils.CalcRect(floorCell);
+ nextRoomDoor.AisleFloorRect = roomDoor.AisleFloorRect;
return true;
}
@@ -1004,11 +1134,35 @@
return false;
}
- roomDoor.OriginPosition =
- new Vector2I(roomInfo.GetHorizontalStart(), roomInfo.GetVerticalStart() + offset1); //
- nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalStart() + offset2,
- nextRoomInfo.GetVerticalStart());
+ offset1 += 1;
+ offset2 += 1;
+ roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalDoorStart(), roomInfo.GetVerticalDoorStart() + offset1); //
+ nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalDoorStart() + offset2, nextRoomInfo.GetVerticalDoorStart());
cross = new Vector2I(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
+
+ var floorCell = new HashSet();
+
+ //横轴地板
+ for (var x = cross.X + 3; x <= roomDoor.OriginPosition.X; x++)
+ {
+ floorCell.Add(new Vector2I(x, roomDoor.OriginPosition.Y + 2));
+ }
+
+ //纵轴地板
+ for (var y = cross.Y + 3; y <= nextRoomDoor.OriginPosition.Y; y++)
+ {
+ floorCell.Add(new Vector2I(nextRoomDoor.OriginPosition.X + 1, y));
+ floorCell.Add(new Vector2I(nextRoomDoor.OriginPosition.X + 2, y));
+ }
+
+ //交叉点地板
+ floorCell.Add(new Vector2I(cross.X + 1, cross.Y + 2));
+ floorCell.Add(new Vector2I(cross.X + 2, cross.Y + 2));
+
+ roomDoor.AisleFloorCell = floorCell;
+ nextRoomDoor.AisleFloorCell = floorCell;
+ roomDoor.AisleFloorRect = Utils.CalcRect(floorCell);
+ nextRoomDoor.AisleFloorRect = roomDoor.AisleFloorRect;
return true;
}
@@ -1023,11 +1177,36 @@
{
return false;
}
-
- roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalEnd(), roomInfo.GetVerticalStart() + offset1);
- nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalStart() + offset2,
- nextRoomInfo.GetVerticalEnd());
+
+ offset1 += 1;
+ offset2 += 1;
+ roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalDoorEnd(), roomInfo.GetVerticalDoorStart() + offset1);
+ nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalDoorStart() + offset2, nextRoomInfo.GetVerticalDoorEnd());
cross = new Vector2I(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
+
+ var floorCell = new HashSet();
+
+ //横轴地板
+ for (var x = roomDoor.OriginPosition.X - 1; x <= cross.X; x++)
+ {
+ floorCell.Add(new Vector2I(x, roomDoor.OriginPosition.Y + 2));
+ }
+
+ //纵轴地板
+ for (var y = nextRoomDoor.OriginPosition.Y - 1; y <= cross.Y + 1; y++)
+ {
+ floorCell.Add(new Vector2I(nextRoomDoor.OriginPosition.X + 1, y));
+ floorCell.Add(new Vector2I(nextRoomDoor.OriginPosition.X + 2, y));
+ }
+
+ //交叉点地板
+ floorCell.Add(new Vector2I(cross.X + 1, cross.Y + 2));
+ floorCell.Add(new Vector2I(cross.X + 2, cross.Y + 2));
+
+ roomDoor.AisleFloorCell = floorCell;
+ nextRoomDoor.AisleFloorCell = floorCell;
+ roomDoor.AisleFloorRect = Utils.CalcRect(floorCell);
+ nextRoomDoor.AisleFloorRect = roomDoor.AisleFloorRect;
return true;
}
@@ -1042,11 +1221,36 @@
{
return false;
}
-
- roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalStart() + offset1, roomInfo.GetVerticalStart());
- nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalStart(),
- nextRoomInfo.GetVerticalStart() + offset2);
+
+ offset1 += 1;
+ offset2 += 1;
+ roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalDoorStart() + offset1, roomInfo.GetVerticalDoorStart());
+ nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalDoorStart(), nextRoomInfo.GetVerticalDoorStart() + offset2);
cross = new Vector2I(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
+
+ var floorCell = new HashSet();
+
+ //纵轴地板
+ for (var y = cross.Y + 3; y <= roomDoor.OriginPosition.Y; y++)
+ {
+ floorCell.Add(new Vector2I(roomDoor.OriginPosition.X + 1, y));
+ floorCell.Add(new Vector2I(roomDoor.OriginPosition.X + 2, y));
+ }
+
+ //横轴地板
+ for (var x = cross.X + 3; x <= nextRoomDoor.OriginPosition.X; x++)
+ {
+ floorCell.Add(new Vector2I(x, nextRoomDoor.OriginPosition.Y + 2));
+ }
+
+ //交叉点地板
+ floorCell.Add(new Vector2I(cross.X + 1, cross.Y + 2));
+ floorCell.Add(new Vector2I(cross.X + 2, cross.Y + 2));
+
+ roomDoor.AisleFloorCell = floorCell;
+ nextRoomDoor.AisleFloorCell = floorCell;
+ roomDoor.AisleFloorRect = Utils.CalcRect(floorCell);
+ nextRoomDoor.AisleFloorRect = roomDoor.AisleFloorRect;
return true;
}
@@ -1061,11 +1265,36 @@
{
return false;
}
-
- roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalEnd(),
- roomInfo.GetVerticalStart() + offset1);
- nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalStart() + offset2, nextRoomInfo.GetVerticalStart());
+
+ offset1 += 1;
+ offset2 += 2;
+ roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalDoorEnd(), roomInfo.GetVerticalDoorStart() + offset1);
+ nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalStart() + offset2, nextRoomInfo.GetVerticalDoorStart());
cross = new Vector2I(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
+
+ var floorCell = new HashSet();
+
+ //横轴地板
+ for (var x = roomDoor.OriginPosition.X - 1; x <= cross.X; x++)
+ {
+ floorCell.Add(new Vector2I(x, roomDoor.OriginPosition.Y + 2));
+ }
+
+ //纵轴地板
+ for (var y = cross.Y + 3; y <= nextRoomDoor.OriginPosition.Y; y++)
+ {
+ floorCell.Add(new Vector2I(nextRoomDoor.OriginPosition.X + 1, y));
+ floorCell.Add(new Vector2I(nextRoomDoor.OriginPosition.X + 2, y));
+ }
+
+ //交叉点地板
+ floorCell.Add(new Vector2I(cross.X + 1, cross.Y + 2));
+ floorCell.Add(new Vector2I(cross.X + 2, cross.Y + 2));
+
+ roomDoor.AisleFloorCell = floorCell;
+ nextRoomDoor.AisleFloorCell = floorCell;
+ roomDoor.AisleFloorRect = Utils.CalcRect(floorCell);
+ nextRoomDoor.AisleFloorRect = roomDoor.AisleFloorRect;
return true;
}
@@ -1080,11 +1309,36 @@
{
return false;
}
-
- roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalStart() + offset1,
- roomInfo.GetVerticalEnd());
- nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalStart(), nextRoomInfo.GetVerticalStart() + offset2);
+
+ offset1 += 1;
+ offset2 += 1;
+ roomDoor.OriginPosition = new Vector2I(roomInfo.GetHorizontalDoorStart() + offset1, roomInfo.GetVerticalDoorEnd());
+ nextRoomDoor.OriginPosition = new Vector2I(nextRoomInfo.GetHorizontalDoorStart(), nextRoomInfo.GetVerticalDoorStart() + offset2);
cross = new Vector2I(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
+
+ var floorCell = new HashSet();
+
+ //纵轴地板
+ for (var y = roomDoor.OriginPosition.Y - 1; y <= cross.Y + 1; y++)
+ {
+ floorCell.Add(new Vector2I(roomDoor.OriginPosition.X + 1, y));
+ floorCell.Add(new Vector2I(roomDoor.OriginPosition.X + 2, y));
+ }
+
+ //横轴地板
+ for (var x = cross.X + 3; x <= nextRoomDoor.OriginPosition.X; x++)
+ {
+ floorCell.Add(new Vector2I(x, nextRoomDoor.OriginPosition.Y + 2));
+ }
+
+ //交叉点地板
+ floorCell.Add(new Vector2I(cross.X + 1, cross.Y + 2));
+ floorCell.Add(new Vector2I(cross.X + 2, cross.Y + 2));
+
+ roomDoor.AisleFloorCell = floorCell;
+ nextRoomDoor.AisleFloorCell = floorCell;
+ roomDoor.AisleFloorRect = Utils.CalcRect(floorCell);
+ nextRoomDoor.AisleFloorRect = roomDoor.AisleFloorRect;
return true;
}
@@ -1117,15 +1371,15 @@
if (direction == DoorDirection.E || direction == DoorDirection.W) //第二个门向← 或者 第二个门向→
{
range = CalcOverlapRange(
- roomInfo.GetVerticalStart() * GameConfig.TileCellSize + doorAreaInfo1.Start, roomInfo.GetVerticalStart() * GameConfig.TileCellSize + doorAreaInfo1.End,
- nextRoomInfo.GetVerticalStart() * GameConfig.TileCellSize + doorAreaInfo2.Start, nextRoomInfo.GetVerticalStart() * GameConfig.TileCellSize + doorAreaInfo2.End
+ roomInfo.GetVerticalStart() * GameConfig.TileCellSize + GetDoorAreaInfoStart(doorAreaInfo1), roomInfo.GetVerticalStart() * GameConfig.TileCellSize + GetDoorAreaInfoEnd(doorAreaInfo1),
+ nextRoomInfo.GetVerticalStart() * GameConfig.TileCellSize + GetDoorAreaInfoStart(doorAreaInfo2), nextRoomInfo.GetVerticalStart() * GameConfig.TileCellSize + GetDoorAreaInfoEnd(doorAreaInfo2)
);
}
else //第二个门向↑ 或者 第二个门向↓
{
range = CalcOverlapRange(
- roomInfo.GetHorizontalStart() * GameConfig.TileCellSize + doorAreaInfo1.Start, roomInfo.GetHorizontalStart() * GameConfig.TileCellSize + doorAreaInfo1.End,
- nextRoomInfo.GetHorizontalStart() * GameConfig.TileCellSize + doorAreaInfo2.Start, nextRoomInfo.GetHorizontalStart() * GameConfig.TileCellSize + doorAreaInfo2.End
+ roomInfo.GetHorizontalStart() * GameConfig.TileCellSize + GetDoorAreaInfoStart(doorAreaInfo1), roomInfo.GetHorizontalStart() * GameConfig.TileCellSize + GetDoorAreaInfoEnd(doorAreaInfo1),
+ nextRoomInfo.GetHorizontalStart() * GameConfig.TileCellSize + GetDoorAreaInfoStart(doorAreaInfo2), nextRoomInfo.GetHorizontalStart() * GameConfig.TileCellSize + GetDoorAreaInfoEnd(doorAreaInfo2)
);
}
//交集范围够生成门
@@ -1205,11 +1459,15 @@
Vector2I collSize;
if (point1.X == point2.X) //纵向加宽, 防止贴到其它墙
{
+ pos.Y += 1;
+ size.Y -= 3;
collPos = new Vector2I(pos.X - GameConfig.RoomSpace, pos.Y);
collSize = new Vector2I(size.X + GameConfig.RoomSpace * 2, size.Y);
}
else //横向加宽, 防止贴到其它墙
{
+ pos.X += 1;
+ size.X -= 2;
collPos = new Vector2I(pos.X, pos.Y - GameConfig.RoomSpace);
collSize = new Vector2I(size.X, size.Y + GameConfig.RoomSpace * 2);
}
@@ -1227,6 +1485,11 @@
//将两个门间的过道占用数据存入RoomGrid, 该重载加入拐角点
private bool AddCorridorToGridRange(RoomDoorInfo door1, RoomDoorInfo door2, Vector2I cross)
{
+ if (_roomGrid.RectCollision(cross - new Vector2I(1, 2), new Vector2I(GameConfig.CorridorWidth + 2, GameConfig.CorridorWidth + 3)))
+ {
+ return false;
+ }
+
var point1 = door1.OriginPosition;
var point2 = door2.OriginPosition;
var pos1 = new Vector2I(Mathf.Min(point1.X, cross.X), Mathf.Min(point1.Y, cross.Y));
@@ -1244,11 +1507,29 @@
Vector2I collSize1;
if (point1.X == cross.X) //纵向加宽, 防止贴到其它墙
{
+ if (door1.Direction == DoorDirection.N)
+ {
+ size1.Y -= 2;
+ }
+ else
+ {
+ pos1.Y += 1;
+ size1.Y -= 1;
+ }
collPos1 = new Vector2I(pos1.X - GameConfig.RoomSpace, pos1.Y);
collSize1 = new Vector2I(size1.X + GameConfig.RoomSpace * 2, size1.Y);
}
else //横向加宽, 防止贴到其它墙
{
+ if (door1.Direction == DoorDirection.E)
+ {
+ pos1.X += 1;
+ size1.X -= 1;
+ }
+ else
+ {
+ size1.X -= 1;
+ }
collPos1 = new Vector2I(pos1.X, pos1.Y - GameConfig.RoomSpace);
collSize1 = new Vector2I(size1.X, size1.Y + GameConfig.RoomSpace * 2);
}
@@ -1262,11 +1543,29 @@
Vector2I collSize2;
if (point2.X == cross.X) //纵向加宽, 防止贴到其它墙
{
+ if (door2.Direction == DoorDirection.N)
+ {
+ size2.Y -= 2;
+ }
+ else
+ {
+ pos2.Y += 1;
+ size2.Y -= 1;
+ }
collPos2 = new Vector2I(pos2.X - GameConfig.RoomSpace, pos2.Y);
collSize2 = new Vector2I(size2.X + GameConfig.RoomSpace * 2, size2.Y);
}
else //横向加宽, 防止贴到其它墙
{
+ if (door2.Direction == DoorDirection.E)
+ {
+ pos2.X += 1;
+ size2.X -= 1;
+ }
+ else
+ {
+ size2.X -= 1;
+ }
collPos2 = new Vector2I(pos2.X, pos2.Y - GameConfig.RoomSpace);
collSize2 = new Vector2I(size2.X, size2.Y + GameConfig.RoomSpace * 2);
}
@@ -1282,4 +1581,14 @@
_roomGrid.SetRect(pos2, size2, true);
return true;
}
+
+ private int GetDoorAreaInfoStart(DoorAreaInfo areaInfo)
+ {
+ return areaInfo.Start;
+ }
+
+ private int GetDoorAreaInfoEnd(DoorAreaInfo areaInfo)
+ {
+ return areaInfo.End;
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonRoomType.cs b/DungeonShooting_Godot/src/framework/map/DungeonRoomType.cs
index b08eec4..64bf354 100644
--- a/DungeonShooting_Godot/src/framework/map/DungeonRoomType.cs
+++ b/DungeonShooting_Godot/src/framework/map/DungeonRoomType.cs
@@ -1,35 +1,42 @@
+using System;
+
///
/// 模板房间类型
///
+[Flags]
public enum DungeonRoomType
{
///
+ /// 无
+ ///
+ None = 0,
+ ///
/// 普通战斗房间, 进入该房间时会关上门, 并刷出若干波敌人, 消灭所有敌人后开门
///
- Battle,
+ Battle = 0b1,
///
/// 起始房间, 由上一层地牢的结束房间进入该房间, 每层包含一个起始房间
///
- Inlet,
+ Inlet = 0b10,
///
/// 结束房间, 进入另一层地牢, 每层只是包含一个结束房间
///
- Outlet,
+ Outlet = 0b100,
///
/// boss战房间, 进入房间时会关上没, 刷出boss, 消灭boss后开门
///
- Boss,
+ Boss = 0b1000,
///
/// 奖励房间, 给予玩家武器或者道具奖励的房间
///
- Reward,
+ Reward = 0b10000,
///
/// 商店, 玩家买卖道具装备的房间
///
- Shop,
+ Shop = 0b100000,
///
/// 事件房间, 触发剧情或者解锁NPC的房间
///
- Event,
+ Event = 0b1000000,
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonRule.cs b/DungeonShooting_Godot/src/framework/map/DungeonRule.cs
new file mode 100644
index 0000000..91cb309
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/DungeonRule.cs
@@ -0,0 +1,64 @@
+
+///
+/// 用于自定义地牢房间生成规则
+///
+public abstract class DungeonRule
+{
+ public DungeonGenerator Generator { get; }
+
+ public DungeonConfig Config { get; }
+
+ public SeedRandom Random { get; }
+
+ public DungeonRoomGroup RoomGroup { get; }
+
+ public DungeonRule(DungeonGenerator generator)
+ {
+ Generator = generator;
+ Config = generator.Config;
+ Random = generator.Random;
+ RoomGroup = generator.RoomGroup;
+ }
+
+ ///
+ /// 是否可以结束生成了
+ ///
+ public abstract bool CanOverGenerator();
+
+ ///
+ /// 获取指定房间类型与之相连的上一个房间对象, prevRoom 可能为 null
+ ///
+ public abstract RoomInfo GetConnectPrevRoom(RoomInfo prevRoom, DungeonRoomType nextRoomType);
+
+ ///
+ /// 计算下一个房间类型, prevRoom 可能为 null
+ ///
+ public abstract DungeonRoomType GetNextRoomType(RoomInfo prevRoom);
+
+ ///
+ /// 执行生成指定房间成功, prevRoom 可能为 null
+ ///
+ public abstract void GenerateRoomSuccess(RoomInfo prevRoom, RoomInfo roomInfo);
+
+ ///
+ /// 执行生成指定类型房间失败, prevRoom 可能为 null
+ ///
+ public abstract void GenerateRoomFail(RoomInfo prevRoom, DungeonRoomType roomType);
+
+ //-------------------------- 下面的函数 prevRoom 一定不会为 null --------------------------
+
+ ///
+ /// 获取下一个房间的方向, prevRoom 一定不为 null
+ ///
+ public abstract RoomDirection GetNextRoomDoorDirection(RoomInfo prevRoom, DungeonRoomType roomType);
+
+ ///
+ /// 获取下一个房间的间隔距离, prevRoom 一定不为 null
+ ///
+ public abstract int GetNextRoomInterval(RoomInfo prevRoom, DungeonRoomType roomType, RoomDirection direction);
+
+ ///
+ /// 获取下一个房间相对于当前房间的原点偏移 (单位: 格), prevRoom 一定不为 null
+ ///
+ public abstract int GetNextRoomOffset(RoomInfo prevRoom, DungeonRoomType roomType, RoomDirection direction);
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonTileMap.cs b/DungeonShooting_Godot/src/framework/map/DungeonTileMap.cs
index 643a556..1b59921 100644
--- a/DungeonShooting_Godot/src/framework/map/DungeonTileMap.cs
+++ b/DungeonShooting_Godot/src/framework/map/DungeonTileMap.cs
@@ -9,26 +9,10 @@
///
public class DungeonTileMap
{
- //--------------------- 导航 -------------------------
-
- //已经标记过的点
- private readonly HashSet _usePoints = new HashSet();
-
- //导航区域数据
- private readonly List _polygonDataList = new List();
-
- //连接门的导航区域
- private readonly List _connectNavigationItemList = new List();
//----------------------------------------------------
private TileMap _tileRoot;
- //地面地砖在 Atlas 的位置
- private List _floorAtlasCoords;
- //生成导航的结果
- private GenerateNavigationResult _generateNavigationResult;
-
- private InfiniteGrid _tempAisleFloorGrid = new InfiniteGrid();
public DungeonTileMap(TileMap tileRoot)
{
@@ -36,152 +20,120 @@
}
///
- /// 根据 startRoom 和 config 数据自动填充 tileMap 参数中的地图数据, 该函数为协程函数
+ /// 根据 startRoom 和 config 数据自动填充 tileMap 参数中的房间数据, 该函数为协程函数
///
- public IEnumerator AutoFillRoomTile(AutoTileConfig config, RoomInfo startRoomInfo, SeedRandom random)
+ public IEnumerator AutoFillRoomTile(AutoTileConfig config, RoomInfo startRoomInfo, World world)
{
- _connectNavigationItemList.Clear();
- yield return _AutoFillRoomTile(config, startRoomInfo, random);
+ yield return _AutoFillRoomTile(config, startRoomInfo, world);
}
- private IEnumerator _AutoFillRoomTile(AutoTileConfig config, RoomInfo roomInfo, SeedRandom random)
+ ///
+ /// 根据 startRoom 和 config 数据自动填充 tileMap 参数中的过道数据, 该函数为协程函数
+ ///
+ public IEnumerator AutoFillAisleTile(AutoTileConfig config, RoomInfo roomInfo, World world)
+ {
+ yield return _AutoFillAisleTile(config, roomInfo, world);
+ }
+
+ private IEnumerator _AutoFillRoomTile(AutoTileConfig config, RoomInfo roomInfo, World world)
{
foreach (var info in roomInfo.Next)
{
- yield return _AutoFillRoomTile(config, info, random);
+ yield return _AutoFillRoomTile(config, info, world);
}
//铺房间
- if (roomInfo.RoomSplit == null) //自动填充的矩形房间, 现已经弃用
+ var rectPos = roomInfo.RoomSplit.RoomInfo.Position.AsVector2I();
+ var tileInfo = roomInfo.RoomSplit.TileInfo;
+
+ //---------------------- 生成房间小地图预览 ----------------------
+ //先计算范围
+ var x = int.MaxValue;
+ var y = int.MaxValue;
+ var x2 = int.MinValue;
+ var y2 = int.MinValue;
+ for (var i = 0; i < tileInfo.Floor.Count; i += 4)
{
- FillRect(GameConfig.FloorMapLayer, config.Floor, roomInfo.Position + Vector2.One,
- roomInfo.Size - new Vector2(2, 2));
-
- FillRect(GameConfig.TopMapLayer, config.IN_LT, roomInfo.Position, Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.L, roomInfo.Position + new Vector2(0, 1),
- new Vector2(1, roomInfo.Size.Y - 2));
- FillRect(GameConfig.TopMapLayer, config.IN_LB, roomInfo.Position + new Vector2(0, roomInfo.Size.Y - 1),
- new Vector2(1, 1));
- FillRect(GameConfig.TopMapLayer, config.B, roomInfo.Position + new Vector2(1, roomInfo.Size.Y - 1),
- new Vector2(roomInfo.Size.X - 2, 1));
- FillRect(GameConfig.TopMapLayer, config.IN_RB,
- roomInfo.Position + new Vector2(roomInfo.Size.X - 1, roomInfo.Size.Y - 1),
- Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.R, roomInfo.Position + new Vector2(roomInfo.Size.X - 1, 1),
- new Vector2(1, roomInfo.Size.Y - 2));
- FillRect(GameConfig.TopMapLayer, config.IN_RT, roomInfo.Position + new Vector2(roomInfo.Size.X - 1, 0),
- Vector2.One);
- FillRect(GameConfig.MiddleMapLayer, config.T, roomInfo.Position + Vector2.Right,
- new Vector2(roomInfo.Size.X - 2, 1));
+ var posX = tileInfo.Floor[i];
+ var posY = tileInfo.Floor[i + 1];
+ x = Mathf.Min(x, posX);
+ x2 = Mathf.Max(x2, posX);
+ y = Mathf.Min(y, posY);
+ y2 = Mathf.Max(y2, posY);
}
- else
+ //创建image, 这里留两个像素宽高用于描边
+ var image = Image.Create(x2 - x + 3, y2 - y + 3, false, Image.Format.Rgba8);
+ //image.Fill(Colors.Green);
+ //填充像素点
+ for (var i = 0; i < tileInfo.Floor.Count; i += 4)
{
- var rectPos = roomInfo.RoomSplit.RoomInfo.Position.AsVector2I();
- var tileInfo = roomInfo.RoomSplit.TileInfo;
-
- //---------------------- 生成房间小地图预览 ----------------------
- //先计算范围
- var x = int.MaxValue;
- var y = int.MaxValue;
- var x2 = int.MinValue;
- var y2 = int.MinValue;
- for (var i = 0; i < tileInfo.Floor.Count; i += 5)
- {
- var posX = tileInfo.Floor[i];
- var posY = tileInfo.Floor[i + 1];
- x = Mathf.Min(x, posX);
- x2 = Mathf.Max(x2, posX);
- y = Mathf.Min(y, posY);
- y2 = Mathf.Max(y2, posY);
- }
- //创建image, 这里留两个像素宽高用于描边
- var image = Image.Create(x2 - x + 3, y2 - y + 3, false, Image.Format.Rgba8);
- //image.Fill(Colors.Green);
- //填充像素点
- for (var i = 0; i < tileInfo.Floor.Count; i += 5)
- {
- var posX = tileInfo.Floor[i] - x + 1;
- var posY = tileInfo.Floor[i + 1] - y + 1;
- image.SetPixel(posX, posY, new Color(0, 0, 0, 0.5882353F));
- }
- //创建texture
- var imageTexture = ImageTexture.CreateFromImage(image);
- roomInfo.PreviewTexture = imageTexture;
-
- //---------------------- 填充tile操作 ----------------------
- //底层
- for (var i = 0; i < tileInfo.Floor.Count; i += 5)
- {
- var posX = tileInfo.Floor[i];
- var posY = tileInfo.Floor[i + 1];
- var sourceId = tileInfo.Floor[i + 2];
- var atlasCoordsX = tileInfo.Floor[i + 3];
- var atlasCoordsY = tileInfo.Floor[i + 4];
- var pos = new Vector2I(roomInfo.Position.X + posX - rectPos.X, roomInfo.Position.Y + posY - rectPos.Y);
- _tileRoot.SetCell(GameConfig.FloorMapLayer, pos, sourceId, new Vector2I(atlasCoordsX, atlasCoordsY));
- }
- //中层
- for (var i = 0; i < tileInfo.Middle.Count; i += 5)
- {
- var posX = tileInfo.Middle[i];
- var posY = tileInfo.Middle[i + 1];
- var sourceId = tileInfo.Middle[i + 2];
- var atlasCoordsX = tileInfo.Middle[i + 3];
- var atlasCoordsY = tileInfo.Middle[i + 4];
- var pos = new Vector2I(roomInfo.Position.X + posX - rectPos.X, roomInfo.Position.Y + posY - rectPos.Y);
- _tileRoot.SetCell(GameConfig.MiddleMapLayer, pos, sourceId, new Vector2I(atlasCoordsX, atlasCoordsY));
- }
- //顶层
- for (var i = 0; i < tileInfo.Top.Count; i += 5)
- {
- var posX = tileInfo.Top[i];
- var posY = tileInfo.Top[i + 1];
- var sourceId = tileInfo.Top[i + 2];
- var atlasCoordsX = tileInfo.Top[i + 3];
- var atlasCoordsY = tileInfo.Top[i + 4];
- var pos = new Vector2I(roomInfo.Position.X + posX - rectPos.X, roomInfo.Position.Y + posY - rectPos.Y);
- _tileRoot.SetCell(GameConfig.TopMapLayer, pos, sourceId, new Vector2I(atlasCoordsX, atlasCoordsY));
- }
-
- //寻找可用传送点
- var maxCount = (roomInfo.Size.X - 2) * (roomInfo.Size.Y - 2);
- var startPosition = roomInfo.Position + roomInfo.Size / 2;
- for (int i = 0; i < maxCount; i++)
- {
- var pos = SpiralUtil.Screw(i) + startPosition;
- if (IsWayTile(GameConfig.FloorMapLayer, pos.X, pos.Y))
- {
- roomInfo.Waypoints = pos;
- break;
- }
- }
-
- //---------------------- 随机选择预设 ----------------------
- RoomPreinstallInfo preinstallInfo;
- if (EditorPlayManager.IsPlay && roomInfo.RoomType == GameApplication.Instance.DungeonManager.CurrConfig.DesignatedType) //编辑器模式, 指定预设
- {
- preinstallInfo = EditorManager.SelectPreinstall;
- }
- else //普通模式
- {
- if (roomInfo.RoomSplit.Preinstall.Count == 1)
- {
- preinstallInfo = roomInfo.RoomSplit.Preinstall[0];
- }
- else
- {
- var weights = roomInfo.RoomSplit.Preinstall.Select(info => info.Weight).ToArray();
- var index = random.RandomWeight(weights);
- preinstallInfo = roomInfo.RoomSplit.Preinstall[index];
- }
- }
-
- var roomPreinstall = new RoomPreinstall(roomInfo, preinstallInfo);
- roomInfo.RoomPreinstall = roomPreinstall;
- //执行预处理操作
- roomPreinstall.Pretreatment(random);
+ var posX = tileInfo.Floor[i] - x + 1;
+ var posY = tileInfo.Floor[i + 1] - y + 1;
+ image.SetPixel(posX, posY, new Color(0, 0, 0, 0.5882353F));
}
+ //创建texture
+ var imageTexture = ImageTexture.CreateFromImage(image);
+ roomInfo.PreviewTexture = imageTexture;
+ //---------------------- 填充tile操作 ----------------------
+ var terrainInfo = config.TerrainInfo;
+
+ SetAutoLayerDataFromList(MapLayer.AutoFloorLayer, config.SourceId, roomInfo, tileInfo.Floor, rectPos, terrainInfo);
+ SetCustomLayerDataFromList(MapLayer.CustomFloorLayer1, roomInfo, tileInfo.CustomFloor1, rectPos);
+ SetCustomLayerDataFromList(MapLayer.CustomFloorLayer2, roomInfo, tileInfo.CustomFloor2, rectPos);
+ SetCustomLayerDataFromList(MapLayer.CustomFloorLayer3, roomInfo, tileInfo.CustomFloor3, rectPos);
+ SetCustomLayerDataFromList(MapLayer.CustomMiddleLayer1, roomInfo, tileInfo.CustomMiddle1, rectPos);
+ SetCustomLayerDataFromList(MapLayer.CustomMiddleLayer2, roomInfo, tileInfo.CustomMiddle2, rectPos);
+ SetCustomLayerDataFromList(MapLayer.CustomTopLayer, roomInfo, tileInfo.CustomTop, rectPos);
+
+ //寻找可用传送点
+ var maxCount = (roomInfo.Size.X - 2) * (roomInfo.Size.Y - 2);
+ var startPosition = roomInfo.Position + roomInfo.Size / 2;
+ for (int i = 0; i < maxCount; i++)
+ {
+ var pos = SpiralUtil.Screw(i) + startPosition;
+ if (IsWayTile(MapLayer.AutoFloorLayer, pos.X, pos.Y))
+ {
+ roomInfo.Waypoints = pos;
+ break;
+ }
+ }
+
+ //---------------------- 随机选择预设 ----------------------
+ RoomPreinstallInfo preinstallInfo;
+ if (EditorPlayManager.IsPlay && roomInfo.RoomType == GameApplication.Instance.DungeonManager.CurrConfig.DesignatedType) //编辑器模式, 指定预设
+ {
+ preinstallInfo = EditorTileMapManager.SelectPreinstall;
+ }
+ else //普通模式
+ {
+ if (roomInfo.RoomSplit.Preinstall.Count == 1)
+ {
+ preinstallInfo = roomInfo.RoomSplit.Preinstall[0];
+ }
+ else
+ {
+ var weights = roomInfo.RoomSplit.Preinstall.Select(info => info.Weight).ToArray();
+ var index = world.Random.RandomWeight(weights);
+ preinstallInfo = roomInfo.RoomSplit.Preinstall[index];
+ }
+ }
+
+ var roomPreinstall = new RoomPreinstall(roomInfo, preinstallInfo);
+ roomInfo.RoomPreinstall = roomPreinstall;
+ //执行预处理操作
+ roomPreinstall.Pretreatment(world);
+ }
+
+
+ private IEnumerator _AutoFillAisleTile(AutoTileConfig config, RoomInfo roomInfo, World world)
+ {
+ foreach (var info in roomInfo.Next)
+ {
+ yield return _AutoFillAisleTile(config, info, world);
+ }
+
+ // yield break;
//铺过道
foreach (var doorInfo in roomInfo.Doors)
{
@@ -190,319 +142,80 @@
{
continue;
}
-
- //普通的直线连接
- var doorDir1 = doorInfo.Direction;
- var doorDir2 = doorInfo.ConnectDoor.Direction;
- if (!doorInfo.HasCross)
- {
- var rect = doorInfo.GetAisleRect();
- switch (doorDir1)
- {
- case DoorDirection.E:
- FullHorizontalAisle(config, rect);
- FullHorizontalAisleLeft(config, rect, doorInfo);
- FullHorizontalAisleRight(config, rect, doorInfo.ConnectDoor);
- break;
- case DoorDirection.W:
- FullHorizontalAisle(config, rect);
- FullHorizontalAisleLeft(config, rect, doorInfo.ConnectDoor);
- FullHorizontalAisleRight(config, rect, doorInfo);
- break;
-
- case DoorDirection.S:
- FullVerticalAisle(config, rect);
- FullVerticalAisleUp(config, rect, doorInfo);
- FullVerticalAisleDown(config, rect, doorInfo.ConnectDoor);
- break;
- case DoorDirection.N:
- FullVerticalAisle(config, rect);
- FullVerticalAisleUp(config, rect, doorInfo.ConnectDoor);
- FullVerticalAisleDown(config, rect, doorInfo);
- break;
- }
- }
- else //带交叉点
- {
- //方向, 0横向, 1纵向
- var dir1 = 0;
- var dir2 = 0;
- var aisleRect = doorInfo.GetCrossAisleRect();
- var rect = aisleRect.Rect1;
- var rect2 = aisleRect.Rect2;
-
- //计算范围
- switch (doorDir1)
- {
- case DoorDirection.E: //→
- break;
- case DoorDirection.W: //←
- break;
- case DoorDirection.S: //↓
- dir1 = 1;
- break;
- case DoorDirection.N: //↑
- dir1 = 1;
- break;
- }
-
- switch (doorDir2)
- {
- case DoorDirection.E: //→
- break;
- case DoorDirection.W: //←
- break;
- case DoorDirection.S: //↓
- dir2 = 1;
- break;
- case DoorDirection.N: //↑
- dir2 = 1;
- break;
- }
-
- //填充交叉点
- FillRect(GameConfig.AisleFloorMapLayer, config.Floor, aisleRect.Cross.Position, aisleRect.Cross.Size);
+ //铺过道
+ if (doorInfo.AisleFloorCell != null)
+ {
+ yield return 0;
- //墙壁, 0横向, 1纵向
- if (dir1 == 0)
+ //创建image, 这里留两个像素宽高用于描边
+ var aisleImage = Image.Create(doorInfo.AisleFloorRect.Size.X, doorInfo.AisleFloorRect.Size.Y, false, Image.Format.Rgba8);
+ //image.Fill(new Color(0, 1, 0, 0.2f));
+ //填充像素点
+ foreach (var p in doorInfo.AisleFloorCell)
{
- FullHorizontalAisle(config, rect);
- FullHorizontalAisleLeft(config, rect, doorDir1 == DoorDirection.E ? doorInfo : null);
- FullHorizontalAisleRight(config, rect, doorDir1 == DoorDirection.W ? doorInfo : null);
+ _tileRoot.SetCell(MapLayer.AutoFloorLayer, p, config.Floor.SourceId, config.Floor.AutoTileCoords);
+ //_tileRoot.SetCell(MapLayer.CustomTopLayer, p, config.Auto_000_010_000.SourceId, config.Auto_000_010_000.AutoTileCoords);
+ aisleImage.SetPixel(p.X - doorInfo.AisleFloorRect.Position.X, p.Y - doorInfo.AisleFloorRect.Position.Y, new Color(1, 1, 1, 0.5882353F));
}
- else
- {
- FullVerticalAisle(config, rect);
- FullVerticalAisleUp(config, rect, doorDir1 == DoorDirection.S ? doorInfo : null);
- FullVerticalAisleDown(config, rect, doorDir1 == DoorDirection.N ? doorInfo : null);
- }
-
- if (dir2 == 0)
- {
- FullHorizontalAisle(config, rect2);
- FullHorizontalAisleLeft(config, rect2, doorDir2 == DoorDirection.E ? doorInfo.ConnectDoor : null);
- FullHorizontalAisleRight(config, rect2, doorDir2 == DoorDirection.W ? doorInfo.ConnectDoor : null);
- }
- else
- {
- FullVerticalAisle(config, rect2);
- FullVerticalAisleUp(config, rect2, doorDir2 == DoorDirection.S ? doorInfo.ConnectDoor : null);
- FullVerticalAisleDown(config, rect2, doorDir2 == DoorDirection.N ? doorInfo.ConnectDoor : null);
- }
-
- if ((doorDir1 == DoorDirection.N && doorDir2 == DoorDirection.E) || //↑→
- (doorDir2 == DoorDirection.N && doorDir1 == DoorDirection.E))
- {
- FillRect(GameConfig.TopMapLayer, config.OUT_RT,
- doorInfo.Cross + new Vector2(0, GameConfig.CorridorWidth - 1),
- Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.IN_RT, doorInfo.Cross + new Vector2(GameConfig.CorridorWidth - 1, 0),
- Vector2.One);
- FillRect(GameConfig.MiddleMapLayer, config.T, doorInfo.Cross, new Vector2(GameConfig.CorridorWidth - 1, 1));
- FillRect(GameConfig.TopMapLayer, config.R, doorInfo.Cross + new Vector2(GameConfig.CorridorWidth - 1, 1),
- new Vector2(1, GameConfig.CorridorWidth - 1));
- }
- else if ((doorDir1 == DoorDirection.E && doorDir2 == DoorDirection.S) || //→↓
- (doorDir2 == DoorDirection.E && doorDir1 == DoorDirection.S))
- {
- FillRect(GameConfig.MiddleMapLayer, config.OUT_RB, doorInfo.Cross, Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.IN_RB,
- doorInfo.Cross + new Vector2(GameConfig.CorridorWidth - 1,
- GameConfig.CorridorWidth - 1),
- Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.R, doorInfo.Cross + new Vector2(GameConfig.CorridorWidth - 1, 0),
- new Vector2(1, GameConfig.CorridorWidth - 1));
- FillRect(GameConfig.TopMapLayer, config.B, doorInfo.Cross + new Vector2(0, GameConfig.CorridorWidth - 1),
- new Vector2(GameConfig.CorridorWidth - 1, 1));
- }
- else if ((doorDir1 == DoorDirection.S && doorDir2 == DoorDirection.W) || //↓←
- (doorDir2 == DoorDirection.S && doorDir1 == DoorDirection.W))
- {
- FillRect(GameConfig.MiddleMapLayer, config.OUT_LB,
- doorInfo.Cross + new Vector2(GameConfig.CorridorWidth - 1, 0), Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.IN_LB, doorInfo.Cross + new Vector2(0, GameConfig.CorridorWidth - 1),
- Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.L, doorInfo.Cross, new Vector2(1, GameConfig.CorridorWidth - 1));
- FillRect(GameConfig.TopMapLayer, config.B, doorInfo.Cross + new Vector2(1, GameConfig.CorridorWidth - 1),
- new Vector2(GameConfig.CorridorWidth - 1, 1));
- }
- else if ((doorDir1 == DoorDirection.W && doorDir2 == DoorDirection.N) || //←↑
- (doorDir2 == DoorDirection.W && doorDir1 == DoorDirection.N))
- {
- FillRect(GameConfig.TopMapLayer, config.OUT_LT,
- doorInfo.Cross + new Vector2(GameConfig.CorridorWidth - 1,
- GameConfig.CorridorWidth - 1),
- Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.IN_LT, doorInfo.Cross, Vector2.One);
- FillRect(GameConfig.MiddleMapLayer, config.T, doorInfo.Cross + new Vector2(1, 0),
- new Vector2(GameConfig.CorridorWidth - 1, 1));
- FillRect(GameConfig.TopMapLayer, config.L, doorInfo.Cross + new Vector2(0, 1),
- new Vector2(1, GameConfig.CorridorWidth - 1));
- }
-
- //在房间墙上开洞
- switch (doorDir1)
- {
- case DoorDirection.E: //→
- ClearRect(GameConfig.TopMapLayer, doorInfo.OriginPosition + new Vector2(-1, 1),
- new Vector2(1, rect.Size.Y - 2));
- break;
- case DoorDirection.W: //←
- ClearRect(GameConfig.TopMapLayer, doorInfo.OriginPosition + new Vector2(0, 1),
- new Vector2(1, rect.Size.Y - 2));
- break;
- case DoorDirection.S: //↓
- ClearRect(GameConfig.TopMapLayer, doorInfo.OriginPosition + new Vector2(1, -1),
- new Vector2(rect.Size.X - 2, 1));
- break;
- case DoorDirection.N: //↑
- ClearRect(GameConfig.MiddleMapLayer, doorInfo.OriginPosition + new Vector2(1, 2),
- new Vector2(rect.Size.X - 2, 1));
- break;
- }
-
- switch (doorDir2)
- {
- case DoorDirection.E: //→
- ClearRect(GameConfig.TopMapLayer, doorInfo.ConnectDoor.OriginPosition + new Vector2(-1, 1),
- new Vector2(1, rect2.Size.Y - 2));
- break;
- case DoorDirection.W: //←
- ClearRect(GameConfig.TopMapLayer, doorInfo.ConnectDoor.OriginPosition + new Vector2(0, 1),
- new Vector2(1, rect2.Size.Y - 2));
- break;
- case DoorDirection.S: //↓
- ClearRect(GameConfig.TopMapLayer, doorInfo.ConnectDoor.OriginPosition + new Vector2(1, -1),
- new Vector2(rect2.Size.X - 2, 1));
- break;
- case DoorDirection.N: //↑
- ClearRect(GameConfig.MiddleMapLayer, doorInfo.ConnectDoor.OriginPosition + new Vector2(1, 0),
- new Vector2(rect2.Size.X - 2, 1));
- break;
- }
+ //创建texture
+ var aisleImageTexture = ImageTexture.CreateFromImage(aisleImage);
+ doorInfo.AislePreviewTexture = aisleImageTexture;
+ doorInfo.ConnectDoor.AislePreviewTexture = aisleImageTexture;
}
-
- //先计算范围
- var x = int.MaxValue;
- var y = int.MaxValue;
- var x2 = int.MinValue;
- var y2 = int.MinValue;
- _tempAisleFloorGrid.ForEach((gx, gy, data) =>
- {
- x = Mathf.Min(x, gx);
- x2 = Mathf.Max(x2, gx);
- y = Mathf.Min(y, gy);
- y2 = Mathf.Max(y2, gy);
- });
- //创建image, 这里留两个像素宽高用于描边
- var image = Image.Create(x2 - x + 3, y2 - y + 3, false, Image.Format.Rgba8);
- //填充像素点
- _tempAisleFloorGrid.ForEach((gx, gy, data) =>
- {
- var posX = gx - x + 1;
- var posY = gy - y + 1;
- image.SetPixel(posX, posY, new Color(0, 0, 0, 0.5882353F));
- });
- //创建texture
- var imageTexture = ImageTexture.CreateFromImage(image);
- doorInfo.AislePreviewTexture = imageTexture;
- doorInfo.ConnectDoor.AislePreviewTexture = imageTexture;
-
- _tempAisleFloorGrid.Clear();
}
}
- ///
- /// 给TileMap添加轮廓, 该函数为协程函数
- ///
- /// 描轮廓的Tile
- public IEnumerator AddOutlineTile(TileCellInfo tileCellInfo)
+
+ public void GenerateWallAndNavigation(World world, AutoTileConfig config)
{
- var c = 0;
- var rect = _tileRoot.GetUsedRect();
- var endX = rect.End.X + 1;
- var endY = rect.End.Y + 1;
- for (int x = rect.Position.X - 1; x <= endX; x++)
+ var navigation = new NavigationRegion2D();
+ navigation.Name = "Navigation";
+ world.NavigationRoot.AddChild(navigation);
+ TileMapUtils.GenerateTerrain(_tileRoot, navigation, config);
+ }
+
+ //设置自动地形层的数据
+ private void SetAutoLayerDataFromList(int layer, int sourceId, RoomInfo roomInfo, List data, Vector2I rectPos, TileSetTerrainInfo terrainInfo)
+ {
+ for (var i = 0; i < data.Count; i += 4)
{
- for (int y = rect.Position.Y - 1; y <= endY; y++)
- {
- if (c++ > 1000) //份帧处理, 不要挤在一帧
- {
- c = 0;
- yield return 0;
- }
- var pos = new Vector2I(x, y);
- var flag1 = _tileRoot.GetCellSourceId(GameConfig.FloorMapLayer, pos) != -1 ||
- _tileRoot.GetCellSourceId(GameConfig.MiddleMapLayer, pos) != -1 ||
- _tileRoot.GetCellSourceId(GameConfig.AisleFloorMapLayer, pos) != -1 ||
- (_tileRoot.GetCellSourceId(GameConfig.TopMapLayer, pos) != -1 && _tileRoot.GetCellAtlasCoords(GameConfig.TopMapLayer, pos) != tileCellInfo.AutoTileCoord);
- if (!flag1) //空地
- {
- var posDown = new Vector2I(pos.X, pos.Y + 1);
- var posTop = new Vector2I(pos.X, pos.Y - 1);
- var posLeft = new Vector2I(pos.X - 1, pos.Y);
- var posRight = new Vector2I(pos.X + 1, pos.Y);
-
- var posLD = new Vector2I(pos.X - 1, pos.Y + 1);
- var posLT = new Vector2I(pos.X - 1, pos.Y - 1);
- var posRD = new Vector2I(pos.X + 1, pos.Y + 1);
- var posRT = new Vector2I(pos.X + 1, pos.Y - 1);
-
- var flag2 = _tileRoot.GetCellSourceId(GameConfig.FloorMapLayer, posDown) != -1 ||
- _tileRoot.GetCellSourceId(GameConfig.MiddleMapLayer, posDown) != -1 ||
- (_tileRoot.GetCellSourceId(GameConfig.TopMapLayer, posDown) != -1 && _tileRoot.GetCellAtlasCoords(GameConfig.TopMapLayer, posDown) != tileCellInfo.AutoTileCoord) ||
-
- _tileRoot.GetCellSourceId(GameConfig.FloorMapLayer, posTop) != -1 ||
- _tileRoot.GetCellSourceId(GameConfig.MiddleMapLayer, posTop) != -1 ||
- (_tileRoot.GetCellSourceId(GameConfig.TopMapLayer, posTop) != -1 && _tileRoot.GetCellAtlasCoords(GameConfig.TopMapLayer, posTop) != tileCellInfo.AutoTileCoord) ||
-
- _tileRoot.GetCellSourceId(GameConfig.FloorMapLayer, posLeft) != -1 ||
- _tileRoot.GetCellSourceId(GameConfig.MiddleMapLayer, posLeft) != -1 ||
- (_tileRoot.GetCellSourceId(GameConfig.TopMapLayer, posLeft) != -1 && _tileRoot.GetCellAtlasCoords(GameConfig.TopMapLayer, posLeft) != tileCellInfo.AutoTileCoord) ||
-
- _tileRoot.GetCellSourceId(GameConfig.FloorMapLayer, posRight) != -1 ||
- _tileRoot.GetCellSourceId(GameConfig.MiddleMapLayer, posRight) != -1 ||
- (_tileRoot.GetCellSourceId(GameConfig.TopMapLayer, posRight) != -1 && _tileRoot.GetCellAtlasCoords(GameConfig.TopMapLayer, posRight) != tileCellInfo.AutoTileCoord) ||
- //
- _tileRoot.GetCellSourceId(GameConfig.FloorMapLayer, posLD) != -1 ||
- _tileRoot.GetCellSourceId(GameConfig.MiddleMapLayer, posLD) != -1 ||
- (_tileRoot.GetCellSourceId(GameConfig.TopMapLayer, posLD) != -1 && _tileRoot.GetCellAtlasCoords(GameConfig.TopMapLayer, posLD) != tileCellInfo.AutoTileCoord) ||
-
- _tileRoot.GetCellSourceId(GameConfig.FloorMapLayer, posLT) != -1 ||
- _tileRoot.GetCellSourceId(GameConfig.MiddleMapLayer, posLT) != -1 ||
- (_tileRoot.GetCellSourceId(GameConfig.TopMapLayer, posLT) != -1 && _tileRoot.GetCellAtlasCoords(GameConfig.TopMapLayer, posLT) != tileCellInfo.AutoTileCoord) ||
-
- _tileRoot.GetCellSourceId(GameConfig.FloorMapLayer, posRD) != -1 ||
- _tileRoot.GetCellSourceId(GameConfig.MiddleMapLayer, posRD) != -1 ||
- (_tileRoot.GetCellSourceId(GameConfig.TopMapLayer, posRD) != -1 && _tileRoot.GetCellAtlasCoords(GameConfig.TopMapLayer, posRD) != tileCellInfo.AutoTileCoord) ||
-
- _tileRoot.GetCellSourceId(GameConfig.FloorMapLayer, posRT) != -1 ||
- _tileRoot.GetCellSourceId(GameConfig.MiddleMapLayer, posRT) != -1 ||
- (_tileRoot.GetCellSourceId(GameConfig.TopMapLayer, posRT) != -1 && _tileRoot.GetCellAtlasCoords(GameConfig.TopMapLayer, posRT) != tileCellInfo.AutoTileCoord);
-
- if (flag2) //非空地, 那么说明这个点需要填充 WALL_BLOCK
- {
- _tileRoot.SetCell(GameConfig.TopMapLayer, pos, tileCellInfo.Id, tileCellInfo.AutoTileCoord);
- }
- }
- }
+ var posX = data[i];
+ var posY = data[i + 1];
+ var pos = new Vector2I(roomInfo.Position.X + posX - rectPos.X, roomInfo.Position.Y + posY - rectPos.Y);
+ var bit = (uint)data[i + 2];
+ var type = (byte)data[i + 3];
+ var index = terrainInfo.TerrainBitToIndex(bit, type);
+ var terrainCell = terrainInfo.GetTerrainCell(index, type);
+ var atlasCoords = terrainInfo.GetPosition(terrainCell);
+ _tileRoot.SetCell(layer, pos, sourceId, atlasCoords);
+ }
+ }
+
+ //设置自定义层的数据
+ private void SetCustomLayerDataFromList(int layer, RoomInfo roomInfo, List data, Vector2I rectPos)
+ {
+ for (var i = 0; i < data.Count; i += 5)
+ {
+ var posX = data[i];
+ var posY = data[i + 1];
+ var sourceId = data[i + 2];
+ var atlasCoordsX = data[i + 3];
+ var atlasCoordsY = data[i + 4];
+ var pos = new Vector2I(roomInfo.Position.X + posX - rectPos.X, roomInfo.Position.Y + posY - rectPos.Y);
+ _tileRoot.SetCell(layer, pos, sourceId, new Vector2I(atlasCoordsX, atlasCoordsY));
}
}
//填充tile区域
- private void FillRect(int layer, TileCellInfo info, Vector2 pos, Vector2 size)
+ private void FillRect(int layer, TileCellData data, Vector2 pos, Vector2 size)
{
for (int i = 0; i < size.X; i++)
{
for (int j = 0; j < size.Y; j++)
{
var p = new Vector2I((int)pos.X + i, (int)pos.Y + j);
- if (layer == GameConfig.AisleFloorMapLayer)
- {
- _tempAisleFloorGrid.Set(p, true);
- }
- _tileRoot.SetCell(layer, p, 0, info.AutoTileCoord);
+ _tileRoot.SetCell(layer, p, data.SourceId, data.AutoTileCoords);
}
}
}
@@ -515,876 +228,16 @@
for (int j = 0; j < size.Y; j++)
{
var p = new Vector2I((int)pos.X + i, (int)pos.Y + j);
- if (layer == GameConfig.AisleFloorMapLayer)
- {
- _tempAisleFloorGrid.Remove(p.X, p.Y);
- }
_tileRoot.SetCell(layer, p, 0);
}
}
}
-
- //横向过道
- private void FullHorizontalAisle(AutoTileConfig config, Rect2 rect)
- {
- FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(0, 1), rect.Size - new Vector2(0, 2));
- FillRect(GameConfig.MiddleMapLayer, config.T, rect.Position, new Vector2(rect.Size.X, 1));
- FillRect(GameConfig.TopMapLayer, config.B, rect.Position + new Vector2(0, rect.Size.Y - 1), new Vector2(rect.Size.X, 1));
- }
-
- //纵向过道
- private void FullVerticalAisle(AutoTileConfig config, Rect2 rect)
- {
- FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(1, 0), rect.Size - new Vector2(2, 0));
- FillRect(GameConfig.TopMapLayer, config.L, rect.Position, new Vector2(1, rect.Size.Y));
- FillRect(GameConfig.TopMapLayer, config.R, rect.Position + new Vector2(rect.Size.X - 1, 0), new Vector2(1, rect.Size.Y));
- }
-
- //横向过道, 门朝右, 连接方向向左
- private void FullHorizontalAisleLeft(AutoTileConfig config, Rect2 rect, RoomDoorInfo doorInfo = null)
- {
- //左
- ClearRect(GameConfig.TopMapLayer, rect.Position + new Vector2(-1, 1), new Vector2(1, rect.Size.Y - 2));
- if (doorInfo == null)
- {
- FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(-1, 1),
- new Vector2(1, rect.Size.Y - 2));
- }
- else
- {
- ClearRect(GameConfig.TopMapLayer, rect.Position + new Vector2(-1, 0), Vector2.One);
- FillRect(GameConfig.MiddleMapLayer, config.OUT_LB, rect.Position + new Vector2(-1, 0), Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.OUT_LT, rect.Position + new Vector2(-1, 3), Vector2.One);
-
- FillRect(GameConfig.FloorMapLayer, config.Floor, rect.Position + new Vector2(-1, 1), new Vector2(1, rect.Size.Y - 2));
- //生成门的导航区域
- var x = rect.Position.X * GameConfig.TileCellSize;
- var y = rect.Position.Y * GameConfig.TileCellSize;
-
- var op1 = new Vector2(x - GameConfig.TileCellSize * 1.5f, y + GameConfig.TileCellSize * 1.5f);
- var op2 = new Vector2(x + GameConfig.TileCellSize * 0.5f, y + GameConfig.TileCellSize * 1.5f);
- var op3 = new Vector2(x + GameConfig.TileCellSize * 0.5f, y + GameConfig.TileCellSize * 3f);
- var op4 = new Vector2(x - GameConfig.TileCellSize * 1.5f, y + GameConfig.TileCellSize * 3f);
- AddDoorNavigation(
- doorInfo, op1, op2, op3, op4,
- op1,
- new Vector2(op1.X + GameConfig.TileCellSize, op2.Y),
- new Vector2(op1.X + GameConfig.TileCellSize, op3.Y),
- op4
- );
- }
- }
-
- //横向过道, 门朝左, 连接方向向右
- private void FullHorizontalAisleRight(AutoTileConfig config, Rect2 rect, RoomDoorInfo doorInfo = null)
- {
- //右
- ClearRect(GameConfig.TopMapLayer, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2));
- if (doorInfo == null)
- {
- FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2));
- }
- else
- {
- ClearRect(GameConfig.TopMapLayer, rect.Position + new Vector2(rect.Size.X, 0), Vector2.One);
- FillRect(GameConfig.MiddleMapLayer, config.OUT_RB, rect.Position + new Vector2(rect.Size.X, 0), Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.OUT_RT, rect.Position + new Vector2(rect.Size.X, 3), Vector2.One);
-
- FillRect(GameConfig.FloorMapLayer, config.Floor, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2));
- //生成门的导航区域
- var x = rect.Position.X * GameConfig.TileCellSize;
- var y = rect.Position.Y * GameConfig.TileCellSize;
-
- var op1 = new Vector2(x - GameConfig.TileCellSize * 1.5f + (rect.Size.X + 1) * GameConfig.TileCellSize, y + GameConfig.TileCellSize * 1.5f);
- var op2 = new Vector2(x + GameConfig.TileCellSize * 0.5f + (rect.Size.X + 1) * GameConfig.TileCellSize, y + GameConfig.TileCellSize * 1.5f);
- var op3 = new Vector2(x + GameConfig.TileCellSize * 0.5f + (rect.Size.X + 1) * GameConfig.TileCellSize, y + GameConfig.TileCellSize * 3f);
- var op4 = new Vector2(x - GameConfig.TileCellSize * 1.5f + (rect.Size.X + 1) * GameConfig.TileCellSize, y + GameConfig.TileCellSize * 3f);
- AddDoorNavigation(
- doorInfo, op1, op2, op3, op4,
- new Vector2(op2.X - GameConfig.TileCellSize, op1.Y),
- op2,
- op3,
- new Vector2(op2.X - GameConfig.TileCellSize, op4.Y)
- );
- }
- }
-
- //纵向过道, 门朝下, 连接方向向上
- private void FullVerticalAisleUp(AutoTileConfig config, Rect2 rect, RoomDoorInfo doorInfo = null)
- {
- //上
- ClearRect(GameConfig.TopMapLayer, rect.Position + new Vector2(1, -1), new Vector2(rect.Size.X - 2, 1));
- if (doorInfo == null)
- {
- FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(1, -1),
- new Vector2(rect.Size.X - 2, 1));
- }
- else
- {
- FillRect(GameConfig.TopMapLayer, config.OUT_RT, rect.Position + new Vector2(0, -1), Vector2.One);
- FillRect(GameConfig.TopMapLayer, config.OUT_LT, rect.Position + new Vector2(3, -1), Vector2.One);
-
- FillRect(GameConfig.FloorMapLayer, config.Floor, rect.Position + new Vector2(1, -1), new Vector2(rect.Size.X - 2, 1));
- //生成门的导航区域
- var x = rect.Position.X * GameConfig.TileCellSize;
- var y = rect.Position.Y * GameConfig.TileCellSize;
-
- var op1 = new Vector2(x + GameConfig.TileCellSize * 1.5f, y - GameConfig.TileCellSize * 1f);
- var op2 = new Vector2(x + GameConfig.TileCellSize * 2.5f, y - GameConfig.TileCellSize * 1f);
- var op3 = new Vector2(x + GameConfig.TileCellSize * 2.5f, y + GameConfig.TileCellSize * 0.5f);
- var op4 = new Vector2(x + GameConfig.TileCellSize * 1.5f, y + GameConfig.TileCellSize * 0.5f);
- AddDoorNavigation(
- doorInfo, op1, op2, op3, op4,
- op1,
- op2,
- new Vector2(op3.X, op1.Y + GameConfig.TileCellSize),
- new Vector2(op4.X, op1.Y + GameConfig.TileCellSize)
- );
- }
- }
-
- //纵向过道, 门朝上, 连接方向向下
- private void FullVerticalAisleDown(AutoTileConfig config, Rect2 rect, RoomDoorInfo doorInfo = null)
- {
- //下
- ClearRect(GameConfig.MiddleMapLayer, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1));
- if (doorInfo == null)
- {
- FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1));
- }
- else
- {
- FillRect(GameConfig.MiddleMapLayer, config.OUT_RB, rect.Position + new Vector2(0, rect.Size.Y), Vector2.One);
- FillRect(GameConfig.MiddleMapLayer, config.OUT_LB, rect.Position + new Vector2(3, rect.Size.Y), Vector2.One);
-
- FillRect(GameConfig.FloorMapLayer, config.Floor, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1));
- //生成门的导航区域
- var x = rect.Position.X * GameConfig.TileCellSize;
- var y = rect.Position.Y * GameConfig.TileCellSize;
-
- var op1 = new Vector2(x + GameConfig.TileCellSize * 1.5f, y - GameConfig.TileCellSize * 1f + (rect.Size.Y + 1) * GameConfig.TileCellSize);
- var op2 = new Vector2(x + GameConfig.TileCellSize * 2.5f, y - GameConfig.TileCellSize * 1f + (rect.Size.Y + 1) * GameConfig.TileCellSize);
- var op3 = new Vector2(x + GameConfig.TileCellSize * 2.5f, y + GameConfig.TileCellSize * 0.5f + (rect.Size.Y + 1) * GameConfig.TileCellSize);
- var op4 = new Vector2(x + GameConfig.TileCellSize * 1.5f, y + GameConfig.TileCellSize * 0.5f + (rect.Size.Y + 1) * GameConfig.TileCellSize);
- AddDoorNavigation(
- doorInfo, op1, op2, op3, op4,
- new Vector2(op1.X, op3.Y - GameConfig.TileCellSize),
- new Vector2(op2.X, op3.Y - GameConfig.TileCellSize),
- op3,
- op4
- );
- }
- }
-
- ///
- /// 添加房间
- ///
- private void AddDoorNavigation(RoomDoorInfo doorInfo,
- Vector2 op1, Vector2 op2, Vector2 op3, Vector2 op4,
- Vector2 cp1, Vector2 cp2, Vector2 cp3, Vector2 cp4)
- {
- var openPolygonData = new NavigationPolygonData();
- openPolygonData.Type = NavigationPolygonType.Out;
- openPolygonData.SetPoints(new []{ op1, op2, op3, op4 });
-
- var closePolygonData = new NavigationPolygonData();
- closePolygonData.Type = NavigationPolygonType.Out;
- closePolygonData.SetPoints(new []{ cp1, cp2, cp3, cp4 });
-
- _connectNavigationItemList.Add(new DoorNavigationInfo(doorInfo, openPolygonData, closePolygonData));
- }
-
- ///
- /// 计算并动生成导航区域, layer 为需要计算的层级,如果没有设置 floorAtlasCoords,则该 layer 下不为空的地砖都将视为可行走区域
- ///
- public void GenerateNavigationPolygon(int layer)
- {
- _usePoints.Clear();
- _polygonDataList.Clear();
-
- try
- {
- var size = new Vector2(GameConfig.TileCellSize, GameConfig.TileCellSize);
-
- var rect = _tileRoot.GetUsedRect();
-
- var x = rect.Position.X;
- var y = rect.Position.Y;
- var w = rect.Size.X;
- var h = rect.Size.Y;
-
- for (int j = y; j < h; j++)
- {
- for (int i = x; i < w; i++)
- {
- if (IsWayTile(layer, i, j))
- {
- if (!_usePoints.Contains(new Vector2I(i, j)))
- {
- NavigationPolygonData polygonData = null;
-
- if (!IsWayTile(layer, i, j - 1))
- {
- polygonData = CalcOutline(layer, i, j, size);
- }
- else if (!IsWayTile(layer, i, j + 1))
- {
- polygonData = CalcInline(layer, i, j, size);
- }
-
- if (polygonData != null)
- {
- _polygonDataList.Add(polygonData);
- }
- }
- }
- }
- }
-
- _generateNavigationResult = new GenerateNavigationResult(true);
- }
- catch (NavigationPointException e)
- {
- _usePoints.Clear();
- _polygonDataList.Clear();
- Debug.Log(e.Message);
- _generateNavigationResult = new GenerateNavigationResult(false, e);
- }
- }
-
- ///
- /// 获取生成导航区域操作的结果, 如果没有调用过 GenerateNavigationPolygon() 函数, 则返回 null
- ///
- ///
- public GenerateNavigationResult GetGenerateNavigationResult()
- {
- return _generateNavigationResult;
- }
-
- ///
- /// 将导航区域挂载到 navigationRoot 上
- ///
- public void MountNavigationPolygon(Node2D navigationRoot)
- {
- //TestData();
- // 在 Godot4.0_rc6 中 如果将所有点都放在 NavigationPolygon 里面, 即使点是对的, 但调用 MakePolygonsFromOutlines 还是可能会报错, 这应该是个bug
-
- //通过 GenerateNavigationPolygon() 计算出来的导航区域
- for (var i = 0; i < _polygonDataList.Count; i++)
- {
- var polygonData = _polygonDataList[i];
- CreateNavigationRegion(navigationRoot, polygonData);
- }
-
- //门占用区域的导航区域
- for (var i = 0; i < _connectNavigationItemList.Count; i++)
- {
- var item = _connectNavigationItemList[i];
- item.CloseNavigationNode = CreateNavigationRegion(navigationRoot, item.CloseNavigationData);
- item.OpenNavigationNode = CreateNavigationRegion(navigationRoot, item.OpenNavigationData);
- item.CloseNavigationNode.Enabled = false;
- item.OpenNavigationNode.Enabled = false;
- item.DoorInfo.Navigation = item;
- }
- }
-
- //创建导航区域
- private NavigationRegion2D CreateNavigationRegion(Node2D navigationRoot, NavigationPolygonData polygonData)
- {
- var polygon = new NavigationPolygon();
- polygon.AddOutline(polygonData.GetPoints());
- polygon.MakePolygonsFromOutlines();
- var navigationPolygon = new NavigationRegion2D();
- navigationPolygon.Name = "NavigationRegion" + (navigationRoot.GetChildCount() + 1);
- navigationPolygon.NavigationPolygon = polygon;
- navigationRoot.AddChild(navigationPolygon);
- return navigationPolygon;
- }
-
- ///
- /// 获取房间内的导航点数据
- ///
- public NavigationPolygonData[] GetPolygonData()
- {
- return _polygonDataList.ToArray();
- }
-
- ///
- /// 设置导航网格数据
- ///
- ///
- public void SetPolygonData(List list)
- {
- _polygonDataList.Clear();
- _polygonDataList.AddRange(list);
- _generateNavigationResult = new GenerateNavigationResult(true);
- }
-
- ///
- /// 清除生成的导航数据
- ///
- public void ClearPolygonData()
- {
- _polygonDataList.Clear();
- _generateNavigationResult = null;
- }
-
- ///
- /// 获取连接门导航数据, 必须要调用 AutoFillRoomTile() 函数才有数据
- ///
- public NavigationPolygonData[] GetConnectDoorPolygonData()
- {
- var array = new NavigationPolygonData[_connectNavigationItemList.Count];
- for (var i = 0; i < _connectNavigationItemList.Count; i++)
- {
- array[i] = _connectNavigationItemList[i].OpenNavigationData;
- }
- return array;
- }
-
- ///
- /// 设置地面的地砖,将影响导航网格计算
- ///
- public void SetFloorAtlasCoords(List floorAtlasCoords)
- {
- _floorAtlasCoords = floorAtlasCoords;
- }
///
/// 返回指定位置的Tile是否为可以行走
///
private bool IsWayTile(int layer, int x, int y)
{
- if (_floorAtlasCoords == null || _floorAtlasCoords.Count == 0)
- {
- return _tileRoot.GetCellSourceId(layer, new Vector2I(x, y)) != -1;
- }
-
- var result = _tileRoot.GetCellAtlasCoords(layer, new Vector2I(x, y));
- return _floorAtlasCoords.Contains(result);
- }
-
- //计算导航网格外轮廓
- private NavigationPolygonData CalcOutline(int layer, int i, int j, Vector2 size)
- {
- var polygonData = new NavigationPolygonData();
- polygonData.Type = NavigationPolygonType.Out;
- var points = new List();
- // 0:右, 1:下, 2:左, 3:上
- var dir = 0;
- var offset = new Vector2(size.X * 0.5f, size.Y * 0.5f);
- //找到路, 向右开始找边界
- var startPos = new Vector2I(i, j);
-
- var tempI = i;
- var tempJ = j;
-
- while (true)
- {
- switch (dir)
- {
- case 0: //右
- {
- if (IsWayTile(layer, tempI, tempJ - 1)) //先向上找
- {
- dir = 3;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- PutUsePoint(pos);
-
- tempJ--;
- break;
- }
- else if (IsWayTile(layer, tempI + 1, tempJ)) //再向右找
- {
- if (points.Count == 0)
- {
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- }
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- PutUsePoint(new Vector2I(tempI, tempJ));
- tempI++;
- break;
- }
- else if (IsWayTile(layer, tempI, tempJ + 1)) //向下找
- {
- dir = 1;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- PutUsePoint(pos);
-
- tempJ++;
- break;
- }
-
- throw new NavigationPointException(new Vector2I(tempI, tempJ), "生成导航多边形发生错误! 点: " + new Vector2I(tempI, tempJ) + "发生交错!");
- }
- case 1: //下
- {
- if (IsWayTile(layer, tempI + 1, tempJ)) //先向右找
- {
- dir = 0;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- PutUsePoint(pos);
-
- tempI++;
- break;
- }
- else if (IsWayTile(layer, tempI, tempJ + 1)) //再向下找
- {
- if (points.Count == 0)
- {
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- }
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- PutUsePoint(new Vector2I(tempI, tempJ));
- tempJ++;
- break;
- }
- else if (IsWayTile(layer, tempI - 1, tempJ)) //向左找
- {
- dir = 2;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- //points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y * 2));
- PutUsePoint(pos);
-
- tempI--;
- break;
- }
-
- throw new NavigationPointException(new Vector2I(tempI, tempJ), "生成导航多边形发生错误! 点: " + new Vector2I(tempI, tempJ) + "发生交错!");
- }
- case 2: //左
- {
- if (IsWayTile(layer, tempI, tempJ + 1)) //先向下找
- {
- dir = 1;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- //points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y * 2));
- PutUsePoint(pos);
-
- tempJ++;
- break;
- }
- else if (IsWayTile(layer, tempI - 1, tempJ)) //再向左找
- {
- if (points.Count == 0)
- {
- //points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y * 2));
- }
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- PutUsePoint(new Vector2I(tempI, tempJ));
- tempI--;
- break;
- }
- else if (IsWayTile(layer, tempI, tempJ - 1)) //向上找
- {
- dir = 3;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- //points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y * 2));
- PutUsePoint(pos);
-
- tempJ--;
- break;
- }
-
- throw new NavigationPointException(new Vector2I(tempI, tempJ), "生成导航多边形发生错误! 点: " + new Vector2I(tempI, tempJ) + "发生交错!");
- }
- case 3: //上
- {
- if (IsWayTile(layer, tempI - 1, tempJ)) //先向左找
- {
- dir = 2;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- //points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y * 2));
- PutUsePoint(pos);
-
- tempI--;
- break;
- }
- else if (IsWayTile(layer, tempI, tempJ - 1)) //再向上找
- {
- if (points.Count == 0)
- {
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- }
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- PutUsePoint(new Vector2I(tempI, tempJ));
- tempJ--;
- break;
- }
- else if (IsWayTile(layer, tempI + 1, tempJ)) //向右找
- {
- dir = 0;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- PutUsePoint(pos);
-
- tempI++;
- break;
- }
-
- throw new NavigationPointException(new Vector2I(tempI, tempJ), "生成导航多边形发生错误! 点: " + new Vector2I(tempI, tempJ) + "发生交错!");
- }
- }
- }
- }
-
- //计算导航网格内轮廓
- private NavigationPolygonData CalcInline(int layer, int i, int j, Vector2 size)
- {
- var polygonData = new NavigationPolygonData();
- polygonData.Type = NavigationPolygonType.In;
- var points = new List();
- // 0:右, 1:下, 2:左, 3:上
- var dir = 0;
- var offset = new Vector2(size.X * 0.5f, size.Y * 0.5f);
- //找到路, 向右开始找边界
- var startPos = new Vector2I(i - 1, j);
- PutUsePoint(startPos);
-
- var tempI = i;
- var tempJ = j;
-
- while (true)
- {
- switch (dir)
- {
- case 0: //右
- {
- if (IsWayTile(layer, tempI, tempJ + 1)) //向下找
- {
- dir = 1;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- //points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y * 2));
- PutUsePoint(pos);
-
- tempJ++;
- break;
- }
- else if (IsWayTile(layer, tempI + 1, tempJ)) //再向右找
- {
- if (points.Count == 0)
- {
- //points.Add(new Vector2((tempI - 1) * size.X + offset.X, tempJ * size.Y + offset.Y));
- points.Add(new Vector2((tempI - 1) * size.X + offset.X, tempJ * size.Y + offset.Y * 2));
- }
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- PutUsePoint(new Vector2I(tempI, tempJ));
- tempI++;
- break;
- }
- else if (IsWayTile(layer, tempI, tempJ - 1)) //先向上找
- {
- dir = 3;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- //points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y * 2));
- PutUsePoint(pos);
-
- tempJ--;
- break;
- }
-
- throw new NavigationPointException(new Vector2I(tempI, tempJ), "生成导航多边形发生错误! 点: " + new Vector2I(tempI, tempJ) + "发生交错!");
- }
- case 1: //下
- {
- if (IsWayTile(layer, tempI - 1, tempJ)) //向左找
- {
- dir = 2;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- PutUsePoint(pos);
-
- tempI--;
- break;
- }
- else if (IsWayTile(layer, tempI, tempJ + 1)) //再向下找
- {
- if (points.Count == 0)
- {
- points.Add(new Vector2((tempI - 1) * size.X + offset.X, tempJ * size.Y + offset.Y));
- }
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- PutUsePoint(new Vector2I(tempI, tempJ));
- tempJ++;
- break;
- }
- else if (IsWayTile(layer, tempI + 1, tempJ)) //先向右找
- {
- dir = 0;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- //points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y * 2));
- PutUsePoint(pos);
-
- tempI++;
- break;
- }
-
- throw new NavigationPointException(new Vector2I(tempI, tempJ), "生成导航多边形发生错误! 点: " + new Vector2I(tempI, tempJ) + "发生交错!");
- }
- case 2: //左
- {
- if (IsWayTile(layer, tempI, tempJ - 1)) //向上找
- {
- dir = 3;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- PutUsePoint(pos);
-
- tempJ--;
- break;
- }
- else if (IsWayTile(layer, tempI - 1, tempJ)) //再向左找
- {
- if (points.Count == 0)
- {
- points.Add(new Vector2((tempI - 1) * size.X + offset.X, tempJ * size.Y + offset.Y));
- }
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- PutUsePoint(new Vector2I(tempI, tempJ));
- tempI--;
- break;
- }
- else if (IsWayTile(layer, tempI, tempJ + 1)) //先向下找
- {
- dir = 1;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- PutUsePoint(pos);
-
- tempJ++;
- break;
- }
-
- throw new NavigationPointException(new Vector2I(tempI, tempJ), "生成导航多边形发生错误! 点: " + new Vector2I(tempI, tempJ) + "发生交错!");
- }
- case 3: //上
- {
- if (IsWayTile(layer, tempI + 1, tempJ)) //向右找
- {
- dir = 0;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- //points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y * 2));
- PutUsePoint(pos);
-
- tempI++;
- break;
- }
- else if (IsWayTile(layer, tempI, tempJ - 1)) //再向上找
- {
- if (points.Count == 0)
- {
- points.Add(new Vector2((tempI - 1) * size.X + offset.X, tempJ * size.Y + offset.Y));
- }
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- PutUsePoint(new Vector2I(tempI, tempJ));
- tempJ--;
- break;
- }
- else if (IsWayTile(layer, tempI - 1, tempJ)) //先向左找
- {
- dir = 2;
-
- var pos = new Vector2I(tempI, tempJ);
- if (points.Count > 1 && pos == startPos)
- {
- polygonData.SetPoints(points.ToArray());
- return polygonData;
- }
-
- points.Add(new Vector2(tempI * size.X + offset.X, tempJ * size.Y + offset.Y));
- PutUsePoint(pos);
-
- tempI--;
- break;
- }
-
- throw new NavigationPointException(new Vector2I(tempI, tempJ), "生成导航多边形发生错误! 点: " + new Vector2I(tempI, tempJ) + "发生交错!");
- }
- }
- }
- }
-
- //记录导航网格中已经使用过的坐标
- private void PutUsePoint(Vector2I pos)
- {
- if (_usePoints.Contains(pos))
- {
- throw new NavigationPointException(pos, "生成导航多边形发生错误! 点: " + pos + "发生交错!");
- }
-
- _usePoints.Add(pos);
+ return _tileRoot.GetCellSourceId(layer, new Vector2I(x, y)) != -1;
}
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/GenerateRoomErrorCode.cs b/DungeonShooting_Godot/src/framework/map/GenerateRoomErrorCode.cs
new file mode 100644
index 0000000..c9e1c3e
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/GenerateRoomErrorCode.cs
@@ -0,0 +1,13 @@
+
+public enum GenerateRoomErrorCode
+{
+ NoError,
+ //超出区域
+ OutArea,
+ //没有合适的位置
+ NoSuitableLocation
+ // //碰到其他房间或过道
+ // HasCollision,
+ // //没有合适的门
+ // NoProperDoor,
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/MapLayer.cs b/DungeonShooting_Godot/src/framework/map/MapLayer.cs
new file mode 100644
index 0000000..10ad947
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/MapLayer.cs
@@ -0,0 +1,45 @@
+
+public static class MapLayer
+{
+ ///
+ /// 自动图块地板层
+ ///
+ public const int AutoFloorLayer = 0;
+ ///
+ /// 自定义图块地板层1
+ ///
+ public const int CustomFloorLayer1 = AutoFloorLayer + 1;
+ ///
+ /// 自定义图块地板层2
+ ///
+ public const int CustomFloorLayer2 = CustomFloorLayer1 + 1;
+ ///
+ /// 自定义图块地板层3
+ ///
+ public const int CustomFloorLayer3 = CustomFloorLayer2 + 1;
+ ///
+ /// 自动图块中间层
+ ///
+ public const int AutoMiddleLayer = CustomFloorLayer3 + 1;
+ ///
+ /// 自定义图块中间层1
+ ///
+ public const int CustomMiddleLayer1 = AutoMiddleLayer + 1;
+ ///
+ /// 自定义图块中间层2
+ ///
+ public const int CustomMiddleLayer2 = CustomMiddleLayer1 + 1;
+ ///
+ /// 自动图块顶层
+ ///
+ public const int AutoTopLayer = CustomMiddleLayer2 + 1;
+ ///
+ /// 自定义图块顶层
+ ///
+ public const int CustomTopLayer = AutoTopLayer + 1;
+
+ ///
+ /// 标记数据层, 特殊层, 不会出现在 TileMap 中
+ ///
+ public const int MarkLayer = 9999;
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/RandomPool.cs b/DungeonShooting_Godot/src/framework/map/RandomPool.cs
new file mode 100644
index 0000000..3328785
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/RandomPool.cs
@@ -0,0 +1,145 @@
+
+using System.Collections.Generic;
+using Config;
+using Godot;
+
+public class RandomPool
+{
+ ///
+ /// 随机数生成器
+ ///
+ public SeedRandom Random { get; }
+
+ ///
+ /// 所属世界
+ ///
+ public World World { get; }
+
+ public RandomPool(World world)
+ {
+ World = world;
+ Random = world.Random;
+ }
+
+ ///
+ /// 获取随机武器
+ ///
+ public ExcelConfig.ActivityBase GetRandomWeapon()
+ {
+ return Random.RandomChoose(PreinstallMarkManager.GetMarkConfigsByType(ActivityType.Weapon));
+ }
+
+ ///
+ /// 获取随机敌人
+ ///
+ public ExcelConfig.ActivityBase GetRandomEnemy()
+ {
+ return Random.RandomChoose(PreinstallMarkManager.GetMarkConfigsByType(ActivityType.Enemy));
+ }
+
+ ///
+ /// 获取随机道具
+ ///
+ public ExcelConfig.ActivityBase GetRandomProp()
+ {
+ return Random.RandomChoose(PreinstallMarkManager.GetMarkConfigsByType(ActivityType.Prop));
+ }
+
+ ///
+ /// 填充自动波次数据
+ ///
+ public void FillAutoWave(RoomPreinstall preinstall)
+ {
+ if (preinstall.RoomInfo.RoomType == DungeonRoomType.Battle)
+ {
+ FillBattleRoom(preinstall);
+ }
+ else if (preinstall.RoomInfo.RoomType == DungeonRoomType.Reward)
+ {
+ FillRewardRoom(preinstall);
+ }
+ }
+
+ //填充战斗房间
+ private void FillBattleRoom(RoomPreinstall preinstall)
+ {
+ var count = World.Random.RandomRangeInt(3, 10);
+ var tileInfo = preinstall.RoomInfo.RoomSplit.TileInfo;
+ var serializeVector2s = tileInfo.NavigationVertices;
+ var vertices = new List();
+ foreach (var sv2 in serializeVector2s)
+ {
+ vertices.Add(sv2.AsVector2());
+ }
+ var positionArray = World.Random.GetRandomPositionInPolygon(vertices, tileInfo.NavigationPolygon, count);
+ var arr = new ActivityType[] { ActivityType.Enemy, ActivityType.Weapon, ActivityType.Prop };
+ var weight = new int[] { 15, 2, 1 };
+ for (var i = 0; i < count; i++)
+ {
+ var tempWave = GetOrCreateWave(preinstall, World.Random.RandomRangeInt(0, 2));
+ var index = World.Random.RandomWeight(weight);
+ var activityType = arr[index];
+
+ //创建标记
+ var mark = CreateMark(activityType, i * 0.3f, preinstall.RoomInfo.ToGlobalPosition(positionArray[i]));
+
+ if (activityType == ActivityType.Enemy) //敌人
+ {
+ mark.Id = GetRandomEnemy().Id;
+ mark.Attr.Add("Face", "0");
+ mark.DerivedAttr = new Dictionary();
+ mark.DerivedAttr.Add("Face", World.Random.RandomChoose((int)FaceDirection.Left, (int)FaceDirection.Right).ToString()); //链朝向
+ if (World.Random.RandomBoolean(0.8f)) //手持武器
+ {
+ var weapon = GetRandomWeapon();
+ var weaponAttribute = Weapon.GetWeaponAttribute(weapon.Id);
+ mark.Attr.Add("Weapon", weapon.Id); //武器id
+ mark.Attr.Add("CurrAmmon", weaponAttribute.AmmoCapacity.ToString()); //弹夹弹药量
+ mark.Attr.Add("ResidueAmmo", weaponAttribute.AmmoCapacity.ToString()); //剩余弹药量
+ }
+ }
+ else if (activityType == ActivityType.Weapon) //武器
+ {
+ mark.Id = GetRandomWeapon().Id;
+ }
+ else if (activityType == ActivityType.Prop) //道具
+ {
+ mark.Id = GetRandomProp().Id;
+ }
+ tempWave.Add(mark);
+ }
+ }
+
+ //填充奖励房间
+ private void FillRewardRoom(RoomPreinstall preinstall)
+ {
+ var wave = GetOrCreateWave(preinstall, 0);
+ var mark = CreateMark(ActivityType.Treasure, 0, (preinstall.RoomInfo.Waypoints + new Vector2(0.5f, 0.5f)) * GameConfig.TileCellSize);
+ mark.Id = "treasure_box0001";
+ wave.Add(mark);
+ }
+
+ private List GetOrCreateWave(RoomPreinstall preinstall,int waveIndex)
+ {
+ while (preinstall.WaveList.Count <= waveIndex)
+ {
+ preinstall.WaveList.Add(new List());
+ }
+
+ return preinstall.WaveList[waveIndex];
+ }
+
+ //创建标记
+ private ActivityMark CreateMark(ActivityType activityType, float delayTime, Vector2 pos)
+ {
+ var mark = new ActivityMark();
+ mark.Attr = new Dictionary();
+ mark.ActivityType = activityType;
+ mark.MarkType = SpecialMarkType.Normal;
+ mark.VerticalSpeed = 0;
+ mark.Altitude = activityType == ActivityType.Enemy ? 0 : 8;
+ mark.DelayTime = delayTime;
+ mark.Position = pos;
+ return mark;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/RoomDirection.cs b/DungeonShooting_Godot/src/framework/map/RoomDirection.cs
new file mode 100644
index 0000000..0befbc9
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/RoomDirection.cs
@@ -0,0 +1,11 @@
+
+///
+/// 生成房间的方向
+///
+public enum RoomDirection
+{
+ Up,
+ Down,
+ Left,
+ Right
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/TileCellData.cs b/DungeonShooting_Godot/src/framework/map/TileCellData.cs
new file mode 100644
index 0000000..cbeed8d
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/TileCellData.cs
@@ -0,0 +1,42 @@
+
+using Godot;
+
+///
+/// 地图cell属性信息
+///
+public class TileCellData
+{
+ public TileCellData(int sourceId, Vector2I autoTileCoords, uint terrainPeering, byte terrainType, int defaultLayer)
+ {
+ SourceId = sourceId;
+ AutoTileCoords = autoTileCoords;
+ TerrainPeering = terrainPeering;
+ TerrainType = terrainType;
+ DefaultLayer = defaultLayer;
+ }
+
+ ///
+ /// 在TileSet中的图块id, 也就是sourceId
+ ///
+ public int SourceId;
+
+ ///
+ /// 如果是图块集, 该属性就表示在图块集的位置
+ ///
+ public Vector2I AutoTileCoords;
+
+ ///
+ /// 地形掩码, 0 表示没有配置地形
+ ///
+ public uint TerrainPeering;
+
+ ///
+ /// 默认存放层级
+ ///
+ public int DefaultLayer;
+
+ ///
+ /// 地形类型
+ ///
+ public byte TerrainType;
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/TileCellInfo.cs b/DungeonShooting_Godot/src/framework/map/TileCellInfo.cs
deleted file mode 100644
index bd120a6..0000000
--- a/DungeonShooting_Godot/src/framework/map/TileCellInfo.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-
-using Godot;
-
-///
-/// 地图cell属性信息
-///
-public class TileCellInfo
-{
- public TileCellInfo(int id, Vector2I autoTileCoord)
- {
- Id = id;
- AutoTileCoord = autoTileCoord;
- }
-
- ///
- /// 在TileSet中的图块id, 也就是sourceId
- ///
- public int Id;
-
- ///
- /// 如果是图块集, 该属性就表示在图块集的位置
- ///
- public Vector2I AutoTileCoord;
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/TileMapUtils.cs b/DungeonShooting_Godot/src/framework/map/TileMapUtils.cs
new file mode 100644
index 0000000..5c3a869
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/TileMapUtils.cs
@@ -0,0 +1,231 @@
+
+using System.Collections.Generic;
+using System.Linq;
+using Godot;
+using Godot.Collections;
+
+public static class TileMapUtils
+{
+ public const int MainSource = 0;
+ public const int MainTerrainSet = 0;
+ public const int MainTerrain = 0;
+
+ ///
+ /// 生成自动图块和地形, 并烘焙好导航网格
+ ///
+ public static Rect2I GenerateTerrain(TileMap tileMap, NavigationRegion2D navigationRegion, AutoTileConfig autoTileConfig)
+ {
+ var list = new List();
+ var xStart = int.MaxValue;
+ var yStart = int.MaxValue;
+ var xEnd = int.MinValue;
+ var yEnd = int.MinValue;
+
+ var temp = tileMap.GetUsedCells(MapLayer.AutoFloorLayer);
+ var autoCellLayerGrid = temp.ToHashSet();
+ foreach (var (x, y) in autoCellLayerGrid)
+ {
+ //计算范围
+ if (x < xStart)
+ xStart = x;
+ else if (x > xEnd)
+ xEnd = x;
+
+ if (y < yStart)
+ yStart = y;
+ else if (y > yEnd)
+ yEnd = y;
+
+ //填充墙壁
+ if (!autoCellLayerGrid.Contains(new Vector2I(x, y - 1)))
+ {
+ var left = autoCellLayerGrid.Contains(new Vector2I(x - 1, y - 1));
+ var right = autoCellLayerGrid.Contains(new Vector2I(x + 1, y - 1));
+ if (left && right)
+ {
+ var tileCellData1 = autoTileConfig.Wall_Vertical_SingleTop;
+ tileMap.SetCell(MapLayer.AutoFloorLayer, new Vector2I(x, y - 2), tileCellData1.SourceId, tileCellData1.AutoTileCoords);
+ var tileCellData2 = autoTileConfig.Wall_Vertical_SingleBottom;
+ tileMap.SetCell(MapLayer.AutoFloorLayer, new Vector2I(x, y - 1), tileCellData2.SourceId, tileCellData2.AutoTileCoords);
+ }
+ else if (left)
+ {
+ var tileCellData1 = autoTileConfig.Wall_Vertical_LeftTop;
+ tileMap.SetCell(MapLayer.AutoFloorLayer, new Vector2I(x, y - 2), tileCellData1.SourceId, tileCellData1.AutoTileCoords);
+ var tileCellData2 = autoTileConfig.Wall_Vertical_LeftBottom;
+ tileMap.SetCell(MapLayer.AutoFloorLayer, new Vector2I(x, y - 1), tileCellData2.SourceId, tileCellData2.AutoTileCoords);
+ }
+ else if (right)
+ {
+ var tileCellData1 = autoTileConfig.Wall_Vertical_RightTop;
+ tileMap.SetCell(MapLayer.AutoFloorLayer, new Vector2I(x, y - 2), tileCellData1.SourceId, tileCellData1.AutoTileCoords);
+ var tileCellData2 = autoTileConfig.Wall_Vertical_RightBottom;
+ tileMap.SetCell(MapLayer.AutoFloorLayer, new Vector2I(x, y - 1), tileCellData2.SourceId, tileCellData2.AutoTileCoords);
+ }
+ else
+ {
+ var tileCellData1 = autoTileConfig.Wall_Vertical_CenterTop;
+ tileMap.SetCell(MapLayer.AutoFloorLayer, new Vector2I(x, y - 2), tileCellData1.SourceId, tileCellData1.AutoTileCoords);
+ var tileCellData2 = autoTileConfig.Wall_Vertical_CenterBottom;
+ tileMap.SetCell(MapLayer.AutoFloorLayer, new Vector2I(x, y - 1), tileCellData2.SourceId, tileCellData2.AutoTileCoords);
+ }
+ }
+ }
+
+ //绘制临时边界
+ var temp1 = new List();
+ for (var x = xStart - 3; x <= xEnd + 3; x++)
+ {
+ var p1 = new Vector2I(x, yStart - 5);
+ var p2 = new Vector2I(x, yEnd + 3);
+ temp1.Add(p1);
+ temp1.Add(p2);
+ //上横
+ tileMap.SetCell(MapLayer.AutoFloorLayer, p1, autoTileConfig.TopMask.SourceId, autoTileConfig.TopMask.AutoTileCoords);
+ //下横
+ tileMap.SetCell(MapLayer.AutoFloorLayer, p2, autoTileConfig.TopMask.SourceId, autoTileConfig.TopMask.AutoTileCoords);
+ }
+ for (var y = yStart - 5; y <= yEnd + 3; y++)
+ {
+ var p1 = new Vector2I(xStart - 3, y);
+ var p2 = new Vector2I(xEnd + 3, y);
+ temp1.Add(p1);
+ temp1.Add(p2);
+ //左竖
+ tileMap.SetCell(MapLayer.AutoFloorLayer, p1, autoTileConfig.TopMask.SourceId, autoTileConfig.TopMask.AutoTileCoords);
+ //右竖
+ tileMap.SetCell(MapLayer.AutoFloorLayer, p2, autoTileConfig.TopMask.SourceId, autoTileConfig.TopMask.AutoTileCoords);
+ }
+
+ //计算需要绘制的图块
+ var temp2 = new List();
+ for (var x = xStart - 2; x <= xEnd + 2; x++)
+ {
+ for (var y = yStart - 4; y <= yEnd + 2; y++)
+ {
+ if (!autoCellLayerGrid.Contains(new Vector2I(x, y)) && !autoCellLayerGrid.Contains(new Vector2I(x, y + 1)) && !autoCellLayerGrid.Contains(new Vector2I(x, y + 2)))
+ {
+ list.Add(new Vector2I(x, y));
+ if (!IsMaskCollisionGround(autoCellLayerGrid, x, y))
+ {
+ temp2.Add(new Vector2I(x, y));
+ }
+ }
+ }
+ }
+ var arr = new Array(list);
+ //绘制自动图块
+ tileMap.SetCellsTerrainConnect(MapLayer.AutoFloorLayer, arr, MainTerrainSet, MainTerrain, false);
+
+ //擦除临时边界
+ for (var i = 0; i < temp1.Count; i++)
+ {
+ tileMap.EraseCell(MapLayer.AutoFloorLayer, temp1[i]);
+ }
+
+ //计算区域
+ var rect = Utils.CalcRect(autoCellLayerGrid);
+ if (rect.Size != Vector2I.Zero)
+ {
+ rect.Position -= new Vector2I(2, 3);
+ rect.Size += new Vector2I(4, 5);
+ }
+
+ //开始绘制导航网格
+ GenerateNavigation(navigationRegion, rect.Position, rect.Size);
+
+ //擦除临时边界2
+ for (var i = 0; i < temp2.Count; i++)
+ {
+ tileMap.EraseCell(MapLayer.AutoFloorLayer, temp2[i]);
+ }
+
+ //将墙壁移动到指定层
+ MoveTerrainCell(tileMap, autoTileConfig, autoCellLayerGrid, rect.Position, rect.Size);
+ return rect;
+ }
+
+ private static bool IsMaskCollisionGround(HashSet autoCellLayerGrid, int x, int y)
+ {
+ for (var i = -2; i <= 2; i++)
+ {
+ for (var j = -2; j <= 4; j++)
+ {
+ if (autoCellLayerGrid.Contains(new Vector2I(x + i, y + j)))
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ //生成导航网格
+ private static void GenerateNavigation(NavigationRegion2D navigationRegion, Vector2I currRoomPosition, Vector2I currRoomSize)
+ {
+ var navigationPolygon = navigationRegion.NavigationPolygon;
+ if (navigationPolygon != null)
+ {
+ navigationPolygon.Clear();
+ navigationPolygon.ClearPolygons();
+ navigationPolygon.ClearOutlines();
+ }
+ else
+ {
+ navigationPolygon = ResourceManager.Load(ResourcePath.resource_navigation_NavigationPolygon_tres);
+ navigationRegion.NavigationPolygon = navigationPolygon;
+ }
+
+ var endPos = currRoomPosition + currRoomSize;
+ navigationPolygon.AddOutline(new []
+ {
+ currRoomPosition * GameConfig.TileCellSize,
+ new Vector2(endPos.X, currRoomPosition.Y) * GameConfig.TileCellSize,
+ endPos * GameConfig.TileCellSize,
+ new Vector2(currRoomPosition.X, endPos.Y) * GameConfig.TileCellSize
+ });
+ navigationRegion.BakeNavigationPolygon(false);
+ }
+
+
+ //将自动生成的图块从 MapLayer.AutoFloorLayer 移动到指定图层中
+ private static void MoveTerrainCell(TileMap tileMap, AutoTileConfig autoTileConfig, HashSet autoCellLayerGrid, Vector2I currRoomPosition, Vector2I currRoomSize)
+ {
+ tileMap.ClearLayer(MapLayer.AutoTopLayer);
+ tileMap.ClearLayer(MapLayer.AutoMiddleLayer);
+
+ var x = currRoomPosition.X;
+ var y = currRoomPosition.Y - 1;
+ var w = currRoomSize.X;
+ var h = currRoomSize.Y + 1;
+
+ for (var i = 0; i < w; i++)
+ {
+ for (var j = 0; j < h; j++)
+ {
+ var pos = new Vector2I(x + i, y + j);
+ if (!autoCellLayerGrid.Contains(pos) && tileMap.GetCellSourceId(MapLayer.AutoFloorLayer, pos) != -1)
+ {
+ var atlasCoords = tileMap.GetCellAtlasCoords(MapLayer.AutoFloorLayer, pos);
+ var layer = autoTileConfig.GetLayer(atlasCoords);
+ if (layer == MapLayer.AutoMiddleLayer)
+ {
+ layer = MapLayer.AutoMiddleLayer;
+ }
+ else if (layer == MapLayer.AutoTopLayer)
+ {
+ layer = MapLayer.AutoTopLayer;
+ }
+ else
+ {
+ Debug.LogError($"异常图块: {pos}, 这个图块的图集坐标'{atlasCoords}'不属于'MiddleMapLayer'和'TopMapLayer'!");
+ continue;
+ }
+ tileMap.EraseCell(MapLayer.AutoFloorLayer, pos);
+ tileMap.SetCell(layer, pos, MainSource, atlasCoords);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/fog/FogMask.cs b/DungeonShooting_Godot/src/framework/map/fog/FogMask.cs
index e2061fb..828937c 100644
--- a/DungeonShooting_Godot/src/framework/map/fog/FogMask.cs
+++ b/DungeonShooting_Godot/src/framework/map/fog/FogMask.cs
@@ -108,9 +108,9 @@
private void HandlerTransition(Vector2I position, Vector2I size, Image image)
{
- var tileMap = GameApplication.Instance.World.TileRoot;
+ var tileMap = World.Current.TileRoot;
var autoConfig = GameApplication.Instance.DungeonManager.AutoTileConfig;
- var wallCoord = autoConfig.WALL_BLOCK.AutoTileCoord;
+ var wallCoords = autoConfig.TopMask.AutoTileCoords;
var (x, y) = position;
var (width, height) = size;
x -= 1;
@@ -123,7 +123,7 @@
{
var pos = new Vector2I(i + x, j + y);
//说明是外层墙壁
- if (tileMap.GetCellAtlasCoords(GameConfig.TopMapLayer, pos) == wallCoord)
+ if (tileMap.GetCellAtlasCoords(MapLayer.AutoTopLayer, pos) == wallCoords)
{
var left = IsEmptyCell(tileMap, new Vector2I(pos.X - 1, pos.Y));
var right = IsEmptyCell(tileMap, new Vector2I(pos.X + 1, pos.Y));
@@ -223,25 +223,24 @@
private bool IsEmptyCell(TileMap tileMap, Vector2I pos)
{
- return tileMap.GetCellSourceId(GameConfig.TopMapLayer, pos) == -1 &&
- tileMap.GetCellSourceId(GameConfig.MiddleMapLayer, pos) == -1;
+ return tileMap.GetCellSourceId(MapLayer.AutoTopLayer, pos) == -1 &&
+ tileMap.GetCellSourceId(MapLayer.AutoMiddleLayer, pos) == -1;
}
//判断是否是墙壁
private bool IsNotWallCell(TileMap tileMap, Vector2I pos, Vector2I wallCoord)
{
- return tileMap.GetCellAtlasCoords(GameConfig.TopMapLayer, pos) != wallCoord &&
- tileMap.GetCellAtlasCoords(GameConfig.MiddleMapLayer, pos) != wallCoord &&
- (tileMap.GetCellSourceId(GameConfig.TopMapLayer, pos) != -1 ||
- tileMap.GetCellSourceId(GameConfig.MiddleMapLayer, pos) != -1);
+ return tileMap.GetCellAtlasCoords(MapLayer.AutoTopLayer, pos) != wallCoord &&
+ tileMap.GetCellAtlasCoords(MapLayer.AutoMiddleLayer, pos) != wallCoord &&
+ (tileMap.GetCellSourceId(MapLayer.AutoTopLayer, pos) != -1 ||
+ tileMap.GetCellSourceId(MapLayer.AutoMiddleLayer, pos) != -1);
}
//判断是否是任意类型的图块
private bool IsAnyCell(TileMap tileMap, Vector2I pos)
{
- return tileMap.GetCellSourceId(GameConfig.FloorMapLayer, pos) != -1 ||
- tileMap.GetCellSourceId(GameConfig.MiddleMapLayer, pos) != -1 ||
- tileMap.GetCellSourceId(GameConfig.TopMapLayer, pos) != -1 ||
- tileMap.GetCellSourceId(GameConfig.AisleFloorMapLayer, pos) != -1;
+ return tileMap.GetCellSourceId(MapLayer.AutoFloorLayer, pos) != -1 ||
+ tileMap.GetCellSourceId(MapLayer.AutoMiddleLayer, pos) != -1 ||
+ tileMap.GetCellSourceId(MapLayer.AutoTopLayer, pos) != -1;
}
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/fog/FogMaskHandler.cs b/DungeonShooting_Godot/src/framework/map/fog/FogMaskHandler.cs
index bff2c40..8b5f06c 100644
--- a/DungeonShooting_Godot/src/framework/map/fog/FogMaskHandler.cs
+++ b/DungeonShooting_Godot/src/framework/map/fog/FogMaskHandler.cs
@@ -90,48 +90,50 @@
}
//Debug.Log("RefreshRoomFog: " + roomInfo.Id);
var fogMask = roomInfo.RoomFogMask;
-
- if (!fogMask.IsExplored) //未探索该区域
+ if (fogMask != null)
{
- fogMask.IsExplored = true;
- fogMask.TransitionAlpha(0, 1);
-
- //小地图亮起该房间
- roomInfo.PreviewSprite.Visible = true;
-
- //刷新预览区域
- foreach (var roomInfoDoor in roomInfo.Doors)
+ if (!fogMask.IsExplored) //未探索该区域
{
- if (roomInfoDoor.AisleFogMask.IsExplored) //探索过, 执行过道刷新逻辑
+ fogMask.IsExplored = true;
+ fogMask.TransitionAlpha(0, 1);
+
+ //小地图亮起该房间
+ roomInfo.PreviewSprite.Visible = true;
+
+ //刷新预览区域
+ foreach (var roomInfoDoor in roomInfo.Doors)
{
- _RefreshAisleFog(roomInfoDoor);
- }
- else //未探索
- {
- //显示预览过道
- roomInfoDoor.PreviewRoomFogMask.SetActive(false);
- roomInfoDoor.PreviewAisleFogMask.SetActive(true);
- roomInfoDoor.PreviewAisleFogMask.TransitionAlpha(0, 1);
+ if (roomInfoDoor.AisleFogMask.IsExplored) //探索过, 执行过道刷新逻辑
+ {
+ _RefreshAisleFog(roomInfoDoor);
+ }
+ else //未探索
+ {
+ //显示预览过道
+ roomInfoDoor.PreviewRoomFogMask.SetActive(false);
+ roomInfoDoor.PreviewAisleFogMask.SetActive(true);
+ roomInfoDoor.PreviewAisleFogMask.TransitionAlpha(0, 1);
+ }
}
}
- }
- else //已经探索过
- {
- //变亮
- fogMask.TransitionAlpha(GameConfig.DarkFogAlpha, 1);
-
- foreach (var roomInfoDoor in roomInfo.Doors)
+ else //已经探索过
{
- if (roomInfoDoor.AisleFogMask.IsExplored) //探索过, 执行过道刷新逻辑
+ //变亮
+ fogMask.TransitionAlpha(GameConfig.DarkFogAlpha, 1);
+
+ foreach (var roomInfoDoor in roomInfo.Doors)
{
- _RefreshAisleFog(roomInfoDoor);
- }
- else //未探索
- {
- //显示预览过道
- roomInfoDoor.PreviewRoomFogMask.SetActive(false);
- roomInfoDoor.PreviewAisleFogMask.SetActive(true);
- roomInfoDoor.PreviewAisleFogMask.TransitionAlpha(1);
+ if (roomInfoDoor.AisleFogMask.IsExplored) //探索过, 执行过道刷新逻辑
+ {
+ _RefreshAisleFog(roomInfoDoor);
+ }
+ else //未探索
+ {
+ //显示预览过道
+ roomInfoDoor.PreviewRoomFogMask.SetActive(false);
+ roomInfoDoor.PreviewAisleFogMask.SetActive(true);
+ roomInfoDoor.PreviewAisleFogMask.TransitionAlpha(1);
+ }
}
}
}
diff --git a/DungeonShooting_Godot/src/framework/map/fog/PreviewFogMask.cs b/DungeonShooting_Godot/src/framework/map/fog/PreviewFogMask.cs
index 104fd66..6c00338 100644
--- a/DungeonShooting_Godot/src/framework/map/fog/PreviewFogMask.cs
+++ b/DungeonShooting_Godot/src/framework/map/fog/PreviewFogMask.cs
@@ -16,7 +16,11 @@
private static bool _initTexture;
private static Texture2D _previewAisle;
+ private static Texture2D _previewAisle_ew;
+ private static Texture2D _previewAisle_s;
private static Texture2D _previewRoom;
+ private static Texture2D _previewRoom_n;
+ private static Texture2D _previewRoom_ew;
///
/// 房间门
@@ -44,6 +48,10 @@
_initTexture = true;
_previewAisle = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_map_PreviewTransition_png);
_previewRoom = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_map_PreviewTransition2_png);
+ _previewRoom_n = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_map_PreviewTransition3_png);
+ _previewRoom_ew = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_map_PreviewTransition4_png);
+ _previewAisle_ew = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_map_PreviewTransition5_png);
+ _previewAisle_s = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_map_PreviewTransition6_png);
}
///
@@ -60,14 +68,14 @@
{
if (fogType == PreviewFogType.Aisle)
{
- Texture = _previewAisle;
- Position = globalPosition + new Vector2(GameConfig.TileCellSize, 0);
+ Texture = _previewAisle_ew;
+ Position = globalPosition + new Vector2(GameConfig.TileCellSize, -GameConfig.TileCellSize * 0.5f);
RotationDegrees = 90;
}
else
{
- Texture = _previewRoom;
- Position = globalPosition + new Vector2(-GameConfig.TileCellSize, 0);
+ Texture = _previewRoom_ew;
+ Position = globalPosition + new Vector2(-GameConfig.TileCellSize, -GameConfig.TileCellSize * 0.5f);
RotationDegrees = 270;
}
}
@@ -75,14 +83,14 @@
{
if (fogType == PreviewFogType.Aisle)
{
- Texture = _previewAisle;
- Position = globalPosition + new Vector2(-GameConfig.TileCellSize, 0);
+ Texture = _previewAisle_ew;
+ Position = globalPosition + new Vector2(-GameConfig.TileCellSize, -GameConfig.TileCellSize * 0.5f);
RotationDegrees = 270;
}
else
{
- Texture = _previewRoom;
- Position = globalPosition + new Vector2(GameConfig.TileCellSize, 0);
+ Texture = _previewRoom_ew;
+ Position = globalPosition + new Vector2(GameConfig.TileCellSize, -GameConfig.TileCellSize * 0.5f);
RotationDegrees = 90;
}
}
@@ -91,13 +99,13 @@
if (fogType == PreviewFogType.Aisle)
{
Texture = _previewAisle;
- Position = globalPosition + new Vector2(0, -GameConfig.TileCellSize);
+ Position = globalPosition + new Vector2(0, -GameConfig.TileCellSize * 3);
RotationDegrees = 0;
}
else
{
- Texture = _previewRoom;
- Position = globalPosition + new Vector2(0, GameConfig.TileCellSize);
+ Texture = _previewRoom_n;
+ Position = globalPosition;
RotationDegrees = 180;
}
}
@@ -105,8 +113,8 @@
{
if (fogType == PreviewFogType.Aisle)
{
- Texture = _previewAisle;
- Position = globalPosition;
+ Texture = _previewAisle_s;
+ Position = globalPosition + new Vector2(0, GameConfig.TileCellSize * 0.5f);
RotationDegrees = 180;
}
else
diff --git a/DungeonShooting_Godot/src/framework/map/image/RoomStaticSprite.cs b/DungeonShooting_Godot/src/framework/map/image/RoomStaticSprite.cs
index e3ab686..43a47cb 100644
--- a/DungeonShooting_Godot/src/framework/map/image/RoomStaticSprite.cs
+++ b/DungeonShooting_Godot/src/framework/map/image/RoomStaticSprite.cs
@@ -45,6 +45,7 @@
spriteData.Destroy();
}
data.Clear();
+ return true;
});
_grid.Clear();
QueueFree();
diff --git a/DungeonShooting_Godot/src/framework/map/liquid/LiquidCanvas.cs b/DungeonShooting_Godot/src/framework/map/liquid/LiquidCanvas.cs
index 75550b7..1b1ab92 100644
--- a/DungeonShooting_Godot/src/framework/map/liquid/LiquidCanvas.cs
+++ b/DungeonShooting_Godot/src/framework/map/liquid/LiquidCanvas.cs
@@ -201,6 +201,7 @@
brush.PixelWidth,
Mathf.Abs(Mathf.Sin(offset.Angle() - rotation + Mathf.Pi * 0.5f))
);
+ maxL = Mathf.Max(1, maxL);
var len = offset.Length();
if (len > maxL) //距离太大了, 需要补间
{
diff --git a/DungeonShooting_Godot/src/framework/map/preinstall/ActivityMark.cs b/DungeonShooting_Godot/src/framework/map/preinstall/ActivityMark.cs
index 9516ece..b1e974b 100644
--- a/DungeonShooting_Godot/src/framework/map/preinstall/ActivityMark.cs
+++ b/DungeonShooting_Godot/src/framework/map/preinstall/ActivityMark.cs
@@ -10,7 +10,7 @@
public string Id { get; set; }
///
- /// 刷新位置
+ /// 刷新位置, 单位: 像素
///
public Vector2 Position { get; set; }
@@ -20,7 +20,7 @@
public Dictionary Attr { get; set; }
///
- /// 衍生属性, 可随意修改值
+ /// 衍生属性, 可随意修改值, 通常用于存储随机出来的数据
///
public Dictionary DerivedAttr { get; set; }
diff --git a/DungeonShooting_Godot/src/framework/map/preinstall/PreinstallMarkManager.cs b/DungeonShooting_Godot/src/framework/map/preinstall/PreinstallMarkManager.cs
new file mode 100644
index 0000000..45501bf
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/preinstall/PreinstallMarkManager.cs
@@ -0,0 +1,112 @@
+
+using System.Collections.Generic;
+using Config;
+
+
+public static class PreinstallMarkManager
+{
+ ///
+ /// 随机武器
+ ///
+ public static readonly RandomActivityBase RandomWeapon = new RandomActivityBase()
+ {
+ Id = "$RandomGun",
+ Name = "随机武器",
+ Type = ActivityType.Other,
+ Icon = ResourcePath.resource_sprite_ui_commonIcon_Dice_png,
+ ShowInMapEditor = true
+ };
+
+ ///
+ /// 随机敌人
+ ///
+ public static readonly RandomActivityBase RandomEnemy = new RandomActivityBase()
+ {
+ Id = "$RandomEnemy",
+ Name = "随机敌人",
+ Type = ActivityType.Other,
+ Icon = ResourcePath.resource_sprite_ui_commonIcon_Dice_png,
+ ShowInMapEditor = true
+ };
+
+ ///
+ /// 随机道具
+ ///
+ public static readonly RandomActivityBase RandomProp = new RandomActivityBase()
+ {
+ Id = "$RandomProp",
+ Name = "随机道具",
+ Type = ActivityType.Other,
+ Icon = ResourcePath.resource_sprite_ui_commonIcon_Dice_png,
+ ShowInMapEditor = true
+ };
+
+ private static Dictionary> _cache = new Dictionary>();
+
+ private static bool _init = false;
+
+ public static void Init()
+ {
+ if (_init)return;
+ _init = true;
+ foreach (var activityBase in ExcelConfig.ActivityBase_List)
+ {
+ var type = (ActivityType)activityBase.Type;
+ if (!_cache.TryGetValue(type, out var list))
+ {
+ list = new List();
+ _cache.Add(type, list);
+ }
+ list.Add(activityBase);
+ }
+ }
+
+ ///
+ /// 根据id获取标记配置, 该函数会自动匹配随机标记
+ ///
+ public static ExcelConfig.ActivityBase GetMarkConfig(string id)
+ {
+ if (RandomWeapon.Id == id)
+ {
+ return RandomWeapon;
+ }
+ else if (RandomEnemy.Id == id)
+ {
+ return RandomEnemy;
+ }
+ else if (RandomProp.Id == id)
+ {
+ return RandomProp;
+ }
+
+ ExcelConfig.ActivityBase_Map.TryGetValue(id, out var activityBase);
+ return activityBase;
+ }
+
+ public static List GetMarkConfigsByType(ActivityType type)
+ {
+ if (!_cache.TryGetValue(type, out var arr))
+ {
+ arr = new List();
+ _cache.Add(type, arr);
+ }
+ return arr;
+ }
+
+ ///
+ /// 获取特殊标记名称
+ ///
+ public static string GetSpecialName(SpecialMarkType type)
+ {
+ if (type == SpecialMarkType.BirthPoint)
+ {
+ return "出生标记";
+ }
+ else if (type == SpecialMarkType.OutPoint)
+ {
+ return "出口标记";
+ }
+
+ return string.Empty;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/preinstall/RandomActivityBase.cs b/DungeonShooting_Godot/src/framework/map/preinstall/RandomActivityBase.cs
new file mode 100644
index 0000000..77d16ac
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/preinstall/RandomActivityBase.cs
@@ -0,0 +1,9 @@
+
+using Config;
+
+///
+/// 用于随机生成的物体标记
+///
+public class RandomActivityBase : ExcelConfig.ActivityBase
+{
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs b/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs
index fdc3258..827259a 100644
--- a/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs
+++ b/DungeonShooting_Godot/src/framework/map/preinstall/RoomPreinstall.cs
@@ -80,7 +80,7 @@
///
/// 预处理操作
///
- public void Pretreatment(SeedRandom random)
+ public void Pretreatment(World world)
{
if (_runPretreatment)
{
@@ -111,37 +111,67 @@
else
{
var tempArray = markInfo.MarkList.Select(item => item.Weight).ToArray();
- var index = random.RandomWeight(tempArray);
+ var index = world.Random.RandomWeight(tempArray);
markInfoItem = markInfo.MarkList[index];
}
-
- mark.Id = markInfoItem.Id;
+
+ var activityBase = PreinstallMarkManager.GetMarkConfig(markInfoItem.Id);
mark.Attr = markInfoItem.Attr;
- mark.DerivedAttr = new Dictionary();
mark.VerticalSpeed = markInfoItem.VerticalSpeed;
mark.Altitude = markInfoItem.Altitude;
- mark.ActivityType = (ActivityType)ExcelConfig.ActivityBase_Map[markInfoItem.Id].Type;
-
- if (mark.ActivityType == ActivityType.Enemy) //敌人类型
+
+ if (activityBase is RandomActivityBase) //随机物体
{
- _hsaEnemy = true;
- if (!mark.Attr.TryGetValue("Face", out var face) || face == "0") //随机方向
+ if (markInfoItem.Id == PreinstallMarkManager.RandomWeapon.Id) //随机武器
{
- mark.DerivedAttr.Add("Face",
- random.RandomChoose(
- ((int)FaceDirection.Left).ToString(),
- ((int)FaceDirection.Right).ToString()
- )
- );
+ mark.Id = world.RandomPool.GetRandomWeapon()?.Id;
+ mark.ActivityType = ActivityType.Weapon;
}
- else //指定方向
+ else if (markInfoItem.Id == PreinstallMarkManager.RandomEnemy.Id) //随机敌人
{
- mark.DerivedAttr.Add("Face", face);
+ mark.Id = world.RandomPool.GetRandomEnemy()?.Id;
+ mark.ActivityType = ActivityType.Enemy;
+ }
+ else if (markInfoItem.Id == PreinstallMarkManager.RandomProp.Id) //随机道具
+ {
+ mark.Id = world.RandomPool.GetRandomProp()?.Id;
+ mark.ActivityType = ActivityType.Prop;
+ }
+ else //非随机物体
+ {
+ Debug.LogError("未知的随机物体:" + markInfoItem.Id);
+ continue;
+ }
+ }
+ else
+ {
+ mark.Id = markInfoItem.Id;
+ mark.ActivityType = (ActivityType)activityBase.Type;
+ if (mark.ActivityType == ActivityType.Enemy) //敌人类型
+ {
+ mark.DerivedAttr = new Dictionary();
+ if (!mark.Attr.TryGetValue("Face", out var face) || face == "0") //随机方向
+ {
+ mark.DerivedAttr.Add("Face",
+ world.Random.RandomChoose(
+ ((int)FaceDirection.Left).ToString(),
+ ((int)FaceDirection.Right).ToString()
+ )
+ );
+ }
+ else //指定方向
+ {
+ mark.DerivedAttr.Add("Face", face);
+ }
}
}
}
else if (markInfo.SpecialMarkType == SpecialMarkType.BirthPoint) //玩家出生标记
{
+
+ }
+ else if (markInfo.SpecialMarkType == SpecialMarkType.OutPoint) //出口标记
+ {
}
else
@@ -156,18 +186,42 @@
var pos = markInfo.Position.AsVector2();
var birthRect = markInfo.Size.AsVector2();
var tempPos = new Vector2(
- random.RandomRangeInt((int)(pos.X - birthRect.X / 2), (int)(pos.X + birthRect.X / 2)),
- random.RandomRangeInt((int)(pos.Y - birthRect.Y / 2), (int)(pos.Y + birthRect.Y / 2))
+ world.Random.RandomRangeInt((int)(pos.X - birthRect.X / 2), (int)(pos.X + birthRect.X / 2)),
+ world.Random.RandomRangeInt((int)(pos.Y - birthRect.Y / 2), (int)(pos.Y + birthRect.Y / 2))
);
- //var offset = RoomInfo.RoomSplit.RoomInfo.Position.AsVector2I();
- //mark.Position = RoomInfo.GetWorldPosition() + tempPos - offset;
mark.Position = RoomInfo.ToGlobalPosition(tempPos);
wave.Add(mark);
}
-
- //排序操作
+ }
+
+ //自动填充操作
+ if (RoomPreinstallInfo.AutoFill)
+ {
+ world.RandomPool.FillAutoWave(this);
+ }
+
+ //排序操作
+ foreach (var wave in WaveList)
+ {
wave.Sort((a, b) => (int)(a.DelayTime * 1000 - b.DelayTime * 1000));
}
+ //判断是否有敌人
+ CheckHasEnemy();
+ }
+
+ private void CheckHasEnemy()
+ {
+ foreach (var marks in WaveList)
+ {
+ foreach (var activityMark in marks)
+ {
+ if (activityMark.ActivityType == ActivityType.Enemy)
+ {
+ _hsaEnemy = true;
+ return;
+ }
+ }
+ }
}
///
@@ -372,7 +426,7 @@
//获取物体默认所在层级
private RoomLayerEnum GetDefaultLayer(ActivityMark activityMark)
{
- if (activityMark.ActivityType == ActivityType.Player || activityMark.ActivityType == ActivityType.Enemy)
+ if (activityMark.ActivityType == ActivityType.Player || activityMark.ActivityType == ActivityType.Enemy || activityMark.ActivityType == ActivityType.Treasure)
{
return RoomLayerEnum.YSortLayer;
}
@@ -423,6 +477,10 @@
//初始化物体属性
private void InitAttr(ActivityObject activityObject, ActivityMark activityMark)
{
+ if (activityMark.Attr == null)
+ {
+ return;
+ }
if (activityMark.ActivityType == ActivityType.Weapon) //武器类型
{
var weapon = (Weapon)activityObject;
@@ -438,7 +496,7 @@
else if (activityMark.ActivityType == ActivityType.Enemy) //敌人类型
{
var role = (Role)activityObject;
- if (role is Enemy enemy && activityMark.Attr.TryGetValue("Weapon", out var weaponId)) //使用的武器
+ if (role.WeaponPack.Capacity > 0 && role is Enemy enemy && activityMark.Attr.TryGetValue("Weapon", out var weaponId)) //使用的武器
{
if (!string.IsNullOrEmpty(weaponId))
{
@@ -455,7 +513,7 @@
}
}
- if (activityMark.DerivedAttr.TryGetValue("Face", out var face)) //脸朝向, 应该只有 -1 和 1
+ if (activityMark.DerivedAttr != null && activityMark.DerivedAttr.TryGetValue("Face", out var face)) //脸朝向, 应该只有 -1 和 1
{
var faceDir = int.Parse(face);
role.Face = (FaceDirection)faceDir;
diff --git a/DungeonShooting_Godot/src/framework/map/preinstall/SpecialMarkType.cs b/DungeonShooting_Godot/src/framework/map/preinstall/SpecialMarkType.cs
index 5af5be5..385cff3 100644
--- a/DungeonShooting_Godot/src/framework/map/preinstall/SpecialMarkType.cs
+++ b/DungeonShooting_Godot/src/framework/map/preinstall/SpecialMarkType.cs
@@ -12,4 +12,8 @@
/// 玩家出生点
///
BirthPoint,
+ ///
+ /// 地牢出口
+ ///
+ OutPoint,
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs b/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs
index a420fe5..c346f93 100644
--- a/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs
+++ b/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs
@@ -1,5 +1,6 @@
using System;
+using System.Collections.Generic;
using Godot;
///
@@ -40,6 +41,16 @@
public Vector2I OriginPosition;
///
+ /// 地板所占的地板格子, 单位: 格, 使用时不需要加上 OriginPosition
+ ///
+ public HashSet AisleFloorCell;
+
+ ///
+ /// 地板所占的矩形, 单位: 格, 使用时不需要加上 OriginPosition
+ ///
+ public Rect2I AisleFloorRect;
+
+ ///
/// 与下一道门是否有交叉点
///
public bool HasCross;
@@ -50,16 +61,6 @@
public Vector2I Cross;
///
- /// 占位导航网格
- ///
- public DoorNavigationInfo Navigation;
-
- ///
- /// 连接过道使用的导航网格 (暂未用到)
- ///
- public NavigationPolygonData AisleNavigation;
-
- ///
/// 连接过道使用预览纹理, 用于小地图
///
public ImageTexture AislePreviewTexture;
diff --git a/DungeonShooting_Godot/src/framework/map/room/RoomErrorType.cs b/DungeonShooting_Godot/src/framework/map/room/RoomErrorType.cs
new file mode 100644
index 0000000..510c27b
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/room/RoomErrorType.cs
@@ -0,0 +1,27 @@
+
+///
+/// 房间错误类型
+///
+public enum RoomErrorType
+{
+ ///
+ /// 没有错误
+ ///
+ None = 0,
+ ///
+ /// 空房间
+ ///
+ Empty = 1,
+ ///
+ /// 地图绘制错误
+ ///
+ TileError = 2,
+ ///
+ /// 门区域绘制错误
+ ///
+ DoorAreaError = 3,
+ ///
+ /// 没有预设
+ ///
+ NoPreinstallError = 4
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs b/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs
index f1269ca..0d0e3b2 100644
--- a/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs
+++ b/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs
@@ -8,13 +8,19 @@
///
public class RoomInfo : IDestroy
{
+ public RoomInfo(int id, DungeonRoomType type)
+ {
+ Id = id;
+ RoomType = type;
+ }
+
public RoomInfo(int id, DungeonRoomType type, DungeonRoomSplit roomSplit)
{
Id = id;
RoomType = type;
RoomSplit = roomSplit;
}
-
+
///
/// 房间 id
///
@@ -31,7 +37,7 @@
public int Layer;
///
- /// 生成该房间使用的配置数据
+ /// 生成该房间使用的配置数据, 可能为 null
///
public DungeonRoomSplit RoomSplit;
@@ -106,7 +112,7 @@
public Rect2I OuterRect { get; private set; }
///
- /// 画布占用区域
+ /// 画布占用区域, 单位: 像素
///
public Rect2I CanvasRect { get; private set; }
@@ -135,6 +141,11 @@
///
public Vector2I Waypoints { get; set; }
+ ///
+ /// 在 DungeonGenerator 中是否可以回滚, 如果可以回滚, 那么当前房间就只会有一个 NextRoom
+ ///
+ public bool CanRollback { get; set; } = false;
+
public bool IsDestroyed { get; private set; }
private bool _openDoorFlag = true;
@@ -260,6 +271,10 @@
///
public Vector2I GetOffsetPosition()
{
+ if (RoomSplit == null)
+ {
+ return Vector2I.Zero;
+ }
return RoomSplit.RoomInfo.Position.AsVector2I() * GameConfig.TileCellSize;
}
@@ -302,6 +317,38 @@
{
return Position.Y;
}
+
+ ///
+ /// 获取房间门横轴结束位置, 单位: 格
+ ///
+ public int GetHorizontalDoorEnd()
+ {
+ return Position.X + Size.X - 1;
+ }
+
+ ///
+ /// 获取房间门纵轴结束位置, 单位: 格
+ ///
+ public int GetVerticalDoorEnd()
+ {
+ return Position.Y + Size.Y - 1;
+ }
+
+ ///
+ /// 获取房间门横轴开始位置, 单位: 格
+ ///
+ public int GetHorizontalDoorStart()
+ {
+ return Position.X + 1;
+ }
+
+ ///
+ /// 获取房间门纵轴开始位置, 单位: 格
+ ///
+ public int GetVerticalDoorStart()
+ {
+ return Position.Y + 2;
+ }
///
/// 获取房间宽度, 单位: 像素
@@ -415,7 +462,7 @@
///
public void OnFirstEnter()
{
- if (RoomPreinstall.IsRunWave)
+ if (RoomPreinstall == null || RoomPreinstall.IsRunWave)
{
return;
}
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/DoorAreaInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/DoorAreaInfo.cs
deleted file mode 100644
index fe428b0..0000000
--- a/DungeonShooting_Godot/src/framework/map/serialize/DoorAreaInfo.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-
-using System.Text.Json.Serialization;
-using Godot;
-
-///
-/// 用于描述门生成区域
-///
-public class DoorAreaInfo : IClone
-{
- ///
- /// 门方向
- ///
- [JsonInclude]
- public DoorDirection Direction;
- ///
- /// 起始位置, 相对 tilemap 的横/纵轴原点, 单位: 像素
- ///
- [JsonInclude]
- public int Start = 0;
- ///
- /// 结束位置, 相对 tilemap 的横/纵轴原点, 单位: 像素
- ///
- [JsonInclude]
- public int End = 16;
-
- ///
- /// 起始点坐标, 该坐标为模板场景的世界坐标, 单位: 像素, 不参与序列化与反序列化
- ///
- public Vector2I StartPosition;
- ///
- /// 结束点坐标, 该坐标为模板场景的世界坐标, 单位: 像素, 不参与序列化与反序列化
- ///
- public Vector2I EndPosition;
-
- public DoorAreaInfo()
- {
- }
-
- public DoorAreaInfo(DoorDirection direction, int start, int end)
- {
- Direction = direction;
- Start = start;
- End = end;
- }
-
- ///
- /// 自动计算 startPosition 和 endPosition
- ///
- public void CalcPosition(Vector2I rootPosition, Vector2I rootSize)
- {
- switch (Direction)
- {
- case DoorDirection.E:
- StartPosition = new Vector2I(rootPosition.X, rootPosition.Y + Start);
- EndPosition = new Vector2I(rootPosition.X, rootPosition.Y + End);
- break;
- case DoorDirection.W:
- StartPosition = new Vector2I(rootPosition.X + rootSize.X, rootPosition.Y + Start);
- EndPosition = new Vector2I(rootPosition.X + rootSize.X, rootPosition.Y + End);
- break;
- case DoorDirection.S:
- StartPosition = new Vector2I(rootPosition.X + Start, rootPosition.Y + rootSize.Y);
- EndPosition = new Vector2I(rootPosition.X + End, rootPosition.Y + rootSize.Y);
- break;
- case DoorDirection.N:
- StartPosition = new Vector2I(rootPosition.X + Start, rootPosition.Y);
- EndPosition = new Vector2I(rootPosition.X + End, rootPosition.Y);
- break;
- }
- }
-
- public DoorAreaInfo Clone()
- {
- var data = new DoorAreaInfo();
- data.Start = Start;
- data.End = End;
- data.Direction = Direction;
- return data;
- }
-
-
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomGroup.cs b/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomGroup.cs
deleted file mode 100644
index 142ca79..0000000
--- a/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomGroup.cs
+++ /dev/null
@@ -1,207 +0,0 @@
-
-using System;
-using System.Collections.Generic;
-using System.Text.Json.Serialization;
-using Godot;
-
-///
-/// 房间组数据
-///
-public class DungeonRoomGroup : IClone
-{
- ///
- /// 组名称
- ///
- [JsonInclude]
- public string GroupName;
-
- ///
- /// 普通战斗房间, 进入该房间时会关上门, 并刷出若干波敌人, 消灭所有敌人后开门
- ///
- [JsonInclude]
- public List BattleList = new List();
-
- ///
- /// 起始房间, 由上一层地牢的结束房间进入该房间, 每层包含一个起始房间
- ///
- [JsonInclude]
- public List InletList = new List();
-
- ///
- /// 结束房间, 进入另一层地牢, 每层只是包含一个结束房间
- ///
- [JsonInclude]
- public List OutletList = new List();
-
- ///
- /// boss战房间, 进入房间时会关上没, 刷出boss, 消灭boss后开门
- ///
- [JsonInclude]
- public List BossList = new List();
-
- ///
- /// 奖励房间, 给予玩家武器或者道具奖励的房间
- ///
- [JsonInclude]
- public List RewardList = new List();
-
- ///
- /// 商店, 玩家买卖道具装备的房间
- ///
- [JsonInclude]
- public List ShopList = new List();
-
- ///
- /// 事件房间, 触发剧情或者解锁NPC的房间
- ///
- [JsonInclude]
- public List EventList = new List();
-
- ///
- /// 组包住
- ///
- [JsonInclude]
- public string Remark;
-
- private bool _init = false;
- private Dictionary _weightRandomMap;
- private List _readyBattleList;
-
- ///
- /// 获取所有房间数据
- ///
- public List GetAllRoomList()
- {
- var list = new List();
- list.AddRange(BattleList);
- list.AddRange(InletList);
- list.AddRange(OutletList);
- list.AddRange(BossList);
- list.AddRange(ShopList);
- list.AddRange(RewardList);
- list.AddRange(EventList);
- return list;
- }
-
- ///
- /// 获取指定类型房间集合
- ///
- public List GetRoomList(DungeonRoomType roomType)
- {
- switch (roomType)
- {
- case DungeonRoomType.Battle: return BattleList;
- case DungeonRoomType.Inlet: return InletList;
- case DungeonRoomType.Outlet: return OutletList;
- case DungeonRoomType.Boss: return BossList;
- case DungeonRoomType.Reward: return RewardList;
- case DungeonRoomType.Shop: return ShopList;
- case DungeonRoomType.Event: return EventList;
- }
-
- return null;
- }
-
- ///
- /// 移除一个房间, 返回是否移除成功
- ///
- public bool RemoveRoom(DungeonRoomSplit roomSplit)
- {
- if (BattleList.Remove(roomSplit))
- {
- return true;
- }
- if (InletList.Remove(roomSplit))
- {
- return true;
- }
- if (OutletList.Remove(roomSplit))
- {
- return true;
- }
- if (BossList.Remove(roomSplit))
- {
- return true;
- }
- if (RewardList.Remove(roomSplit))
- {
- return true;
- }
- if (ShopList.Remove(roomSplit))
- {
- return true;
- }
- if (EventList.Remove(roomSplit))
- {
- return true;
- }
-
- return false;
- }
-
- ///
- /// 初始化权重处理
- ///
- public void InitWeight(SeedRandom random)
- {
- if (_init)
- {
- return;
- }
-
- _init = true;
- _weightRandomMap = new Dictionary();
-
- foreach (var roomType in Enum.GetValues())
- {
- InitAdRewardWeight(roomType, random);
- }
- }
-
- private void InitAdRewardWeight(DungeonRoomType roomType, SeedRandom random)
- {
- var dungeonRoomSplits = GetRoomList(roomType);
- var weightRandom = new WeightRandom(random);
- _weightRandomMap.Add(roomType, weightRandom);
-
- var list = new List();
- foreach (var roomSplit in dungeonRoomSplits)
- {
- list.Add(roomSplit.RoomInfo.Weight);
- }
- weightRandom.InitAdRewardWeight(list.ToArray());
- }
-
- ///
- /// 根据房间类型和权重获取随机房间
- ///
- public DungeonRoomSplit GetRandomRoom(DungeonRoomType roomType)
- {
- if (!_init)
- {
- Debug.LogError("未调用DungeonRoomGroup.InitWeight()来初始化权重!");
- return null;
- }
-
- if (_weightRandomMap.TryGetValue(roomType, out var weightRandom))
- {
- return GetRoomList(roomType)[weightRandom.GetRandomIndex()];
- }
-
- return null;
- }
-
- public DungeonRoomGroup Clone()
- {
- var inst = new DungeonRoomGroup();
- inst.GroupName = GroupName;
- inst.BattleList.AddRange(BattleList);
- inst.InletList.AddRange(InletList);
- inst.OutletList.AddRange(OutletList);
- inst.BossList.AddRange(BossList);
- inst.ShopList.AddRange(ShopList);
- inst.RewardList.AddRange(RewardList);
- inst.EventList.AddRange(EventList);
- return inst;
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomInfo.cs
deleted file mode 100644
index 1a6dd9a..0000000
--- a/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomInfo.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-
-using System.Collections.Generic;
-using System.Text.Json.Serialization;
-
-///
-/// 房间配置数据
-///
-public class DungeonRoomInfo
-{
- ///
- /// 房间位置, 在tile坐标系中的位置, 单位: 格
- ///
- [JsonInclude]
- public SerializeVector2 Position;
-
- ///
- /// 房间大小, 在tile坐标系中占用的格子, 单位: 格
- ///
- [JsonInclude]
- public SerializeVector2 Size;
-
- ///
- /// 房间连通门
- ///
- [JsonInclude]
- public List DoorAreaInfos;
-
- ///
- /// 当前房间所属分组的名称
- ///
- [JsonInclude]
- public string GroupName;
-
- ///
- /// 房间类型
- ///
- [JsonInclude]
- public DungeonRoomType RoomType = DungeonRoomType.Battle;
-
- ///
- /// 房间名称
- ///
- [JsonInclude]
- public string RoomName;
-
- ///
- /// 房间权重, 值越大, 生成地牢是越容易出现该房间
- ///
- [JsonInclude]
- public int Weight = ResourceManager.DefaultWeight;
-
- ///
- /// 房间备注
- ///
- [JsonInclude]
- public string Remark;
-
- private List _completionDoorArea;
-
- ///
- /// 获取门区域配置数据, 如果该函数会自动填充未配置的数据
- ///
- public List GetCompletionDoorArea()
- {
- if (_completionDoorArea == null)
- {
- //需要处理 DoorAreaInfos 长度为 0 的房间, 并为其配置默认值
- _completionDoorArea = new List(DoorAreaInfos);
- if (_completionDoorArea.Count == 0)
- {
- _completionDoorArea.Add(new DoorAreaInfo(DoorDirection.N, GameConfig.TileCellSize, ((int)Size.X - 1) * GameConfig.TileCellSize));
- _completionDoorArea.Add(new DoorAreaInfo(DoorDirection.S, GameConfig.TileCellSize, ((int)Size.X - 1) * GameConfig.TileCellSize));
- _completionDoorArea.Add(new DoorAreaInfo(DoorDirection.W, GameConfig.TileCellSize, ((int)Size.Y - 1) * GameConfig.TileCellSize));
- _completionDoorArea.Add(new DoorAreaInfo(DoorDirection.E, GameConfig.TileCellSize, ((int)Size.Y - 1) * GameConfig.TileCellSize));
- }
- }
-
- return _completionDoorArea;
- }
-
- ///
- /// 清除门区域配置数据, 再次调用 GetCompletionDoorArea() 会重新计算 DoorAreaInfo 数据
- ///
- public void ClearCompletionDoorArea()
- {
- if (_completionDoorArea != null)
- {
- _completionDoorArea.Clear();
- _completionDoorArea = null;
- }
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomSplit.cs b/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomSplit.cs
deleted file mode 100644
index bc44b94..0000000
--- a/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomSplit.cs
+++ /dev/null
@@ -1,203 +0,0 @@
-
-using System.Collections.Generic;
-using System.IO;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-using Godot;
-
-///
-/// 房间配置文件相关信息, 将会在 RoomConfig.json 中汇总
-///
-public class DungeonRoomSplit
-{
- ///
- /// 房间异常类型
- ///
- [JsonInclude]
- public RoomErrorType ErrorType;
-
- ///
- /// 该房间的文件夹路径
- ///
- [JsonInclude]
- public string Path;
-
- ///
- /// 房间配置路径
- ///
- [JsonIgnore]
- public string RoomPath => Path + "/RoomInfo.json";
-
- ///
- /// 房间地块配置数据
- ///
- [JsonIgnore]
- public string TilePath => Path + "/TileInfo.json";
-
- ///
- /// 房间预设配置数据
- ///
- [JsonIgnore]
- public string PreinstallPath => Path + "/Preinstall.json";
-
- ///
- /// 预览图路径
- ///
- [JsonIgnore]
- public string PreviewPath => Path + "/Preview.png";
-
- ///
- /// 房间配置数据, 第一次获取会在资源中加载数据
- ///
- [JsonIgnore]
- public DungeonRoomInfo RoomInfo
- {
- get
- {
- if (_roomInfo == null && RoomPath != null)
- {
- ReloadRoomInfo();
- }
-
- return _roomInfo;
- }
- set => _roomInfo = value;
- }
-
- private DungeonRoomInfo _roomInfo;
-
- ///
- /// 房间地块配置数据
- ///
- [JsonIgnore]
- public DungeonTileInfo TileInfo
- {
- get
- {
- if (_tileInfo == null && TilePath != null)
- {
- ReloadTileInfo();
- }
-
- return _tileInfo;
- }
- set => _tileInfo = value;
- }
-
- private DungeonTileInfo _tileInfo;
-
- ///
- /// 房间预设数据
- ///
- [JsonIgnore]
- public List Preinstall
- {
- get
- {
- if (_preinstall == null && PreinstallPath != null)
- {
- ReloadPreinstall();
- }
-
- return _preinstall;
- }
- set => _preinstall = value;
- }
-
- private List _preinstall;
-
- ///
- /// 预览图
- ///
- [JsonIgnore]
- public Texture2D PreviewImage
- {
- get
- {
- if (_previewImage == null)
- {
- ReloadPreviewImage();
- }
-
- return _previewImage;
- }
- set
- {
- if (_previewImage != null)
- {
- _previewImage.Dispose();
- }
-
- _previewImage = value;
- }
- }
-
- private Texture2D _previewImage;
-
- ///
- /// 重新加载房间数据
- ///
- public void ReloadRoomInfo()
- {
- var asText = ResourceManager.LoadText("res://" + RoomPath);
- _roomInfo = JsonSerializer.Deserialize(asText);
- }
-
- ///
- /// 重新加载房间地块配置数据
- ///
- public void ReloadTileInfo()
- {
- var asText = ResourceManager.LoadText("res://" + TilePath);
- _tileInfo = JsonSerializer.Deserialize(asText);
- }
-
- ///
- /// 重新加载房间预设数据
- ///
- public void ReloadPreinstall()
- {
- var asText = ResourceManager.LoadText("res://" + PreinstallPath);
- _preinstall = JsonSerializer.Deserialize>(asText);
- }
-
- ///
- /// 重新加载预览图片
- ///
- public void ReloadPreviewImage()
- {
- if (_previewImage != null)
- {
- _previewImage.Dispose();
- }
-
- if (File.Exists(PreviewPath))
- {
- var bytes = File.ReadAllBytes(PreviewPath);
-
- var image = Image.Create(GameConfig.PreviewImageSize, GameConfig.PreviewImageSize, false, Image.Format.Rgb8);
- image.LoadPngFromBuffer(bytes);
- _previewImage = ImageTexture.CreateFromImage(image);
- }
- }
-
- public override bool Equals(object obj)
- {
- if (obj == null)
- {
- return false;
- }
-
- if (obj is DungeonRoomSplit roomSplit)
- {
- return roomSplit.Path == Path;
- }
-
- return this == obj;
- }
-
- public override int GetHashCode()
- {
- return Path.GetHashCode();
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/DungeonTileInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/DungeonTileInfo.cs
deleted file mode 100644
index c4003b4..0000000
--- a/DungeonShooting_Godot/src/framework/map/serialize/DungeonTileInfo.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-
-using System.Collections.Generic;
-using System.Text.Json.Serialization;
-
-public class DungeonTileInfo
-{
- ///
- /// 导航数据
- ///
- [JsonInclude]
- public List NavigationList;
-
- ///
- /// 底层数据, 五个一组, 分别为: 地图x坐标, 地图y坐标, 资源id, 图集x坐标, 图集y坐标
- ///
- [JsonInclude]
- public List Floor;
-
- ///
- /// 中层数据, 五个一组, 分别为: 地图x坐标, 地图y坐标, 资源id, 图集x坐标, 图集y坐标
- ///
- [JsonInclude]
- public List Middle;
-
- ///
- /// 顶层数据, 五个一组, 分别为: 地图x坐标, 地图y坐标, 资源id, 图集x坐标, 图集y坐标
- ///
- [JsonInclude]
- public List Top;
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/MarkInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/MarkInfo.cs
deleted file mode 100644
index 41bdd08..0000000
--- a/DungeonShooting_Godot/src/framework/map/serialize/MarkInfo.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-
-using System.Collections.Generic;
-using System.Text.Json.Serialization;
-
-///
-/// 标记数据
-///
-public class MarkInfo
-{
- ///
- /// 所在坐标
- ///
- [JsonInclude]
- public SerializeVector2 Position;
-
- ///
- /// 区域大小
- ///
- [JsonInclude]
- public SerializeVector2 Size;
-
- ///
- /// 特殊标记类型
- ///
- [JsonInclude]
- public SpecialMarkType SpecialMarkType = SpecialMarkType.Normal;
-
- ///
- /// 延时时间, 单位: 秒
- ///
- [JsonInclude]
- public float DelayTime;
-
- ///
- /// 标记列表数据
- ///
- [JsonInclude]
- public List MarkList;
-
- ///
- /// 从指定 MarkInfo 克隆数据, 浅拷贝
- ///
- public void CloneFrom(MarkInfo mark)
- {
- Position = mark.Position;
- Size = mark.Size;
- DelayTime = mark.DelayTime;
- MarkList = mark.MarkList;
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/MarkInfoItem.cs b/DungeonShooting_Godot/src/framework/map/serialize/MarkInfoItem.cs
deleted file mode 100644
index 6e38c93..0000000
--- a/DungeonShooting_Godot/src/framework/map/serialize/MarkInfoItem.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-
-using System.Collections.Generic;
-using System.Text.Json.Serialization;
-
-///
-/// 标记项数据
-///
-public class MarkInfoItem
-{
- ///
- /// 物体Id
- ///
- [JsonInclude]
- public string Id;
-
- ///
- /// 权重
- ///
- [JsonInclude]
- public int Weight;
-
- ///
- /// 额外属性
- ///
- [JsonInclude]
- public Dictionary Attr;
-
- ///
- /// 物体初始海拔高度
- ///
- [JsonInclude]
- public int Altitude;
-
- ///
- /// 物体初始纵轴速度
- ///
- [JsonInclude]
- public float VerticalSpeed;
-
- ///
- /// 所属标记类型
- ///
- [JsonIgnore]
- public SpecialMarkType SpecialMarkType = SpecialMarkType.Normal;
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/NavigationPolygonData.cs b/DungeonShooting_Godot/src/framework/map/serialize/NavigationPolygonData.cs
deleted file mode 100644
index 460e2b2..0000000
--- a/DungeonShooting_Godot/src/framework/map/serialize/NavigationPolygonData.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-
-using System.Collections.Generic;
-using System.Text.Json.Serialization;
-using Godot;
-
-public enum NavigationPolygonType
-{
- ///
- /// 外轮廓
- ///
- Out,
- ///
- /// 内轮廓
- ///
- In,
-}
-
-///
-/// 描述导航多边形数据
-///
-public class NavigationPolygonData
-{
- ///
- /// 导航轮廓类型
- ///
- [JsonInclude]
- public NavigationPolygonType Type;
-
- ///
- /// 多边形的顶点, 两个为一组, 单位: 像素, 需要获取转为 Vector2[] 的值请调用 GetPoints() 函数
- ///
- [JsonInclude]
- public List Points;
-
- private Vector2[] _pointVector2Array;
-
- public NavigationPolygonData()
- {
- }
-
- public NavigationPolygonData(NavigationPolygonType type)
- {
- Type = type;
- }
-
- ///
- /// 读取所有的坐标点, 单位: 像素
- ///
- public Vector2[] GetPoints()
- {
- if (_pointVector2Array == null)
- {
- if (Points == null)
- {
- return null;
- }
-
- _pointVector2Array = new Vector2[Points.Count / 2];
- for (var i = 0; i < Points.Count; i += 2)
- {
- _pointVector2Array[i / 2] = new Vector2(Points[i], Points[i + 1]);
- }
- }
-
- return _pointVector2Array;
- }
-
- ///
- /// 设置所有的坐标点
- ///
- public void SetPoints(Vector2[] array)
- {
- _pointVector2Array = array;
- Points = new List();
- foreach (var pos in array)
- {
- Points.Add(pos.X);
- Points.Add(pos.Y);
- }
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/RoomErrorType.cs b/DungeonShooting_Godot/src/framework/map/serialize/RoomErrorType.cs
deleted file mode 100644
index 510c27b..0000000
--- a/DungeonShooting_Godot/src/framework/map/serialize/RoomErrorType.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-
-///
-/// 房间错误类型
-///
-public enum RoomErrorType
-{
- ///
- /// 没有错误
- ///
- None = 0,
- ///
- /// 空房间
- ///
- Empty = 1,
- ///
- /// 地图绘制错误
- ///
- TileError = 2,
- ///
- /// 门区域绘制错误
- ///
- DoorAreaError = 3,
- ///
- /// 没有预设
- ///
- NoPreinstallError = 4
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/RoomPreinstallInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/RoomPreinstallInfo.cs
deleted file mode 100644
index 7f35576..0000000
--- a/DungeonShooting_Godot/src/framework/map/serialize/RoomPreinstallInfo.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-
-using System.Collections.Generic;
-using System.Text.Json.Serialization;
-
-///
-/// 房间预设数据
-///
-public class RoomPreinstallInfo
-{
- ///
- /// 预设名称
- ///
- [JsonInclude]
- public string Name;
-
- ///
- /// 预设权重
- ///
- [JsonInclude]
- public int Weight;
-
- ///
- /// 预设备注
- ///
- [JsonInclude]
- public string Remark;
-
- ///
- /// 波数数据
- ///
- [JsonInclude]
- public List> WaveList;
-
- ///
- /// 初始化波数据
- ///
- public void InitWaveList()
- {
- WaveList = new List>
- {
- new List()
- };
- }
-
- ///
- /// 初始化特殊标记
- ///
- public void InitSpecialMark(DungeonRoomType roomType)
- {
- if (roomType == DungeonRoomType.Inlet) //初始房间
- {
- var preloading = WaveList[0];
- //玩家标记
- var markInfo = new MarkInfo();
- markInfo.Position = new SerializeVector2();
- markInfo.Size = new SerializeVector2();
- markInfo.SpecialMarkType = SpecialMarkType.BirthPoint;
- markInfo.MarkList = new List();
- preloading.Add(markInfo);
- }
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/room/DoorAreaInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/room/DoorAreaInfo.cs
new file mode 100644
index 0000000..fe428b0
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/room/DoorAreaInfo.cs
@@ -0,0 +1,82 @@
+
+using System.Text.Json.Serialization;
+using Godot;
+
+///
+/// 用于描述门生成区域
+///
+public class DoorAreaInfo : IClone
+{
+ ///
+ /// 门方向
+ ///
+ [JsonInclude]
+ public DoorDirection Direction;
+ ///
+ /// 起始位置, 相对 tilemap 的横/纵轴原点, 单位: 像素
+ ///
+ [JsonInclude]
+ public int Start = 0;
+ ///
+ /// 结束位置, 相对 tilemap 的横/纵轴原点, 单位: 像素
+ ///
+ [JsonInclude]
+ public int End = 16;
+
+ ///
+ /// 起始点坐标, 该坐标为模板场景的世界坐标, 单位: 像素, 不参与序列化与反序列化
+ ///
+ public Vector2I StartPosition;
+ ///
+ /// 结束点坐标, 该坐标为模板场景的世界坐标, 单位: 像素, 不参与序列化与反序列化
+ ///
+ public Vector2I EndPosition;
+
+ public DoorAreaInfo()
+ {
+ }
+
+ public DoorAreaInfo(DoorDirection direction, int start, int end)
+ {
+ Direction = direction;
+ Start = start;
+ End = end;
+ }
+
+ ///
+ /// 自动计算 startPosition 和 endPosition
+ ///
+ public void CalcPosition(Vector2I rootPosition, Vector2I rootSize)
+ {
+ switch (Direction)
+ {
+ case DoorDirection.E:
+ StartPosition = new Vector2I(rootPosition.X, rootPosition.Y + Start);
+ EndPosition = new Vector2I(rootPosition.X, rootPosition.Y + End);
+ break;
+ case DoorDirection.W:
+ StartPosition = new Vector2I(rootPosition.X + rootSize.X, rootPosition.Y + Start);
+ EndPosition = new Vector2I(rootPosition.X + rootSize.X, rootPosition.Y + End);
+ break;
+ case DoorDirection.S:
+ StartPosition = new Vector2I(rootPosition.X + Start, rootPosition.Y + rootSize.Y);
+ EndPosition = new Vector2I(rootPosition.X + End, rootPosition.Y + rootSize.Y);
+ break;
+ case DoorDirection.N:
+ StartPosition = new Vector2I(rootPosition.X + Start, rootPosition.Y);
+ EndPosition = new Vector2I(rootPosition.X + End, rootPosition.Y);
+ break;
+ }
+ }
+
+ public DoorAreaInfo Clone()
+ {
+ var data = new DoorAreaInfo();
+ data.Start = Start;
+ data.End = End;
+ data.Direction = Direction;
+ return data;
+ }
+
+
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomGroup.cs b/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomGroup.cs
new file mode 100644
index 0000000..b6d55f2
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomGroup.cs
@@ -0,0 +1,214 @@
+
+using System;
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+using Godot;
+
+///
+/// 房间组数据
+///
+public class DungeonRoomGroup : IClone
+{
+ ///
+ /// 组名称
+ ///
+ [JsonInclude]
+ public string GroupName;
+
+ ///
+ /// 图块集
+ ///
+ [JsonInclude]
+ public string TileSet;
+
+ ///
+ /// 普通战斗房间, 进入该房间时会关上门, 并刷出若干波敌人, 消灭所有敌人后开门
+ ///
+ [JsonInclude]
+ public List BattleList = new List();
+
+ ///
+ /// 起始房间, 由上一层地牢的结束房间进入该房间, 每层包含一个起始房间
+ ///
+ [JsonInclude]
+ public List InletList = new List();
+
+ ///
+ /// 结束房间, 进入另一层地牢, 每层只是包含一个结束房间
+ ///
+ [JsonInclude]
+ public List OutletList = new List();
+
+ ///
+ /// boss战房间, 进入房间时会关上没, 刷出boss, 消灭boss后开门
+ ///
+ [JsonInclude]
+ public List BossList = new List();
+
+ ///
+ /// 奖励房间, 给予玩家武器或者道具奖励的房间
+ ///
+ [JsonInclude]
+ public List RewardList = new List();
+
+ ///
+ /// 商店, 玩家买卖道具装备的房间
+ ///
+ [JsonInclude]
+ public List ShopList = new List();
+
+ ///
+ /// 事件房间, 触发剧情或者解锁NPC的房间
+ ///
+ [JsonInclude]
+ public List EventList = new List();
+
+ ///
+ /// 组包住
+ ///
+ [JsonInclude]
+ public string Remark;
+
+ private bool _init = false;
+ private Dictionary _weightRandomMap;
+
+ ///
+ /// 获取所有房间数据
+ ///
+ public List GetAllRoomList()
+ {
+ var list = new List();
+ list.AddRange(BattleList);
+ list.AddRange(InletList);
+ list.AddRange(OutletList);
+ list.AddRange(BossList);
+ list.AddRange(ShopList);
+ list.AddRange(RewardList);
+ list.AddRange(EventList);
+ return list;
+ }
+
+ ///
+ /// 获取指定类型房间集合
+ ///
+ public List GetRoomList(DungeonRoomType roomType)
+ {
+ switch (roomType)
+ {
+ case DungeonRoomType.Battle: return BattleList;
+ case DungeonRoomType.Inlet: return InletList;
+ case DungeonRoomType.Outlet: return OutletList;
+ case DungeonRoomType.Boss: return BossList;
+ case DungeonRoomType.Reward: return RewardList;
+ case DungeonRoomType.Shop: return ShopList;
+ case DungeonRoomType.Event: return EventList;
+ }
+
+ return null;
+ }
+
+ ///
+ /// 移除一个房间, 返回是否移除成功
+ ///
+ public bool RemoveRoom(DungeonRoomSplit roomSplit)
+ {
+ if (BattleList.Remove(roomSplit))
+ {
+ return true;
+ }
+ if (InletList.Remove(roomSplit))
+ {
+ return true;
+ }
+ if (OutletList.Remove(roomSplit))
+ {
+ return true;
+ }
+ if (BossList.Remove(roomSplit))
+ {
+ return true;
+ }
+ if (RewardList.Remove(roomSplit))
+ {
+ return true;
+ }
+ if (ShopList.Remove(roomSplit))
+ {
+ return true;
+ }
+ if (EventList.Remove(roomSplit))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ ///
+ /// 初始化权重处理
+ ///
+ public void InitWeight(SeedRandom random)
+ {
+ if (_init)
+ {
+ return;
+ }
+
+ _init = true;
+ _weightRandomMap = new Dictionary();
+
+ foreach (var roomType in Enum.GetValues())
+ {
+ if (roomType == DungeonRoomType.None) continue;
+ InitAdRewardWeight(roomType, random);
+ }
+ }
+
+ private void InitAdRewardWeight(DungeonRoomType roomType, SeedRandom random)
+ {
+ var dungeonRoomSplits = GetRoomList(roomType);
+ var weightRandom = new WeightRandom(random);
+ _weightRandomMap.Add(roomType, weightRandom);
+
+ var list = new List();
+ foreach (var roomSplit in dungeonRoomSplits)
+ {
+ list.Add(roomSplit.RoomInfo.Weight);
+ }
+ weightRandom.InitAdRewardWeight(list.ToArray());
+ }
+
+ ///
+ /// 根据房间类型和权重获取随机房间
+ ///
+ public DungeonRoomSplit GetRandomRoom(DungeonRoomType roomType)
+ {
+ if (!_init)
+ {
+ Debug.LogError("未调用DungeonRoomGroup.InitWeight()来初始化权重!");
+ return null;
+ }
+
+ if (_weightRandomMap.TryGetValue(roomType, out var weightRandom))
+ {
+ return GetRoomList(roomType)[weightRandom.GetRandomIndex()];
+ }
+
+ return null;
+ }
+
+ public DungeonRoomGroup Clone()
+ {
+ var inst = new DungeonRoomGroup();
+ inst.GroupName = GroupName;
+ inst.TileSet = TileSet;
+ inst.BattleList.AddRange(BattleList);
+ inst.InletList.AddRange(InletList);
+ inst.OutletList.AddRange(OutletList);
+ inst.BossList.AddRange(BossList);
+ inst.ShopList.AddRange(ShopList);
+ inst.RewardList.AddRange(RewardList);
+ inst.EventList.AddRange(EventList);
+ return inst;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomInfo.cs
new file mode 100644
index 0000000..a5a220f
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomInfo.cs
@@ -0,0 +1,99 @@
+
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+
+///
+/// 房间配置数据
+///
+public class DungeonRoomInfo
+{
+ ///
+ /// 房间位置, 在tile坐标系中的位置, 单位: 格
+ ///
+ [JsonInclude]
+ public SerializeVector2 Position;
+
+ ///
+ /// 房间大小, 在tile坐标系中占用的格子, 单位: 格
+ ///
+ [JsonInclude]
+ public SerializeVector2 Size;
+
+ ///
+ /// 房间连通门
+ ///
+ [JsonInclude]
+ public List DoorAreaInfos;
+
+ ///
+ /// 当前房间所属分组的名称
+ ///
+ [JsonInclude]
+ public string GroupName;
+
+ ///
+ /// 房间类型
+ ///
+ [JsonInclude]
+ public DungeonRoomType RoomType = DungeonRoomType.Battle;
+
+ ///
+ /// 房间名称
+ ///
+ [JsonInclude]
+ public string RoomName;
+
+ ///
+ /// 房间权重, 值越大, 生成地牢是越容易出现该房间
+ ///
+ [JsonInclude]
+ public int Weight = ResourceManager.DefaultWeight;
+
+ ///
+ /// 房间备注
+ ///
+ [JsonInclude]
+ public string Remark;
+
+ private List _completionDoorArea;
+
+ ///
+ /// 获取门区域配置数据, 如果该函数会自动填充未配置的数据
+ ///
+ public List GetCompletionDoorArea()
+ {
+ if (_completionDoorArea == null)
+ {
+ //需要处理 DoorAreaInfos 长度为 0 的房间, 并为其配置默认值
+ _completionDoorArea = new List(DoorAreaInfos);
+ if (_completionDoorArea.Count == 0)
+ {
+ _completionDoorArea.Add(new DoorAreaInfo(DoorDirection.N, 0, ((int)Size.X - 4) * GameConfig.TileCellSize));
+ _completionDoorArea.Add(new DoorAreaInfo(DoorDirection.S, 0, ((int)Size.X - 4) * GameConfig.TileCellSize));
+ _completionDoorArea.Add(new DoorAreaInfo(DoorDirection.W, 0, ((int)Size.Y - 5) * GameConfig.TileCellSize));
+ _completionDoorArea.Add(new DoorAreaInfo(DoorDirection.E, 0, ((int)Size.Y - 5) * GameConfig.TileCellSize));
+ }
+ }
+
+ return _completionDoorArea;
+ }
+
+ ///
+ /// 清除门区域配置数据, 再次调用 GetCompletionDoorArea() 会重新计算 DoorAreaInfo 数据
+ ///
+ public void ClearCompletionDoorArea()
+ {
+ if (_completionDoorArea != null)
+ {
+ _completionDoorArea.Clear();
+ _completionDoorArea = null;
+ }
+ }
+
+ public void InitData()
+ {
+ Size = new SerializeVector2();
+ Position = new SerializeVector2();
+ DoorAreaInfos = new List();
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomSplit.cs b/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomSplit.cs
new file mode 100644
index 0000000..bc44b94
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonRoomSplit.cs
@@ -0,0 +1,203 @@
+
+using System.Collections.Generic;
+using System.IO;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Godot;
+
+///
+/// 房间配置文件相关信息, 将会在 RoomConfig.json 中汇总
+///
+public class DungeonRoomSplit
+{
+ ///
+ /// 房间异常类型
+ ///
+ [JsonInclude]
+ public RoomErrorType ErrorType;
+
+ ///
+ /// 该房间的文件夹路径
+ ///
+ [JsonInclude]
+ public string Path;
+
+ ///
+ /// 房间配置路径
+ ///
+ [JsonIgnore]
+ public string RoomPath => Path + "/RoomInfo.json";
+
+ ///
+ /// 房间地块配置数据
+ ///
+ [JsonIgnore]
+ public string TilePath => Path + "/TileInfo.json";
+
+ ///
+ /// 房间预设配置数据
+ ///
+ [JsonIgnore]
+ public string PreinstallPath => Path + "/Preinstall.json";
+
+ ///
+ /// 预览图路径
+ ///
+ [JsonIgnore]
+ public string PreviewPath => Path + "/Preview.png";
+
+ ///
+ /// 房间配置数据, 第一次获取会在资源中加载数据
+ ///
+ [JsonIgnore]
+ public DungeonRoomInfo RoomInfo
+ {
+ get
+ {
+ if (_roomInfo == null && RoomPath != null)
+ {
+ ReloadRoomInfo();
+ }
+
+ return _roomInfo;
+ }
+ set => _roomInfo = value;
+ }
+
+ private DungeonRoomInfo _roomInfo;
+
+ ///
+ /// 房间地块配置数据
+ ///
+ [JsonIgnore]
+ public DungeonTileInfo TileInfo
+ {
+ get
+ {
+ if (_tileInfo == null && TilePath != null)
+ {
+ ReloadTileInfo();
+ }
+
+ return _tileInfo;
+ }
+ set => _tileInfo = value;
+ }
+
+ private DungeonTileInfo _tileInfo;
+
+ ///
+ /// 房间预设数据
+ ///
+ [JsonIgnore]
+ public List Preinstall
+ {
+ get
+ {
+ if (_preinstall == null && PreinstallPath != null)
+ {
+ ReloadPreinstall();
+ }
+
+ return _preinstall;
+ }
+ set => _preinstall = value;
+ }
+
+ private List _preinstall;
+
+ ///
+ /// 预览图
+ ///
+ [JsonIgnore]
+ public Texture2D PreviewImage
+ {
+ get
+ {
+ if (_previewImage == null)
+ {
+ ReloadPreviewImage();
+ }
+
+ return _previewImage;
+ }
+ set
+ {
+ if (_previewImage != null)
+ {
+ _previewImage.Dispose();
+ }
+
+ _previewImage = value;
+ }
+ }
+
+ private Texture2D _previewImage;
+
+ ///
+ /// 重新加载房间数据
+ ///
+ public void ReloadRoomInfo()
+ {
+ var asText = ResourceManager.LoadText("res://" + RoomPath);
+ _roomInfo = JsonSerializer.Deserialize(asText);
+ }
+
+ ///
+ /// 重新加载房间地块配置数据
+ ///
+ public void ReloadTileInfo()
+ {
+ var asText = ResourceManager.LoadText("res://" + TilePath);
+ _tileInfo = JsonSerializer.Deserialize(asText);
+ }
+
+ ///
+ /// 重新加载房间预设数据
+ ///
+ public void ReloadPreinstall()
+ {
+ var asText = ResourceManager.LoadText("res://" + PreinstallPath);
+ _preinstall = JsonSerializer.Deserialize>(asText);
+ }
+
+ ///
+ /// 重新加载预览图片
+ ///
+ public void ReloadPreviewImage()
+ {
+ if (_previewImage != null)
+ {
+ _previewImage.Dispose();
+ }
+
+ if (File.Exists(PreviewPath))
+ {
+ var bytes = File.ReadAllBytes(PreviewPath);
+
+ var image = Image.Create(GameConfig.PreviewImageSize, GameConfig.PreviewImageSize, false, Image.Format.Rgb8);
+ image.LoadPngFromBuffer(bytes);
+ _previewImage = ImageTexture.CreateFromImage(image);
+ }
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj == null)
+ {
+ return false;
+ }
+
+ if (obj is DungeonRoomSplit roomSplit)
+ {
+ return roomSplit.Path == Path;
+ }
+
+ return this == obj;
+ }
+
+ public override int GetHashCode()
+ {
+ return Path.GetHashCode();
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonTileInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonTileInfo.cs
new file mode 100644
index 0000000..9e97d81
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/room/DungeonTileInfo.cs
@@ -0,0 +1,73 @@
+
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+
+public class DungeonTileInfo
+{
+ ///
+ /// 导航顶点数据
+ ///
+ [JsonInclude]
+ public List NavigationVertices;
+
+ ///
+ /// 导航多边形数据
+ ///
+ [JsonInclude]
+ public List NavigationPolygon;
+
+ ///
+ /// 底层数据, 四个一组, 分别是: 地图x坐标, 地图y坐标, Terrain 的 bit, Terrain 的 type
+ ///
+ [JsonInclude]
+ public List Floor;
+
+ ///
+ /// 自定义底层1, 数据五个一组, 分别为: 地图x坐标, 地图y坐标, 资源id, 图集x坐标, 图集y坐标
+ ///
+ [JsonInclude]
+ public List CustomFloor1;
+
+ ///
+ /// 自定义底层2, 数据五个一组, 分别为: 地图x坐标, 地图y坐标, 资源id, 图集x坐标, 图集y坐标
+ ///
+ [JsonInclude]
+ public List CustomFloor2;
+
+ ///
+ /// 自定义底层3, 数据五个一组, 分别为: 地图x坐标, 地图y坐标, 资源id, 图集x坐标, 图集y坐标
+ ///
+ [JsonInclude]
+ public List CustomFloor3;
+
+ ///
+ /// 自定义中层1, 数据五个一组, 分别为: 地图x坐标, 地图y坐标, 资源id, 图集x坐标, 图集y坐标
+ ///
+ [JsonInclude]
+ public List CustomMiddle1;
+
+ ///
+ /// 自定义中层2, 数据五个一组, 分别为: 地图x坐标, 地图y坐标, 资源id, 图集x坐标, 图集y坐标
+ ///
+ [JsonInclude]
+ public List CustomMiddle2;
+
+ ///
+ /// 自定义顶层, 数据五个一组, 分别为: 地图x坐标, 地图y坐标, 资源id, 图集x坐标, 图集y坐标
+ ///
+ [JsonInclude]
+ public List CustomTop;
+
+ public void InitData()
+ {
+ NavigationVertices = new List();
+ NavigationPolygon = new List();
+ Floor = new List();
+ CustomFloor1 = new List();
+ CustomFloor2 = new List();
+ CustomFloor3 = new List();
+ CustomMiddle1 = new List();
+ CustomMiddle2 = new List();
+ CustomTop = new List();
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/room/LayerData.cs b/DungeonShooting_Godot/src/framework/map/serialize/room/LayerData.cs
new file mode 100644
index 0000000..65476ae
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/room/LayerData.cs
@@ -0,0 +1,23 @@
+
+using System.Text.Json.Serialization;
+
+///
+/// 层级数据
+///
+public class LayerData
+{
+ ///
+ /// 层级名称
+ ///
+ [JsonInclude] public string Name;
+
+ ///
+ /// 层级
+ ///
+ [JsonInclude] public uint Layer;
+
+ ///
+ /// 是否可见(仅在编辑器中)
+ ///
+ [JsonInclude] public bool Visible;
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/room/MarkInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/room/MarkInfo.cs
new file mode 100644
index 0000000..41bdd08
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/room/MarkInfo.cs
@@ -0,0 +1,50 @@
+
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+
+///
+/// 标记数据
+///
+public class MarkInfo
+{
+ ///
+ /// 所在坐标
+ ///
+ [JsonInclude]
+ public SerializeVector2 Position;
+
+ ///
+ /// 区域大小
+ ///
+ [JsonInclude]
+ public SerializeVector2 Size;
+
+ ///
+ /// 特殊标记类型
+ ///
+ [JsonInclude]
+ public SpecialMarkType SpecialMarkType = SpecialMarkType.Normal;
+
+ ///
+ /// 延时时间, 单位: 秒
+ ///
+ [JsonInclude]
+ public float DelayTime;
+
+ ///
+ /// 标记列表数据
+ ///
+ [JsonInclude]
+ public List MarkList;
+
+ ///
+ /// 从指定 MarkInfo 克隆数据, 浅拷贝
+ ///
+ public void CloneFrom(MarkInfo mark)
+ {
+ Position = mark.Position;
+ Size = mark.Size;
+ DelayTime = mark.DelayTime;
+ MarkList = mark.MarkList;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/room/MarkInfoItem.cs b/DungeonShooting_Godot/src/framework/map/serialize/room/MarkInfoItem.cs
new file mode 100644
index 0000000..6e38c93
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/room/MarkInfoItem.cs
@@ -0,0 +1,45 @@
+
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+
+///
+/// 标记项数据
+///
+public class MarkInfoItem
+{
+ ///
+ /// 物体Id
+ ///
+ [JsonInclude]
+ public string Id;
+
+ ///
+ /// 权重
+ ///
+ [JsonInclude]
+ public int Weight;
+
+ ///
+ /// 额外属性
+ ///
+ [JsonInclude]
+ public Dictionary Attr;
+
+ ///
+ /// 物体初始海拔高度
+ ///
+ [JsonInclude]
+ public int Altitude;
+
+ ///
+ /// 物体初始纵轴速度
+ ///
+ [JsonInclude]
+ public float VerticalSpeed;
+
+ ///
+ /// 所属标记类型
+ ///
+ [JsonIgnore]
+ public SpecialMarkType SpecialMarkType = SpecialMarkType.Normal;
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/room/RoomPreinstallInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/room/RoomPreinstallInfo.cs
new file mode 100644
index 0000000..2cb7c7f
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/room/RoomPreinstallInfo.cs
@@ -0,0 +1,77 @@
+
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+
+///
+/// 房间预设数据
+///
+public class RoomPreinstallInfo
+{
+ ///
+ /// 预设名称
+ ///
+ [JsonInclude]
+ public string Name;
+
+ ///
+ /// 预设权重
+ ///
+ [JsonInclude]
+ public int Weight;
+
+ ///
+ /// 预设备注
+ ///
+ [JsonInclude]
+ public string Remark;
+
+ ///
+ /// 是否自动填充数据
+ ///
+ [JsonInclude]
+ public bool AutoFill;
+
+ ///
+ /// 波数数据
+ ///
+ [JsonInclude]
+ public List> WaveList;
+
+ ///
+ /// 初始化波数据
+ ///
+ public void InitWaveList()
+ {
+ WaveList = new List>
+ {
+ new List()
+ };
+ }
+
+ ///
+ /// 初始化特殊标记
+ ///
+ public void InitSpecialMark(DungeonRoomType roomType)
+ {
+ var type = SpecialMarkType.Normal;
+ if (roomType == DungeonRoomType.Inlet) //初始房间
+ {
+ type = SpecialMarkType.BirthPoint;
+ }
+ else if (roomType == DungeonRoomType.Outlet) //结束房间
+ {
+ type = SpecialMarkType.OutPoint;
+ }
+
+ if (type != SpecialMarkType.Normal)
+ {
+ var preloading = WaveList[0];
+ var markInfo = new MarkInfo();
+ markInfo.Position = new SerializeVector2();
+ markInfo.Size = new SerializeVector2();
+ markInfo.SpecialMarkType = type;
+ markInfo.MarkList = new List();
+ preloading.Add(markInfo);
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileCombinationInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileCombinationInfo.cs
new file mode 100644
index 0000000..5f3e619
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileCombinationInfo.cs
@@ -0,0 +1,54 @@
+
+using System.Text.Json.Serialization;
+
+///
+/// 组合图块数据
+///
+public class TileCombinationInfo : IClone
+{
+ ///
+ /// 组合唯一Id
+ ///
+ [JsonInclude]
+ public string Id;
+ ///
+ /// 组合名称
+ ///
+ [JsonInclude]
+ public string Name;
+ ///
+ /// 组合图块数据, 在纹理中的坐标, 单位: 像素
+ ///
+ [JsonInclude]
+ public SerializeVector2[] Cells;
+ ///
+ /// 组合图块数据, 显示位置, 单位: 像素
+ ///
+ [JsonInclude]
+ public SerializeVector2[] Positions;
+
+ public TileCombinationInfo Clone()
+ {
+ var combinationInfo = new TileCombinationInfo();
+ combinationInfo.Id = Id;
+ combinationInfo.Name = Name;
+ if (Cells != null)
+ {
+ combinationInfo.Cells = new SerializeVector2[Cells.Length];
+ for (int i = 0; i < Cells.Length; i++)
+ {
+ combinationInfo.Cells[i] = Cells[i].Clone();
+ }
+ }
+
+ if (Positions != null)
+ {
+ combinationInfo.Positions = new SerializeVector2[Positions.Length];
+ for (int i = 0; i < Positions.Length; i++)
+ {
+ combinationInfo.Positions[i] = Positions[i].Clone();
+ }
+ }
+ return combinationInfo;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetInfo.cs
new file mode 100644
index 0000000..926df8f
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetInfo.cs
@@ -0,0 +1,63 @@
+
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+
+///
+/// 图块集数据
+///
+public class TileSetInfo : IClone, IDestroy
+{
+ [JsonIgnore]
+ public bool IsDestroyed { get; private set; }
+
+ ///
+ /// 图块集名称
+ ///
+ [JsonInclude]
+ public string Name;
+
+ ///
+ /// 资源集合
+ ///
+ [JsonInclude]
+ public List Sources;
+
+ ///
+ /// 初始化默认数据
+ ///
+ public void InitData()
+ {
+ Sources = new List();
+ }
+
+ public TileSetInfo Clone()
+ {
+ var tileSetInfo = new TileSetInfo();
+ tileSetInfo.Name = Name;
+ if (Sources != null)
+ {
+ tileSetInfo.Sources = new List();
+ foreach (var source in Sources)
+ {
+ tileSetInfo.Sources.Add(source.Clone());
+ }
+ }
+ return tileSetInfo;
+ }
+
+ public void Destroy()
+ {
+ if (IsDestroyed) return;
+ IsDestroyed = true;
+
+ if (Sources != null)
+ {
+ foreach (var tileSetSourceInfo in Sources)
+ {
+ tileSetSourceInfo.Destroy();
+ }
+
+ Sources = null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSourceInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSourceInfo.cs
new file mode 100644
index 0000000..c083d70
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSourceInfo.cs
@@ -0,0 +1,110 @@
+
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+using Godot;
+
+///
+/// 图集资源数据
+///
+public class TileSetSourceInfo : IClone, IDestroy
+{
+ [JsonIgnore]
+ public bool IsDestroyed { get; private set; }
+
+ ///
+ /// 资源名称
+ ///
+ [JsonInclude]
+ public string Name;
+
+ ///
+ /// 资源路径
+ ///
+ [JsonInclude]
+ public string SourcePath;
+
+ ///
+ /// 地形配置数据
+ ///
+ [JsonInclude]
+ public List Terrain;
+
+ ///
+ /// 组合数据
+ ///
+ [JsonInclude]
+ public List Combination;
+
+ [JsonIgnore]
+ private Image _sourceImage;
+
+ ///
+ /// 初始化默认数据
+ ///
+ public void InitData()
+ {
+ Terrain = new List();
+ Combination = new List();
+ }
+
+ ///
+ /// 获取资源图像数据
+ ///
+ public Image GetSourceImage()
+ {
+ if (_sourceImage == null && string.IsNullOrEmpty(SourcePath))
+ {
+ return null;
+ }
+ return _sourceImage ??= Image.LoadFromFile(SourcePath);
+ }
+
+ ///
+ /// 设置图像资源
+ ///
+ public void SetSourceImage(Image image)
+ {
+ if (_sourceImage != null)
+ {
+ _sourceImage.Dispose();
+ }
+ _sourceImage = image;
+ }
+
+ public TileSetSourceInfo Clone()
+ {
+ var tileSetSourceInfo = new TileSetSourceInfo();
+ tileSetSourceInfo.Name = Name;
+ tileSetSourceInfo.Terrain = new List();
+ foreach (var item in Terrain)
+ {
+ tileSetSourceInfo.Terrain.Add(item.Clone());
+ }
+ tileSetSourceInfo.Combination = new List();
+ foreach (var combination in Combination)
+ {
+ tileSetSourceInfo.Combination.Add(combination.Clone());
+ }
+ tileSetSourceInfo.SourcePath = SourcePath;
+ if (_sourceImage != null)
+ {
+ tileSetSourceInfo._sourceImage = (Image)_sourceImage.Duplicate();
+ }
+
+ return tileSetSourceInfo;
+ }
+
+ public void Destroy()
+ {
+ if (IsDestroyed) return;
+ IsDestroyed = true;
+ if (_sourceImage != null)
+ {
+ _sourceImage.Dispose();
+ _sourceImage = null;
+ }
+
+ Terrain = null;
+ Combination = null;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSplit.cs b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSplit.cs
new file mode 100644
index 0000000..a769406
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSplit.cs
@@ -0,0 +1,343 @@
+
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Godot;
+
+public class TileSetSplit : IDestroy
+{
+ [JsonIgnore]
+ public bool IsDestroyed { get; private set; }
+
+ ///
+ /// 路径
+ ///
+ [JsonInclude]
+ public string Path;
+
+ ///
+ /// 备注
+ ///
+ [JsonInclude]
+ public string Remark;
+
+ ///
+ /// 图块集路径
+ ///
+ [JsonIgnore]
+ public string TileSetPath => Path + "/TileSet.json";
+
+ ///
+ /// 图块集信息
+ ///
+ [JsonIgnore]
+ public TileSetInfo TileSetInfo
+ {
+ get
+ {
+ if (_tileSetInfo == null && TileSetPath != null)
+ {
+ ReloadTileSetInfo();
+ }
+
+ return _tileSetInfo;
+ }
+ }
+
+ private TileSetInfo _tileSetInfo;
+ private TileSet _tileSet;
+
+ ///
+ /// 设置图块集信息
+ ///
+ public void SetTileSetInfo(TileSetInfo info)
+ {
+ if (_tileSetInfo != null)
+ {
+ _tileSetInfo.Destroy();
+ }
+
+ if (_tileSet != null)
+ {
+ _tileSet.Dispose();
+ _tileSet = null;
+ }
+ _tileSetInfo = info;
+ }
+
+ ///
+ /// 重新加载图块集信息
+ ///
+ public void ReloadTileSetInfo()
+ {
+ var asText = ResourceManager.LoadText("res://" + TileSetPath);
+ _tileSetInfo = JsonSerializer.Deserialize(asText);
+
+ if (_tileSet != null)
+ {
+ _tileSet.Dispose();
+ _tileSet = null;
+ }
+ }
+
+ ///
+ /// 获取由该对象生成的Godot.TileSet对象
+ ///
+ public TileSet GetTileSet()
+ {
+ if (_tileSet != null)
+ {
+ return _tileSet;
+ }
+
+ if (TileSetInfo == null)
+ {
+ return null;
+ }
+
+ //检查是否有异常
+ _tileSet = new TileSet();
+ if (_tileSetInfo.Sources != null)
+ {
+ //TileSet网格大小
+ _tileSet.TileSize = GameConfig.TileCellSizeVector2I;
+ //物理层 0
+ _tileSet.AddPhysicsLayer();
+ _tileSet.SetPhysicsLayerCollisionLayer(0, PhysicsLayer.Wall);
+ _tileSet.SetPhysicsLayerCollisionMask(0, PhysicsLayer.None);
+
+ var terrainSetIndex = 0;
+
+ //Source资源
+ for (var sourceIndex = 0; sourceIndex < _tileSetInfo.Sources.Count; sourceIndex++)
+ {
+ var tileSetSourceInfo = _tileSetInfo.Sources[sourceIndex];
+ var terrainList = tileSetSourceInfo.Terrain;
+
+ var tileSetAtlasSource = new TileSetAtlasSource();
+ _tileSet.AddSource(tileSetAtlasSource);
+
+ //纹理
+ var image = tileSetSourceInfo.GetSourceImage();
+ if (image != null)
+ {
+ tileSetAtlasSource.Texture = ImageTexture.CreateFromImage(image);
+
+ var size = image.GetSize() / GameConfig.TileCellSize;
+ //创建cell
+ for (var i = 0; i < size.X; i++)
+ {
+ for (var j = 0; j < size.Y; j++)
+ {
+ tileSetAtlasSource.CreateTile(new Vector2I(i, j));
+ }
+ }
+ }
+
+ for (var i = 0; i < terrainList.Count; i++)
+ {
+ var terrainInfo = terrainList[i];
+ //地形层
+ _tileSet.AddTerrainSet();
+ _tileSet.AddTerrain(terrainSetIndex);
+ //_tileSet.SetTerrainName(terrainSetIndex, 0, terrainInfo.Name);
+
+ if (terrainInfo.TerrainType == 0) //3x3地形
+ {
+ _tileSet.SetTerrainSetMode(terrainSetIndex, TileSet.TerrainMode.CornersAndSides);
+ }
+ else //2x2地形
+ {
+ _tileSet.SetTerrainSetMode(terrainSetIndex, TileSet.TerrainMode.Corners);
+ }
+
+ //初始化地形
+ tileSetAtlasSource.InitTerrain(terrainInfo, terrainSetIndex, 0);
+ if (sourceIndex == 0 && i == 0)
+ {
+ InitMainSourceData(terrainInfo, tileSetAtlasSource);
+ }
+
+ terrainSetIndex++;
+ }
+ }
+ }
+
+ return _tileSet;
+ }
+
+ private static void InitMainSourceData(TileSetTerrainInfo terrainInfo, TileSetAtlasSource tileSetAtlasSource)
+ {
+ //ySort
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(0, 2), 39);
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(1, 2), 39);
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(2, 2), 39);
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(3, 2), 39);
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(0, 3), 39);
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(1, 3), 39);
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(2, 3), 39);
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(3, 3), 39);
+ //
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(5, 3), 39);
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(6, 3), 39);
+ //
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(8, 3), 39);
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(9, 3), 39);
+ // SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 1, new Vector2I(11, 3), 39);
+
+ SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 2, new Vector2I(0, 0), 23);
+ SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 2, new Vector2I(1, 0), 23);
+ SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 2, new Vector2I(2, 0), 23);
+ SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 2, new Vector2I(3, 0), 23);
+
+ SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 2, new Vector2I(0, 1), 7);
+ SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 2, new Vector2I(1, 1), 7);
+ SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 2, new Vector2I(2, 1), 7);
+ SetAtlasSourceYSortOrigin(terrainInfo, tileSetAtlasSource, 2, new Vector2I(3, 1), 7);
+
+ //碰撞器
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(0, 0), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(1, 0), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(2, 0), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(3, 0), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(4, 0), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(5, 0), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(6, 0), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(7, 0), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(8, 0), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(9, 0), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(10, 0), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(11, 0), true);
+
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(0, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(1, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(2, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(3, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(4, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(5, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(6, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(7, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(8, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(9, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(11, 1), false);
+
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(0, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(1, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(2, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(3, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(4, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(5, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(6, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(7, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(8, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(9, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(10, 2), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(11, 2), false);
+
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(0, 3), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(1, 3), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(2, 3), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(3, 3), true);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(4, 3), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(5, 3), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(6, 3), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(7, 3), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(8, 3), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(9, 3), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(10, 3), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(11, 3), false);
+
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(0, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(1, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(2, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(3, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(4, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(5, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(6, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(7, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(8, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(9, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(10, 4), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 1, new Vector2I(11, 4), false);
+
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 2, new Vector2I(0, 0), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 2, new Vector2I(1, 0), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 2, new Vector2I(2, 0), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 2, new Vector2I(3, 0), false);
+
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 2, new Vector2I(0, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 2, new Vector2I(1, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 2, new Vector2I(2, 1), false);
+ SetAtlasSourceCollision(terrainInfo, tileSetAtlasSource, 2, new Vector2I(3, 1), false);
+ }
+
+ ///
+ /// 设置地图块的 Y 排序原点。
+ ///
+ private static void SetAtlasSourceYSortOrigin(TileSetTerrainInfo terrainInfo, TileSetAtlasSource tileSetAtlasSource, byte type, Vector2I bitCoords, int ySortOrigin)
+ {
+ var index = terrainInfo.TerrainCoordsToIndex(bitCoords, type);
+ var cellData = terrainInfo.GetTerrainCell(index, type);
+ if (cellData != null)
+ {
+ var pos = terrainInfo.GetPosition(cellData);
+ var tileData = tileSetAtlasSource.GetTileData(pos, 0);
+ tileData.YSortOrigin = ySortOrigin;
+ }
+ }
+
+ ///
+ /// 设置Atlas源碰撞信息, isHalf: 是否半块
+ ///
+ private static void SetAtlasSourceCollision(TileSetTerrainInfo terrainInfo, TileSetAtlasSource tileSetAtlasSource, byte type, Vector2I bitCoords, bool isHalf)
+ {
+ if (isHalf) //暂时让半块不设置碰撞信息
+ {
+ return;
+ }
+ var index = terrainInfo.TerrainCoordsToIndex(bitCoords, type);
+ var cellData = terrainInfo.GetTerrainCell(index, type);
+ if (cellData != null)
+ {
+ var pos = terrainInfo.GetPosition(cellData);
+ var tileData = tileSetAtlasSource.GetTileData(pos, 0);
+ tileData.AddCollisionPolygon(0);
+ // if (isHalf)
+ // {
+ // tileData.SetCollisionPolygonPoints(0, 0, new[]
+ // {
+ // new Vector2(-8, 7),
+ // new Vector2(8, 7),
+ // new Vector2(8, 8),
+ // new Vector2(-8, 8)
+ // });
+ // }
+ // else
+ {
+ tileData.SetCollisionPolygonPoints(0, 0, new []
+ {
+ new Vector2(-8, -8),
+ new Vector2(8, -8),
+ new Vector2(8, 8),
+ new Vector2(-8, 8)
+ });
+ }
+ }
+ }
+
+ public void Destroy()
+ {
+ if (IsDestroyed) return;
+ IsDestroyed = true;
+
+ if (_tileSetInfo != null)
+ {
+ _tileSetInfo.Destroy();
+ }
+
+ if (_tileSet != null)
+ {
+ _tileSet.Dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs
new file mode 100644
index 0000000..1dda3bf
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs
@@ -0,0 +1,470 @@
+
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+using Godot;
+using static TerrainPeering;
+
+///
+/// 地形配置数据, 数据都为 int 数组, 下标0和1分别代表x和y, 单位: 像素
+///
+public class TileSetTerrainInfo : IClone
+{
+ public const byte TerrainLayerType = 1;
+ public const byte MiddleLayerType = 2;
+ public const byte FloorLayerType = 3;
+
+ ///
+ /// 地形名称
+ ///
+ [JsonInclude]
+ public string Name;
+
+ //type = 3
+ ///
+ /// 地板 (1块) type = 3
+ ///
+ [JsonInclude] public Dictionary F;
+
+ ///
+ /// 侧方墙壁 (8块) type = 2
+ ///
+ [JsonInclude] public Dictionary M;
+
+ ///
+ /// 自动平铺地形 (47块/13块) type = 1
+ ///
+ [JsonInclude] public Dictionary T;
+
+ ///
+ /// 地形类型, 0: 3x3地形, 1: 2x2地形
+ ///
+ [JsonInclude]
+ public byte TerrainType;
+
+ ///
+ /// 地形是否准备好了, 调用 RefreshReady() 刷新
+ ///
+ [JsonInclude]
+ public bool Ready;
+
+ public void InitData()
+ {
+ TerrainType = 0;
+ F = new Dictionary();
+ M = new Dictionary();
+ T = new Dictionary();
+ }
+
+ public TileSetTerrainInfo Clone()
+ {
+ var terrainInfo = new TileSetTerrainInfo();
+ terrainInfo.InitData();
+ terrainInfo.Name = Name;
+ terrainInfo.Ready = Ready;
+ foreach (var pair in T)
+ {
+ terrainInfo.T.Add(pair.Key, new []{ pair.Value[0], pair.Value[1] });
+ }
+ foreach (var pair in M)
+ {
+ terrainInfo.M.Add(pair.Key, new []{ pair.Value[0], pair.Value[1] });
+ }
+ foreach (var pair in F)
+ {
+ terrainInfo.F.Add(pair.Key, new []{ pair.Value[0], pair.Value[1] });
+ }
+ terrainInfo.TerrainType = TerrainType;
+ return terrainInfo;
+ }
+
+ ///
+ /// 刷新这个TileSet地形是否可以正常使用了
+ ///
+ public void RefreshReady(int sourceIndex, int terrainIndex)
+ {
+ if (TerrainType == 0)
+ {
+ if (sourceIndex == 0 && terrainIndex == 0)
+ {
+ Ready = T != null && T.Count == 47 && M != null && M.Count == 8 && F != null && F.Count == 1;
+ }
+ else
+ {
+ Ready = T != null && T.Count == 47;
+ }
+ }
+ else
+ {
+ Ready = T != null && T.Count == 13;
+ }
+ }
+
+ ///
+ /// 将存储的坐标数据转换成 Vector2I 对象, 返回的 Vector2I 单位: 格
+ ///
+ public Vector2I GetPosition(int[] ints)
+ {
+ return new Vector2I(ints[0] / GameConfig.TileCellSize, ints[1] / GameConfig.TileCellSize);
+ }
+
+ ///
+ /// 将地形掩码中的坐标转换为索引。
+ ///
+ /// 地形坐标
+ /// 地形类型
+ public int TerrainCoordsToIndex(Vector2I bitCoords, byte type)
+ {
+ if (type == TerrainLayerType)
+ {
+ return bitCoords.Y * GameConfig.TerrainBit3x3.X + bitCoords.X;
+ }
+ else if (type == MiddleLayerType)
+ {
+ return bitCoords.Y * GameConfig.TerrainBitMiddle.X + bitCoords.X;
+ }
+ else if (type == FloorLayerType)
+ {
+ return bitCoords.Y * GameConfig.TerrainBitFloor.X + bitCoords.X;
+ }
+ return -1;
+ }
+
+ ///
+ /// 将地掩码值转换为索引值
+ ///
+ /// 地形掩码值
+ /// 地形类型
+ public int TerrainBitToIndex(uint bit, byte type)
+ {
+ if (type == TerrainLayerType) //顶部墙壁
+ {
+ if (TerrainType == 0) //47格
+ {
+ switch (bit)
+ {
+ case Center | Bottom: return 0;
+ case Center | Right | Bottom: return 1;
+ case Left | Center | Right | Bottom: return 2;
+ case Left | Center | Bottom: return 3;
+ case LeftTop | Top | Left | Center | Right | Bottom: return 4;
+ case Left | Center | Right | Bottom | RightBottom: return 5;
+ case Left | Center | Right | LeftBottom | Bottom: return 6;
+ case Top | RightTop | Left | Center | Right | Bottom: return 7;
+ case Center | Right | Bottom | RightBottom: return 8;
+ case Top | Left | Center | Right | LeftBottom | Bottom | RightBottom: return 9;
+ case Left | Center | Right | LeftBottom | Bottom | RightBottom: return 10;
+ case Left | Center | LeftBottom | Bottom: return 11;
+ case Top | Center | Bottom: return 12;
+ case Top | Center | Right | Bottom: return 13;
+ case Top | Left | Center | Right | Bottom: return 14;
+ case Top | Left | Center | Bottom: return 15;
+ case Top | Center | Right | Bottom | RightBottom: return 16;
+ case Top | RightTop | Left | Center | Right | LeftBottom | Bottom | RightBottom: return 17;
+ case LeftTop | Top | Left | Center | Right | LeftBottom | Bottom | RightBottom: return 18;
+ case Top | Left | Center | LeftBottom | Bottom: return 19;
+ case Top | RightTop | Center | Right | Bottom | RightBottom: return 20;
+ case Top | RightTop | Left | Center | Right | LeftBottom | Bottom: return 21;
+ case LeftTop | Top | Left | Center | Right | LeftBottom | Bottom: return 23;
+ case Top | Center: return 24;
+ case Top | Center | Right: return 25;
+ case Top | Left | Center | Right: return 26;
+ case Top | Left | Center: return 27;
+ case Top | RightTop | Center | Right | Bottom: return 28;
+ case LeftTop | Top | RightTop | Left | Center | Right | Bottom | RightBottom: return 29;
+ case LeftTop | Top | RightTop | Left | Center | Right | LeftBottom | Bottom: return 30;
+ case LeftTop | Top | Left | Center | Bottom: return 31;
+ case Top | RightTop | Left | Center | Right | Bottom | RightBottom: return 32;
+ case LeftTop | Top | RightTop | Left | Center | Right | LeftBottom | Bottom | RightBottom: return 33;
+ case LeftTop | Top | Left | Center | Right | Bottom | RightBottom: return 34;
+ case LeftTop | Top | Left | Center | LeftBottom | Bottom: return 35;
+ case Center: return 36;
+ case Center | Right: return 37;
+ case Left | Center | Right: return 38;
+ case Left | Center: return 39;
+ case Top | Left | Center | Right | LeftBottom | Bottom: return 40;
+ case Top | RightTop | Left | Center | Right: return 41;
+ case LeftTop | Top | Left | Center | Right: return 42;
+ case Top | Left | Center | Right | Bottom | RightBottom: return 43;
+ case Top | RightTop | Center | Right: return 44;
+ case LeftTop | Top | RightTop | Left | Center | Right: return 45;
+ case LeftTop | Top | RightTop | Left | Center | Right | Bottom: return 46;
+ case LeftTop | Top | Left | Center: return 47;
+ }
+ }
+ else if (TerrainType == 1) //13格
+ {
+ switch (bit)
+ {
+ //第一排
+ case Center | RightBottom: return 0;
+ case Center | RightBottom | LeftBottom: return 1;
+ case Center | LeftBottom: return 2;
+ case Center | LeftTop | RightTop | LeftBottom: return 3;
+ case Center | LeftTop | RightTop | RightBottom: return 4;
+ //第二排
+ case Center | RightTop | RightBottom: return 5;
+ case Center | LeftTop | LeftBottom | RightTop | RightBottom: return 6;
+ case Center | LeftTop | LeftBottom: return 7;
+ case Center | LeftTop | LeftBottom | RightBottom: return 8;
+ case Center | RightTop | LeftBottom | RightBottom: return 9;
+ //第三排
+ case Center | RightTop: return 10;
+ case Center | LeftTop | RightTop: return 11;
+ case Center | LeftTop: return 12;
+ }
+ }
+ }
+ else if (type == MiddleLayerType)
+ {
+ if (bit < 8)
+ {
+ return (int)bit;
+ }
+ }
+ else if (type == FloorLayerType)
+ {
+ if (bit == 0)
+ {
+ return 0;
+ }
+ }
+
+ return -1;
+ }
+
+ ///
+ /// 根据给定的索引和类型计算地形掩码值。
+ ///
+ /// 用于确定地形掩码的索引。
+ /// 要计算地形位值的图层类型。
+ ///
+ public uint IndexToTerrainBit(int index, byte type)
+ {
+ if (type == TerrainLayerType) //顶部墙壁
+ {
+ if (TerrainType == 0) //47格
+ {
+ switch (index)
+ {
+ case 0: return Center | Bottom;
+ case 1: return Center | Right | Bottom;
+ case 2: return Left | Center | Right | Bottom;
+ case 3: return Left | Center | Bottom;
+ case 4: return LeftTop | Top | Left | Center | Right | Bottom;
+ case 5: return Left | Center | Right | Bottom | RightBottom;
+ case 6: return Left | Center | Right | LeftBottom | Bottom;
+ case 7: return Top | RightTop | Left | Center | Right | Bottom;
+ case 8: return Center | Right | Bottom | RightBottom;
+ case 9: return Top | Left | Center | Right | LeftBottom | Bottom | RightBottom;
+ case 10: return Left | Center | Right | LeftBottom | Bottom | RightBottom;
+ case 11: return Left | Center | LeftBottom | Bottom;
+ case 12: return Top | Center | Bottom;
+ case 13: return Top | Center | Right | Bottom;
+ case 14: return Top | Left | Center | Right | Bottom;
+ case 15: return Top | Left | Center | Bottom;
+ case 16: return Top | Center | Right | Bottom | RightBottom;
+ case 17: return Top | RightTop | Left | Center | Right | LeftBottom | Bottom | RightBottom;
+ case 18: return LeftTop | Top | Left | Center | Right | LeftBottom | Bottom | RightBottom;
+ case 19: return Top | Left | Center | LeftBottom | Bottom;
+ case 20: return Top | RightTop | Center | Right | Bottom | RightBottom;
+ case 21: return Top | RightTop | Left | Center | Right | LeftBottom | Bottom;
+ case 23: return LeftTop | Top | Left | Center | Right | LeftBottom | Bottom;
+ case 24: return Top | Center;
+ case 25: return Top | Center | Right;
+ case 26: return Top | Left | Center | Right;
+ case 27: return Top | Left | Center;
+ case 28: return Top | RightTop | Center | Right | Bottom;
+ case 29: return LeftTop | Top | RightTop | Left | Center | Right | Bottom | RightBottom;
+ case 30: return LeftTop | Top | RightTop | Left | Center | Right | LeftBottom | Bottom;
+ case 31: return LeftTop | Top | Left | Center | Bottom;
+ case 32: return Top | RightTop | Left | Center | Right | Bottom | RightBottom;
+ case 33: return LeftTop | Top | RightTop | Left | Center | Right | LeftBottom | Bottom | RightBottom;
+ case 34: return LeftTop | Top | Left | Center | Right | Bottom | RightBottom;
+ case 35: return LeftTop | Top | Left | Center | LeftBottom | Bottom;
+ case 36: return Center;
+ case 37: return Center | Right;
+ case 38: return Left | Center | Right;
+ case 39: return Left | Center;
+ case 40: return Top | Left | Center | Right | LeftBottom | Bottom;
+ case 41: return Top | RightTop | Left | Center | Right;
+ case 42: return LeftTop | Top | Left | Center | Right;
+ case 43: return Top | Left | Center | Right | Bottom | RightBottom;
+ case 44: return Top | RightTop | Center | Right;
+ case 45: return LeftTop | Top | RightTop | Left | Center | Right;
+ case 46: return LeftTop | Top | RightTop | Left | Center | Right | Bottom;
+ case 47: return LeftTop | Top | Left | Center;
+ }
+ }
+ else if (TerrainType == 1) //13格
+ {
+ switch (index)
+ {
+ //第一排
+ case 0: return Center | RightBottom;
+ case 1: return Center | RightBottom | LeftBottom;
+ case 2: return Center | LeftBottom;
+ case 3: return Center | LeftTop | RightTop | LeftBottom;
+ case 4: return Center | LeftTop | RightTop | RightBottom;
+ //第二排
+ case 5: return Center | RightTop | RightBottom;
+ case 6: return Center | LeftTop | LeftBottom | RightTop | RightBottom;
+ case 7: return Center | LeftTop | LeftBottom;
+ case 8: return Center | LeftTop | LeftBottom | RightBottom;
+ case 9: return Center | RightTop | LeftBottom | RightBottom;
+ //第三排
+ case 10: return Center | RightTop;
+ case 11: return Center | LeftTop | RightTop;
+ case 12: return Center | LeftTop;
+ }
+ }
+ }
+ else if (type == MiddleLayerType)
+ {
+ if (index >= 0 && index < 8)
+ {
+ return (uint)index;
+ }
+ }
+
+ return None;
+ }
+
+ ///
+ /// 将地形掩码存入 TileSetTerrainInfo 中
+ ///
+ public void SetTerrainCell(int index, byte type, int[] cellData)
+ {
+ if (type == TerrainLayerType) //顶部墙壁
+ {
+ var terrainBit = IndexToTerrainBit(index, type);
+ if (terrainBit != None)
+ {
+ T[terrainBit] = cellData;
+ }
+ }
+ else if (type == MiddleLayerType) //侧方墙壁
+ {
+ switch (index)
+ {
+ case 0: M[0] = cellData; break;
+ case 1: M[1] = cellData; break;
+ case 2: M[2] = cellData; break;
+ case 3: M[3] = cellData; break;
+
+ case 4: M[4] = cellData; break;
+ case 5: M[5] = cellData; break;
+ case 6: M[6] = cellData; break;
+ case 7: M[7] = cellData; break;
+ }
+ }
+ else if (type == FloorLayerType) //地板
+ {
+ F[0] = cellData;
+ }
+ }
+
+ ///
+ /// 移除地形掩码
+ ///
+ public void RemoveTerrainCell(int index, byte type)
+ {
+ if (type == TerrainLayerType) //顶部墙壁
+ {
+ var terrainBit = IndexToTerrainBit(index, type);
+ if (terrainBit != None)
+ {
+ T.Remove(terrainBit);
+ }
+ }
+ else if (type == MiddleLayerType) //侧方墙壁
+ {
+ switch (index)
+ {
+ case 0: M.Remove(0); break;
+ case 1: M.Remove(1); break;
+ case 2: M.Remove(2); break;
+ case 3: M.Remove(3); break;
+
+ case 4: M.Remove(4); break;
+ case 5: M.Remove(5); break;
+ case 6: M.Remove(6); break;
+ case 7: M.Remove(7); break;
+ }
+ }
+ else if (type == FloorLayerType) //地板
+ {
+ F.Remove(0);
+ }
+ }
+
+ ///
+ /// 获取指定索引的地形掩码存储的数据
+ ///
+ public int[] GetTerrainCell(int index, byte type)
+ {
+ if (type == TerrainLayerType) //顶部墙壁
+ {
+ var terrainBit = IndexToTerrainBit(index, type);
+ if (terrainBit != None)
+ {
+ if (T.TryGetValue(terrainBit, out var cellData))
+ {
+ return cellData;
+ }
+ }
+ }
+ else if (type == MiddleLayerType) //侧方墙壁
+ {
+ switch (index)
+ {
+ case 0:
+ {
+ if (M.TryGetValue(0, out var cellData)) return cellData;
+ }
+ break;
+ case 1:
+ {
+ if (M.TryGetValue(1, out var cellData)) return cellData;
+ }
+ break;
+ case 2:
+ {
+ if (M.TryGetValue(2, out var cellData)) return cellData;
+ }
+ break;
+ case 3:
+ {
+ if (M.TryGetValue(3, out var cellData)) return cellData;
+ }
+
+ break;
+ case 4:
+ {
+ if (M.TryGetValue(4, out var cellData)) return cellData;
+ }
+ break;
+ case 5:
+ {
+ if (M.TryGetValue(5, out var cellData)) return cellData;
+ }
+ break;
+ case 6:
+ {
+ if (M.TryGetValue(6, out var cellData)) return cellData;
+ }
+ break;
+ case 7:
+ {
+ if (M.TryGetValue(7, out var cellData)) return cellData;
+ }
+ break;
+ }
+ }
+ else if (type == FloorLayerType) //地板
+ {
+ if (F.TryGetValue(0, out var cellData)) return cellData;
+ }
+
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/tileSet/TerrainPeering.cs b/DungeonShooting_Godot/src/framework/map/tileSet/TerrainPeering.cs
new file mode 100644
index 0000000..fc314ec
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/tileSet/TerrainPeering.cs
@@ -0,0 +1,153 @@
+
+using Godot;
+
+///
+/// 地形掩码
+///
+public static class TerrainPeering
+{
+ ///
+ /// 无
+ ///
+ public const uint None = 0;
+ ///
+ /// 左上
+ ///
+ public const uint LeftTop = 0b1;
+ ///
+ /// 上
+ ///
+ public const uint Top = 0b10;
+ ///
+ /// 右上
+ ///
+ public const uint RightTop = 0b100;
+ ///
+ /// 左
+ ///
+ public const uint Left = 0b1000;
+ ///
+ /// 中心
+ ///
+ public const uint Center = 0b10000;
+ ///
+ /// 右
+ ///
+ public const uint Right = 0b100000;
+ ///
+ /// 左下
+ ///
+ public const uint LeftBottom = 0b1000000;
+ ///
+ /// 下
+ ///
+ public const uint Bottom = 0b10000000;
+ ///
+ /// 右下
+ ///
+ public const uint RightBottom = 0b100000000;
+
+ ///
+ /// 获取地形掩码值
+ ///
+ public static uint GetTerrainPeeringValue(this TileData tileData)
+ {
+ if (tileData.Terrain != -1 && tileData.TerrainSet != -1)
+ {
+ var value = Center;
+ if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.TopLeftCorner) >= 0)
+ value |= LeftTop;
+ if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.TopSide) >= 0)
+ value |= Top;
+ if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.TopRightCorner) >= 0)
+ value |= RightTop;
+ if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.LeftSide) >= 0)
+ value |= Left;
+ if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.RightSide) >= 0)
+ value |= Right;
+ if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.BottomLeftCorner) >= 0)
+ value |= LeftBottom;
+ if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.BottomSide) >= 0)
+ value |= Bottom;
+ if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.BottomRightCorner) >= 0)
+ value |= RightBottom;
+ return value;
+ }
+
+ return None;
+ }
+
+ ///
+ /// 将地形掩码数据设置到 TileSetAtlasSource 中
+ ///
+ public static void InitTerrain(this TileSetAtlasSource atlasSource, TileSetTerrainInfo terrainInfo, int terrainSet, int terrain)
+ {
+ foreach (var keyValuePair in terrainInfo.T)
+ {
+ var pos = terrainInfo.GetPosition(keyValuePair.Value);
+ var tileData = atlasSource.GetTileData(pos, 0);
+ if (tileData == null)
+ {
+ continue;
+ }
+ tileData.TerrainSet = terrainSet;
+ tileData.Terrain = terrain;
+
+ var bit = keyValuePair.Key;
+ if (terrainInfo.TerrainType == 0) //3x3地形
+ {
+ if ((bit & LeftTop) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.TopLeftCorner, 0);
+ }
+ if ((bit & Top) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.TopSide, 0);
+ }
+ if ((bit & RightTop) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.TopRightCorner, 0);
+ }
+ if ((bit & Left) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.LeftSide, 0);
+ }
+ if ((bit & Right) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.RightSide, 0);
+ }
+ if ((bit & LeftBottom) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.BottomLeftCorner, 0);
+ }
+ if ((bit & Bottom) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.BottomSide, 0);
+ }
+ if ((bit & RightBottom) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.BottomRightCorner, 0);
+ }
+ }
+ else //2x2地形
+ {
+ if ((bit & LeftTop) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.TopLeftCorner, 0);
+ }
+ if ((bit & RightTop) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.TopRightCorner, 0);
+ }
+ if ((bit & LeftBottom) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.BottomLeftCorner, 0);
+ }
+ if ((bit & RightBottom) != 0)
+ {
+ tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.BottomRightCorner, 0);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/serialize/SerializeVector2.cs b/DungeonShooting_Godot/src/framework/serialize/SerializeVector2.cs
index 4e0a888..df09b4c 100644
--- a/DungeonShooting_Godot/src/framework/serialize/SerializeVector2.cs
+++ b/DungeonShooting_Godot/src/framework/serialize/SerializeVector2.cs
@@ -5,7 +5,7 @@
///
/// 可序列化的 Vector2 对象
///
-public class SerializeVector2
+public class SerializeVector2 : IClone
{
public SerializeVector2(float x, float y)
{
@@ -56,4 +56,10 @@
{
return new Vector2I((int)X, (int)Y);
}
+
+
+ public SerializeVector2 Clone()
+ {
+ return new SerializeVector2(this);
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/ui/UiBase.cs b/DungeonShooting_Godot/src/framework/ui/UiBase.cs
index 17e6d7e..5987af6 100644
--- a/DungeonShooting_Godot/src/framework/ui/UiBase.cs
+++ b/DungeonShooting_Godot/src/framework/ui/UiBase.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections;
using System.Collections.Generic;
using Godot;
@@ -8,6 +9,19 @@
public abstract partial class UiBase : Control, IDestroy, ICoroutine
{
///
+ /// Ui显示事件
+ ///
+ public event Action OnShowUiEvent;
+ ///
+ /// Ui隐藏事件
+ ///
+ public event Action OnHideUiEvent;
+ ///
+ /// Ui销毁事件
+ ///
+ public event Action OnDestroyUiEvent;
+
+ ///
/// 当前 UI 所属层级
///
[Export]
@@ -42,12 +56,23 @@
///
public IUiNode ParentNode { get; private set; }
+ ///
+ /// 是否是嵌套的子 Ui
+ ///
+ public bool IsNestedUi => ParentUi != null;
+
//开启的协程
private List _coroutineList;
//嵌套打开的Ui列表
private HashSet _nestedUiSet;
+ //嵌套模式下是否打开Ui
+ private bool _nestedOpen;
//当前Ui包含的 IUiNodeScript 接口, 关闭Ui是需要调用 IUiNodeScript.OnDestroy()
private HashSet _nodeScripts;
+ //存放事件集合的对象
+ private EventFactory _eventFactory;
+ //存放的IUiGrid对象
+ private List _uiGrids;
public UiBase(string uiName)
{
@@ -113,16 +138,24 @@
return;
}
+ _nestedOpen = true;
IsOpen = true;
Visible = true;
OnShowUi();
+ if (OnShowUiEvent != null)
+ {
+ OnShowUiEvent();
+ }
//子Ui调用显示
if (_nestedUiSet != null)
{
foreach (var uiBase in _nestedUiSet)
{
- uiBase.ShowUi();
+ if (uiBase._nestedOpen || uiBase.Visible)
+ {
+ uiBase.ShowUi();
+ }
}
}
}
@@ -142,16 +175,25 @@
return;
}
+ _nestedOpen = false;
IsOpen = false;
Visible = false;
OnHideUi();
+ if (OnHideUiEvent != null)
+ {
+ OnHideUiEvent();
+ }
//子Ui调用隐藏
if (_nestedUiSet != null)
{
foreach (var uiBase in _nestedUiSet)
{
- uiBase.HideUi();
+ if (uiBase._nestedOpen)
+ {
+ uiBase.HideUi();
+ uiBase._nestedOpen = true;
+ }
}
}
}
@@ -170,6 +212,19 @@
HideUi();
IsDestroyed = true;
OnDestroyUi();
+ if (OnDestroyUiEvent != null)
+ {
+ OnDestroyUiEvent();
+ }
+
+ if (_uiGrids != null)
+ {
+ foreach (var uiGrid in _uiGrids)
+ {
+ uiGrid.Destroy();
+ }
+ _uiGrids.Clear();
+ }
//子Ui调用销毁
if (_nestedUiSet != null)
@@ -196,10 +251,73 @@
{
ParentUi.RecordNestedUi(this, null, UiManager.RecordType.Close);
}
-
+
+ RemoveAllEventListener();
QueueFree();
}
+ ///
+ /// 添加监听事件, 所有事件会在当前 ui 销毁时自动销毁
+ ///
+ /// 事件类型
+ /// 回调函数
+ public void AddEventListener(EventEnum eventType, Action