Frogatto & Friends

Frogatto sprite

Frogatto & Friends is an action-adventure platformer game, starring a certain quixotic frog.
We're an open-source community project, and welcome contributions!
We also have a very flexible editor and engine you can use to make your own creations.

Frogatto 1.2 Released

December 11th, 2011 by Jetrel

It’s up on the iTunes store for iOS, and the release has been tagged in our source tree. We’re delayed on the mac and windows releases because, respectively, there’s a bug in SDL that breaks our fullscreen support in 10.7 (which we think we’ll probably have a solution for in a few days), and as for windows, I don’t even know what we’re gonna do, because across our entire team, I’m not sure we have a single guy who can compile for windows at the moment.

We’re quite open to outside help on that. If you’re good at compiling software for windows, we’d love your help (if you can do a really good job, and solve our ongoing compatibility problems, there might be a business opportunity there).

FacebooktwitterredditmailFacebooktwitterredditmail

Frogatto 1.2 almost ready

November 28th, 2011 by Jetrel

We’re hoping to have this upcoming release done in less than a week. Dave just fixed a killer bug that was holding us back, so now the only holdup is one last round of testing, and a call for any last-minute translation updates. In our previous release, we had: Brazilian Portuguese, Chinese, French, Italian, and Japanese. At the moment, chinese and japanese will need some heavy-lifting to update themselves for 1.2, and of course we’re happy to support any other languages people are willing to translate (at this point, we probably want to switch to some system of stable/unstable releases, so that unstable ones can be fully translated).

To quote marcavis’ earlier post: “If you have some good knowledge of your language, and feel like helping (we know you do), register on www.transifex.net, and either request to join the translation team of your language, or to create one if it doesn’t exist already. Frogatto’s page is here. There’s also some further instructions on how to do the translation work in this forum post, so be sure to check it out!”

So what’s new in this release?

* Complete redo of attack logic; frogatto now is free to walk around whilst he attacks, and in general is much more responsive.
* Frogatto’s tongue-grabbing is MUCH more forgiving
* Complete rewrite of damage handling; much more consistent now, and categorically eliminates some bugs where damage wouldn’t get dealt.
* Reworked some tilesets to eliminate tiling errors.
* Further enhancements to dungeon wall graphics (added edges).
* New, more readable dialogue font.
* Lots of small graphical tweaks.
* Maps are now strewn with spittable props within easy reach.
* Rewrote most of the dialogue.
* Collectible items like coins can be collected by being touched by the tongue, besides just frogatto’s body.
* Redrew the world map.
* Added a few new monsters, like the red hornbugs, and completely rewrote how bats behave.

We’ve also been working on a ton of other stuff that won’t make it into this release, because it couldn’t be finished in time. Most of this is a huge rewrite of the forest area; adding a boatload of new monsters and puzzles to it, and also giving it an actual story and boss battles to make it as rich as the seaside section. Also a bunch of sweet new music ryan has made which I can’t wait to have a home for. It’s going to be a lot more work before we’re done with that, so we wanted to get the things that are polished-off to you sooner rather than later.

FacebooktwitterredditmailFacebooktwitterredditmail

Content News #6

September 29th, 2011 by Jetrel

Over the past few months, we’ve been trying to address all the little bits of weirdness in frogatto’s gameplay. We’ve had a whole bunch of little corner cases in our gameplay that are each kind of minor in themselves, but taken as a whole, can make the game frustrating enough to ruin the fun for some people. Why we waited so long to fix them came down to cost/benefits being really poor for each of them, individually. Each of these was a tiny problem, but fixing it was a huge, sweeping overhaul, so we ended up working on other, more important stuff earlier on.

Some of the examples include:

– when you spit out an enemy, it was not possible to grab the enemy again whilst it’s in the air – or for some enemy shots like acorns or the thrown metal balls, to ever grab them again after spitting them. Now you can.

– there were odd situations in which enemies would “cancel out” of certain states; where behavior from one state of a multi-state object would “leak” into another state by the object running into some trigger that almost never got called in normal circumstances, but could very rarely ‘derail’ the object into some other state. For example, a flier bumping into ground might start walking, or might get stuck. A swimmer might fly if for whatever reason it escaped from the water. A frequent one was thrown enemies canceling their stun early.

