Category: games

Cleveland Game Developers Level Up 2/20/16 workshop

Excuse to Create – West Side – featuring “Level Up”

Saturday, Feb 20, 2016, 1:00 PM

Lakewood Public Library Main Branch
15425 Detroit Avenue Lakewood, OH

14 Video Game Developers Went

About Excuse to Create”Excuse To Create” is our casual working meetup event. Want to brainstorm or ask questions of other developers? Want to turn up your headphones and code without family distractions? Maybe look for opportunities to collaborate, pair-program or share your latest prototype? Just want to draw, sketch, or compose? This is the meet…

Check out this Meetup →

Global Game Jam 2016: Pug Pug’s Bathtime Ritual

Global Game Jam 2016 has concluded. I completed my project this year, and I’m pretty pleased with it.

pug_pug's_bathtime_ritual_alpha5

The theme for Global Game this year was “ritual”. I didn’t have an immediate idea what to do for my game, but after about 20 minutes I decided to do a game about a Pug’s bath time, which I called Pug-pug’s Bathtime Ritual. It is pretty common knowledge that I like pugs, which made this project especially fun.

Taking inspiration from this video:

I decided to make a simple minigame about knocking down bottles. I had some ideas for other minigames that I could link together, but there wasn’t time to do more than one. I worked at a relaxed pace, didn’t stress or overwork myself over the weekend, and completed the project about an hour before the 3pm submission deadline. It’s not terribly challenging, but it’s cute.

There’s a playable HTML5 build and a Windows build, along with full source, as well.

#ilikepugs

Global Game Jam 2016

Once again, this Friday I’ll be joining with my fellow Cleveland Game Developers friends to participate in the 2016 Global Game Jam. I’m looking forward to hearing what the theme will be this year, and seeing all the games the different groups at the Shaker Heights location will create. Special thanks to Launch House for hosting us again this year!

Adventuring with Warren Robinett

One of my earliest videogaming experiences was with the classic Atari 2600 game, Adventure. A favorite of many who played on the system, this game has attained legendary status for it’s brilliant design, a technical accomplishment that pushed the Atari well beyond what its designers had intended it to be capable of, fun and replayability, inspiring a genre of adventure games, including the Legend of Zelda series, and of course becoming as known as the game to feature the first “easter egg”.

The game is still fun to play today, and remains one of my favorites to revisit. It is extremely replayable, and much of the fun that I had playing it was with investigating and experimenting. In 1981, I played this game with my brother all the time. We learned the basics in Level 1, which was a truncated version of the full game, with a smaller map and only two of the three dragons, and no bat. I moved on to Level 2, which introduced an expanded world with one more castle, a dragon, and the bat, and had all the items in prescribed locations so that the quest was the same every time, but you had to go to every castle and defeat every dragon in order to win. The new dragon, Rhindle, was so fast and aggressive that he scared my brother, who was about 4 at the time, so much that he could only watch me play. After winning Level 2 a few times, I proceeded to Level 3, wherein the item placement was randomized, making each re-play a unique experience.

One time, my older cousin came over and we were playing Adventure, and she showed me a secret room in the Black Castle, accessible only by using the Bridge, where she found a mysterious, invisible Dot, which she used to reveal the most amazing thing: the first Easter Egg: a hidden secret that revealed a message from the game’s creator!

tumblr_lyq4oaXr2M1qzmhdko1_500[1]

This was how I came to know the name of Warren Robinett, who designed and programmed Adventure and became famous for being one of the first game developers to have their name known publicly.

Even before being shown the easter egg, I had spent many hours exploring and experimenting in the world of Adventure. I played not just to win the game, but to do crazy things with the objects in the game to see what might happen.

I put the Bridge in walls and used it to exit the screen and appear on another screen, where normally you couldn’t get to.

I tested putting all of the objects in one room to see if anything special would happen. I discovered that when there were too many objects in one room, the Magnet would stop working. Or the Sword would not be able to slay a live dragon. Or keys would fail to unlock the castle gate. Somehow, if there were too many objects in one place, the Atari couldn’t handle it. But I could always move, I could always pick up objects and carry them, and walls always worked (with the exception of the wall involved in revealing the Easter Egg room.)

