Building Weird Games With Alternative Technologies Workshop

So… short summary of what this is…
I was invited to give a lecture at UCLA, and then also invited to give a workshop at the UCLA Game Lab.
The lecture can be found here.

This is the transcript of my workshop.

The description in the above image says it best…

This workshop covers alternative technologies for making experimental games, as well as encouraging some mentalities when entering this area. It also includes some history about the web, browser and web politics… and the impact that this has had on the web. I make a strong point to encourage the use of alternatives, and choice.
The focus is more on frameworks, varying open-source projects, and tools that aren’t standard game engines (like Unity).
This is an area that I’m very passionate about.

* You can click on the slides (images) for a full resolution image, so you can read any small text for the text-heavy ones.


So I prepared this and it’s more like a talk…

Top favorite tools for building things:

Animate CC
(because of AIR for desktop, and the fact that it’s also a easy and versatile art and animation tool)

(basic editor for coding sites, or javascript, or php, or anything really… it’s often easier for me to code in plain text.)

Tumult Hype
(mac only, but it’s really good for HTML5 stuff. it saves a lot of time as compared to doing this manually.)

and a lot of various open source things for various experimentation.
I’ll get into some of them…

* Link from slide

Not all of the tools, or platforms, that I use are free.
Some of them are for pay, but you can always find a free alternative if you know what you need.

I do have some hesitations about using only free tools because in many cases I know the developers, or participate in some of the pre-releases (not necessarily the ones listed above, read that statement as vague), and the developers all work very hard to make good tools.
It’s kind of similar to arguing about game developers being payed for their games, and players expecting things for free, or complaining about the price which is often reasonable given the resources that go into the game.
Some of these mentalities drive value down so much that developers can’t make a living being developers…
So if you like something, and if you can afford it, especially if it’s an independent developer or open source project, it’s good to pay.

I think when you’re doing stuff like this a good mindset to have is that you’re not making a “game” you’re building software that functions like a game.

Software works with lower level functionality.
It’s often not “self-contained” in what it does. It requires some extra unusual power, so the focus for many of these tools is different from your standard game engines.

Think things like any cross-platform development, not necessarily native, platforms like the ones mentioned in this slide…

Phonegap, Cordova, Haxe, Flutter, Ionic, Xamarin, React & Angular, Adobe AIR, NWJS, Electron

There are many… they all have their own strengths.
You don’t need to know them all, it’s just something to have a high level overview of so you can choose when you’re looking for something to experiment with.

My favorite combination is merging AIR with javascript, or NWJS or Electron mixed with AS3.
Combining technologies is good because it gives you the benefits of all of them instead of being stuck with one.
You can make some really intriguing, powerful (as in feature rich), and unusual things this way.

AIR is wonderful because you can extend it with ANE’s.
It’s fairly open source friendly.
It’s a good hybrid system.

For example you can work around the strict type, and compile any JS library (if it doesn’t rely too much on a specific API…) and compile it as SWC and reuse it almost “as is”.

Here is a link about this.

* Link from slide

As that suggests you can take any TypeScript, export to ES3 and reuse it in your AS3 program.

You can also extend the web view, or just use the one that comes with it, and mix HTML content into your work.

There’s a lot of flexibility to this platform.

Like I mentioned you can also build ANE’s if you have some C or C++ knowledge and extend it that way. This gives you varying low level system functionality so you can communicate with the operating system.

Here are some ANE links:


Another wonderful combination is either Electron or NWJS, and mixing AS3 with that.
You can go both ways.
If you have web work that you want to preserve you can package it with Electron, and it will be safe from changes in the browser, including preserving older Flash content.

This is something you should determine on a per-case level.
Both Electron and NWJS can get fairly “bloated”. AIR is a lot more lightweight option.

* Link from slide here.

For example, one of my cases…

Cyberpet Graveyard has about 40+ exe’s in it.
I’ll show it to you quickly…
* (edit: you can download it here to see what I mean)

I started building that in javascript, but realized that packaging it would result in a too large file size.
The SWF format has some great compression, and AIR keeps it very “small”. This is particularly important if you’re working with a lot of audio. SWF has phenomenally better compression. Electron apps can easily go over 100 MB. Electron is a full-featured chrome browser so memory usage is fairly high.
So for something where you bundle 40+ programs into one thing, something like AIR is a better choice.

