csanyk.com

video games, programming, the internet, and stuff

GameMaker Studio 2: My Library UX suggestions

I’ve been sitting on this suggestion for a while.  I raised these concerns on the GameMaker forums some months ago, around the time GMS2 was in beta, or shortly after.

Don’t get me wrong, GameMaker Studio 2 has a much better interface for the Marketplace My Library as compared to GMS1.x, but there are a few things that I would love to see improved with it.

  1. The “New Version” category shows literally only those items for which you already have some version downloaded, and for which a newer version is available for download. It does not show items for which you have purchased, but never downloaded before. This makes hunting for newly purchased assets in My Library a HUGE pain. I contend that when you have just purchased something and never have downloaded any version of it before, ANY version that exists at all is a “new version” and thus should show up in the New Version category.  Please have everything that is “new” (whether a brand new purchase, or a update to an already-downloaded asset) show up here.
  2. Every time I hit the Download button for an asset in the New Version category, My Library jumps to the All Assets view, then shows the asset being downloaded. Now, if I want to go back and find the next asset in New Version to download it, I have to go and click on the New Version category to go back to it, each time. Again, this is a huge pain — a lot of extra clicking back to the New Version category for each available updated asset that I need to download.
  3. There’s no “Select all”. So when I have all these updates awaiting download, I have to download each of them, one at a time. It would be so much better to check a checkbox to select all available new assets, and then download them all with a single click.

GameMaker Studio Tutorial: Getting Into Shaders

Shaders have been a part of GameMaker Studio for a while now, having been introduced in 2014. Since their inclusion, I have mostly remained mystified by them, with a vague and cloudy understand of what they are and what they can do, and haven’t used them at all.  That will [hopefully] start to change today.

As always, when try I learn something new in programming, I find that writing up what I’ve learned helps me to remember and keep my learning organized. I like to publish my notes so that they can help others, and so that others can find errors and make suggestions for better ways to do things. I’m still very new to working with shaders, so I’m not trying to put myself out there like I’m some kind of expert, but here’s what I’ve been able to learn about using shaders with GameMaker Studio so far:

Shader basics

First, we need to understand what a shader is.  A shader is a specialized program that processes graphics.  Shaders are executed on the Graphics Processing Unit, or GPU, which is specialized hardware for accelerated graphics processing.  Thus, shaders are very fast.  As well, since they work on the GPU, using shaders will free up the CPU to do other tasks, which can further help to improve the frame rate of your games.

This sounds like enough of a reason to want to use shaders, doesn’t it?  Well, it gets better.  The main thing about shaders is that they can do amazing visual effects, which will can make your game look better, but can also play an active role in how the game plays.  For example, you could use a shader to handle the graphical processing of a special view mode in the game, such as night vision or x-ray vision.  One of my favorite shader-based gameplay mechanics that was centered on the use of shaders was Daniel Linssen’s Birdsong, winner of the “Overall” and “Theme” categories of the Ludum Dare 31 compo held in 2014.  The theme of LD31 was “Entire Game in One Screen”, and Linssen’s approach to this was to create a giant one-room game, that was crammed into a single screen(no scrolling), and, using a fish-eye lens effect done with a shader, magnify the area where the player is so that it was large enough and detailed enough to be playable.

There’s virtually no limit to what graphical effects you can come up with using shaders, other than the limits of your imagination and of course your programming and math skills.  It also helps to understand how computers work with graphical concepts such as color, pixels, binary math, and so forth.  Additionally, scientific knowledge in disciplines like optics can be very useful. Shaders have their own specialized programming language that they are coded in — actually there are several related languages to choose from.  Because of this, shaders are considered an advanced topic in programming, and there are numerous hurdles to surmount in order to be able to write them yourself.

That said, shaders are re-usable bits of code, and so one of the first things you can do when you start getting into shaders is to simply use pre-existing shaders that have been written by other people.

Getting Started with Shaders

Before you can use shaders, you’ll want to familiarize yourself with a few concepts.

Shader references