– related to thrown stuff, it was possible at times for enemies to fail to set their team correctly, resulting in an enemy becoming permanently harmless; or sometimes resulting in frogatto being hurt by his own projectile. The fix for both these and the state issues is described further on in this post, under “States:”.

– frogatto couldn’t jump on top of enemies during his post-hit invincibility; he was completely intangible the whole time. Now, he’s intangible only until he’s outside of the enemy’s solid-area.

– when thrown enemies, or enemies in general, landed in awkward spots (such as slightly overlapping the player, or enemies getting stuck), we usually did a cop-out where they just died. We’ve come up with a few “escape systems” which try to find some way to shove/bounce them out of that situation without having to kill them. Quite a number of these “just kill it” cop-outs were so common that they were exploitable as a way to predictably kill the enemy.

– frogatto’s tongue tip had to directly touch an enemy to grab it, which is fine for anything that stays still, vertically speaking, but for bouncing projectiles (acorns, metal balls), it was insanely hard to catch them, and there are a number of new enemies we’ve been working on that were also similarly hard to grab. It was just no fun, and we needed it to be much more forgiving – now it is.

– rare situations could trigger two additive effects that made frogatto go up, both frogatto jumping, and frogatto bouncing at the same time. Other situations could result in a jump being robbed of almost all it’s upward velocity. We found what caused this and fixed it.

– Frogatto’s tongue now can attack in all 8 cardinal + diagonal directions. More importantly, it now extends in all of them with upgradeable length. The reason this took a while was that it wasn’t until recently that we had support for non-vertical/horizontal objects that could stretch like ropes. Our code to draw the tongue, as it was before, only functioned horizontally; the up-attack was just a hand-drawn animation, baked into frogatto’s sprite – it wasn’t something with a stretchable part.

– We removed the one instance we knew of where frogatto’s attack was “locking”. Locking is an annoyance seen in some videogames where you begin to perform an action, and whilst the action plays, you’re unable to perform other actions. In frogatto, whilst you attacked, you were unable to walk forward – if you were in the midst of walking, it stopped you and pinned you there until the move ended (technically, a few actions like jumping or walking the other way could escape this, but they had a different problem).

– Said different problem has also been fixed, at a graphical cost that we’ll work to correct: if you jumped or turned, your tongue disappeared – this was a bad thing if you did it a frame too soon, before the tongue touched some oncoming enemy. Attacks in games often act like a “parry”, you launch an attack, and expect it to nullify some oncoming threat. For example, if frogatto’s tongue just disappears halfways to an oncoming ant, suddenly that ant isn’t going to get removed, and suddenly, you’re going to take damage you thought you’d protected yourself from. This felt especially wrong in frogatto, because, sure, we had a reason why we didn’t do it (the tongue, facing in the now-opposite direction, would need to complete its course and retract, which might look odd), but in any shooter game, this is never a problem. Shots would leave the main character’s gun, and the main character would neither be locked in place to fire them, nor would they ever have to worry about the shot randomly disappearing and leaving them vulnerable to something incoming. Frogatto’s tongue feels like it should follow the same rules; now it does.

The graphical problem we get out of this is that we now do frogatto’s head, modularly (sometimes). Under circumstances of quickly changing animations, you’ll sometimes see it persist a frame or so longer than it should; it looks a little like a motion blur, so it really doesn’t look too bad, and we think it’s a problem worth introducing to get the gameplay right. We’ll see what we can do about fixing it, though.

Locking:

On the subject of locking, I’ve noticed two games that were at the opposite ends of the spectrum in this regard – the original price of persia, from the 80s, had almost every animation/action in the game be locking; if you entered a walk animation, you were stuck until it finished – I found it incredibly stiff and frustrating. On the flip side, because it has almost no real player-animations to speak of (a 2-frame walk cycle, and just some directional aiming-frames), the famous “cave story” features almost no locking whatsoever – I think this is one of the bigger factors in how appealing its controls were; the player-character always responded when you pressed the controls. Period. You never felt like the game had unfairly trapped your character when you tried to dodge something.

