На заре двухтысячных интернет довольно сильно отличался от того, каким мы знаем его сейчас. Но многое изменилось с появлением SWF.

В 2004 был (разработан) выпущен новый стандарт скриптового движка Action Script 2.0.

Но были и те, кто додумался "сделать из буханки трамвай (но зачем?)"

Test Drive Unlimited (2006)

тропический остров в океане

французские разработчики Test Drive Unlimited применяли его в своем движке Twilight, написанного на Visual C++.

Twilight применялся и в других играх компании: в сиквеле TDU - TDU2 и Alone in the dark (2008)

Исходный код был утерян, со слов разработчиков его не осталось.

Но был запущен проект по восстановлению исходного кода OpenTDU (примерно как OpenTTD(transport tycoon deluxe)), таким образом мы можем посмотреть код, как все это было примерно реализовано (exe файл поддается декомпиляции и видим функции игры как 686 ассемблер, на данный момент переписано около 1200 из 20500 функций) и извлечены и переписаны шейдеры с D3D9 на Vulkan.

Ознакомиться с кодом можно здесь:

https://github.com/opentestdriveunlimited/OpenTestDriveUnlimited/tree/main/source/flash/implementation

(На данный момент переписано 6.76% функций игры)

В целом игра использует не так уж и много внешних библиотек, так как применялась определенная кроссплатформенность. (Изначально разрабатывали под Xbox 360).

Из крупных: библиотека Havok Для игровой физики, bink (для проигрывания видеофайлов и виртуальная машина flash.

Flash применялся для элементов HUD (спидометров и прочих информационных элементов).

Как Spark (Flash Player) будет осуществлять взаимодействие флэша с плюсами?

Точно также, как и Scaleform GFx (применявшийся в Unreal 3):

1.Игра загружает Flash-ресурс в пользовательский FlashResource

2.Движок использует внутреннюю VM(виртуальную машину), которая:

  • анализирует теги SWF/VMF

  • интерпретирует ActionScript 1-2

  • Управляет DisplayList

  • обрабатывает видеоклипы и спрайты

3.Класс FlashPlayer - уровень абстракции, который:

  • выбирает корневой клип

  • выполняет навигацию

  • Взаимодействует с Flash VM через глобальное состояние

Реалистично-мыльная эра Unreal 3

Выход седьмого поколения консолей ознаменовал и выход новой версии движка. Раньше UI в Unreal до 4 был реализован сторонними библиотеками.

В Unreal Engine 3 была реализована интеграция с Scaleform GFx — промежуточным программным решением, используемым для создания пользовательских интерфейсов (UI) и дисплеев на лобовом стекле (HUD) в играх.

Вот как ActionScript использовался в UE3:

  • Разработка пользовательского интерфейса и HUD:Scaleform GFx позволял разработчикам создавать пользовательские интерфейсы и HUD-дисплеи с помощью Adobe Flash, которые затем экспортировались в виде SWF-файлов. Эти SWF-файлы содержали код ActionScript для динамических элементов, анимации и взаимодействия внутри пользовательского интерфейса.

  • Связь с UnrealScript:UnrealScript, нативный язык сценариев UE3, взаимодействовал с ActionScript в рамках роликов GFx. Этот GFxMoviePlayerкласс в UnrealScript предоставлял методы для загрузки и управления роликами GFx, а также обеспечивал взаимодействие между игровой логикой UnrealScript и логикой пользовательского интерфейса ActionScript. Это позволяло реализовать такие возможности, как:Запуск событий в UnrealScript из взаимодействий пользовательского интерфейса во Flash.Передача данных из UnrealScript для обновления элементов в пользовательском интерфейсе Flash.Вызов функций ActionScript из UnrealScript.

По сути, ActionScript в UE3 использовался не для написания основных сценариев игрового процесса, а скорее, как язык сценариев для создания интерактивных и динамических пользовательских интерфейсов и HUD посредством интеграции Scaleform GFx.

Unity3d Flash

Данный раздел немного не в тему статьи, но ко-операция Unity с Flash тоже достоина упоминания.

Если предыдущий использовали определенные "виртуальные машины" для flash, то Unity использовал транслятор из C# в ActionScript.

Проект Танки Онлайн планировалось перевести на Unity еще в 2011 году, где-то находил альфа-версию из закрытого тестирования.

Потом разработчики решили оставить свой движок alternativa выпустили бета версию сиквела, но пришли к выводу, что проект лучше отложить. Спустя несколько лет выпустив Tanki X на Unity но уже без флэша.

Проект не взлетел так как FPS был заметно ниже, чем на unity web player(Видимо использовались какие-то костыли).

А в 2015 благодаря стараниям Apple и Google - flash оказался устаревшим и все массово стали переходить на WebGL.

Выводы

Они не единственные кто додумался использовать Actionscript, изначально предназначенный для веба - как скриптовый язык, в дополнении к игровому движку на C++, в то время как большинство применяют LUA или Python, C# .

Но и в таких движках как:

Gamebryo

Unreal 3

Комментарии (4)


  1. VitalyZaborov
    06.12.2025 20:46

    Тема Scaleform не раскрыта)

    Это было не промежуточное решение для UE, а вполне самостоятельное. Была возможность интеграции в любой движок, в том числе в UE. Был даже плагин для Unity, но его быстро прикрыли. Scaleform использовался во многих играх (в Skyrim, например), а кое-где используется до сих пор.

    Его особенностью было то, что сам Flash разрабатывался компанией Macromedia, которую позже купил Adobe. А Scaleform был сделан с нуля компанией Autodesk и мимикрировал под FlashPlayer. Какие-то возможности флеша в нём не работали, зато какие-то - работали даже лучше, чем в оригинале.


    1. MemRun Автор
      06.12.2025 20:46

      Может напишу подробнее в одной из следующих статей. А Skyrim же и так на gamebryo - движок bethesda.


  1. daniillnull
    06.12.2025 20:46

    Есть такая (довольно известная?) студия-разработчик мобильных игр — Supercell.

    Вся 2D графика в их движке (Titan) была разработана на идеях SWF. Они, конечно, изобрели свой формат, но основные принципы (теги, movieclips, shapes, etc.) присутствуют. Даже в символах были классы аля FlashDataLoader для работы с этим форматом (вероятно первое время движок умел грузить оригинальный SWF с сабсетом возможностей, и лишь в последствии потом ушли к своему формату)

    Да и никакой виртуальной машины нет. Все контролируется скомпилированным кодом на С++.

    Было предположение, что они просто очень любят Adobe Animate, который до сих пор умеет экспортировать в этот формат. А что, удобно)


    1. pecheny
      06.12.2025 20:46

      Flash/Animate действительно классный тул для подготовки 2d ассетов – множество разработчиков использовали его как полноценный игровой редактор задолго до появления юнити. Да и юнити для этих целей во многом уступал. Были случаи, когда игра с флэша уже была портирована на юнити, но в качестве редактора уровней все равно выступал флэш.
      А swf – классный формат. Открытый, компактный, поддерживает векторную-растровую графику, иерархии объектов, анимации, код. Отлично подходит как контейнер ассетов для 2d игр.
      Почему-то все время забывают, что есть актуальный инструмент, позволяющий пользоваться всем этим добром с комфортом – openfl/swf. В прошлом месяце как раз свежая версия вышла. Весь код, реализующий флэшовый апи и позволяющий воспроизводить мувиклипы в рантайме – часть движка openfl, транспилируется в cpp/c/js в зависимости от целевой платформы и предпочтений.
      Для своих игр продолжаю пользоваться swf как контейнером для ассетов.