I learned how to “break” the game in other ways. I discovered that if you dropped a key in the doorway of a castle while you were closing the gate, the gate would close in front of the key, which would disappear inside the castle, forever sealing it. I learned that if a castle’s gate was closed, if there was a dragon or the bat inside, it couldn’t get out. And I learned that unlocking a castle would release any creatures inside, and that if a dragon did not have an item to guard, it would leave and roam around, hunting me down.

I learned that while I couldn’t carry or move a dead dragon, the bat could, and I could catch and carry the bat, which allowed me to use it to move dead dragons (or live ones, which was always a risky proposition!) So then I took to using the bat to grab dragon carcasses and move them to an otherwise-empty castle, and lock everyone in there so that in the event that I got stuck and had to reset the game to get unstuck (an action which resurrects every dead character in the game, you and the dragons) the dragons would be safely contained, leaving me free to continue exploring and experimenting without interruption, for hours.

I took time to carefully explore the mazes and learn how to move through them quickly, and to get to any area in the maze that I needed to. I learned places to put the Bridge to take shortcuts. I puzzled over three empty rooms in the vicinity of the White castle, wondering what their purpose was, if they contained any hidden secrets, and how to unlock them.

Despite being pretty sure that I knew everything there was to know about Adventure, I never could say for certain that there wasn’t something that I didn’t know, and this (as well as the fun of speedrunning the game) gave me the incentive to play the game endlessly, for years. While I figured that I’d found all of its secrets, I still had questions.

Recently, I was thinking about Adventure again, and played it a few times, and did some reading about it on various websites, and stumbled upon Warren Robinett’s website. There, I learned that he is writing a book on Adventure that will be coming out in 2015! I am so excited about this. His webpage mentions that to receive updates about the book project to send him an email with the word “annotated” in the subject line, so I did. I wrote him a short note thanking him for creating such a wonderful game that I have enjoyed these many years. And I wasn’t sure if he would read it, or if he merely set up a listserve bot that would automatically subscribe me to his mail list, and maybe he’d never read my message. But a day later I had a response from Mr. Robinett in my inbox!

11903757_10206856024977227_1235429922435834157_n[1]

Holy shit! Granted, it’s a sentence long, but he read and replied! So, not wanting to be too intrusive, but curious about some of the questions I’d had about his game since forever, I wrote back and politely asked. And he responded again, short and sweet, but I’m thrilled to have corresponded with a true legend of the industry.

At any rate, here’s the excerpt from our correspondence where he answers my questions:

csanyk: I have always wondered about the empty rooms in the area outside the labyrinth near the White Castle. Apart from occasionally holding random objects, I always thought that those rooms felt like they should have had some more purpose than they did. After learning about the easter egg with the dot, I spent a lot of time trying to figure out if there wasn’t some kind of hidden secret in those rooms, and as it turned out, there wasn’t. But boy did I try everything I could think of just to make sure!

Warren Robinett: Well, you are probably aware that the game world was bigger for levels 2 and 3 than for level 1. Level 1 was for beginners, and some of the difficult stuff was intentionally left out of the game world. I regarded level 1 as being “truncated”, because I changed the room-to-room links to leave out more than half the rooms. So the two rooms you asked about had different functions in level 1 — one was the interior of the Black Castle (just a single room in level 1), and the other was where the Catacombs are in levels 2 and 3 (again, just a single dead-end room).

In level 3, the random positioning of object was supposed to put stuff in those rooms sometimes, but I made some mistakes in the random number generator, and it seems they were nearly always empty.

csanyk: If you could have had more time or more computing resources to put something in those rooms, to make a Level 4 game, what would you have populated them with? Another castle and dragon? Some type of new item? Was there something that was meant to be there, that never made it in to the game due to constraints? Or were these rooms always intended to be empty spaces?

Warren Robinett: I talk about that in my book The Annotated Adventure, which I hope to be finished with this fall.

csanyk: I discovered that if you press select until you have the option for game 3, and then pull down on controller 1, the player spawns into the game select screen and can walk about the room. Was this something that was put into the game deliberately, and if so why? How did it come about?

