I developed some somewhat popular Flash games around a decade ago, and recently people have been asking me to port them to Steam. I've been researching how to do this for a few days, but it feels like trying to figure out how to get a GameBoy cartridge working on an iPhone, and googling for answers feels like archaeology since nobody talks about Flash anymore.
Flash can build to an exe projector with the Flash Player bundled, but it stores saved data in fragile cookies, so I need to build a wrapper that can exchange data with it to save data more reliably. I've managed to build something simple in Windows Forms (with which I have only limited experience), but there are two possibilities, each with different issues:
One is that I load in the exe win projector version of the Flash file as a Process:
game = Process.Start ( "MARDEK.exe" );
game.WaitForInputIdle ( );
game.EnableRaisingEvents = true;
game.Exited += ( sender, e ) => { Close ( ); };
This works, and doesn't require the user to have Flash Player installed, but I don't know if it can exchange data both ways with C#.
Another possibility is to embed the swf directly:
swf = new AxShockwaveFlashObjects.AxShockwaveFlash ( );
Controls.Add ( swf );
swf.Size = new Size ( 720, 528 );
swf.Location = new Point ( 10, 10 );
swf.BringToFront ( );
swf.LoadMovie ( 0, "MARDEK.swf" );
I think the swf could then use something called ExternalInterface to communicate back and forth with C#. A huge issue though is that I don't think the Flash Player is being bundled, so the user's expected to have that installed separately. That's not acceptable.
I've found some .dll files for the Flash Player installed on my system, but I don't know if it's possible to bundle them in and have the AxShockwaveFlashObjects use them instead of what the user has installed. That'd probably be the ideal situation.
I know this is an obscure issue - which is why I'm having to ask because Google's telling me so little - but any help would be greatly appreciated!