Here’s links to the relevant pages in the GMS manual on using shaders in the context of GameMaker Studio:

GMS1:

Shaders Overview

Shaders GML reference

Shader Constants

Tech Blog Shaders tutorial: 1 2 3 4

GMC Forums shader tutorial.

GMS2:

Shaders Overview

Shader Constants

 

Other shader resources (general)

Language References

The four shader languages that GMS supports are: GLSL ES, HLSL9, HLSL11, and GLSL.  Which one you need to learn and use will depend on your target platform, but for this article we’ll focus on GLSL ES, since it supports the most target platforms (all of them, except Windows 8).

GLSL ES language specification

HLSL language specification

I haven’t gotten into the shader languages enough yet to know why you’d ever pick HLSL over GLSL, but presumably there must be some advantage to using HLSL when targeting Windows platforms, either in terms of correctness or performance.  Otherwise, I would think you’d be better off just sticking with GLSL ES and be compatible with the most targets.

Tools

Shadertoy Shadertoy is a wonderful website that allows you to play with shader programming, running them in your web browser.  Then you can share your shader creations with the community of users of the website, and in turn you can demonstrate and use shaders written by others.

Other graphical concepts in GameMaker, and how they relate to shaders

It’s not a bad idea to review and understand the entire chapter on Drawing in the GameMaker documentation. There are many concepts that you will need a working knowledge of in order to understand how to use drawing to its fullest capacity, and to get things working together smoothly.

But the manual isn’t the end of the story. Often I find that the manual doesn’t go far enough to explain how different concepts work. The sections on blend modes and alpha testing are particularly inadequate by themselves. The manual also doesn’t go very far to demonstrate or suggest how different features and functions can be connected to one another. That’s for the user to infer, and verify through experimentation. This is great if you are creative and love to experiment and discover. On the other hand, there’s so much that has already been figured out and discovered by others, and it would be nice if that was all documented in an easy to search reference somewhere.

Read the entire manual, cover to cover, if you can.  Create little demo projects to test your understanding of what you’ve read, and figure out how to do things.  Read it again.  And refer to it whenever you need to.  There’s no substitute for reading and understanding the manual. I’ll still touch briefly on the major concepts here, for summary:

Surfaces

All drawing happens somewhere, and in GameMaker that somewhere is called a surface.  Behind the scenes, a surface is simply a chunk of memory that is used to store graphics data. You can think of it as a 2D grid of pixels, stored in the program’s memory, and drawn to the screen only when called for.  You can also think of it as virtual “scratch paper” where you do some work “backstage” and then bring it out to use in the game when needed.

The application has an Application Surface, and by default everything is drawn here.  But you can create other surfaces, which you can work on, composing a drawing off-screen, until you are ready to draw it to the screen. As you might imagine, there are countless reasons why this is useful, and endless ways to make use of surfaces.

Surfaces are relatively easy to use, but are considered an intermediate level programmer’s tool in GameMaker, for a couple of reasons:

  1. Surfaces consume memory, and need to be disposed of when no longer needed.
  2. Surfaces are volatile, and can be destroyed without warning, so should not be assumed to exist.  For example, if the player switches focus to a different application, or if the computer enters sleep or hibernation mode, or if the game is saved and resumed, surfaces that were in existence at the time the application was last running may have been cleaned up by the operating system, and will need to be re-created if they don’t exist.
  3. All drawing must happen in one of the Draw events.  If you try to use draw functions in other events, it may or may not work correctly, and this will vary from computer to computer.  I once made a game where I did some set-up in the Create Event of an object, where I created a surface, drew to it, and then created a sprite from the surface, and assigned the newly created sprite to the object.  It worked fine on my computer, but when other players downloaded my game to try it out, it did unexpected things and the graphics were glitched.  Fortunately, I figured out what the problem was, and fixed it by moving this sprite creation into the Draw Event.  Once I did this, the game ran correctly on everyone’s computer.

Drawings done to surfaces can be run through a shader, as input, and thereby be processed by the shader. In short, a surface can be the input image data for a shader, and the output of the shader will be the processed version of that surface, transformed by the shader.