Fear of graphical-interpolation issues were, I think, the source of Prince-of-Persia’s design flaw. They didn’t have interpolations between every possible state, and because their animations were slow and long, interrupting them and snapping into a different one looked ugly enough that they decided not to allow it. This also solved the “disappearing attack” problem mentioned above. I imagine the reason they didn’t do interpolation was that having full interpolations between every possible animation in a game with large sprites is not just a lot of work to draw the graphics, but to write the logic, it’s a combinatorial nightmare.

States:

The state issues were a big strategic change, because most of these were done with variables; when you entered a state, you set a variable, and when you exited the state, you had to clear it. What was bad about this was that these variables sometimes wouldn’t get set at all, and then mismatched the appearance of the game. For example, if something doesn’t get set at the right time, one of frogatto’s projectiles could end up being completely harmless to an enemy. This breaks the absolute basics of videogaming – gamers form a mental model of what the rules are supposed to be in your game, and this makes out like the rules randomly don’t apply sometimes. No reason for it, no predictability, just “hey, that didn’t deal damage when I spat that enemy out… what the heck?”

The problem we had is that we’re a physics-based game, and by design, we’ve got more code-paths than we could ever anticipate. The player can execute moves largely in whatever sequence they want – usually the more freedom, the better. They can bump into things, do all sorts of crazy combinations of stuff we could never foresee. Now, we could try to play “whack a mole” and slap these variable-changers on each and every possible switch between modes, but it’s a bad idea because it takes a ton of time and effort to nail every last one, and the moment we change anything or add any new moves, there’s breakage because we’ve just added new paths.

Instead, it’d be ideal if we didn’t need to track those paths at all. If we didn’t have to set “state-tracking-variables”. It occurred to us: “hey, if we’re establishing a contract with the player where certain appearances are supposed to indicate certain states… why don’t we directly check the appearance?” So for a lot of things now, rather than storing our states, we try to make every state in the game “derived”, and we treat the appearance itself as the storage (or in some cases, the underlying physics; like what velocity something has). We do this now for what team something is on (who they’re able to hurt, that is), how much damage they deal, etc. It rocks, because it doesn’t matter how you get into, or leave a state; if you’re in it, you get the right settings during it.

Leaks:

Leaking behavior, such as “random ways stuff could get out of a stun early” was another big problem. We fixed these with a new system where objects change type during certain states. Changing type means swapping out the object’s entire bank of logic to remove all the stuff we don’t want to happen. In the past, for example, an object like the “water beetle” had all of it’s “land mode” and “water mode” code in the same file. All of those “behavior patterns” for the land-mode were sitting there just waiting to be triggered by some weird thing we didn’t anticipate, and thus didn’t turn off, underwater. Now, those are in two separate sets. Once something is underwater, all those little logic/behavior hooks from when it was a walker, are just gone. There’s no way they can trigger by accident.

The most frequent time when objects currently change type is for their thrown state. Walking objects tend to have tons of hooks in them that return them to their walk animation, and it was extremely common for enemies to escape a stun early by just having some other enemy bump into them, or something.

Hooks:

Another primary motivation of all this was to cut out any instances of code duplication, and to set up our damage system so that all of the different parts of dealing damage (the knockback, the cooldown, the amount of damage dealt, the named ‘type’ of the damage, the graphical effects from it, etc) were all split into separate functions, so that each of these could be overridden (a bit like subclassing) individually without clobbering all the rest. This keeps all our monster behavior more consistent (we had about 3-5 inconsistent implementations of things like flashing-after-getting-hit, for example, because every time we overrode one thing, we had to override everything), but it also paves the way for future additions. One thing we have in mind is a much more interesting powerup system; but we couldn’t do it without a clean framework to build off of.

Plans/Wishlist:

We’ve still got a bunch of little bits we’re not so happy with.

– frogatto’s tongue should grab the acquirable goodies, like coins and such. One of many easy things we haven’t gotten around to.

