Initial commit: SlayMaple 로컬 워크스페이스 + Gitea 연동

- MSW 로컬 워크스페이스 데이터(Global/RootDesk/map/ui) 형상관리 시작
- Slay the Spire 풍 덱빌더 전투 프레임워크 초안 포함
- README.md: 협업(로컬 워크스페이스+git) 방식·구조·프레임워크 현황 문서화
- .gitignore: Authorization 토큰 포함된 .mcp.json/.codex 제외

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-06 00:59:07 +09:00
commit 0b576aa3b5
27 changed files with 13024 additions and 0 deletions

20
.gitignore vendored Normal file
View File

@@ -0,0 +1,20 @@
# === 민감정보 / 도구 설정 (커밋 금지) ===
# MCP 서버 설정 — Authorization Bearer 토큰 포함
.mcp.json
# Codex CLI 로컬 설정 — Authorization Bearer 토큰 포함
.codex/
# Claude Code 로컬 설정
.claude/
# === OS / 에디터 잡파일 ===
Thumbs.db
desktop.ini
.DS_Store
*~
*.tmp
*.bak
# === MSW Maker 캐시 / 임시 ===
# (로컬 워크스페이스 데이터 본체 — Global/ RootDesk/ map/ ui/ — 는 형상관리 대상이므로 제외하지 않음)
McpScreenshots/
*.log

153
Global/ChaseMonster.model Normal file
View File

@@ -0,0 +1,153 @@
{
"Id": "",
"GameId": "",
"EntryKey": "model://chasemonster",
"ContentType": "x-mod/model",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.3.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"Version": 1,
"Name": "ChaseMonster",
"BaseModelId": null,
"Id": "chasemonster",
"Components": [
"MOD.Core.TransformComponent",
"MOD.Core.StateAnimationComponent",
"MOD.Core.SpriteRendererComponent",
"MOD.Core.RigidbodyComponent",
"MOD.Core.MovementComponent",
"MOD.Core.AIChaseComponent",
"MOD.Core.StateComponent",
"MOD.Core.HitComponent",
"MOD.Core.DamageSkinSpawnerComponent",
"script.Monster",
"script.MonsterAttack",
"MOD.Core.KinematicbodyComponent",
"MOD.Core.SideviewbodyComponent"
],
"Properties": [
{
"Type": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "speed",
"DisplayName": "speed",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.MovementComponent, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "InputSpeed"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "jumpForce",
"DisplayName": "jumpForce",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.MovementComponent, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "JumpForce"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODSyncDictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "actionSheet",
"DisplayName": "actionSheet",
"ShowInInspector": false,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.StateAnimationComponent, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "ActionSheet"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "renderguid",
"DisplayName": "renderguid",
"ShowInInspector": false,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.SpriteRendererComponent, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "SpriteRUID"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.RenderSettingType, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "renderSetting",
"DisplayName": "renderSetting",
"ShowInInspector": false,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.SpriteRendererComponent, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "RenderSetting"
}
}
],
"Values": [
{
"TargetType": "MOD.Core.SpriteRendererComponent",
"Name": "OrderInLayer",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 2
},
{
"TargetType": null,
"Name": "renderguid",
"ValueType": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": "null"
},
{
"TargetType": "MOD.Core.HitComponent",
"Name": "CollisionGroup",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.Physics.CollisionGroup, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.Physics.CollisionGroup, MOD.Core",
"Id": "8992acd1e8cd45838db6f10a7b41df09"
}
}
],
"EventLinks": [],
"Children": []
}
}
}

View File

@@ -0,0 +1,82 @@
{
"Id": "",
"GameId": "",
"EntryKey": "collisiongroupset://unique",
"ContentType": "x-mod/collisiongroupset",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "",
"StudioVersion": "",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"Groups": [
{
"Id": "73017cc2ca884dfcb9fb98db7cc44848",
"Name": "Default"
},
{
"Id": "MOD@TriggerBox",
"Name": "TriggerBox"
},
{
"Id": "MOD@HitBox",
"Name": "HitBox"
},
{
"Id": "MOD@Interaction",
"Name": "Interaction"
},
{
"Id": "MOD@Portal",
"Name": "Portal"
},
{
"Id": "MOD@Climbable",
"Name": "Climbable"
},
{
"Id": "0639c22a20d34ec88be45b43fee3e333",
"Name": "Player"
},
{
"Id": "8992acd1e8cd45838db6f10a7b41df09",
"Name": "Monster"
}
],
"Matrix": {
"73017cc2ca884dfcb9fb98db7cc44848": [
"73017cc2ca884dfcb9fb98db7cc44848",
"0639c22a20d34ec88be45b43fee3e333",
"8992acd1e8cd45838db6f10a7b41df09"
],
"MOD@TriggerBox": [
"MOD@TriggerBox"
],
"MOD@HitBox": [
"MOD@HitBox"
],
"MOD@Interaction": [
"MOD@Interaction"
],
"MOD@Portal": [
"MOD@Portal"
],
"MOD@Climbable": [
"MOD@Climbable"
],
"0639c22a20d34ec88be45b43fee3e333": [
"73017cc2ca884dfcb9fb98db7cc44848",
"8992acd1e8cd45838db6f10a7b41df09"
],
"8992acd1e8cd45838db6f10a7b41df09": [
"73017cc2ca884dfcb9fb98db7cc44848",
"0639c22a20d34ec88be45b43fee3e333"
]
}
}
}
}

View File

@@ -0,0 +1,19 @@
{
"Id": "",
"GameId": "",
"EntryKey": "avataraction://unique",
"ContentType": "x-mod/avataraction",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.3.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"Data": {}
}
}
}

View File

@@ -0,0 +1,19 @@
{
"Id": "",
"GameId": "",
"EntryKey": "bodyaction://unique",
"ContentType": "x-mod/bodyaction",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.3.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"Data": {}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"Id": "",
"GameId": "",
"EntryKey": "config://customfont",
"ContentType": "x-mod/config",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.3.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"Fonts": [],
"Groups": [],
"config_id": "config://customfont"
}
}
}

305
Global/DefaultPlayer.model Normal file
View File

@@ -0,0 +1,305 @@
{
"Id": "",
"GameId": "",
"EntryKey": "model://defaultplayer",
"ContentType": "x-mod/model",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"Version": 1,
"Name": "DefaultPlayer",
"BaseModelId": "player",
"Id": "defaultplayer",
"Components": [
"script.PlayerHit",
"script.PlayerAttack"
],
"Properties": [],
"Values": [
{
"TargetType": null,
"Name": "speed",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 1.0
},
{
"TargetType": null,
"Name": "jumpForce",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 1.0
},
{
"TargetType": null,
"Name": "walkAcceleration",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 1.0
},
{
"TargetType": null,
"Name": "gravity",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 1.0
},
{
"TargetType": null,
"Name": "cameraDeadZone",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.052,
"y": 0.08
}
},
{
"TargetType": null,
"Name": "cameraSoftZone",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.268,
"y": 0.7
}
},
{
"TargetType": null,
"Name": "cameraDamping",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 2.5,
"y": 3.9
}
},
{
"TargetType": null,
"Name": "cameraScreen",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.5,
"y": 0.655
}
},
{
"TargetType": null,
"Name": "cameraDutch",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 0.0
},
{
"TargetType": null,
"Name": "cameraOffset",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0,
"y": 0.0
}
},
{
"TargetType": null,
"Name": "nameTag",
"ValueType": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": ""
},
{
"TargetType": null,
"Name": "damageSkinId",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODDataRef, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODDataRef, MOD.Core",
"DataId": "3271c3e79bf04ecba9a107d55495970d"
}
},
{
"TargetType": null,
"Name": "damageDelayPerAttack",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 0.05
},
{
"TargetType": null,
"Name": "triggerBodyBoxSize",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.66,
"y": 0.7
}
},
{
"TargetType": null,
"Name": "triggerBodyBoxOffset",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0,
"y": 0.35
}
},
{
"TargetType": null,
"Name": "triggerBodyColliderOffset",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0,
"y": 0.35
}
},
{
"TargetType": null,
"Name": "maxHp",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 1000
},
{
"TargetType": "MOD.Core.CameraComponent",
"Name": "ZoomRatioMax",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 500.0
},
{
"TargetType": "script.PlayerHit",
"Name": "CollisionGroup",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.Physics.CollisionGroup, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.Physics.CollisionGroup, MOD.Core",
"Id": "0639c22a20d34ec88be45b43fee3e333"
}
},
{
"TargetType": "script.PlayerHit",
"Name": "BoxSize",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.45,
"y": 0.7
}
},
{
"TargetType": "script.PlayerHit",
"Name": "ColliderOffset",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0,
"y": 0.35
}
},
{
"TargetType": "MOD.Core.MovementComponent",
"Name": "JumpForce",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 1.0
},
{
"TargetType": "MOD.Core.MovementComponent",
"Name": "InputSpeed",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 1.0
},
{
"TargetType": "MOD.Core.PlayerComponent",
"Name": "MaxHp",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 1000
},
{
"TargetType": "MOD.Core.DamageSkinSettingComponent",
"Name": "DamageSkinId",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODDataRef, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODDataRef, MOD.Core",
"DataId": "3271c3e79bf04ecba9a107d55495970d"
}
}
],
"EventLinks": [],
"Children": []
}
}
}

144
Global/MoveMonster.model Normal file
View File