Blend Modes

For a long time, long before GMS introduced shaders, GameMaker has provided blend modes. Blend modes affect what happens when GameMaker draws graphics over existing graphics that were drawn previously. Normally, when you draw something, it covers the pixels that were there before.  But, by changing blend modes, you can do other things than simply replacing the previous pixels with new pixels, blending the old and the new in different ways according to the mathematical rules of whatever blend mode you had selected.

To be honest, I’m not sure what useful purpose there is for every blend mode. It would be great if there were more tutorials showing useful applications for them, especially the obscure ones that I don’t see used much, if ever.

The most commonly useful blend modes, in my experience, are bm_normal and bm_add.  Normal blending is the default drawing mode, and is what you use 99% of the time in most games.  Additive blending creates vivid glowing effects, and is particularly lovely when used in conjunction with particle systems to create glowing systems of overlapping particles, especially when you are drawing translucent pixels (using alpha < 1).

Blend modes are also useful for creating clipping masks.  For more info on that, there are some good tutorials already written on how to create a clipping mask using surfaces and blend modes.

Some of the first questions I had when Shaders were introduced were: What do we do with blend modes now that we have shaders?  Do we still need them?  Can we combine them with shaders, somehow? Or do shaders make blend modes obsolete?

Basically, as I understand it, the answer seems to be that blend modes were kind of a limited predecessor to shaders, and enabled GM users to achieve some basic drawing effects simply, without exposing GM users to all that highly technical stuff that shaders involve, that I mentioned above.

Anything you could do with blend modes, can be done with shaders instead, if you wanted to.  That said, if all you need is the blend mode, they’re still there, still supported like always, and you can go ahead and use them. They’re still simpler to use, so why not.

One thing to be aware of, though, when using blend modes, every time you change blend mode in GameMaker, you create a new “batch” of drawing.  The more batches, the longer GM will take to draw the game each step.  Thus, many batches can slow drawing down tremendously.  This is an area where you may need to focus on optimization.  And if you’re that focused on performance, then it might be worth looking into a shader-based approach instead.

Once you’ve become sufficiently comfortable with shaders, you may not have as much need for using GameMaker’s drawing blend modes.

D3D functions

I have not used GML’s d3d functions, much, either, so my understanding is very limited.  Basically, as I understand it, the d3d functions in GameMaker wrap Microsoft’s Direct3D drawing functions, and enable drawing with more sophistication than is possible with the basic GML draw functions such as draw_rectangle, draw_line, draw_ellipse, etc.

Despite the name, the Direct3D functions are useful for 2D drawing as well as for 3D.

This article will not cover using GML’s d3d functions, as we’re focusing on shaders.  But as any graphics in your game can be used as input into a shader program, anything you draw using d3d functions can become input for a shader to process.

Particles

Particles are “cheap” (efficient) graphical effects that can be created without having to instantiate an object. They are efficient because they do not incur all the processing overhead that comes with a full-blown object.  Huge numbers of particles can be generated at very little cost. These can be used for all sorts of effects, so long as the particles do not need to interact with instances in the game, such as triggering collisions. Typically, particles are used for things like dust clouds, smoke, fire, glowing “energy plasma”, haze, rain, snow, and so on to create additional atmosphere.

To use particles, you have to create a particle system.  As with Surfaces, particle systems take memory, and need to be disposed of when no longer needed, in order to free up that memory.  Full detail on how to set up and use particle systems is beyond the scope of this article.

Several external utilities have been developed by GameMaker users over the years to make designing, building, previewing, and testing particle systems easier, and these are highly recommended.

In conjunction with shaders, I don’t know that there is any direct interplay between particle graphic effects and shaders, but certainly a shader may be used to further process a region of the room where particles exist, to create more sophisticated effects.

Using Shaders in GameMaker Studio

Right, now that we’ve introduced the concept of what a shader is, and reviewed the other main graphics concepts in GMS, here’s where we get to the heart of how to use shaders in GameMaker.