There have been cases where the opposite would have been true. I started making Electric File Monitor in AIR. Node.js might have been better for this use case, but some restrictions still exist.

It’s a good idea to do small prototypes in various languages and pick the one that you think is most flexible for your idea.

Here, I’ll give an overview of Electric File Monitor.
* (edit: you can download it here and see what I mean)

I think this is unique because a lot of what it does is not immediately available in classic game engines, so this is a good example of the benefits of using non-traditional game development software to build things.
Electric File Monitor is software first, with traditional software features plus the need to have access to a system, and a game second.
It’s parody software.

So… doing the following is very fun…

Read through features in obscure (or less popular) language documentation and pick odd ones to build a game around.
Both AS3 and NWJS have some interesting ones for reading a person’s system.
If you read through odd features in various language documentation, it leads to very interesting experimentation.
NWJS and Electron both are lots of fun.

I think what’s important is to develop a mindset of stepping outside of common game engines, and searching for other options, because you see exactly how big the software world is, and you discover features you might never have known you needed until you start messing with other options.

Each tool serves a very specific purpose.
Unity makes games, but it doesn’t necessarily excel at making productivity software.

If you would try to make productivity software in Unity you might find it restrictive to that usecase, because games are Unity’s strength. That’s wonderful, but that’s also something everyone is doing, or using.

If you pick a platform, language, or combination of tools that create productivity software, or functional applications, and turn what those excel at into a game, your game is going to be VERY different.
That unusualness is what’s valuable about this.

You’re also going to have access to features something like Unity or Gamemaker don’t necessarily have.
If the tool you used is different, it opens new doors. You discover new features, and what you make will likely not be something everyone else can do.

It’s also very much about developing the mindset to come up with unusual ideas. If you step outside of your comfort zone, and explore what other options there are, you come up with some interesting things.

This type of experimentation is a lot of fun!
There are plenty of open source options to play with.

No one tool is better than the other. They all excel at their own things. Each use case will be different.

So another very important tool to know about, and have at your disposal, and this can be good for packaging games too, is Enigma Virtual Box.

* Enigma Virtual Box website

This is free.
This packages files, dependencies, and everything, into a single executable file.
This is invaluable for quickly packaging electron or NWJS projects without much technical knowledge.
It does a lot more too, so it’s a good thing to have.

The NWJS docs for packaging and distribution have a lot of good pointers that you can apply for other cases.


For example, the windows installer section is a good place to start…

Windows Installer
NSIS (Nullsoft Scriptable Install System)
Inno Setup

I bring this up because there are cases that you need to distribute your stuff as an installer.
If you try to do more elaborate things with a person’s system, like working more intricately with files, reading, writing… anything that requires sophisticated permissions that might get flagged as a virus, you should look into that.

Here’s an example from something recent that I had a lot of trouble with…

(edit: you can download it here and see what i mean)


So the seemingly complicated thing about this is that it checks what files are in the same folder with it. The two exe’s check in relation to their own location, and see if a file they are asking for is near them. State is saved that way, and the story progresses based on this setup.

The difficult thing is that doing reading in relation like that broke on OSX because there’s a security restriction that interfered with how the files check their location.
So you’ll run into stuff like this.

An OS update could easily break something like this, but it was important to me to distribute it as a non-installable thing.
Software is an increasingly restrictive world.
I think as companies focus too much on security, or use that as an excuse to force applications to be distributed through their own official stores ONLY, it really impacts the liberties you have when making weird freeware.
This is part of a larger discussion, but knowing that you can package your things as an installable, and that gives you more liberty that might not break in the long run, is a good thing to keep in mind.

This is for cases where you do more system specific things tho. It’s not something you need if you’re just making a game.

So most of the things I mentioned make apps, expressive apps, software and so on…
By now all this illustrates the value of exploring tools meant for different programming uses and creating a game in that, or even incorporating that in your game.
Design a game around the strengths of something more obscure.

