(client) feat:添加基地界面到游玩界面的过程,添加存档管理,技能树变得可用 (#58)

Co-authored-by: m0_75251201 <m0_75251201@noreply.gitcode.com>
Reviewed-on: http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite/pulls/58
This commit is contained in:
2025-10-03 00:31:34 +08:00
parent aff747be17
commit dd9d90439d
134 changed files with 10322 additions and 4872 deletions

View File

@@ -5,7 +5,11 @@
<label>商店贴图</label>
<path>Resources\Map\Outpost\Store.png</path>
</ImageDef>
<ImageDef>
<defName>OutpostInitial</defName>
<label>前哨初始贴图</label>
<path>Resources\Map\Outpost\OutpostInitial.png</path>
</ImageDef>
<EventDef>
<defName>OpenShopUI</defName>
<label>打开商店界面</label>
@@ -24,7 +28,18 @@
<workClass>Event_OpenUI</workClass>
<parameter>
{
"uiName": "SkillTree"
"uiName": "SkillTreeUI"
}
</parameter>
</EventDef>
<EventDef>
<defName>OpenStartGameUI</defName>
<label>打开开始游戏界面</label>
<description>当玩家与起始点交互时打开开始游戏界面</description>
<workClass>Event_OpenUI</workClass>
<parameter>
{
"uiName": "StartPlayUI"
}
</parameter>
</EventDef>
@@ -73,4 +88,27 @@
<li>OpenSkillTreeUI</li>
</triggerEvents>
</BuildingDef>
<BuildingDef>
<defName>StartPoint</defName>
<label>起始准备开始游戏</label>
<description>玩家的选择准备开始游戏的建筑</description>
<attributes>
<health>500</health>
</attributes>
<affiliation>player</affiliation>
<buildingType>Dynamic</buildingType>
<drawingOrder>
<idle_down>
<textures>
<li>OutpostInitial</li>
</textures>
</idle_down>
</drawingOrder>
<colliderSize>4,4</colliderSize>
<detectionRadius>6</detectionRadius>
<triggerEvents>
<li>OpenStartGameUI</li>
</triggerEvents>
</BuildingDef>
</Define>

View File

@@ -132,14 +132,15 @@
</drawingOrder>
<behaviorTree>
<Node className="ThinkNode_Selector">
<Node className="ThinkNode_Conditional" value="HasEnemyInSight()">
<Node className="ThinkNode_Conditional" value="HasWeapon()">
<Node className="JobGiver_AttackJob"/>
</Node>
<Node className="JobGiver_FleeJob"/>
<Node className="ThinkNode_Conditional" value="HasWeapon()">
<Node className="ThinkNode_Sequence">
<Node className="JobNode_MoveToAttackRange"/>
<Node className="JobNode_AttackTarget"/>
</Node>
<Node className="JobGiver_RandomWander"/>
</Node>
<Node className="ThinkNode_Sequence">
<Node className="JobNode_Wander"/>
<Node className="JobNode_Idle"/>
</Node>
</behaviorTree>

View File

@@ -2,17 +2,15 @@
<Define>
<BehaviorTreeDef>
<defName>BasicMonsterBehavior</defName>
<Node className="ThinkNode_Selector">
<Node className="ThinkNode_Conditional" value="HasEnemyInSight()">
<Node className="ThinkNode_Conditional" value="HasWeapon()">
<Node className="JobGiver_AttackJob"/>
</Node>
<Node className="JobGiver_FleeJob"/>
</Node>
<Node className="JobGiver_RandomWander"/>
<Node className="ThinkNode_Sequence">
<Node className="JobNode_Wander"/>
<Node className="JobNode_Idle"/>
</Node>
</BehaviorTreeDef>
<ImageDef>
<defName>testPawnAnimation</defName>
<path>Resources\Character\test.png</path>
</ImageDef>
<MonsterDef>
<defName>chicken</defName>
<label>不大聪明</label>
@@ -22,7 +20,7 @@
<moveSpeed>1</moveSpeed>
<health>2</health> <!-- 123 -> approx 2 (round down) -->
</attributes>
<weapon>Claw</weapon>
<weapon>TestGun</weapon>
<drawingOrder>
<idle_down name="Body" FPS="10">
<textures>
@@ -39,32 +37,5 @@
</drawingOrder>
</MonsterDef>
<MonsterDef>
<defName>big</defName>
<label>大聪明</label>
<behaviorTree>BasicMonsterBehavior</behaviorTree>
<affiliation>monster</affiliation>
<attributes>
<moveSpeed>1</moveSpeed>
<health>2</health> <!-- 123 -> approx 2 (round down) -->
</attributes>
<weapon>TestGun</weapon>
<drawingOrder>
<idle_down name="Body" FPS="20">
<textures>
<li>testPawnAnimation_0</li>
<li>testPawnAnimation_1</li>
<li>testPawnAnimation_2</li>
<li>testPawnAnimation_3</li>
<li>testPawnAnimation_4</li>
<li>testPawnAnimation_3</li>
<li>testPawnAnimation_2</li>
<li>testPawnAnimation_1</li>
</textures>
</idle_down>
</drawingOrder>
</MonsterDef>
<!-- Mechanical Monsters -->
</Define>

View File

@@ -1,152 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Define>
<!-- ImageDefs for Mechanical Monsters -->
<ImageDef>
<defName>MechanicalMonsterA1Texture</defName>
<path>res:Texture/Monster/机械/A怪物1</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<ImageDef>
<defName>MechanicalMonsterA2Texture</defName>
<path>res:Texture/Monster/机械/A怪物2</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<ImageDef>
<defName>MechanicalMonsterB1Texture</defName>
<path>res:Texture/Monster/机械/B怪物1</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<ImageDef>
<defName>MechanicalMonsterB2Texture</defName>
<path>res:Texture/Monster/机械/B怪物2</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<ImageDef>
<defName>MechanicalMonsterC1Texture</defName>
<path>res:Texture/Monster/机械/C怪物1</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<ImageDef>
<defName>MechanicalMonsterC2Texture</defName>
<path>res:Texture/Monster/机械/C怪物2</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<!-- ImageDefs for Hybrid Monsters -->
<ImageDef>
<defName>HybridMonsterD1Texture</defName>
<path>res:Texture/Monster/混合/D怪物1</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<ImageDef>
<defName>HybridMonsterD2Texture</defName>
<path>res:Texture/Monster/混合/D怪物2</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<ImageDef>
<defName>HybridMonsterE1Texture</defName>
<path>res:Texture/Monster/混合/E怪物1</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<ImageDef>
<defName>HybridMonsterE2Texture</defName>
<path>res:Texture/Monster/混合/E怪物2</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<ImageDef>
<defName>HybridMonsterF1Texture</defName>
<path>res:Texture/Monster/混合/F怪物1</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<ImageDef>
<defName>HybridMonsterF2Texture</defName>
<path>res:Texture/Monster/混合/F怪物2</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<!-- ImageDefs for Biological Monsters -->
<ImageDef>
<defName>BiologicalMaskMonster1Texture</defName>
<path>res:Texture/Monster/生物/面具1</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<!-- <ImageDef>
<defName>BiologicalMaskMonster4Texture</defName>
<path>res:Texture/Monster/生物/面具4</path>
<wCount>1</wCount>
<hCount>1</hCount>
</ImageDef> -->
<ImageDef>
<defName>BiologicalHologramMonster1Texture</defName>
<path>res:Texture/Monster/生物/全息1</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<!-- <ImageDef>
<defName>BiologicalHologramMonster3Texture</defName>
<path>res:Texture/Monster/生物/全息3</path>
<wCount>1</wCount>
<hCount>1</hCount>
</ImageDef> -->
<ImageDef>
<defName>BiologicalSnakeMonster1Texture</defName>
<path>res:Texture/Monster/生物/蛇1</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
<!-- <ImageDef>
<defName>BiologicalSnakeMonster4Texture</defName>
<path>res:Texture/Monster/生物/蛇4</path>
<wCount>1</wCount>
<hCount>1</hCount>
</ImageDef> -->
<!-- <ImageDef>
<defName>BiologicalRatMonster1Texture</defName>
<path>res:Texture/Monster/生物/鼠鼠1</path>
<wCount>1</wCount>
<hCount>1</hCount>
</ImageDef>
<ImageDef>
<defName>BiologicalRatMonster2Texture</defName>
<path>res:Texture/Monster/生物/鼠鼠2</path>
<wCount>1</wCount>
<hCount>1</hCount>
</ImageDef> -->
<!-- Generic Bullet Texture (if not specific per monster) -->
<ImageDef>
<defName>GenericBulletTexture</defName>
<path>res:Texture/Bullet/GenericBullet</path>
<wCount>1</wCount>
<hCount>1</hCount>
<pixelsPerUnit>1500</pixelsPerUnit>
</ImageDef>
</Define>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Define>
</Define>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Define>
<MessageDef>
<defName>StarWait</defName>
<label>起始等待提示</label>
<description>怪物会在3秒后到达</description>
<type>PassiveHint</type>
<text>怪物会在3秒后到达请做好准备</text>
</MessageDef>
</Define>

View File

@@ -0,0 +1,15 @@
<Define>
<ImageDef>
<defName>Coin</defName>
<label>金币贴图</label>
<path>Resources\Item\粒子.png</path>
</ImageDef>
<ItemDef>
<defName>Coin</defName>
<label>金币</label>
<description>可以用来购买物品</description>
<textures>
<li>Coin</li>
</textures>
</ItemDef>
</Define>

View File

@@ -105,333 +105,5 @@
</walk_down>
</drawingOrder>
</BulletDef>
<AttributesDef>
<defName>Claw</defName>
<attack>3</attack>
<defense>1</defense>
<attackSpeed>1</attackSpeed>
<attackRange>1</attackRange>
<attackTargetCount>1</attackTargetCount>
</AttributesDef>
<WeaponDef>
<defName>Claw</defName>
<label>爪子</label>
<type>Melee</type>
<description>爪子</description>
<attributes>Claw</attributes>
</WeaponDef>
<!-- Bullet Definitions for Remote Monsters (assuming generic bullet texture) -->
<BulletDef>
<defName>MonsterA1Bullet</defName>
<attributes>
<health>1</health>
<moveSpeed>15</moveSpeed>
</attributes>
<drawingOrder>
<idle_down>
<textures>
<li>GenericBulletTexture</li>
</textures>
</idle_down>
<walk_down>
<textures>
<li>GenericBulletTexture</li>
</textures>
</walk_down>
</drawingOrder>
</BulletDef>
<BulletDef>
<defName>MonsterA2Bullet</defName>
<attributes>
<health>1</health>
<moveSpeed>18</moveSpeed>
</attributes>
<drawingOrder>
<idle_down>
<textures>
<li>GenericBulletTexture</li>
</textures>
</idle_down>
<walk_down>
<textures>
<li>GenericBulletTexture</li>
</textures>
</walk_down>
</drawingOrder>
</BulletDef>
<BulletDef>
<defName>MonsterD1Bullet</defName>
<attributes>
<health>1</health>
<moveSpeed>16</moveSpeed>
</attributes>
<drawingOrder>
<idle_down>
<textures>
<li>GenericBulletTexture</li>
</textures>
</idle_down>
<walk_down>
<textures>
<li>GenericBulletTexture</li>
</textures>
</walk_down>
</drawingOrder>
</BulletDef>
<BulletDef>
<defName>MonsterD2Bullet</defName>
<attributes>
<health>1</health>
<moveSpeed>19</moveSpeed>
</attributes>
<drawingOrder>
<idle_down>
<textures>
<li>GenericBulletTexture</li>
</textures>
</idle_down>
<walk_down>
<textures>
<li>GenericBulletTexture</li>
</textures>
</walk_down>
</drawingOrder>
</BulletDef>
<BulletDef>
<defName>BiologicalSnakeMonsterBullet</defName>
<attributes>
<health>1</health>
<moveSpeed>20</moveSpeed>
</attributes>
<drawingOrder>
<idle_down>
<textures>
<li>GenericBulletTexture</li>
</textures>
</idle_down>
<walk_down>
<textures>
<li>GenericBulletTexture</li>
</textures>
</walk_down>
</drawingOrder>
</BulletDef>
<!-- Weapon Definitions for all monsters -->
<!-- Mechanical Monsters -->
<WeaponDef>
<defName>Weapon_MonsterA1</defName>
<label>A怪物1的远程武器</label>
<type>Ranged</type>
<attributes>
<attack>612</attack>
<attackSpeed>0.333</attackSpeed> <!-- 1 / 3s -->
<attackRange>10</attackRange> <!-- Assumed range -->
</attributes>
<bullet>MonsterA1Bullet</bullet>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MonsterA2</defName>
<label>A怪物2的远程武器</label>
<type>Ranged</type>
<attributes>
<attack>408</attack>
<attackSpeed>0.555</attackSpeed> <!-- 1 / 1.8s -->
<attackRange>12</attackRange>
</attributes>
<bullet>MonsterA2Bullet</bullet>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MonsterB1</defName>
<label>B怪物1的近战武器</label>
<type>Melee</type>
<attributes>
<attack>1148</attack>
<attackSpeed>0.2</attackSpeed> <!-- 1 / 5s -->
<attackRange>1.5</attackRange>
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MonsterB2</defName>
<label>B怪物2的近战武器</label>
<type>Melee</type>
<attributes>
<attack>1045</attack>
<attackSpeed>0.222</attackSpeed> <!-- 1 / 4.5s -->
<attackRange>1.5</attackRange>
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MonsterC1</defName>
<label>C怪物1的近战武器</label>
<type>Melee</type>
<attributes>
<attack>728</attack>
<attackSpeed>0.5</attackSpeed> <!-- 1 / 2s -->
<attackRange>2</attackRange>
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MonsterC2</defName>
<label>C怪物2的近战武器</label>
<type>Melee</type>
<attributes>
<attack>1078</attack>
<attackSpeed>0.333</attackSpeed> <!-- 1 / 3s -->
<attackRange>2</attackRange>
</attributes>
</WeaponDef>
<!-- Hybrid Monsters -->
<WeaponDef>
<defName>Weapon_MonsterD1</defName>
<label>D怪物1的远程武器</label>
<type>Ranged</type>
<attributes>
<attack>646</attack>
<attackSpeed>0.333</attackSpeed> <!-- 1 / 3s -->
<attackRange>11</attackRange>
</attributes>
<bullet>MonsterD1Bullet</bullet>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MonsterD2</defName>
<label>D怪物2的远程武器</label>
<type>Ranged</type>
<attributes>
<attack>412</attack>
<attackSpeed>0.555</attackSpeed> <!-- 1 / 1.8s -->
<attackRange>13</attackRange>
</attributes>
<bullet>MonsterD2Bullet</bullet>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MonsterE1</defName>
<label>E怪物1的近战武器</label>
<type>Melee</type>
<attributes>
<attack>1622</attack>
<attackSpeed>0.125</attackSpeed> <!-- 1 / 8s -->
<attackRange>1.5</attackRange>
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MonsterE2</defName>
<label>E怪物2的近战武器</label>
<type>Melee</type>
<attributes>
<attack>1875</attack>
<attackSpeed>0.125</attackSpeed> <!-- 1 / 8s -->
<attackRange>1.5</attackRange>
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MonsterF1</defName>
<label>F怪物1的巨型近战武器</label>
<type>Melee</type>
<attributes>
<attack>2048</attack>
<attackSpeed>0.238</attackSpeed> <!-- 1 / 4.2s -->
<attackRange>2.5</attackRange> <!-- BOSS可能范围更大 -->
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MonsterF2</defName>
<label>F怪物2的巨型近战武器</label>
<type>Melee</type>
<attributes>
<attack>2254</attack>
<attackSpeed>0.222</attackSpeed> <!-- 1 / 4.5s -->
<attackRange>2.5</attackRange>
</attributes>
</WeaponDef>
<!-- Biological Monsters -->
<WeaponDef>
<defName>Weapon_MaskMonster</defName>
<label>面具怪物的近战武器</label>
<type>Melee</type>
<attributes>
<attack>389</attack> <!-- Base for M_MaskMonster1 -->
<attackSpeed>0.333</attackSpeed> <!-- 1 / 3s -->
<attackRange>1.2</attackRange>
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_MaskMonsterElite</defName>
<label>精英面具怪物的近战武器</label>
<type>Melee</type>
<attributes>
<attack>728</attack> <!-- Base for M_MaskMonster4 -->
<attackSpeed>0.385</attackSpeed> <!-- 1 / 2.6s -->
<attackRange>1.2</attackRange>
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_HologramMonster</defName>
<label>全息怪物的近战武器</label>
<type>Melee</type>
<attributes>
<attack>666</attack> <!-- Base for M_HologramMonster1 -->
<attackSpeed>0.166</attackSpeed> <!-- 1 / 6s -->
<attackRange>1.8</attackRange>
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_HologramMonsterElite</defName>
<label>精英全息怪物的近战武器</label>
<type>Melee</type>
<attributes>
<attack>1666</attack> <!-- Base for M_HologramMonster3 -->
<attackSpeed>0.166</attackSpeed> <!-- 1 / 6s -->
<attackRange>1.8</attackRange>
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_SnakeMonster</defName>
<label>蛇怪物的远程武器</label>
<type>Ranged</type>
<attributes>
<attack>125</attack> <!-- Base for M_SnakeMonster1 -->
<attackSpeed>1</attackSpeed> <!-- 1 / 1s -->
<attackRange>8</attackRange>
</attributes>
<bullet>BiologicalSnakeMonsterBullet</bullet>
</WeaponDef>
<WeaponDef>
<defName>Weapon_SnakeMonsterElite</defName>
<label>精英蛇怪物的远程武器</label>
<type>Ranged</type>
<attributes>
<attack>246</attack> <!-- Base for M_SnakeMonster4 -->
<attackSpeed>1</attackSpeed> <!-- 1 / 1s -->
<attackRange>10</attackRange>
</attributes>
<bullet>BiologicalSnakeMonsterBullet</bullet>
</WeaponDef>
<WeaponDef>
<defName>Weapon_RatMonster</defName>
<label>鼠鼠的近战武器</label>
<type>Melee</type>
<attributes>
<attack>11</attack>
<attackSpeed>1</attackSpeed> <!-- 1 / 1s -->
<attackRange>0.8</attackRange>
</attributes>
</WeaponDef>
<WeaponDef>
<defName>Weapon_RatMonsterElite</defName>
<label>精英鼠鼠的近战武器</label>
<type>Melee</type>
<attributes>
<attack>22</attack>
<attackSpeed>0.5</attackSpeed> <!-- 1 / 2s -->
<attackRange>0.8</attackRange>
</attributes>
</WeaponDef>
</Define>

View File

@@ -6,8 +6,9 @@
<description>默认外部维度地图的描述</description>
<mapGenerators>
<li>DefaultMapGenerator</li>
<li>TreeGenerator</li>
<!-- <li>TreeGenerator</li> -->
</mapGenerators>
<canSelect>false</canSelect>
</DimensionDef>
<DimensionDef>
<defName>DefaultInsideDimension</defName>
@@ -15,8 +16,9 @@
<description>默认内部维度地图的描述</description>
<mapGenerators>
<li>DefaultMapGenerator2</li>
<li>TreeGenerator</li>
<!-- <li>TreeGenerator</li> -->
</mapGenerators>
<canSelect>false</canSelect>
</DimensionDef>
<DimensionDef>
<defName>DefaultBaseDimension</defName>
@@ -25,8 +27,9 @@
<mapGenerators>
<li>BaseFloorFiller</li>
<li>BaseUpWallFiller</li>
<li>BaseDownWallFiller</li>
<!-- <li>BaseDownWallFiller</li> -->
<li>BaseBuildingGenerator</li>
</mapGenerators>
<canSelect>false</canSelect>
</DimensionDef>
</Define>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Define>
<MapGeneratorDef>
<defName>GrassBase</defName>
<label>草地基础生成器</label>
<description>一个简单的草地基础生成器,填充地图为草地</description>
<workClass>BasicTerrainMapGenerator</workClass>
<value>
{
"tileDefName":"Grass",
"mapCellSizeX":100,
"mapCellSizeY":100,
"threshold":-1,
"Scale":7
}
</value>
</MapGeneratorDef>
<DimensionDef>
<defName>Grass</defName>
<label>草地</label>
<description>草地地势平坦敌人少资源也少</description>
<mapGenerators>
<li>GrassBase</li>
</mapGenerators>
<icon>tileMap</icon>
</DimensionDef>
</Define>

View File

@@ -9,10 +9,10 @@
{
"tileDefName":"Water",
"elseTileDefName":"Grassland",
"mapCellSizeX":100,
"mapCellSizeY":100,
"mapCellSizeX":50,
"mapCellSizeY":50,
"threshold":0,
"Scale":7
"Scale":3
}
</value>
</MapGeneratorDef>
@@ -26,8 +26,8 @@
{
"tileDefName":"Water",
"elseTileDefName":"Grass",
"mapCellSizeX":100,
"mapCellSizeY":100,
"mapCellSizeX":50,
"mapCellSizeY":50,
"threshold":0.3,
"Scale":2,
"offsetX":100,
@@ -77,15 +77,16 @@
<value>
{
"defName":"ConcreteWall",
"positionX":15,
"positionX":9,
"positionY":20,
"mapping":
{
1:"ConcreteWall",
2:"SkillTreeShop"
2:"SkillTreeShop",
3:"StartPoint"
},
"pattern": [
[2]
[2,0,0,0,0,0,0,0,0,0,0,0,0,3],
]
}
</value>

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B