A shader is a pair of shader-language programs, consisting of: a vertex shader, and a fragment shader.  Vertex shaders deal with the edges of the drawn area, while fragment shaders deal with the insides.

Let’s say you want to use a shader program that has already been written, perhaps by someone else.  All you need to do is use this code in your draw event:

shader_set(my_shader);
  //draw stuff
shader_reset();

So, it’s a lot like drawing to a Surface.  With surfaces, first you set which surface you want to draw to, then you draw, then you reset so that drawing resumes to the application surface.  With shaders,  you set the shader you want to use, draw the stuff that you want to be transformed by the shader, then reset to normal drawing.

Everything drawn between setting the shader and re-setting back to non-shader drawing will be drawn through the shader program.

Easy enough, right?  Well, there’s slightly more to it than that.

Uniforms

“Uniforms” is a strange term at first, and was where shaders started to seem strange to me. This is a term that comes from the shader language itself. The GameMaker manual talks about them in a way that assumes the reader is already familiar with the concept, and doesn’t go into a lot of detail explaining it to newbies.

In essence, “uniforms” are input variables that can optionally be passed into a shader that is designed to use input values. Once you understand what a uniform is, it’s not that difficult a concept. You can read more about them at these pages:

The gist of it is, when writing a shader program, when you declare a variable, you can declare it to be a uniform variable, which means that the variable can be accessed from outside the shader, thereby giving the program that calls the shader a way to change the shader’s behavior during execution.  To do this, you can’t just refer to the uniform variable by name; you have to get the uniform variable’s memory handle, using shader_get_uniform(nameOfUniformVariable), and then change the value of the variable using shader_set_uniform_f(nameOfUniformVariable, value). Uniforms are actually constants within the shader’s execution scope, so once a value is passed into the shader from the outside and it is set as a uniform, it cannot be changed (the value could be copied to another variable, and that variable could then be modified, though.)

If you’re using a shader that has uniforms that you need to set, it’s done like this:

u_color1 = shader_get_uniform(my_shader, "f_Colour1");
u_color2 = shader_get_uniform(my_shader, "f_Colour2");

shader_set(my_shader);
shader_set_uniform_f(u_color1, 1, 1, 1);
shader_set_uniform_f(u_color2, 1, 0, 0);
//draw stuff
shader_reset();

There are actually a few uniform functions in GML:

Conclusion

That’s about all I know about shaders, for now.

As I get more familiar with using shaders, I’ll update this with more complicated examples, such as (possibly):

  • How to use multiple shaders on the same drawing (eg chaining the results of one shader’s transformation of some drawing into the input for a series of shaders).
  • Other stuff…

How to write shaders in GLSL, if I ever do it, will be a topic for its own article (or series of articles).

Save Network Neutrality Again

The arguments are no different than they were the last time.

Network Neutrality is the bedrock of freedom in the Internet Age. Network neutrality is an essential requirement to protect freedom of speech in the Internet Age.

Network neutrality means that the network shall treat traffic passing through it the same, regardless of source or destination. A neutral network does not favor one customer over another, giving priority to the one favored by the network while blocking or reducing access to others.

It doesn’t mean a company can’t create service tiers and sell more bandwidth for more money. ISPs already do this. Companies that need to use a lot of network traffic pay for the capacity already.

Network neutrality is the way the internet has worked since the very beginning. Over the years, there have been a number of efforts made to end network neutrality. ISPs have relentlessly tried to end network neutrality because doing so will give them a huge amount of power over the internet, which they will use to make themselves very rich and control the world’s data traffic. The consequences of this would be drastic and dystopian.

Internet Service Providers should be treated as a utility and as a common carrier. We need this put into law so that it does not come up every few years when regulatory appointees change. That will not happen with our current congress or president.

But as I write this, the freedoms protected by network neutrality are once again under assault by the FCC. Current FCC Chair Ajit Pai is a former executive with Verizon, and in his current role is a fox guarding the hen house. He clearly is working in the interest of large ISPs and against the public good. If he and two others vote yes to end network neutrality, it’s all over.

