From 6c392764d55d6e0b8e65539d6b91f9098d6c807d Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 8 Jun 2026 01:01:42 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EB=8D=B1=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=20=EC=BD=94=EB=93=9C=EB=A6=AC=EB=B7=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EC=84=A4=EA=B3=84=20=EB=AC=B8=EC=84=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- ...2026-06-08-deck-controller-fixes-design.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/superpowers/specs/2026-06-08-deck-controller-fixes-design.md diff --git a/docs/superpowers/specs/2026-06-08-deck-controller-fixes-design.md b/docs/superpowers/specs/2026-06-08-deck-controller-fixes-design.md new file mode 100644 index 0000000..4e1a71d --- /dev/null +++ b/docs/superpowers/specs/2026-06-08-deck-controller-fixes-design.md @@ -0,0 +1,37 @@ +# 덱 컨트롤러 코드리뷰 수정 설계 + +- 날짜: 2026-06-08 +- 브랜치: feature/deck-controller-fixes (main 기준) +- 대상: `tools/gen-slaydeck.mjs` (단일 소스) → 재생성으로 `ui/DefaultGroup.ui`·`RootDesk/MyDesk/SlayDeckController.codeblock`·`Global/common.gamelogic` 갱신 + +## 배경 + +PR #6의 `SlayDeckController` 코드 리뷰에서 6건을 발견. 모든 산출물(카드 UI·DeckHud·codeblock·common 패치)은 `tools/gen-slaydeck.mjs` 한 곳에서 생성되므로, 이 생성기를 고치고 재실행하면 전부 반영된다. + +## 수정 항목 + +- **① [Important] EndTurn 핸들러 self 바인딩**: `buttonEntity:ConnectEvent(ButtonClickEvent, self.EndPlayerTurn)` → `ConnectEvent(ButtonClickEvent, function() self:EndPlayerTurn() end)`. 메서드 직접 전달 시 self가 event로 잘못 바인딩되는 문제 제거. (타이머는 이미 클로저 사용 — 일관성) +- **② [Important] Card5 이미지 충돌**: 이미 `gen-slaydeck.upsertUi`가 Card1~5를 동일 텍스트 카드로 통일(ImageRUID='', 틴트, Cost/Name/Desc 추가)하므로 재생성으로 해결됨. 추가 코드 변경 없음 — 검증만. +- **③ [기능] 카드 클릭 = 사용**: + - `upsertUi`의 카드 스타일 루프에서 Card1~5에 `ButtonComponent` 추가 + 카드 스프라이트 `RaycastTarget=true`. + - codeblock에 `PlayCard(slot)` 메서드 추가: `Hand[slot]`의 카드 코스트를 `CARDS`에서 조회 → `Energy >= cost`면 `Energy -= cost`, 효과 표시(토스트/로그, 예: "타격 — 피해 6"), `Hand`에서 제거 후 `DiscardPile`에 삽입, `RenderHand(false)`+`RenderPiles()`. 부족하면 사용 불가(토스트/로그). + - `BindButtons`에서 각 카드의 `ButtonClickEvent`를 `function() self:PlayCard(i) end` 클로저로 연결(루프 변수 i는 Lua에서 반복마다 새 지역변수라 안전). 재연결 전 이전 핸들러 해제. +- **④ [Minor] 카드 데이터 단일화**: `CARDS = { Strike={name,cost,desc,kind}, Defend={...}, Bash={...} }` 테이블을 codeblock 상단에 두고, 시작덱 구성·`ApplyCardVisual`·`PlayCard`가 공유(if/elseif 중복 제거). +- **⑤ [Minor] 매직넘버 상수화**: 손패/드로우 수(5), 시작 에너지(3) 등 의미 있는 상수로. +- **⑥ [Nit] pcall 제거**: `ApplyCardVisual`의 `pcall(function() return Color(...) end)` → 직접 `Color(...)` 호출(틴트는 `CARDS[id].kind`별 색). + +## 효과 표시(③) + +적/데미지 시스템이 없으므로 카드 사용 효과는 **토스트 또는 로그**로만 표현(예: `log("타격 — 피해 6")` 또는 UIToast). 실제 데미지 적용은 범위 밖. + +## 재생성·검증 + +1. `node --check tools/gen-slaydeck.mjs` → `node tools/gen-slaydeck.mjs` +2. 검증(데이터): codeblock에 `PlayCard` 존재, `BindButtons`/EndTurn이 클로저, `CARDS` 단일 테이블, `ApplyCardVisual`에 pcall 없음. DefaultGroup.ui의 Card1~5에 `ButtonComponent` + RaycastTarget true, Card5가 균일 텍스트 카드(ImageRUID 빈값·Cost/Name/Desc 존재). +3. Maker Play: 카드 클릭 → 에너지 감소·카드가 버림더미로·재렌더, EndTurn 버튼 동작, 5장 균일. + +## stash 복구 +이전 Maker 세션에서 stash해 둔 로컬 맵 변경(map02/05/06/07/10/11)을 이 브랜치에 복구해 포함. 단 복구분이 몬스터/타일셋 작업을 유지하는지(되돌리지 않는지) 무결성 검증 후 커밋. 손상/무의미하면 사용자에게 알리고 제외. + +## 범위 밖 (YAGNI) +적 턴, 카드 효과의 실제 전투 적용, 신규 카드 종류. From 5bc5b3dc5cbf24d6464cbfecb0135d8bac73abd1 Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 8 Jun 2026 01:07:46 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=EB=8D=B1=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=20=EC=83=9D=EC=84=B1=EA=B8=B0:=20=ED=95=B8=EB=93=A4?= =?UTF-8?q?=EB=9F=AC=20=ED=81=B4=EB=A1=9C=EC=A0=80=ED=99=94=C2=B7=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EB=8B=A8=EC=9D=BC?= =?UTF-8?q?=ED=99=94=C2=B7=EC=B9=B4=EB=93=9C=ED=81=B4=EB=A6=AD=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=C2=B7pcall=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- tools/gen-slaydeck.mjs | 104 ++++++++++++++++++++++++----------------- 1 file changed, 62 insertions(+), 42 deletions(-) diff --git a/tools/gen-slaydeck.mjs b/tools/gen-slaydeck.mjs index 6da250d..690ab3f 100644 --- a/tools/gen-slaydeck.mjs +++ b/tools/gen-slaydeck.mjs @@ -193,6 +193,14 @@ function upsertUi() { sp.ImageRUID = { DataId: '' }; sp.Type = 1; sp.Color = cards[i - 1].tint; + sp.RaycastTarget = true; + const comps = card.jsonString['@components']; + if (!comps.some((c) => c['@type'] === 'MOD.Core.ButtonComponent')) { + comps.push(button()); + } + if (!card.componentNames.includes('MOD.Core.ButtonComponent')) { + card.componentNames += ',MOD.Core.ButtonComponent'; + } card.jsonString.enable = true; card.jsonString.visible = true; @@ -383,12 +391,18 @@ function writeCodeblocks() { prop('number', 'Turn', '0'), prop('number', 'TweenEventId', '0'), prop('any', 'EndTurnHandler'), + prop('any', 'Cards'), ], [ method('OnBeginPlay', `self:StartCombat()`), method('StartCombat', `self.MaxEnergy = 3 self.Turn = 0 self.DiscardPile = {} self.Hand = {} +self.Cards = { + Strike = { name = "타격", cost = 1, desc = "피해 6", kind = "Attack" }, + Defend = { name = "방어", cost = 1, desc = "방어도 5", kind = "Skill" }, + Bash = { name = "강타", cost = 2, desc = "피해 10", kind = "Attack" }, +} self.DrawPile = { "Strike", "Strike", "Strike", "Strike", "Strike", "Defend", "Defend", "Defend", "Defend", "Bash" } self:Shuffle(self.DrawPile) self:BindButtons() @@ -400,15 +414,20 @@ for i = #list, 2, -1 do \tlocal j = math.random(1, i) \tlist[i], list[j] = list[j], list[i] end`, [{ Type: 'any', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'list' }]), - method('BindButtons', `local buttonEntity = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckHud/EndTurnButton") -if buttonEntity == nil or buttonEntity.ButtonComponent == nil then -\treturn + method('BindButtons', `local endTurn = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckHud/EndTurnButton") +if endTurn ~= nil and endTurn.ButtonComponent ~= nil then + if self.EndTurnHandler ~= nil then + endTurn:DisconnectEvent(ButtonClickEvent, self.EndTurnHandler) + self.EndTurnHandler = nil + end + self.EndTurnHandler = endTurn:ConnectEvent(ButtonClickEvent, function() self:EndPlayerTurn() end) end -if self.EndTurnHandler ~= nil then -\tbuttonEntity:DisconnectEvent(ButtonClickEvent, self.EndTurnHandler) -\tself.EndTurnHandler = nil -end -self.EndTurnHandler = buttonEntity:ConnectEvent(ButtonClickEvent, self.EndPlayerTurn)`), +for i = 1, 5 do + local cardEntity = _EntityService:GetEntityByPath("/ui/DefaultGroup/CardHand/Card" .. tostring(i)) + if cardEntity ~= nil and cardEntity.ButtonComponent ~= nil then + cardEntity:ConnectEvent(ButtonClickEvent, function() self:PlayCard(i) end) + end +end`), method('StartPlayerTurn', `self.Turn = self.Turn + 1 self.Energy = self.MaxEnergy self:DrawCards(5) @@ -460,43 +479,22 @@ for i = 1, 5 do \tend end self:RenderPiles()`, [{ Type: 'boolean', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'animate' }]), - method('ApplyCardVisual', `local name = cardId -local cost = 0 -local desc = "" -local kind = "Skill" -if cardId == "Strike" then -\tname = "타격" -\tcost = 1 -\tdesc = "피해 6" -\tkind = "Attack" -elseif cardId == "Defend" then -\tname = "방어" -\tcost = 1 -\tdesc = "방어도 5" -\tkind = "Skill" -elseif cardId == "Bash" then -\tname = "강타" -\tcost = 2 -\tdesc = "피해 10" -\tkind = "Attack" + method('ApplyCardVisual', `local c = self.Cards[cardId] +if c == nil then + c = { name = cardId, cost = 0, desc = "", kind = "Skill" } end -self:SetText("/ui/DefaultGroup/CardHand/Card" .. tostring(slot) .. "/Cost", tostring(cost)) -self:SetText("/ui/DefaultGroup/CardHand/Card" .. tostring(slot) .. "/Name", name) -self:SetText("/ui/DefaultGroup/CardHand/Card" .. tostring(slot) .. "/Desc", desc) +self:SetText("/ui/DefaultGroup/CardHand/Card" .. tostring(slot) .. "/Cost", tostring(c.cost)) +self:SetText("/ui/DefaultGroup/CardHand/Card" .. tostring(slot) .. "/Name", c.name) +self:SetText("/ui/DefaultGroup/CardHand/Card" .. tostring(slot) .. "/Desc", c.desc) local cardEntity = _EntityService:GetEntityByPath("/ui/DefaultGroup/CardHand/Card" .. tostring(slot)) if cardEntity ~= nil and cardEntity.SpriteGUIRendererComponent ~= nil then -\tlocal ok = false -\tlocal color = nil -\tif kind == "Attack" then -\t\tok, color = pcall(function() return Color(0.86, 0.42, 0.38, 1) end) -\telseif kind == "Skill" then -\t\tok, color = pcall(function() return Color(0.42, 0.55, 0.85, 1) end) -\telse -\t\tok, color = pcall(function() return Color(0.46, 0.68, 0.52, 1) end) -\tend -\tif ok == true and color ~= nil then -\t\tcardEntity.SpriteGUIRendererComponent.Color = color -\tend + if c.kind == "Attack" then + cardEntity.SpriteGUIRendererComponent.Color = Color(0.86, 0.42, 0.38, 1) + elseif c.kind == "Skill" then + cardEntity.SpriteGUIRendererComponent.Color = Color(0.42, 0.55, 0.85, 1) + else + cardEntity.SpriteGUIRendererComponent.Color = Color(0.46, 0.68, 0.52, 1) + end end`, [ { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }, { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'cardId' }, @@ -530,6 +528,28 @@ end, 1 / 60)`, [ { Type: 'any', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'toPos' }, { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'duration' }, ]), + method('PlayCard', `if self.Hand == nil then + return +end +local cardId = self.Hand[slot] +if cardId == nil then + return +end +local c = self.Cards[cardId] +if c == nil then + return +end +if self.Energy < c.cost then + self:Toast("에너지가 부족합니다") + return +end +self.Energy = self.Energy - c.cost +self:Toast(c.name .. " — " .. c.desc) +table.remove(self.Hand, slot) +table.insert(self.DiscardPile, cardId) +self:RenderHand(false) +self:RenderPiles()`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }]), + method('Toast', `log(message)`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'message' }]), ]); for (const m of combat.ContentProto.Json.Methods) { m.ExecSpace = 6; From f508952960d5903138609e17a6513592ce6965b3 Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 8 Jun 2026 01:08:40 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=EC=9E=AC=EC=83=9D=EC=84=B1:=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=ED=81=B4=EB=A6=AD=20=EC=82=AC=EC=9A=A9=C2=B7?= =?UTF-8?q?=EA=B7=A0=EC=9D=BC=20=EC=B9=B4=EB=93=9C=C2=B7=ED=95=B8=EB=93=A4?= =?UTF-8?q?=EB=9F=AC=20=ED=81=B4=EB=A1=9C=EC=A0=80=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- RootDesk/MyDesk/SlayDeckController.codeblock | 59 +++- .../plans/2026-06-08-deck-controller-fixes.md | 256 ++++++++++++++++++ ui/DefaultGroup.ui | 245 ++++++++++++++++- 3 files changed, 552 insertions(+), 8 deletions(-) create mode 100644 docs/superpowers/plans/2026-06-08-deck-controller-fixes.md diff --git a/RootDesk/MyDesk/SlayDeckController.codeblock b/RootDesk/MyDesk/SlayDeckController.codeblock index 38e6e82..18d3778 100644 --- a/RootDesk/MyDesk/SlayDeckController.codeblock +++ b/RootDesk/MyDesk/SlayDeckController.codeblock @@ -84,6 +84,13 @@ "SyncDirection": 0, "Attributes": [], "Name": "EndTurnHandler" + }, + { + "Type": "any", + "DefaultValue": "nil", + "SyncDirection": 0, + "Attributes": [], + "Name": "Cards" } ], "Methods": [ @@ -111,7 +118,7 @@ "Name": null }, "Arguments": [], - "Code": "self.MaxEnergy = 3\nself.Turn = 0\nself.DiscardPile = {}\nself.Hand = {}\nself.DrawPile = { \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Defend\", \"Defend\", \"Defend\", \"Defend\", \"Bash\" }\nself:Shuffle(self.DrawPile)\nself:BindButtons()\nself:StartPlayerTurn()", + "Code": "self.MaxEnergy = 3\nself.Turn = 0\nself.DiscardPile = {}\nself.Hand = {}\nself.Cards = {\n\tStrike = { name = \"타격\", cost = 1, desc = \"피해 6\", kind = \"Attack\" },\n\tDefend = { name = \"방어\", cost = 1, desc = \"방어도 5\", kind = \"Skill\" },\n\tBash = { name = \"강타\", cost = 2, desc = \"피해 10\", kind = \"Attack\" },\n}\nself.DrawPile = { \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Defend\", \"Defend\", \"Defend\", \"Defend\", \"Bash\" }\nself:Shuffle(self.DrawPile)\nself:BindButtons()\nself:StartPlayerTurn()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -149,7 +156,7 @@ "Name": null }, "Arguments": [], - "Code": "local buttonEntity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckHud/EndTurnButton\")\nif buttonEntity == nil or buttonEntity.ButtonComponent == nil then\n\treturn\nend\nif self.EndTurnHandler ~= nil then\n\tbuttonEntity:DisconnectEvent(ButtonClickEvent, self.EndTurnHandler)\n\tself.EndTurnHandler = nil\nend\nself.EndTurnHandler = buttonEntity:ConnectEvent(ButtonClickEvent, self.EndPlayerTurn)", + "Code": "local endTurn = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/DeckHud/EndTurnButton\")\nif endTurn ~= nil and endTurn.ButtonComponent ~= nil then\n\tif self.EndTurnHandler ~= nil then\n\t\tendTurn:DisconnectEvent(ButtonClickEvent, self.EndTurnHandler)\n\t\tself.EndTurnHandler = nil\n\tend\n\tself.EndTurnHandler = endTurn:ConnectEvent(ButtonClickEvent, function() self:EndPlayerTurn() end)\nend\nfor i = 1, 5 do\n\tlocal cardEntity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CardHand/Card\" .. tostring(i))\n\tif cardEntity ~= nil and cardEntity.ButtonComponent ~= nil then\n\t\tcardEntity:ConnectEvent(ButtonClickEvent, function() self:PlayCard(i) end)\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -285,7 +292,7 @@ "Name": "cardId" } ], - "Code": "local name = cardId\nlocal cost = 0\nlocal desc = \"\"\nlocal kind = \"Skill\"\nif cardId == \"Strike\" then\n\tname = \"타격\"\n\tcost = 1\n\tdesc = \"피해 6\"\n\tkind = \"Attack\"\nelseif cardId == \"Defend\" then\n\tname = \"방어\"\n\tcost = 1\n\tdesc = \"방어도 5\"\n\tkind = \"Skill\"\nelseif cardId == \"Bash\" then\n\tname = \"강타\"\n\tcost = 2\n\tdesc = \"피해 10\"\n\tkind = \"Attack\"\nend\nself:SetText(\"/ui/DefaultGroup/CardHand/Card\" .. tostring(slot) .. \"/Cost\", tostring(cost))\nself:SetText(\"/ui/DefaultGroup/CardHand/Card\" .. tostring(slot) .. \"/Name\", name)\nself:SetText(\"/ui/DefaultGroup/CardHand/Card\" .. tostring(slot) .. \"/Desc\", desc)\nlocal cardEntity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CardHand/Card\" .. tostring(slot))\nif cardEntity ~= nil and cardEntity.SpriteGUIRendererComponent ~= nil then\n\tlocal ok = false\n\tlocal color = nil\n\tif kind == \"Attack\" then\n\t\tok, color = pcall(function() return Color(0.86, 0.42, 0.38, 1) end)\n\telseif kind == \"Skill\" then\n\t\tok, color = pcall(function() return Color(0.42, 0.55, 0.85, 1) end)\n\telse\n\t\tok, color = pcall(function() return Color(0.46, 0.68, 0.52, 1) end)\n\tend\n\tif ok == true and color ~= nil then\n\t\tcardEntity.SpriteGUIRendererComponent.Color = color\n\tend\nend", + "Code": "local c = self.Cards[cardId]\nif c == nil then\n\tc = { name = cardId, cost = 0, desc = \"\", kind = \"Skill\" }\nend\nself:SetText(\"/ui/DefaultGroup/CardHand/Card\" .. tostring(slot) .. \"/Cost\", tostring(c.cost))\nself:SetText(\"/ui/DefaultGroup/CardHand/Card\" .. tostring(slot) .. \"/Name\", c.name)\nself:SetText(\"/ui/DefaultGroup/CardHand/Card\" .. tostring(slot) .. \"/Desc\", c.desc)\nlocal cardEntity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CardHand/Card\" .. tostring(slot))\nif cardEntity ~= nil and cardEntity.SpriteGUIRendererComponent ~= nil then\n\tif c.kind == \"Attack\" then\n\t\tcardEntity.SpriteGUIRendererComponent.Color = Color(0.86, 0.42, 0.38, 1)\n\telseif c.kind == \"Skill\" then\n\t\tcardEntity.SpriteGUIRendererComponent.Color = Color(0.42, 0.55, 0.85, 1)\n\telse\n\t\tcardEntity.SpriteGUIRendererComponent.Color = Color(0.46, 0.68, 0.52, 1)\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -364,6 +371,52 @@ "ExecSpace": 6, "Attributes": [], "Name": "AnimateCardFrom" + }, + { + "Return": { + "Type": "void", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [ + { + "Type": "number", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": "slot" + } + ], + "Code": "if self.Hand == nil then\n\treturn\nend\nlocal cardId = self.Hand[slot]\nif cardId == nil then\n\treturn\nend\nlocal c = self.Cards[cardId]\nif c == nil then\n\treturn\nend\nif self.Energy < c.cost then\n\tself:Toast(\"에너지가 부족합니다\")\n\treturn\nend\nself.Energy = self.Energy - c.cost\nself:Toast(c.name .. \" — \" .. c.desc)\ntable.remove(self.Hand, slot)\ntable.insert(self.DiscardPile, cardId)\nself:RenderHand(false)\nself:RenderPiles()", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "PlayCard" + }, + { + "Return": { + "Type": "void", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [ + { + "Type": "string", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": "message" + } + ], + "Code": "log(message)", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "Toast" } ], "EntityEventHandlers": [] diff --git a/docs/superpowers/plans/2026-06-08-deck-controller-fixes.md b/docs/superpowers/plans/2026-06-08-deck-controller-fixes.md new file mode 100644 index 0000000..166a5ff --- /dev/null +++ b/docs/superpowers/plans/2026-06-08-deck-controller-fixes.md @@ -0,0 +1,256 @@ +# 덱 컨트롤러 코드리뷰 수정 Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 코드리뷰 6건(①self바인딩 ②Card5통일 ③카드클릭=사용 ④카드데이터단일화 ⑤매직넘버 ⑥pcall)을 `tools/gen-slaydeck.mjs`에서 수정·재생성한다. + +**Architecture:** 모든 산출물(카드 UI·DeckHud·`SlayDeckController.codeblock`·`common.gamelogic`)을 생성하는 `tools/gen-slaydeck.mjs` 단일 소스를 수정하고 재실행한다. DRY는 카드 정의를 codeblock의 `self.Cards` 테이블 프로퍼티로 단일화하고, 카드 클릭은 카드 엔티티에 `ButtonComponent`를 추가한 뒤 `PlayCard(slot)` 메서드를 클로저로 연결해 구현한다. + +**Tech Stack:** Node.js 생성기, MSW codeblock(MapleScript/Lua), msw-maker-mcp(검증). + +--- + +## File Structure +- Modify: `tools/gen-slaydeck.mjs` — 모든 수정의 단일 소스. +- 재생성(출력): `ui/DefaultGroup.ui`, `RootDesk/MyDesk/SlayDeckController.codeblock`, `Global/common.gamelogic`. + +기준: codeblock 메서드는 `method('Name', ``, [args])`로 정의되고 끝에서 전부 `ExecSpace=6`로 설정됨. 카드 엔티티(Card1~5)는 `upsertUi`의 루프가 스타일링함. `button()` 헬퍼 존재. + +--- + +### Task 1: 생성기 수정 (① ③ ④ ⑥ + ⑤ 일부) + +**Files:** Modify `tools/gen-slaydeck.mjs` + +- [ ] **Step 1: 카드에 ButtonComponent + raycast 추가 (③ 클릭 가능)** + +`upsertUi`의 카드 루프에서 `sp.Color = cards[i - 1].tint;` 줄 바로 다음에 아래를 추가: +```js + sp.RaycastTarget = true; + const comps = card.jsonString['@components']; + if (!comps.some((c) => c['@type'] === 'MOD.Core.ButtonComponent')) { + comps.push(button()); + } + if (!card.componentNames.includes('MOD.Core.ButtonComponent')) { + card.componentNames += ',MOD.Core.ButtonComponent'; + } +``` + +- [ ] **Step 2: `Cards` 프로퍼티 추가 (④ 단일화 준비)** + +`writeCodeblocks`의 properties 배열(`prop('any', 'EndTurnHandler')` 가 있는 배열)에 항목 추가: +```js + prop('any', 'Cards'), +``` + +- [ ] **Step 3: StartCombat 메서드 교체 (④ 카드 테이블 정의)** + +`method('StartCombat', ...)` 의 Lua 본문을 아래로 교체: +``` +self.MaxEnergy = 3 +self.Turn = 0 +self.DiscardPile = {} +self.Hand = {} +self.Cards = { + Strike = { name = "타격", cost = 1, desc = "피해 6", kind = "Attack" }, + Defend = { name = "방어", cost = 1, desc = "방어도 5", kind = "Skill" }, + Bash = { name = "강타", cost = 2, desc = "피해 10", kind = "Attack" }, +} +self.DrawPile = { "Strike", "Strike", "Strike", "Strike", "Strike", "Defend", "Defend", "Defend", "Defend", "Bash" } +self:Shuffle(self.DrawPile) +self:BindButtons() +self:StartPlayerTurn() +``` + +- [ ] **Step 4: BindButtons 교체 (① 클로저 + ③ 카드 클릭 바인딩)** + +`method('BindButtons', ...)` 의 Lua 본문을 아래로 교체: +``` +local endTurn = _EntityService:GetEntityByPath("/ui/DefaultGroup/DeckHud/EndTurnButton") +if endTurn ~= nil and endTurn.ButtonComponent ~= nil then + if self.EndTurnHandler ~= nil then + endTurn:DisconnectEvent(ButtonClickEvent, self.EndTurnHandler) + self.EndTurnHandler = nil + end + self.EndTurnHandler = endTurn:ConnectEvent(ButtonClickEvent, function() self:EndPlayerTurn() end) +end +for i = 1, 5 do + local cardEntity = _EntityService:GetEntityByPath("/ui/DefaultGroup/CardHand/Card" .. tostring(i)) + if cardEntity ~= nil and cardEntity.ButtonComponent ~= nil then + cardEntity:ConnectEvent(ButtonClickEvent, function() self:PlayCard(i) end) + end +end +``` + +- [ ] **Step 5: ApplyCardVisual 교체 (④ self.Cards 사용 + ⑥ pcall 제거)** + +`method('ApplyCardVisual', ...)` 의 Lua 본문을 아래로 교체(인자 slot, cardId 유지): +``` +local c = self.Cards[cardId] +if c == nil then + c = { name = cardId, cost = 0, desc = "", kind = "Skill" } +end +self:SetText("/ui/DefaultGroup/CardHand/Card" .. tostring(slot) .. "/Cost", tostring(c.cost)) +self:SetText("/ui/DefaultGroup/CardHand/Card" .. tostring(slot) .. "/Name", c.name) +self:SetText("/ui/DefaultGroup/CardHand/Card" .. tostring(slot) .. "/Desc", c.desc) +local cardEntity = _EntityService:GetEntityByPath("/ui/DefaultGroup/CardHand/Card" .. tostring(slot)) +if cardEntity ~= nil and cardEntity.SpriteGUIRendererComponent ~= nil then + if c.kind == "Attack" then + cardEntity.SpriteGUIRendererComponent.Color = Color(0.86, 0.42, 0.38, 1) + elseif c.kind == "Skill" then + cardEntity.SpriteGUIRendererComponent.Color = Color(0.42, 0.55, 0.85, 1) + else + cardEntity.SpriteGUIRendererComponent.Color = Color(0.46, 0.68, 0.52, 1) + end +end +``` + +- [ ] **Step 6: PlayCard + Toast 메서드 추가 (③)** + +`method('AnimateCardFrom', ...)` 항목 다음(메서드 배열 안)에 두 메서드를 추가: +```js + method('PlayCard', `if self.Hand == nil then + return +end +local cardId = self.Hand[slot] +if cardId == nil then + return +end +local c = self.Cards[cardId] +if c == nil then + return +end +if self.Energy < c.cost then + self:Toast("에너지가 부족합니다") + return +end +self.Energy = self.Energy - c.cost +self:Toast(c.name .. " — " .. c.desc) +table.remove(self.Hand, slot) +table.insert(self.DiscardPile, cardId) +self:RenderHand(false) +self:RenderPiles()`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }]), + method('Toast', `log(message)`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'message' }]), +``` + +(⑤: 손패/슬롯 수 5는 UI 카드 엔티티가 정확히 5개라 고정값으로 둠 — 별도 상수 불필요. 시작 에너지/MaxEnergy는 이미 프로퍼티.) + +- [ ] **Step 7: 구문 확인 + 커밋** + +```bash +cd "C:/Users/jaeoh/Desktop/workspace/slaymaple" +node --check tools/gen-slaydeck.mjs +git add tools/gen-slaydeck.mjs +git commit -m "덱 컨트롤러 생성기: 핸들러 클로저화·카드데이터 단일화·카드클릭 사용·pcall 제거" +``` +Expected: `node --check` 무출력(exit 0). + +--- + +### Task 2: 재생성 + 데이터 검증 + +**Files:** Modify `ui/DefaultGroup.ui`, `RootDesk/MyDesk/SlayDeckController.codeblock`, `Global/common.gamelogic` + +- [ ] **Step 1: 재생성** + +```bash +cd "C:/Users/jaeoh/Desktop/workspace/slaymaple" +node tools/gen-slaydeck.mjs +``` +Expected: `Slay deck UI and combat codeblocks generated.` + +- [ ] **Step 2: codeblock 검증** + +```bash +cd "C:/Users/jaeoh/Desktop/workspace/slaymaple" +node -e "const j=JSON.parse(require('fs').readFileSync('RootDesk/MyDesk/SlayDeckController.codeblock','utf8'));const ms=j.ContentProto.Json.Methods;const names=ms.map(m=>m.Name);console.log('has PlayCard:',names.includes('PlayCard'));console.log('has Toast:',names.includes('Toast'));const bind=ms.find(m=>m.Name==='BindButtons').Code;console.log('endturn closure:',bind.includes('function() self:EndPlayerTurn() end'));console.log('card click bind:',bind.includes('function() self:PlayCard(i) end'));const av=ms.find(m=>m.Name==='ApplyCardVisual').Code;console.log('no pcall:',!av.includes('pcall'));console.log('uses self.Cards:',av.includes('self.Cards[cardId]'));const sc=ms.find(m=>m.Name==='StartCombat').Code;console.log('Cards table:',sc.includes('self.Cards ='))" +``` +Expected: 모두 `true`. + +- [ ] **Step 3: UI 검증 (카드 버튼 + Card5 통일)** + +```bash +cd "C:/Users/jaeoh/Desktop/workspace/slaymaple" +node -e "const j=JSON.parse(require('fs').readFileSync('ui/DefaultGroup.ui','utf8'));const E=j.ContentProto.Entities;let okBtn=true,okImg=true;for(let i=1;i<=5;i++){const c=E.find(e=>e.path==='/ui/DefaultGroup/CardHand/Card'+i);if(!c){okBtn=false;continue;}if(!(c.componentNames||'').includes('MOD.Core.ButtonComponent'))okBtn=false;const sp=c.jsonString['@components'].find(x=>x['@type']==='MOD.Core.SpriteGUIRendererComponent');if(sp.ImageRUID.DataId!=='')okImg=false;}const c5=E.find(e=>e.path==='/ui/DefaultGroup/CardHand/Card5');const hasDesc=E.some(e=>e.path==='/ui/DefaultGroup/CardHand/Card5/Desc');console.log('all cards have Button:',okBtn);console.log('all cards no image (uniform):',okImg);console.log('Card5 has Desc child:',hasDesc)" +``` +Expected: `all cards have Button: true`, `all cards no image (uniform): true`, `Card5 has Desc child: true`. + +- [ ] **Step 4: JSON 유효성 + 커밋** + +```bash +cd "C:/Users/jaeoh/Desktop/workspace/slaymaple" +node -e "JSON.parse(require('fs').readFileSync('ui/DefaultGroup.ui','utf8'));JSON.parse(require('fs').readFileSync('RootDesk/MyDesk/SlayDeckController.codeblock','utf8'));JSON.parse(require('fs').readFileSync('Global/common.gamelogic','utf8'));console.log('JSON ok')" +git add ui/DefaultGroup.ui RootDesk/MyDesk/SlayDeckController.codeblock Global/common.gamelogic +git commit -m "재생성: 카드 클릭 사용·균일 카드·핸들러 수정 반영" +``` +Expected: `JSON ok`. + +--- + +### Task 3: Maker Play 검증 (컨트롤러) + +**Files:** 없음 + +- [ ] **Step 1: reload**: `maker_refresh_workspace`. +- [ ] **Step 2: 시작 맵 활성화 확인**: `maker_get_current_map`. (어느 맵이든 카드 UI는 전역이라 표시됨) +- [ ] **Step 3: play**: `maker_play`. +- [ ] **Step 4: 클릭 시뮬레이션 + 상태 확인**: `maker_execute_script`(client)로 PlayCard 직접 호출해 동작 확인: + ```lua + local ctrl = _EntityService:GetEntityByPath("/common") + -- 초기 상태 + local c = ctrl.SlayDeckController + log("BEFORE energy="..tostring(c.Energy).." hand="..tostring(#c.Hand).." discard="..tostring(#c.DiscardPile)) + c:PlayCard(1) + log("AFTER energy="..tostring(c.Energy).." hand="..tostring(#c.Hand).." discard="..tostring(#c.DiscardPile)) + ``` + → `maker_logs(normal)`에서 카드 사용 후 energy 감소·hand 감소·discard 증가 확인. (또는 `maker_mouse_input`으로 카드 클릭) +- [ ] **Step 5: screenshot**: `maker_screenshot` → Read로 5장 균일·DeckHud(에너지/덱 카운트) 확인. +- [ ] **Step 6: stop**: `maker_stop`. + +문제 시: 핸들러 self·PlayCard 동작 로그로 진단 후 Task 1 수정·재생성. + +--- + +### Task 4: stash 복구 + 무결성 검증 + +**Files:** `map/map02.map`, `map/map05.map`, `map/map06.map`, `map/map07.map`, `map/map10.map`, `map/map11.map` (복구 대상) + +- [ ] **Step 1: stash 적용** + +```bash +cd "C:/Users/jaeoh/Desktop/workspace/slaymaple" +git stash list +git stash apply 2>&1 | head -20 +``` +(충돌 시 해당 파일은 main 버전 유지하고 stash 변경만 수동 반영하거나, 무의미하면 제외 — 아래 검증으로 판단) + +- [ ] **Step 2: 무결성 검증 (몬스터/타일셋 유지 확인)** + +```bash +cd "C:/Users/jaeoh/Desktop/workspace/slaymaple" +node -e "const old=['8ef238e0d0ca4bb783aca526cff35d11','6c7130f51a654803a1c39cbe30e2f427','3e76c89ae8e7477ca871f5bbcd6f6f29','6d381bea1bcb4504b518a1fbfa0904ac','c96c11f9a3f845a4b6a27d9ca10ab103'];for(const t of ['02','05','06','07','10','11']){const j=JSON.parse(require('fs').readFileSync('map/map'+t+'.map','utf8'));const E=j.ContentProto.Entities;const ms=E.filter(e=>(e.componentNames||'').includes('script.Monster'));const sprs=ms.map(m=>m.jsonString['@components'].find(c=>c['@type']==='MOD.Core.SpriteRendererComponent').SpriteRUID);const okNoOld=sprs.every(s=>!old.includes(s));const ts=E.find(e=>(e.path||'').endsWith('/TileMap')).jsonString['@components'].find(c=>c['@type']==='MOD.Core.TileMapComponent').TileSetRUID.DataId;console.log('map'+t,'monsters='+ms.length,'noOldSprite='+okNoOld,'tileset='+(ts!=='9dfea3808bbd49a5877d8624df21b1c7'))}" +``` +Expected: 각 맵 `monsters=2`, `noOldSprite=true`, `tileset=true`. (= 몬스터/타일셋 작업 유지됨) + +- [ ] **Step 3: 판정 및 커밋** + +- 무결성 OK → 복구분 커밋: + ```bash + git add map/map02.map map/map05.map map/map06.map map/map07.map map/map10.map map/map11.map + git commit -m "Maker 세션 재저장분(맵 02/05/06/07/10/11) 복구 포함" + git stash drop + ``` +- 무결성 실패(작업 되돌려짐/손상) → 복구 취소하고 사용자에게 보고: + ```bash + git checkout -- map/map02.map map/map05.map map/map06.map map/map07.map map/map10.map map/map11.map + ``` + (stash는 보존) + +--- + +## 검증 요약 +- 생성기 `node --check` 통과 +- codeblock: PlayCard/Toast 존재, EndTurn·카드클릭 클로저, self.Cards 사용, pcall 없음 +- UI: Card1~5 ButtonComponent+raycast, 5장 균일(이미지 없음·Desc 존재) +- Maker Play: PlayCard 호출 시 energy↓·hand↓·discard↑, 5장 균일 렌더 +- stash 복구분 무결성(몬스터2·old미사용·타일셋교체) 검증 후 포함 diff --git a/ui/DefaultGroup.ui b/ui/DefaultGroup.ui index ac62489..eb3652a 100644 --- a/ui/DefaultGroup.ui +++ b/ui/DefaultGroup.ui @@ -1209,7 +1209,7 @@ { "id": "cad00001-0000-4000-8000-000000000001", "path": "/ui/DefaultGroup/CardHand/Card1", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ButtonComponent", "jsonString": { "name": "Card1", "path": "/ui/DefaultGroup/CardHand/Card1", @@ -1342,6 +1342,53 @@ "RaycastTarget": true, "Type": 1, "Enable": true + }, + { + "@type": "MOD.Core.ButtonComponent", + "Colors": { + "NormalColor": { + "r": 1, + "g": 1, + "b": 1, + "a": 1 + }, + "HighlightedColor": { + "r": 0.9607843, + "g": 0.9607843, + "b": 0.9607843, + "a": 1 + }, + "PressedColor": { + "r": 0.784313738, + "g": 0.784313738, + "b": 0.784313738, + "a": 1 + }, + "SelectedColor": { + "r": 0.9607843, + "g": 0.9607843, + "b": 0.9607843, + "a": 1 + }, + "DisabledColor": { + "r": 0.784313738, + "g": 0.784313738, + "b": 0.784313738, + "a": 0.5019608 + }, + "ColorMultiplier": 1, + "FadeDuration": 0.1 + }, + "ImageRUIDs": { + "HighlightedSprite": null, + "PressedSprite": null, + "SelectedSprite": null, + "DisabledSprite": null + }, + "KeyCode": 0, + "OverrideSorting": false, + "Transition": 1, + "Enable": true } ], "@version": 1 @@ -1914,7 +1961,7 @@ { "id": "cad00005-0000-4000-8000-000000000005", "path": "/ui/DefaultGroup/CardHand/Card2", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ButtonComponent", "jsonString": { "name": "Card2", "path": "/ui/DefaultGroup/CardHand/Card2", @@ -2047,6 +2094,53 @@ "RaycastTarget": true, "Type": 1, "Enable": true + }, + { + "@type": "MOD.Core.ButtonComponent", + "Colors": { + "NormalColor": { + "r": 1, + "g": 1, + "b": 1, + "a": 1 + }, + "HighlightedColor": { + "r": 0.9607843, + "g": 0.9607843, + "b": 0.9607843, + "a": 1 + }, + "PressedColor": { + "r": 0.784313738, + "g": 0.784313738, + "b": 0.784313738, + "a": 1 + }, + "SelectedColor": { + "r": 0.9607843, + "g": 0.9607843, + "b": 0.9607843, + "a": 1 + }, + "DisabledColor": { + "r": 0.784313738, + "g": 0.784313738, + "b": 0.784313738, + "a": 0.5019608 + }, + "ColorMultiplier": 1, + "FadeDuration": 0.1 + }, + "ImageRUIDs": { + "HighlightedSprite": null, + "PressedSprite": null, + "SelectedSprite": null, + "DisabledSprite": null + }, + "KeyCode": 0, + "OverrideSorting": false, + "Transition": 1, + "Enable": true } ], "@version": 1 @@ -2619,7 +2713,7 @@ { "id": "cad00009-0000-4000-8000-000000000009", "path": "/ui/DefaultGroup/CardHand/Card3", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ButtonComponent", "jsonString": { "name": "Card3", "path": "/ui/DefaultGroup/CardHand/Card3", @@ -2752,6 +2846,53 @@ "RaycastTarget": true, "Type": 1, "Enable": true + }, + { + "@type": "MOD.Core.ButtonComponent", + "Colors": { + "NormalColor": { + "r": 1, + "g": 1, + "b": 1, + "a": 1 + }, + "HighlightedColor": { + "r": 0.9607843, + "g": 0.9607843, + "b": 0.9607843, + "a": 1 + }, + "PressedColor": { + "r": 0.784313738, + "g": 0.784313738, + "b": 0.784313738, + "a": 1 + }, + "SelectedColor": { + "r": 0.9607843, + "g": 0.9607843, + "b": 0.9607843, + "a": 1 + }, + "DisabledColor": { + "r": 0.784313738, + "g": 0.784313738, + "b": 0.784313738, + "a": 0.5019608 + }, + "ColorMultiplier": 1, + "FadeDuration": 0.1 + }, + "ImageRUIDs": { + "HighlightedSprite": null, + "PressedSprite": null, + "SelectedSprite": null, + "DisabledSprite": null + }, + "KeyCode": 0, + "OverrideSorting": false, + "Transition": 1, + "Enable": true } ], "@version": 1 @@ -3324,7 +3465,7 @@ { "id": "cad0000d-0000-4000-8000-00000000000d", "path": "/ui/DefaultGroup/CardHand/Card4", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ButtonComponent", "jsonString": { "name": "Card4", "path": "/ui/DefaultGroup/CardHand/Card4", @@ -3457,6 +3598,53 @@ "RaycastTarget": true, "Type": 1, "Enable": true + }, + { + "@type": "MOD.Core.ButtonComponent", + "Colors": { + "NormalColor": { + "r": 1, + "g": 1, + "b": 1, + "a": 1 + }, + "HighlightedColor": { + "r": 0.9607843, + "g": 0.9607843, + "b": 0.9607843, + "a": 1 + }, + "PressedColor": { + "r": 0.784313738, + "g": 0.784313738, + "b": 0.784313738, + "a": 1 + }, + "SelectedColor": { + "r": 0.9607843, + "g": 0.9607843, + "b": 0.9607843, + "a": 1 + }, + "DisabledColor": { + "r": 0.784313738, + "g": 0.784313738, + "b": 0.784313738, + "a": 0.5019608 + }, + "ColorMultiplier": 1, + "FadeDuration": 0.1 + }, + "ImageRUIDs": { + "HighlightedSprite": null, + "PressedSprite": null, + "SelectedSprite": null, + "DisabledSprite": null + }, + "KeyCode": 0, + "OverrideSorting": false, + "Transition": 1, + "Enable": true } ], "@version": 1 @@ -4029,7 +4217,7 @@ { "id": "cad00011-0000-4000-8000-000000000011", "path": "/ui/DefaultGroup/CardHand/Card5", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ButtonComponent", "jsonString": { "name": "Card5", "path": "/ui/DefaultGroup/CardHand/Card5", @@ -4162,6 +4350,53 @@ "RaycastTarget": true, "Type": 1, "Enable": true + }, + { + "@type": "MOD.Core.ButtonComponent", + "Colors": { + "NormalColor": { + "r": 1, + "g": 1, + "b": 1, + "a": 1 + }, + "HighlightedColor": { + "r": 0.9607843, + "g": 0.9607843, + "b": 0.9607843, + "a": 1 + }, + "PressedColor": { + "r": 0.784313738, + "g": 0.784313738, + "b": 0.784313738, + "a": 1 + }, + "SelectedColor": { + "r": 0.9607843, + "g": 0.9607843, + "b": 0.9607843, + "a": 1 + }, + "DisabledColor": { + "r": 0.784313738, + "g": 0.784313738, + "b": 0.784313738, + "a": 0.5019608 + }, + "ColorMultiplier": 1, + "FadeDuration": 0.1 + }, + "ImageRUIDs": { + "HighlightedSprite": null, + "PressedSprite": null, + "SelectedSprite": null, + "DisabledSprite": null + }, + "KeyCode": 0, + "OverrideSorting": false, + "Transition": 1, + "Enable": true } ], "@version": 1 From b1921ee8435ebf69a6c4e06fa37d7a9a565e9e3c Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 8 Jun 2026 01:11:44 +0900 Subject: [PATCH 4/8] =?UTF-8?q?gen-slaydeck:=20=EC=9C=A0=ED=9A=A8=ED=95=9C?= =?UTF-8?q?=20GUID=20=EC=83=9D=EC=84=B1=EC=9C=BC=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(DeckHud=C2=B7=EC=B9=B4=EB=93=9C=20=EC=9E=90?= =?UTF-8?q?=EC=8B=9D=20entity=20id)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존 guid() prefix+4hex는 8-4-4-4-12 형식이 아니어서 Maker가 적용 거부(LEA-3054). 네임스페이스 바이트 기반 hex GUID로 변경하고, 기존 자식 id도 재생성 시 정규화. Co-Authored-By: Claude Opus 4.8 (1M context) --- tools/gen-slaydeck.mjs | 6 +++++- ui/DefaultGroup.ui | 48 +++++++++++++++++++++--------------------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/tools/gen-slaydeck.mjs b/tools/gen-slaydeck.mjs index 690ab3f..557eeb6 100644 --- a/tools/gen-slaydeck.mjs +++ b/tools/gen-slaydeck.mjs @@ -19,7 +19,10 @@ const ALIGN_CENTER = 0; const ALIGN_BOTTOM_CENTER = 6; function guid(prefix, n) { - return `${prefix}${n.toString(16).padStart(4, '0')}-0000-4000-8000-${n.toString(16).padStart(12, '0')}`; + // 유효한 8-4-4-4-12 hex GUID 생성. prefix는 충돌 방지용 네임스페이스 바이트로 매핑. + const ns = prefix === 'hud' ? 0xd0 : prefix === 'dck' ? 0xca : 0xfe; + const v = (ns * 0x100000 + n) >>> 0; + return `${v.toString(16).padStart(8, '0')}-0000-4000-8000-${v.toString(16).padStart(12, '0')}`; } function transform({ parentW, parentH, anchor, pivot, size, pos, align = 0 }) { @@ -229,6 +232,7 @@ function upsertUi() { ui.ContentProto.Entities.push(child); byPath.set(path, child); } else { + child.id = guid('dck', i * 10 + children.findIndex(([s]) => s === suffix)); child.jsonString.enable = true; child.jsonString.visible = true; child.jsonString['@components'][2].Text = cfg.value; diff --git a/ui/DefaultGroup.ui b/ui/DefaultGroup.ui index eb3652a..a2692ea 100644 --- a/ui/DefaultGroup.ui +++ b/ui/DefaultGroup.ui @@ -1395,7 +1395,7 @@ } }, { - "id": "cad00002-0000-4000-8000-000000000002", + "id": "0ca0000a-0000-4000-8000-00000ca0000a", "path": "/ui/DefaultGroup/CardHand/Card1/Cost", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -1583,7 +1583,7 @@ } }, { - "id": "cad00003-0000-4000-8000-000000000003", + "id": "0ca0000b-0000-4000-8000-00000ca0000b", "path": "/ui/DefaultGroup/CardHand/Card1/Name", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -1771,7 +1771,7 @@ } }, { - "id": "cad00004-0000-4000-8000-000000000004", + "id": "0ca0000c-0000-4000-8000-00000ca0000c", "path": "/ui/DefaultGroup/CardHand/Card1/Desc", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -2147,7 +2147,7 @@ } }, { - "id": "cad00006-0000-4000-8000-000000000006", + "id": "0ca00014-0000-4000-8000-00000ca00014", "path": "/ui/DefaultGroup/CardHand/Card2/Cost", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -2335,7 +2335,7 @@ } }, { - "id": "cad00007-0000-4000-8000-000000000007", + "id": "0ca00015-0000-4000-8000-00000ca00015", "path": "/ui/DefaultGroup/CardHand/Card2/Name", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -2523,7 +2523,7 @@ } }, { - "id": "cad00008-0000-4000-8000-000000000008", + "id": "0ca00016-0000-4000-8000-00000ca00016", "path": "/ui/DefaultGroup/CardHand/Card2/Desc", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -2899,7 +2899,7 @@ } }, { - "id": "cad0000a-0000-4000-8000-00000000000a", + "id": "0ca0001e-0000-4000-8000-00000ca0001e", "path": "/ui/DefaultGroup/CardHand/Card3/Cost", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -3087,7 +3087,7 @@ } }, { - "id": "cad0000b-0000-4000-8000-00000000000b", + "id": "0ca0001f-0000-4000-8000-00000ca0001f", "path": "/ui/DefaultGroup/CardHand/Card3/Name", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -3275,7 +3275,7 @@ } }, { - "id": "cad0000c-0000-4000-8000-00000000000c", + "id": "0ca00020-0000-4000-8000-00000ca00020", "path": "/ui/DefaultGroup/CardHand/Card3/Desc", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -3651,7 +3651,7 @@ } }, { - "id": "cad0000e-0000-4000-8000-00000000000e", + "id": "0ca00028-0000-4000-8000-00000ca00028", "path": "/ui/DefaultGroup/CardHand/Card4/Cost", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -3839,7 +3839,7 @@ } }, { - "id": "cad0000f-0000-4000-8000-00000000000f", + "id": "0ca00029-0000-4000-8000-00000ca00029", "path": "/ui/DefaultGroup/CardHand/Card4/Name", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -4027,7 +4027,7 @@ } }, { - "id": "cad00010-0000-4000-8000-000000000010", + "id": "0ca0002a-0000-4000-8000-00000ca0002a", "path": "/ui/DefaultGroup/CardHand/Card4/Desc", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -4403,7 +4403,7 @@ } }, { - "id": "dck0032-0000-4000-8000-000000000032", + "id": "0ca00032-0000-4000-8000-00000ca00032", "path": "/ui/DefaultGroup/CardHand/Card5/Cost", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -4591,7 +4591,7 @@ } }, { - "id": "dck0033-0000-4000-8000-000000000033", + "id": "0ca00033-0000-4000-8000-00000ca00033", "path": "/ui/DefaultGroup/CardHand/Card5/Name", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -4779,7 +4779,7 @@ } }, { - "id": "dck0034-0000-4000-8000-000000000034", + "id": "0ca00034-0000-4000-8000-00000ca00034", "path": "/ui/DefaultGroup/CardHand/Card5/Desc", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -4967,7 +4967,7 @@ } }, { - "id": "hud0000-0000-4000-8000-000000000000", + "id": "0d000000-0000-4000-8000-00000d000000", "path": "/ui/DefaultGroup/DeckHud", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", "jsonString": { @@ -5108,7 +5108,7 @@ } }, { - "id": "hud0001-0000-4000-8000-000000000001", + "id": "0d000001-0000-4000-8000-00000d000001", "path": "/ui/DefaultGroup/DeckHud/DrawPile", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", "jsonString": { @@ -5249,7 +5249,7 @@ } }, { - "id": "hud0002-0000-4000-8000-000000000002", + "id": "0d000002-0000-4000-8000-00000d000002", "path": "/ui/DefaultGroup/DeckHud/DrawPile/Label", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -5437,7 +5437,7 @@ } }, { - "id": "hud0003-0000-4000-8000-000000000003", + "id": "0d000003-0000-4000-8000-00000d000003", "path": "/ui/DefaultGroup/DeckHud/DrawPile/Count", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -5625,7 +5625,7 @@ } }, { - "id": "hud0004-0000-4000-8000-000000000004", + "id": "0d000004-0000-4000-8000-00000d000004", "path": "/ui/DefaultGroup/DeckHud/DiscardPile", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", "jsonString": { @@ -5766,7 +5766,7 @@ } }, { - "id": "hud0005-0000-4000-8000-000000000005", + "id": "0d000005-0000-4000-8000-00000d000005", "path": "/ui/DefaultGroup/DeckHud/DiscardPile/Label", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -5954,7 +5954,7 @@ } }, { - "id": "hud0006-0000-4000-8000-000000000006", + "id": "0d000006-0000-4000-8000-00000d000006", "path": "/ui/DefaultGroup/DeckHud/DiscardPile/Count", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { @@ -6142,7 +6142,7 @@ } }, { - "id": "hud0007-0000-4000-8000-000000000007", + "id": "0d000007-0000-4000-8000-00000d000007", "path": "/ui/DefaultGroup/DeckHud/EndTurnButton", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ButtonComponent,MOD.Core.TextComponent", "jsonString": { @@ -6377,7 +6377,7 @@ } }, { - "id": "hud0008-0000-4000-8000-000000000008", + "id": "0d000008-0000-4000-8000-00000d000008", "path": "/ui/DefaultGroup/DeckHud/Energy", "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", "jsonString": { From 4bf7e293159349c3e642e55b373c2322fdc36a22 Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 8 Jun 2026 01:13:46 +0900 Subject: [PATCH 5/8] =?UTF-8?q?Maker=20=EC=84=B8=EC=85=98=20=EC=9E=AC?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=EB=B6=84(=EB=A7=B5=2002/05/06/07/10/11)=20?= =?UTF-8?q?=EB=B3=B5=EA=B5=AC=20=ED=8F=AC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stash해 둔 로컬 맵 재저장분 복구. 몬스터 2종·old 스프라이트 미사용·타일셋 교체·유효 GUID 무결성 검증 완료. Co-Authored-By: Claude Opus 4.8 (1M context) --- map/map02.map | 750 +++++++++++++++++++------------------- map/map05.map | 752 +++++++++++++++++++------------------- map/map06.map | 750 +++++++++++++++++++------------------- map/map07.map | 752 +++++++++++++++++++------------------- map/map10.map | 976 +++++++++++++++++++++++++------------------------- map/map11.map | 750 +++++++++++++++++++------------------- 6 files changed, 2365 insertions(+), 2365 deletions(-) diff --git a/map/map02.map b/map/map02.map index a8a3fb4..c37f393 100644 --- a/map/map02.map +++ b/map/map02.map @@ -31,15 +31,15 @@ "@components": [ { "@type": "MOD.Core.MapComponent", - "AirAccelerationXFactor": 1, - "AirDecelerationXFactor": 1, - "FallSpeedMaxXFactor": 1, - "FallSpeedMaxYFactor": 1, - "Gravity": 1, + "AirAccelerationXFactor": 1.0, + "AirDecelerationXFactor": 1.0, + "FallSpeedMaxXFactor": 1.0, + "FallSpeedMaxYFactor": 1.0, + "Gravity": 1.0, "IsInstanceMap": false, "TileMapMode": 0, - "WalkAccelerationFactor": 1, - "WalkDrag": 1, + "WalkAccelerationFactor": 1.0, + "WalkDrag": 1.0, "Enable": true }, { @@ -47,34 +47,34 @@ "FootholdsByLayer": { "1": [ { - "Length": 1.27999973, + "Length": 1.29000092, "NextFootholdId": 2, "PreviousFootholdId": 27, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 1, "StartPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.940001, + "y": -0.0500000119 }, "EndPoint": { - "x": -7.65000057, - "y": -0.04000002 + "x": -7.64999962, + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -85,27 +85,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 2, "StartPoint": { "x": -7.64999962, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": -6.75, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -116,27 +116,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 3, "StartPoint": { "x": -6.74999952, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": -5.85, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -147,27 +147,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 4, "StartPoint": { "x": -5.84999943, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": -4.95, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -178,27 +178,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 5, "StartPoint": { "x": -4.95, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": -4.05, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -209,27 +209,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 6, "StartPoint": { "x": -4.05, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -240,58 +240,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 7, "StartPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.899999738, + "Length": 0.9, "NextFootholdId": 9, "PreviousFootholdId": 7, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 8, "StartPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { - "x": -1.35, - "y": -0.04000002 + "x": -1.34999979, + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -302,27 +302,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 9, "StartPoint": { "x": -1.35, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": -0.449999958, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -333,27 +333,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 10, "StartPoint": { "x": -0.45, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": 0.449999958, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -364,27 +364,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 11, "StartPoint": { "x": 0.450000018, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": 1.35, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -395,27 +395,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 12, "StartPoint": { "x": 1.34999979, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": 2.25, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -426,27 +426,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 13, "StartPoint": { - "x": 2.25, - "y": -0.04000002 + "x": 2.24999976, + "y": -0.0500000119 }, "EndPoint": { - "x": 3.15, - "y": -0.04000002 + "x": 3.14999986, + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -457,27 +457,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 14, "StartPoint": { "x": 3.14999986, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": 4.04999971, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -488,27 +488,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 15, "StartPoint": { "x": 4.05, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": 4.95, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -519,27 +519,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 16, "StartPoint": { - "x": 4.95000029, - "y": -0.04000002 + "x": 4.95, + "y": -0.0500000119 }, "EndPoint": { - "x": 5.85, - "y": -0.04000002 + "x": 5.84999943, + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -550,89 +550,89 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 17, "StartPoint": { "x": 5.85, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { "x": 6.74999952, - "y": -0.04000002 + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 1.27999973, + "Length": 1.289999, "NextFootholdId": 19, "PreviousFootholdId": 17, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 18, "StartPoint": { "x": 6.75, - "y": -0.04000002 + "y": -0.0500000119 }, "EndPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 8.039999, + "y": -0.0500000119 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.859999955, + "Length": 0.849999964, "NextFootholdId": 20, "PreviousFootholdId": 18, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 19, "StartPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 8.039999, + "y": -0.0500000119 }, "EndPoint": { - "x": 8.03, + "x": 8.039999, "y": -0.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -643,27 +643,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 20, "StartPoint": { - "x": 8.03, + "x": 8.039999, "y": -0.9000001 }, "EndPoint": { - "x": 8.03, + "x": 8.039999, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -674,27 +674,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 21, "StartPoint": { - "x": 8.03, + "x": 8.039999, "y": -1.50000012 }, "EndPoint": { - "x": 8.03, + "x": 8.039999, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -705,27 +705,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 22, "StartPoint": { - "x": 8.03, + "x": 8.039999, "y": -2.10000014 }, "EndPoint": { - "x": 8.03, + "x": 8.039999, "y": -2.7 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -736,27 +736,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 23, "StartPoint": { - "x": 8.03, - "y": -2.70000029 + "x": 8.039999, + "y": -2.7 }, "EndPoint": { - "x": 8.03, - "y": -3.30000019 + "x": 8.039999, + "y": -3.3 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -767,27 +767,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 24, "StartPoint": { - "x": 8.03, + "x": 8.039999, "y": -3.30000019 }, "EndPoint": { - "x": 8.03, + "x": 8.039999, "y": -3.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -798,27 +798,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 25, "StartPoint": { - "x": 8.03, + "x": 8.039999, "y": -3.90000033 }, "EndPoint": { - "x": 8.03, + "x": 8.039999, "y": -4.50000048 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -829,58 +829,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 26, "StartPoint": { - "x": 8.03, + "x": 8.039999, "y": -4.5 }, "EndPoint": { - "x": 8.03, + "x": 8.039999, "y": -5.10000038 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { - "Length": 0.859999955, + "Length": 0.849999964, "NextFootholdId": 1, "PreviousFootholdId": 28, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 27, "StartPoint": { - "x": -8.93, + "x": -8.940001, "y": -0.9 }, "EndPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.940001, + "y": -0.0500000119 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -891,27 +891,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 28, "StartPoint": { - "x": -8.93, + "x": -8.940001, "y": -1.50000012 }, "EndPoint": { - "x": -8.93, + "x": -8.940001, "y": -0.9000001 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -922,27 +922,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 29, "StartPoint": { - "x": -8.93, + "x": -8.940001, "y": -2.10000014 }, "EndPoint": { - "x": -8.93, + "x": -8.940001, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -953,27 +953,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 30, "StartPoint": { - "x": -8.93, + "x": -8.940001, "y": -2.7 }, "EndPoint": { - "x": -8.93, + "x": -8.940001, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -984,27 +984,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 31, "StartPoint": { - "x": -8.93, - "y": -3.30000019 + "x": -8.940001, + "y": -3.3 }, "EndPoint": { - "x": -8.93, - "y": -2.70000029 + "x": -8.940001, + "y": -2.7 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1015,27 +1015,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 32, "StartPoint": { - "x": -8.93, + "x": -8.940001, "y": -3.9 }, "EndPoint": { - "x": -8.93, + "x": -8.940001, "y": -3.30000019 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1046,27 +1046,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 33, "StartPoint": { - "x": -8.93, + "x": -8.940001, "y": -4.50000048 }, "EndPoint": { - "x": -8.93, + "x": -8.940001, "y": -3.90000033 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1077,27 +1077,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "000007d3-0000-4000-8000-0000000007d3", "Id": 34, "StartPoint": { - "x": -8.93, + "x": -8.940001, "y": -5.10000038 }, "EndPoint": { - "x": -8.93, + "x": -8.940001, "y": -4.5 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } } ] @@ -1205,32 +1205,32 @@ "Position": { "x": -0.225, "y": -0.15, - "z": 1000 + "z": 1000.0 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, { "@type": "MOD.Core.TileMapComponent", "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, - "FootholdDrag": 1, - "FootholdForce": 0, - "FootholdWalkSpeedFactor": 1, + "FootholdDrag": 1.0, + "FootholdForce": 0.0, + "FootholdWalkSpeedFactor": 1.0, "IgnoreMapLayerCheck": false, "IsOddGridPosition": false, "OrderInLayer": 1, @@ -6298,27 +6298,27 @@ { "@type": "MOD.Core.TransformComponent", "Rotation": { - "x": 0, - "y": 0, - "z": 0 + "x": 0.0, + "y": 0.0, + "z": 0.0 }, "Position": { - "x": -5, - "y": 0, + "x": -5.0, + "y": 0.0, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, - "ZRotation": 0, + "ZRotation": 0.0, "Enable": true }, { @@ -6330,20 +6330,20 @@ "FlipY": false, "IgnoreMapLayerCheck": false, "OrderInLayer": 0, - "PlayRate": 1, + "PlayRate": 1.0, "RenderSetting": 0, "SortingLayer": "Default", "SpriteRUID": "8ef238e0d0ca4bb783aca526cff35d11", "StartFrameIndex": 0, "TiledSize": { - "x": 1, - "y": 1 + "x": 1.0, + "y": 1.0 }, "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, "Enable": true }, @@ -6381,20 +6381,20 @@ { "@type": "MOD.Core.TransformComponent", "Position": { - "x": 3.5, - "y": 0.03499998, + "x": 3.4882049999999998, + "y": 0.0249999911, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6452,28 +6452,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6490,12 +6490,12 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ], @@ -6513,7 +6513,7 @@ "enable": true, "visible": true, "localize": false, - "displayOrder": 4, + "displayOrder": 5, "pathConstraints": "///", "revision": 2, "origin": { @@ -6529,19 +6529,19 @@ "@type": "MOD.Core.TransformComponent", "Position": { "x": 5.5, - "y": 0.03499998, + "y": 0.0249999911, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6599,28 +6599,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6637,12 +6637,12 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ], diff --git a/map/map05.map b/map/map05.map index 75e8bda..8e70247 100644 --- a/map/map05.map +++ b/map/map05.map @@ -31,15 +31,15 @@ "@components": [ { "@type": "MOD.Core.MapComponent", - "AirAccelerationXFactor": 1, - "AirDecelerationXFactor": 1, - "FallSpeedMaxXFactor": 1, - "FallSpeedMaxYFactor": 1, - "Gravity": 1, + "AirAccelerationXFactor": 1.0, + "AirDecelerationXFactor": 1.0, + "FallSpeedMaxXFactor": 1.0, + "FallSpeedMaxYFactor": 1.0, + "Gravity": 1.0, "IsInstanceMap": false, "TileMapMode": 0, - "WalkAccelerationFactor": 1, - "WalkDrag": 1, + "WalkAccelerationFactor": 1.0, + "WalkDrag": 1.0, "Enable": true }, { @@ -47,34 +47,34 @@ "FootholdsByLayer": { "1": [ { - "Length": 1.27999973, + "Length": 1.18000031, "NextFootholdId": 2, "PreviousFootholdId": 27, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 1, "StartPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.83, + "y": -0.08000001 }, "EndPoint": { - "x": -7.65000057, - "y": -0.04000002 + "x": -7.64999962, + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -85,27 +85,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 2, "StartPoint": { "x": -7.64999962, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": -6.75, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -116,27 +116,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 3, "StartPoint": { "x": -6.74999952, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": -5.85, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -147,27 +147,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 4, "StartPoint": { "x": -5.84999943, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": -4.95, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -178,27 +178,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 5, "StartPoint": { "x": -4.95, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": -4.05, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -209,27 +209,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 6, "StartPoint": { "x": -4.05, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -240,58 +240,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 7, "StartPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.899999738, + "Length": 0.9, "NextFootholdId": 9, "PreviousFootholdId": 7, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 8, "StartPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { - "x": -1.35, - "y": -0.04000002 + "x": -1.34999979, + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -302,27 +302,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 9, "StartPoint": { "x": -1.35, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": -0.449999958, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -333,27 +333,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 10, "StartPoint": { "x": -0.45, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": 0.449999958, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -364,27 +364,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 11, "StartPoint": { "x": 0.450000018, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": 1.35, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -395,27 +395,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 12, "StartPoint": { "x": 1.34999979, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": 2.25, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -426,27 +426,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 13, "StartPoint": { - "x": 2.25, - "y": -0.04000002 + "x": 2.24999976, + "y": -0.08000001 }, "EndPoint": { - "x": 3.15, - "y": -0.04000002 + "x": 3.14999986, + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -457,27 +457,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 14, "StartPoint": { "x": 3.14999986, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": 4.04999971, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -488,27 +488,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 15, "StartPoint": { "x": 4.05, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": 4.95, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -519,27 +519,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 16, "StartPoint": { - "x": 4.95000029, - "y": -0.04000002 + "x": 4.95, + "y": -0.08000001 }, "EndPoint": { - "x": 5.85, - "y": -0.04000002 + "x": 5.84999943, + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -550,89 +550,89 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 17, "StartPoint": { "x": 5.85, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { "x": 6.74999952, - "y": -0.04000002 + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 1.27999973, + "Length": 1.17999983, "NextFootholdId": 19, "PreviousFootholdId": 17, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 18, "StartPoint": { "x": 6.75, - "y": -0.04000002 + "y": -0.08000001 }, "EndPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 7.93, + "y": -0.08000001 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.859999955, + "Length": 0.819999933, "NextFootholdId": 20, "PreviousFootholdId": 18, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 19, "StartPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 7.93, + "y": -0.08000001 }, "EndPoint": { - "x": 8.03, + "x": 7.93, "y": -0.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -643,27 +643,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 20, "StartPoint": { - "x": 8.03, + "x": 7.93, "y": -0.9000001 }, "EndPoint": { - "x": 8.03, + "x": 7.93, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -674,27 +674,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 21, "StartPoint": { - "x": 8.03, + "x": 7.93, "y": -1.50000012 }, "EndPoint": { - "x": 8.03, + "x": 7.93, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -705,27 +705,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 22, "StartPoint": { - "x": 8.03, + "x": 7.93, "y": -2.10000014 }, "EndPoint": { - "x": 8.03, + "x": 7.93, "y": -2.7 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -736,27 +736,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 23, "StartPoint": { - "x": 8.03, - "y": -2.70000029 + "x": 7.93, + "y": -2.7 }, "EndPoint": { - "x": 8.03, - "y": -3.30000019 + "x": 7.93, + "y": -3.3 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -767,27 +767,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 24, "StartPoint": { - "x": 8.03, + "x": 7.93, "y": -3.30000019 }, "EndPoint": { - "x": 8.03, + "x": 7.93, "y": -3.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -798,27 +798,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 25, "StartPoint": { - "x": 8.03, + "x": 7.93, "y": -3.90000033 }, "EndPoint": { - "x": 8.03, + "x": 7.93, "y": -4.50000048 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -829,58 +829,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 26, "StartPoint": { - "x": 8.03, + "x": 7.93, "y": -4.5 }, "EndPoint": { - "x": 8.03, + "x": 7.93, "y": -5.10000038 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { - "Length": 0.859999955, + "Length": 0.819999933, "NextFootholdId": 1, "PreviousFootholdId": 28, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 27, "StartPoint": { - "x": -8.93, + "x": -8.83, "y": -0.9 }, "EndPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.83, + "y": -0.08000001 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -891,27 +891,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 28, "StartPoint": { - "x": -8.93, + "x": -8.83, "y": -1.50000012 }, "EndPoint": { - "x": -8.93, + "x": -8.83, "y": -0.9000001 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -922,27 +922,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 29, "StartPoint": { - "x": -8.93, + "x": -8.83, "y": -2.10000014 }, "EndPoint": { - "x": -8.93, + "x": -8.83, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -953,27 +953,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 30, "StartPoint": { - "x": -8.93, + "x": -8.83, "y": -2.7 }, "EndPoint": { - "x": -8.93, + "x": -8.83, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -984,27 +984,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 31, "StartPoint": { - "x": -8.93, - "y": -3.30000019 + "x": -8.83, + "y": -3.3 }, "EndPoint": { - "x": -8.93, - "y": -2.70000029 + "x": -8.83, + "y": -2.7 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1015,27 +1015,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 32, "StartPoint": { - "x": -8.93, + "x": -8.83, "y": -3.9 }, "EndPoint": { - "x": -8.93, + "x": -8.83, "y": -3.30000019 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1046,27 +1046,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 33, "StartPoint": { - "x": -8.93, + "x": -8.83, "y": -4.50000048 }, "EndPoint": { - "x": -8.93, + "x": -8.83, "y": -3.90000033 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1077,27 +1077,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "0000138b-0000-4000-8000-00000000138b", "Id": 34, "StartPoint": { - "x": -8.93, + "x": -8.83, "y": -5.10000038 }, "EndPoint": { - "x": -8.93, + "x": -8.83, "y": -4.5 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } } ] @@ -1205,32 +1205,32 @@ "Position": { "x": -0.225, "y": -0.15, - "z": 1000 + "z": 1000.0 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, { "@type": "MOD.Core.TileMapComponent", "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, - "FootholdDrag": 1, - "FootholdForce": 0, - "FootholdWalkSpeedFactor": 1, + "FootholdDrag": 1.0, + "FootholdForce": 0.0, + "FootholdWalkSpeedFactor": 1.0, "IgnoreMapLayerCheck": false, "IsOddGridPosition": false, "OrderInLayer": 1, @@ -6298,27 +6298,27 @@ { "@type": "MOD.Core.TransformComponent", "Rotation": { - "x": 0, - "y": 0, - "z": 0 + "x": 0.0, + "y": 0.0, + "z": 0.0 }, "Position": { - "x": -5, - "y": 0, + "x": -5.0, + "y": 0.0, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, - "ZRotation": 0, + "ZRotation": 0.0, "Enable": true }, { @@ -6330,20 +6330,20 @@ "FlipY": false, "IgnoreMapLayerCheck": false, "OrderInLayer": 0, - "PlayRate": 1, + "PlayRate": 1.0, "RenderSetting": 0, "SortingLayer": "Default", "SpriteRUID": "8ef238e0d0ca4bb783aca526cff35d11", "StartFrameIndex": 0, "TiledSize": { - "x": 1, - "y": 1 + "x": 1.0, + "y": 1.0 }, "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, "Enable": true }, @@ -6381,20 +6381,20 @@ { "@type": "MOD.Core.TransformComponent", "Position": { - "x": 3.5, - "y": 0.03499998, + "x": 3.52359, + "y": -0.00500001, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6452,28 +6452,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6490,12 +6490,12 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ], @@ -6513,7 +6513,7 @@ "enable": true, "visible": true, "localize": false, - "displayOrder": 4, + "displayOrder": 5, "pathConstraints": "///", "revision": 2, "origin": { @@ -6528,20 +6528,20 @@ { "@type": "MOD.Core.TransformComponent", "Position": { - "x": 5.5, - "y": 0.03499998, + "x": 5.18743134, + "y": -0.00500001, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6599,28 +6599,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6637,12 +6637,12 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ], diff --git a/map/map06.map b/map/map06.map index 16980c3..37b9150 100644 --- a/map/map06.map +++ b/map/map06.map @@ -31,15 +31,15 @@ "@components": [ { "@type": "MOD.Core.MapComponent", - "AirAccelerationXFactor": 1, - "AirDecelerationXFactor": 1, - "FallSpeedMaxXFactor": 1, - "FallSpeedMaxYFactor": 1, - "Gravity": 1, + "AirAccelerationXFactor": 1.0, + "AirDecelerationXFactor": 1.0, + "FallSpeedMaxXFactor": 1.0, + "FallSpeedMaxYFactor": 1.0, + "Gravity": 1.0, "IsInstanceMap": false, "TileMapMode": 0, - "WalkAccelerationFactor": 1, - "WalkDrag": 1, + "WalkAccelerationFactor": 1.0, + "WalkDrag": 1.0, "Enable": true }, { @@ -47,34 +47,34 @@ "FootholdsByLayer": { "1": [ { - "Length": 1.27999973, + "Length": 1.13000011, "NextFootholdId": 2, "PreviousFootholdId": 27, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 1, "StartPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.78, + "y": -0.15 }, "EndPoint": { - "x": -7.65000057, - "y": -0.04000002 + "x": -7.64999962, + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -85,27 +85,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 2, "StartPoint": { "x": -7.64999962, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -6.75, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -116,27 +116,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 3, "StartPoint": { "x": -6.74999952, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -5.85, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -147,27 +147,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 4, "StartPoint": { "x": -5.84999943, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -4.95, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -178,27 +178,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 5, "StartPoint": { "x": -4.95, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -4.05, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -209,27 +209,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 6, "StartPoint": { "x": -4.05, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -240,58 +240,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 7, "StartPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.899999738, + "Length": 0.9, "NextFootholdId": 9, "PreviousFootholdId": 7, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 8, "StartPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { - "x": -1.35, - "y": -0.04000002 + "x": -1.34999979, + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -302,27 +302,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 9, "StartPoint": { "x": -1.35, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -0.449999958, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -333,27 +333,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 10, "StartPoint": { "x": -0.45, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 0.449999958, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -364,27 +364,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 11, "StartPoint": { "x": 0.450000018, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 1.35, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -395,27 +395,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 12, "StartPoint": { "x": 1.34999979, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 2.25, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -426,27 +426,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 13, "StartPoint": { - "x": 2.25, - "y": -0.04000002 + "x": 2.24999976, + "y": -0.15 }, "EndPoint": { - "x": 3.15, - "y": -0.04000002 + "x": 3.14999986, + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -457,27 +457,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 14, "StartPoint": { "x": 3.14999986, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 4.04999971, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -488,27 +488,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 15, "StartPoint": { "x": 4.05, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 4.95, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -519,27 +519,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 16, "StartPoint": { - "x": 4.95000029, - "y": -0.04000002 + "x": 4.95, + "y": -0.15 }, "EndPoint": { - "x": 5.85, - "y": -0.04000002 + "x": 5.84999943, + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -550,89 +550,89 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 17, "StartPoint": { "x": 5.85, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 6.74999952, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 1.27999973, + "Length": 1.12999964, "NextFootholdId": 19, "PreviousFootholdId": 17, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 18, "StartPoint": { "x": 6.75, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 7.87999964, + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.859999955, + "Length": 0.75, "NextFootholdId": 20, "PreviousFootholdId": 18, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 19, "StartPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 7.87999964, + "y": -0.15 }, "EndPoint": { - "x": 8.03, + "x": 7.87999964, "y": -0.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -643,27 +643,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 20, "StartPoint": { - "x": 8.03, + "x": 7.87999964, "y": -0.9000001 }, "EndPoint": { - "x": 8.03, + "x": 7.87999964, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -674,27 +674,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 21, "StartPoint": { - "x": 8.03, + "x": 7.87999964, "y": -1.50000012 }, "EndPoint": { - "x": 8.03, + "x": 7.87999964, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -705,27 +705,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 22, "StartPoint": { - "x": 8.03, + "x": 7.87999964, "y": -2.10000014 }, "EndPoint": { - "x": 8.03, + "x": 7.87999964, "y": -2.7 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -736,27 +736,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 23, "StartPoint": { - "x": 8.03, - "y": -2.70000029 + "x": 7.87999964, + "y": -2.7 }, "EndPoint": { - "x": 8.03, - "y": -3.30000019 + "x": 7.87999964, + "y": -3.3 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -767,27 +767,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 24, "StartPoint": { - "x": 8.03, + "x": 7.87999964, "y": -3.30000019 }, "EndPoint": { - "x": 8.03, + "x": 7.87999964, "y": -3.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -798,27 +798,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 25, "StartPoint": { - "x": 8.03, + "x": 7.87999964, "y": -3.90000033 }, "EndPoint": { - "x": 8.03, + "x": 7.87999964, "y": -4.50000048 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -829,58 +829,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 26, "StartPoint": { - "x": 8.03, + "x": 7.87999964, "y": -4.5 }, "EndPoint": { - "x": 8.03, + "x": 7.87999964, "y": -5.10000038 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { - "Length": 0.859999955, + "Length": 0.75, "NextFootholdId": 1, "PreviousFootholdId": 28, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 27, "StartPoint": { - "x": -8.93, + "x": -8.78, "y": -0.9 }, "EndPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.78, + "y": -0.15 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -891,27 +891,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 28, "StartPoint": { - "x": -8.93, + "x": -8.78, "y": -1.50000012 }, "EndPoint": { - "x": -8.93, + "x": -8.78, "y": -0.9000001 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -922,27 +922,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 29, "StartPoint": { - "x": -8.93, + "x": -8.78, "y": -2.10000014 }, "EndPoint": { - "x": -8.93, + "x": -8.78, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -953,27 +953,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 30, "StartPoint": { - "x": -8.93, + "x": -8.78, "y": -2.7 }, "EndPoint": { - "x": -8.93, + "x": -8.78, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -984,27 +984,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 31, "StartPoint": { - "x": -8.93, - "y": -3.30000019 + "x": -8.78, + "y": -3.3 }, "EndPoint": { - "x": -8.93, - "y": -2.70000029 + "x": -8.78, + "y": -2.7 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1015,27 +1015,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 32, "StartPoint": { - "x": -8.93, + "x": -8.78, "y": -3.9 }, "EndPoint": { - "x": -8.93, + "x": -8.78, "y": -3.30000019 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1046,27 +1046,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 33, "StartPoint": { - "x": -8.93, + "x": -8.78, "y": -4.50000048 }, "EndPoint": { - "x": -8.93, + "x": -8.78, "y": -3.90000033 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1077,27 +1077,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001773-0000-4000-8000-000000001773", "Id": 34, "StartPoint": { - "x": -8.93, + "x": -8.78, "y": -5.10000038 }, "EndPoint": { - "x": -8.93, + "x": -8.78, "y": -4.5 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } } ] @@ -1205,32 +1205,32 @@ "Position": { "x": -0.225, "y": -0.15, - "z": 1000 + "z": 1000.0 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, { "@type": "MOD.Core.TileMapComponent", "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, - "FootholdDrag": 1, - "FootholdForce": 0, - "FootholdWalkSpeedFactor": 1, + "FootholdDrag": 1.0, + "FootholdForce": 0.0, + "FootholdWalkSpeedFactor": 1.0, "IgnoreMapLayerCheck": false, "IsOddGridPosition": false, "OrderInLayer": 1, @@ -6298,27 +6298,27 @@ { "@type": "MOD.Core.TransformComponent", "Rotation": { - "x": 0, - "y": 0, - "z": 0 + "x": 0.0, + "y": 0.0, + "z": 0.0 }, "Position": { - "x": -5, - "y": 0, + "x": -5.0, + "y": 0.0, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, - "ZRotation": 0, + "ZRotation": 0.0, "Enable": true }, { @@ -6330,20 +6330,20 @@ "FlipY": false, "IgnoreMapLayerCheck": false, "OrderInLayer": 0, - "PlayRate": 1, + "PlayRate": 1.0, "RenderSetting": 0, "SortingLayer": "Default", "SpriteRUID": "8ef238e0d0ca4bb783aca526cff35d11", "StartFrameIndex": 0, "TiledSize": { - "x": 1, - "y": 1 + "x": 1.0, + "y": 1.0 }, "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, "Enable": true }, @@ -6381,20 +6381,20 @@ { "@type": "MOD.Core.TransformComponent", "Position": { - "x": 3.5, - "y": 0.03499998, + "x": 3.51769257, + "y": -0.075, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6452,28 +6452,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6490,12 +6490,12 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ], @@ -6513,7 +6513,7 @@ "enable": true, "visible": true, "localize": false, - "displayOrder": 4, + "displayOrder": 5, "pathConstraints": "///", "revision": 2, "origin": { @@ -6529,19 +6529,19 @@ "@type": "MOD.Core.TransformComponent", "Position": { "x": 5.5, - "y": 0.03499998, + "y": -0.075, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6599,28 +6599,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6637,12 +6637,12 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ], diff --git a/map/map07.map b/map/map07.map index 0617e92..df7c8bd 100644 --- a/map/map07.map +++ b/map/map07.map @@ -31,15 +31,15 @@ "@components": [ { "@type": "MOD.Core.MapComponent", - "AirAccelerationXFactor": 1, - "AirDecelerationXFactor": 1, - "FallSpeedMaxXFactor": 1, - "FallSpeedMaxYFactor": 1, - "Gravity": 1, + "AirAccelerationXFactor": 1.0, + "AirDecelerationXFactor": 1.0, + "FallSpeedMaxXFactor": 1.0, + "FallSpeedMaxYFactor": 1.0, + "Gravity": 1.0, "IsInstanceMap": false, "TileMapMode": 0, - "WalkAccelerationFactor": 1, - "WalkDrag": 1, + "WalkAccelerationFactor": 1.0, + "WalkDrag": 1.0, "Enable": true }, { @@ -47,34 +47,34 @@ "FootholdsByLayer": { "1": [ { - "Length": 1.27999973, + "Length": 1.250001, "NextFootholdId": 2, "PreviousFootholdId": 27, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 1, "StartPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.900001, + "y": -0.0600000173 }, "EndPoint": { - "x": -7.65000057, - "y": -0.04000002 + "x": -7.64999962, + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -85,27 +85,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 2, "StartPoint": { "x": -7.64999962, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": -6.75, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -116,27 +116,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 3, "StartPoint": { "x": -6.74999952, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": -5.85, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -147,27 +147,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 4, "StartPoint": { "x": -5.84999943, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": -4.95, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -178,27 +178,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 5, "StartPoint": { "x": -4.95, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": -4.05, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -209,27 +209,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 6, "StartPoint": { "x": -4.05, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -240,58 +240,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 7, "StartPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.899999738, + "Length": 0.9, "NextFootholdId": 9, "PreviousFootholdId": 7, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 8, "StartPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { - "x": -1.35, - "y": -0.04000002 + "x": -1.34999979, + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -302,27 +302,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 9, "StartPoint": { "x": -1.35, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": -0.449999958, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -333,27 +333,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 10, "StartPoint": { "x": -0.45, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": 0.449999958, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -364,27 +364,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 11, "StartPoint": { "x": 0.450000018, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": 1.35, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -395,27 +395,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 12, "StartPoint": { "x": 1.34999979, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": 2.25, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -426,27 +426,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 13, "StartPoint": { - "x": 2.25, - "y": -0.04000002 + "x": 2.24999976, + "y": -0.0600000173 }, "EndPoint": { - "x": 3.15, - "y": -0.04000002 + "x": 3.14999986, + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -457,27 +457,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 14, "StartPoint": { "x": 3.14999986, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": 4.04999971, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -488,27 +488,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 15, "StartPoint": { "x": 4.05, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": 4.95, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -519,27 +519,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 16, "StartPoint": { - "x": 4.95000029, - "y": -0.04000002 + "x": 4.95, + "y": -0.0600000173 }, "EndPoint": { - "x": 5.85, - "y": -0.04000002 + "x": 5.84999943, + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -550,89 +550,89 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 17, "StartPoint": { "x": 5.85, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { "x": 6.74999952, - "y": -0.04000002 + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 1.27999973, + "Length": 1.24999952, "NextFootholdId": 19, "PreviousFootholdId": 17, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 18, "StartPoint": { "x": 6.75, - "y": -0.04000002 + "y": -0.0600000173 }, "EndPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 7.99999952, + "y": -0.0600000173 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.859999955, + "Length": 0.84, "NextFootholdId": 20, "PreviousFootholdId": 18, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 19, "StartPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 7.99999952, + "y": -0.0600000173 }, "EndPoint": { - "x": 8.03, + "x": 7.99999952, "y": -0.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -643,27 +643,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 20, "StartPoint": { - "x": 8.03, + "x": 7.99999952, "y": -0.9000001 }, "EndPoint": { - "x": 8.03, + "x": 7.99999952, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -674,27 +674,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 21, "StartPoint": { - "x": 8.03, + "x": 7.99999952, "y": -1.50000012 }, "EndPoint": { - "x": 8.03, + "x": 7.99999952, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -705,27 +705,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 22, "StartPoint": { - "x": 8.03, + "x": 7.99999952, "y": -2.10000014 }, "EndPoint": { - "x": 8.03, + "x": 7.99999952, "y": -2.7 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -736,27 +736,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 23, "StartPoint": { - "x": 8.03, - "y": -2.70000029 + "x": 7.99999952, + "y": -2.7 }, "EndPoint": { - "x": 8.03, - "y": -3.30000019 + "x": 7.99999952, + "y": -3.3 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -767,27 +767,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 24, "StartPoint": { - "x": 8.03, + "x": 7.99999952, "y": -3.30000019 }, "EndPoint": { - "x": 8.03, + "x": 7.99999952, "y": -3.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -798,27 +798,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 25, "StartPoint": { - "x": 8.03, + "x": 7.99999952, "y": -3.90000033 }, "EndPoint": { - "x": 8.03, + "x": 7.99999952, "y": -4.50000048 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -829,58 +829,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 26, "StartPoint": { - "x": 8.03, + "x": 7.99999952, "y": -4.5 }, "EndPoint": { - "x": 8.03, + "x": 7.99999952, "y": -5.10000038 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { - "Length": 0.859999955, + "Length": 0.84, "NextFootholdId": 1, "PreviousFootholdId": 28, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 27, "StartPoint": { - "x": -8.93, + "x": -8.900001, "y": -0.9 }, "EndPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.900001, + "y": -0.0600000173 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -891,27 +891,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 28, "StartPoint": { - "x": -8.93, + "x": -8.900001, "y": -1.50000012 }, "EndPoint": { - "x": -8.93, + "x": -8.900001, "y": -0.9000001 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -922,27 +922,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 29, "StartPoint": { - "x": -8.93, + "x": -8.900001, "y": -2.10000014 }, "EndPoint": { - "x": -8.93, + "x": -8.900001, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -953,27 +953,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 30, "StartPoint": { - "x": -8.93, + "x": -8.900001, "y": -2.7 }, "EndPoint": { - "x": -8.93, + "x": -8.900001, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -984,27 +984,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 31, "StartPoint": { - "x": -8.93, - "y": -3.30000019 + "x": -8.900001, + "y": -3.3 }, "EndPoint": { - "x": -8.93, - "y": -2.70000029 + "x": -8.900001, + "y": -2.7 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1015,27 +1015,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 32, "StartPoint": { - "x": -8.93, + "x": -8.900001, "y": -3.9 }, "EndPoint": { - "x": -8.93, + "x": -8.900001, "y": -3.30000019 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1046,27 +1046,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 33, "StartPoint": { - "x": -8.93, + "x": -8.900001, "y": -4.50000048 }, "EndPoint": { - "x": -8.93, + "x": -8.900001, "y": -3.90000033 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1077,27 +1077,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00001b5b-0000-4000-8000-000000001b5b", "Id": 34, "StartPoint": { - "x": -8.93, + "x": -8.900001, "y": -5.10000038 }, "EndPoint": { - "x": -8.93, + "x": -8.900001, "y": -4.5 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } } ] @@ -1205,32 +1205,32 @@ "Position": { "x": -0.225, "y": -0.15, - "z": 1000 + "z": 1000.0 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, { "@type": "MOD.Core.TileMapComponent", "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, - "FootholdDrag": 1, - "FootholdForce": 0, - "FootholdWalkSpeedFactor": 1, + "FootholdDrag": 1.0, + "FootholdForce": 0.0, + "FootholdWalkSpeedFactor": 1.0, "IgnoreMapLayerCheck": false, "IsOddGridPosition": false, "OrderInLayer": 1, @@ -6298,27 +6298,27 @@ { "@type": "MOD.Core.TransformComponent", "Rotation": { - "x": 0, - "y": 0, - "z": 0 + "x": 0.0, + "y": 0.0, + "z": 0.0 }, "Position": { - "x": -5, - "y": 0, + "x": -5.0, + "y": 0.0, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, - "ZRotation": 0, + "ZRotation": 0.0, "Enable": true }, { @@ -6330,20 +6330,20 @@ "FlipY": false, "IgnoreMapLayerCheck": false, "OrderInLayer": 0, - "PlayRate": 1, + "PlayRate": 1.0, "RenderSetting": 0, "SortingLayer": "Default", "SpriteRUID": "8ef238e0d0ca4bb783aca526cff35d11", "StartFrameIndex": 0, "TiledSize": { - "x": 1, - "y": 1 + "x": 1.0, + "y": 1.0 }, "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, "Enable": true }, @@ -6381,20 +6381,20 @@ { "@type": "MOD.Core.TransformComponent", "Position": { - "x": 3.5, - "y": 0.03499998, + "x": 3.50589752, + "y": 0.0149999857, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6452,28 +6452,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6490,12 +6490,12 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ], @@ -6513,7 +6513,7 @@ "enable": true, "visible": true, "localize": false, - "displayOrder": 4, + "displayOrder": 5, "pathConstraints": "///", "revision": 2, "origin": { @@ -6528,20 +6528,20 @@ { "@type": "MOD.Core.TransformComponent", "Position": { - "x": 5.5, - "y": 0.03499998, + "x": 5.48230743, + "y": 0.0149999857, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6599,28 +6599,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6637,12 +6637,12 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ], diff --git a/map/map10.map b/map/map10.map index 60449d6..135f4fa 100644 --- a/map/map10.map +++ b/map/map10.map @@ -31,15 +31,15 @@ "@components": [ { "@type": "MOD.Core.MapComponent", - "AirAccelerationXFactor": 1, - "AirDecelerationXFactor": 1, - "FallSpeedMaxXFactor": 1, - "FallSpeedMaxYFactor": 1, - "Gravity": 1, + "AirAccelerationXFactor": 1.0, + "AirDecelerationXFactor": 1.0, + "FallSpeedMaxXFactor": 1.0, + "FallSpeedMaxYFactor": 1.0, + "Gravity": 1.0, "IsInstanceMap": false, "TileMapMode": 0, - "WalkAccelerationFactor": 1, - "WalkDrag": 1, + "WalkAccelerationFactor": 1.0, + "WalkDrag": 1.0, "Enable": true }, { @@ -47,34 +47,34 @@ "FootholdsByLayer": { "1": [ { - "Length": 1.27999973, + "Length": 1.22999954, "NextFootholdId": 2, "PreviousFootholdId": 27, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 1, "StartPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.88, + "y": 0.0 }, "EndPoint": { "x": -7.65000057, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -85,27 +85,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 2, "StartPoint": { "x": -7.64999962, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": -6.75, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -116,27 +116,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 3, "StartPoint": { "x": -6.74999952, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": -5.85, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -147,27 +147,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 4, "StartPoint": { "x": -5.84999943, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": -4.95, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -178,27 +178,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 5, "StartPoint": { "x": -4.95, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": -4.05, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -209,27 +209,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 6, "StartPoint": { "x": -4.05, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -240,27 +240,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 7, "StartPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -271,27 +271,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 8, "StartPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": -1.35, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -302,27 +302,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 9, "StartPoint": { "x": -1.35, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": -0.449999958, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -333,27 +333,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 10, "StartPoint": { "x": -0.45, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": 0.449999958, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -364,27 +364,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 11, "StartPoint": { "x": 0.450000018, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": 1.35, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -395,27 +395,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 12, "StartPoint": { "x": 1.34999979, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": 2.25, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -426,27 +426,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 13, "StartPoint": { "x": 2.25, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": 3.15, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -457,27 +457,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 14, "StartPoint": { "x": 3.14999986, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": 4.04999971, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -488,27 +488,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 15, "StartPoint": { "x": 4.05, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": 4.95, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -519,27 +519,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 16, "StartPoint": { "x": 4.95000029, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": 5.85, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -550,89 +550,89 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 17, "StartPoint": { "x": 5.85, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { "x": 6.74999952, - "y": -0.04000002 + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 1.27999973, + "Length": 1.23, "NextFootholdId": 19, "PreviousFootholdId": 17, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 18, "StartPoint": { "x": 6.75, - "y": -0.04000002 + "y": 0.0 }, "EndPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 7.98, + "y": 0.0 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.859999955, + "Length": 0.9, "NextFootholdId": 20, "PreviousFootholdId": 18, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 19, "StartPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 7.98, + "y": 0.0 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -0.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -643,27 +643,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 20, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -0.9000001 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -674,27 +674,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 21, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -1.50000012 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -705,27 +705,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 22, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -2.10000014 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -2.7 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -736,27 +736,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 23, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -2.70000029 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -3.30000019 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -767,27 +767,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 24, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -3.30000019 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -3.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -798,27 +798,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 25, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -3.90000033 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -4.50000048 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -829,58 +829,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 26, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -4.5 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -5.10000038 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { - "Length": 0.859999955, + "Length": 0.9, "NextFootholdId": 1, "PreviousFootholdId": 28, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 27, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -0.9 }, "EndPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.88, + "y": 0.0 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -891,27 +891,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 28, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -1.50000012 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -0.9000001 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -922,27 +922,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 29, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -2.10000014 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -953,27 +953,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 30, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -2.7 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -984,27 +984,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 31, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -3.30000019 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -2.70000029 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1015,27 +1015,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 32, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -3.9 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -3.30000019 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1046,27 +1046,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 33, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -4.50000048 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -3.90000033 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1077,27 +1077,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002713-0000-4000-8000-000000002713", "Id": 34, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -5.10000038 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -4.5 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } } ] @@ -1205,32 +1205,32 @@ "Position": { "x": -0.225, "y": -0.15, - "z": 1000 + "z": 1000.0 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, { "@type": "MOD.Core.TileMapComponent", "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, - "FootholdDrag": 1, - "FootholdForce": 0, - "FootholdWalkSpeedFactor": 1, + "FootholdDrag": 1.0, + "FootholdForce": 0.0, + "FootholdWalkSpeedFactor": 1.0, "IgnoreMapLayerCheck": false, "IsOddGridPosition": false, "OrderInLayer": 1, @@ -6298,27 +6298,27 @@ { "@type": "MOD.Core.TransformComponent", "Rotation": { - "x": 0, - "y": 0, - "z": 0 + "x": 0.0, + "y": 0.0, + "z": 0.0 }, "Position": { - "x": -5, - "y": 0, + "x": -5.0, + "y": 0.0, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, - "ZRotation": 0, + "ZRotation": 0.0, "Enable": true }, { @@ -6330,20 +6330,20 @@ "FlipY": false, "IgnoreMapLayerCheck": false, "OrderInLayer": 0, - "PlayRate": 1, + "PlayRate": 1.0, "RenderSetting": 0, "SortingLayer": "Default", "SpriteRUID": "8ef238e0d0ca4bb783aca526cff35d11", "StartFrameIndex": 0, "TiledSize": { - "x": 1, - "y": 1 + "x": 1.0, + "y": 1.0 }, "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, "Enable": true }, @@ -6355,153 +6355,6 @@ "@version": 1 } }, - { - "id": "00002715-0000-4000-8000-000000002715", - "path": "/maps/map10/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", - "jsonString": { - "name": "Monster1", - "path": "/maps/map10/Monster1", - "nameEditable": true, - "enable": true, - "visible": true, - "localize": false, - "displayOrder": 4, - "pathConstraints": "///", - "revision": 2, - "origin": { - "type": "Model", - "entry_id": "StaticMonster", - "sub_entity_id": null, - "root_entity_id": "00002715-0000-4000-8000-000000002715", - "replaced_model_id": null - }, - "modelId": "staticmonster", - "@components": [ - { - "@type": "MOD.Core.TransformComponent", - "Position": { - "x": 3.5, - "y": 0.03499998, - "z": 999.999 - }, - "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 - }, - "Scale": { - "x": 1, - "y": 1, - "z": 1 - }, - "Enable": true - }, - { - "@type": "MOD.Core.StateAnimationComponent", - "ActionSheet": { - "stand": "3109357701ae41a4bcc7543f52f1f4c3", - "hit": "ce0269079e884545b5bb6ea075e2a67f", - "die": "a5e65650e00e47878cac1be7a5b999a0" - }, - "Enable": true - }, - { - "@type": "MOD.Core.SpriteRendererComponent", - "ActionSheet": {}, - "EndFrameIndex": 0, - "RenderSetting": 1, - "SortingLayer": "MapLayer0", - "SpriteRUID": "3109357701ae41a4bcc7543f52f1f4c3", - "StartFrameIndex": 0, - "Enable": true - }, - { - "@type": "MOD.Core.DamageSkinSettingComponent", - "DamageSkinId": { - "DataId": "02c22d93421b4038b3c413b3e40b57ec" - }, - "Enable": true - }, - { - "@type": "MOD.Core.HitComponent", - "BoxSize": { - "x": 0.78, - "y": 0.86 - }, - "ColliderOffset": { - "x": 0.03999999, - "y": 0.43 - }, - "CollisionGroup": { - "Id": "8992acd1e8cd45838db6f10a7b41df09" - }, - "IsLegacy": false, - "Enable": true - }, - { - "@type": "MOD.Core.DamageSkinSpawnerComponent", - "Enable": true - }, - { - "@type": "MOD.Core.StateComponent", - "IsLegacy": false, - "Enable": true - }, - { - "@type": "MOD.Core.RigidbodyComponent", - "MoveVelocity": { - "x": 0, - "y": 0 - }, - "RealMoveVelocity": { - "x": 0, - "y": 0 - }, - "Enable": true - }, - { - "@type": "MOD.Core.KinematicbodyComponent", - "MoveVelocity": { - "x": 0, - "y": 0 - }, - "Enable": true - }, - { - "@type": "MOD.Core.SideviewbodyComponent", - "MoveVelocity": { - "x": 0, - "y": 0 - }, - "Enable": true - }, - { - "@type": "MOD.Core.MovementComponent", - "Enable": true - }, - { - "@type": "script.Monster", - "Enable": true, - "IsDead": false - }, - { - "@type": "script.MonsterAttack", - "Enable": true, - "SpriteSize": { - "x": 0, - "y": 0 - }, - "PositionOffset": { - "x": 0, - "y": 0 - } - } - ], - "@version": 1 - } - }, { "id": "00002716-0000-4000-8000-000000002716", "path": "/maps/map10/Monster2", @@ -6533,15 +6386,15 @@ "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6599,28 +6452,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6637,12 +6490,159 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 + } + } + ], + "@version": 1 + } + }, + { + "id": "00002715-0000-4000-8000-000000002715", + "path": "/maps/map10/Monster1", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "jsonString": { + "name": "Monster1", + "path": "/maps/map10/Monster1", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": false, + "displayOrder": 5, + "pathConstraints": "///", + "revision": 2, + "origin": { + "type": "Model", + "entry_id": "StaticMonster", + "sub_entity_id": null, + "root_entity_id": "00002715-0000-4000-8000-000000002715", + "replaced_model_id": null + }, + "modelId": "staticmonster", + "@components": [ + { + "@type": "MOD.Core.TransformComponent", + "Position": { + "x": 3.5, + "y": 0.03499998, + "z": 999.999 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.StateAnimationComponent", + "ActionSheet": { + "stand": "3109357701ae41a4bcc7543f52f1f4c3", + "hit": "ce0269079e884545b5bb6ea075e2a67f", + "die": "a5e65650e00e47878cac1be7a5b999a0" + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteRendererComponent", + "ActionSheet": {}, + "EndFrameIndex": 0, + "RenderSetting": 1, + "SortingLayer": "MapLayer0", + "SpriteRUID": "3109357701ae41a4bcc7543f52f1f4c3", + "StartFrameIndex": 0, + "Enable": true + }, + { + "@type": "MOD.Core.DamageSkinSettingComponent", + "DamageSkinId": { + "DataId": "02c22d93421b4038b3c413b3e40b57ec" + }, + "Enable": true + }, + { + "@type": "MOD.Core.HitComponent", + "BoxSize": { + "x": 0.78, + "y": 0.86 + }, + "ColliderOffset": { + "x": 0.03999999, + "y": 0.43 + }, + "CollisionGroup": { + "Id": "8992acd1e8cd45838db6f10a7b41df09" + }, + "IsLegacy": false, + "Enable": true + }, + { + "@type": "MOD.Core.DamageSkinSpawnerComponent", + "Enable": true + }, + { + "@type": "MOD.Core.StateComponent", + "IsLegacy": false, + "Enable": true + }, + { + "@type": "MOD.Core.RigidbodyComponent", + "MoveVelocity": { + "x": 0.0, + "y": 0.0 + }, + "RealMoveVelocity": { + "x": 0.0, + "y": 0.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.KinematicbodyComponent", + "MoveVelocity": { + "x": 0.0, + "y": 0.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SideviewbodyComponent", + "MoveVelocity": { + "x": 0.0, + "y": 0.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.MovementComponent", + "Enable": true + }, + { + "@type": "script.Monster", + "Enable": true, + "IsDead": false + }, + { + "@type": "script.MonsterAttack", + "Enable": true, + "SpriteSize": { + "x": 0.0, + "y": 0.0 + }, + "PositionOffset": { + "x": 0.0, + "y": 0.0 } } ], diff --git a/map/map11.map b/map/map11.map index f356525..714a057 100644 --- a/map/map11.map +++ b/map/map11.map @@ -31,15 +31,15 @@ "@components": [ { "@type": "MOD.Core.MapComponent", - "AirAccelerationXFactor": 1, - "AirDecelerationXFactor": 1, - "FallSpeedMaxXFactor": 1, - "FallSpeedMaxYFactor": 1, - "Gravity": 1, + "AirAccelerationXFactor": 1.0, + "AirDecelerationXFactor": 1.0, + "FallSpeedMaxXFactor": 1.0, + "FallSpeedMaxYFactor": 1.0, + "Gravity": 1.0, "IsInstanceMap": false, "TileMapMode": 0, - "WalkAccelerationFactor": 1, - "WalkDrag": 1, + "WalkAccelerationFactor": 1.0, + "WalkDrag": 1.0, "Enable": true }, { @@ -47,34 +47,34 @@ "FootholdsByLayer": { "1": [ { - "Length": 1.27999973, + "Length": 1.2300005, "NextFootholdId": 2, "PreviousFootholdId": 27, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 1, "StartPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.88, + "y": -0.15 }, "EndPoint": { - "x": -7.65000057, - "y": -0.04000002 + "x": -7.64999962, + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -85,27 +85,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 2, "StartPoint": { "x": -7.64999962, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -6.75, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -116,27 +116,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 3, "StartPoint": { "x": -6.74999952, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -5.85, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -147,27 +147,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 4, "StartPoint": { "x": -5.84999943, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -4.95, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -178,27 +178,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 5, "StartPoint": { "x": -4.95, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -4.05, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -209,27 +209,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 6, "StartPoint": { "x": -4.05, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -240,58 +240,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 7, "StartPoint": { "x": -3.14999986, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.899999738, + "Length": 0.9, "NextFootholdId": 9, "PreviousFootholdId": 7, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 8, "StartPoint": { "x": -2.24999976, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { - "x": -1.35, - "y": -0.04000002 + "x": -1.34999979, + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -302,27 +302,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 9, "StartPoint": { "x": -1.35, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": -0.449999958, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -333,27 +333,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 10, "StartPoint": { "x": -0.45, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 0.449999958, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -364,27 +364,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 11, "StartPoint": { "x": 0.450000018, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 1.35, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -395,27 +395,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 12, "StartPoint": { "x": 1.34999979, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 2.25, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -426,27 +426,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 13, "StartPoint": { - "x": 2.25, - "y": -0.04000002 + "x": 2.24999976, + "y": -0.15 }, "EndPoint": { - "x": 3.15, - "y": -0.04000002 + "x": 3.14999986, + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -457,27 +457,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 14, "StartPoint": { "x": 3.14999986, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 4.04999971, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -488,27 +488,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 15, "StartPoint": { "x": 4.05, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 4.95, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -519,27 +519,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 16, "StartPoint": { - "x": 4.95000029, - "y": -0.04000002 + "x": 4.95, + "y": -0.15 }, "EndPoint": { - "x": 5.85, - "y": -0.04000002 + "x": 5.84999943, + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { @@ -550,89 +550,89 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 17, "StartPoint": { "x": 5.85, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { "x": 6.74999952, - "y": -0.04000002 + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 1.27999973, + "Length": 1.23, "NextFootholdId": 19, "PreviousFootholdId": 17, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 18, "StartPoint": { "x": 6.75, - "y": -0.04000002 + "y": -0.15 }, "EndPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 7.98, + "y": -0.15 }, "Variance": { - "x": 1, - "y": 0 + "x": 1.0, + "y": 0.0 } }, { - "Length": 0.859999955, + "Length": 0.75, "NextFootholdId": 20, "PreviousFootholdId": 18, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 19, "StartPoint": { - "x": 8.03, - "y": -0.04000002 + "x": 7.98, + "y": -0.15 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -0.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -643,27 +643,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 20, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -0.9000001 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -674,27 +674,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 21, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -1.50000012 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -705,27 +705,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 22, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -2.10000014 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -2.7 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -736,27 +736,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 23, "StartPoint": { - "x": 8.03, - "y": -2.70000029 + "x": 7.98, + "y": -2.7 }, "EndPoint": { - "x": 8.03, - "y": -3.30000019 + "x": 7.98, + "y": -3.3 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -767,27 +767,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 24, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -3.30000019 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -3.9 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -798,27 +798,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 25, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -3.90000033 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -4.50000048 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { @@ -829,58 +829,58 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 26, "StartPoint": { - "x": 8.03, + "x": 7.98, "y": -4.5 }, "EndPoint": { - "x": 8.03, + "x": 7.98, "y": -5.10000038 }, "Variance": { - "x": 0, - "y": -1 + "x": 0.0, + "y": -1.0 } }, { - "Length": 0.859999955, + "Length": 0.75, "NextFootholdId": 1, "PreviousFootholdId": 28, "groupID": 1, "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 27, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -0.9 }, "EndPoint": { - "x": -8.93, - "y": -0.04000002 + "x": -8.88, + "y": -0.15 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -891,27 +891,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 28, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -1.50000012 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -0.9000001 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -922,27 +922,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 29, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -2.10000014 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -1.50000012 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -953,27 +953,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 30, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -2.7 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -2.10000014 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -984,27 +984,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 31, "StartPoint": { - "x": -8.93, - "y": -3.30000019 + "x": -8.88, + "y": -3.3 }, "EndPoint": { - "x": -8.93, - "y": -2.70000029 + "x": -8.88, + "y": -2.7 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1015,27 +1015,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 32, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -3.9 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -3.30000019 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1046,27 +1046,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 33, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -4.50000048 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -3.90000033 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } }, { @@ -1077,27 +1077,27 @@ "layer": 1, "sortingLayerName": "MapLayer0", "attribute": { - "walk": 1, - "force": 0, - "drag": 1, + "walk": 1.0, + "force": 0.0, + "drag": 1.0, "isBlockVertical": false, "isDynamic": false, "isCustomFoothold": false, "inertiaOption": 0 }, - "OwnerId": "c9a3018a-f6fa-4c4b-b91e-404ac5ce9858", + "OwnerId": "00002afb-0000-4000-8000-000000002afb", "Id": 34, "StartPoint": { - "x": -8.93, + "x": -8.88, "y": -5.10000038 }, "EndPoint": { - "x": -8.93, + "x": -8.88, "y": -4.5 }, "Variance": { - "x": 0, - "y": 1 + "x": 0.0, + "y": 1.0 } } ] @@ -1205,32 +1205,32 @@ "Position": { "x": -0.225, "y": -0.15, - "z": 1000 + "z": 1000.0 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, { "@type": "MOD.Core.TileMapComponent", "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, - "FootholdDrag": 1, - "FootholdForce": 0, - "FootholdWalkSpeedFactor": 1, + "FootholdDrag": 1.0, + "FootholdForce": 0.0, + "FootholdWalkSpeedFactor": 1.0, "IgnoreMapLayerCheck": false, "IsOddGridPosition": false, "OrderInLayer": 1, @@ -6298,27 +6298,27 @@ { "@type": "MOD.Core.TransformComponent", "Rotation": { - "x": 0, - "y": 0, - "z": 0 + "x": 0.0, + "y": 0.0, + "z": 0.0 }, "Position": { - "x": -5, - "y": 0, + "x": -5.0, + "y": 0.0, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, - "ZRotation": 0, + "ZRotation": 0.0, "Enable": true }, { @@ -6330,20 +6330,20 @@ "FlipY": false, "IgnoreMapLayerCheck": false, "OrderInLayer": 0, - "PlayRate": 1, + "PlayRate": 1.0, "RenderSetting": 0, "SortingLayer": "Default", "SpriteRUID": "8ef238e0d0ca4bb783aca526cff35d11", "StartFrameIndex": 0, "TiledSize": { - "x": 1, - "y": 1 + "x": 1.0, + "y": 1.0 }, "Color": { - "r": 1, - "g": 1, - "b": 1, - "a": 1 + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, "Enable": true }, @@ -6381,20 +6381,20 @@ { "@type": "MOD.Core.TransformComponent", "Position": { - "x": 3.5, - "y": 0.03499998, + "x": 3.50589752, + "y": -0.075, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6452,28 +6452,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6490,12 +6490,12 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ], @@ -6513,7 +6513,7 @@ "enable": true, "visible": true, "localize": false, - "displayOrder": 4, + "displayOrder": 5, "pathConstraints": "///", "revision": 2, "origin": { @@ -6529,19 +6529,19 @@ "@type": "MOD.Core.TransformComponent", "Position": { "x": 5.5, - "y": 0.03499998, + "y": -0.075, "z": 999.999 }, "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 }, "Scale": { - "x": 1, - "y": 1, - "z": 1 + "x": 1.0, + "y": 1.0, + "z": 1.0 }, "Enable": true }, @@ -6599,28 +6599,28 @@ { "@type": "MOD.Core.RigidbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "RealMoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.KinematicbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, { "@type": "MOD.Core.SideviewbodyComponent", "MoveVelocity": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "Enable": true }, @@ -6637,12 +6637,12 @@ "@type": "script.MonsterAttack", "Enable": true, "SpriteSize": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 }, "PositionOffset": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ], From 8f08e67e4c4469e32040a7758b7057c65b372ca1 Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 8 Jun 2026 01:24:25 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=EB=AF=B8=EC=82=AC=EC=9A=A9=20=EA=B3=A0?= =?UTF-8?q?=EC=95=84=20=EB=A6=AC=EC=86=8C=EC=8A=A4=20invincible=20belief.s?= =?UTF-8?q?prite=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 카드 5장 통일로 이미지 카드가 손패에서 빠져 이 스프라이트는 미참조 고아가 됨. descriptor Id가 무효라 플레이마다 LEA-3021 에러를 유발하므로 제거. (맵 Background.WebUrl의 휴면 참조는 Type=Template이라 미사용 — 무해, 유지) Co-Authored-By: Claude Opus 4.8 (1M context) --- RootDesk/MyDesk/invincible belief.sprite | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 RootDesk/MyDesk/invincible belief.sprite diff --git a/RootDesk/MyDesk/invincible belief.sprite b/RootDesk/MyDesk/invincible belief.sprite deleted file mode 100644 index b2cce6b..0000000 --- a/RootDesk/MyDesk/invincible belief.sprite +++ /dev/null @@ -1,23 +0,0 @@ -{ - "Id": "", - "GameId": "", - "EntryKey": "sprite://eab37efa7f0d400f94259a2df836eb8a", - "ContentType": "x-mod/sprite", - "Content": "", - "Usage": 0, - "UsePublish": 1, - "UseService": 0, - "CoreVersion": "26.5.0.0", - "StudioVersion": "0.1.0.0", - "DynamicLoading": 0, - "ContentProto": { - "Use": "Json", - "Json": { - "upload_keyname": "30/54/30542a379cb74d2d807104635740a8ea/sprite/eab37efa7f0d400f94259a2df836eb8a/639163110552472416", - "upload_hash": "AAD8C7C4E500FF8E001E85EAB181F3B19605BA9D8C8368DB28919B419515003D", - "name": "invincible belief", - "resource_guid": "eab37efa7f0d400f94259a2df836eb8a", - "resource_version": "6a238b0f1a7908d59b5d8fe4" - } - } -} \ No newline at end of file From bd02865f4f98952a829b263436b9ab40fe8d37e4 Mon Sep 17 00:00:00 2001 From: gahusb Date: Tue, 9 Jun 2026 00:04:26 +0900 Subject: [PATCH 7/8] =?UTF-8?q?carddeck(B):=20=EC=B9=B4=EB=93=9C=20?= =?UTF-8?q?=EC=A0=84=ED=88=AC=20=ED=86=B5=ED=95=A9=20=E2=80=94=20=EC=A0=81?= =?UTF-8?q?/=ED=94=8C=EB=A0=88=EC=9D=B4=EC=96=B4=20=EC=A0=84=ED=88=AC=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=C2=B7=EC=9D=98=EB=8F=84=C2=B7=EC=8A=B9?= =?UTF-8?q?=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PlayCard가 토스트 대신 실제 효과를 적용하도록 통합. - 카드 데이터에 damage/block 수치 필드 추가 (desc 파싱 폐기) - 전투 상태: 플레이어 HP/Block, 적 HP/Block/의도(결정적 사이클) - PlayCard: Attack→적 HP 감소(방어 우선 차감), Skill→플레이어 Block 증가 - EndPlayerTurn→적 턴(의도 실행)→다음 플레이어 턴, 승패 판정 - CombatHud UI: 적 패널(이름/HP/방어/의도)·플레이어 패널(HP/방어)·결과 텍스트 - 수치(플레이어80/적45/의도10·6·방8)는 임시 placeholder (D에서 캐릭터/몬스터별 외부화) 생성기 단일 소스(tools/gen-slaydeck.mjs)에서 생성. 결정적 출력 확인. Co-Authored-By: Claude Opus 4.8 (1M context) --- RootDesk/MyDesk/SlayDeckController.codeblock | 192 +- tools/gen-slaydeck.mjs | 227 ++- ui/DefaultGroup.ui | 1739 ++++++++++++++++++ 3 files changed, 2144 insertions(+), 14 deletions(-) diff --git a/RootDesk/MyDesk/SlayDeckController.codeblock b/RootDesk/MyDesk/SlayDeckController.codeblock index 18d3778..bdecb69 100644 --- a/RootDesk/MyDesk/SlayDeckController.codeblock +++ b/RootDesk/MyDesk/SlayDeckController.codeblock @@ -91,6 +91,76 @@ "SyncDirection": 0, "Attributes": [], "Name": "Cards" + }, + { + "Type": "number", + "DefaultValue": "0", + "SyncDirection": 0, + "Attributes": [], + "Name": "PlayerHp" + }, + { + "Type": "number", + "DefaultValue": "80", + "SyncDirection": 0, + "Attributes": [], + "Name": "PlayerMaxHp" + }, + { + "Type": "number", + "DefaultValue": "0", + "SyncDirection": 0, + "Attributes": [], + "Name": "PlayerBlock" + }, + { + "Type": "number", + "DefaultValue": "0", + "SyncDirection": 0, + "Attributes": [], + "Name": "EnemyHp" + }, + { + "Type": "number", + "DefaultValue": "45", + "SyncDirection": 0, + "Attributes": [], + "Name": "EnemyMaxHp" + }, + { + "Type": "number", + "DefaultValue": "0", + "SyncDirection": 0, + "Attributes": [], + "Name": "EnemyBlock" + }, + { + "Type": "number", + "DefaultValue": "1", + "SyncDirection": 0, + "Attributes": [], + "Name": "EnemyIntentIndex" + }, + { + "Type": "boolean", + "DefaultValue": "false", + "SyncDirection": 0, + "Attributes": [], + "Name": "CombatOver" + }, + { + "Type": "any", + "DefaultValue": "nil", + "SyncDirection": 0, + "Attributes": [], + "Name": "EnemyIntents" + }, + { + "Type": "any", + "DefaultValue": "nil", + "SyncDirection": 0, + "Attributes": [], + "Name": "EnemyName" } ], "Methods": [ @@ -118,7 +188,7 @@ "Name": null }, "Arguments": [], - "Code": "self.MaxEnergy = 3\nself.Turn = 0\nself.DiscardPile = {}\nself.Hand = {}\nself.Cards = {\n\tStrike = { name = \"타격\", cost = 1, desc = \"피해 6\", kind = \"Attack\" },\n\tDefend = { name = \"방어\", cost = 1, desc = \"방어도 5\", kind = \"Skill\" },\n\tBash = { name = \"강타\", cost = 2, desc = \"피해 10\", kind = \"Attack\" },\n}\nself.DrawPile = { \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Defend\", \"Defend\", \"Defend\", \"Defend\", \"Bash\" }\nself:Shuffle(self.DrawPile)\nself:BindButtons()\nself:StartPlayerTurn()", + "Code": "self.MaxEnergy = 3\nself.Turn = 0\nself.PlayerMaxHp = 80\nself.PlayerHp = self.PlayerMaxHp\nself.PlayerBlock = 0\nself.EnemyName = \"슬라임\"\nself.EnemyMaxHp = 45\nself.EnemyHp = self.EnemyMaxHp\nself.EnemyBlock = 0\nself.EnemyIntents = {\n\t{ kind = \"Attack\", value = 10 },\n\t{ kind = \"Attack\", value = 6 },\n\t{ kind = \"Defend\", value = 8 },\n}\nself.EnemyIntentIndex = 1\nself.CombatOver = false\nself.DiscardPile = {}\nself.Hand = {}\nself.Cards = {\n\tStrike = { name = \"타격\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6 },\n\tDefend = { name = \"방어\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5 },\n\tBash = { name = \"강타\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10 },\n}\nself.DrawPile = { \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Defend\", \"Defend\", \"Defend\", \"Defend\", \"Bash\" }\nself:Shuffle(self.DrawPile)\nself:BindButtons()\nself:RenderCombat()\nself:StartPlayerTurn()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -171,7 +241,7 @@ "Name": null }, "Arguments": [], - "Code": "self.Turn = self.Turn + 1\nself.Energy = self.MaxEnergy\nself:DrawCards(5)\nself:RenderHand(true)", + "Code": "self.Turn = self.Turn + 1\nself.Energy = self.MaxEnergy\nself.PlayerBlock = 0\nself:DrawCards(5)\nself:RenderHand(true)\nself:RenderCombat()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -186,7 +256,7 @@ "Name": null }, "Arguments": [], - "Code": "for i = 1, #self.Hand do\n\ttable.insert(self.DiscardPile, self.Hand[i])\nend\nself.Hand = {}\nself:RenderHand(false)\nself:RenderPiles()\n_TimerService:SetTimerOnce(function() self:StartPlayerTurn() end, 0.45)", + "Code": "if self.CombatOver == true then\n\treturn\nend\nfor i = 1, #self.Hand do\n\ttable.insert(self.DiscardPile, self.Hand[i])\nend\nself.Hand = {}\nself:RenderHand(false)\nself:RenderPiles()\nself:EnemyTurn()\nself:CheckCombatEnd()\nif self.CombatOver == true then\n\treturn\nend\n_TimerService:SetTimerOnce(function() self:StartPlayerTurn() end, 0.45)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -389,7 +459,7 @@ "Name": "slot" } ], - "Code": "if self.Hand == nil then\n\treturn\nend\nlocal cardId = self.Hand[slot]\nif cardId == nil then\n\treturn\nend\nlocal c = self.Cards[cardId]\nif c == nil then\n\treturn\nend\nif self.Energy < c.cost then\n\tself:Toast(\"에너지가 부족합니다\")\n\treturn\nend\nself.Energy = self.Energy - c.cost\nself:Toast(c.name .. \" — \" .. c.desc)\ntable.remove(self.Hand, slot)\ntable.insert(self.DiscardPile, cardId)\nself:RenderHand(false)\nself:RenderPiles()", + "Code": "if self.CombatOver == true then\n\treturn\nend\nif self.Hand == nil then\n\treturn\nend\nlocal cardId = self.Hand[slot]\nif cardId == nil then\n\treturn\nend\nlocal c = self.Cards[cardId]\nif c == nil then\n\treturn\nend\nif self.Energy < c.cost then\n\tself:Toast(\"에너지가 부족합니다\")\n\treturn\nend\nself.Energy = self.Energy - c.cost\nif c.kind == \"Attack\" then\n\tif c.damage ~= nil then\n\t\tself:DealDamageToEnemy(c.damage)\n\tend\nelseif c.kind == \"Skill\" then\n\tif c.block ~= nil then\n\t\tself.PlayerBlock = self.PlayerBlock + c.block\n\tend\nend\ntable.remove(self.Hand, slot)\ntable.insert(self.DiscardPile, cardId)\nself:RenderHand(false)\nself:RenderPiles()\nself:RenderCombat()\nself:CheckCombatEnd()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -417,6 +487,120 @@ "ExecSpace": 6, "Attributes": [], "Name": "Toast" + }, + { + "Return": { + "Type": "void", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [ + { + "Type": "number", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": "amount" + } + ], + "Code": "local dmg = amount\nif self.EnemyBlock > 0 then\n\tlocal absorbed = math.min(self.EnemyBlock, dmg)\n\tself.EnemyBlock = self.EnemyBlock - absorbed\n\tdmg = dmg - absorbed\nend\nself.EnemyHp = self.EnemyHp - dmg\nif self.EnemyHp < 0 then\n\tself.EnemyHp = 0\nend", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "DealDamageToEnemy" + }, + { + "Return": { + "Type": "void", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [ + { + "Type": "number", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": "amount" + } + ], + "Code": "local dmg = amount\nif self.PlayerBlock > 0 then\n\tlocal absorbed = math.min(self.PlayerBlock, dmg)\n\tself.PlayerBlock = self.PlayerBlock - absorbed\n\tdmg = dmg - absorbed\nend\nself.PlayerHp = self.PlayerHp - dmg\nif self.PlayerHp < 0 then\n\tself.PlayerHp = 0\nend", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "DealDamageToPlayer" + }, + { + "Return": { + "Type": "void", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [], + "Code": "self.EnemyBlock = 0\nlocal intent = self.EnemyIntents[self.EnemyIntentIndex]\nif intent ~= nil then\n\tif intent.kind == \"Attack\" then\n\t\tself:DealDamageToPlayer(intent.value)\n\telseif intent.kind == \"Defend\" then\n\t\tself.EnemyBlock = self.EnemyBlock + intent.value\n\tend\nend\nself.EnemyIntentIndex = self.EnemyIntentIndex + 1\nif self.EnemyIntentIndex > #self.EnemyIntents then\n\tself.EnemyIntentIndex = 1\nend\nself:RenderCombat()", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "EnemyTurn" + }, + { + "Return": { + "Type": "void", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [], + "Code": "if self.EnemyHp <= 0 then\n\tself.CombatOver = true\n\tself:ShowResult(\"승리!\")\n\t-- TODO(E): 전투 보상 훅 — 카드 보상/골드/유물 선택 진입점\nelseif self.PlayerHp <= 0 then\n\tself.CombatOver = true\n\tself:ShowResult(\"패배...\")\nend", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "CheckCombatEnd" + }, + { + "Return": { + "Type": "void", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [ + { + "Type": "string", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": "text" + } + ], + "Code": "self:SetText(\"/ui/DefaultGroup/CombatHud/Result\", text)\nlocal entity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CombatHud/Result\")\nif entity ~= nil then\n\tentity.Enable = true\nend", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "ShowResult" + }, + { + "Return": { + "Type": "void", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [], + "Code": "self:SetText(\"/ui/DefaultGroup/CombatHud/EnemyName\", self.EnemyName)\nself:SetText(\"/ui/DefaultGroup/CombatHud/EnemyHp\", \"HP \" .. tostring(self.EnemyHp) .. \"/\" .. tostring(self.EnemyMaxHp))\nself:SetText(\"/ui/DefaultGroup/CombatHud/EnemyBlock\", \"방어 \" .. tostring(self.EnemyBlock))\nlocal intent = self.EnemyIntents[self.EnemyIntentIndex]\nlocal intentText = \"\"\nif intent ~= nil then\n\tif intent.kind == \"Attack\" then\n\t\tintentText = \"의도: 공격 \" .. tostring(intent.value)\n\telseif intent.kind == \"Defend\" then\n\t\tintentText = \"의도: 방어 \" .. tostring(intent.value)\n\tend\nend\nself:SetText(\"/ui/DefaultGroup/CombatHud/EnemyIntent\", intentText)\nself:SetText(\"/ui/DefaultGroup/CombatHud/PlayerHp\", \"HP \" .. tostring(self.PlayerHp) .. \"/\" .. tostring(self.PlayerMaxHp))\nself:SetText(\"/ui/DefaultGroup/CombatHud/PlayerBlock\", \"방어 \" .. tostring(self.PlayerBlock))", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "RenderCombat" } ], "EntityEventHandlers": [] diff --git a/tools/gen-slaydeck.mjs b/tools/gen-slaydeck.mjs index 557eeb6..790d574 100644 --- a/tools/gen-slaydeck.mjs +++ b/tools/gen-slaydeck.mjs @@ -20,7 +20,7 @@ const ALIGN_BOTTOM_CENTER = 6; function guid(prefix, n) { // 유효한 8-4-4-4-12 hex GUID 생성. prefix는 충돌 방지용 네임스페이스 바이트로 매핑. - const ns = prefix === 'hud' ? 0xd0 : prefix === 'dck' ? 0xca : 0xfe; + const ns = prefix === 'hud' ? 0xd0 : prefix === 'dck' ? 0xca : prefix === 'cmb' ? 0xcb : 0xfe; const v = (ns * 0x100000 + n) >>> 0; return `${v.toString(16).padStart(8, '0')}-0000-4000-8000-${v.toString(16).padStart(12, '0')}`; } @@ -172,7 +172,7 @@ function entity({ id, path, modelId, entryId, componentNames, components, displa function upsertUi() { const ui = JSON.parse(readFileSync(UI_FILE, 'utf8')); const E = ui.ContentProto.Entities; - ui.ContentProto.Entities = E.filter((e) => !e.path.startsWith('/ui/DefaultGroup/DeckHud')); + ui.ContentProto.Entities = E.filter((e) => !e.path.startsWith('/ui/DefaultGroup/DeckHud') && !e.path.startsWith('/ui/DefaultGroup/CombatHud')); const byPath = new Map(ui.ContentProto.Entities.map((e) => [e.path, e])); @@ -332,6 +332,103 @@ function upsertUi() { })); ui.ContentProto.Entities.push(...hud); + + const PANEL_BG = { r: 0.08, g: 0.09, b: 0.11, a: 0.78 }; + const combat = []; + combat.push(entity({ + id: guid('cmb', 0), + path: '/ui/DefaultGroup/CombatHud', + modelId: 'uiempty', + entryId: 'UIEmpty', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent', + displayOrder: 4, + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 1920, y: 1080 }, pos: { x: 0, y: 0 }, align: ALIGN_CENTER }), + sprite({ color: TRANSPARENT }), + ], + })); + combat.push(entity({ + id: guid('cmb', 1), + path: '/ui/DefaultGroup/CombatHud/EnemyBg', + modelId: 'uisprite', + entryId: 'UISprite', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent', + displayOrder: 0, + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 380, y: 170 }, pos: { x: 0, y: 300 }, align: ALIGN_CENTER }), + sprite({ color: PANEL_BG, type: 1 }), + ], + })); + const enemyTexts = [ + ['EnemyName', { x: 0, y: 58 }, { x: 360, y: 44 }, '슬라임', 28, true, GOLD], + ['EnemyHp', { x: 0, y: 16 }, { x: 360, y: 40 }, 'HP 45/45', 24, true, { r: 1, g: 1, b: 1, a: 1 }], + ['EnemyBlock', { x: 0, y: -20 }, { x: 360, y: 36 }, '방어 0', 20, false, { r: 0.6, g: 0.8, b: 1, a: 1 }], + ['EnemyIntent', { x: 0, y: -56 }, { x: 360, y: 38 }, '의도: 공격 10', 22, true, { r: 1, g: 0.72, b: 0.5, a: 1 }], + ]; + let cmbN = 2; + for (const [suffix, pos, size, value, fontSize, bold, color] of enemyTexts) { + combat.push(entity({ + id: guid('cmb', cmbN++), + path: `/ui/DefaultGroup/CombatHud/${suffix}`, + modelId: 'uitext', + entryId: 'UIText', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent', + displayOrder: enemyTexts.findIndex(([s]) => s === suffix) + 1, + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size, pos }), + sprite({ color: TRANSPARENT }), + text({ value, fontSize, bold, color }), + ], + })); + } + combat.push(entity({ + id: guid('cmb', cmbN++), + path: '/ui/DefaultGroup/CombatHud/PlayerBg', + modelId: 'uisprite', + entryId: 'UISprite', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent', + displayOrder: 5, + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 300, y: 110 }, pos: { x: -760, y: -260 }, align: ALIGN_CENTER }), + sprite({ color: PANEL_BG, type: 1 }), + ], + })); + const playerTexts = [ + ['PlayerHp', { x: -760, y: -238 }, { x: 280, y: 44 }, 'HP 80/80', 26, true, { r: 1, g: 1, b: 1, a: 1 }], + ['PlayerBlock', { x: -760, y: -284 }, { x: 280, y: 38 }, '방어 0', 22, false, { r: 0.6, g: 0.8, b: 1, a: 1 }], + ]; + for (const [suffix, pos, size, value, fontSize, bold, color] of playerTexts) { + combat.push(entity({ + id: guid('cmb', cmbN++), + path: `/ui/DefaultGroup/CombatHud/${suffix}`, + modelId: 'uitext', + entryId: 'UIText', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent', + displayOrder: 6 + playerTexts.findIndex(([s]) => s === suffix), + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size, pos }), + sprite({ color: TRANSPARENT }), + text({ value, fontSize, bold, color }), + ], + })); + } + const result = entity({ + id: guid('cmb', cmbN++), + path: '/ui/DefaultGroup/CombatHud/Result', + modelId: 'uitext', + entryId: 'UIText', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent', + displayOrder: 8, + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 700, y: 140 }, pos: { x: 0, y: 120 } }), + sprite({ color: TRANSPARENT }), + text({ value: '', fontSize: 64, bold: true, color: GOLD, alignment: 4 }), + ], + }); + result.jsonString.enable = false; + combat.push(result); + ui.ContentProto.Entities.push(...combat); + JSON.parse(JSON.stringify(ui)); writeFileSync(UI_FILE, JSON.stringify(ui, null, 2), 'utf8'); } @@ -396,20 +493,45 @@ function writeCodeblocks() { prop('number', 'TweenEventId', '0'), prop('any', 'EndTurnHandler'), prop('any', 'Cards'), + prop('number', 'PlayerHp', '0'), + prop('number', 'PlayerMaxHp', '80'), + prop('number', 'PlayerBlock', '0'), + prop('number', 'EnemyHp', '0'), + prop('number', 'EnemyMaxHp', '45'), + prop('number', 'EnemyBlock', '0'), + prop('number', 'EnemyIntentIndex', '1'), + prop('boolean', 'CombatOver', 'false'), + prop('any', 'EnemyIntents'), + prop('any', 'EnemyName'), ], [ method('OnBeginPlay', `self:StartCombat()`), method('StartCombat', `self.MaxEnergy = 3 self.Turn = 0 +self.PlayerMaxHp = 80 +self.PlayerHp = self.PlayerMaxHp +self.PlayerBlock = 0 +self.EnemyName = "슬라임" +self.EnemyMaxHp = 45 +self.EnemyHp = self.EnemyMaxHp +self.EnemyBlock = 0 +self.EnemyIntents = { + { kind = "Attack", value = 10 }, + { kind = "Attack", value = 6 }, + { kind = "Defend", value = 8 }, +} +self.EnemyIntentIndex = 1 +self.CombatOver = false self.DiscardPile = {} self.Hand = {} self.Cards = { - Strike = { name = "타격", cost = 1, desc = "피해 6", kind = "Attack" }, - Defend = { name = "방어", cost = 1, desc = "방어도 5", kind = "Skill" }, - Bash = { name = "강타", cost = 2, desc = "피해 10", kind = "Attack" }, + Strike = { name = "타격", cost = 1, desc = "피해 6", kind = "Attack", damage = 6 }, + Defend = { name = "방어", cost = 1, desc = "방어도 5", kind = "Skill", block = 5 }, + Bash = { name = "강타", cost = 2, desc = "피해 10", kind = "Attack", damage = 10 }, } self.DrawPile = { "Strike", "Strike", "Strike", "Strike", "Strike", "Defend", "Defend", "Defend", "Defend", "Bash" } self:Shuffle(self.DrawPile) self:BindButtons() +self:RenderCombat() self:StartPlayerTurn()`), method('Shuffle', `if list == nil then \treturn @@ -434,14 +556,24 @@ for i = 1, 5 do end`), method('StartPlayerTurn', `self.Turn = self.Turn + 1 self.Energy = self.MaxEnergy +self.PlayerBlock = 0 self:DrawCards(5) -self:RenderHand(true)`), - method('EndPlayerTurn', `for i = 1, #self.Hand do +self:RenderHand(true) +self:RenderCombat()`), + method('EndPlayerTurn', `if self.CombatOver == true then + return +end +for i = 1, #self.Hand do \ttable.insert(self.DiscardPile, self.Hand[i]) end self.Hand = {} self:RenderHand(false) self:RenderPiles() +self:EnemyTurn() +self:CheckCombatEnd() +if self.CombatOver == true then + return +end _TimerService:SetTimerOnce(function() self:StartPlayerTurn() end, 0.45)`), method('DrawCards', `for i = 1, amount do \tif #self.DrawPile <= 0 then @@ -532,7 +664,10 @@ end, 1 / 60)`, [ { Type: 'any', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'toPos' }, { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'duration' }, ]), - method('PlayCard', `if self.Hand == nil then + method('PlayCard', `if self.CombatOver == true then + return +end +if self.Hand == nil then return end local cardId = self.Hand[slot] @@ -548,12 +683,84 @@ if self.Energy < c.cost then return end self.Energy = self.Energy - c.cost -self:Toast(c.name .. " — " .. c.desc) +if c.kind == "Attack" then + if c.damage ~= nil then + self:DealDamageToEnemy(c.damage) + end +elseif c.kind == "Skill" then + if c.block ~= nil then + self.PlayerBlock = self.PlayerBlock + c.block + end +end table.remove(self.Hand, slot) table.insert(self.DiscardPile, cardId) self:RenderHand(false) -self:RenderPiles()`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }]), +self:RenderPiles() +self:RenderCombat() +self:CheckCombatEnd()`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }]), method('Toast', `log(message)`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'message' }]), + method('DealDamageToEnemy', `local dmg = amount +if self.EnemyBlock > 0 then + local absorbed = math.min(self.EnemyBlock, dmg) + self.EnemyBlock = self.EnemyBlock - absorbed + dmg = dmg - absorbed +end +self.EnemyHp = self.EnemyHp - dmg +if self.EnemyHp < 0 then + self.EnemyHp = 0 +end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'amount' }]), + method('DealDamageToPlayer', `local dmg = amount +if self.PlayerBlock > 0 then + local absorbed = math.min(self.PlayerBlock, dmg) + self.PlayerBlock = self.PlayerBlock - absorbed + dmg = dmg - absorbed +end +self.PlayerHp = self.PlayerHp - dmg +if self.PlayerHp < 0 then + self.PlayerHp = 0 +end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'amount' }]), + method('EnemyTurn', `self.EnemyBlock = 0 +local intent = self.EnemyIntents[self.EnemyIntentIndex] +if intent ~= nil then + if intent.kind == "Attack" then + self:DealDamageToPlayer(intent.value) + elseif intent.kind == "Defend" then + self.EnemyBlock = self.EnemyBlock + intent.value + end +end +self.EnemyIntentIndex = self.EnemyIntentIndex + 1 +if self.EnemyIntentIndex > #self.EnemyIntents then + self.EnemyIntentIndex = 1 +end +self:RenderCombat()`), + method('CheckCombatEnd', `if self.EnemyHp <= 0 then + self.CombatOver = true + self:ShowResult("승리!") + -- TODO(E): 전투 보상 훅 — 카드 보상/골드/유물 선택 진입점 +elseif self.PlayerHp <= 0 then + self.CombatOver = true + self:ShowResult("패배...") +end`), + method('ShowResult', `self:SetText("/ui/DefaultGroup/CombatHud/Result", text) +local entity = _EntityService:GetEntityByPath("/ui/DefaultGroup/CombatHud/Result") +if entity ~= nil then + entity.Enable = true +end`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'text' }]), + method('RenderCombat', `self:SetText("/ui/DefaultGroup/CombatHud/EnemyName", self.EnemyName) +self:SetText("/ui/DefaultGroup/CombatHud/EnemyHp", "HP " .. tostring(self.EnemyHp) .. "/" .. tostring(self.EnemyMaxHp)) +self:SetText("/ui/DefaultGroup/CombatHud/EnemyBlock", "방어 " .. tostring(self.EnemyBlock)) +local intent = self.EnemyIntents[self.EnemyIntentIndex] +local intentText = "" +if intent ~= nil then + if intent.kind == "Attack" then + intentText = "의도: 공격 " .. tostring(intent.value) + elseif intent.kind == "Defend" then + intentText = "의도: 방어 " .. tostring(intent.value) + end +end +self:SetText("/ui/DefaultGroup/CombatHud/EnemyIntent", intentText) +self:SetText("/ui/DefaultGroup/CombatHud/PlayerHp", "HP " .. tostring(self.PlayerHp) .. "/" .. tostring(self.PlayerMaxHp)) +self:SetText("/ui/DefaultGroup/CombatHud/PlayerBlock", "방어 " .. tostring(self.PlayerBlock))`), ]); for (const m of combat.ContentProto.Json.Methods) { m.ExecSpace = 6; diff --git a/ui/DefaultGroup.ui b/ui/DefaultGroup.ui index a2692ea..2311207 100644 --- a/ui/DefaultGroup.ui +++ b/ui/DefaultGroup.ui @@ -6563,6 +6563,1745 @@ ], "@version": 1 } + }, + { + "id": "0cb00000-0000-4000-8000-00000cb00000", + "path": "/ui/DefaultGroup/CombatHud", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "CombatHud", + "path": "/ui/DefaultGroup/CombatHud", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 4, + "pathConstraints": "///", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UIEmpty", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uiempty", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 960, + "y": 540 + }, + "OffsetMin": { + "x": -960, + "y": -540 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 1920, + "y": 1080 + }, + "UIMode": 1, + "UIScale": { + "x": 1, + "y": 1, + "z": 1 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0, + "y": 0 + }, + "Position": { + "x": 0, + "y": 0, + "z": 0 + }, + "QuaternionRotation": { + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "Scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0, + "y": 0 + }, + "LocalScale": { + "x": 1, + "y": 1 + }, + "OverrideSorting": false, + "PlayRate": 1, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0, + "g": 0, + "b": 0, + "a": 0 + }, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "FillAmount": 1, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 1 + }, + "OutlineWidth": 3, + "RaycastTarget": false, + "Type": 1, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb00001-0000-4000-8000-00000cb00001", + "path": "/ui/DefaultGroup/CombatHud/EnemyBg", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "EnemyBg", + "path": "/ui/DefaultGroup/CombatHud/EnemyBg", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 0, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 190, + "y": 385 + }, + "OffsetMin": { + "x": -190, + "y": 215 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 380, + "y": 170 + }, + "UIMode": 1, + "UIScale": { + "x": 1, + "y": 1, + "z": 1 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0, + "y": 300 + }, + "Position": { + "x": 0, + "y": 300, + "z": 0 + }, + "QuaternionRotation": { + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "Scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0, + "y": 0 + }, + "LocalScale": { + "x": 1, + "y": 1 + }, + "OverrideSorting": false, + "PlayRate": 1, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0.08, + "g": 0.09, + "b": 0.11, + "a": 0.78 + }, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "FillAmount": 1, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 1 + }, + "OutlineWidth": 3, + "RaycastTarget": false, + "Type": 1, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb00002-0000-4000-8000-00000cb00002", + "path": "/ui/DefaultGroup/CombatHud/EnemyName", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", + "jsonString": { + "name": "EnemyName", + "path": "/ui/DefaultGroup/CombatHud/EnemyName", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 1, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UIText", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uitext", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 180, + "y": 80 + }, + "OffsetMin": { + "x": -180, + "y": 36 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 360, + "y": 44 + }, + "UIMode": 1, + "UIScale": { + "x": 1, + "y": 1, + "z": 1 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0, + "y": 58 + }, + "Position": { + "x": 0, + "y": 58, + "z": 0 + }, + "QuaternionRotation": { + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "Scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0, + "y": 0 + }, + "LocalScale": { + "x": 1, + "y": 1 + }, + "OverrideSorting": false, + "PlayRate": 1, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0, + "g": 0, + "b": 0, + "a": 0 + }, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "FillAmount": 1, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 1 + }, + "OutlineWidth": 3, + "RaycastTarget": false, + "Type": 1, + "Enable": true + }, + { + "@type": "MOD.Core.TextComponent", + "Alignment": 4, + "Bold": true, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "Font": 0, + "FontColor": { + "r": 0.94, + "g": 0.74, + "b": 0.26, + "a": 1 + }, + "FontSize": 28, + "MaxSize": 28, + "MinSize": 8, + "OutlineColor": { + "r": 0.08, + "g": 0.08, + "b": 0.08, + "a": 1 + }, + "OutlineDistance": { + "x": 1, + "y": -1 + }, + "OutlineWidth": 1, + "Overflow": 0, + "OverrideSorting": false, + "Padding": { + "left": 0, + "right": 0, + "top": 0, + "bottom": 0 + }, + "SizeFit": false, + "Text": "슬라임", + "UseOutLine": true, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb00003-0000-4000-8000-00000cb00003", + "path": "/ui/DefaultGroup/CombatHud/EnemyHp", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", + "jsonString": { + "name": "EnemyHp", + "path": "/ui/DefaultGroup/CombatHud/EnemyHp", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 2, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UIText", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uitext", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 180, + "y": 36 + }, + "OffsetMin": { + "x": -180, + "y": -4 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 360, + "y": 40 + }, + "UIMode": 1, + "UIScale": { + "x": 1, + "y": 1, + "z": 1 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0, + "y": 16 + }, + "Position": { + "x": 0, + "y": 16, + "z": 0 + }, + "QuaternionRotation": { + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "Scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0, + "y": 0 + }, + "LocalScale": { + "x": 1, + "y": 1 + }, + "OverrideSorting": false, + "PlayRate": 1, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0, + "g": 0, + "b": 0, + "a": 0 + }, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "FillAmount": 1, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 1 + }, + "OutlineWidth": 3, + "RaycastTarget": false, + "Type": 1, + "Enable": true + }, + { + "@type": "MOD.Core.TextComponent", + "Alignment": 4, + "Bold": true, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "Font": 0, + "FontColor": { + "r": 1, + "g": 1, + "b": 1, + "a": 1 + }, + "FontSize": 24, + "MaxSize": 24, + "MinSize": 8, + "OutlineColor": { + "r": 0.08, + "g": 0.08, + "b": 0.08, + "a": 1 + }, + "OutlineDistance": { + "x": 1, + "y": -1 + }, + "OutlineWidth": 1, + "Overflow": 0, + "OverrideSorting": false, + "Padding": { + "left": 0, + "right": 0, + "top": 0, + "bottom": 0 + }, + "SizeFit": false, + "Text": "HP 45/45", + "UseOutLine": true, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb00004-0000-4000-8000-00000cb00004", + "path": "/ui/DefaultGroup/CombatHud/EnemyBlock", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", + "jsonString": { + "name": "EnemyBlock", + "path": "/ui/DefaultGroup/CombatHud/EnemyBlock", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 3, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UIText", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uitext", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 180, + "y": -2 + }, + "OffsetMin": { + "x": -180, + "y": -38 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 360, + "y": 36 + }, + "UIMode": 1, + "UIScale": { + "x": 1, + "y": 1, + "z": 1 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0, + "y": -20 + }, + "Position": { + "x": 0, + "y": -20, + "z": 0 + }, + "QuaternionRotation": { + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "Scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0, + "y": 0 + }, + "LocalScale": { + "x": 1, + "y": 1 + }, + "OverrideSorting": false, + "PlayRate": 1, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0, + "g": 0, + "b": 0, + "a": 0 + }, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "FillAmount": 1, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 1 + }, + "OutlineWidth": 3, + "RaycastTarget": false, + "Type": 1, + "Enable": true + }, + { + "@type": "MOD.Core.TextComponent", + "Alignment": 4, + "Bold": false, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "Font": 0, + "FontColor": { + "r": 0.6, + "g": 0.8, + "b": 1, + "a": 1 + }, + "FontSize": 20, + "MaxSize": 20, + "MinSize": 8, + "OutlineColor": { + "r": 0.08, + "g": 0.08, + "b": 0.08, + "a": 1 + }, + "OutlineDistance": { + "x": 1, + "y": -1 + }, + "OutlineWidth": 1, + "Overflow": 0, + "OverrideSorting": false, + "Padding": { + "left": 0, + "right": 0, + "top": 0, + "bottom": 0 + }, + "SizeFit": false, + "Text": "방어 0", + "UseOutLine": true, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb00005-0000-4000-8000-00000cb00005", + "path": "/ui/DefaultGroup/CombatHud/EnemyIntent", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", + "jsonString": { + "name": "EnemyIntent", + "path": "/ui/DefaultGroup/CombatHud/EnemyIntent", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 4, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UIText", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uitext", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 180, + "y": -37 + }, + "OffsetMin": { + "x": -180, + "y": -75 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 360, + "y": 38 + }, + "UIMode": 1, + "UIScale": { + "x": 1, + "y": 1, + "z": 1 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0, + "y": -56 + }, + "Position": { + "x": 0, + "y": -56, + "z": 0 + }, + "QuaternionRotation": { + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "Scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0, + "y": 0 + }, + "LocalScale": { + "x": 1, + "y": 1 + }, + "OverrideSorting": false, + "PlayRate": 1, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0, + "g": 0, + "b": 0, + "a": 0 + }, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "FillAmount": 1, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 1 + }, + "OutlineWidth": 3, + "RaycastTarget": false, + "Type": 1, + "Enable": true + }, + { + "@type": "MOD.Core.TextComponent", + "Alignment": 4, + "Bold": true, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "Font": 0, + "FontColor": { + "r": 1, + "g": 0.72, + "b": 0.5, + "a": 1 + }, + "FontSize": 22, + "MaxSize": 22, + "MinSize": 8, + "OutlineColor": { + "r": 0.08, + "g": 0.08, + "b": 0.08, + "a": 1 + }, + "OutlineDistance": { + "x": 1, + "y": -1 + }, + "OutlineWidth": 1, + "Overflow": 0, + "OverrideSorting": false, + "Padding": { + "left": 0, + "right": 0, + "top": 0, + "bottom": 0 + }, + "SizeFit": false, + "Text": "의도: 공격 10", + "UseOutLine": true, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb00006-0000-4000-8000-00000cb00006", + "path": "/ui/DefaultGroup/CombatHud/PlayerBg", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "PlayerBg", + "path": "/ui/DefaultGroup/CombatHud/PlayerBg", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 5, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": -610, + "y": -205 + }, + "OffsetMin": { + "x": -910, + "y": -315 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 300, + "y": 110 + }, + "UIMode": 1, + "UIScale": { + "x": 1, + "y": 1, + "z": 1 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": -760, + "y": -260 + }, + "Position": { + "x": -760, + "y": -260, + "z": 0 + }, + "QuaternionRotation": { + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "Scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0, + "y": 0 + }, + "LocalScale": { + "x": 1, + "y": 1 + }, + "OverrideSorting": false, + "PlayRate": 1, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0.08, + "g": 0.09, + "b": 0.11, + "a": 0.78 + }, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "FillAmount": 1, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 1 + }, + "OutlineWidth": 3, + "RaycastTarget": false, + "Type": 1, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb00007-0000-4000-8000-00000cb00007", + "path": "/ui/DefaultGroup/CombatHud/PlayerHp", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", + "jsonString": { + "name": "PlayerHp", + "path": "/ui/DefaultGroup/CombatHud/PlayerHp", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 6, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UIText", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uitext", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": -620, + "y": -216 + }, + "OffsetMin": { + "x": -900, + "y": -260 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 280, + "y": 44 + }, + "UIMode": 1, + "UIScale": { + "x": 1, + "y": 1, + "z": 1 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": -760, + "y": -238 + }, + "Position": { + "x": -760, + "y": -238, + "z": 0 + }, + "QuaternionRotation": { + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "Scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0, + "y": 0 + }, + "LocalScale": { + "x": 1, + "y": 1 + }, + "OverrideSorting": false, + "PlayRate": 1, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0, + "g": 0, + "b": 0, + "a": 0 + }, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "FillAmount": 1, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 1 + }, + "OutlineWidth": 3, + "RaycastTarget": false, + "Type": 1, + "Enable": true + }, + { + "@type": "MOD.Core.TextComponent", + "Alignment": 4, + "Bold": true, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "Font": 0, + "FontColor": { + "r": 1, + "g": 1, + "b": 1, + "a": 1 + }, + "FontSize": 26, + "MaxSize": 26, + "MinSize": 8, + "OutlineColor": { + "r": 0.08, + "g": 0.08, + "b": 0.08, + "a": 1 + }, + "OutlineDistance": { + "x": 1, + "y": -1 + }, + "OutlineWidth": 1, + "Overflow": 0, + "OverrideSorting": false, + "Padding": { + "left": 0, + "right": 0, + "top": 0, + "bottom": 0 + }, + "SizeFit": false, + "Text": "HP 80/80", + "UseOutLine": true, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb00008-0000-4000-8000-00000cb00008", + "path": "/ui/DefaultGroup/CombatHud/PlayerBlock", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", + "jsonString": { + "name": "PlayerBlock", + "path": "/ui/DefaultGroup/CombatHud/PlayerBlock", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 7, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UIText", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uitext", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": -620, + "y": -265 + }, + "OffsetMin": { + "x": -900, + "y": -303 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 280, + "y": 38 + }, + "UIMode": 1, + "UIScale": { + "x": 1, + "y": 1, + "z": 1 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": -760, + "y": -284 + }, + "Position": { + "x": -760, + "y": -284, + "z": 0 + }, + "QuaternionRotation": { + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "Scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0, + "y": 0 + }, + "LocalScale": { + "x": 1, + "y": 1 + }, + "OverrideSorting": false, + "PlayRate": 1, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0, + "g": 0, + "b": 0, + "a": 0 + }, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "FillAmount": 1, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 1 + }, + "OutlineWidth": 3, + "RaycastTarget": false, + "Type": 1, + "Enable": true + }, + { + "@type": "MOD.Core.TextComponent", + "Alignment": 4, + "Bold": false, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "Font": 0, + "FontColor": { + "r": 0.6, + "g": 0.8, + "b": 1, + "a": 1 + }, + "FontSize": 22, + "MaxSize": 22, + "MinSize": 8, + "OutlineColor": { + "r": 0.08, + "g": 0.08, + "b": 0.08, + "a": 1 + }, + "OutlineDistance": { + "x": 1, + "y": -1 + }, + "OutlineWidth": 1, + "Overflow": 0, + "OverrideSorting": false, + "Padding": { + "left": 0, + "right": 0, + "top": 0, + "bottom": 0 + }, + "SizeFit": false, + "Text": "방어 0", + "UseOutLine": true, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb00009-0000-4000-8000-00000cb00009", + "path": "/ui/DefaultGroup/CombatHud/Result", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", + "jsonString": { + "name": "Result", + "path": "/ui/DefaultGroup/CombatHud/Result", + "nameEditable": true, + "enable": false, + "visible": true, + "localize": true, + "displayOrder": 8, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UIText", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uitext", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 350, + "y": 190 + }, + "OffsetMin": { + "x": -350, + "y": 50 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 700, + "y": 140 + }, + "UIMode": 1, + "UIScale": { + "x": 1, + "y": 1, + "z": 1 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0, + "y": 120 + }, + "Position": { + "x": 0, + "y": 120, + "z": 0 + }, + "QuaternionRotation": { + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "Scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0, + "y": 0 + }, + "LocalScale": { + "x": 1, + "y": 1 + }, + "OverrideSorting": false, + "PlayRate": 1, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0, + "g": 0, + "b": 0, + "a": 0 + }, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "FillAmount": 1, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 1 + }, + "OutlineWidth": 3, + "RaycastTarget": false, + "Type": 1, + "Enable": true + }, + { + "@type": "MOD.Core.TextComponent", + "Alignment": 4, + "Bold": true, + "DropShadow": false, + "DropShadowAngle": 30, + "DropShadowColor": { + "r": 0, + "g": 0, + "b": 0, + "a": 0.72 + }, + "DropShadowDistance": 32, + "Font": 0, + "FontColor": { + "r": 0.94, + "g": 0.74, + "b": 0.26, + "a": 1 + }, + "FontSize": 64, + "MaxSize": 64, + "MinSize": 8, + "OutlineColor": { + "r": 0.08, + "g": 0.08, + "b": 0.08, + "a": 1 + }, + "OutlineDistance": { + "x": 1, + "y": -1 + }, + "OutlineWidth": 1, + "Overflow": 0, + "OverrideSorting": false, + "Padding": { + "left": 0, + "right": 0, + "top": 0, + "bottom": 0 + }, + "SizeFit": false, + "Text": "", + "UseOutLine": true, + "Enable": true + } + ], + "@version": 1 + } } ] } From 724cd5a04df00bd9bce7f4846b49b99455fb700b Mon Sep 17 00:00:00 2001 From: gahusb Date: Tue, 9 Jun 2026 00:04:33 +0900 Subject: [PATCH 8/8] =?UTF-8?q?docs(B):=20=EC=B9=B4=EB=93=9C=20=EC=A0=84?= =?UTF-8?q?=ED=88=AC=20=ED=86=B5=ED=95=A9=20=EC=84=A4=EA=B3=84=C2=B7?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EA=B3=84=ED=9A=8D=20=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../2026-06-08-card-combat-integration.md | 481 ++++++++++++++++++ ...26-06-08-card-combat-integration-design.md | 74 +++ 2 files changed, 555 insertions(+) create mode 100644 docs/superpowers/plans/2026-06-08-card-combat-integration.md create mode 100644 docs/superpowers/specs/2026-06-08-card-combat-integration-design.md diff --git a/docs/superpowers/plans/2026-06-08-card-combat-integration.md b/docs/superpowers/plans/2026-06-08-card-combat-integration.md new file mode 100644 index 0000000..597f101 --- /dev/null +++ b/docs/superpowers/plans/2026-06-08-card-combat-integration.md @@ -0,0 +1,481 @@ +# 카드 전투 통합 (TODO B) Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 카드 사용이 실제 적 HP·플레이어 Block·적 의도·승패에 반영되는 단일 전투 루프를 완성한다. + +**Architecture:** 모든 변경은 `tools/gen-slaydeck.mjs` 단일 생성기에서 만든다. 적/플레이어 전투 상태는 `SlayDeckController` codeblock 내부 속성으로 보유(필드 `Monster.codeblock`과 분리). UI는 `CombatHud` 그룹으로 DeckHud와 별도 생성. 수치(플레이어 80 / 적 45 / 의도 10·6·방8)는 임시 placeholder. + +**Tech Stack:** Node.js ESM 생성기(`gen-slaydeck.mjs`), MSW Lua codeblock, MSW UI JSON. 검증은 `node --check` + 재생성 + sha1 결정성 + 메이커 Play. + +--- + +## File Structure + +- Modify: `tools/gen-slaydeck.mjs` — 유일한 변경 대상. + - `upsertUi()`: `CombatHud` 그룹(적/플레이어 패널·결과 텍스트) 생성 추가, 정리 필터 확장. + - `writeCodeblocks()`: `SlayDeckController` 속성·메서드 추가/수정. +- 생성물(자동, 직접 편집 금지): `ui/DefaultGroup.ui`, `RootDesk/MyDesk/SlayDeckController.codeblock`, `Global/common.gamelogic`. + +검증 한계: MSW codeblock Lua는 단위 테스트 러너가 없다. 자동 검증은 생성기 문법·재생성·결정성·JSON 유효성까지, 실제 동작은 메이커 Play(사용자)로 확인. + +--- + +### Task 1: 카드 데이터 수치화 (Cards 테이블 + UI 카드 배열) + +**Files:** +- Modify: `tools/gen-slaydeck.mjs` (`upsertUi` 내 `cards` 배열, `writeCodeblocks` 내 `StartCombat`의 `self.Cards`) + +- [ ] **Step 1: `upsertUi`의 카드 배열은 표시용 그대로 두되, codeblock `Cards`에 수치 필드 추가** + +`writeCodeblocks()`의 `StartCombat` 메서드 코드에서 `self.Cards` 정의를 아래로 교체: + +```lua +self.Cards = { + Strike = { name = "타격", cost = 1, desc = "피해 6", kind = "Attack", damage = 6 }, + Defend = { name = "방어", cost = 1, desc = "방어도 5", kind = "Skill", block = 5 }, + Bash = { name = "강타", cost = 2, desc = "피해 10", kind = "Attack", damage = 10 }, +} +``` + +- [ ] **Step 2: 문법 검사** + +Run: `node --check tools/gen-slaydeck.mjs` +Expected: 오류 없음 (출력 없음, exit 0) + +- [ ] **Step 3: 커밋** + +```bash +git add tools/gen-slaydeck.mjs +git commit -m "gen-slaydeck(B): 카드 데이터에 damage/block 수치 필드 추가" +``` + +--- + +### Task 2: 전투 상태 속성 + StartCombat 초기화 + +**Files:** +- Modify: `tools/gen-slaydeck.mjs` (`writeCodeblocks` 속성 배열, `StartCombat` 메서드) + +- [ ] **Step 1: codeblock 속성 추가** + +`codeblock('SlayDeckController', ...)`의 properties 배열 끝에 추가: + +```js + prop('number', 'PlayerHp', '0'), + prop('number', 'PlayerMaxHp', '80'), + prop('number', 'PlayerBlock', '0'), + prop('number', 'EnemyHp', '0'), + prop('number', 'EnemyMaxHp', '45'), + prop('number', 'EnemyBlock', '0'), + prop('number', 'EnemyIntentIndex', '1'), + prop('boolean', 'CombatOver', 'false'), + prop('any', 'EnemyIntents'), + prop('any', 'EnemyName'), +``` + +- [ ] **Step 2: `StartCombat`에 전투 상태 초기화 추가** + +`StartCombat` 코드의 맨 위(`self.MaxEnergy = 3` 직후)에 삽입: + +```lua +self.PlayerMaxHp = 80 +self.PlayerHp = self.PlayerMaxHp +self.PlayerBlock = 0 +self.EnemyName = "슬라임" +self.EnemyMaxHp = 45 +self.EnemyHp = self.EnemyMaxHp +self.EnemyBlock = 0 +self.EnemyIntents = { + { kind = "Attack", value = 10 }, + { kind = "Attack", value = 6 }, + { kind = "Defend", value = 8 }, +} +self.EnemyIntentIndex = 1 +self.CombatOver = false +``` + +그리고 `StartCombat` 끝(`self:StartPlayerTurn()` 직전)에 `self:RenderCombat()` 추가. + +- [ ] **Step 3: 문법 검사** + +Run: `node --check tools/gen-slaydeck.mjs` +Expected: 오류 없음 + +- [ ] **Step 4: 커밋** + +```bash +git add tools/gen-slaydeck.mjs +git commit -m "gen-slaydeck(B): 플레이어/적 전투 상태 속성·초기화 추가" +``` + +--- + +### Task 3: 전투 헬퍼 메서드 (데미지/적턴/승패/렌더) + +**Files:** +- Modify: `tools/gen-slaydeck.mjs` (`writeCodeblocks` methods 배열에 신규 메서드 추가) + +`SetText`는 엔티티 nil 가드가 있어, 참조하는 UI가 Task 5에서 생성되기 전이어도 안전(no-op). + +- [ ] **Step 1: 신규 메서드들을 methods 배열에 추가 (`Toast` 메서드 정의 뒤)** + +```js + method('DealDamageToEnemy', `local dmg = amount +if self.EnemyBlock > 0 then + local absorbed = math.min(self.EnemyBlock, dmg) + self.EnemyBlock = self.EnemyBlock - absorbed + dmg = dmg - absorbed +end +self.EnemyHp = self.EnemyHp - dmg +if self.EnemyHp < 0 then + self.EnemyHp = 0 +end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'amount' }]), + method('DealDamageToPlayer', `local dmg = amount +if self.PlayerBlock > 0 then + local absorbed = math.min(self.PlayerBlock, dmg) + self.PlayerBlock = self.PlayerBlock - absorbed + dmg = dmg - absorbed +end +self.PlayerHp = self.PlayerHp - dmg +if self.PlayerHp < 0 then + self.PlayerHp = 0 +end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'amount' }]), + method('EnemyTurn', `self.EnemyBlock = 0 +local intent = self.EnemyIntents[self.EnemyIntentIndex] +if intent ~= nil then + if intent.kind == "Attack" then + self:DealDamageToPlayer(intent.value) + elseif intent.kind == "Defend" then + self.EnemyBlock = self.EnemyBlock + intent.value + end +end +self.EnemyIntentIndex = self.EnemyIntentIndex + 1 +if self.EnemyIntentIndex > #self.EnemyIntents then + self.EnemyIntentIndex = 1 +end +self:RenderCombat()`), + method('CheckCombatEnd', `if self.EnemyHp <= 0 then + self.CombatOver = true + self:ShowResult("승리!") + -- TODO(E): 전투 보상 훅 — 카드 보상/골드/유물 선택 진입점 +elseif self.PlayerHp <= 0 then + self.CombatOver = true + self:ShowResult("패배...") +end`), + method('ShowResult', `self:SetText("/ui/DefaultGroup/CombatHud/Result", text) +local entity = _EntityService:GetEntityByPath("/ui/DefaultGroup/CombatHud/Result") +if entity ~= nil then + entity.Enable = true +end`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'text' }]), + method('RenderCombat', `self:SetText("/ui/DefaultGroup/CombatHud/EnemyName", self.EnemyName) +self:SetText("/ui/DefaultGroup/CombatHud/EnemyHp", "HP " .. tostring(self.EnemyHp) .. "/" .. tostring(self.EnemyMaxHp)) +self:SetText("/ui/DefaultGroup/CombatHud/EnemyBlock", "방어 " .. tostring(self.EnemyBlock)) +local intent = self.EnemyIntents[self.EnemyIntentIndex] +local intentText = "" +if intent ~= nil then + if intent.kind == "Attack" then + intentText = "의도: 공격 " .. tostring(intent.value) + elseif intent.kind == "Defend" then + intentText = "의도: 방어 " .. tostring(intent.value) + end +end +self:SetText("/ui/DefaultGroup/CombatHud/EnemyIntent", intentText) +self:SetText("/ui/DefaultGroup/CombatHud/PlayerHp", "HP " .. tostring(self.PlayerHp) .. "/" .. tostring(self.PlayerMaxHp)) +self:SetText("/ui/DefaultGroup/CombatHud/PlayerBlock", "방어 " .. tostring(self.PlayerBlock))`), +``` + +- [ ] **Step 2: 문법 검사** + +Run: `node --check tools/gen-slaydeck.mjs` +Expected: 오류 없음 + +- [ ] **Step 3: 커밋** + +```bash +git add tools/gen-slaydeck.mjs +git commit -m "gen-slaydeck(B): 데미지/적턴/승패/전투렌더 헬퍼 메서드 추가" +``` + +--- + +### Task 4: 턴 흐름 배선 (PlayCard 효과·EndPlayerTurn·StartPlayerTurn) + +**Files:** +- Modify: `tools/gen-slaydeck.mjs` (`StartPlayerTurn`, `EndPlayerTurn`, `PlayCard` 메서드 코드) + +- [ ] **Step 1: `StartPlayerTurn` 교체** + +```lua +self.Turn = self.Turn + 1 +self.Energy = self.MaxEnergy +self.PlayerBlock = 0 +self:DrawCards(5) +self:RenderHand(true) +self:RenderCombat() +``` + +- [ ] **Step 2: `EndPlayerTurn` 교체** + +```lua +if self.CombatOver == true then + return +end +for i = 1, #self.Hand do + table.insert(self.DiscardPile, self.Hand[i]) +end +self.Hand = {} +self:RenderHand(false) +self:RenderPiles() +self:EnemyTurn() +self:CheckCombatEnd() +if self.CombatOver == true then + return +end +_TimerService:SetTimerOnce(function() self:StartPlayerTurn() end, 0.45) +``` + +- [ ] **Step 3: `PlayCard` 효과 분기 교체** + +`PlayCard` 코드를 아래로 교체(에너지 차감 후 Toast 대신 효과 적용): + +```lua +if self.CombatOver == true then + return +end +if self.Hand == nil then + return +end +local cardId = self.Hand[slot] +if cardId == nil then + return +end +local c = self.Cards[cardId] +if c == nil then + return +end +if self.Energy < c.cost then + self:Toast("에너지가 부족합니다") + return +end +self.Energy = self.Energy - c.cost +if c.kind == "Attack" then + if c.damage ~= nil then + self:DealDamageToEnemy(c.damage) + end +elseif c.kind == "Skill" then + if c.block ~= nil then + self.PlayerBlock = self.PlayerBlock + c.block + end +end +table.remove(self.Hand, slot) +table.insert(self.DiscardPile, cardId) +self:RenderHand(false) +self:RenderPiles() +self:RenderCombat() +self:CheckCombatEnd() +``` + +- [ ] **Step 4: 문법 검사** + +Run: `node --check tools/gen-slaydeck.mjs` +Expected: 오류 없음 + +- [ ] **Step 5: 커밋** + +```bash +git add tools/gen-slaydeck.mjs +git commit -m "gen-slaydeck(B): PlayCard 효과 분기·적턴·승패 턴흐름 배선" +``` + +--- + +### Task 5: CombatHud UI 엔티티 생성 + +**Files:** +- Modify: `tools/gen-slaydeck.mjs` (`upsertUi`: 정리 필터 확장 + CombatHud 그룹 생성) + +- [ ] **Step 1: 정리 필터 확장** + +`upsertUi()` 시작부의 필터를 CombatHud도 제거하도록 교체: + +```js + ui.ContentProto.Entities = E.filter((e) => !e.path.startsWith('/ui/DefaultGroup/DeckHud') && !e.path.startsWith('/ui/DefaultGroup/CombatHud')); +``` + +- [ ] **Step 2: DeckHud `hud` push 직후, CombatHud 엔티티 생성 블록 추가** + +`ui.ContentProto.Entities.push(...hud);` 직전에 아래 블록 삽입(헬퍼 `entity`/`transform`/`sprite`/`text`/`guid` 재사용): + +```js + const PANEL_BG = { r: 0.08, g: 0.09, b: 0.11, a: 0.78 }; + const combat = []; + combat.push(entity({ + id: guid('cmb', 0), + path: '/ui/DefaultGroup/CombatHud', + modelId: 'uiempty', + entryId: 'UIEmpty', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent', + displayOrder: 4, + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 1920, y: 1080 }, pos: { x: 0, y: 0 }, align: ALIGN_CENTER }), + sprite({ color: TRANSPARENT }), + ], + })); + // 적 패널 배경 + combat.push(entity({ + id: guid('cmb', 1), + path: '/ui/DefaultGroup/CombatHud/EnemyBg', + modelId: 'uisprite', + entryId: 'UISprite', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent', + displayOrder: 0, + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 380, y: 170 }, pos: { x: 0, y: 300 }, align: ALIGN_CENTER }), + sprite({ color: PANEL_BG, type: 1 }), + ], + })); + const enemyTexts = [ + ['EnemyName', { x: 0, y: 58 }, { x: 360, y: 44 }, '슬라임', 28, true, GOLD, 1], + ['EnemyHp', { x: 0, y: 16 }, { x: 360, y: 40 }, 'HP 45/45', 24, true, { r: 1, g: 1, b: 1, a: 1 }, 2], + ['EnemyBlock', { x: 0, y: -20 }, { x: 360, y: 36 }, '방어 0', 20, false, { r: 0.6, g: 0.8, b: 1, a: 1 }, 3], + ['EnemyIntent', { x: 0, y: -56 }, { x: 360, y: 38 }, '의도: 공격 10', 22, true, { r: 1, g: 0.72, b: 0.5, a: 1 }, 4], + ]; + let cmbN = 2; + for (const [suffix, pos, size, value, fontSize, bold, color] of enemyTexts) { + combat.push(entity({ + id: guid('cmb', cmbN++), + path: `/ui/DefaultGroup/CombatHud/${suffix}`, + modelId: 'uitext', + entryId: 'UIText', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent', + displayOrder: enemyTexts.findIndex(([s]) => s === suffix) + 1, + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size, pos }), + sprite({ color: TRANSPARENT }), + text({ value, fontSize, bold, color }), + ], + })); + } + // 플레이어 패널 배경 + 텍스트 + combat.push(entity({ + id: guid('cmb', cmbN++), + path: '/ui/DefaultGroup/CombatHud/PlayerBg', + modelId: 'uisprite', + entryId: 'UISprite', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent', + displayOrder: 5, + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 300, y: 110 }, pos: { x: -760, y: -260 }, align: ALIGN_CENTER }), + sprite({ color: PANEL_BG, type: 1 }), + ], + })); + const playerTexts = [ + ['PlayerHp', { x: -760, y: -238 }, { x: 280, y: 44 }, 'HP 80/80', 26, true, { r: 1, g: 1, b: 1, a: 1 }], + ['PlayerBlock', { x: -760, y: -284 }, { x: 280, y: 38 }, '방어 0', 22, false, { r: 0.6, g: 0.8, b: 1, a: 1 }], + ]; + for (const [suffix, pos, size, value, fontSize, bold, color] of playerTexts) { + combat.push(entity({ + id: guid('cmb', cmbN++), + path: `/ui/DefaultGroup/CombatHud/${suffix}`, + modelId: 'uitext', + entryId: 'UIText', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent', + displayOrder: 6 + playerTexts.findIndex(([s]) => s === suffix), + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size, pos }), + sprite({ color: TRANSPARENT }), + text({ value, fontSize, bold, color }), + ], + })); + } + // 결과 텍스트 (기본 숨김) + const result = entity({ + id: guid('cmb', cmbN++), + path: '/ui/DefaultGroup/CombatHud/Result', + modelId: 'uitext', + entryId: 'UIText', + componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent', + displayOrder: 8, + components: [ + transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 700, y: 140 }, pos: { x: 0, y: 120 } }), + sprite({ color: TRANSPARENT }), + text({ value: '', fontSize: 64, bold: true, color: GOLD, alignment: 4 }), + ], + }); + result.jsonString.enable = false; + combat.push(result); + ui.ContentProto.Entities.push(...combat); +``` + +`guid` 프리픽스 `'cmb'`를 위해 `guid()`의 ns 매핑에 분기 추가: + +```js + const ns = prefix === 'hud' ? 0xd0 : prefix === 'dck' ? 0xca : prefix === 'cmb' ? 0xcb : 0xfe; +``` + +- [ ] **Step 3: 문법 검사** + +Run: `node --check tools/gen-slaydeck.mjs` +Expected: 오류 없음 + +- [ ] **Step 4: 커밋** + +```bash +git add tools/gen-slaydeck.mjs +git commit -m "gen-slaydeck(B): CombatHud(적/플레이어 패널·결과) UI 엔티티 생성" +``` + +--- + +### Task 6: 재생성 + 검증 + +**Files:** 생성물 3종 (생성기 실행 결과) + +- [ ] **Step 1: 생성기 실행** + +Run: `node tools/gen-slaydeck.mjs` +Expected: `Slay deck UI and combat codeblocks generated.` + +- [ ] **Step 2: 생성물 JSON 유효성 확인** + +Run: `node -e "JSON.parse(require('fs').readFileSync('ui/DefaultGroup.ui','utf8')); JSON.parse(require('fs').readFileSync('RootDesk/MyDesk/SlayDeckController.codeblock','utf8')); console.log('JSON OK')"` +Expected: `JSON OK` + +- [ ] **Step 3: 결정성 확인 (2회 실행 동일)** + +Run: `node tools/gen-slaydeck.mjs >/dev/null && sha1sum ui/DefaultGroup.ui RootDesk/MyDesk/SlayDeckController.codeblock > /tmp/a.sha && node tools/gen-slaydeck.mjs >/dev/null && sha1sum ui/DefaultGroup.ui RootDesk/MyDesk/SlayDeckController.codeblock > /tmp/b.sha && diff /tmp/a.sha /tmp/b.sha && echo DETERMINISTIC` +Expected: `DETERMINISTIC` + +- [ ] **Step 4: CombatHud 엔티티·전투 메서드 생성 확인** + +Run: `grep -c "CombatHud" ui/DefaultGroup.ui; grep -c "DealDamageToEnemy\|EnemyTurn\|RenderCombat" RootDesk/MyDesk/SlayDeckController.codeblock` +Expected: 두 값 모두 > 0 + +- [ ] **Step 5: 의도한 파일만 변경됐는지 확인** + +Run: `git status --short` +Expected: `ui/DefaultGroup.ui`, `RootDesk/MyDesk/SlayDeckController.codeblock` (그리고 필요 시 `Global/common.gamelogic`)만 변경. + +- [ ] **Step 6: 생성물 커밋** + +```bash +git add ui/DefaultGroup.ui RootDesk/MyDesk/SlayDeckController.codeblock Global/common.gamelogic +git commit -m "재생성(B): 카드 전투 통합 — 적/플레이어 전투 상태·CombatHud 반영" +``` + +- [ ] **Step 7: 메이커 Play 수동 검증 (사용자)** + +메이커에서 로컬 워크스페이스 reload 후 Play: +- 타격 카드 클릭 → 적 HP 감소(적 Block 있으면 먼저 차감). +- 방어 카드 클릭 → 플레이어 `방어` 수치 증가. +- 턴 종료 → 적이 표시된 의도대로 공격(플레이어 Block이 피해 흡수) 또는 방어, 다음 의도 갱신. +- 적 HP 0 → "승리!" 표시·입력 잠금 / 플레이어 HP 0 → "패배..." 표시·입력 잠금. + +--- + +## Self-Review + +- **Spec coverage:** 전투 상태(Task 2), 카드 수치화(Task 1), 효과 분기(Task 4), 적 의도·적 턴(Task 3·4), 승패(Task 3·4), UI 노출(Task 5) — 스펙 5개 절 모두 태스크로 매핑됨. 검증은 Task 6. +- **Placeholder scan:** 모든 코드 단계에 실제 코드 포함. "TODO(E)"는 의도된 미래 훅 주석(스펙 명시)으로 placeholder 아님. +- **Type consistency:** UI 경로(`/ui/DefaultGroup/CombatHud/EnemyHp` 등)가 codeblock `RenderCombat`/`ShowResult`와 Task 5 생성 경로에서 동일. 메서드명(`DealDamageToEnemy`/`DealDamageToPlayer`/`EnemyTurn`/`CheckCombatEnd`/`ShowResult`/`RenderCombat`)이 호출부(Task 4)와 정의부(Task 3)에서 일치. 카드 필드(`damage`/`block`/`kind`)가 Cards 정의(Task 1)와 PlayCard 사용(Task 4)에서 일치. diff --git a/docs/superpowers/specs/2026-06-08-card-combat-integration-design.md b/docs/superpowers/specs/2026-06-08-card-combat-integration-design.md new file mode 100644 index 0000000..6be3ff9 --- /dev/null +++ b/docs/superpowers/specs/2026-06-08-card-combat-integration-design.md @@ -0,0 +1,74 @@ +# 카드 전투 통합 (TODO 항목 B) — 설계 + +> 작성: 2026-06-08 / 상태: 승인됨 / 근거: TODO.md 항목 B + 코드 직접 분석. +> 선행 작업: 항목 C(미커밋 노이즈 정리) 완료 — 작업 트리 클린. + +## 문제 + +현재 `SlayDeckController.codeblock`의 `PlayCard`는 에너지만 차감하고 `Toast(log)`만 띄운다. +실제 전투 상태(적 HP/방어, 플레이어 HP/Block, 적 의도, 승패)가 없어 STS식 덱빌딩 루프가 +닫히지 않는다. 필드 액션 몬스터(`Monster.codeblock` — HP·피격·리스폰)는 카드 시스템과 분리돼 있다. + +## 범위 + +**포함**: 단일 적 카드 전투 루프(데미지·방어·적 의도·턴 진행·승패), 카드 수치화, DeckHud UI 노출. +**제외(금지)**: 로그라이크 메타(E), 신규 카드 대량 추가, 전체 데이터 외부화(D — 본 작업은 인라인 수치화까지). + +## 단일 소스 원칙 + +모든 변경은 `tools/gen-slaydeck.mjs`에서 생성한다. `SlayDeckController.codeblock` / +`ui/DefaultGroup.ui` / `Global/common.gamelogic`을 직접 손으로 편집하지 않는다. +변경 = 생성기 수정 → `node tools/gen-slaydeck.mjs` 재실행. + +## 수치는 임시 placeholder + +> 플레이어 수치는 향후 **캐릭터 특성별**, 몬스터 수치는 **몬스터별**로 다르게 설정 예정. +> 본 작업의 값(플레이어 80 / 적 45 / 의도 10·6·방8)은 루프 검증용 임시값이며, +> D(데이터 외부화) 단계에서 캐릭터/몬스터별 데이터로 분리한다. + +## 설계 + +### 1) 전투 상태 (codeblock 속성 추가) +- 플레이어: `PlayerHp`, `PlayerMaxHp`(임시 80), `PlayerBlock` +- 적: `EnemyHp`, `EnemyMaxHp`(임시 45), `EnemyBlock`, `EnemyIntentIndex` +- `CombatOver`(승패 후 입력 잠금) +- 적은 codeblock 내부 상태로 보유(필드 `Monster.codeblock`과 분리). + +### 2) 카드 데이터 수치화 (desc 파싱 폐기) +| id | 이름 | cost | kind | 효과 | +|----|------|------|------|------| +| Strike | 타격 | 1 | Attack | damage 6 | +| Defend | 방어 | 1 | Skill | block 5 | +| Bash | 강타 | 2 | Attack | damage 10 | + +`desc`는 표시용으로만 유지. 효과는 `damage`/`block` 숫자 필드로 처리. +시작 덱: Strike×5, Defend×4, Bash×1 (10장). + +### 3) 적 의도 — 결정적 사이클 (사용자 선택: A안) +- 의도 사이클(3스텝 회전): `[공격 10] → [공격 6] → [방어 8]` +- 매 플레이어 턴 시작 시 **다음 의도를 미리 표시**. +- 결정적이라 F(밸런스 시뮬레이터)에서 동일 규칙 재현 가능. + +### 4) 전투 규칙 (STS 관례) +- 데미지는 **방어도 먼저 차감** 후 잔여만 HP에 적용. +- 플레이어 Block은 **플레이어 턴 시작 시 0 리셋**, 적 Block은 **적 턴 시작 시 리셋**. +- `PlayCard(slot)`: `kind=="Attack"` → 적 HP 감소(적 Block 우선 차감); + `kind=="Skill"` → 플레이어 Block 증가. +- `EndPlayerTurn` → 적 턴: 적 Block 리셋 → 현재 의도 실행(공격이면 플레이어에 피해, + 방어면 적 Block↑) → 의도 인덱스 전진 → 패배 체크 → 다음 플레이어 턴(Block/에너지 리셋·드로우) + → 다음 의도 표시. +- 승패: 적 HP≤0 → 승리 / 플레이어 HP≤0 → 패배. 승패 시 `CombatOver=true`로 입력 잠금 + + 결과 텍스트 표시 + **보상 훅 자리(E용 주석)**. + +### 5) UI — DeckHud 엔티티 추가 (생성기 생성) +- 상단 적 패널: 적 이름 · `HP 45/45` · `방어 0` · `의도: 공격 10` +- 좌측 플레이어 패널: `HP 80/80` · `방어 0` +- 승패 결과 텍스트(중앙, 평소 숨김 → 승패 시 표시). + +## 검증 (메이커 Play) +- 타격 카드 → 적 HP 감소(적 Block 있으면 먼저 차감). +- 방어 카드 → 플레이어 Block 증가. +- 턴 종료 → 적이 표시된 의도대로 공격(플레이어 Block이 피해 흡수) 또는 방어. +- 적 HP 0 → 승리 / 플레이어 HP 0 → 패배, 입력 잠금. +- `node tools/gen-slaydeck.mjs` 2회 실행 결과 동일(결정적). +- `git status` — 의도한 생성물만 변경.