For example, another valuable thing to try are incorporating chatbots into a game…
A good easy place to start is Pandorabots, if you want to experiment.

Pandorabots are AIML based chatbots. There are a number of open source options for building, hosting, or creating your own bots. Github is a good place to search for that.
AIML bots are very old, but they’re really easy to work with.

Program-o is my favorite.

* Program-O website
* Pandorabots website

I’m bringing up chatbots because that’s a really easy way of adding characters to your game, that will talk back to the person, and it ends up pulling people in with conversation.
It really surprises people because these seem smart, or like a real person.
It’s a lot of fun for people when they discover one in a game.
Players often assume they’re talking to a human.

In either of these, especially with Program-O, you can interface with it in your game.
All this requires an internet connection.

Program-O is php based.
I use a lot of php in my work, especially to interface with whatever I have on my server, or database. It’s another way of doing things. You could do the same with Node but I enjoy php a lot, and there are cases where php is more lightweight or more effective.

If you want to play around with Program-O, PHP, or anything that involves mySQL you need a server…
You can setup a local environment using something like MAMP.

* MAMP website

This has been a lifesaver for me, and I used it in the past a lot to experiment with various open source web projects and see if I want to incorporate them into my games.

You can use that for wordpress development, pearl, ruby, chatbots, testing all that… anything web related.
This way you don’t mess up your live server.

Having your own local environment for web stuff is also a good stepping stone to start learning.

So at this point I’d like to bring up something very important.

>> It is absolutely vital to be tech agnostic and see the value in all technologies.

This makes you a better, more open minded, developer.

Nothing is better than the other. It’s the use case that something is built for that maters.

If you start arguing that something you’re good at is better than everything else, and other things should die, you are endangering other people’s use cases.

Every technology has an ecosystem, and culture. Each culture brings value to the table. One space is just as important as the other, and it’s important to learn from all of them.

A combination that I use all the time to build my things is

Adobe Animate + AIR

AIR is something that I’m very much in love with, and developing for it is more of a labor of love.
There are a number of community projects out there that all cater to this, and they’re all really interesting.

A good combination is Starling and Feathers.
This combination is extremely fast and lightweight.
It’s used a lot for kiosks because the filesize can be so low, and it’s not at all performance heavy.
It leaves a small footprint if you know what you’re doing.

A wonderful free and open-source application environment is Apache Royale.

* Apache Royale website

This lets you code in MXML & AS3 and output to different formats (including HTML5).
It fills an interesting niche without being haxe.
You can build a lot of non-game related things in it such as just standard software, tools, or varying productivity things, as well as games.

Like I said, it’s valuable, even important, to mix languages and work with them in congruence rather than picking one, and arguing about it being better.

Technology is our digital democracy.

The more options we have, the more free, open, and forward moving we are.
Everyone’s needs thrive in this type of environment, because everyone’s needs are different and we have options to chose what best fills those.

By “killing” or advocating for the destruction of technologies, buying into gossip about a technology (gossip that is not true or based on misinformation), jumping on hate bandwagons against a technology, we are removing options.

We are also endangering the communities, their work, and needs of these communities, by advocating for that destruction.
Every tool, tech, or language, is built on a philosophy. We need these varying mindsets and ideas.

For example, the arguments surrounding killing Flash were largely based on misinformation, lies from competitors, and outright bullying.
Security vulnerabilities, more often than not, were blown out of proportion or simply made up, and tech-journalists ran with that because it was good click bait.
It created an echo chamber of misinformation, that caused the anyone working with this technology to get really bullied over nothing.
They didn’t deserve this.

This has severely crippled the web, and an entire type of content, philosophy about what the web can be, and use case, was destroyed.
As a result this has endangered many aspects of the web. A lot of recent tech developments in browsers, and pushes in certain directions, have been purely in interest of major players.
It’s gentrifying the internet, and removing the freedom we used to have. Rather than allowing a space where a lot of options can exist, and thrive, we have very few now.
These are also slowly deteriorating.

You really have had to be part of that shift to fully grasp what we have lost.
Our idea of “web standards” is very broken because we allowed this type of bullying from browsers.

We need lots of alternatives, and lots of technologies, for a space to be healthy.
Many of our ideas of web technologies, and “standards”, are often based on misinformation.

