Migration of Empires

Dan Korostelev (@nadako)

Team before me

Team before me

  • Settled with Haxe/OpenFL
  • Made as3hx work
  • Developed a "continous conversion" pipeline


  • OpenFL HTML5 performance ✔️
  • Flash/OpenFL behaviour inconsistencies ✔️
  • Complex building pipeline 🤷
  • Still AS3 source code 🤷‍♂️

Problems with as3hx

  • OK for compiling, bad for developing
  • Syntax-only AST
  • Comments/whitespace are AST nodes
  • Typing is very complicated
    • done on writing
    • no typed program representation
    • hard to transform the code

New converter: full-fidelity parsing

New converter: typed tree

New converter: SWC support

  • Load signatures from the ABC bytecode
  • ...into the same typed tree structure (dummy tokens)
  • Thanks, format library!

New converter: Type annotations

  • Override field, local and argument types
  • Strict Array/Dictionary/Function types
  • Supported in both AS3 and SWC

New converter: filters

  • Adapt AS3 code for Haxe
  • Insert missing type conversion
  • Remove redundant code (e.g useless casts)

New converter: output

  • Prints the filtered typed tree
  • ...with the comments and whitespace


Haxe (formatted)

Encapsulated Reflection

  • */Object -> ASAny/ASObject
  • Overriden property access and type conversions

  • Thanks, abstracts! \o/

It works! :)

  • HTML5 via JS and OpenFL 
  • Flash via SWF and SWC libs
  • AS3 is only used for conversion


...converter is fully in Haxe/JVM

Using the Flash target

  • Still relevant (payers on potatos) 
  • Using original SWCs (for now)
  • Had to fix compiler a bit
    • bytecode issues
    • flash properties
    • more interop (e.g. Vector)

Next step: full Haxe!

  • Final touches on code conversion style
  • Prepare dev environment
  • Educate the teams
  • Help other projects

Haxe 4

  • Compiler cache finally reliable!
  • IDE services work...
  • ...but are slow :(

Thank you!


Migration of Empires

By Dan Korostelev

Migration of Empires

  • 1,243