Warren Robinett: The game-select screen was a room. I re-purposed a room as the meta-game UI screen to save memory. I put the Man down in the corner (I thought he was totally trapped) so he wouldn’t be there to distract you. You found a way to break him free.

csanyk: As a kid, after killing the dragons, I spent hours trying to put the Bridge everywhere I could think to and see what would happen. In a few screens, there are places where you can put the bridge off the top or bottom of the screen, and use it to “break through” the bottom wall of a room that you shouldn’t be able to pass through, and end up somewhere else, only to become stuck. To me, a huge part of the game’s lasting appeal and replayability was that it seemed to invite this kind of experimentation. For example, if you go one room down and left from the Yellow Castle, and stick the bridge in the bottom wall of the screen and pass through it, you end up in the White Castle screen, stuck between the towers:

Adventure (1980) (Atari)_7

Adventure (1980) (Atari)_6

or in the room one screen down from the Gold Castle, putting the bridge in the bottom wall will warp you to the Gold Castle, again between the towers:

Adventure (1980) (Atari)_8

Adventure (1980) (Atari)_9

or from this room in the labyrinth, you can travel to the room next to where the secret is hidden — only you appear at the bottom of the room, and can’t quite break free into the room, and have to retreat back up through the bridge to get back to the labyrinth.

Adventure (1980) (Atari)_10

Adventure (1980) (Atari)_11

Warren Robinett: Every room had a link to four other rooms. No exceptions. If you could get through the wall, you could find out which room that was.

Since the Bat and Dragons could move around in different directions, there had to be a new room off each edge.

csanyk: I loved the fact that when you are eaten by a Dragon, you can still move, confined within its stomach. Also, when two dragons are on the screen, and one eats you, the second dragon will come up and eat you again, while you’re in the first dragon’s stomach. And most fun of all was if you left the game run, and the Bat would come by and pick up the dragon whose stomach you were in, and fly around with you, giving you a bizarre tour of the kingdom. The idea that the game world continued after you died was very novel.

Was that a design choice or an accident?

Warren Robinett: The thing you need to understand was that developing the game was incremental. You add some code, you fix a bug (or try). And see how it plays.

I didn’t plan for the Man to be able to wiggle after he was eaten. But when I saw, I liked it. I could have eliminated that by re-ordering some subroutine calls. But it didn’t do that.

I didn’t plan for the Bat to be able to pick up a Dragon that had eaten the Man. But I had coded each piece separately. So it just fell out of the simulation with no effort required. I liked it — it was hilarious. No way would I “fix” that.

csanyk: How did you ensure that the randomization in Game 3 would not result in the game sometimes becoming unwinnable, such as by locking the Black Key in the Gold Castle and the Gold Key in the Black Castle?

Warren Robinett: I tried to make sure each random positioning was winnable, by choosing from certain ranges of rooms for each object. But I botched it, and it DID sometimes generate unwinnable configurations.

csanyk: I think I’ve played the game enough to have seen everything you can expect to happen. I’ve seen the Bat, carrying the Sword, accidentally kill a Dragon. I’ve closed the castle gates and dropped the key inside as it was closing, locking it in forever. I’ve seen so many objects on one screen that the Sword or Magnet wouldn’t work any more. I’ve seen the Bat fly by the castle gate with a Key, opening it. I’ve worried ever since that I could get locked inside of the castle by the Bat if I left the key outside where it could grab it, but this has never happened. It doesn’t seem like objects can interact with each other unless they’re on the current screen, with the notable exception that if you hold the Magnet off the edge of a screen, you can attract objects in the next screen. And also the above-mentioned trick with the Bridge going off the top or bottom of certain screens. The amount of exploration and experimentation that I’ve done in this game, for as small as it really is, is pretty breathtaking, when I think about it. Were you ever surprised to hear from fans just how much they replayed your game? What things have players done in Adventure that surprised you?

Warren Robinett: The stuff you mention above is correct. The Bat could also pick up objects off-screen.

I am now eagerly awaiting the publication of his book later this year. So stoked!

Fiction is all in your head: Everyone can have it their way