For example, developing for the web is becoming less and less accessible now. Types of work that we used to be able to easily pull off (like casual games, MMO’s, thriving communities based around that) are less accessible to small teams, and require an almost unrealistic budget. It’s really made things inaccessible to anyone that’s not a large business, or “big player”.

Be careful when jumping on hate bandwagons advocating to kill something. Security wasn’t exactly the issue. Not if you examine how Javascript is now coming under the same fire.
It had a lot to do with advertising. The concept of banner ads is very broken (from a functional standpoint, and how we are using that), and I think any technology that is used to drive those will always be targeted.

It is important that you inform yourself otherwise you are handing a platform like the web over to monopolies which will force everyone out, and onto their platforms only.
(see the change from websites, and communities there, to the migration of everything existing on social media, and how that shift ended the “personal website”)

That type of control was never what the web is about.

We need alternative browsers, and to support those.
For example, Google is way too big, and that size is dangerous.

Another example… we used to have much more sophisticated content that could run in the browser, successfully across all browsers, and it didn’t cost a fortune to make.

As mobile phones came with less sophisticated browsers, that barely honor modern standards, developers had to distribute such projects in the AppStore or Google Play.
It’s not that it’s more resource intensive to allow it in a phone browser, it’s that you can’t make money off this content.
This was a long standing case for iOS’s browser.
This same thing can happen to desktop computers.

The point being, if a better technology comes along, people will naturally move to it.
Developers aren’t stupid.
Plugins where removed too soon, and the technology meant to replace it isn’t filling that need for everyone.
It’s almost inaccessible to build things that we used to build with this replacement.
The case of Flash, and other plugins, is that it was forcefully removed for a lot of political and business related reasons.

The Chrome HTML5 audio change, and resulting outrage to the suggested change, is a good example of what’s going to continue to happen as one specific use case is given priority over all the others. This sort of problem is made possible because browsers are now in control of the technology responsible for enabling the web. There are not enough alternatives.

In case you are interested, here are some links to educate yourself about how removing plugins played out…

* Link 1
* Link 2
* Link 3
* Link 4
* Link 5
* Link 6
* Link 7
* Link 8
* Link 9

These are from one source, because the guy that wrote about it was the only one that didn’t burn out trying to educate people.
You can read some of the comments to these posts. It gives you a really good idea for how to prevent falling for this in the future… as well as good counter arguments.

To summarize some of these links…

In many cases browser vendors, such as Firefox, outright lied about the Flash Plugin, and features that Flash supported (or it was ignorance, either way, it wasn’t accurate).
If you knew the technology, and really worked with it, you viewed this as a monopoly move.

It has endangered a lot of the web, and turned it into a more exclusive environment.
The solo-dev building a passion art project for the web is becoming a thing of the past as standards are changing to support only one use case that favors major players (news, watching videos, monetizing that through ads, etc…)

– Link to quote from Google and HTTP
– Link to quote from HTML, CSS and our vanishing industry entry points

Our use case (easily accessible large scale game development, experimentation, and so on…) is being phased out because of all this.
It’s almost sad to point to the difference between what a website used to be vs. what we think of a website now.

There was a point in web history where websites were being talked about as the “new emergent art form”.
To get a sense of that, this post is good (The Death of 2Advanced (2017)), and the comments on it are just as important.

I think the way we look back at this movement is strongly tainted by our prejudice against the technology. I also think that the way we view this technology is very biased. “Flash” is a ignorance-trigger with pretty much every developer. Mentioning “Flash” will likely immediately get you shut down with a load of “tech elitism” and sarcasm, even if you TRY to speak fondly of it. It’s become synonymous with bad, slow, ugly, vulnerable, and unprofessional, when this is very much a mentality that can be credited to a type of “bullying gone viral”. It’s like a meme. It’s just a knee jerk reaction to respond this way. Very few, if any, accurately remember it.

