gamemaker-gml — правило для Cursor: что делает и как установить
Задаёт стандарты архитектуры и стиля GameMaker Language для проектов на GML. Помогает Cursor писать чистый игровой код без утечек памяти.
.cursor/rules/gamemaker-gml.mdcЧто делает gamemaker-gml
Правило применяется к файлам с шаблонами **/*.gml, **/*.yy и **/*.yyp. Оно распределяет ответственность между событиями движка: инициализацию оставляет в Create, симуляцию — в Step, а графический вывод закрепляет за Draw.
Архитектура опирается на конечные автоматы для состояний сущностей, изоляцию сбора ввода от выполнения действий и пулинг объектов для частых снарядов. Регулярный поиск через instance_find и повторяющиеся проверки коллизий в каждом шаге запрещены для сохранения частоты кадров.
Созданные структуры данных обязаны удаляться вручную. Порядок создания объектов в редакторе комнат считается нестабильным, поэтому опираться на него в критической механике нельзя.
Какие задачи решает
- разделить игровую симуляцию и отрисовку между событиями Step и Draw
- предотвратить утечки памяти при создании динамических структур данных GML
- настроить конечный автомат для состояний персонажа или интерфейса
- заменить ресурсоёмкий поиск экземпляров через instance_find на кэширование
Примеры запросов агенту
- Сделай конечный автомат для состояний патрулирования и погони врага на GML.
- Оптимизируй спавн пуль, добавив пул объектов вместо постоянного создания экземпляров.
- Проверь этот объект игрока и перенеси логику расчёта урона из события Draw в Step.
Как установить gamemaker-gml
Вручную: положить файлы
.cursor/rules/gamemaker-gml.mdcВо frontmatter: description, globs, alwaysApply
Вручную: положить файлы
.claude/rules/gamemaker-gml.mdПоле paths во frontmatter ограничивает файлы: globs из источника → paths
AGENTS.md
Codex читает AGENTS.md: вставьте текст правила туда
Вручную: положить файлы
.github/instructions/gamemaker-gml.instructions.mdПоле applyTo задаёт, к каким файлам применять: globs из источника → applyTo
Вручную: положить файлы
.devin/rules/gamemaker-gml.mdВручную: положить файлы
.clinerules/gamemaker-gml.mdПо шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules
Вопросы о gamemaker-gml
Как установить gamemaker-gml в Cursor?
Создайте файл .cursor/rules/gamemaker-gml.mdc в корне вашего проекта и скопируйте в него содержимое правила.
Что делает gamemaker-gml?
Инструктирует Cursor писать код на GML по стандартам GameMaker, разграничивать события объектов и оптимизировать горячие участки симуляции.
Почему правило запрещает код логики в событиях Draw?
Событие Draw выполняется исключительно для рендеринга. Расчёты внутри него снижают частоту кадров и вызывают сбои при рассинхронизации отрисовки.
Исходный текст
gamemaker-gml.mdc · CC0-1.0
--- description: GameMaker Language (GML) rules for scripts, objects, events, rooms, data structures, and performance-minded game code globs: ["**/*.gml", "**/*.yy", "**/*.yyp"] alwaysApply: false --- # GameMaker GML Rules ## Code Organization - Keep object event code short and move reusable behavior into scripts or functions. - Use clear prefixes or naming conventions for scripts, objects, sprites, rooms, and globals. - Prefer functions over copy-pasted event blocks. - Keep create-step-draw responsibilities separate. - Put initialization in Create, simulation in Step, and rendering-only work in Draw. ## GML Style - Use descriptive variable names and avoid one-letter names outside small loops. - Prefer local variables with `var` or function-scoped declarations over unnecessary instance variables. - Use constants, enums, and macros for repeated identifiers, layer names, states, and collision groups. - Guard optional instance references with `instance_exists`. - Keep global state minimal and document it. ## Gameplay Architecture - Use finite state machines for player, enemy, UI, and game-flow states. - Keep collision logic explicit and deterministic. - Separate input collection from action execution. - Use alarms, timelines, or explicit timers consistently; do not mix patterns without reason. - Store save data through structured maps/structs and version the save format. ## Performance - Avoid expensive searches such as broad `instance_find` or repeated collision scans in every Step event. - Cache frequently used asset IDs, layer IDs, and object references when safe. - Destroy data structures when no longer needed. - Use object pooling for frequent projectiles, particles, or short-lived effects when allocation becomes costly. - Profile before optimizing and keep hot-path code simple. ## Debugging and Testing - Add debug overlays for collision boxes, state, velocity, and AI decisions when useful. - Use assertions or explicit guard clauses for impossible states. - Test room transitions, pause/resume, save/load, and controller/keyboard input separately. - Keep reproducible test rooms for complex mechanics. ## Common Mistakes - Do not put game logic in Draw events. - Do not create data structures without destroying them. - Do not rely on room editor instance order for critical behavior. - Do not hardcode magic numeric state IDs.
© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules