Tiny Heroes

I haven't had much time for development lately and, as usual, I spent the little time I've had on libraries (old and new). I've been playing some platformers in hopes that it'll get me motivated to make time for Tiny Heroes.

I played through most of Cave Story. I also played through a bit of Knytt and the first level that comes with Knytt Stories. I played Lyle in Cube Sector for about 15 minutes, but couldn't get the hang of the controls. Maybe I'll play some Metroid today too.

Cave Story and Knytt Stories have challenging moments, but overall I feel like my character is generally safe. Having a save point every 2-3 screens in Knytt Stories takes away any sense of danger or adventure. Saving your progress breaks the game up into a sequence of little adventures, each being the 2-3 screen journey to the next save point. Metroid felt like a big, dangerous adventure. Knytt Stories is careful platforming, Metroid is more shooter. Cave Story is somewhere in between, and Tiny Heroes will end up somewhere in between too.

It sounds like it'd be annoying, but one thing I liked about Metroid is having to stop and kill enemies repeatedly to replenish health (these mob-spawning things made it convenient). As a game mechanic, this does a few things:

1. It rewards the careful player (they have to spend less time replenishing health), but doesn't punish the careless player too severely - you live, you just have to spend time replenishing your health (this is better than dying and having to redo a sequence of tricky jumps).

2. It makes the game seem bigger. Once you get to a save point, you're done with everything before that point. It validates everything you've done so far and you don't have to worry about it anymore. Knytt Stories gets around this (to some extent) because you do have to re-visit old places after getting new abilities. The old places are still in mind but the danger isn't. Once you get past a tough screen or get to a save point, you're safe.

3. It makes the character seem strong. Whether it's a big inconvenience or not, in Knytt Stories, death is trivial. One hit kills and there are a lot of things that can hurt you. You either make it through a screen or not - there's no inbetween. You never think "wow, I barely made it through there". When your character can take many hits it's still a good idea to avoid taking damage, but it means that you can recover from mistakes.

4. To build off the previous point - being able to take hits means there are many ways through a room. You don't have to follow the single path that avoids all hazards. You can deviate from this path, take some damage, but ultimately get through the content *your* way, not the developer's way.

5. It avoids other problems that come with having frequent save points. Suppose a player jumps down from a tall ledge and saves, only to realize that they missed an item and now can't get back on top of the ledge to get it. It's frustrating, and the goal is to avoid frustration.

I'm going on vacation soon, but when I get back I'll make more time in my schedule to work on Tiny Heroes. I'd like to take some examples from the code and write an article about creating AI with the sidescroller library, but I think I'll just keep my head down and work on getting a playable demo of the game ready by the end of September.

Pixel Movement

I posted another update. The biggest changes are the fix to fractional moves and the proc. You can use the watch() proc to make a player watch a different mob. This is similar to saying "client.eye = someone", but with the library's camera control it's not that easy. The library has to update your client's pixel offsets as the other mob moves, so it needs to track some of these things internally. Instead of setting your client's eye directly, just call watch().

  • Fixed a bug with fractional moves in the y and z directions. Thanks to Kaiochao for pointing it out!
  • Added the proc. The proc takes a single argument, a mob, and makes your camera follow that mob instead. Because there are pixel offsets applied to your client's eye, following another mob isn't as simple as just setting client.eye = some_other_mob. However, the watch() proc takes care of all the details. The set_camera() proc and camera object are still used and these properties apply the same regardless of which mob you're watching.
  • Changed the benchmarks\demo-2\ demo to include example usage of the watch() proc.
  • Added an example of pushable boxes to intermediate-demo.
  • Made some changes to the SLIDE camera mode to help reduce jitter. It's better, but still not perfect.
  • Updated the documentation to include reference pages for the preprocessor flags (TWO_DIMENSIONAL, LIBRARY_DEBUG, etc.), the proc, and the mob's watching and watching_me vars.

Some reference pages were added, bringing the total to 94 reference pages for the library. I'm not sure if everything is documented... I'm not even sure people use the reference pages. If you find a var or proc defined by the library that doesn't have a reference page get a life! make a post about it on my forum.

Other Stuff

I came across an interview with Nifflas, the creator of Knytt (among other things). The interview is from 2007 but there were some bits that are quite relevant to BYOND users.

Q: Do you use most of your spare time to code?

Nifflas: Not that much. Since I use Multimedia Fusion to create my games, I mainly have to focus on the graphics and music but that's very time consuming too. The standard mistake that almost everybody does, is that they try to create huge RPG's that must take +60 hours to finish but it's great to start with small but stylish games.

Two points there that are highly relevant to BYOND users:

1. Multimedia Fusion 2, like BYOND, is a game development tool. Knytt, Knytt Stories, and Within a Deep Forest were all made using it and are all incredibly popular. To all the people who leave BYOND to try coding a game in c++ because you think that you have to use c++ to make a real game: you *are* wasting your time!

2. It's a shocking revelation to the BYOND community, but for the rest of the world it's just obvious: keep things simple and you're more likely to finish the project (to be fair, this is only news to most of the BYOND community, some people understand it already). Nifflas later said about motivation "My game projects are never that large so I always feel I'm getting somewhere. There are some things I find very boring but I always know that they'll be over quickly."

It was also good, after being concerned that Tiny Heroes is too blatantly inspired by Knytt, to see Nifflas say "I was inspired by a whole lot of different things ... Basically, I'm not that original".
Groundbreaking post Forum! It is encouraging and I agree, I'd rather see a lot of neat Byond games rather than games that are worked on for 1-2 years. I think a lot of people have the ability to do that.
Hey Forum Great post :), Just to let you know but it seems Nintendo don't like people linking their images lol. "these mob-spawning things" link has been broken and seems to send me to a denied image lol.

I think the Simple Developments Guild is doing well in achieving the goal of showing that fun games can be small and well made.
Teka123 wrote:
Just to let you know but it seems Nintendo don't like people linking their images lol. "these mob-spawning things" link has been broken and seems to send me to a denied image lol.

It works fine for me, perhaps it's something with your Internet Browser?

I just fixed the link. Now it links to the page that contains the image.