Personally, I don’t buy this theory of Metroid’s Samus Aran being transgender under our noses all along.

In the 1980’s, the secret of Samus being female was cool, and I liked the surprise. I don’t know of anyone who didn’t. Literally no kids who I know of played the original Metroid back in the day, learned of the reveal and thought it stunk, or felt betrayed to learn that “they” had “been” [playing as] a girl all along. Gamers have pretty much universally always accepted Samus as a female character.

I grew up with a few notable female heroes in sci fi, like Ripley from Aliens, and one of the Metroid minibosses was an alien named Ridley who takes some design cues from Giger’s alien, and it was later revealed that the creator of Metroid was doing homage to Alien with the character. Samus’s gender reveal has been understood to be another homage to the Ellen Ripley character. There was also Star Wars‘s Princess Leia, who, although at first seemed to be another damsel in distress needing to be rescued, stood up to Grand Moff Tarkin and Darth Freaking Vader and his interrogation droid, and upon being rescued turned out to be a strong and formidable character every bit as wily and capable of the heroic male characters who broke her out of Death Star detention block AA-23.

Nonetheless, I do think it’s fair to say that there’s plenty of sexism and stereotyping in our culture. In fact, it’s more than fair — it’s obvious, blatant, pervasive. While individuals are all over the map in terms of how open and accepting they are, as a culture overall we have made a tremendous amount of progress toward gender equality in the time since I was born. Yet, there’s still plenty of sexism and misogyny everywhere you look. It’s true there is a lot of the closed-minded thinking still around, and I’m sure it will continue to persist in our culture after I’m gone.

The Japanese culture that birthed the Metroid universe is different enough from American culture that we do find some of their ideas about gender and sexuality to be strange. But that’s part of what makes learning about other cultures cool. It is a subject that is too complex for me to adequately summarize in even a few paragraphs, but suffice it to say for the purposes of this article that comparative cross-cultural sexuality is a pretty fascinating field to study if you want to get into it, and aren’t too uptight. (Seriously, go out and do a PhD on the subject if you want to.) For our purposes here, it’s probably enough to know that there’s a streak of chauvinism, and in terms of traditional gender roles in Japanese culture the differences between traditionally masculine and traditionally feminine is even more pronounced than in American culture. But there’s also a lot of counter examples in Japanese entertainment, of strong, heroic, badass female characters as well. We might say that in Japanese culture, as compared with American culture, there’s greater contrast between gender stereotypes, but perhaps a greater acceptance of the exceptional.

I’ll admit that I don’t really feel like an authority on such matters, so I could be well off the mark. But I feel reasonably safe in assuming that the guys who came up with Samus were probably not the most advanced thinkers at the time when it came to gender identity. We should not hold an expectation for them to get it “right” or be “sensitive” or “politically correct” in how they think about, or talk about, or portray the character of Samus Aran. And when looking for characters to become more realistic as they develop over time, we should not hold an expectation for them to mirror our ideals. Real people are complex and flawed, and have similarly “problematic” views with regard to social justice issues as is present in our real culture. So for a fictional character to conform to some ideal in order to be a role model is neither necessary, nor realistic.

Even if that’s “problematic” for some, that’s acceptable. Nobody has all the answers, or has it all figured out. And the stories about how we struggle with ourselves are usually a lot more compelling than stories about ideal perfectly who always behave in exemplary fashion that should serve as a model for the behavior of others. The notion that “problematic” depictions of characters is acceptable doesn’t mean that there aren’t things that are problematic. But that people aren’t perfect, and sometimes artists offend, sometimes without meaning to. People talk about things they don’t understand all the time, and that’s great. That’s a part of how we make progress toward greater understanding.

I don’t pretend to know everything that I’m talking about, either, and that is why it’s important that I talk about it. I’m not trying to tell everyone “the way it is” or how to think. I’m talking about how things appear to me, from my perspective, and to the best of my knowledge. I think that’s all we can ask of anyone at any time. That, and to go and dig for the truth. Which, you may never know, but can often get closer to.

But basically, at its core, Metroid didn’t feel to me at the time like it was a game about any of that gender stuff, at all. And it still doesn’t today. For all I know, maybe the creators of Metroid did consider it in designing Samus, or perhaps joked about it as a way of getting around their own lack of comfort in thinking about a female character who does things that are more traditionally regarded as “masculine”. Perhaps they even really did conceive of the character as transgender, at least in terms of what their concept of transgender means. But in any case, regardless of Samus’s gender or sexual identity, the important aspects of Samus are that she runs, jumps, and shoots, explores, powers up, and is a galactic bounty hunter and a total bad ass who is fearless, cool under fire, and utterly competent. Because that is what Metroid is mainly about. “Surprise, you’re a girl!” was a twist at the end, revealed only to players who beat the game fast enough to deserve to be let in on something cool. But it wasn’t what Metroid was about.

Samus’s character and story becomes more important in later games in the series, where storytelling elements of the game design became stronger, but Metroid was in its conception a game about exploring a hostile alien world and defeating a grave danger. Whether it was a man in the suit, or a woman, was secondary. But it was cool that Samus was a woman. And if she’s a transgender woman, then OK. But regardless of what the creators might have said about the character while creating the game, or left on the cutting room floor, there’s basically nothing in the published material that points to Samus being trans.

Which means, of course, that if you like Samus and have a need to see her as a transgender character for whatever reason, the published material is open to such interpretation. Just like we can have black Santa Claus for black people to better identify with for Christmastime, why can’t we have Samus as a transgender woman for the trans community, and people who don’t prefer that “edition” of Samus can have it the way they want it? Why does every detail in every fan’s head about a completely fictional universe have to agree with every other detail in every other fan’s head? It doesn’t!

Nintendo did have a transgender character in the 80’s, though — Birdo, introduced in the US release of Super Mario Bros. 2 — so it’s not completely out of the question that they might have had others, but I still think that the early concept of Samus that we got in 1985 was a cisgender female warrior. Birdo was a creature, though, not a human, and the portrayal of Birdo’s gender confusion is, I’m sure, a bit problematic for GLBTQ allies in 2015 — Birdo is presented as “confused” about his/her gender, and this is presented as at least somewhat comical, and (as I’m trying to indicate by my use of his/her, which normally would be considered offensive to a transgender person who knows what gender they are) the folks at Nintendo weren’t entirely sure what to make of Birdo’s gender, or at least didn’t want to spell out all the answers for their audience, and instead wanted to raise questions. That was in 1988. Whereas, in 2015 I think the message we get from the transgender community these days is that they are not at all confused about their gender identity — it just doesn’t happen to match up with their genitalia. So, Birdo’s treatment is not exactly a paragon example for GLBTQ allies to hold up as an ideal of what they might like to see in popular culture. But while Birdo may not be the answer to questions for those who are curious about non-binary gender norms, he/she was a starting point for asking questions and having conversations.

Although, there’s nothing to suggest that Nintendo intended to open up a serious dialog about any of this. I suspect that most of us just took eggs and threw them at him/her until we got past the end of the level, and that was about it. Whatever Birdo’s gender, it doesn’t affect how you play the game one bit.

As my friend Jacob says, “As long as it’s side scrolling and has a screw attack, I don’t care who’s in the suit.” I think that sums up the attitude of the largest block of gamers in gamer culture. That’s not to say that there aren’t minorities who are vocal with their opinions, of course.

All that said, characters from video games and, more broadly in all types of serial fiction, are always open to redefinition. This happens all the time to comic book characters, and they routinely do radical character changes, not especially caring about preserving continuity — because ultimately it’s not important. Character driven serial fiction has come to be understood as a form that explores a mulitverse of possibilities around a loosely defined core template for the character. The original incarnation is usually received as canon, but as new artists work with the character and write new stories, they take liberties, and always have. It’s not about making sure that everything ever published about the character is logically consistent and describes a concrete, objective reality. It’s about taking a core concept that is malleable, and running with it to tell cool stories that inspire and entertain. And about being allowed to take risks and maybe miss the mark sometimes. Not every story is the best. And not every fan will agree about which story is the best.

This is why we get to be entitled to our own opinions and to have our own preferences, and why no one can tell us we’re wrong about what we like and what we don’t. Samus isn’t just a person. She’s a mannequin which we can dress up with our imagination. She’s the paint on the brush, with which we may paint vivid pictures. She was created by Nintendo, and Nintendo may hold the copyright and trademarks, but in an important sense, Samus belongs to us.

So, I am a “geek” who can “handle” trans Samus, even though my Samus is a cisgender woman, and I can also have my Samus multiple ways, depending on how the creators who are working with the character decide to use the elements from her milieu to create new works that (hopefully) I will enjoy, and allow different interpretations of the character. I could enjoy Black Samus, Boy Samus, Shapeshifting Alien Samus, Trans Samus, Hetero Samus. Original Samus. As long as they don’t suck. I don’t even mind Samus as an adult sex fantasy.

The point is this: It’s all fiction. If you want to point at a “canon” of fiction that is “more true”, and divide it from alternative fictions that are “less true”, or unofficial, or false, and attack those who posit an interpretation you don’t happen to like, maybe you don’t understand what fiction is, and need to get out more.

iMprOVE_WRAP extension for GameMaker Studio

Today I’ve released a new asset on the YoYoGames Marketplace, called iMprOVE_WRAP.

Many video games have the feature that exiting one side of the screen will “wrap” you around to the opposite side — notable examples of this include the smash hit classics Asteroids and Pac Man. GameMaker: Studio has a GML function, move_wrap(), which is intended to provide this feature easily, but it has a few limitations. iMprOVE_WRAP addresses these limitations, resulting in a more powerful, flexible implementation.

iMprOVE_WRAP improvements over move_wrap()

Wrap behavior is no longer based on the built-in GML speed variables.

One of the most troublesome limitations of move_wrap() is that it only works for instances that have a speed. In standard GML, the variables speed, hspeed, and vspeed are used to move instances. But you can also “move” an instance by changing it’s x and y position in the room, without setting a speed. Many GM:S users will implement their own movement systems that eschew these variables, in order to give themselves complete control over the movement engine. When they do so, they are often confused when they discover that move_wrap() doesn’t do what they expect.

iMprOVE_WRAP eliminates this dependency, so that an instance no longer need to use the GML speed variables in order to wrap; wrap behavior in iMprOVE_WRAP is based entirely on an instance’s x,y position.

iMprOVE_WRAP_animation

Wrap region no longer limited to room borders

Another problem with move_wrap() is that it is intended to work with the Outside Room or Intersect Boundary GML Events. This means that move_wrap() is only useful when an instance moves outside the room, or encounters the edge of a room. But in many games, the “play field” may not be synonymous with the entire room — the room might have a border, or “dashboard” or “heads up display” which ideally should be considered “out of bounds” with regard to the play field.

iMprOVE_WRAP allows you to define a “wrap region” — a rectangular area inside the room, which instances wrap around the borders of, rather than the borders of the room.

Independent horizontal, vertical margins

With move_wrap() the margin argument which determines the margin by which the instance must be outside of the room is the same for both horizontal and vertical travel; with iMprOVE_WRAP the horizontal and vertical margins may be set independently of each other.

Wrapping instances can (optionally) draw themselves on both sides of the border

With move_wrap(), an instance still draws its sprite in the default draw in only one location: at (x,y). If the instance is off the edge of the wrap boundary, but hasn’t yet crossed over, the instance draws on the “pre-wrap” side of the room; after the instance progresses by margin pixels over the border, then the instance’s position is moved over to the “post-wrap” side of the room, and the instance is drawn there. This is not a big deal if the instance crosses the wrap boundary quickly, and has a relatively small sprite; but for slower-moving instances, or instances with larger sprites, it creates a jarring “jump” effect, where suddenly the instance appears on the “post-wrap” side of the boundary, with no real warning, rather than gradually entering the room.

iMprOVE_WRAP solves this by providing a new function, iw_draw_self_wrap(). This new function augments the default draw by drawing the calling instance four additional times, at positions left, right, up, and down from the actual instance, the width or height of the wrap region away from the actual instance. Thus, when your wrapping instance is moving off the edge of the wrap region, one of these extra drawings is poking out on the opposite side, creating an illusion of continuity as the instance leaves one side and emerges from the other.

For a wrap region that is smaller than the room itself, it’s best to do your drawing on a surface that is sized to the area of the wrap region; otherwise the parts of the drawing that should be outside of the region will be visible outside of the wrap region. Alternately, if drawing to a surface is not something you want to do, you can “mask off” the portions of the room outside of the wrap region by layering objects at a higher depth around the border, like a picture frame or dashboard.

Collision detection on both edges of the border

To compliment the iw_draw_self_wrap() function, I’ve added a new collision function, iw_collision_wrap(). This function checks for collisions at the four places occupied by the four drawings drawn by iw_draw_self_wrap(). There are actually two iw_collision_wrap() functions.

The more basic, iw_collision_wrap() sets five instance variables in the calling instance to store the id of any instance in collision: other_center, other_up, other_down, other_left, and other_right.

The more advanced, iw_collision_wrap_map(), returns the id of a ds_map, which holds those same five instance variables as keys, which you can access using ds_map_find_value().

Which to use is up to you, and the style of programming you prefer. iw_collision_wrap() is easier to use, and if you don’t mind the instance variable names, is probably slightly faster at runtime. iw_collision_wrap_map() is for programmers who get pedantic about “correctness” and want their functions to return something, not cause side effects in the application state. Since it’s not possible in GML to have a function return 5 separate values, we return a data structure that stores the five values. The downside of this is that you have some overhead, namely a need to clean up the ds_map when it is no longer needed. Fortunately, it’s not hard. The example project will demonstrate how to do this properly, so don’t worry.

iMprOVE_WRAP is available at the YoYoGames Marketplace for $2.99; however I am making it free for the first 10 downloads. Please rate it and review it if you give it a try!

Get iMprOVE_WRAP

scrollsnap extension for GameMaker: Studio

My latest GameMaker extension, scrollsnap, is published!

Asset listing at the YoYoGames Marketplace

Documentation

Demo video:

What’s scrollsnap?

Scrollsnap is a way of setting up a View in your room so that it “snaps” to the next screen’s worth of space when the followed instance moves outside the view. Simply put, it’s a view that stays put, but if you walk off the edge of the view, the view updates, giving the appearance that you walked off the edge of one screen and on to another.

Old-school video games such as Adventure, Pitfall!, and Berzerk used this approach to provide a larger game world to explore and play in, before programmers figured out how to make the hardware support scrolling.

Thinking about a human-like AI for playing Scrabble

[I got into playing Words With Friends on Facebook and my mobile phone back in 2012, and started writing a lengthy article on designing an AI to play scrabble-like games in a manner that convincingly simulates a learning human. This weekend, several years later, I’m a spectator at a local Scrabble tournament, and decided to finally finish up my thoughts.]

Designing AI for Scrabble-like games

I’ve been playing the Zynga game Words with Friends with various people for a few weeks, and have gotten progressively better at the game. After looking back and reflecting on the evolution of my play, and the development of my strategy, I became inspired by the idea of a convincingly human-like AI that embodied the various stages of my development as a player.

While actually programming it is a little more effort than I want to put into it, even just thinking about the design for such an AI is interesting.

(more…)

What I love and hate about game jams

This weekend was the weekend of Global Game Jam 2015. All over the planet, more than 10,000 participants got to try their hand at making a game in 48 hours, on the theme “What do we do now?”

I thought about the theme, and tried to imagine a situation that would lead someone to say, “What do we do now?” and the first think that came to mind was being stranded. Quickly, I envisioned a space ship that encounters a systems failure while in transit, and becomes disabled in deep space, with the crew left to figure out what to do to get things back working again. (more…)

Global Game Jam 2015 Warmup

On 1/23/2015, Global Game Jam weekend will be kicking off. I will be working at the Cleveland Game Developers site at the LaunchHouse in Shaker, OH.

This Saturday, 1/17, I will be leading a Pre-Jam Warmup session to give our participants opportunity to limber up their creative and technical skills. It’s a good idea, and fun. The goal is to build confidence and ensure readiness for the big Jam coming up the next week.

If you want to do your own version of this wherever you are, here’s what we’ll be doing for our warmup sprints:

