Перенос JS-версии (корень репозитория) на движок Defold (Lua). Цель та же: Telegram Mini App (HTML5) и APK, плавность на слабых телефонах. Логика, свой скелет и генерация мира перенесены один в один: из того же seed получается тот же мир, что и в JS.
Открыть game.project в редакторе Defold → Project → Build (Ctrl+B).
Сборка из командной строки (bob входит в jar редактора):
"D:/Defold/packages/jdk-25.0.4.1+1/bin/java.exe" -cp "D:/Defold/packages/defold-<версия>.jar" com.dynamo.bob.Bob --root D:/FarmDefoldGames --variant debug build
game.project настройки (лимиты спрайтов, мип-карты, HTML5/Android)
render/ своя отрисовка: мир — ортокамера с зумом, интерфейс — в пикселях окна
main/main.script сборка: ферма, камера, ввод на карте (тап, панорама, щипок, колесо, WASD)
main/*.go прототипы спрайтов для фабрик (атлас земли и атлас мира)
gui/hud.gui_script интерфейс: верхняя панель, задание, кнопки, меню у точки, окна, уведомления,
надписи над миром (+3, таблички участков, номера очереди)
gui/kit.lua помощники разметки (точки ≈ CSS-пиксели, скругления, текст, значки)
farm/ логика без Defold (проверяется обычным Lua)
data.lua весь баланс (как src/game/data.js)
world.lua генерация мира из seed, участки, сохранение разницы
farm.lua действия, рост, энергия, опыт, эффекты (как src/game/Farm.js без отрисовки)
player.lua призрак: путь, очередь до 6 действий
skeleton.lua свой движок скелетной анимации (кости, слоты, скины, смешивание)
ghost_data.lua кости и анимации призрака (сгенерировано из src/game/ghost.js)
pathfinding.lua A* по 8 направлениям
quests.lua сюжет и задания
camera.lua, iso.lua камера и изометрия 2:1
view.lua отрисовка в Defold: спрайты из фабрик, глубина через z
save.lua, app.lua сохранение (sys.save) и общее состояние мира и интерфейса
assets/ атласы (ground, world, gui), шрифт Inter (OFL)
tools/ подготовка графики из JS-версии
tools/export_code_art.mjs выгружает в PNG то, что JS-версия рисует кодом (призрак, инструменты,
значки над грядками, берег пруда, текстуру воды по ромбам). tools/build_assets.py берёт картинки
художника из assets/art и эту выгрузку, дополняет каждую прозрачными полями так, чтобы точка опоры
была в центре, и пишет атласы и farm/art_meta.lua (масштаб и размеры каждого спрайта).
node defold/tools/export_code_art.mjs # из корня репозитория, нужен Playwright
python3 defold/tools/build_assets.py
Мир берётся из map/farm.tilemap. Откройте его в редакторе Defold двойным щелчком и рисуйте кистью
плитками из палитры (map/palette.png). Карта показана ровной сеткой «сверху»:
левый верхний угол — верхний угол ромба в игре, вправо — ось, идущая в игре вправо-вниз, вниз — влево-вниз.
Слои (переключаются в панели Outline справа):
ground— земля: трава, дорожка (песок), вода, грядка;objects— деревья, кусты, камни, валун и дом (2×2 — ставятся в левую верхнюю клетку), колодец, призрак (место появления);zones— зелёные клетки: участки, открытые с начала игры (достаточно одной клетки в участке 10×10).
Объект ставится только на свободную траву, иначе игра пишет в консоль map: ... does not fit.
После правки карты старые сохранения берут объекты с новой карты (деньги, уровень, грядки сохраняются).
Палитру пересобирает python3 tools/make_map.py palette; export перезаписывает карту сгенерированным миром.