[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M79MCXFZPCQ3GCF8MP6WSFAA":3,"skill-same:01M79MCXFZPCQ3GCF8MP6WSFAA":55},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":29,"commitSha":30,"skillDirectory":5,"forksCount":14,"repositoryHtmlUrl":31,"repositoryHomepageUrl":6,"ownerHtmlUrl":32,"ownerBlogUrl":6,"ownerDescription":33,"updatedAt":34,"install":35,"resources":48},"01M79MCXFZPCQ3GCF8MP6WSFAA","godot-resources",null,"Design data-driven Godot 4.x games with custom Resource classes: define typed data with class_name + @export, save\u002Fload .tres\u002F.res files, instance and duplicate resources, and load on demand with ResourceLoader (incl. threaded loading). Use when modeling items\u002Fstats\u002Fconfigs as data in a Godot project, creating .tres resources, or working with custom Resource subclasses and ResourceLoader\u002FResourceSaver.","mistervaibhav\u002Fskills","mistervaibhav","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F41189028?v=4","01M79KACH05EG9FMM6DQVHAVK9","Vaibhav Singh","01M79KACJB3431Y8CFJQ02MTTM",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Fgodot-resources\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: godot-resources\ndescription: >\n  Design data-driven Godot 4.x games with custom Resource classes: define typed\n  data with class_name + @export, save\u002Fload .tres\u002F.res files, instance and duplicate\n  resources, and load on demand with ResourceLoader (incl. threaded loading). Use\n  when modeling items\u002Fstats\u002Fconfigs as data in a Godot project, creating .tres\n  resources, or working with custom Resource subclasses and ResourceLoader\u002FResourceSaver.\nlicense: Apache-2.0\ncompatibility: Godot 4.3+\nmetadata:\n  engine: godot\n  category: godot\n  difficulty: intermediate\n---\n\n# Godot Resources (4.x)\n\nModel game data as reusable, Inspector-editable `Resource` objects instead of hard-coded\nvalues, and load\u002Fsave them as `.tres`\u002F`.res`. Targets **Godot 4.3+**.\n\n## When to use\n\n- Use when representing items, stats, enemy configs, dialogue lines, or level metadata as\n  data; authoring `.tres` files in the Inspector; or loading\u002Fsaving custom resources.\n\n**When *not* to use:** nodes\u002Fscene structure → `godot-nodes-scenes`; saving the player's\n*runtime progress* (engine-agnostic save format\u002Fslots) → `save-systems`; the C# variant of\nthis pattern → `godot-csharp`.\n\n## Core workflow\n\n1. **Subclass `Resource`** with `class_name` and `@export` fields. It now appears in the\n   \"New Resource\" dialog and as an `@export` type, editable in the Inspector.\n2. **Create instances as `.tres`** files in the FileSystem dock (text, diff-friendly) or\n   `.res` (binary, smaller\u002Ffaster). Edit their fields in the Inspector — no code needed.\n3. **Reference resources from nodes** via `@export var data: ItemResource`, or arrays\n   `@export var loot: Array[ItemResource]`.\n4. **Load at runtime** with `preload` (constant path) or `load`\u002F`ResourceLoader.load`\n   (variable path). Use threaded loading for large assets.\n5. **Duplicate before mutating** a shared resource at runtime, or every node using it\n   changes too (resources are shared references).\n6. **Save generated\u002Fedited resources** with `ResourceSaver.save`.\n\n## Patterns\n\n### 1. A custom data resource\n\n```gdscript\n# item.gd\nextends Resource\nclass_name ItemResource\n\n@export var id: StringName = &\"\"\n@export var display_name: String = \"Item\"\n@export_multiline var description: String = \"\"\n@export var icon: Texture2D\n@export var max_stack: int = 99\n@export var value: int = 0\n```\n\nCreate `sword.tres` from this class in the FileSystem dock and fill it in the Inspector.\n\n### 2. Consume resources from a node\n\n```gdscript\nextends Node\n@export var starting_items: Array[ItemResource] = []   # drag .tres files in the Inspector\n\nfunc _ready() -> void:\n    for item in starting_items:\n        print(\"Have: %s (x%d max)\" % [item.display_name, item.max_stack])\n```\n\n### 3. Duplicate before mutating shared data\n\n```gdscript\nfunc give_unique_copy(template: ItemResource) -> ItemResource:\n    # true = deep copy sub-resources too; false = shallow (shares sub-resources).\n    var copy: ItemResource = template.duplicate(true)\n    copy.value += 5                # mutating the copy won't touch the template .tres\n    return copy\n```\n\n### 4. Save and load a resource at runtime\n\n```gdscript\nfunc save_config(cfg: Resource) -> void:\n    ResourceSaver.save(cfg, \"user:\u002F\u002Fconfig.tres\")   # user:\u002F\u002F = writable app data dir\n\nfunc load_config() -> Resource:\n    if ResourceLoader.exists(\"user:\u002F\u002Fconfig.tres\"):\n        return ResourceLoader.load(\"user:\u002F\u002Fconfig.tres\")\n    return null\n```\n\n## Pitfalls\n\n- **Resources are shared by reference.** A single `.tres` assigned to many nodes is the\n  *same* object — mutating it changes all of them (and re-saving the file). Call\n  `duplicate(true)` for per-instance state.\n- **`class_name` required to instance from the editor.** Without it the class won't appear\n  in the \"New Resource\" dialog or as an `@export` type.\n- **`res:\u002F\u002F` is read-only in exported games.** Write runtime data to `user:\u002F\u002F`, never\n  `res:\u002F\u002F`. `ResourceSaver.save` to `res:\u002F\u002F` only works in the editor.\n- **Storing nodes in a Resource doesn't serialize them.** Resources hold data, not live\n  scene nodes. Reference scenes via `PackedScene`, not node instances.\n- **Cyclic resource references** (A holds B holds A) can fail to save\u002Fload cleanly — keep\n  data graphs acyclic or use IDs\u002Flookups.\n- **`preload` vs `load`.** `preload` needs a constant path and loads with the script;\n  `load` accepts a variable path at runtime. Use `ResourceLoader.exists()` before `load`\n  to avoid errors on missing files.\n- **Don't put secrets in `.tres`** — they ship in plain text inside the export.\n\n## References\n\n- For threaded\u002Fbackground loading (`load_threaded_request`), `@tool` resources with custom\n  setup, custom `ResourceFormatLoader`\u002F`Saver`, resource-local-to-scene, and resource UIDs,\n  read `references\u002Fresource-patterns.md`.\n\n## Related skills\n\n- `godot-gdscript` — `@export` annotations used to define resource fields.\n- `godot-nodes-scenes` — instancing scenes vs. sharing resource data.\n- `save-systems` — persisting runtime progress (separate from static data).\n- `unity-scriptableobjects` — the equivalent data-asset pattern in Unity.\n","# Godot Resources (4.x)\n\nModel game data as reusable, Inspector-editable `Resource` objects instead of hard-coded\nvalues, and load\u002Fsave them as `.tres`\u002F`.res`. Targets **Godot 4.3+**.\n\n## When to use\n\n- Use when representing items, stats, enemy configs, dialogue lines, or level metadata as\n  data; authoring `.tres` files in the Inspector; or loading\u002Fsaving custom resources.\n\n**When *not* to use:** nodes\u002Fscene structure → `godot-nodes-scenes`; saving the player's\n*runtime progress* (engine-agnostic save format\u002Fslots) → `save-systems`; the C# variant of\nthis pattern → `godot-csharp`.\n\n## Core workflow\n\n1. **Subclass `Resource`** with `class_name` and `@export` fields. It now appears in the\n   \"New Resource\" dialog and as an `@export` type, editable in the Inspector.\n2. **Create instances as `.tres`** files in the FileSystem dock (text, diff-friendly) or\n   `.res` (binary, smaller\u002Ffaster). Edit their fields in the Inspector — no code needed.\n3. **Reference resources from nodes** via `@export var data: ItemResource`, or arrays\n   `@export var loot: Array[ItemResource]`.\n4. **Load at runtime** with `preload` (constant path) or `load`\u002F`ResourceLoader.load`\n   (variable path). Use threaded loading for large assets.\n5. **Duplicate before mutating** a shared resource at runtime, or every node using it\n   changes too (resources are shared references).\n6. **Save generated\u002Fedited resources** with `ResourceSaver.save`.\n\n## Patterns\n\n### 1. A custom data resource\n\n```gdscript\n# item.gd\nextends Resource\nclass_name ItemResource\n\n@export var id: StringName = &\"\"\n@export var display_name: String = \"Item\"\n@export_multiline var description: String = \"\"\n@export var icon: Texture2D\n@export var max_stack: int = 99\n@export var value: int = 0\n```\n\nCreate `sword.tres` from this class in the FileSystem dock and fill it in the Inspector.\n\n### 2. Consume resources from a node\n\n```gdscript\nextends Node\n@export var starting_items: Array[ItemResource] = []   # drag .tres files in the Inspector\n\nfunc _ready() -> void:\n    for item in starting_items:\n        print(\"Have: %s (x%d max)\" % [item.display_name, item.max_stack])\n```\n\n### 3. Duplicate before mutating shared data\n\n```gdscript\nfunc give_unique_copy(template: ItemResource) -> ItemResource:\n    # true = deep copy sub-resources too; false = shallow (shares sub-resources).\n    var copy: ItemResource = template.duplicate(true)\n    copy.value += 5                # mutating the copy won't touch the template .tres\n    return copy\n```\n\n### 4. Save and load a resource at runtime\n\n```gdscript\nfunc save_config(cfg: Resource) -> void:\n    ResourceSaver.save(cfg, \"user:\u002F\u002Fconfig.tres\")   # user:\u002F\u002F = writable app data dir\n\nfunc load_config() -> Resource:\n    if ResourceLoader.exists(\"user:\u002F\u002Fconfig.tres\"):\n        return ResourceLoader.load(\"user:\u002F\u002Fconfig.tres\")\n    return null\n```\n\n## Pitfalls\n\n- **Resources are shared by reference.** A single `.tres` assigned to many nodes is the\n  *same* object — mutating it changes all of them (and re-saving the file). Call\n  `duplicate(true)` for per-instance state.\n- **`class_name` required to instance from the editor.** Without it the class won't appear\n  in the \"New Resource\" dialog or as an `@export` type.\n- **`res:\u002F\u002F` is read-only in exported games.** Write runtime data to `user:\u002F\u002F`, never\n  `res:\u002F\u002F`. `ResourceSaver.save` to `res:\u002F\u002F` only works in the editor.\n- **Storing nodes in a Resource doesn't serialize them.** Resources hold data, not live\n  scene nodes. Reference scenes via `PackedScene`, not node instances.\n- **Cyclic resource references** (A holds B holds A) can fail to save\u002Fload cleanly — keep\n  data graphs acyclic or use IDs\u002Flookups.\n- **`preload` vs `load`.** `preload` needs a constant path and loads with the script;\n  `load` accepts a variable path at runtime. Use `ResourceLoader.exists()` before `load`\n  to avoid errors on missing files.\n- **Don't put secrets in `.tres`** — they ship in plain text inside the export.\n\n## References\n\n- For threaded\u002Fbackground loading (`load_threaded_request`), `@tool` resources with custom\n  setup, custom `ResourceFormatLoader`\u002F`Saver`, resource-local-to-scene, and resource UIDs,\n  read `references\u002Fresource-patterns.md`.\n\n## Related skills\n\n- `godot-gdscript` — `@export` annotations used to define resource fields.\n- `godot-nodes-scenes` — instancing scenes vs. sharing resource data.\n- `save-systems` — persisting runtime progress (separate from static data).\n- `unity-scriptableobjects` — the equivalent data-asset pattern in Unity.\n",{"name":5,"license":15,"metadata":24,"description":27,"compatibility":28},{"engine":25,"category":25,"difficulty":26},"godot","intermediate","Design data-driven Godot 4.x games with custom Resource classes: define typed data with class_name + @export, save\u002Fload .tres\u002F.res files, instance and duplicate resources, and load on demand with ResourceLoader (incl. threaded loading). Use when modeling items\u002Fstats\u002Fconfigs as data in a Godot project, creating .tres resources, or working with custom Resource subclasses and ResourceLoader\u002FResourceSaver.\n","Godot 4.3+","main","6d4e3296d58b2720c5b1026197cd069b1dde4789","https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills","https:\u002F\u002Fgithub.com\u002Fmistervaibhav","Software Engineer","2026-07-24 17:16:42",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add mistervaibhav\u002Fskills --skill godot-resources",{"tool":41,"command":42},"bunx","bunx skills add mistervaibhav\u002Fskills --skill godot-resources",{"tool":44,"command":45},"pnpm","pnpm dlx skills add mistervaibhav\u002Fskills --skill godot-resources","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Fgodot-resources\u002FSKILL.md",true,[49],{"path":50,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":53,"sourceHtmlUrl":54},"references\u002Fresource-patterns.md","REFERENCE","参考文档",3273,"https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Fgodot-resources\u002Freferences\u002Fresource-patterns.md",[56,64,72,80,87,94],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":60,"sourceHtmlUrl":61,"categories":62,"keywords":63,"publishedAt":19},"01M79NZDV5781GA6SJMN1QPXB4","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Fwebapp-testing\u002FSKILL.md",[],[],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M79NZ8SEVWT4WYD49BV980YW","web-typography","Select, pair, and implement typefaces for web projects. Use when the user mentions \"font pairing\", \"which typeface\", \"line height\", \"responsive typography\", \"web font loading\", or \"type hierarchy\". Covers readability evaluation, CSS implementation, and performance optimization. For overall UI design systems, see refactoring-ui. For dramatic typographic experiences, see top-design.","MIT","https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Fweb-typography\u002FSKILL.md",[],[],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":68,"licenseFileUrl":76,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M79NYVQS5NYHH36NXF2AHP8B","web-haptics","Add haptic feedback to web apps using the web-haptics library. Use when building mobile-facing UIs that need tactile feedback on buttons, toggles, forms, pickers, and other interactive elements.","https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Fweb-haptics\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Fweb-haptics\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":19},"01M79NY8AMC62DDRSH21WKXJVE","visual-novel","Build a visual novel: a branching script, character and background display, a text box with choices, save\u002Fload, backlog, and skip\u002Fauto. Use for a VN, dating sim, or branching story game.","https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Fvisual-novel\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M79NWFM5R9QC9Y2AT40EHF44","ux-heuristics","Evaluate and improve interface usability using heuristic analysis. Use when the user mentions \"usability audit\", \"UX review\", \"users are confused\", \"heuristic evaluation\", \"form usability\", or \"navigation problems\". Covers Nielsen's 10 heuristics, severity ratings, and information architecture. For visual design fixes, see refactoring-ui. For conversion-focused audits, see cro-methodology.","https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Fux-heuristics\u002FSKILL.md",[],[],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":19},"01M79NVSG7AB3MSFT8Y6EEHG1B","unreal-packaging","Package and ship an Unreal Engine 5 project: the Platforms menu Package Project flow, build configurations (Development vs Shipping), cooking content, packaging settings and the Game Default Map, and command-line builds with RunUAT BuildCookRun. Use when packaging a build, making a shipping build, cooking content, configuring packaging settings, or when the user mentions package Unreal, cook content, shipping build, or BuildCookRun.","https:\u002F\u002Fgithub.com\u002Fmistervaibhav\u002Fskills\u002Fblob\u002Fmain\u002Funreal-packaging\u002FSKILL.md",[],[]]