– some enemy projectiles that are slow when fired by the enemy (because otherwise they’d be unfair) are strange to remain slow when frogatto spits them. Acorns and metal balls come to mind. Should be an easy fix.

– the general mechanics (especially the vertical limitation that keeps you from climbing without a column to bounce back and forth in) of the walljump are as we want, but there are a few things we don’t like about it. Far and away the worst, I think, is how it breaks the flow by “reflecting” horizontal movement if you miss a jump, and hit a wall. This is especially bad if you just barely miss the lip of a ledge. Because of our controls, you usually leap in the opposite direction. I don’t know how we want to address this.

– the walljump’s downward slide is also a little frustrating, and I’m not sure it needs to be present at all.

– frogatto’s enhanced spit power changes the trajectory in ways that make previously easy shots hard. Upgrading the spit power seems like an easy idea on paper, but in practice, I’m not sure it’s a good idea to have the upgrade at all. (We’d probably consider replacing it with something equally rewarding, but less awkward, such as something that increases how much damage spat enemies deal.)

Hey there:

Is there anything in the gameplay that currently bugs you, but we haven’t mentioned? Anything we have mentioned, and you also are dying to see? Please leave a comment!

FacebooktwitterredditmailFacebooktwitterredditmail

Website Tweak

September 25th, 2011 by Jetrel

I’ve removed a bunch of the white outlines that just created visual noise, and I’ve also removed a bunch of the chartjunk. Should be much cleaner and more readable, sorry about not doing it right the first time; I have to make mistakes to learn what not to do.

You’ll also note the giant download button that’s now easy to find for a change. We’re hoping to do a mozilla-style “make that link right to your platform’s binary” deal, with a little “other versions” link underneath, but that’ll wait till we have time to figure out the browser detection script, etc. If anyone knows how to do that, and has some javascript for it, by all means, please leave a comment. Anything that can expedite my having to do the research would be great.

FacebooktwitterredditmailFacebooktwitterredditmail

Frogatto’s on TV!

August 24th, 2011 by Jetrel

Frogatto recently got reviewed by a Serbian web/tv show called “Interfejs” (e.g. Interface). (Forgive us for any inaccuracies, since we know nothing about the language.) Seems to be a good review, from what we could cipher out through google translate. You can view the original review here, or if you’re like us, you might need the help of the google-translated version.

Thanks guys!

FacebooktwitterredditmailFacebooktwitterredditmail

Statistics

July 10th, 2011 by Jetrel

Those of you who have read our FAQ (or who are adept enough to monitor outgoing network traffic) may have noticed that Frogatto “phones home”; it sends data back to our servers. Unfortunately, a lot of people have unwarranted suspicion about this sort of thing, which is really a shame because benevolent usage of this is really a irreplaceable aid to game design.

What we’re doing (thus far), is we’re tracking the movement of players throughout the game; every time you play frogatto, it records where you move, and sends a record of this back to us.

Why do this, you ask? Why would this matter to us? Well, one of the biggest pitfalls in game design is, as a creator, making bad assumptions about what players can or can’t figure out – that, or forgetting that you know something (since you wrote the game, after all) that you forgot to tell the players, but which is crucial to solve some puzzle. At worst, you can sometimes make things that are supposed to be possible, downright impossible – or you overlook some game-breaking glitch simply because you never tried something a certain way. These can easily make the game impossible to finish, which is something we want to avoid at all cost.

We could try testing this with a few friends in real-life; we have, but it’s nowhere remotely near a representative sample size. Thankfully, we’re in the internet era, and we have a better option. This is a good thing, because we especially need something that takes the least amount of labor on our part, because we’re a tiny, independent crew, and we not a real company that would have a department full of employees dedicated to this. We’re not a AAA studio that can have QA folks watch players test the game from behind a one-way mirror. When we have problems like this, the guys who would otherwise be creating new stuff for the game have to take time away from doing that to fix them.

Technical Info:
When you are finished playing Frogatto, the game tries to send a small plain text file to our servers. This file is then appended to it’s match on the server, and we end up with a very long list of all the data. There are four types of data; where you moved to, where you loaded the level, where you died, and where you quit the game.