All we can do is tell them we don’t want that. Contact the FCC right now and leave a comment. Call, write, fax, and email.

While you’re at it, tell Congress that you want legislation that will protect network neutrality.

12-month license moves GameMaker Studio toward SaaS business model

YoYoGames recently announced a new edition of GameMaker Studio 2. Called the “Creator Edition”, it is $40/year subscription.

I’d pointed out earlier in the year that YoYoGames had taken all the necessary steps to make ready to abandon perpetual licensing, and this announcement proves my assessment was right on. See, reddit? I was right.

Permanent subscriptions are still offered starting at $99, although the software license is active only as long as the machine it’s installed on is able to log your YoYo Account in with YYG’s license server. Which is to say, if they want to they can disable your license, and if they go out of business, or if the license server goes down, you won’t be able to use the software.

The Problems of Perfection

The auto maker Lexus used to have a marketing slogan, The Relentless Pursuit of Perfection.

Lexus Pursuit of Perfection

This sounded really good, right? As a customer, you would like perfect products. You don’t want to spend money to acquire problems.

But from a making perspective, perfection is often the enemy of good. It turns out that perfection, the idea of perfection, as well as the pursuit of it, has a lot of problems.

Perfection as Impossibility

First, everyone has heard the cliche that perfection is impossible in the real world. No matter how hard you work at something, there will always be some tiny deviation from the ideal defined by the design or blueprint. We build things to tolerances, understanding that exactly hitting a desired metric is practically impossible. But we don’t need exact, we need good enough, and good enough can be as precise as it needs to be for the application. In some situations, tolerances are more critical than in others.

Chasing after something impossible can waste a lot of resources, and the futility of it can be frustrating. People tend to put an undue amount of pressure on themselves, feel negatively about themselves when they prove incapable of attaining such a high standard, and react negatively to mistakes and criticism, or even hide or deny problems rather than own up to them, which is exactly the wrong way to respond to these learning opportunities.

Subjectivity and Contingency

Second, what is perfect? People have different needs, different opinions. Needs change as the times change. What is ideal for one situation is likely not ideal in another. There’s no such thing as a one size fits all solution that is a perfect fit for everyone. So perfect then means something more like highly customized, bespoke solutions.

But the amount of resources that are required to create such customized solutions for everyone are often better allocated toward more general solutions that are a better fit for the needs of larger groups of people. Imagine an auto maker taking your exact body measurements, and then using those to build a car with a seat that fits you — and only you — exactly perfectly, and where the dashboard and mirrors are likewise laid out in a perfect way so that you can see all the gauges and reach all the controls without straining.

But this would make a car that is many times more expensive to design and build, is much more expensive to maintain and support, and which has limited resale value. It’s much more cost effective and beneficial instead to design a car with adjustable seats, that can fit 99% of people, is cheaper to design, manufacture, and support, and can be sold to anyone, not just people who are close enough in size to you that they can use your bespoke seat.

And even then, a car that is good for commuting isn’t going to be the best for cargo hauling. Or have the best possible fuel efficiency. Or be good off-road. Or have the safest crash rating. The perfect car contingent upon the usual need will score high in several of these important categories, but different users will value categories according to their own criteria, and may have a variety of use cases that they need to cover with a single vehicle, that cannot possibly be perfect for every need and every situation.

The foil of Trade-Offs

As is apparent in the car example above, most things are complex enough that there are always going to be trade-offs. For example, a structure may need to be strong, but often weight is another important factor, and making something both strong and lightweight is a challenge because increasing one tends to diminish the other. Thus, a perfect thing in all aspects is not possible, but perhaps we replace the idea of a thing that is ideal in all categories with the idea of a thing that is a perfect balance of tradeoffs among the categories. But this sort of perfection is a lot more dependent upon subjective and contingent parameters. A set of compromises isn’t the usual concept of what perfection means.

Diminishing Returns

