I’m at the Ohio Game Developers Expo in Columbus, Ohio this weekend.
After Scott Foe’s talk on “Big Problems” I really had to pee. I could have talked to him after I left the auditorium, but I REALLY had to pee.
So did a lot of people. There was a line of people waiting to pee. While standing there, I noticed a ladybug on the sink countertop, on it’s back in the middle of a droplet of water, kicking like mad to right itself, but unable to because the water’s surface tension was gluing it to the countertop.
Ladybugs fall into the classification of “non-gross insects” so, without hesitation, I helped it get on it’s feet by lightly brushing it with my finger until it flipped over. It began walking around on the countertop, too heavy with water to fly.
A few seconds later, a urinal freed up and it was my turn to pee. So I stepped up and took care of what I was there to do.
When I went back to the sink to wash my hands, the ladybug was gone. I don’t know if it hid somewhere, not that there was a lot of places for it to go, or if someone did something to the ladybug.
The morals:
Take care of what you need to do.
The cost of doing what you need to do in the immediate term can be great in the long term.
If you see someone struggling, stop and help them, even if they seem insignificant. The cost of solving problems that are truly insignificant to you is often negligible.
You can’t do everything for them, but do what you can.
You can’t control what happens to them or what other people will do, but try to help them anyway.
This is a collection of scripts and macros that handle motion and action. A “control scheme” is a set of inputs and their associated actions. Add a control scheme to your player object with just two lines of code!
It is intended to handles input, motion, and action quickly and easily, while allowing you to extend to include any audio or visual effects that may be needed.
Currently, just two control schemes are implemented; I’ll be adding others in the future, much more is planned.
It’s currently free, as I’d like to get everyone to try it out and provide me with feedback, but when I’ve added more features I’ll be charging for it, so be sure to get it now while it’s free!
I was a backer of the Ouya kickstarter, and was very excited about the Ouya concept from the beginning. An inexpensive console aligned toward indie game developers as well as modders, using a digital delivery model offering a free demo of any game in its library — what’s not to love about that?
Yet, when I received mine, I didn’t open it right away. In fact, I opened it this weekend, after it sat unopened on my mantle for over a year. Why? I don’t really know. I have a LOT of game consoles in my collection, and most of them don’t get near the amount of playing time that they deserve. But last week, I heard that Ouya has been looking around for interested buyers who want to acquire them, and I figured I had better unbox it and download a few games for it before they go out of business or change the way they operate entirely.
I have played on an Ouya previously, on a few occasions, and I liked the console a lot. I had a lot of fun playing Towerfall: Ascention at my friend Ben’s birthday party a few months ago. I knew at the very least I wanted to pick up that title, even though it is also available on other platforms.
My experience so far has been rather disappointing.
First, I carefully took everything out of the box and hooked it up to my HDTV. I expected this to go very easy, and yet it didn’t. I thought the package was attractive at first — a shoe-box sized bundle featuring an Ouya, one controller, two AA batteries, an HDMI cable, and a power supply. Easy as can be to figure out how to hook everything up. I plugged everything together and figured out where the power switch was, and turned it on. I expected it to prompt me to pair my controller, which it did. If I remember correctly, the controller came with the right side battery cover off, and although it came with 2 AA batteries, I only could fit one in (and only saw terminals for 1 battery). Not realizing at first that the left cover also was removable and hiding a second battery slot, I puzzled over the purpose of the second battery, and wondered why my controller wouldn’t pair. It said to hold the power button down until only the middle two lights were flashing, but nothing was flashing at all. Was it defective? Had it died on the shelf due to long storage? I tried for a few minutes and then went to googling, and then somehow or other figure out about the second battery cover, and got everything working. What a relief.
I next expected to get connected to the internet, and, probably take updates and sign in to my Ouya account, which I’d set up long ago. I hadn’t read specs in a long time, but I figured that the Ouya would have wifi onboard, and sure enough it did. I had to enter my wifi password several times before it successfully joined my network, though. I’m not sure why, and I was pretty careful about entering it correctly, too. I have to assume I somehow entered it wrong 3-4 times before I got it right, but I don’t actually believe that I did.
I had the same problem again with entering my password when I tried to log into my Ouya account. I actually could not add my account until I ran system updates. This was rather frustrating, using the on-screen keyboard reminded me of the bad old days of NES save state password entry. I’m quite certain that I had entered both my Ouya account credentials, and my wifi credentials carefully and correctly several times before they worked. But I don’t expect anyone to believe that, because it’s simply inexplicable why they wouldn’t work if I had entered them correctly the first time. Once authenticated, the Ouya remembers your password and keeps you logged in, so fortunately I won’t have to re-enter the info again and again.
Here’s the next disappointment I ran into. Eventually, I authenticated and was able to browse the Ouya store for games to download, try, and buy. For some reason, when looking at a game’s description page in the store, my Ouya starts having glitchy video signal processing issues. I shot some video of it with my smartphone.
It’s bad that it does this at all, but fortunately it seems to only do this in the store on the screen where you preview a title before purchasing it. Despite the glitchy video, I was able to complete purchase and download the game.
Towerfall is about 160mb, and downloading it took several minutes. But it felt like the Ouya was slower at downloading than my other devices. Normally 160MB might take 3-4 minutes to download over my connection. I didn’t time it, because I really wasn’t expecting it to be an issue, but it seems like it took 10-12 minutes. And several times the progress bar didn’t seem to be moving and I wondered whether the Ouya might have locked up. Eventually, though, it completed the download. I don’t have any way of telling if the Ouya is just a slower-than-normal device when it comes to downloading files over an 802.11g WPA2/PSK connection, or if maybe the server it connects to doesn’t have the greatest bandwidth. It’s a minor complaint, since it’s a one time thing, and in any case it took far less time than it would have taken me to drive to a store and buy a physical copy of a game and then drive back home.
So, finally, I have everything I need in order to play. I’ve hooked everything up, turned it on, gotten the controller to pair, connected to the internet, updated the system to the latest firmware, entered my credit card info, and bought a game.
I go to launch Towerfall, and start playing the solo campaign mode. The game runs very sluggish, as though in slow motion. I feel like the game is suspended in molasses. WTF? When I played this game at Ben’s birthday party, it was fast and fluid. The action was smooth and frenetic. I wondered if “Normal” mode is just slow like that to make it easier, and switch to “Hardcore” mode. Nope. It’s still playing at maybe 1/4 to 1/2 the speed I remembered. It’s less of a reflex game this way, and more of a strategy game, as I plan out my moves several seconds before I’m able to make them.
I reboot several times, hoping that it will get better somehow. It doesn’t. Resigned, I play through the solo campaign levels. It’s still challenging, but it’s more frustrating because you can see your death coming often several seconds ahead of time, and yet you can’t do anything. After a few tries, I’m able to beat several levels, and unlock most of the game. By the time I get to the level called Mirage, things are waaaaaaaay slow. In fact, the input from my controller seems to be lagging as well, and I watch as my character moves in response to input I’d entered 5-10 seconds ago. I take my had off the controller entirely and watch him run, jump, and shoot all on his own. This is pathetic!
I found that if I quit the game and went back into it, it would become more responsive again, but never more than about 1/2 speed, and if I played for 30-60 minutes and didn’t quit/restart, the controller lag would get bad enough that it felt like I wasn’t playing anymore, and was just watching a demo mode play itself.
I tried to figure out how to reboot the Ouya, the only thing I could figure out through the on-screen menus was putting it to sleep. So I held the power button until it shut down, then restarted it. It didn’t help much, if any.
Could the system updates have introduced so much bloat that they resulted in a vastly slower system? I have no way of knowing for sure; I couldn’t do anything besides join the wifi network without applying updates, and they applied themselves automatically, without asking me if I wanted them or not.
Is there anything I can do to fix this? Add memory? Factory rest? It remains to be seen. Supposedly the Ouya hardware is easy to open up and upgrade if you want to, but I haven’t looked into it yet. I’m reluctant to do the factory reset, after all the problems I had with connecting to wifi and logging into my Ouya account, but that seems like the easiest troubleshooting step to take next.
I’m worried that the launch hardware specs are just that poor, and that this is all I can expect out of my system. Would I get a full-speed Ouya if I bought a current hardware revision? Perhaps I might, but I wouldn’t gamble another $99 on it. The other possibility is that my particular unit is bad for some reason. Maybe the heatsink isn’t properly seated, and it’s throttling its CPU down to prevent overheating, or something like that. I haven’t contacted Ouya yet to inquire about it, but I plan to, and will update this blog entry once I’ve heard from them.
Lastly, I wanted to test the Ouya with other games, to see if the problem was just with Towerfall, or if it was across the board. Since I was having video glitch problems with the Ouya itself, I thought I’d try accessing the Ouya store through my laptop, and push a few titles to the console. I went to shop.ouya.tv, and browsed a bunch of games that looked good, and clicked Push to my Ouya. I get prompted for my Ouya account login again, and supply the user id and password…
I get this error when I try to push a game to my Ouya from my web browser on my laptop.
So, something’s broken there. I’ve tried it in Chrome, with javascripts unblocked and ads unblocked, and I’ve tried it in IE, and it does it every time. Well, wait a minute, it says to log in with your Ouya Account name OR email address… I wonder if I use my email address instead of my account name… that did it! So at least it works, but it makes Ouya look really bad that it doesn’t take either, when it asks for either. And I’d rather use my account name than my email address anyway.
Update: It STILL doesn’t work! It worked that ONE time, and after that, it hasn’t worked at all. I keep getting the same error message, above, no matter what I do. Whatever web browser, whether I use my user name or my email address. I don’t even understand why I am forced to authenticate for each and every push to my console. Why isn’t it good enough that I’m already logged into the ouya.tv website?
To be continued, after a factory reset, more testing, and a call in to Ouya support….
Day 2
I received an email from Ouya Support in under 24 hours, probably under 12 hours, actually, which is quite good. Not as good as live chat support, but I’ll definitely take it.
The response suggested performing a Factory Reset, and provided instructions on how to boot into Recovery mode. This puzzled me somewhat, since I had seen an option in the System menu for a Factory Reset, and wondered if I needed to bother with Recovery Mode. I replied asking whether the two resets were equivalent, or if the Recovery Mode Factory Reset was a kind of “ultra” factory reset that did more, and if so, what were the differences.
I said I’d wait to hear back from them before proceeding, but then I got impatient and decided to do the regular Factory Reset and see if it made any difference.
Sure enough, it really did. Now Towerfall is playing at full speed. Also, this time when I joined my wifi network and logged into my Ouya account, both authentications worked flawlessly the first time. Of course, I still can’t prove that I didn’t just enter them correctly the first time, but at least I didn’t have to re-try several times before it worked this time.
Also, the video glitch that I was seeing is no longer evident. So, good. It seems that the reset worked, and fixed all of my problems.
The downside of the Factory Reset is that you lose all your games. You have to re-download and reinstall any games that you had on your device prior to the reset. This is even true of games on your removable SD card, if you use one. Which, I suppose, is due to the factory reset performing some kind of key deletion which makes the freshly-reset Ouya no longer able to unlock the games. Which prevents easy piracy, but also prevents you from using the Ouya if you ever need to do a factory reset and the Ouya download store is no longer available due to Ouya going out of business or changing the way they deliver content, or simply pull a title from the store.
I really don’t like this. It is not as good as owning your copy of a game, which is what gamers have been used to since the invention of the home game console, but which the industry seems to be pushing to change.
I don’t like games as a service because they reduce your control and place you at the mercy of the service. It eliminates the secondary market, since by definition you cannot resell the service, whereas in the games-as-products model, you can sell old games secondhand if you want to. Services are great, if they offer something that didn’t exist before, such as the capability to restore your library in the event of media failure, or the capability to log in on any compatible device and have access to your library from anywhere, but services should always be add-on, not take away.
As well, when a company can no longer, or no longer wishes to continue offering a service, the things the service delivered ought not to disappear along with the service. The service provider ought to unlock any DRM so that their owners who paid for them can keep playing them if they wish. Additionally, any services that rely on server-side code (such as multiplayer) should be sold off rather than shut down, or open-sourced so that the entire game experience can continue. For those who wish to preserve game history, this is essential.
However, since game companies tend to behave like companies, this is unlikely to ever happen, so as a gamer, I am not a fan of the games-as-a-service model. It’s been almost 40 years since the Atari VCS, and you can still find and buy Atari VCS games today. Not just remakes and repackaging — although those are also available and continue to sell, despite emulation and free ROM downloads, either — I’m talking about EEPROM cartridges and original consoles.
In 40 years, I doubt very much whether any games-as-a-service being offered today will continue to exist — if they do, you can be certain that we’ll have been made to pay for them many times over, and that they will not exist in the exact form that they did today, thanks to updates and hardware revisions which change the experience.
To make things even worse, the Ouya didn’t remember what games I had downloaded the night before. I had expected this to be tied to my user account, but rather than provide me with a download history that I could easily run through and re-download, the shop only remembered paid games that I had purchased, not any free games that I had also downloaded. This meant browsing through the entire Ouya store again, re-selecting the games and re-downloading them. I had expected to need to re-download them, but that I would have had a list of games I had previously downloaded, and a prompt asking me if/which ones I wished to re-download. Having to hunt for them all again, one by one, was a bit of a pain.
Also, Towerfall is now WAY harder. Oh well, I guess I’m getting what I paid for. This is a good thing :)
In all, the Factory Reset seems to have cured all of the problems I was having, with the exception of Push to My Ouya from outside the device. That still is broken. I’m not surprised the factory reset did nothing to fix that, as it seems to be an issue with the website, not with my device. I’ve replied to Ouya Support to ask them for additional help on this.
Epilogue
Ouya support confirmed that there was a problem with Push to My Ouya, but it wasn’t clear whether this was a problem affecting only my account, or all users. In any case, they advised that they would be looking into it further and would get back to me within a week. They were good as their word, I received a follow-up email from them yesterday advising that they believed the problem to be fixed, and asked me to try to push something to my console in order to verify it, which I did successfully.
Although my unboxing and setup of my Ouya was not without a number of problems that I can only consider to be severe, I found Ouya Support to be quite good at resolving my problems effectively, and treating me personably throughout the resolution of my issues. I always felt like I was receiving personal attention from a real person who knew what they were doing, which is a rare thing. Now that my issues have been resolved, my Ouya is everything I had hoped it would be. While no console is perfect, I find that Ouya provides an enjoyable gaming experience, and is the most friendly company to both gamers and developers, especially indie studios. If you enjoy the sorts of games that indies produce, Ouya gives them a very nice presentation.
As to the future of the console in this difficult market, I hope they continue to have one.
Today mmap mini maps 1.2 was released on the GameMaker Marketplace. It’s a really great asset, which ads a powerful, configurable, easy to use mini map system to your GameMaker: Studio project. I’ve spent dozens, if not over a hundred hours developing this asset to the highest quality, and am selling it for just $4.99.
Vector arrows: configuration option allows moving blips to have an arrow drawn to the map screen showing the direction and relative speed.
Edge blips: configuration option allows distant objects that are out of range to be drawn at edge of map screen, showing the direction to the distant object.
Sound support: configuration option allows for sound effects to be played when a sonar pulse is emitted, or when a radar blip is refreshed.
Room, View Borders: configuration option draws a border to the map screen, showing the edge of the View or Room boundary.
Documentation updated: Includes a new section showing example code to make setting up your oMmap easier than ever before.
Bug fixes:
I noticed that the functions that I had added to the mmap_mini_map.gmez extension are not working. I’m not sure why they are not working, but I have replaced the .gmez functions with Script resources for now, as these do work. This is a temporary workaround, as the Scripts don’t have autosuggest support to tell you what arguments the script takes. Once I have figured out how to get the functions working again, they’ll be converted back. Additional functions to support the oMmap object will be forthcoming at that time. They were planned for 1.2.0, but were held back due to this issue.
I have created a font I call min. It’s the first font that I’ve created. I used bitfontmaker. It was easy and fun, and I liked it. I want to do it more. Minimalist pixel art is something I enjoy, and I wanted to try my hand at the glyphs of a typeface, so I created the most minimalist typeface I could that was still legible. I might have been able to go further but I like the size. Most letters are 3×5 px or smaller in their original drawing.
It’s also an asset package in the GameMaker Marketplace. If it does well I’ll probably create a font pack of fonts that I develop over time, and see how that does. So if you’re a GameMaker user, please download it from there so I can get accurate analytics stats.
Update: I’ve added a second font to the collection, submin.ttf.
I’ve re-published the mmap mini maps over at the GameMaker Marketplace. The new version, 1.1.6, fixes the bug of the missing mmap constants — this time the right way, replacing the earlier workaround that I had supplied a few days ago.
Building the asset package the way I needed it was not obvious, but with the help from some GameMaker Community Forums users, I was able to learn the correct method to get the constants added to the package.
Two ways to build a Marketplace Asset
GM:S has two ways to build an Asset.
The more visible method of the two, and the one I had used at first when building my Asset, is to use the Package Manager, located in the Marketplace Menu.
Using this method, you can only build an asset which includes “project resources” — Sprites, Sounds, Backgrounds, Paths, Scripts, Shaders, Fonts, Time Lines, Objects, Rooms, or Included Files.
NOT include-able are Extensions, Macros, Game Information, or Global Game Settings. It’s a good idea to understand the rationale for not including these, and how YYG intends for GM:S users to work around these limitations:
It makes sense not to be able to include Extensions, because building an Asset is building an Extension, and Extensions are not designed to be nested.
Macros cannot be included, but I’m not clear on why. Perhaps because it’s not easy to separate built-in Macros such as GM_version and GM_build_date, and importing these would create conflicts?
Game Information is a deprecated legacy feature which YYG seems to be phasing out. No longer can Game Information be displayed at runtime when a game is playing. So it really only serves to exist as a readme file that you can access from within the GM:S IDE, when working on the project. The same information you might put in here is better added to an Included File.
Global Game Settings includes a number of fields that are developer-specific, and should not be shared, such as advertising account credentials, Facebook App ID, etc. There are some settings that would be nice if they could be included in an Asset package, such as HTML5 graphics settings, and options for Use New Audio Engine and Short-Circuit Evaluations, but if your Asset depends on such settings, the only option is to document that in your user manual so that users of the Asset can be informed of how they will need to set up their project.
The other way to create an Asset for the marketplace is to build an Extension. Right click on the Extensions folder in the Resource tree of a project, and Create Extension. Then right-click the newly created extension and Add Placeholder. The purpose of a “placeholder” is vague, but what it allows you to do is define Macros which reside at the extension level,which is done one at a time, in an interface that is different from the project-level Macros editor, and even more of a pain to use.
You can also add Functions to the Extension placeholder. You can add a code file, such as exported scripts in .gml format, or a .dll, .js, .dy-lib, etc. and then define Functions which hook up to the code file.
Once the Extension is defined, you can create an Asset out of it, by logging into Marketplace, and then right-clicking the Extension, and choosing the Create Asset Package option. Creating the Asset Package this way is much the same process as creating an Asset Package from the Marketplace menu, with the exception that the Extension that you right-clicked on will be included with the Asset Package.
Why there isn’t a simple way to include an Extension in the Package Manager build process, I don’t know. I guess the answer ultimately is that this is a new feature in GameMaker, and still in beta. The UI design is rough, inconsistent and not as obvious as it could be. Hopefully this will be addressed as the features are refined. But, for now, it is what it is, and game developers who use GM:S will just need to be aware and familiarize themselves with the differences between these two methods of building an Asset Package.
I’ve been struggling with updating my mmap mini maps asset pack in order to fix a bug that I discovered with it. Since I’ve been unable to do so, I’ve elected to temporarily withdraw the product, rather than continue selling a broken asset. I’ll have it back up as soon as I can get it fixed, but I don’t know how long that may take, due to problems I’m having with the tools.
First, the bug. In the mmap mini maps package, there was supposed to have been a collection of Macros (what used to be known until recently as “Constants”), which I used to assist with programming the Mmap object. When I built the Asset Package, I failed to realize that these Macros did not get included. Without the Macros defined, the project doesn’t work.
One workaround would be to add the macros manually. They are documented completely in the user manual that I wrote. I can also furnish a .txt file that can be imported, to save the data entry. If I can’t get the tools to cooperate, that may end up being the solution I go with for the short term.
It was not obvious due to the way the package builder works, and I didn’t notice it in testing because I tested it by bringing the package into the same project that I had used to build it in the first place.
Lesson learned: Build the package in one project. Import the package into a fresh project to test.
Betas gonna beta
When you build an asset package in GameMaker: Studio, you start by taking some project that you’ve been working in, and then going through the Marketplace Package Manager to build a Marketplace Asset using resources from the project. However, the interface that YoYoGames have built is still very beta. It is unstable, resulting in error messages and crashes. But the greater issue is that the design of the interface, and the workflows it supports, is also rather poor and unrefined at the moment.
When you build your Marketplace Asset Package, you are presented with a Package Builder that allows you to select resources from the project and add them to the package. But the resource selection options are not complete. You can’t select Macros. They just aren’t even there.
So how do you add Macros to a Package? By adding them to an Extension, supposedly. There’s an Extension Builder built into the GM:S IDE, as well as this new Marketplace Package builder. I’m presently unclear as to the relationship between Extension builder and Package builder, but the end result of a Package is that you get a package that is ready to be uploaded to the Marketplace as an Asset, and when you download Assets that you’ve purchased from the Marketplace, it installs itself in your Library, where you can add it to a project, where it… becomes an extension.
The Marketplace asset-extension has whatever resources you had added to the Package — sprites, scripts, objects, sound effects, fonts, included files, timelines, shaders, you name it… just no macros.
But if you build an GMEZ extension using the Extension Builder interface, things are very different. I can create an Extension, add a “placeholder” to it, where I can define Macros (one at a time, which is horrible, like each Macro is its own asset in the tree), and I can add a code file, which can be .gml, javascript, a dll, a dy-lib, or java. And I can define Functions which access the code residing in the code file, providing an interface between GM:S and the functions provided by the extension.
And the documentation shows a similar resource picker for handling both importing resources from a completed Extension into the Project, and for moving project resources into an Extension that you’re authoring. But, for some reason when I am in the Extension Builder, it’s one-way only, I can import from the Extension to the project, but not from the project to the extension.
So when I build an Extension, the only things I can put in it are Macros and Functions and Code files. And when I build a Package, the only things I can put into it are project resources other than Macros and Extensions. So I can’t add Macros to an Extension, then add the Extension to the Package. And I can’t add project resources to the Extension Builder. So there’s this impasse that I can’t figure out how to work around.
It could be the documentation is just out of sync with the version of GM:S I’m running, or it could be there’s some serious design bugs in GM:S currently, or it could be I completely misunderstand both the documentation and the user interface, and am missing something that will become apparent to me eventually.
I’m a bit frustrated now, and very tired of banging my head against a wall trying to figure out how to make it work, so I need to step away from it for a short bit.
GameMaker Marketplace has been available to Early Access users for a little over a month now. I think it’s a good time to talk about the experience.
I first heard about the Marketplace in July 2nd, and was very excited by the prospect.
I got to work on putting an account together and developing my first product. I put my first store asset, mmap mini maps, up on 7/20, priced at $4.99. I wasn’t sure what to price it at, but considering the amount of hours that I put into it, for someone needing a mini map for their game this would save them dozens of hours, and time is money so it seems like a very good value. So far it has sold only one copy, but I’m still happy to have made my first dollar.
It’d be easy to feel disappointed, but I’m not surprised, really. I’ll download anything that looks interesting for free, but the moment you put a price tag on something I hesitate. Unless I have an immediate need, and unless I know for a fact that this asset will work for my need, and I don’t feel like I can build it myself easily, I’m unlikely to pay for something. And I don’t think other developers are too different in that regard.
Winds of change
With the announcement of the Marketplace, one worry I had is that it could have a chilling effect on the GameMaker Community, in that people won’t be as open with sharing their code as they were prior to the Marketplace launch. So far I don’t see that happening, but it’s still early.
It does take quite a bit of effort to take something from a quick example on a forum post to a full-blown product, so I expect the forums will continue to be a place where people share code with each other, and perhaps the best things from the community forums will get developed further into commercial-quality assets for the marketplace. That would be good.
On the other hand, if everyone thinks that their code is valuable and that they can make money from it, maybe they won’t want to share it in the community forums, lest someone else “steal” the code and turn it into an asset before them, and try to make money off of it. Money/greed serves as a disincentive to community cohesion. So rather than put the idea out there at all, and get vital feedback from the community that it’s desired, or how to improve it, the greedy dev builds it in secret, and uploads a product to the marketplace that is inferior to what it could have been had the community collaborated on it openly. That would be bad.
People are very giving and friendly when they see the value of helping each other by sharing what they know, and I generally find this value to be greater than that of money. The $3.50 that I’ve earned by my one sale so far of mmap mini maps isn’t going to make a great difference in my life. But if I think about all the code that has been shared on the GMC forums that I’ve learned from, that has made an amazing difference. The knowledge I’ve gained from hundreds of hours I’ve spent on the forums is a treasure. The $3.50 I gained from perhaps a hundred hours of developing mmap is a pint of beer. The experience I gained from writing it is worth far more than the money I’ve earned from it. Putting a price on some things devalues them.
Nickeled and Dimed
The other worry that I have had about the Marketplace is that these assets will end up costing more and more in the long run. Not in terms of prices going up for individual downloads, but from the aggregate total of all the little things that cost $1-2. The cost of a GameMaker license has always been a good value. GM:S provides a very good basic framework for game development, but now in addition to that cost, there’s all these asset packs that we might “need” to buy in order to have features that a game developer “must have” in order to make a pro-quality game. Don’t such features belong in the core product? Some of them, at least?
And, if YYG does decide to incorporate features that were first implemented in some very popular marketplace asset, what then? I imagine the asset’s developer will feel as though they were effectively working for YYG for very, very cheap, and may not appreciate their revenue maker becoming redundant. YYG will have to take care not to alienate developers, perhaps by licensing/buying the the rights to well-developed assets that they wish to incorporate into the core product.
I really want to see the core GM:S product contain all the features that I need to build a high quality game easily — not to have to buy the core product, and then accessorize it with endless add-ons that individually cost $1-2, but in aggregate end up costing as much or more than Studio itself.
Healthy ecosystems should support a healthy core
Another problem I foresee is that all of these “accessory” assets will be of varying levels of quality, will not be maintained by their developers forever, will not be designed to work with each other, will not offer as fast performance due to being programmed in GML rather than C++, etc. What the marketplace does is multiply the number of developers who are developing (extending) GM:S. By doing so, what we collectively risk is that our efforts will be chaotic, and unmanaged, resulting in a lot of waste, poorer overall quality, and all the other things a lack of good management causes.
I’ve seen this with the WordPress ecosystem, as well. Themes and Plug-ins become abandoned, whether due to unpopularity, developer disinterest, or whatever, and the sites that use them end up stuck on some old, outdated version, looking for a suitable replacement. The WordPress ecosystem overall is healthy, vibrant, successful, due to its large userbase, but there are an awful lot of plug-ins that I’ve had to stop using because the developer quit supporting it. Fortunately, I’ve always been able to find a replacement when I’ve needed to, but it does become a pain to have to select from among a number of popular plugins, which is the best fit for me, and then make sure that it integrates well with everything else on my site.
This makes me think that a better way to have a large scale community of developers contribute to a code ecosystem is the open source model. It’s a very different business model from the one YYG currently develops GM:S under, and YYG has stated many times that they will never open-source GameMaker, but be that as it may, imagine if the IDE, the runner, and the GML language itself were open-sourced so that the community of developers could commit code to the core product, rather than be limited to extending it and creating reusable assets for projects. Granted, the vast majority of GameMaker users probably aren’t competent C++ programmers. So the idea isn’t particularly workable.
But the idea that the best Marketplace assets should somehow make it into the core product is one that has great appeal to me. Perhaps “best of Marketplace” value bundles could be converted to native code, merged and integrated into the core GM:S product, and sold as +$99 add-ons for Professional, or part of the Master Collection suite, the revenue from which would be shared among the contributors. I’d love to see a “Best of Social Media”, “Best of IAP”, “Best of Advertising”, “Best of Analytics”, “Best of Physics”, “Best of 2D Platforming” collection arise in a few months or years. That could be really cool.
The value proposition: saved time vs. lost expertise
You don’t have to buy Marketplace assets, of course, since you can still develop your own projects, but now we have a dilemma to consider: develop from scratch at the cost of your own time, or save time by spending money to buy a ready-made asset? Most of the time, the time saved by buying a reasonably-priced asset from the Marketplace will be more valuable than the money spent for the asset.
But which is truly the more costly option? Buying the asset pack gets you the feature now, so you’re buying time. You can also buy things that are beyond your capability or understanding, which is a great value since it enables you to do things you couldn’t otherwise figure out how to do. And you’re probably buying quality, assuming that the developer of the asset pack has been at it longer than you, and is doing it better than you would have, although this is not guaranteed.
But then you have to spend time to integrate the asset pack into your product, and learn how it works, possibly modify or extend it in order to work how you need it to for your game, maybe even debug it… does it really save you as much time? Maybe not as much as it seems at first.
And on the other hand, by rolling your own features, you gain valuable experience and expertise, you understand the problem and the solution much better than you would if you simply bolted on an asset pack that does it for you without having to engage mentally and solve the problem. In a way, buying an asset from the Marketplace is like paying someone else to go to the gym and work out for you. The weight still gets lifted, and you save the time so you can spend it on other things, but at the end of the workout you don’t have the muscles. And, lacking those muscles, it leaves you less able to lift more weight that you need to lift. This value that is lost from buying assets is the most important value of all.
On the other hand, you may be able to make gains by studying that code that you purchased, particularly code that solves a problem that you had no idea how to solve yourself, or does so in such a way that you might never have thought of yourself.
Above all, you gain unique flavor and style from doing things your way. If everyone uses the same sprites, or tiles, or code, everyone’s games will end up feeling more generic, standardized, commoditized. For works of art, this is not desirable. Hand crafted resources give a project personality, quirks, and uniqueness.
In any case, the Marketplace is come, and with it, whatever consequences will come with it. It’s a new era for GameMaker: Studio users, and one filled with opportunities limited only by what we can imagine.
Simple Performance Test is a stub project to enable GameMaker developers to quickly set up and run performance tests comparing two snippets of GML code to see which is the faster.
Ever wanted to know which way of coding your project will run faster?
Want to understand GML better?
Use Simple Performance Test to compare two blocks of GML code, and prove which is faster.
Don’t guess at which code is better optimized, test it and know!