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.

Content News #2

March 3rd, 2010 by Jetrel

We’ve upgraded the world-map’s logic; it’s now got text-labels on each of the locations, and rather than (in debug style) being accessible from the main screen, the map is accessed as we’d intended it – there are a series of magic pedestals you can stand on to be whisked away to the map; these offer a network of shortcuts between key points in the game, so that if you need to backtrack to finish a side-quest, or collect a special item, you can do so.

These are currently accessible by default, right off the bat, but we intend to make them something you have to unlock by completing a quest in the game.

We’ve cleaned up a bunch of the movement mechanics with ants, and frogatto spitting them – they now sit stunned on the ground for a bit, and flash when they’re about to recover.

We’ve also removed the “exploitable” behaviour wherein spitting an enemy into a wall at point-blank range would kill it – now, it simply reflects backwards, passing through the player. We’d put that in to handle that edge case, but (as we feared) it was such a convenient way to kill them that it was being used more often than the normal methods.

Long, rambling aside on game design:
Some designers might not care, but exploits like that, in my opinion, tend to break the ‘immersion’ of a game, because they’re a jarring reminder that it is just a videogame. They’re a bit like “a glitch in the matrix”, if you will. Most games have issues like this, and one or two won’t kill a game, but they do add up, and enough of them will cheapen the experience.

This example in frogatto was a fairly weak one; a much stronger one might be a classic RPG which happened to allow you to toss items from your inventory at enemies – and in which by whatever accident, tossing a shoe did more damage than the intended spears or knives. It’d be amusing, sure, but the key problem is that it robs the game of the intended experience, which is fighting with actual weapons. (I’ll leave arguing whether sticking to the intended experience is a good or bad thing to another post; generally speaking it tends to be bad, because it tends to have very shallow assets to it – the creators didn’t expect it, and therefore didn’t create art/scripting/custom-interactions/etc for it. It may happen to work, but it’s usually buggy, ugly, and sometimes outright able to crash a game.)

Another argument against it is that – if some exploit causes something the programmers and artists invested a bunch of work making, to get completely neglected, then their work on that thing is wasted.

On the flip side of things, accidental gameplay exploits like this can be an excellent way to discover emergent gameplay. Designers tend to have a kneejerk reaction of disparaging/correcting anything that didn’t fit their initial plan, but the ultimate goal of gamemaking is to have fun gameplay and “fun” is notoriously hard to invent. If you stumble across something that’s really fun, by accident, it might be worth changing the plan to accommodate it.

FacebooktwitterredditmailFacebooktwitterredditmail