The more you want to improve something, the more effort needs to be put into improving it. At some point, the amount of improvement that you gain for the amount of effort that you put into the improvement will start to decrease. At some point short of perfection, the value of the improvement isn’t worth the effort.

For example, I could study for 2 hours and get an A on a test. I could study an additional 4 hours, and boost my A to an A+. Perhaps by studying 8 hours, I could score 100% on the test. Is it worth it? Or would that 6 hours be better spent getting an A on three other tests?

Can you hear the difference between a $500 stereo and a $5000 stereo? And if so, is it worth spending 10x as much to get that difference? Is a $200 CPU good enough, or do you really need the $1000 CPU that delivers merely 2x the performance? Sometimes it might be. But the situations where extreme high performance is required are comparatively few.

Perfecting a local maximum

Perfecting a thing requires focusing on the thing. But what if the thing isn’t the important thing, and the thing is merely a means to an end? Say you want the best bicycle. So you spent all your time working on making bicycles better, better, and better still. So now you have a bicycle that’s nearly perfect. In the early days of pedal-power, the design of bicycles was much different.

Velocipede

A design known as the velocipede featured a large front wheel driven directly by pedals, and a tiny trailing wheel for balance. This design was popular for a time, and in the quest for ever greater mechanical advantage for producing higher top speeds, the front wheel diameter was increased. This gave rise to diminishing returns, and negative tradeoffs in balance and safety.

Local maximum

Prior to the invention of the modern bicycle, velocipede design had evolved to a point where it could go no further. Wheel size was so large that any larger would be impractical or impossible. This was a local maximum for the design, the zenith of a particular design concept, but still better designs were possible.

BicycleEventually the design died out when an inventor hit upon a better design, the modern bicycle, which featured two wheels of identical size and a chain driven gearing system that allowed higher gearing ratios than were possible in the now-obsolete direct drive velocipede designs.

Missing the next-gen paradigm shift

But what if your goal isn’t really to ride bikes exactly, and you simply want to go from point A to point B quickly? There might be other vehicles that are better, but if all you can think of is a better bicycle, the idea to invent them may never occur to you. Famously, bicycle mechanics Wilbur and Orville Wright pioneered the airplane. If they’d been focused exclusively on perfecting the design of the bicycle, they never would have come up with their flying machines.

And paradigm shifts continued to happen with flight, from bi-planes to monoplanes, from propeller driven airplanes to jets. At each stage, what worked for the current generation could only be taken so far, and to make the leap to the next generation required a re-thinking and a discarding of older concepts in order for even better concepts to flourish. The old continued to serve while the new was developed, but eventually once the new concept was proven a success, the old fell out of favor. And yet, at no stage was anything truly “perfect.”

The relentless pursuit of improvement

This is not to say that we shouldn’t make things as good as you can. But whatever we do, is always done within the scope of certain constraints. Being aware of those constraints, we should make intelligent choices in order to maximize value, without being trapped by an idea of a perfect thing.

GMLive by YellowAfterlife: code and run gml live in your browser

I just discovered GameMaker Community Forums moderator YellowAfterlife’s wonderful in-browser utility, GMLive.

I’d long been wanting YoYoGames to produce a GML console that I could type in a simple snippet of code that I could run to see what it does without the need of having to set up a project, build, and run it, similar to the REPL in Python, so I’m thrilled to learn that this exists. It’s very well done, and while not 100% compatible with GML, it’s very close, and very well documented.

Math every game developer should know

[Editor’s note: For now this is kindof a stub article.

I’m brain dumping a list of math that I use all the time (or would like to) in making video games. 

For now, it’s just a list of areas of math that come in really handy, again and again, with many games. I won’t try to put lessons into this article; this is just a list of topics to check into.

I’d love to grow this list! Leave a comment, or contact me with suggestions for more math to add.

Over time, I’ll probably flesh this out with a list of gamedev-specific uses for each type of math.]

  1. linear algebra

  2. trigonometry

  3. stochastic functions (randomness)

  4. probability

  5. permutation

  6. matrix algebra

  7. fibonacci

  8. statistics

  9. binary and bitwise math