@@ -0,0 +1,144 @@
{
"Id": "",
"GameId": "",
"EntryKey": "model://movemonster",
"ContentType": "x-mod/model",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.3.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"Version": 1,
"Name": "MoveMonster",
"BaseModelId": null,
"Id": "movemonster",
"Components": [
"MOD.Core.TransformComponent",
"MOD.Core.StateAnimationComponent",
"MOD.Core.SpriteRendererComponent",
"MOD.Core.RigidbodyComponent",
"MOD.Core.MovementComponent",
"MOD.Core.AIWanderComponent",
"MOD.Core.StateComponent",
"MOD.Core.HitComponent",
"MOD.Core.DamageSkinSpawnerComponent",
"script.Monster",
"script.MonsterAttack",
"MOD.Core.KinematicbodyComponent",
"MOD.Core.SideviewbodyComponent"
],
"Properties": [
{
"Type": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "speed",
"DisplayName": "speed",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.MovementComponent, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "InputSpeed"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "jumpForce",
"DisplayName": "jumpForce",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.MovementComponent, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "JumpForce"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODSyncDictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "actionSheet",
"DisplayName": "actionSheet",
"ShowInInspector": false,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.StateAnimationComponent, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "ActionSheet"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "renderguid",
"DisplayName": "renderguid",
"ShowInInspector": false,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.SpriteRendererComponent, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "SpriteRUID"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.RenderSettingType, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "renderSetting",
"DisplayName": "renderSetting",
"ShowInInspector": false,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.SpriteRendererComponent, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "RenderSetting"
}
}
],
"Values": [
{
"TargetType": "MOD.Core.SpriteRendererComponent",
"Name": "OrderInLayer",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 2
},
{
"TargetType": "MOD.Core.HitComponent",
"Name": "CollisionGroup",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.Physics.CollisionGroup, MOD.Core, Version=26.3.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.Physics.CollisionGroup, MOD.Core",
"Id": "8992acd1e8cd45838db6f10a7b41df09"
}
}
],
"EventLinks": [],
"Children": []
}
}
}

352
Global/Player.model Normal file
View File

@@ -0,0 +1,352 @@
{
"Id": "",
"GameId": "",
"EntryKey": "model://player",
"ContentType": "x-mod/model",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "",
"StudioVersion": "",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"Version": 1,
"Name": "Player",
"BaseModelId": null,
"Id": "player",
"Components": [
"MOD.Core.TransformComponent",
"MOD.Core.MovementComponent",
"MOD.Core.RigidbodyComponent",
"MOD.Core.KinematicbodyComponent",
"MOD.Core.StateComponent",
"MOD.Core.AvatarRendererComponent",
"MOD.Core.CostumeManagerComponent",
"MOD.Core.HitEffectSpawnerComponent",
"MOD.Core.DamageSkinSpawnerComponent",
"MOD.Core.CameraComponent",
"MOD.Core.PlayerControllerComponent",
"MOD.Core.PlayerComponent",
"MOD.Core.ChatBalloonComponent",
"MOD.Core.NameTagComponent",
"MOD.Core.DamageSkinSettingComponent",
"MOD.Core.TriggerComponent",
"MOD.Core.InventoryComponent",
"MOD.Core.AvatarStateAnimationComponent",
"MOD.Core.SideviewbodyComponent"
],
"Properties": [
{
"Type": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "speed",
"DisplayName": "speed",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.MovementComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "InputSpeed"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "jumpForce",
"DisplayName": "jumpForce",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.MovementComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "JumpForce"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "walkAcceleration",
"DisplayName": "walkAcceleration",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.RigidbodyComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "WalkAcceleration"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "gravity",
"DisplayName": "gravity",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.RigidbodyComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "Gravity"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "cameraDeadZone",
"DisplayName": "cameraDeadZone",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.CameraComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "DeadZone"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "cameraSoftZone",
"DisplayName": "cameraSoftZone",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.CameraComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "SoftZone"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "cameraDamping",
"DisplayName": "cameraDamping",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.CameraComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "Damping"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "cameraScreen",
"DisplayName": "cameraScreen",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.CameraComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "ScreenOffset"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "cameraDutch",
"DisplayName": "cameraDutch",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.CameraComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "DutchAngle"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "cameraOffset",
"DisplayName": "cameraOffset",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.CameraComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "CameraOffset"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "message",
"DisplayName": "message",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.ChatBalloonComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "Message"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "chatModeEnabled",
"DisplayName": "chatModeEnabled",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.ChatBalloonComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "ChatModeEnabled"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "nameTag",
"DisplayName": "nameTag",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.NameTagComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "Name"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODDataRef, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "damageSkinId",
"DisplayName": "damageSkinId",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.DamageSkinSettingComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "DamageSkinId"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "damageDelayPerAttack",
"DisplayName": "damageDelayPerAttack",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.DamageSkinSettingComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "DelayPerAttack"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "triggerBodyBoxSize",
"DisplayName": "triggerBodyBoxSize",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.TriggerComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "BoxSize"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "triggerBodyBoxOffset",
"DisplayName": "triggerBodyBoxOffset",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.TriggerComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "BoxOffset"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Name": "triggerBodyColliderOffset",
"DisplayName": "triggerBodyColliderOffset",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.TriggerComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "ColliderOffset"
}
},
{
"Type": {
"$type": "MODNativeType",
"type": "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Name": "maxHp",
"DisplayName": "maxHp",
"ShowInInspector": true,
"Link": {
"Target": {
"$type": "MODNativeType",
"type": "MOD.Core.PlayerComponent, MOD.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null"
},
"Property": "MaxHp"
}
}
],
"Values": [],
"EventLinks": [],
"Children": []
}
}
}

View File

@@ -0,0 +1,30 @@
{
"Id": "",
"GameId": "",
"EntryKey": "config://sectors",
"ContentType": "x-mod/config",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "1.21.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"Sectors": [
{
"id": "sector01",
"name": "sector01",
"maxUserNo": 16,
"entries": [
"map://map01"
]
}
],
"AllowOverMaxEntryCountPerSector": false,
"config_id": "config://sectors"
}
}
}

28
Global/WorldConfig.config Normal file
View File

@@ -0,0 +1,28 @@
{
"Id": "",
"GameId": "",
"EntryKey": "config://world",
"ContentType": "x-mod/config",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"LegacyAnimationSupport": false,
"PlayerEntityAuthorityCheck": false,
"ServiceAuthorityCheck": false,
"RestrictedPlayerEntitySync": false,
"SourceLanguage": "ko",
"UseExtendedScriptFormat": false,
"UseLitDefaultMaterial": false,
"worldCoreVersion": "26.5.0.0",
"worldStudioVersion": "0.1.0.0",
"useService": 0
}
}
}

37
Global/common.gamelogic Normal file
View File

@@ -0,0 +1,37 @@
{
"Id": "",
"GameId": "",
"EntryKey": "gamelogic://77c34f19becf4fe8ab62762e5cb95357",
"ContentType": "x-mod/gamelogic",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Binary",
"Entities": [
{
"id": "b447311c-6f03-4ba1-aad0-8f0fe58df5c1",
"path": "/common",
"componentNames": "",
"jsonString": {
"name": "common",
"path": "/common",
"nameEditable": false,
"enable": true,
"visible": true,
"localize": false,
"displayOrder": 0,
"pathConstraints": "/",
"revision": 1,
"modelId": null,
"@components": [],
"@version": 1
}
}
]
}
}

120
README.md Normal file
View File

@@ -0,0 +1,120 @@
# SlayMaple
[MapleStory Worlds(MSW)](https://maplestoryworlds.nexon.com/) 기반으로 제작하는 **Slay the Spire 풍 덱빌더 로그라이크** 월드.
턴제 카드 전투, 덱 구성, 보상 선택, 맵 노드 진행을 메이플 월드 위에서 구현하는 것을 목표로 합니다.
> 이 저장소는 MSW **로컬 워크스페이스(Local Workspace)** 데이터를 git으로 형상관리하기 위한 것입니다.
> 공동작업자는 이 저장소를 통해 월드 데이터를 주고받습니다. (클라우드 공동제작 모드 미사용)
---
## 협업 방식 (중요)
MSW에는 두 가지 공동작업 모드가 있고, 이 프로젝트는 **로컬 워크스페이스 + git** 방식을 사용합니다.
| | 클라우드 공동제작 | **로컬 워크스페이스 + git (이 프로젝트)** |
|---|---|---|
| 데이터 위치 | 넥슨 클라우드 단일 월드 | 각자 PC 로컬 + git 원격 |
| 공유 단위 | Check In / Check Out | `git commit` / `push` / `pull` |
| 충돌 처리 | 엔티티 잠금 | git merge |
> ⚠️ 로컬 워크스페이스를 켜면 메이커 내 실시간 동기화(클라우드 공동제작)는 비활성화됩니다.
> 따라서 **변경 공유는 전적으로 git을 통해** 이루어집니다.
### 내 작업을 공유하기
```bash
git add .
git commit -m "작업 내용"
git push
```
### 공동작업자 작업 받아오기
```bash
git pull
```
받아온 뒤, 메이커에서 **로컬 워크스페이스를 다시 로드(reload)** 해야 새 codeblock/모델 파일이 에디터 상태로 반영됩니다.
> 💡 같은 파일을 동시에 수정하면 git 충돌이 날 수 있으니, **서로 다른 맵/codeblock/UI를 나눠서** 작업하는 것을 권장합니다.
---
## 디렉토리 구조
```
slaymaple/
├── Global/ # 월드 전역 설정 · 공용 모델 · 게임로직
│ ├── common.gamelogic # SlayCardCatalog / SlayRunState / SlayCombatManager 부착 지점
│ ├── Player.model # 플레이어 모델
│ ├── *.model # 몬스터 등 공용 모델
│ ├── WorldConfig.config # 월드 설정
│ └── ...
├── RootDesk/
│ └── MyDesk/ # 작업용 책상 — codeblock(스크립트)·모델·타일셋
│ ├── Monster.codeblock
│ ├── MonsterAttack.codeblock
│ ├── PlayerAttack.codeblock
│ ├── PlayerHit.codeblock
│ ├── UIPopup.codeblock
│ ├── UIToast.codeblock
│ └── RectTileData_Henesys.tileset
├── map/
│ └── map01.map # 메인 맵
├── ui/ # UI 그룹 (Default / Popup / Toast)
├── docs/
│ └── slaymaple_basic_framework.md # 전투 프레임워크 설계 문서
└── README.md
```
> `.mcp.json`, `.codex/` 는 **Authorization 토큰이 포함**되어 있어 git에서 제외됩니다(`.gitignore`). 각자 로컬에서 직접 구성하세요.
---
## 게임 프레임워크 현황
`Global/common.gamelogic``/common` 엔티티에 부착된 세 컴포넌트가 전투의 핵심입니다.
| 컴포넌트 | 역할 |
|---|---|
| `SlayCardCatalog` | 카드 데이터, 시작 덱 구성, 보상 풀, 카드 복제 정의 |
| `SlayRunState` | HP·골드·층수·덱·유물·카드 보상 등 런(run) 영속 데이터 관리 |
| `SlayCombatManager` | 턴 진행, 드로우/버림/소멸 더미, 에너지, 적 의도, 방어도, 데미지, 승패 처리 |
### 프로토타입 흐름
1. `SlayRunState`가 HP 80 · 10장 시작 덱으로 새 런 시작
2. `SlayCombatManager`가 데모 전투 자동 시작
3. 매 플레이어 턴: 에너지 3 회복, 방어도 초기화, 적 의도 갱신, 5장 드로우
4. 카드 사용 시 에너지 소모 → 데미지/방어/드로우/에너지/상태이상 적용 → 버림 또는 소멸
5. 턴 종료 시 손패 버림, 적 의도 실행, 상태이상 처리, 다음 턴 시작
6. 전투 승리 시 잔여 HP 저장, 골드 15 지급, 카드 보상 3종 생성
### 유용한 스크립트 호출
`/common` 엔티티에 붙은 스크립트에서:
```lua
self.Entity.SlayCombatManager:PlayCard(1, 1)
self.Entity.SlayCombatManager:EndPlayerTurn()
self.Entity.SlayCombatManager:DebugPlayFirstPlayable()
self.Entity.SlayRunState:PickReward(1)
self.Entity.SlayCombatManager:StartCombat("elite")
```
상세 설계는 [`docs/slaymaple_basic_framework.md`](docs/slaymaple_basic_framework.md) 참조.
---
## 다음 구현 단계
- [ ] HP·방어도·에너지·적 의도·손패 5버튼을 렌더링하는 전투 UI
- [ ] 전투/엘리트/상점/휴식/이벤트/보스 노드를 가진 맵 노드 UI
- [ ] `OnCombatStart` / `OnCardPlayed` / `OnTurnStart` / `OnCombatReward` 훅을 가진 유물 시스템
- [ ] 적 행동 패턴을 데이터로 정의 (현재 단순 의도 패턴 → 무브셋)
- [ ] 런 루프 완성 후 저장/불러오기
---
## 신규 참여자 셋업
1. 저장소 클론
```bash
git clone https://gitea.gahusb.synology.me/gahusb/maplecontest.git slaymaple
```
2. MSW Maker에서 이 폴더를 **로컬 워크스페이스 경로**로 지정해 월드 열기
3. `.mcp.json` / `.codex/` 는 git에 없으므로, 본인 토큰으로 직접 생성 (MCP·Codex 사용 시)
4. 작업 전 항상 `git pull`, 작업 후 `git add/commit/push`

23
RootDesk/MyDesk.directory Normal file
View File

@@ -0,0 +1,23 @@
{
"Id": "",
"GameId": "",
"EntryKey": "directory://076456cd4f7d4cb195f981e977106e5a",
"ContentType": "x-mod/directory",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"entry_id": "directory://076456cd4f7d4cb195f981e977106e5a",
"name": "MyDesk",
"lock": false,
"folding": false,
"nameEditable": false
}
}
}

View File

@@ -0,0 +1,463 @@
{
"Id": "",
"GameId": "",
"EntryKey": "model://05cf4e2a-3f39-445d-a2ce-58b50e538a40",
"ContentType": "x-mod/model",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"Version": 1,
"Name": "Model_monster-43",
"BaseModelId": null,
"Id": "05cf4e2a-3f39-445d-a2ce-58b50e538a40",
"Components": [
"MOD.Core.TransformComponent",
"MOD.Core.StateAnimationComponent",
"MOD.Core.SpriteRendererComponent",
"MOD.Core.RigidbodyComponent",
"MOD.Core.MovementComponent",
"MOD.Core.AIWanderComponent",
"MOD.Core.StateComponent",
"MOD.Core.HitComponent",
"MOD.Core.DamageSkinSpawnerComponent",
"script.Monster",
"script.MonsterAttack",
"MOD.Core.KinematicbodyComponent",
"MOD.Core.SideviewbodyComponent"
],
"Properties": [],
"Values": [
{
"TargetType": "MOD.Core.TransformComponent",
"Name": "Position",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector3, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector3, MOD.Core",
"x": -1.84943926,
"y": 1.27528822,
"z": 999.999
}
},
{
"TargetType": "MOD.Core.TransformComponent",
"Name": "QuaternionRotation",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODQuaternion, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODQuaternion, MOD.Core",
"x": 0.0,
"y": 0.0,
"z": 0.0,
"w": 1.0
}
},
{
"TargetType": "MOD.Core.TransformComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.StateAnimationComponent",
"Name": "ActionSheet",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODSyncDictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODSyncDictionary`2[[System.String, mscorlib],[System.String, mscorlib]], MOD.Core",
"stand": "3eb72eab0a394c78b13e88c8dc4a5ed0",
"move": "c96c11f9a3f845a4b6a27d9ca10ab103",
"hit": "4b67b539c09d4ce183ae6a73f908511f",
"die": "7681817f225a4245a27943da77d5f5b1",
"skill": "75c873675b6d45c38f24c8d7b98b4800",
"attack": "9db703c9da694490965897db7f2d4d92",
"skill2": "beabf049b5e34c25907ae69d2c1f835e",
"skill3": "e84c350104ca436b93db6c502faf53b3",
"skill4": "a5fb992ff4c04431a171bdd2fbfb372c",
"skillAfter4": "53de30457ceb44eca4ef2a81396e6adb",
"attack2": "52c1da942bec459b9d46c81c03233c0c"
}
},
{
"TargetType": "MOD.Core.StateAnimationComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.SpriteRendererComponent",
"Name": "ActionSheet",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": {
"$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]], mscorlib"
}
},
{
"TargetType": "MOD.Core.SpriteRendererComponent",
"Name": "EndFrameIndex",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 0
},
{
"TargetType": "MOD.Core.SpriteRendererComponent",
"Name": "OrderInLayer",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 2
},
{
"TargetType": "MOD.Core.SpriteRendererComponent",
"Name": "RenderSetting",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.RenderSettingType, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": 1
},
{
"TargetType": "MOD.Core.SpriteRendererComponent",
"Name": "SortingLayer",
"ValueType": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": "MapLayer0"
},
{
"TargetType": "MOD.Core.SpriteRendererComponent",
"Name": "SpriteRUID",
"ValueType": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": "c96c11f9a3f845a4b6a27d9ca10ab103"
},
{
"TargetType": "MOD.Core.SpriteRendererComponent",
"Name": "StartFrameIndex",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 0
},
{
"TargetType": "MOD.Core.SpriteRendererComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.RigidbodyComponent",
"Name": "MoveVelocity",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0,
"y": 0.0
}
},
{
"TargetType": "MOD.Core.RigidbodyComponent",
"Name": "RealMoveVelocity",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0,
"y": 0.0
}
},
{
"TargetType": "MOD.Core.RigidbodyComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.MovementComponent",
"Name": "InputSpeed",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 1.0
},
{
"TargetType": "MOD.Core.MovementComponent",
"Name": "JumpForce",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": 0.0
},
{
"TargetType": "MOD.Core.MovementComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.AIWanderComponent",
"Name": "IsLegacy",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": false
},
{
"TargetType": "MOD.Core.AIWanderComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.StateComponent",
"Name": "IsLegacy",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": false
},
{
"TargetType": "MOD.Core.StateComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.HitComponent",
"Name": "BoxSize",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.87,
"y": 1.04
}
},
{
"TargetType": "MOD.Core.HitComponent",
"Name": "ColliderOffset",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0150000155,
"y": 0.669999957
}
},
{
"TargetType": "MOD.Core.HitComponent",
"Name": "CollisionGroup",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.Physics.CollisionGroup, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.Physics.CollisionGroup, MOD.Core",
"Id": "8992acd1e8cd45838db6f10a7b41df09"
}
},
{
"TargetType": "MOD.Core.HitComponent",
"Name": "IsLegacy",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": false
},
{
"TargetType": "MOD.Core.HitComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.DamageSkinSpawnerComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "script.Monster",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "script.Monster",
"Name": "IsDead",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": false
},
{
"TargetType": "script.MonsterAttack",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "script.MonsterAttack",
"Name": "SpriteSize",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0,
"y": 0.0
}
},
{
"TargetType": "script.MonsterAttack",
"Name": "PositionOffset",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0,
"y": 0.0
}
},
{
"TargetType": "MOD.Core.KinematicbodyComponent",
"Name": "MoveVelocity",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0,
"y": 0.0
}
},
{
"TargetType": "MOD.Core.KinematicbodyComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.SideviewbodyComponent",
"Name": "MoveVelocity",
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=26.5.0.0, Culture=neutral, PublicKeyToken=null"
},
"Value": {
"$type": "MOD.Core.MODVector2, MOD.Core",
"x": 0.0,
"y": 0.0
}
},
{
"TargetType": "MOD.Core.SideviewbodyComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.MODEntity",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
},
{
"TargetType": "MOD.Core.MODEntity",
"Name": "Visible",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": true
}
],
"EventLinks": [],
"Children": []
}
}
}

View File

@@ -0,0 +1,146 @@
{
"Id": "",
"GameId": "",
"EntryKey": "codeblock://monster",
"ContentType": "x-mod/codeblock",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"CoreVersion": {
"Major": 0,
"Minor": 2
},
"ScriptVersion": {
"Major": 1,
"Minor": 3
},
"Description": "",
"Id": "Monster",
"Language": 1,
"Name": "Monster",
"Type": 1,
"Source": 1,
"Target": null,
"Properties": [
{
"Type": "number",
"DefaultValue": "100",
"SyncDirection": 3,
"Attributes": [],
"Name": "MaxHp"
},
{
"Type": "number",
"DefaultValue": "0",
"SyncDirection": 3,
"Attributes": [],
"Name": "Hp"
},
{
"Type": "boolean",
"DefaultValue": "false",
"SyncDirection": 3,
"Attributes": [],
"Name": "RespawnOn"
},
{
"Type": "boolean",
"DefaultValue": "false",
"SyncDirection": 3,
"Attributes": [
{
"$type": "MOD.Core.Script.HideFromInspectorScriptAttribute, MOD.Core"
}
],
"Name": "IsDead"
},
{
"Type": "number",
"DefaultValue": "5",
"SyncDirection": 3,
"Attributes": [],
"Name": "RespawnDelay"
},
{
"Type": "number",
"DefaultValue": "0.6",
"SyncDirection": 3,
"Attributes": [],
"Name": "DestroyDelay"
},
{
"Type": "string",
"DefaultValue": "\"02c22d93421b4038b3c413b3e40b57ec\"",
"SyncDirection": 0,
"Attributes": [],
"Name": "DamageSkinRUID"
}
],
"Methods": [
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "-- Initialize HP and apply the project-wide attacker damage skin for any\n-- monster that has a DamageSkinSettingComponent. DamageSkinId is a\n-- DataRef, not a string — must wrap with DataRef(...).\nself.Hp = self.MaxHp\n\nlocal skinSetting = self.Entity.DamageSkinSettingComponent\nif isvalid(skinSetting) then\n\tskinSetting.DamageSkinId = DataRef(self.DamageSkinRUID)\nend",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "OnBeginPlay"
},
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "self.IsDead = true\nlocal stateComponent = self.Entity.StateComponent\nif stateComponent then\n\tstateComponent:ChangeState(\"DEAD\")\n\tlog(\"monster change state to DEAD\")\nend\n\nlocal delayHide = function()\n\tself.Entity:SetVisible(false)\n\tself.Entity:SetEnable(false)\n\n\tif self.RespawnOn == false then\n\t\tself.Entity:Destroy()\n\tend\nend\n\n_TimerService:SetTimerOnce(delayHide, self.DestroyDelay)",
"Scope": 2,
"ExecSpace": 1,
"Attributes": [],
"Name": "Dead"
},
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "log(\"Respawn\")\nself.IsDead = false\nself.Entity:SetVisible(true)\nself.Entity:SetEnable(true)\n\nself.Hp = self.MaxHp\nlocal stateComponent = self.Entity.StateComponent\nif stateComponent then\n\tstateComponent:ChangeState(\"IDLE\")\nend",
"Scope": 2,
"ExecSpace": 1,
"Attributes": [],
"Name": "Respawn"
}
],
"EntityEventHandlers": [
{
"Name": "HandleHitEvent",
"EventName": "HitEvent",
"ParameterName": "event",
"Target": "self",
"Code": "-- Parameters\n-- local AttackCenter = event.AttackCenter\n-- local AttackerEntity = event.AttackerEntity\n-- local Damages = event.Damages\n-- local Extra = event.Extra\n-- local IsCritical = event.IsCritical\nlocal TotalDamage = event.TotalDamage\n--------------------------------------------------------\n\nlocal originalHp = self.Hp\nself.Hp = self.Hp - TotalDamage\n\nif self.Hp > 0 or originalHp <= 0 then\n\treturn\nend\n\nself:Dead()\nlocal timerFunc = function() self:Respawn() end\n\nif self.RespawnOn then\n\t_TimerService:SetTimerOnce(timerFunc, self.RespawnDelay)\nend",
"Scope": 1,
"ExecSpace": 1
}
]
}
}
}

View File

@@ -0,0 +1,143 @@
{
"Id": "",
"GameId": "",
"EntryKey": "codeblock://monsterattack",
"ContentType": "x-mod/codeblock",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"CoreVersion": {
"Major": 0,
"Minor": 2
},
"ScriptVersion": {
"Major": 1,
"Minor": 5
},
"Description": "",
"Id": "MonsterAttack",
"Language": 1,
"Name": "MonsterAttack",
"Type": 4,
"Source": 1,
"Target": "MOD.Core.AttackComponent",
"Properties": [
{
"Type": "number",
"DefaultValue": "0.03",
"SyncDirection": 0,
"Attributes": [
{
"$type": "MOD.Core.Script.MinValueScriptAttribute, MOD.Core",
"Value": 0.0
}
],
"Name": "AttackInterval"
},
{
"Type": "any",
"DefaultValue": "nil",
"SyncDirection": 0,
"Attributes": [
{
"$type": "MOD.Core.Script.HideFromInspectorScriptAttribute, MOD.Core"
}
],
"Name": "Shape"
},
{
"Type": "Vector2",
"DefaultValue": "Vector2(0,0)",
"SyncDirection": 0,
"Attributes": [
{
"$type": "MOD.Core.Script.HideFromInspectorScriptAttribute, MOD.Core"
}
],
"Name": "SpriteSize"
},
{
"Type": "Vector2",
"DefaultValue": "Vector2(0,0)",
"SyncDirection": 0,
"Attributes": [
{
"$type": "MOD.Core.Script.HideFromInspectorScriptAttribute, MOD.Core"
}
],
"Name": "PositionOffset"
}
],
"Methods": [
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "local monster = self.Entity.Monster\nif not monster then\n\treturn\nend\n\nself.Shape = BoxShape(Vector2.zero, Vector2.one, 0)\n\n-- sprite 사이즈를 가져와 공격 영역으로 사용한다\n_ResourceService:PreloadAsync({self.Entity.SpriteRendererComponent.SpriteRUID}, function()\n\tlocal clip = _ResourceService:LoadAnimationClipAndWait(self.Entity.SpriteRendererComponent.SpriteRUID)\n\tlocal firstFrameSprite = clip.Frames[1].FrameSprite\n\tlocal firstSpriteSizeInPixel = Vector2(firstFrameSprite.Width, firstFrameSprite.Height)\n\tlocal ppu = firstFrameSprite.PixelPerUnit\n\n\tself.SpriteSize = firstSpriteSizeInPixel / ppu\n\tself.PositionOffset = (firstSpriteSizeInPixel / 2 - firstFrameSprite.PivotPixel:ToVector2()) / ppu\n\t\n\t_TimerService:SetTimerRepeat(function() \n\t\tif monster.IsDead == false then\n\t\t\tself:AttackNear()\n\t\tend\n\tend, self.AttackInterval)\nend)",
"Scope": 2,
"ExecSpace": 1,
"Attributes": [],
"Name": "OnBeginPlay"
},
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "local transformComponent = self.Entity.TransformComponent\n\nif isvalid(transformComponent) then\n\tlocal worldPosition = transformComponent.WorldPosition\n\tlocal scaleX = transformComponent.Scale.x\n\tlocal scaleY = transformComponent.Scale.y\n\tlocal radian = math.rad(transformComponent.ZRotation)\n\tlocal offsetX = math.cos(radian) * self.PositionOffset.x * scaleX - math.sin(radian) * self.PositionOffset.y * scaleY\n\tlocal offsetY = math.sin(radian) * self.PositionOffset.x * scaleX + math.cos(radian) * self.PositionOffset.y * scaleY\n\tself.Shape.Size = Vector2(self.SpriteSize.x * math.abs(scaleX), self.SpriteSize.y * math.abs(scaleY))\n\tself.Shape.Position = Vector2(worldPosition.x + offsetX, worldPosition.y + offsetY)\n\tself.Shape.Angle = transformComponent.ZRotation\nend\n\nself:AttackFast(self.Shape, nil, CollisionGroups.Player)",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "AttackNear"
},
{
"Return": {
"Type": "boolean",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [
{
"Type": "Entity",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "defender"
},
{
"Type": "string",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "attackInfo"
}
],
"Code": "if isvalid(defender.PlayerComponent) == false then\n\treturn false\nend\n\nreturn __base:IsAttackTarget(defender, attackInfo)",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "IsAttackTarget"
}
],
"EntityEventHandlers": []
}
}
}

View File

@@ -0,0 +1,178 @@
{
"Id": "",
"GameId": "",
"EntryKey": "codeblock://playerattack",
"ContentType": "x-mod/codeblock",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"CoreVersion": {
"Major": 0,
"Minor": 2
},
"ScriptVersion": {
"Major": 1,
"Minor": 4
},
"Description": "",
"Id": "PlayerAttack",
"Language": 1,
"Name": "PlayerAttack",
"Type": 4,
"Source": 1,
"Target": "MOD.Core.AttackComponent",
"Properties": [
{
"Type": "any",
"DefaultValue": "nil",
"SyncDirection": 0,
"Attributes": [
{
"$type": "MOD.Core.Script.HideFromInspectorScriptAttribute, MOD.Core"
}
],
"Name": "Shape"
}
],
"Methods": [
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "self.Shape = BoxShape(Vector2.zero, Vector2.one, 0)",
"Scope": 2,
"ExecSpace": 1,
"Attributes": [],
"Name": "OnBeginPlay"
},
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "local playerController = self.Entity.PlayerControllerComponent\nlocal transform = self.Entity.TransformComponent\nif playerController and transform then\n\tlocal worldPosition = transform.WorldPosition\n\tlocal attackOffset = Vector2(worldPosition.x + 0.5 * playerController.LookDirectionX, worldPosition.y + 0.5)\n\tself.Shape.Position = attackOffset\n\n\tself:AttackFast(self.Shape, nil, CollisionGroups.Monster)\nend",
"Scope": 2,
"ExecSpace": 1,
"Attributes": [],
"Name": "AttackNormal"
},
{
"Return": {
"Type": "int",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [
{
"Type": "Entity",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "attacker"
},
{
"Type": "Entity",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "defender"
},
{
"Type": "string",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "attackInfo"
}
],
"Code": "return 50",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "CalcDamage"
},
{
"Return": {
"Type": "boolean",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [
{
"Type": "Entity",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "attacker"
},
{
"Type": "Entity",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "defender"
},
{
"Type": "string",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "attackInfo"
}
],
"Code": "return _UtilLogic:RandomDouble() < 0.3",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "CalcCritical"
},
{
"Return": {
"Type": "number",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "return 2",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "GetCriticalDamageRate"
}
],
"EntityEventHandlers": [
{
"Name": "HandlePlayerActionEvent",
"EventName": "PlayerActionEvent",
"ParameterName": "event",
"Target": "self",
"Code": "-- Parameters\nlocal ActionName = event.ActionName\n-- local PlayerEntity = event.PlayerEntity\n--------------------------------------------------------\n\nif ActionName == \"Attack\" then\n\tself:AttackNormal()\nend",
"Scope": 1,
"ExecSpace": 1
}
]
}
}
}

View File

@@ -0,0 +1,84 @@
{
"Id": "",
"GameId": "",
"EntryKey": "codeblock://playerhit",
"ContentType": "x-mod/codeblock",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"CoreVersion": {
"Major": 0,
"Minor": 2
},
"ScriptVersion": {
"Major": 1,
"Minor": 3
},
"Description": "",
"Id": "PlayerHit",
"Language": 1,
"Name": "PlayerHit",
"Type": 4,
"Source": 1,
"Target": "MOD.Core.HitComponent",
"Properties": [
{
"Type": "number",
"DefaultValue": "1",
"SyncDirection": 0,
"Attributes": [
{
"$type": "MOD.Core.Script.MinValueScriptAttribute, MOD.Core",
"Value": 0.0
}
],
"Name": "ImmuneCooldown"
},
{
"Type": "number",
"DefaultValue": "0",
"SyncDirection": 0,
"Attributes": [
{
"$type": "MOD.Core.Script.HideFromInspectorScriptAttribute, MOD.Core"
}
],
"Name": "LastHitTime"
}
],
"Methods": [
{
"Return": {
"Type": "boolean",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [
{
"Type": "string",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "attackInfo"
}
],
"Code": "local currentTime = _UtilLogic.ElapsedSeconds\nif self.LastHitTime + self.ImmuneCooldown < currentTime then\n\tself.LastHitTime = _UtilLogic.ElapsedSeconds\n\treturn true\nend\n\nreturn false",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "IsHitTarget"
}
],
"EntityEventHandlers": []
}
}
}

View File

@@ -0,0 +1,692 @@
{
"Id": "",
"GameId": "",
"EntryKey": "tileset://a5aaa9bc-0684-4c21-b803-73fbcbf0ac74",
"ContentType": "x-mod/tileset",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.3.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"name": "RectTileData_Henesys",
"id": "tileset://a5aaa9bc-0684-4c21-b803-73fbcbf0ac74",
"datas": [
{
"Id": "d67392ab6cf7437c93b7d1f1a54fdb6a",
"Name": "Henesys_soil_1",
"IsCollidable": false
},
{
"Id": "397d85d69c7f4a0cb3c09b9fd39a05bf",
"Name": "Henesys_soil_2",
"IsCollidable": false
},
{
"Id": "ac158cd67e8140d2a9ca6f2ba1c73da4",
"Name": "Henesys_soil_3",
"IsCollidable": false
},
{
"Id": "d8814332224a4155b095e60701dbfda7",
"Name": "Henesys_soil_4",
"IsCollidable": false
},
{
"Id": "695a5695ad71431cb6673938ee2ee870",
"Name": "Henesys_soil_5",
"IsCollidable": false
},
{
"Id": "1328fa4893434204a2a6cd1f9dab2b0e",
"Name": "Henesys_soil_6",
"IsCollidable": false
},
{
"Id": "fd605099419f4da1be3d6dfe8d254b98",
"Name": "Henesys_soil_7",
"IsCollidable": false
},
{
"Id": "d9c5d1df785d481e9ced76adff386d32",
"Name": "Henesys_soil_8",
"IsCollidable": false
},
{
"Id": "b04751d8569444898746a1977c39076f",
"Name": "Henesys_soil_9",
"IsCollidable": false
},
{
"Id": "f90a00eb5c4d456883d61c633fe67c5d",
"Name": "Henesys_soil_10",
"IsCollidable": false
},
{
"Id": "825522e2f66749fcad4d0d1a378285d5",
"Name": "Henesys_soil_11",
"IsCollidable": false
},
{
"Id": "6d0c903f5b444b57aa7a57e473e14018",
"Name": "Henesys_soil_12",
"IsCollidable": false
},
{
"Id": "1a33e1feab384ff99c69476aa1d9219f",
"Name": "Henesys_soil_13",
"IsCollidable": false
},
{
"Id": "057d3a5bc3f94e4a939308e22f89f226",
"Name": "Henesys_soil_14",
"IsCollidable": false
},
{
"Id": "1fe6d8b179a848a186e47de81fc0b685",
"Name": "Henesys_soil_15",
"IsCollidable": false
},
{
"Id": "3ffac5d9ea1242b4a75683df6dbffb23",
"Name": "Henesys_soil_16",
"IsCollidable": false
},
{
"Id": "f1fc624c54cc476dbd249405f44004de",
"Name": "Henesys_soil_17",
"IsCollidable": false
},
{
"Id": "ce4357935e0e4d46ae820fd4fb921d69",
"Name": "Henesys_soil_18",
"IsCollidable": false
},
{
"Id": "ecaf6b3846f44a9587c0af28a67feede",
"Name": "Henesys_soil_19",
"IsCollidable": false
},
{
"Id": "4c4d3fc337df49e6b041736b6bbea9ba",
"Name": "Henesys_soil_20",
"IsCollidable": false
},
{
"Id": "2b98be9afe7545ee92018348e0d4d667",
"Name": "Henesys_soil_21",
"IsCollidable": false
},
{
"Id": "b521b91e5a0d4a64afd745a3c5514a09",
"Name": "Henesys_soil_22",
"IsCollidable": false
},
{
"Id": "9b34b3c09a814b4f93d5616e50187025",
"Name": "Henesys_soil_23",
"IsCollidable": false
},
{
"Id": "7d43a504cea746c9aa23b5cc77dd22f1",
"Name": "Henesys_soil_24",
"IsCollidable": false
},
{
"Id": "ecfcdf8ee5394768bb03ba2fa1f758cb",
"Name": "Henesys_soil_25",
"IsCollidable": false
},
{
"Id": "98dbcb84914e4ad7bdc1a34fe311f628",
"Name": "Henesys_soil_26",
"IsCollidable": false
},
{
"Id": "26bab6e7bf5d4581b809b8cbe71fc1be",
"Name": "Henesys_soil_27",
"IsCollidable": false
},
{
"Id": "240336208f444197aa29d5f567ae7648",
"Name": "Henesys_soil_28",
"IsCollidable": false
},
{
"Id": "8bd3070b58674837bf68784431eb9042",
"Name": "Henesys_soil_29",
"IsCollidable": false
},
{
"Id": "67bd3f2de35a43ae8945e5ed3c74b178",
"Name": "Henesys_soil_30",
"IsCollidable": false
},
{
"Id": "e154900d858a47428da260e5fb49322b",
"Name": "Henesys_soil_31",
"IsCollidable": false
},
{
"Id": "f00c145aa9d64f57a698f3c8e56d3ee1",
"Name": "Henesys_soil_32",
"IsCollidable": false
},
{
"Id": "0906a58d447e4c68bb60cf49610c41e3",
"Name": "Henesys_soil_33",
"IsCollidable": false
},
{
"Id": "e5e2a701b97442bc886555570e78511c",
"Name": "Henesys_soil_34",
"IsCollidable": false
},
{
"Id": "145900d0c14a4bd083b214780e966467",
"Name": "Henesys_soil_35",
"IsCollidable": false
},
{
"Id": "9b90454f870d47a5978ac3ae67a96cfe",
"Name": "Henesys_soil_36",
"IsCollidable": false
},
{
"Id": "328a9c0987b244028eb903bdc99b1e56",
"Name": "Henesys_soil_37",
"IsCollidable": false
},
{
"Id": "8069ab53ebf24c70b8258f28db47ffcc",
"Name": "Henesys_soil_38",
"IsCollidable": false
},
{
"Id": "96b3a2d3662a45cc89feb7f0dc768dd5",
"Name": "Henesys_soil_39",
"IsCollidable": false
},
{
"Id": "ab598a6bc4454c57ac1ec4ad9123ccc9",
"Name": "Henesys_soil_40",
"IsCollidable": false
},
{
"Id": "dd900083da714f3b84c080713f7d158f",
"Name": "Henesys_soil_41",
"IsCollidable": false
},
{
"Id": "d04b9a0738e149f391e4be890baa9ea6",
"Name": "Henesys_soil_42",
"IsCollidable": false
},
{
"Id": "dbe19318a17d450b9998dc8f44be265c",
"Name": "Henesys_soil_43",
"IsCollidable": false
},
{
"Id": "8cb7a0d4ce704e349205dd7964c26426",
"Name": "Henesys_soil_44",
"IsCollidable": false
},
{
"Id": "13995579e1324f75a3f90a5ab5bd50c0",
"Name": "Henesys_soil_45",
"IsCollidable": false
},
{
"Id": "dbef1db98fbb4d97bbfeba49e6fb3c12",
"Name": "Henesys_soil_46",
"IsCollidable": false
},
{
"Id": "fc91da376cda4e5c90489eb17a70d9e0",
"Name": "Henesys_soil_47",
"IsCollidable": false
},
{
"Id": "f486cccd807a48e4a96bf81d98f06cee",
"Name": "Henesys_soil_48",
"IsCollidable": false
},
{
"Id": "34d13631d62b4f058673e923c88920f4",
"Name": "Henesys_soil_49",
"IsCollidable": false
},
{
"Id": "70abc60d82c3498b838ebe6c25c02626",
"Name": "Henesys_soil_50",
"IsCollidable": false
},
{
"Id": "622bca11b3cd41bc9d34ed37aa625d9f",
"Name": "Henesys_soil_51",
"IsCollidable": false
},
{
"Id": "562f8dec863640e2b9641a109bd1b326",
"Name": "Henesys_soil_52",
"IsCollidable": false
},
{
"Id": "41e566774c9d4c2db7d990ee1401fe70",
"Name": "Henesys_soil_53",
"IsCollidable": false
},
{
"Id": "4802b89cce954ddf95edf22c9f932473",
"Name": "Henesys_soil_54",
"IsCollidable": false
},
{
"Id": "745cf55517204dec9ce95464b7ee07a2",
"Name": "Henesys_soil_55",
"IsCollidable": false
},
{
"Id": "003c947326224ef28500b961a956be61",
"Name": "Henesys_soil_56",
"IsCollidable": false
},
{
"Id": "0912bd41fc934a1fb1368eec9094b3f6",
"Name": "Henesys_soil_57",
"IsCollidable": false
},
{
"Id": "c3b5d86d35924ca69b54973c694957c3",
"Name": "Henesys_soil_58",
"IsCollidable": false
},
{
"Id": "4a7ae60f63354b4793e26a329cf8efd6",
"Name": "Henesys_soil_59",
"IsCollidable": false
},
{
"Id": "13c07fc41c1f4314a6214189cf447f17",
"Name": "Henesys_soil_60",
"IsCollidable": false
},
{
"Id": "3140cc961cfd4c81a24ac637ad3067ba",
"Name": "Henesys_soil_61",
"IsCollidable": false
},
{
"Id": "abeda4d5248541ffa60495a30be1cc40",
"Name": "Henesys_stone_1",
"IsCollidable": false
},
{
"Id": "186b6926a7d149ccba42cbff7498e6d5",
"Name": "Henesys_stone_2",
"IsCollidable": false
},
{
"Id": "7c4366b90bce4341b266a6735f65b438",
"Name": "Henesys_stone_3",
"IsCollidable": false
},
{
"Id": "e002ca850ae34036addd34d8031a9ee0",
"Name": "Henesys_stone_4",
"IsCollidable": false
},
{
"Id": "9da93350c25142ba93d0e6549185b599",
"Name": "Henesys_stone_5",
"IsCollidable": false
},
{
"Id": "ae99ccbe60e3460e8191ac253ca10d5c",
"Name": "Henesys_stone_6",
"IsCollidable": false
},
{
"Id": "106caf1ac73d49ad9a8e5003132b1def",
"Name": "Henesys_stone_7",
"IsCollidable": false
},
{
"Id": "32d8fa384cbe480cb8f989536c1fe95b",
"Name": "Henesys_stone_8",
"IsCollidable": false
},
{
"Id": "c2258ce9ffdd45a99e3c3aa6ce0f785c",
"Name": "Henesys_stone_9",
"IsCollidable": false
},
{
"Id": "9cb218fa0cac4298b20a11043c952648",
"Name": "Henesys_stone_10",
"IsCollidable": false
},
{
"Id": "48a5fa7e42094f93b81003a3c57d557e",
"Name": "Henesys_stone_11",
"IsCollidable": false
},
{
"Id": "0cd53fe7213d422db29a84e3ce0a000e",
"Name": "Henesys_stone_12",
"IsCollidable": false
},
{
"Id": "2d23f2163c33446699742515efda5d58",
"Name": "Henesys_stone_13",
"IsCollidable": false
},
{
"Id": "78c2ab6aa3bf48c9a4105d4bbf1e021a",
"Name": "Henesys_stone_14",
"IsCollidable": false
},
{
"Id": "37284a9ec43540dfa88e3b7bdbe34789",
"Name": "Henesys_stone_15",
"IsCollidable": false
},
{
"Id": "029fe3c91bc94f259819922fea4f64b0",
"Name": "Henesys_stone_16",
"IsCollidable": false
},
{
"Id": "110344e3e845478e9226690e43abfeae",
"Name": "Henesys_stone_17",
"IsCollidable": false
},
{
"Id": "ce0ac3e8b0634a6194d0323f8ac7c107",
"Name": "Henesys_stone_18",
"IsCollidable": false
},
{
"Id": "64e778f581a844a2a904bdca1337fdd8",
"Name": "Henesys_stone_19",
"IsCollidable": false
},
{
"Id": "995b867c3e414a19bb90f48a3764ed7e",
"Name": "Henesys_stone_20",
"IsCollidable": false
},
{
"Id": "34bb121fada24db4ab495d1732cdfec1",
"Name": "Henesys_stone_21",
"IsCollidable": false
},
{
"Id": "15a970ca3f89441f9204d0b009a4dd36",
"Name": "Henesys_stone_22",
"IsCollidable": false
},
{
"Id": "8e701d7fff9f45958a354701756ffbb4",
"Name": "Henesys_stone_23",
"IsCollidable": false
},
{
"Id": "7dd67a9122f14998bbd4807983b2dd51",
"Name": "Henesys_stone_24",
"IsCollidable": false
},
{
"Id": "4476f7a8965d4f7aab928d6a1b505cc7",
"Name": "Henesys_stone_25",
"IsCollidable": false
},
{
"Id": "a438906ea9824215919aad9fbe9cdc06",
"Name": "Henesys_stone_26",
"IsCollidable": false
},
{
"Id": "3d26e19d1df04d56be52fec18bb5274c",
"Name": "Henesys_stone_27",
"IsCollidable": false
},
{
"Id": "6b47435bb909443bbbdc125c6e7664b7",
"Name": "Henesys_stone_28",
"IsCollidable": false
},
{
"Id": "32767954b69846ab832df8990eef4b3a",
"Name": "Henesys_stone_29",
"IsCollidable": false
},
{
"Id": "bf9e815c943a42d587a2ffe83ceca4d4",
"Name": "Henesys_stone_30",
"IsCollidable": false
},
{
"Id": "8dd6c7b67fc348ffb89637abe8367e10",
"Name": "Henesys_stone_31",
"IsCollidable": false
},
{
"Id": "c2de08d7aab0460a8d9dd83250bf1c5e",
"Name": "Henesys_stone_32",
"IsCollidable": false
},
{
"Id": "5376bee70fa246a78e759b3549b9d231",
"Name": "Henesys_stone_33",
"IsCollidable": false
},
{
"Id": "ec67639c80f54587b5b8dbc57f84dd4c",
"Name": "Henesys_stone_34",
"IsCollidable": false
},
{
"Id": "10581cbae36c4c5dbce5c0cbe7141883",
"Name": "Henesys_stone_35",
"IsCollidable": false
},
{
"Id": "e9ba1a7905af48fd800b0e9fe68be20f",
"Name": "Henesys_stone_36",
"IsCollidable": false
},
{
"Id": "e3222702a6ba46419441382e7978fa7a",
"Name": "Henesys_stone_37",
"IsCollidable": false
},
{
"Id": "1170d60709214d2692e1ef43529b4fd6",
"Name": "Henesys_stone_38",
"IsCollidable": false
},
{
"Id": "68e9924224a7468bb84b5b6c6376c01a",
"Name": "Henesys_stone_39",
"IsCollidable": false
},
{
"Id": "279fd0d338ee4e8c9060a90b5db23fc0",
"Name": "Henesys_stone_40",
"IsCollidable": false
},
{
"Id": "76cf0a821dab49268ebcb60ae09db00f",
"Name": "Henesys_stone_41",
"IsCollidable": false
},
{
"Id": "e533bc6921d342f4be10fa5f4ca1e41b",
"Name": "Henesys_stone_42",
"IsCollidable": false
},
{
"Id": "86b2281ce7dd436e9ecc2d70edc444fc",
"Name": "Henesys_stone_43",
"IsCollidable": false
},
{
"Id": "fbcb77c5f2564d7cafc55098ac2fea77",
"Name": "Henesys_stone_44",
"IsCollidable": false
},
{
"Id": "b9ad1a1fd7be4606a9a7a19c1b50f223",
"Name": "Henesys_stone_45",
"IsCollidable": false
},
{
"Id": "56bf938a5d524ff38c1fec7ec474bac8",
"Name": "Henesys_stone_46",
"IsCollidable": false
},
{
"Id": "09a1b7759f67425c8d08f6529199e80b",
"Name": "Henesys_stone_47",
"IsCollidable": false
},
{
"Id": "e6c4f76184584b809567d8b85cd4ccdf",
"Name": "Henesys_stone_48",
"IsCollidable": false
},
{
"Id": "982ab3b7412d4aed96b14642e6d25f37",
"Name": "Henesys_stone_49",
"IsCollidable": false
},
{
"Id": "ff81d5234d5b4b76b5d337d8d6e239b7",
"Name": "Henesys_stone_50",
"IsCollidable": false
},
{
"Id": "3bd284dc6aed4716bbe7df2ce8ee7fc1",
"Name": "Henesys_stone_51",
"IsCollidable": false
},
{
"Id": "eb7b76076d6f46188165c0768891d3ea",
"Name": "Henesys_stone_52",
"IsCollidable": false
},
{
"Id": "8db74f47226b4f658b1b0ec19140e51d",
"Name": "Henesys_stone_53",
"IsCollidable": false
},
{
"Id": "d4551b3d21d449af91e8cd1ebc7b6032",
"Name": "Henesys_stone_54",
"IsCollidable": false
},
{
"Id": "37fb8e86e7a64ca09ae9d4e26ddf7b75",
"Name": "Henesys_stone_55",
"IsCollidable": false
},
{
"Id": "fe1153dd997e48f990a3ce64d08866cb",
"Name": "Henesys_stone_56",
"IsCollidable": false
},
{
"Id": "ab82f0c7b5af48b3b623a637f0c40553",
"Name": "Henesys_stone_57",
"IsCollidable": false
},
{
"Id": "511721788d864ed19a5f5f8114f35657",
"Name": "Henesys_water_1",
"IsCollidable": true
},
{
"Id": "ad3bdf656f56428d943af7b7c3494e3d",
"Name": "Henesys_water_2",
"IsCollidable": true
},
{
"Id": "2a17e6dfed48451eb605fa411c2d03ab",
"Name": "Henesys_water_3",
"IsCollidable": true
},
{
"Id": "96717c3bf11144e29e746da6f0a1bd82",
"Name": "Henesys_water_4",
"IsCollidable": true
},
{
"Id": "41f23d9050b74384a10532af3a8a81e1",
"Name": "Henesys_water_5",
"IsCollidable": true
},
{
"Id": "fb639bbb173e4f139d12dd5e8d0cb952",
"Name": "Henesys_water_6",
"IsCollidable": true
},
{
"Id": "6d5b76d2937c4fd4a84739900119f50a",
"Name": "Henesys_water_7",
"IsCollidable": true
},
{
"Id": "067b9e1f9e2e48b5a4fa8786ad908a7a",
"Name": "Henesys_water_8",
"IsCollidable": true
},
{
"Id": "54df880afde94f03a98ab4c467fe1eba",
"Name": "Henesys_water_9",
"IsCollidable": true
},
{
"Id": "b03be19bf99445509e96166c4c5d1aa0",
"Name": "Henesys_water_10",
"IsCollidable": true
},
{
"Id": "4097ed3fa5cb4200b1ef57f9ce42b897",
"Name": "Henesys_water_11",
"IsCollidable": true
},
{
"Id": "c6cd001118fd47018dcab4f0756f5fa5",
"Name": "Henesys_water_12",
"IsCollidable": true
},
{
"Id": "39282a9c9dfa40a7bc218451eb555d27",
"Name": "Henesys_water_13",
"IsCollidable": true
},
{
"Id": "229a0bbc6e034c2682c5cdc07ee73aa1",
"Name": "Henesys_water_14",
"IsCollidable": true
},
{
"Id": "75e57411fa5d49a89c3194b4ba80b0ac",
"Name": "Henesys_water_15",
"IsCollidable": true
},
{
"Id": "2978323e1e6441898681d09ad5f0c0a6",
"Name": "Henesys_water_16",
"IsCollidable": true
}
]
}
}
}

View File

@@ -0,0 +1,248 @@
{
"Id": "",
"GameId": "",
"EntryKey": "codeblock://15873444-8d16-4d28-9091-9c623fda5224",
"ContentType": "x-mod/codeblock",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"CoreVersion": {
"Major": 0,
"Minor": 2
},
"ScriptVersion": {
"Major": 1,
"Minor": 0
},
"Description": "",
"Id": "15873444-8d16-4d28-9091-9c623fda5224",
"Language": 1,
"Name": "UIPopup",
"Type": 5,
"Source": 0,
"Target": null,
"Properties": [
{
"Type": "Component",
"DefaultValue": "3606e39d-32de-427e-8d23-b38af810a3b4:TextComponent",
"SyncDirection": 0,
"Attributes": [],
"Name": "message"
},
{
"Type": "Component",
"DefaultValue": "94a274e4-4111-40f1-924d-c95a3a1f14d5:ButtonComponent",
"SyncDirection": 0,
"Attributes": [],
"Name": "btnOk"
},
{
"Type": "Component",
"DefaultValue": "0f5de49b-2adc-409a-816d-15aa43df8e0d:ButtonComponent",
"SyncDirection": 0,
"Attributes": [],
"Name": "btnCancel"
},
{
"Type": "Entity",
"DefaultValue": "fb7a3b06-7026-4590-8efe-bb33416dd8f9",
"SyncDirection": 0,
"Attributes": [],
"Name": "popupGroup"
},
{
"Type": "Entity",
"DefaultValue": "aa954759-0e39-430f-85fa-80bf2e5fe31d",
"SyncDirection": 0,
"Attributes": [],
"Name": "popup"
},
{
"Type": "any",
"DefaultValue": "nil",
"SyncDirection": 0,
"Attributes": [],
"Name": "onOk"
},
{
"Type": "any",
"DefaultValue": "nil",
"SyncDirection": 0,
"Attributes": [],
"Name": "onCancel"
},
{
"Type": "number",
"DefaultValue": "0.15",
"SyncDirection": 0,
"Attributes": [],
"Name": "duration"
},
{
"Type": "number",
"DefaultValue": "0.5",
"SyncDirection": 0,
"Attributes": [],
"Name": "from"
},
{
"Type": "number",
"DefaultValue": "1",
"SyncDirection": 0,
"Attributes": [],
"Name": "to"
},
{
"Type": "boolean",
"DefaultValue": "false",
"SyncDirection": 0,
"Attributes": [],
"Name": "isOpen"
},
{
"Type": "boolean",
"DefaultValue": "false",
"SyncDirection": 0,
"Attributes": [],
"Name": "isTweenPlaying"
},
{
"Type": "number",
"DefaultValue": "0",
"SyncDirection": 0,
"Attributes": [],
"Name": "tweenEventId"
},
{
"Type": "any",
"DefaultValue": "nil",
"SyncDirection": 0,
"Attributes": [],
"Name": "okHandler"
},
{
"Type": "any",
"DefaultValue": "nil",
"SyncDirection": 0,
"Attributes": [],
"Name": "cancelHandler"
}
],
"Methods": [
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [
{
"Type": "string",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "message"
},
{
"Type": "any",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "onOk"
},
{
"Type": "any",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "onCancel"
}
],
"Code": "if self.isOpen == true then\n\treturn\nend\nself.isOpen = true\nself.popupGroup.Enable = true\nself.message.Text = message\nself.onOk = onOk\nself.onCancel = onCancel\n\n\nself.okHandler = self.btnOk.Entity:ConnectEvent(ButtonClickEvent,self.OnClickOk)\nself.cancelHandler = self.btnCancel.Entity:ConnectEvent(ButtonClickEvent,self.OnClickCancel)\nself:StartTween(true)",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "Open"
},
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "if self.isTweenPlaying == true then\n\treturn\nend\nif self.onOk ~= nil then\n\tself.onOk()\n\tself.onOk = nil\nend\nself:Close()",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "OnClickOk"
},
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "if self.isTweenPlaying == true then\n\treturn\nend\nif self.onCancel ~= nil then\n\tself.onCancel()\n\tself.onCancel = nil\nend\nself:Close()",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "OnClickCancel"
},
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "self.btnOk.Entity:DisconnectEvent(ButtonClickEvent,self.okHandler)\nself.btnCancel.Entity:DisconnectEvent(ButtonClickEvent,self.cancelHandler)\nself:StartTween(false)",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "Close"
},
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [
{
"Type": "boolean",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "open"
}
],
"Code": "\nlocal transform = self.popup.UITransformComponent\nlocal canvasGroup = self.popupGroup.CanvasGroupComponent \nif open == true then\n\tcanvasGroup.GroupAlpha = 0\n\ttransform.UIScale = Vector3(self.from,self.from,1)\nelse\n\ttransform.UIScale = Vector3(self.to,self.to,1)\nend\nself.isTweenPlaying = true\nlocal time = 0\n\n\nlocal preTime = _UtilLogic.ElapsedSeconds\n\nlocal tween = function()\n\tlocal delta = _UtilLogic.ElapsedSeconds - preTime\n\ttime = time + delta\n\tlocal timeValue = time\t\n\tpreTime = _UtilLogic.ElapsedSeconds\n\n\tif time >= self.duration then\n\t\ttimeValue = self.duration\n\t\tif open == false then\n\t\t\tself.popupGroup.Enable = false\n\t\t\tself.isOpen = false\n\t\tend\n\t\tself.isTweenPlaying = false\n\t\t_TimerService:ClearTimer(self.tweenEventId)\n\n\tend\n\tif open == false then\n\t\ttimeValue = self.duration - timeValue\n\tend\n\tlocal tweenValue = _TweenLogic:Ease(self.from, self.to, \n\t\tself.duration, EaseType.SineEaseIn, timeValue)\n\ttransform.UIScale = Vector3(tweenValue,tweenValue,1)\n\tcanvasGroup.GroupAlpha = timeValue / self.duration\nend\nself.tweenEventId = _TimerService:SetTimerRepeat(tween,1/60)\n",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "StartTween"
}
],
"EntityEventHandlers": []
}
}
}

View File

@@ -0,0 +1,132 @@
{
"Id": "",
"GameId": "",
"EntryKey": "codeblock://63fe07f0-2bcd-462c-8157-d6031e053b5e",
"ContentType": "x-mod/codeblock",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Json",
"Json": {
"CoreVersion": {
"Major": 0,
"Minor": 2
},
"ScriptVersion": {
"Major": 1,
"Minor": 0
},
"Description": "",
"Id": "63fe07f0-2bcd-462c-8157-d6031e053b5e",
"Language": 1,
"Name": "UIToast",
"Type": 5,
"Source": 0,
"Target": null,
"Properties": [
{
"Type": "Component",
"DefaultValue": "7af9e538-1713-49f7-a83e-711c0f4b4a3c:TextComponent",
"SyncDirection": 0,
"Attributes": [],
"Name": "message"
},
{
"Type": "Entity",
"DefaultValue": "0bc398f9-29cb-4d89-a78d-f24742b117e8",
"SyncDirection": 0,
"Attributes": [],
"Name": "toastGroup"
},
{
"Type": "number",
"DefaultValue": "2",
"SyncDirection": 0,
"Attributes": [],
"Name": "duration"
},
{
"Type": "number",
"DefaultValue": "0.1",
"SyncDirection": 0,
"Attributes": [],
"Name": "tweenDuration"
},
{
"Type": "number",
"DefaultValue": "0",
"SyncDirection": 0,
"Attributes": [],
"Name": "tweenEventId"
},
{
"Type": "boolean",
"DefaultValue": "false",
"SyncDirection": 0,
"Attributes": [],
"Name": "isTweenPlaying"
},
{
"Type": "boolean",
"DefaultValue": "false",
"SyncDirection": 0,
"Attributes": [],
"Name": "inited"
},
{
"Type": "number",
"DefaultValue": "0",
"SyncDirection": 0,
"Attributes": [],
"Name": "offset"
}
],
"Methods": [
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [
{
"Type": "string",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": "message"
}
],
"Code": "if self.inited == false then\n\tself.inited = true\n\tself.offset = -self.message.Entity.UITransformComponent.anchoredPosition.y\nend\nself.message.Text = message\nself:StartTween()",
"Scope": 2,
"ExecSpace": 6,
"Attributes": [],
"Name": "ShowMessage"
},
{
"Return": {
"Type": "void",
"DefaultValue": null,
"SyncDirection": 0,
"Attributes": [],
"Name": null
},
"Arguments": [],
"Code": "local canvasGroup = self.message.Entity.CanvasGroupComponent\nlocal transform = self.message.Entity.UITransformComponent\nif self.tweenEventId > 0 then\n\t_TimerService:ClearTimer(self.tweenEventId)\n\tself.tweenEventId = 0\nelse\n\tcanvasGroup.GroupAlpha = 0\nend\nself.toastGroup.Enable = true\nlocal time = 0\n\nlocal preTime = _UtilLogic.ElapsedSeconds\n\nlocal tween = function()\n\tlocal delta = _UtilLogic.ElapsedSeconds - preTime\n\ttime = time + delta\n\tpreTime = _UtilLogic.ElapsedSeconds\n\n\tlocal alpha = canvasGroup.GroupAlpha \n\tif time >= (self.duration + self.tweenDuration) then\t\t\n\t\tself.toastGroup.Enable = false\n\t\t_TimerService:ClearTimer(self.tweenEventId)\n\t\tself.tweenEventId = 0\n\t\talpha = 0\n\telse\n\t\tif time > self.duration then\t\t\t\n\t\t\talpha = alpha - delta / self.tweenDuration\n\t\telse\n\t\t\talpha = alpha + delta / self.tweenDuration\n\t\tend\t\t\t\n\tend\t\n\talpha = math.min(1,math.max(alpha,0))\n\t\n\tcanvasGroup.GroupAlpha = alpha\n\tlocal tweenValue = _TweenLogic:Ease(0,1,1,EaseType.SineEaseIn,alpha)\n\ttransform.anchoredPosition = Vector2(0,-self.offset * tweenValue)\nend\n\nself.tweenEventId = _TimerService:SetTimerRepeat(tween,1/60)\n\n",
"Scope": 2,
"ExecSpace": 0,
"Attributes": [],
"Name": "StartTween"
}
],
"EntityEventHandlers": []
}
}
}

View File

@@ -0,0 +1,42 @@
# SlayMaple Basic Framework
This project now has a small deckbuilder roguelike foundation inspired by turn-based card combat games.
## Components
- `SlayCardCatalog`: Defines card data, starter deck composition, reward pool, and card cloning.
- `SlayRunState`: Owns persistent run data such as HP, gold, floor, deck, relics, and card rewards.
- `SlayCombatManager`: Runs combat turns, draw/discard/exhaust piles, energy, enemy intents, block, damage, victory, and defeat.
All three components are attached to the `/common` entity in `Global/common.gamelogic`.
If the Maker session was already open before these files were added, reopen or reload the local workspace so the new codeblock files are imported into the editor state.
## Prototype Flow
1. `SlayRunState` starts a new run with 80 HP and a 10-card starter deck.
2. `SlayCombatManager` starts a demo combat automatically.
3. Each player turn refreshes energy to 3, clears block, rolls enemy intent, and draws 5 cards.
4. Playing a card spends energy, applies damage/block/draw/energy/status effects, then sends the card to discard or exhaust.
5. Ending the turn discards the hand, resolves enemy intent, ticks statuses, and starts the next turn.
6. Winning combat stores the remaining HP back into the run, grants 15 gold, and generates 3 card reward options.
## Useful Script Calls
From a script attached to the same `/common` entity:
```lua
self.Entity.SlayCombatManager:PlayCard(1, 1)
self.Entity.SlayCombatManager:EndPlayerTurn()
self.Entity.SlayCombatManager:DebugPlayFirstPlayable()
self.Entity.SlayRunState:PickReward(1)
self.Entity.SlayCombatManager:StartCombat("elite")
```
## Next Implementation Steps
- Add a combat UI that renders HP, block, energy, enemy intent, and 5 hand-card buttons.
- Add a map node UI with combat, elite, shop, rest, event, and boss node types.
- Add relic definitions and hooks such as `OnCombatStart`, `OnCardPlayed`, `OnTurnStart`, and `OnCombatReward`.
- Add enemy move sets as data instead of the current simple intent pattern.
- Add save/load once the run loop is playable end to end.

6963
map/map01.map Normal file

File diff suppressed because it is too large Load Diff

1070
ui/DefaultGroup.ui Normal file

File diff suppressed because it is too large Load Diff

1198
ui/PopupGroup.ui Normal file

File diff suppressed because it is too large Load Diff

312
ui/ToastGroup.ui Normal file
View File

@@ -0,0 +1,312 @@
{
"Id": "",
"GameId": "",
"EntryKey": "ui://0bc398f9-29cb-4d89-a78d-f24742b117e8",
"ContentType": "x-mod/ui",
"Content": "",
"Usage": 0,
"UsePublish": 1,
"UseService": 0,
"CoreVersion": "26.5.0.0",
"StudioVersion": "0.1.0.0",
"DynamicLoading": 0,
"ContentProto": {
"Use": "Binary",
"Entities": [
{
"id": "0bc398f9-29cb-4d89-a78d-f24742b117e8",
"path": "/ui/ToastGroup",
"componentNames": "MOD.Core.UITransformComponent,MOD.Core.UIGroupComponent,MOD.Core.CanvasGroupComponent",
"jsonString": {
"name": "ToastGroup",
"path": "/ui/ToastGroup",
"nameEditable": true,
"enable": true,
"visible": true,
"localize": true,
"displayOrder": 2,
"pathConstraints": "//",
"revision": 1,
"origin": {
"type": "Model",
"entry_id": "uigroup",
"sub_entity_id": null,
"root_entity_id": null,
"replaced_model_id": null
},
"modelId": "uigroup",
"@components": [
{
"@type": "MOD.Core.UITransformComponent",
"ActivePlatform": 255,
"AlignmentOption": 15,
"AnchorsMax": {
"x": 1.0,
"y": 1.0
},
"AnchorsMin": {
"x": 0.0,
"y": 0.0
},
"MobileOnly": false,
"OffsetMax": {
"x": 0.0,
"y": 0.0
},
"OffsetMin": {
"x": 0.0,
"y": 0.0
},
"Pivot": {
"x": 0.5,
"y": 0.5
},
"RectSize": {
"x": 1920.0,
"y": 1080.0
},
"UIMode": 1,
"UIScale": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"UIVersion": 2,
"anchoredPosition": {
"x": 0.0,
"y": 0.0
},
"Position": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"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.UIGroupComponent",
"DefaultShow": false,
"GroupOrder": 2,
"GroupType": 1,
"Enable": true
},
{
"@type": "MOD.Core.CanvasGroupComponent",
"BlocksRaycasts": true,
"GroupAlpha": 1.0,
"Interactable": true,
"Enable": true
}
],
"@version": 1
}
},
{
"id": "7af9e538-1713-49f7-a83e-711c0f4b4a3c",
"path": "/ui/ToastGroup/Toast_message",
"componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent,MOD.Core.CanvasGroupComponent",
"jsonString": {
"name": "Toast_message",
"path": "/ui/ToastGroup/Toast_message",
"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": 3,
"AnchorsMax": {
"x": 0.5,
"y": 1.0
},
"AnchorsMin": {
"x": 0.5,
"y": 1.0
},
"MobileOnly": false,
"OffsetMax": {
"x": 106.5,
"y": -24.0
},
"OffsetMin": {
"x": -106.5,
"y": -104.0
},
"Pivot": {
"x": 0.5,
"y": 0.5
},
"RectSize": {
"x": 213.0,
"y": 80.0
},
"UIMode": 1,
"UIScale": {
"x": 1.0,
"y": 1.0,
"z": 1.0
},
"UIVersion": 2,
"anchoredPosition": {
"x": 0.0,
"y": -64.0
},
"Position": {
"x": 0.0,
"y": 476.0,
"z": 0.0
},
"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.SpriteGUIRendererComponent",
"AnimClipPlayType": 0,
"EndFrameIndex": 2147483647,
"ImageRUID": {
"DataId": "7d614552ba7843049bb48ebd4509fb8f"
},
"LocalPosition": {
"x": 0.0,
"y": 0.0
},
"LocalScale": {
"x": 1.0,
"y": 1.0
},
"OverrideSorting": false,
"PlayRate": 1.0,
"PreserveSprite": 0,
"StartFrameIndex": 0,
"Color": {
"r": 1.0,
"g": 1.0,
"b": 1.0,
"a": 0.6
},
"DropShadow": false,
"DropShadowAngle": 30.0,
"DropShadowColor": {
"r": 0.0,
"g": 0.0,
"b": 0.0,
"a": 0.72
},
"DropShadowDistance": 32.0,
"FillAmount": 1.0,
"FillCenter": true,
"FillClockWise": true,
"FillMethod": 0,
"FillOrigin": 0,
"FlipX": false,
"FlipY": false,
"FrameColumn": 1,
"FrameRate": 0,
"FrameRow": 1,
"Outline": false,
"OutlineColor": {
"r": 1.0,
"g": 1.0,
"b": 1.0,
"a": 1.0
},
"OutlineWidth": 3.0,
"RaycastTarget": true,
"Type": 1,
"Enable": true
},
{
"@type": "MOD.Core.TextComponent",
"Alignment": 4,
"Bold": false,
"DropShadow": false,
"DropShadowAngle": 30.0,
"DropShadowColor": {
"r": 0.0,
"g": 0.0,
"b": 0.0,
"a": 0.72
},
"DropShadowDistance": 32.0,
"Font": 0,
"FontColor": {
"r": 1.0,
"g": 1.0,
"b": 1.0,
"a": 1.0
},
"FontSize": 27,
"MaxSize": 40,
"MinSize": 10,
"OutlineColor": {
"r": 0.7,
"g": 0.7,
"b": 0.7,
"a": 1.0
},
"OutlineDistance": {
"x": 1.0,
"y": -1.0
},
"OutlineWidth": 1.0,
"Overflow": 0,
"OverrideSorting": false,
"Padding": {
"left": 50,
"right": 50,
"top": 20,
"bottom": 20
},
"SizeFit": true,
"Text": "message",
"UseOutLine": false,
"Enable": true
},
{
"@type": "MOD.Core.CanvasGroupComponent",
"BlocksRaycasts": true,
"GroupAlpha": 1.0,
"Interactable": true,
"Enable": true
}
],
"@version": 1
}
}
]
}
}