Work & Beer Balance
1.53K subscribers
178 photos
10 videos
5 files
251 links
Авторский канал @Akiyamka
Поддержать автора можно здесь:
buymeacoffee.com/cherrytea
Download Telegram
Work & Beer Balance
Screencast From 2026-07-06 16-16-13.mp4
Скопилированная карта для игры - это бинарник в формате .xbf и еще пару файлов cpf и cpt

В таком же формате хранятся модели юнитов и зданий, и проект CorinoEngine уже отреверсил как эти модели читать

Из .xbf была восстановлена и геометрия карты, группы сглаживания, развертка текстур. Но цвета были вот вообще не те (первый скрин) да и текстуры слишком репетативны - чего-то не хватало.

По остаточному принципу я решил что секрет в файлах .cpf .cpt (позже оказалось что это оптмизированный .tga "огромных" размеров (2к) на всю карту)

После того как я натянул его как слой на карту она оберела те самые уникальные рисунки на камне, но цвет был все еще не тот.

В конце концов я нашел приложеный туториал к редактору карт, и из него узнал что мапдизайнер разукрашивал color dodge кистью каждую карту в ручную используя две маски для песка и скал с разными режимами смешивания

Повторив этот трюк в движке я наконец получил тот самый оригинальный цвет и текстуры на видео выше
🔥41
Work & Beer Balance
Скопилированная карта для игры - это бинарник в формате .xbf и еще пару файлов cpf и cpt В таком же формате хранятся модели юнитов и зданий, и проект CorinoEngine уже отреверсил как эти модели читать Из .xbf была восстановлена и геометрия карты, группы сглаживания…
Но карта должна иметь еще логические слои. Я в этом убедился подняв вируалку с WindowsXP SP2 потому что больше нигде мне не удавалось запустить редактор карт.

Так я увидел что на карте есть слой навигации который обозначает где можно пройти а где нельзя. (6 типов проходимости).

Он должен был быть в xbf но ни claude ни gpt не могли найти эту информацию в нем. GPT убеждал меня что это должен быть отдельный файл, а клод генерировал мне монстуркзные скрипты которые генерировали карты проходимости на базе самой геометрии - что, в целом могло бы прокатить но мне было интересно понять как же оно работало в оргиниале.

Я сделал следующее - насобирал столько образцов и констрейнов сколько смог - сделал отдельную карту с клеточкой каждого типа в углу, и собрал ее - так модель могла сопоставить исходник и бинарник. Не прокатило. Тогда я сделал еще одну карту точно такую же но без контрольных тайлов, чтобы можно было опираться на разницу. И наконец было найдено где тайлы храняться!
🔥2
Work & Beer Balance
Но карта должна иметь еще логические слои. Я в этом убедился подняв вируалку с WindowsXP SP2 потому что больше нигде мне не удавалось запустить редактор карт. Так я увидел что на карте есть слой навигации который обозначает где можно пройти а где нельзя.…
Провернув этот трюк с еще парочкой карт разной размерности было вычисленно как именно эти данные хранятся и как эту таблицу доставать зная размеры самой карты. И вот у меня теперь есть слой для навигации
🔥2
🛑 Не новый, но в последнее время довольно популярный таргетированный сценарий мошенничества, который #мошенники используют для кражи ключей от криптокошельков (и других реквизитов доступа) с компьютера жертвы.

Всё начинается с публикации вакансии в тематических чатах. Тексты объявлений могут быть самыми разными, но все они так или иначе связаны с Web3 и блокчейном. Обязательно требуется кандидат с опытом работы с криптовалютой, желательно от нескольких лет. Зарплату предлагают вполне рыночную — ничего подозрительного.

В описании вакансии указывают реально существующую компанию. В процессе общения «HR» без стеснения показывает свой профиль в LinkedIn, сайт компании и всячески демонстрирует, что компания настоящая. Так и есть — вот только сам он к ней никакого отношения не имеет.

После непродолжительной переписки и созвона оказывается, что кандидат полностью устраивает работодателя, и остаётся лишь выполнить тестовое задание. Причём даже не бесплатно! 😃

После получения согласия присылают ссылку на GitLab-репозиторий. Хотя он создан совсем недавно, за пару дней у него уже набирается около тысячи загрузок. В самом коде проекта ничего подозрительного нет, однако среди зависимостей присутствует пакет, который и содержит вредоносную нагрузку.

Во время установки этого пакета запускается хук, который загружает код стилера с GitHub, проверяет, не выполняется ли он в виртуальной машине, а затем начинает сканировать систему в поисках криптокошельков: MetaMask, Phantom, Trust Wallet, Coinbase Wallet, OKX Wallet, Rabby, Solflare, SafePal, Station Wallet, Binance Wallet, TronLink, Kaia Wallet, Argent X, Auro Wallet и Sui Wallet.

Кроме того, стилер собирает SSH-ключи, сессионные файлы Telegram, cookies из браузеров, различные конфигурационные файлы из домашнего каталога, а также файлы вроде credentials, accessTokens, azureProfile, FileZilla, .mylogin.cnf, .pgpass, .env и многое другое.

После сбора данных они упаковываются в архив, слегка шифруются и отправляются через Telegram в специальный канал для дальнейшей обработки 🗿

После отправки жалоб в различные инстанции удалось добиться следующих результатов:

1. Администратор группы заблокировал в личных сообщениях с отправкой репорта. При этом вакансию из канала он не удалил, а из чата её, предположительно, удалил сам мошенник ещё до того, как админ получил сообщение.
2. GitLab никак не отреагировал, репозиторий всё ещё на месте.
3. GitHub удалил все репозитории, связанные с данной атакой.
4. NPM никак не отреагировал, вредонос всё ещё доступен.
5. Контакты одной жертвы удалось легко найти, однако ответа не последовало.
6. Токен Telegram-бота, через которого отправлялись собранные данные, был отозван.
7. Сам злоумышленник от дополнительных комментариев отказался.

И что с этим дальше делать? 🤨

Много разных советов можно дать, чтобы снизить риск supply chain-атак. Но, пожалуй, главное — запускать чужой код только в изолированной среде: виртуальной машине, отдельном контейнере или хотя бы под отдельным пользователем. Не доверять количеству загрузок и звёздочек у репозитория. Проверять preinstall, install и postinstall-скрипты, а также не торопиться — особенно если вас пытаются торопить.

Главное помнить, что сегодня опасность представляет не только исполняемый файл. Одной команды npm install, pip install или cargo build иногда достаточно, чтобы на машине выполнился код, который вы даже не увидите при беглом просмотре репозитория 🫠
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
This media is not supported in your browser
VIEW IN TELEGRAM
Модельки юнитов с анимациями, звуками, местами прикрепления, хранились в том же формате что и карты.

Да, в те времена скелетная анимация еще не была дефолтом и все анимировалось ручным смещением вершин (это было больно даже для low poly моделек, поверьте - я пробовал)

И все равно анимации очень разнообразные и не скучные
🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Движок уже умеет (только новое):
- парсить файлы зданий.
- применять текстуры со смешиванием покадравыми скролящимися текстурами, альфаканалами и magenta масками
- парсить файлы rules и art.ini (настройки игрового баланса)
- рисовать базовую панель интерфейса с анимацией строительства
🔥3
Интересный и наглядный бенчамарк - когда моделям дают задачу сделать игру. Намного интереснее чем смотреть на графики и под такой бенч особо не подстроишься.
Fable vs GPT 5.6 SOL Pro
https://www.youtube.com/watch?v=TbQJiWVcAbI

Должен признать Fable на голову выше
🔥2
Вот вы ругаетесь на нейрослоп. А как вам человеками написанный релиз игры где в ресурсах аж 3 иконки одного и того-же юнита с разными опечатками )

"Да я же вроде добавлял ее!!!"

Вообще тут где-то 15% ресурсов это какие-то выреазнные / так и не доделанные куски игры.