AtariBox update: who is Feargal Mac?

I learned more today about Feargal Mac, real name Mac Conuladh, one of the guys behind the AtariBox. And what I found out wasn’t so good.

It looks like this guy has been involved in a number of dubious crowd funded tech gizmos before. And by dubious, I mean disastrous. This guy’s LinkedIn profile reads like a character from Silicon Valley: a CEO of various incarnations of rapidly pivoting smoke/mirrors vaporware startups that promise a lot while having nothing.

If you look at Mac’s twitter profile, he still lists his website as gameband.com, one of the crowdfunded gadgets he was involved with. Here’s a screen capture that I took of the page today:

gameband.com screencap

Not quite as exciting as zombo.com, but give it time!

Based on this track record, it’s going to take a LOT of evidence and convincing to get me interested in the AtariBox. Maybe it’ll be different this time, after all people do fail, try again, and succeed, and maybe this time they’ll deliver something worth owning, but until I see some substantial evidence of this, I’m no longer interested in the system.

Eleven reasons why It (2017) wasn’t scary for me

  1. No giant spider.
  2. It’s really a demon-thing, but doesn’t even require a +1 weapon to deal damage to it.
  3. It a clown that gets it’s ass handed to It more than once by a small group of loser children.
  4. Whenever It gets hurt by the loser kids, It usually retreats, or else flips out twitching and jerking for a few seconds. It’s kindof a wimp.
  5. It bites Georgie’s arm off. Real scary, right? But there’s almost no pain reaction from him, I guess because he’s in shock? But this recalls the Black Knight from Monty Python and the Holy Grail. “Tis but a scratch! I’ve had worse!” Apart from when Henry Bowers uses his knife on New Kid Ben, I didn’t get any sense of horror from the gore in this film.
  6. Any time It’s around, there’s red balloons. I guess they’re supposed to be threatening and creepy, but they’re really just a giveaway: OK there’s another balloon get ready for It to try to scare us again. Get ready to not be surprised! Literally every single jump scare foreshadowed.
  7. It doesn’t seem to be capable of hurting anyone unless they’re scared. Literally the only thing they have to do is stand up to It, or realize that It’s mind-tricks aren’t real. It’s hard to be scared of something that isn’t real, or is only real in your head.
  8. When big brother Bill encounters It (in the guise of little lost Georgie) in the basement, and It starts repeating “we all float down here” and turning “scary”, I’m thinking “OK he’s just glitching out. Someone needs to file a bug report, and then we can patch it.”
  9. It mostly likes to scare people by turning ugly. Deformed, decaying walking corpses, and that sort of thing. But years of informal sensitivity training has enabled me to empathize with people who have severe appearance deficits, rather than feel repulsed by them. I want to help It feel accepted, as though It too is capable of being loved.
  10. The creepy house at 29 Niebold Street. Hey, it’s not like that place doesn’t scream “haunted”. It obviously put a lot of effort into decor. But did It really have to go with “late 19th century cliche American Victorian?” It’s literally the most obvious place in town It could have picked to make It’s home. Send in the crack team of loser kids!
  11. We have a much worse clown in the White House, and he’s threatening to destroy the world in a nuclear exchange with North Korea. What I wouldn’t give for there to be a supernatural demon that only eats a few children once a generation. Literally every single day in 2017, the news is worse than a statistically abnormal number of missing children.

Overall I enjoyed It, for the acting and the casting, and especially the humorous/lighthearted moments when the kids are just being kids. The children who act in the film look and feel like real children. That much, was great. But I didn’t feel scared. The teaser trailers made it seem like It would be a lot worse than it was.

AtariBox: more prelaunch details emerge

According to VentureBeat, the AtariBox will cost between $250-300, be powered by AMD hardware, and run Linux. Out of the box, it will come packaged with some collection of classic games, playable via emulator, and be capable of playing “midrange” games but not the high-end AAA titles that sell on XBox and PlayStation. No word as yet how the hardware specs compare with Nintendo’s Switch, or really any specs.