None of it is personally identifiable – have a look for yourself. Especially since we’re open-source, there are no privacy concerns, because you can see our actual code, and we can’t hide anything.

However, there are valid reasons to not want to send back the data, foremost among them being a metered internet connection. If you want to, you can run the game with –no-send-stats to stop sending us data. (eg, “frogatto.exe –no-send-stats” on Windows.)

History:
So, we’ve actually had this stat-tracking stuff in the game since a very early version (probably our alpha versions; I remember fixing a couple of broken/overly difficult jumps on the now-nonexistant “stonepipe flats” level, based on this data). The problem we had was that we were collecting the data just fine, but we really didn’t have a good way to visualize it. The editor was able to display it with a line corresponding to each player, but it was very hard to read when too many lines were in one place, and after we released the 1.0 version of the game, the amount of data we were getting was so big that any sort of realtime display brought the editor’s display routine to it’s knees. For a while, we actually disabled the feature, which was really a shame.

Fortunately, DDR just came through with a brand-new python script that renders this data as an image. This sort of image is called a “heat map”; it overlays all of the different paths that players have taken on top of each other; each of the single ones is very faint, but they make the drawing darker and darker where they overlap. The end result is a single picture where the darker something is, the more often the players have been there. (The reason these are called heat maps is that a common color scheme, not seen here, is to have the untouched areas in colder “blue->green” colors, and the heavily-touched areas in warm (yellow->red) tones.)

Running DDR’s script on the level “bug mining” gives the following picture:

Visualisation of bug-mining.cfg
Download large version.

This is useful in itself, but it’s really useful if you combine it with a tiny picture of the level (which we’ve added a feature to export), because that allows us to immediately see what parts of the actual level this corresponds to – especially, to see if there are places in the level players are supposed to be able to reach, but can’t – or vice versa. For a simple example, here’s what it looks like combined with a screenshot of the tutorial level “grassy path”:

Image of movement data on tutorial level.
View Real-Size Version

This is a great example of the data this tool gives, because when I designed this level, I had actually set it up so that the ant nest near the end was inaccessible to the player. Changes in jump physics later made this area accessible, and looking at this picture makes it very clear that a lot of people are jumping up there (in this particular case, we decided this wasn’t really a problem per se, so we haven’t fixed it, but in many cases, this would be very helpful to know).

Comments are closed, due to abuse.

FacebooktwitterredditmailFacebooktwitterredditmail

A Nice Review from DIYGamer

June 18th, 2011 by Jetrel

We just got a nice review about the recently released 1.1.1 from DIYGamer. Thanks guys!

FacebooktwitterredditmailFacebooktwitterredditmail

Serious Business

May 27th, 2011 by Jetrel

credit to “danst”

       __  .--.
     /'  '\/    \
     |    |  O |
     |  O |.  .|
   .|\___/  ""  ''\
   |  .  .  .  . |
   | / \ / \ / \/./
     ''---------''
   /'''__    ___''''\
  |__/    \ /    \.|
   |______||______|

FacebooktwitterredditmailFacebooktwitterredditmail

Graphics News #17

May 2nd, 2011 by Jetrel

We’ve polished up the dungeon back-wall graphics. (I’ve got quite a bit more in the works to bring the dungeon up to par with everything else, but it’s a low priority at the moment.)

We’ve also added some additional bits of furniture, mostly thanks to our new contributor, Arikel.

FacebooktwitterredditmailFacebooktwitterredditmail

Frogatto on Mac App Store

April 30th, 2011 by Jetrel

Frogatto has just gone on sale on the Mac AppStore! (It’s $1 at the time of this writing.) A new feature that comes from this is automatic updates, which we haven’t had before.

As a thank-you to our existing community, and because the Mac AppStore is intel-only, and Ryan and I (and others) are still on PPC, we’re going to keep a free build of the game available on this site. If you like frogatto, please support us by buying the game on the app store, or donating via our paypal link.

FacebooktwitterredditmailFacebooktwitterredditmail