Кажется я начинаю понимать датамайнеров - это и правда интересно гадать что же тут разработчики пытались сделать и почему не сделали
🤣8
codex отменили 5h лимиты, остался только недельный. Но при этом они спалили мои 3 не заюзаных сброса (
сбросы остались, просто убрали из /status и странички аналитики где я раньше смотрел
Расчет траекторий оказался вершиной айзберга!

Как быстро выяснилось - надо еще расчет столкновений как-то круто описать. Сейчас у меня юниты как бильярдные шары разлетаются а хочется чтоб как трафик в индии
😁3
This media is not supported in your browser
VIEW IN TELEGRAM
Знаю, в оригинале было не так, но кто меня остановит!
(Дуров а еще более шакальное качество нельзя было сделать, м?)
😁2
вот зря на собеседованиях гугла не просят показать как выровнять див по центру страницы
😁5
Это только у меня каждый день сбрасывается недельный лимит Codex? Вот уже второй раз подряд - выедаю его на ~70% за день а на утро он снова сброшен
🤔1
Вы наверняка знаете что в играх весь мир обновляется за т.н. "игровой тик"
А то что в нашей с вами реальности тоже есть такой тик обновления вы знали?
Планковское время
This media is not supported in your browser
VIEW IN TELEGRAM
я задолбался это делать даже с помощью агентов. Результат не идеальный но не хуже чем было в оригинале
🔥10
очереь аи ревью безопастности похоже дошла до rsync
Вот так выглядит моя "серверная полка"

Сам сервер с пассивным охлаждением, но как вы могли догадаться по костылю сверху Майнкрафт с 300 модами в сочетании с 32 градусной жарой слишком жесткое сочетание даже когда весь корпус это сплошной радиатор (весит эта малютка килограмма два)

Однако 5$ контроллер и немного микропитона и пайки дают программно управляемый куллер который включается когда серверу нужно остыть (очень редко)
👍72🆒1
This media is not supported in your browser
VIEW IN TELEGRAM
Вот еще один пример того как быть когда сложно обьяснить модели что с текущей реализацией не так и как надо сделать.

В игре есть механика мехов (😅) - во первых такие юниты не вижутся перпендикулярно земле на склонах, а во вторых их движение нелинейно - они не едут, а шагают.

В конфигах обнаружилось что у всех юнитов с флагом isMech - есть не одна а две скорости передвижения.

Очевидно между ними мех переключается тем самым создавая нелинейное движение, но больше там ничего нет.

Наивная реализация 50 / 50 дала очень плохой результат скользяших по льду анимаций, так что я описал модели какой мне нужен UI c какими ручками чтобы "нащупать" те самые параметры.

Забыл только попросить о кнопке "скопировать параметры", так что придется ручками их переписать
🔥2
Вот пример зачем я еще плачу за fable.

У некоторых моделей в некоторых анимациях оказались вывернутые во внутрь нормали.
GPT в xhight режиме сначала гайзлайтил меня что все нормально. Потом газлайтил что все пофиксил (нет). Потом отдельный gpt ревьюфил фикс первого и тоже ничего не добился (так я проверил теорию про то что качество модели может фликерить и один и тот же промпт может то выстрелить то нет)

Итого GPT в hight-x не смог решить проблему даже в паре с двух попыток суммарно за 60+ минут.

Fable xhight разобрался за 22 минуты (скушав правда ~20% недельного лимита на фейбл)

1. Исходные данные (AT_Conyard_HC.XBF, из него собирается состояние Build): у clonetread01/clonetread02 трансформ и все 576 кадров анимации имеют det < 0 (диапазон [-0.032, -0.012]) — это зеркальные копии («clone» — клон MCV на стройплощадке). Конвертер корректно выносит отражение в узел MirroredContent — с этим всё в порядке.

2. Ключевой факт: у обоих тредов все 13 нормалей вершин направлены внутрь геометрии в локальном пространстве (проверено численно против направления «центроид → треугольник»), и winding треугольников согласован с этими внутренними нормалями. То есть меш авторски пред-скомпенсирован под вечное зеркало: в мире исходной игры отражение выворачивало геометрию обратно «наружу».

3. Почему оригинал это скрывал: оригинальный движок (и CorrinoEngine — в его Engine нет ни одного GL.Enable(CullFace), нормали идут из файла как есть) рендерит без backface culling. Вывернутый меш под зеркалом выглядел цельным, а неправильное освещение (нормали и в мире остаются внутренними — отражение не меняет «внутрь/наружу») в 2001-м никто не заметил.

4. Почему Godot ломает: Godot 4 автоматически переворачивает cull mode для инстансов с отрицательным детерминантом глобального трансформа (renderer_geometry_instance.cpp:69: mirror = determinant < 0; переворот в rasterizer_scene_gles3.cpp — проверено в исходниках 4.7-stable). Для правильно авторенных зеркальных мешей это чинит картинку, а для пред-скомпенсированных (треды) — выворачивает её. Подтверждено рендер-диагностикой: FRONT_FACING-шейдер показывает у треда наружные грани «front» (в отличие от эталонного cloneBox02), т.е. winding в мире у него противоположен всем остальным мешам.

5. Доказательство фиксом: реверс порядка вершин треугольников + инверсия нормалей у двух мешей тредов в рантайме полностью чинит рендер — треды становятся цельными, с правильными боковинами гусениц и корректным освещением (скриншоты «до/после» снимал через хостовый Godot 4.7).

* CullFace - это оптимизация которая автоматически скипает в рендере и обсчетах стороны полигонов которые игрок не может увидеть в игре. Это очень базовый прием оптимизации 3д графики кратно снижающий нагрузку (плюс минус в двое).
Т.е. не сдохни вествуд сразу после поспешного релиза они могли выпустить патч улучшаяющий перф игры в двое =)
2🤡1