These websites (Flash websites) were very close to many experimental indie games in terms of what they did, or the experience they gave people. There was a large movement for “websites as experiences”, “atmospheric websites”, “websites rich in unique interaction”…
I’m not exaggerating, that’s how creatively rich that scene was.
This is all forgotten now. The majority of this work doesn’t even exist anymore because people where so bullied, and shamed, into removing it.
It wasn’t documented, and I don’t think we will ever really be able to remember it correctly. Not with the current mindset that was hammered into us about it “being bad”.

People that advocated for the killing of this often use very poor examples to capture the “gist” of this scene, and advocate that it’s a good thing it’s gone, because of poor usability or other belittling reasons.
Most of this is not true. It was vastly beautiful, and very influential, work.

It’s almost like killing alt games, and walking sims, and bragging about doing that because they were “so weird and unusable.”

Imagine an entire very influential art form, and community, just vanishing.
It’s hard to envision, but it happened.

This is something to learn from for games.
We REALLY should look at this as an example.
There’s a vital correlation here for what it means for our experimental work today.
We’re thriving now, but it really wouldn’t take much to kill all that in interest of capitalism.

So, like I keep saying… It’s really important that you educate yourself, and not fall for this stuff. Look deeper. Listen to all sides of the story. Don’t immediately trust corporate propaganda.

Adobe was committed to the Flash Plugin. It was almost painful to watch what the people working on it, and with it, where going through because of all the misinformation and hate surrounding it.
The choice to end it was a decision based on years of bullying.

I think the way all this spiraled is interesting, because if I said “Unity should die because the work in it is so bad”, I would get a TON of people dog piling on me… but somehow it’s OK, even a good thing, to say this about Flash. This type of elitism is amateurish.

The argument of “standards” vs plugins is a complex one, but plugins existed for a reason.
I understand the necessity of standards, but at the same time “standards” often cannot cover unconventional use cases, experimentation, or those that push a medium forward.

Sometimes “standards” can be used as an excuse by a monopoly.

It’s the loss of options like this that make the web less democratic.

So things you can easily do…

* Use alternative browsers.
* Educate yourself.
* Support open source!
* Build your weird games in alternative things.
* Support the independent developers that build your tools.

The fact that Flash, AS3, or that particular technology isn’t open source was often used as an argument against it.
This isn’t really 100% true.

There are a number of open source projects for this technology, as well as close alternatives, and these are still growing.

This is a technology that yields itself well to open source experimentation, if you know where to look.
These are all wonderful to work with too, especially if you want to build desktop software or apps (games too!).
Here are a few of them…

* Redtamarin

This is probably one of the most technically sophisticated ones. You can learn a lot by pocking around in it.
Redtamarin is based on the Tamarin project (eg. the Flash Player Virtual Machine) and allows you to run AS3 code on the command-line.

* Moonshine IDE

Moonshine is a free and open source middleweight IDE built with ActionScript 3 for AS3, Apache Flex, Apache Royale and Feathers development with Cloud and Desktop support. It’s 100% cross platform.

I think it’s interesting to point out that it says it’s built with ActionScript 3.
You can do a lot with this language, and the older stuff that was released for it.

So you see it fills a very fascinating niche of being both for application, or functional software development, as well as games. There’s an interesting convergence of things you can do with it as a result.

There’s a lot of talk, or speculation, that Adobe will soon discontinue support for AIR.
Even if they do it will still be around for a very long time, and there’s plenty of open source work surrounding it.

I wouldn’t worry too much about death, because there’s a lot of toxicity in the community itself. A lot of trolls occupy these spaces just to scare newcomers off from using it.

I think this is a good technology to familiarize yourself with so you adopt, or understand, many of the underlying philosophies it pioneered in the tech world.
Using it is just as much an act of digital preservation, as it is practical.

So here’s the final few options for building in it…

* ActionScript & MXML in Visual Studio Code

This is free. It’s a language extension for visual studio.


Another development toolkit. It’s Eclipse based.
It’s a bit old, but still very interesting.

* IntelliJIDEA
This one is my favorite. A lot of people build AIR apps with this.
You have to pay, but it’s really nice.
It’s an IDE for Java, but it also supports a variety of other languages such as SQL, HTML, Javascript, and so on…

Ok, that’s about it.

So… My final thought…

Love what you build,
love alternatives,
support choice,
and most importantly never be elitist.