cfsa-antigravity 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.mjs +324 -0
- package/package.json +34 -0
- package/template/.agent/instructions/commands.md +48 -0
- package/template/.agent/instructions/patterns.md +61 -0
- package/template/.agent/instructions/structure.md +29 -0
- package/template/.agent/instructions/tech-stack.md +43 -0
- package/template/.agent/instructions/workflow.md +41 -0
- package/template/.agent/kit-sync.md +15 -0
- package/template/.agent/rules/boundary-not-placeholder.md +146 -0
- package/template/.agent/rules/completion-checklist.md +48 -0
- package/template/.agent/rules/decision-classification.md +103 -0
- package/template/.agent/rules/extensibility.md +47 -0
- package/template/.agent/rules/question-vs-command.md +81 -0
- package/template/.agent/rules/security-first.md +43 -0
- package/template/.agent/rules/specificity-standards.md +54 -0
- package/template/.agent/rules/tdd-contract-first.md +57 -0
- package/template/.agent/rules/vertical-slices.md +42 -0
- package/template/.agent/skill-library/MANIFEST.md +480 -0
- package/template/.agent/skill-library/README.md +38 -0
- package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
- package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
- package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
- package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
- package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
- package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
- package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
- package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
- package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
- package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
- package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
- package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
- package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
- package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
- package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
- package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
- package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
- package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
- package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
- package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
- package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
- package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
- package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
- package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
- package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
- package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
- package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
- package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
- package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
- package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
- package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
- package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
- package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
- package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
- package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
- package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
- package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
- package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
- package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
- package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
- package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
- package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
- package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
- package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
- package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
- package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
- package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
- package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
- package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
- package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
- package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
- package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
- package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
- package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
- package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
- package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
- package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
- package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
- package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
- package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
- package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
- package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
- package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
- package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
- package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
- package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
- package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
- package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
- package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
- package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
- package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
- package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
- package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
- package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
- package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
- package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
- package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
- package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
- package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
- package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
- package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
- package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
- package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
- package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
- package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
- package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
- package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
- package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
- package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
- package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
- package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
- package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
- package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
- package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
- package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
- package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
- package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
- package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
- package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
- package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
- package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
- package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
- package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
- package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
- package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
- package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
- package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
- package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
- package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
- package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
- package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
- package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
- package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
- package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
- package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
- package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
- package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
- package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
- package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
- package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
- package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
- package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
- package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
- package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
- package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
- package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
- package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
- package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
- package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
- package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
- package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
- package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
- package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
- package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
- package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
- package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
- package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
- package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
- package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
- package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
- package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
- package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
- package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
- package/template/.agent/skills/accessibility/SKILL.md +522 -0
- package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
- package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
- package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
- package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
- package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
- package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/template/.agent/skills/api-versioning/SKILL.md +420 -0
- package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
- package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
- package/template/.agent/skills/brainstorming/SKILL.md +236 -0
- package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
- package/template/.agent/skills/clean-code/SKILL.md +94 -0
- package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
- package/template/.agent/skills/concise-planning/SKILL.md +68 -0
- package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
- package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
- package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
- package/template/.agent/skills/design-direction/SKILL.md +45 -0
- package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
- package/template/.agent/skills/find-skills/SKILL.md +145 -0
- package/template/.agent/skills/git-advanced/SKILL.md +972 -0
- package/template/.agent/skills/git-workflow/SKILL.md +420 -0
- package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
- package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
- package/template/.agent/skills/migration-management/SKILL.md +384 -0
- package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
- package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
- package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
- package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
- package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
- package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
- package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
- package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
- package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
- package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
- package/template/.agent/skills/prd-templates/SKILL.md +88 -0
- package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
- package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
- package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
- package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
- package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
- package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
- package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
- package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
- package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
- package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
- package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
- package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
- package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
- package/template/.agent/skills/prompt-engineer/README.md +659 -0
- package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
- package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
- package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
- package/template/.agent/skills/session-continuity/SKILL.md +730 -0
- package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
- package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
- package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
- package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
- package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
- package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
- package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
- package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
- package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
- package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
- package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
- package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.agent/skills/skill-creator/README.md +270 -0
- package/template/.agent/skills/skill-creator/SKILL.md +590 -0
- package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
- package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
- package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
- package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
- package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/template/.agent/skills/spec-writing/SKILL.md +110 -0
- package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
- package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
- package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
- package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
- package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
- package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
- package/template/.agent/skills/technical-writer/SKILL.md +242 -0
- package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
- package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
- package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
- package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
- package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
- package/template/.agent/workflows/audit-ambiguity.md +64 -0
- package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
- package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
- package/template/.agent/workflows/bootstrap-agents.md +66 -0
- package/template/.agent/workflows/create-prd-architecture.md +119 -0
- package/template/.agent/workflows/create-prd-compile.md +138 -0
- package/template/.agent/workflows/create-prd-design-system.md +135 -0
- package/template/.agent/workflows/create-prd-security.md +113 -0
- package/template/.agent/workflows/create-prd-stack.md +91 -0
- package/template/.agent/workflows/create-prd.md +168 -0
- package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
- package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
- package/template/.agent/workflows/decompose-architecture.md +111 -0
- package/template/.agent/workflows/evolve-contract.md +98 -0
- package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
- package/template/.agent/workflows/evolve-feature-classify.md +116 -0
- package/template/.agent/workflows/evolve-feature.md +56 -0
- package/template/.agent/workflows/ideate-discover.md +144 -0
- package/template/.agent/workflows/ideate-extract.md +129 -0
- package/template/.agent/workflows/ideate-validate.md +117 -0
- package/template/.agent/workflows/ideate.md +113 -0
- package/template/.agent/workflows/implement-slice-setup.md +113 -0
- package/template/.agent/workflows/implement-slice-tdd.md +198 -0
- package/template/.agent/workflows/implement-slice.md +50 -0
- package/template/.agent/workflows/plan-phase.md +202 -0
- package/template/.agent/workflows/propagate-decision-apply.md +135 -0
- package/template/.agent/workflows/propagate-decision-scan.md +147 -0
- package/template/.agent/workflows/propagate-decision.md +56 -0
- package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
- package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
- package/template/.agent/workflows/remediate-pipeline.md +55 -0
- package/template/.agent/workflows/resolve-ambiguity.md +82 -0
- package/template/.agent/workflows/sync-kit.md +209 -0
- package/template/.agent/workflows/update-architecture-map.md +74 -0
- package/template/.agent/workflows/validate-phase.md +219 -0
- package/template/.agent/workflows/verify-infrastructure.md +207 -0
- package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
- package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
- package/template/.agent/workflows/write-architecture-spec.md +63 -0
- package/template/.agent/workflows/write-be-spec-classify.md +165 -0
- package/template/.agent/workflows/write-be-spec-write.md +98 -0
- package/template/.agent/workflows/write-be-spec.md +76 -0
- package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
- package/template/.agent/workflows/write-fe-spec-write.md +94 -0
- package/template/.agent/workflows/write-fe-spec.md +71 -0
- package/template/AGENTS.md +176 -0
- package/template/GEMINI.md +177 -0
- package/template/docs/README.md +187 -0
- package/template/docs/audits/.gitkeep +0 -0
- package/template/docs/audits/README.md +10 -0
- package/template/docs/plans/.gitkeep +0 -0
- package/template/docs/plans/README.md +21 -0
- package/template/docs/plans/be/.gitkeep +0 -0
- package/template/docs/plans/be/README.md +11 -0
- package/template/docs/plans/fe/.gitkeep +0 -0
- package/template/docs/plans/fe/README.md +11 -0
- package/template/docs/plans/ia/.gitkeep +0 -0
- package/template/docs/plans/ia/README.md +17 -0
- package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
- package/template/docs/plans/ia/deep-dives/README.md +5 -0
- package/template/docs/plans/phases/.gitkeep +0 -0
- package/template/docs/plans/phases/README.md +11 -0
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: godot
|
|
3
|
+
description: "Expert Godot 4.x engine guide covering GDScript best practices (static typing, signals, exports, @onready), scene tree architecture, node composition patterns, physics (CharacterBody2D/3D, Area, RigidBody), navigation (NavigationAgent), networking (MultiplayerSynchronizer, RPCs), resource management, animation (AnimationPlayer, AnimationTree, Tweens), UI (Control nodes, themes), and export/deployment. Use when building games or interactive applications with Godot Engine."
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Godot 4.x Expert Guide
|
|
8
|
+
|
|
9
|
+
> Use this skill when designing Godot projects, writing GDScript, structuring scene trees, implementing physics, networking, or UI. Targets Godot 4.x with GDScript (not C# or GDExtension).
|
|
10
|
+
|
|
11
|
+
## When to Use This Skill
|
|
12
|
+
|
|
13
|
+
- Building 2D or 3D games with Godot Engine
|
|
14
|
+
- Designing scene tree architecture and node hierarchies
|
|
15
|
+
- Implementing player controllers, AI, or physics interactions
|
|
16
|
+
- Setting up multiplayer/networking
|
|
17
|
+
- Creating UI systems with Control nodes
|
|
18
|
+
- Optimizing game performance
|
|
19
|
+
|
|
20
|
+
## When NOT to Use This Skill
|
|
21
|
+
|
|
22
|
+
- Unity or Unreal Engine projects
|
|
23
|
+
- Non-game Godot applications using C# → use C#-specific patterns
|
|
24
|
+
- Web-only applications → use a frontend framework
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. GDScript Best Practices (CRITICAL)
|
|
29
|
+
|
|
30
|
+
### Class Declaration Order
|
|
31
|
+
|
|
32
|
+
Follow the official style guide ordering:
|
|
33
|
+
|
|
34
|
+
```gdscript
|
|
35
|
+
class_name Player
|
|
36
|
+
extends CharacterBody2D
|
|
37
|
+
|
|
38
|
+
## Emitted when the player takes damage.
|
|
39
|
+
signal health_changed(new_health: int)
|
|
40
|
+
signal died
|
|
41
|
+
|
|
42
|
+
enum State { IDLE, RUN, JUMP, ATTACK }
|
|
43
|
+
|
|
44
|
+
const MAX_HEALTH: int = 100
|
|
45
|
+
const GRAVITY: float = 980.0
|
|
46
|
+
|
|
47
|
+
@export_group("Movement")
|
|
48
|
+
@export var move_speed: float = 200.0
|
|
49
|
+
@export var jump_force: float = -400.0
|
|
50
|
+
|
|
51
|
+
@export_group("Combat")
|
|
52
|
+
@export var attack_power: int = 25
|
|
53
|
+
@export var defense: int = 15
|
|
54
|
+
|
|
55
|
+
var health: int = MAX_HEALTH:
|
|
56
|
+
set(value):
|
|
57
|
+
health = clampi(value, 0, MAX_HEALTH)
|
|
58
|
+
health_changed.emit(health)
|
|
59
|
+
if health <= 0:
|
|
60
|
+
died.emit()
|
|
61
|
+
|
|
62
|
+
var _state: State = State.IDLE
|
|
63
|
+
var _velocity_cache: Vector2 = Vector2.ZERO
|
|
64
|
+
|
|
65
|
+
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
|
66
|
+
@onready var sprite: Sprite2D = $Sprite2D
|
|
67
|
+
@onready var collision: CollisionShape2D = $CollisionShape2D
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
func _ready() -> void:
|
|
71
|
+
pass
|
|
72
|
+
|
|
73
|
+
func _physics_process(delta: float) -> void:
|
|
74
|
+
pass
|
|
75
|
+
|
|
76
|
+
func _unhandled_input(event: InputEvent) -> void:
|
|
77
|
+
pass
|
|
78
|
+
|
|
79
|
+
# Public methods
|
|
80
|
+
func take_damage(amount: int) -> void:
|
|
81
|
+
health -= max(0, amount - defense)
|
|
82
|
+
|
|
83
|
+
# Private methods
|
|
84
|
+
func _update_animation() -> void:
|
|
85
|
+
pass
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Static Typing
|
|
89
|
+
|
|
90
|
+
**Always use static typing.** It catches bugs at parse time and enables editor autocompletion:
|
|
91
|
+
|
|
92
|
+
```gdscript
|
|
93
|
+
# ✅ Typed
|
|
94
|
+
var speed: float = 300.0
|
|
95
|
+
var items: Array[Item] = []
|
|
96
|
+
var target: Node2D = null
|
|
97
|
+
func get_damage() -> int:
|
|
98
|
+
return attack_power
|
|
99
|
+
|
|
100
|
+
# ❌ Untyped
|
|
101
|
+
var speed = 300.0
|
|
102
|
+
var items = []
|
|
103
|
+
func get_damage():
|
|
104
|
+
return attack_power
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
> Enable `Text Editor > Completion > Add Type Hints` in Editor Settings.
|
|
108
|
+
|
|
109
|
+
### Signals
|
|
110
|
+
|
|
111
|
+
Prefer signals over direct references for decoupling:
|
|
112
|
+
|
|
113
|
+
```gdscript
|
|
114
|
+
# ✅ Signal-based communication
|
|
115
|
+
signal coin_collected(value: int)
|
|
116
|
+
|
|
117
|
+
func _on_pickup_area_body_entered(body: Node2D) -> void:
|
|
118
|
+
if body is Player:
|
|
119
|
+
coin_collected.emit(coin_value)
|
|
120
|
+
queue_free()
|
|
121
|
+
|
|
122
|
+
# Connect in parent scene
|
|
123
|
+
func _ready() -> void:
|
|
124
|
+
coin.coin_collected.connect(_on_coin_collected)
|
|
125
|
+
|
|
126
|
+
func _on_coin_collected(value: int) -> void:
|
|
127
|
+
score += value
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Export Variables
|
|
131
|
+
|
|
132
|
+
Use `@export` with type hints and grouping for editor usability:
|
|
133
|
+
|
|
134
|
+
```gdscript
|
|
135
|
+
@export_group("Stats")
|
|
136
|
+
@export var max_health: int = 100
|
|
137
|
+
@export_range(0.0, 1.0, 0.05) var crit_chance: float = 0.1
|
|
138
|
+
@export var character_class: StringName = &"Warrior"
|
|
139
|
+
|
|
140
|
+
@export_group("References")
|
|
141
|
+
@export var projectile_scene: PackedScene
|
|
142
|
+
@export_file("*.json") var config_path: String
|
|
143
|
+
@export_node_path("Area2D") var hitbox_path: NodePath
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 2. Scene Tree Architecture (CRITICAL)
|
|
149
|
+
|
|
150
|
+
### Composition Over Inheritance
|
|
151
|
+
|
|
152
|
+
Build game entities by composing nodes, not deep inheritance chains:
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
Player (CharacterBody2D)
|
|
156
|
+
├── Sprite2D
|
|
157
|
+
├── CollisionShape2D
|
|
158
|
+
├── AnimationPlayer
|
|
159
|
+
├── HitboxComponent (Area2D)
|
|
160
|
+
│ └── CollisionShape2D
|
|
161
|
+
├── HurtboxComponent (Area2D)
|
|
162
|
+
│ └── CollisionShape2D
|
|
163
|
+
├── HealthComponent (Node)
|
|
164
|
+
├── StateMachine (Node)
|
|
165
|
+
│ ├── IdleState
|
|
166
|
+
│ ├── RunState
|
|
167
|
+
│ └── AttackState
|
|
168
|
+
└── NavigationAgent2D
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Reusable Components
|
|
172
|
+
|
|
173
|
+
Extract shared behaviors into reusable scenes:
|
|
174
|
+
|
|
175
|
+
```gdscript
|
|
176
|
+
# health_component.gd
|
|
177
|
+
class_name HealthComponent
|
|
178
|
+
extends Node
|
|
179
|
+
|
|
180
|
+
signal health_changed(current: int, maximum: int)
|
|
181
|
+
signal died
|
|
182
|
+
|
|
183
|
+
@export var max_health: int = 100
|
|
184
|
+
var current_health: int
|
|
185
|
+
|
|
186
|
+
func _ready() -> void:
|
|
187
|
+
current_health = max_health
|
|
188
|
+
|
|
189
|
+
func take_damage(amount: int) -> void:
|
|
190
|
+
current_health = max(0, current_health - amount)
|
|
191
|
+
health_changed.emit(current_health, max_health)
|
|
192
|
+
if current_health <= 0:
|
|
193
|
+
died.emit()
|
|
194
|
+
|
|
195
|
+
func heal(amount: int) -> void:
|
|
196
|
+
current_health = min(max_health, current_health + amount)
|
|
197
|
+
health_changed.emit(current_health, max_health)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Autoloads (Singletons)
|
|
201
|
+
|
|
202
|
+
Use sparingly for truly global systems:
|
|
203
|
+
|
|
204
|
+
```gdscript
|
|
205
|
+
# game_manager.gd — registered as Autoload "GameManager"
|
|
206
|
+
extends Node
|
|
207
|
+
|
|
208
|
+
signal game_paused
|
|
209
|
+
signal game_resumed
|
|
210
|
+
|
|
211
|
+
var score: int = 0
|
|
212
|
+
var is_paused: bool = false
|
|
213
|
+
|
|
214
|
+
func pause_game() -> void:
|
|
215
|
+
is_paused = true
|
|
216
|
+
get_tree().paused = true
|
|
217
|
+
game_paused.emit()
|
|
218
|
+
|
|
219
|
+
func resume_game() -> void:
|
|
220
|
+
is_paused = false
|
|
221
|
+
get_tree().paused = false
|
|
222
|
+
game_resumed.emit()
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
> **Rule**: Only Autoload managers for global state (AudioManager, GameManager, SaveManager). Never Autoload game entities.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 3. Physics & Movement
|
|
230
|
+
|
|
231
|
+
### CharacterBody2D/3D
|
|
232
|
+
|
|
233
|
+
```gdscript
|
|
234
|
+
extends CharacterBody2D
|
|
235
|
+
|
|
236
|
+
@export var speed: float = 300.0
|
|
237
|
+
@export var jump_force: float = -400.0
|
|
238
|
+
@export var gravity: float = 980.0
|
|
239
|
+
|
|
240
|
+
func _physics_process(delta: float) -> void:
|
|
241
|
+
# Gravity
|
|
242
|
+
if not is_on_floor():
|
|
243
|
+
velocity.y += gravity * delta
|
|
244
|
+
|
|
245
|
+
# Jump
|
|
246
|
+
if Input.is_action_just_pressed("jump") and is_on_floor():
|
|
247
|
+
velocity.y = jump_force
|
|
248
|
+
|
|
249
|
+
# Horizontal movement
|
|
250
|
+
var direction: float = Input.get_axis("move_left", "move_right")
|
|
251
|
+
velocity.x = direction * speed
|
|
252
|
+
|
|
253
|
+
move_and_slide()
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### Area2D for Detection
|
|
257
|
+
|
|
258
|
+
```gdscript
|
|
259
|
+
# hitbox_component.gd
|
|
260
|
+
extends Area2D
|
|
261
|
+
|
|
262
|
+
@export var damage: int = 10
|
|
263
|
+
|
|
264
|
+
func _on_body_entered(body: Node2D) -> void:
|
|
265
|
+
if body.has_method("take_damage"):
|
|
266
|
+
body.take_damage(damage)
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Navigation
|
|
270
|
+
|
|
271
|
+
```gdscript
|
|
272
|
+
extends CharacterBody2D
|
|
273
|
+
|
|
274
|
+
@export var speed: float = 200.0
|
|
275
|
+
@onready var nav_agent: NavigationAgent2D = $NavigationAgent2D
|
|
276
|
+
|
|
277
|
+
func set_target(target_pos: Vector2) -> void:
|
|
278
|
+
nav_agent.target_position = target_pos
|
|
279
|
+
|
|
280
|
+
func _physics_process(delta: float) -> void:
|
|
281
|
+
if nav_agent.is_navigation_finished():
|
|
282
|
+
return
|
|
283
|
+
|
|
284
|
+
var next_pos: Vector2 = nav_agent.get_next_path_position()
|
|
285
|
+
var direction: Vector2 = global_position.direction_to(next_pos)
|
|
286
|
+
velocity = direction * speed
|
|
287
|
+
move_and_slide()
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
> **Tip**: For 100+ AI agents, enable `NavigationAgent.avoidance_enabled` and time-slice pathfinding over multiple frames.
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## 4. State Machines
|
|
295
|
+
|
|
296
|
+
```gdscript
|
|
297
|
+
# state_machine.gd
|
|
298
|
+
class_name StateMachine
|
|
299
|
+
extends Node
|
|
300
|
+
|
|
301
|
+
@export var initial_state: State
|
|
302
|
+
var current_state: State
|
|
303
|
+
|
|
304
|
+
func _ready() -> void:
|
|
305
|
+
for child in get_children():
|
|
306
|
+
if child is State:
|
|
307
|
+
child.state_machine = self
|
|
308
|
+
current_state = initial_state
|
|
309
|
+
current_state.enter()
|
|
310
|
+
|
|
311
|
+
func _physics_process(delta: float) -> void:
|
|
312
|
+
current_state.physics_update(delta)
|
|
313
|
+
|
|
314
|
+
func _unhandled_input(event: InputEvent) -> void:
|
|
315
|
+
current_state.handle_input(event)
|
|
316
|
+
|
|
317
|
+
func transition_to(target_state: State) -> void:
|
|
318
|
+
current_state.exit()
|
|
319
|
+
current_state = target_state
|
|
320
|
+
current_state.enter()
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
```gdscript
|
|
324
|
+
# state.gd
|
|
325
|
+
class_name State
|
|
326
|
+
extends Node
|
|
327
|
+
|
|
328
|
+
var state_machine: StateMachine
|
|
329
|
+
|
|
330
|
+
func enter() -> void: pass
|
|
331
|
+
func exit() -> void: pass
|
|
332
|
+
func handle_input(_event: InputEvent) -> void: pass
|
|
333
|
+
func physics_update(_delta: float) -> void: pass
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## 5. Resources (Data-Driven Design)
|
|
339
|
+
|
|
340
|
+
```gdscript
|
|
341
|
+
# weapon_data.gd
|
|
342
|
+
class_name WeaponData
|
|
343
|
+
extends Resource
|
|
344
|
+
|
|
345
|
+
@export var name: StringName
|
|
346
|
+
@export var damage: int
|
|
347
|
+
@export var attack_speed: float
|
|
348
|
+
@export var projectile_scene: PackedScene
|
|
349
|
+
@export var icon: Texture2D
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
Create `.tres` files in the editor to define weapon variations without code changes:
|
|
353
|
+
|
|
354
|
+
```gdscript
|
|
355
|
+
# Usage in a weapon node
|
|
356
|
+
@export var weapon_data: WeaponData
|
|
357
|
+
|
|
358
|
+
func attack() -> void:
|
|
359
|
+
var projectile = weapon_data.projectile_scene.instantiate()
|
|
360
|
+
projectile.damage = weapon_data.damage
|
|
361
|
+
get_tree().current_scene.add_child(projectile)
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## 6. Networking (Multiplayer)
|
|
367
|
+
|
|
368
|
+
### High-Level Multiplayer
|
|
369
|
+
|
|
370
|
+
```gdscript
|
|
371
|
+
# lobby.gd
|
|
372
|
+
extends Node
|
|
373
|
+
|
|
374
|
+
var peer: ENetMultiplayerPeer = ENetMultiplayerPeer.new()
|
|
375
|
+
|
|
376
|
+
func host_game(port: int = 7000) -> void:
|
|
377
|
+
peer.create_server(port)
|
|
378
|
+
multiplayer.multiplayer_peer = peer
|
|
379
|
+
multiplayer.peer_connected.connect(_on_peer_connected)
|
|
380
|
+
|
|
381
|
+
func join_game(address: String, port: int = 7000) -> void:
|
|
382
|
+
peer.create_client(address, port)
|
|
383
|
+
multiplayer.multiplayer_peer = peer
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### MultiplayerSynchronizer
|
|
387
|
+
|
|
388
|
+
Sync only essential state — never position every frame:
|
|
389
|
+
|
|
390
|
+
```gdscript
|
|
391
|
+
# In scene: MultiplayerSynchronizer node
|
|
392
|
+
# Sync properties: health, mana, state
|
|
393
|
+
# Do NOT sync: position (use client-side prediction at 10-20Hz corrections)
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### RPCs
|
|
397
|
+
|
|
398
|
+
```gdscript
|
|
399
|
+
@rpc("any_peer", "call_local", "reliable")
|
|
400
|
+
func deal_damage(target_id: int, amount: int) -> void:
|
|
401
|
+
if multiplayer.is_server():
|
|
402
|
+
var target = get_node_or_null(str(target_id))
|
|
403
|
+
if target:
|
|
404
|
+
target.take_damage(amount)
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
> **Rule**: Client sends *intent* ("I cast spell Q at direction V"), server validates and calculates results. Never trust client-computed damage.
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## 7. Animation
|
|
412
|
+
|
|
413
|
+
### AnimationPlayer + AnimationTree
|
|
414
|
+
|
|
415
|
+
```gdscript
|
|
416
|
+
@onready var anim_tree: AnimationTree = $AnimationTree
|
|
417
|
+
@onready var state_machine: AnimationNodeStateMachinePlayback = anim_tree["parameters/playback"]
|
|
418
|
+
|
|
419
|
+
func _physics_process(delta: float) -> void:
|
|
420
|
+
anim_tree["parameters/blend_position"] = velocity.normalized()
|
|
421
|
+
|
|
422
|
+
if is_attacking:
|
|
423
|
+
state_machine.travel("attack")
|
|
424
|
+
elif velocity.length() > 0:
|
|
425
|
+
state_machine.travel("run")
|
|
426
|
+
else:
|
|
427
|
+
state_machine.travel("idle")
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### Tweens (Procedural Animation)
|
|
431
|
+
|
|
432
|
+
```gdscript
|
|
433
|
+
func flash_damage() -> void:
|
|
434
|
+
var tween: Tween = create_tween()
|
|
435
|
+
tween.tween_property(sprite, "modulate", Color.RED, 0.1)
|
|
436
|
+
tween.tween_property(sprite, "modulate", Color.WHITE, 0.1)
|
|
437
|
+
|
|
438
|
+
func smooth_camera_shake(intensity: float) -> void:
|
|
439
|
+
var tween: Tween = create_tween()
|
|
440
|
+
tween.tween_property(camera, "offset", Vector2(randf_range(-intensity, intensity), randf_range(-intensity, intensity)), 0.05)
|
|
441
|
+
tween.tween_property(camera, "offset", Vector2.ZERO, 0.05)
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## 8. UI (Control Nodes)
|
|
447
|
+
|
|
448
|
+
```gdscript
|
|
449
|
+
# hud.gd
|
|
450
|
+
extends CanvasLayer
|
|
451
|
+
|
|
452
|
+
@onready var health_bar: ProgressBar = %HealthBar
|
|
453
|
+
@onready var score_label: Label = %ScoreLabel
|
|
454
|
+
|
|
455
|
+
func update_health(current: int, maximum: int) -> void:
|
|
456
|
+
health_bar.max_value = maximum
|
|
457
|
+
health_bar.value = current
|
|
458
|
+
|
|
459
|
+
func update_score(score: int) -> void:
|
|
460
|
+
score_label.text = "Score: %d" % score
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
> Use `%UniqueNode` (unique name) syntax for UI references — more robust than `$Path/To/Node`.
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## 9. Common Anti-Patterns
|
|
468
|
+
|
|
469
|
+
1. **Deep inheritance chains** — use composition (component nodes) instead of 5-level class hierarchies
|
|
470
|
+
2. **`get_node()` with long paths** — use `@onready`, `%UniqueName`, or signals for decoupling
|
|
471
|
+
3. **Processing when idle** — use `set_physics_process(false)` / `set_process(false)` for inactive entities
|
|
472
|
+
4. **`String` for IDs** — use `StringName` (`&"my_id"`) for identifiers and dictionary keys
|
|
473
|
+
5. **Untyped GDScript** — always use static typing for safety and performance
|
|
474
|
+
6. **Giant scripts** — split into component nodes (HealthComponent, StateMachine, etc.)
|
|
475
|
+
7. **Client-authoritative multiplayer** — server must validate all game-affecting actions
|
|
476
|
+
8. **Syncing everything every frame** — sync corrections at 10-20Hz, use prediction client-side
|
|
477
|
+
9. **Too many Autoloads** — only for truly global managers, not game logic
|
|
478
|
+
|
|
479
|
+
---
|
|
480
|
+
|
|
481
|
+
## References
|
|
482
|
+
|
|
483
|
+
- [Godot 4.x Documentation](https://docs.godotengine.org/en/stable/)
|
|
484
|
+
- [GDScript Style Guide](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_styleguide.html)
|
|
485
|
+
- [GDScript Static Typing](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/static_typing.html)
|
|
486
|
+
- [Best Practices](https://docs.godotengine.org/en/stable/tutorials/best_practices/)
|
|
487
|
+
- [Networking](https://docs.godotengine.org/en/stable/tutorials/networking/)
|
|
488
|
+
- MOBA patterns adapted from [thedivergentai/gd-agentic-skills](https://github.com/thedivergentai/gd-agentic-skills) (MIT)
|