16 responses to “Content News #2”

  1. Domochevsky says:

    “We’d put that in to handle that edge case, but (as we feared) it was such a convenient way to kill them that it was being used more often than the normal methods.”

    Shouldn’t that be a indicator that the normal method is kind of inconvenient then? I find having to charge up a shot or trying to hit another enemy (if one’s even around) to be …well, clunky. >_>

    (Played the game up to the shop so far. When i tried to buy something it crashed. Hum.)

    Talking about control methods… the “double-tap to run” is not all that optimal, as it makes it difficult to edge towards a cliff, but that may be just me. (“Careful, caaareeefuuull… no, don’t run off the cliff, stupid frog!”)

    Wall jumping is another topic all together. D:

  2. Jetrel says:

    Yeah, it is; it’s absolutely right that killing a single enemy should be as easy as killing two, so we’ve added something new: when a bug is in that momentary ‘stunned on the ground’ state, you can just hop on them mario-style to kill them. A major thing with enemy-tossing is that we’ve just added in a few classes of enemies that are entirely immune to the energy shot, and which you can’t grab or harm at all with your tongue. That was the original intention, and it’s kind of a pity we took this long to get around to it. This is going to be a huge deal in boss fights, with monsters that constantly spawn lesser (tossable) minions.

    The energy shot is supposed to be comparatively awkward to use to offset its big advantage (one which you’ll be able to dramatically upgrade later on) : range. To use a Halo analogy, the energy shot is a pistol, spitting a monster is a grenade.

    The shop was broken in the last release; it should be fixed now. (We always release, period, it’s a battle-hardened OSS tradition, and with good reason.)

  3. Domochevsky says:

    Interesting, that.
    Also: are you going to do something about the trajectory thrown bugs take? Right now it’s pretty hard to calculate whether or not you spit them far or near or straight or in an arc.

    Right now i don’t use the energy shot at all, since it’s range is …low and the charge-up timeing-wise awkward. (Just too short to get feeling for it and just too long to be wrist-triggered.)

    (I also can’t help but notice that the double tapping to run was left uncommented, leading me to the assumption that it’s not going to be changed.)

    Btw, i presume you’re going to release the fixed shop soonish? (I’m using the Win_r1868.) The game is still unpolished, but so far i like what i’m seeing. There’s a certain charme to it. 🙂

  4. Domochevsky says:

    I checked the new version (Win_r2088) now, and things i’ve noticed so far:

    – Are there savegames? I didn’t see any so far. (apart from the save.cfg, but that feels more like a hack if i just copy them over)

    – The shop works now, although im not sure how the gliding wings work (Didn’t notice any difference). I also bought everything in there and still have about 150 bucks left over from a rather casual run towards the shop. Prices may have to be adjusted, not sure.

    – The black area kinda flickers when zooming in to talk to chopple in the shop.

    – When i get a running start right before talking to chopple, frogatto runs further than intended when zooming in, leaving chopple offscreen. That works with all other NPCs as well.

    – These spikey things can jump on your head and sit there, doing nothing to you.

    – The lower third of the inventory screen is cut off, so you can see the level below it. (And i don’t see what i bought in there, dunno if that’s intentional)

    – The charge bar below the portrait is nice, but it’s a little longer than the space allocated for it. Its now much easier to rapidfire with the charged shot as well. 🙂

    – Some of the grass in “downhill from here” (left of the shop) is flickering.

    – The secret passage in the top of the same area now shows the frog instead of having him hidden behind the scenery when moving through there. I like it, but want to let you know about it, just in case.

    – The screen kinda shakes when i jump over to another screen. Just walking into the next screen works as normal.

    – The world map doesn’t work. The frog just falls down into the infinite abyss after teleporting to it and revives at a savehouse.

    – The screen right of the teleporter (“crevice village”, the tunnel) has some black areas that are lighter than the rest.

    – Frogatta talking to the bridge keeper: “Ok, will you please LEND me that key?” is probably better than “loan”. 🙂

    – There’s a white tile in the black area above Hedge (in the cage). Frogatto also runs off the edge when zooming in to talk to him.

    – Opening the chest in the secret room of the first house of the village crashes the game (Assertion failed, variant.cpp, line 80)

    Dunno if this is actually the right place to put all this. >_>

  5. Domochevsky says:

    Also:

    – The inside of the cliff house (where you get in with the key) doesn’t exist. It’s just floor and then endless grey (leading, again, into the infinite abyss. A savehouse inside the village would be nice, by the way. It’s a bit difficult to test all the nooks and crannies if i have to restart from the shop savehouse.)

    – The second house in the village is also not accessible. Dunno if that’s intended. (The door is not usable)

  6. Domochevsky says:

    Saw the new version number (r2110), but couldn’t discern any changes. Is there a changelog somewhere? (Am i even using the correct way to let you know about things?)

  7. Ben says:

    Thanks for the long list! A lot of it is already known, but I think some is either not known, or forgotten about. Some of it, like the flickering grass, is Windows only.

    As for running, at least two of us don’t like how it now, but I’m not sure what we’re gonna do about it.

  8. Ben says:

    Hah, just missed your last message. Yes, this is a fine place to post things.

    There’s only a couple changes: the editor is much faster now, and, you can press alt+s to send a screenshot to http://www.wesnoth.org/files/dave/screens/frogatto.png (right now it has my screenshot from using Windows in a VM with broken OpenGL).

  9. Domochevsky says:

    Good to know then. (“you” = everyone trying the game? Could come in handy for describing further issues.) 🙂

    Another thing:

    – Those mook-spitting stove thingies have a tad too much HP. I think right now you need to hit them like 4 or 5 times to bring them down. Mayer lower that to 3 throws to make them less tedious.

    – The charging fishes under water are kind of spazzing out, bumping into walls instead of charging along what i presume to be their default paths.

    – It doesnt matter at what height i change screens currently, frogatto always starts at ground level. (Say, when i jump into the next screen from high up.) Changing this could make for a few good secrets/paths.

  10. Jetrel says:

    “- The inside of the cliff house (where you get in with the key) doesn’t exist. It’s just floor and then endless grey (leading, again, into the infinite abyss. A savehouse inside the village would be nice, by the way. It’s a bit difficult to test all the nooks and crannies if i have to restart from the shop savehouse.)”

    When something is obviously unfinished, please don’t waste time telling us about it. Right there you’re looking at a totally unfinished level. Unusable doors are similar.

  11. Domochevsky says:

    Huh… ok, guess i should have known that this is what “unbuild” looks like. >_>
    A “under construction” tile in that room (Or on doors that aren’t leading anywhere yet) would be helpful, though.

  12. > Saw the new version number (r2110), but couldn’t discern any changes. Is there a changelog somewhere?

    There’s no real changelog at the moment other than the SVN repository’s commit log. If you have a working SVN client you can point it at svn://frogatto.com/home/ben/svn/frogatto/trunk/ and tell it to get logs — this would be the “svn log” command when using the command-line client.

  13. Jetrel says:

    We’re not wasting time putting in “under construction” signs; I flirted with the concept earlier, and it basically took as much time as just finishing the thing instead.

    Besides the point, in differing amounts, everything is under construction.

  14. Domochevsky says:

    Ok, i checked the SVN log now and did a little more messing around with r2141.

    – Frogattos backyard: To the leftmost side the water line is showing under the grass in the rock

    – Same place: the teleporter is placed a little to far to the right on the slope. You can’t jump when standing right next to it.

    – You can die during conversations. (Just spit a enemy near a person you want to talk to.) Frogatto will just stand there, being all fried until the conversation ends. Then you get thrown back to a savehouse.

    – The ceiling in Nene’s basement looks kinda wonky. There are wrong tiles scattered around.

    – The “rolling” movement of frogatto is currently kinda useless, as you don’t keep rolling when holding down the button. (But then again, right now there’s no use for it in general)

    – The fire in the fireplace of the secluded hut is a bit too far to the left.

    – Also in the secluded hut: the doors and the lift vanish when you enter and move to the left. They reappear when you move back. (Still usable though) I think this has something to do with the fire coming into view.

    – The water surface below the secluded hut (right, next to the savehouse) is too long, leading into the rock.

    – The underwater streams are kind of broken. Its sprite is too thin now. (may be related to the fire in the hut)

    – The charging fishes appear to work now. Same for the green following fishes. (In that they are highly annoying, following frogatto for way too long. It’s pretty easy to get cornered and eaten alive under water, especially since they block your path.)

    – Tongue-ing a enemy through a spring causes the enemy to disappear. spitting them into those yellow blocks does the same. (when standing right next to the block)

    – Jumping on stunned enemies doesn’t kill them. (Frogatto just bounces off of or stands on them, getting carried around.)

    – Enemies don’t recover from stun while offscreen. (Or even move.)

  15. em3 says:

    Win r2160.
    – When I used a teleport I was moved to the big map… and fell to my death there. Does that mean that the map is just not working atm.?
    – When I tried to use save point (toilet?) the game crashed:

  16. em3 says:

    … argh, I accidentally pressed “Submit”…
    the rest of crash report:
    Assertion failed at variant.cpp line 80 (Expression: false).
    Stderr:

    ERROR: type error: expected function but found null ((null)0)
    FRAME 0: [
    animation(‘close_door’),
    paused_speech_dialog(level.player, [‘Do you want to save the game?’,
    ‘Yes’, [fire_event(level.player, ‘end_interact’),

    #make the player invincible#
    level.player.make_invincible(),
    save_game(),

    transient_speech_dialog(level.player, [‘The game has been saved.’])],
    ‘No’, []]), fire_event(level.player, ‘end_interact’)]
    FRAME 1: paused_speech_dialog(level.player, [‘Do you want to save the game?’,
    ‘Yes’, [fire_event(level.player, ‘end_interact’),

    #make the player invincible#
    level.player.make_invincible(),
    save_game(),

    transient_speech_dialog(level.player, [‘The game has been saved.’])],
    ‘No’, []])
    FRAME 2: [‘Do you want to save the game?’,
    ‘Yes’, [fire_event(level.player, ‘end_interact’),

    #make the player invincible#
    level.player.make_invincible(),
    save_game(),

    transient_speech_dialog(level.player, [‘The game has been saved.’])],
    ‘No’, []]
    FRAME 3: [fire_event(level.player, ‘end_interact’),

    #make the player invincible#
    level.player.make_invincible(),
    save_game(),

    transient_speech_dialog(level.player, [‘The game has been saved.’])]
    FRAME 4: level.player.make_invincible()
    FORMULA: data/objects/props-interactive/save_toilet.cfg 24: [
    animation(‘close_door’),
    paused_speech_dialog(level.player, [‘Do you want to save the game?’,
    ‘Yes’, [fire_event(level.player, ‘end_interact’),

    #make the player invincible#
    level.player.make_invincible(),
    save_game(),

    transient_speech_dialog(level.player, [‘The game has been saved.’])],
    ‘No’, []]), fire_event(level.player, ‘end_interact’)]