WARMUP SPRINTS

00: SYSTEMS CHECK — ALL SYSTEMS GO!

  1. Launch your tools and make sure they still work.
  2. Check for updates, download and install any (if you wish).
  3. Test to your satisfaction that your stuff is working (write a “hello world” and prove it’s all working properly.)
  4. Create/Verify you can log into your GGJ account, any other accounts you may wish to use during GGJ15 (Trello, GitHub, DropBox, itch.io, newgrounds, kongregate, etc.) If you’re new to any of these, you’ll want to take time during the week leading up to the Jam to familiarize yourself with them.
  5. Create a checklist of things to bring to the Jam, and get everything together ahead of time
    1. Computer
    2. Verify you can connect to wifi at your jam site
    3. Create/verify you can log into any web accounts you plan to use during the Jam
      1. globalgamejam.org – be sure to join to your local site
      2. dropbox.com
      3. trello.com
      4. github
      5. itch.io
      6. kongregate
      7. newgrounds
      8. Make sure your team members can access any shared resources or services too!
    4. Power cables, extension cords, surge bars
    5. Peripherals
      1. headphones
      2. gamepad controller
      3. mouse
      4. 2nd monitor
      5. image scanner
      6. musical devices
      7. ???
    6. Human comfort
      1. Food/drink
      2. Pillow/sleeping bag/blanket
      3. ???

We’ll run this one up to an hour, but as soon as everyone’s done, we’ll proceed to the next sprint. If you’re downloading something huge and it’ll take longer than an hour, try to complete this before 1/23/15.

01: Development exercise: Asteroids

Asteroids is a simple action game. If you’ve never heard of Asteroids, google it and watch a youtube video or two, and you’ll get the idea in a few seconds. You’ll understand it faster than I can explain it in words.

Your job is to see how much of it you can build in an hour. You can make your own interpretation of the game, or try to slavishly re-create the original in every detail, it’s up to you. Work independently or as a team (if you have a team). We’re all in this together, so if you run into trouble, ask the room and someone will chime in with advice.

If you finish early, polish for the remainder of the hour, innovate a new feature, or whatever.

At the end of the hour, we’ll take a little time to show off our work and talk about what went well/what could have gone better.

02: Development exercise: Simple 2D platform engine

Take 1 hr to Work up a simple, 2D platform engine from scratch.

You don’t have to spend any time on animating sprites unless that’s something you *want* to focus on as a graphics contributor; square and rectangle programmer art representing the hitbox of your game objects are perfectly fine.

You decide how you want it to work in detail, and implement it however you like. The goal shouldn’t be to try to complete all of these features in an hour, but to choose a few of them and make a solid, well-crafted engine out of them — quickly.

You can design your own requirements, or use the following checklist of features and pick which ones you wish to support in your engine:

  1. solid platform
  2. jump-through platform
  3. destructible platform
  4. movable platform (player can pick up or push)
  5. gravity
  6. walking
  7. running
  8. shooting
  9. jumping
  10. wall walking
  11. ceiling walking
  12. double jump
  13. wall jump
  14. player health/death
  15. static enemy (spikes)
  16. moving enemy
  17. scrolling/camera
  18. moving platforms : any or all of horizontal, vertical, swinging, circle
  19. ladders
  20. pickup item (coin, power-up, etc.)
  21. door (how the door works is completely up to you.)

After an hour of development, we’ll spend an hour on demo and code review so we can learn from each other’s work. The code review is not meant to be exhaustive, but to show off highlights in technique if you found a cool way to do something, or to ask for ideas for how to do something better that you struggled with.

03 – Free for all

If we still have energy and want to keep going, we can come up with more ideas for sprints and ad lib it as we go. Maybe a graphics-oriented sprint, or sound effects engineering session, or a concept/design session where you have to brainstorm a pitch to a randomly chosen theme. We can quickly discuss and vote on it as a group.

XX – Wrap-up:

By now, even those of use who have never met or attended the meetup before will know each other a little bit, and will have worked together. Now’s a good time to talk to each other and find out if you have the right mix of talent and interest to maybe team up next week. This can go on as long as it needs to.