According to Atari, AtariBox will be an open system, meaning the end user will be free to customize the Linux environment and install whatever software on it they like, including existing games that run on Linux. This means that games for AtariBox need not be purchased solely through a gated community marketplace, unlike similar app stores offered for Microsoft Xbox, Sony PlayStation, Apple iOS devices, and Windows 10.

As much as I love openness, this seems like a questionable business decision on the part of Atari. Those who remember history will recall that the original Atari 2600 was a huge success when launched in 1977, but eventually 3rd party software developers figured out how to make games for it, culminating in a glut of shovelware which brought the videogame industry to its low point in 1983. Atari was powerless to prevent third parties from flooding the market with crapware, nor were they able to earn revenue from any third party releases.

When Nintendo revived the North American home videogame market in 1985, they did so by launching more powerful hardware than existing previous-gen consoles, and by locking unlicensed third parties out of development with the 10NES chip.

AtariBox will do neither of these things. While the move to lock out the hardware was controversial, and resulted in Nintendo holding monopoly power until the 16-bit era — which they abused — locking out did help Nintendo to establish a level of quality control with the software that could be published for the NES. (Although, to be fair, there were still a lot of terrible NES games — but importantly they did not glut the market and result in a crash that also bankrupted companies that produced high quality games, and the licensing program enabled Nintendo to generate revenue from 3rd party games.)

The ability to play already-released games is nice, but doesn’t seem likely to drive hardware sales. Presumably if you already have games that could be installed on an AtariBox, you also already have some other device already to play them on.

In order for AtariBox to have a hope of being successful, it really needs to have some new, original games, ideally exclusive to its platform, and ideally tied to classic Atari-era properties.

To date, we’ve still seen nothing of this. 2017-style reboots of classic titles like Adventure, SwordQuest, Pitfall, Space Invaders, Crystal Castles, Dig Dug, Pac Man, Frogger, Galaxian, Tempest, and so on, might make the console attractive to old school gamers. But to be honest these old games have already been re-released, sequeled, and rebooted numerous times over the decades since they were originally released, and usually to diminishing returns, failing to capture the magic that made the original game a hit.

Nevertheless, I believe that, if done well, rebooted classics could sell enough to sustain a business. A perfect example of a well done reboot would be the outstanding Pac Man Championship Edition, released some years ago on XBox Live Arcade.

Atari cannot rely on 3rd party developer support to provide AtariBox with exclusive titles, however. There’s zero incentive for studios to produce exclusive content, and sacrifice the entire rest of the market, unless they receive a cut of hardware sales, or are otherwise compensated for the favor they’re doing for the platform. Developers want to release their games everywhere, if possible, and will release games on every platform they can afford to reach. For AtariBox to attract gamers with exclusives, they need to do first-party development.

The console looks nice, but I’ve still yet to see a compelling reason to buy one when it comes out. Atari, heed me: Announce some new games, and make sure they’re good.

We still haven’t seen the controller for the AtariBox, but I’m expecting a modern-looking gamepad rather than the traditional Atari CX40 joystick or paddles. Perhaps these will be options. Certainly the AtariBox would be smart if it had a couple of DB9 ports to accommodate original controllers. As it is, a USB-to-DB9 adapter is perhaps feasible, but not as slick as I’d like for a brand-specific console like this.

(For that matter, it’d be cool if they put a cartridge slot on it, and allowed you to either play your old games on it, or rip them as ROM files to play through emulator. Obviously that’s not a part of the physical product design, but that would have been on my wish list for such a console.)

I would also like to see emulation of games for consoles other than the Atari 2600. The Atari 5200 and 7800 are not as well known, but had some great games, and deserve to be included.

As well, classic Atari coin-op emulation would be a great idea. Real arcade games are a big part of Atari’s legacy, and deserve a showcase. An AtariBox plus authentic controller decks replicating classic arcade controls would sell.

csanyk.com © 2016
%d bloggers like this: