Sonny
(Oh, if you haven't noticed yet, the post title is a link to the game. Hopefully you have.)
OK, so as of this writing, Sonny is currently the highest-rated game on Kongregate. I have simply one question: Why? Not that Sonny is a terrible game, but if it has the highest rating, this says something not terribly good about either the quality of games on Kongregate or the tastes of the people who vote (in my opinion, a little bit of both).
Sonny is a very traditional turn-based RPG which should seem familiar to anyone who's ever played a bit of the genre. You have a character (of 1 of 4 possible classes) with some attributes, some hit points and some points which he uses to cast spells ("Focus" in this game). You fight enemies, either hitting them with whatever weapon you happen to have on hand or with a variety of spells. As you gain experience, your stats increase and you get more skills available. You get various equipment which you can equip on various parts of your body; your party gains more people who will help you out (although you can control their equipment, you can't control their skills or their actions in battle, which can be frustrating). In between battles, there's no larger map or anything; all there is is a screen where you can visit the item shop (actually an equipment shop), a "Next Battle" button, and a "Training Battle" option (which is convenient if you're stuck on a boss; you can just level up a bit and try again).
One distinctive feature of Sonny is the skills system. The skill tree is pretty deep and varied (although, alas, it is the same for all four classes of characters). As the name implies, it is a tree, so some useful skills at the bottom of the tree you'll have to acquire several skills before reaching. (No skill has more than one direct prerequisite, though some skills are prerequisites to more than one skill, so it is a proper tree. Well, more precisely, a set of trees, since it's composed of several disjoint sets.) Some skills have many levels, becoming more powerful with each level you acquire, while some just have one level and you're done. The usage of these skills is also somewhat innovative; you can put eight skills on your action ring at any one time. You can put multiple copies of a single skill on your ring, which is useful, because skills, in addition to their MP (excuse me, Focus) cost also have a "charge time" -- an interval after you use a copy of a skill that you can't use it again. That is, if a skill has a charge time of 8, you'll have to wait eight rounds after using it before you can use it again. But if you put multiple copies on your action bar, then you can have it available more often. You can rearrange skills on your bar at any time between battles; you can also do a complete reset of your skills and get all of your skill points back to re-spend as you want. This is useful if you find that one of your skills is a complete clunker, or if you need a skill at the bottom of a neglected branch to deal with a boss (which happens not infrequently). The downside is that the skill tree is simply too deep; a lot of the skills you'll never see unless you make an explicit effort to try and see every skill in the game, which will require a lot of resetting and playing around which probably isn't worth the effort in the end. You could probably prune a substantial fraction of the skill tree without most people noticing.
To distinguish the various attack skills from each other, nearly every attack skill comes along with a status effect. So in combat, you'll often see four or five effects stacked onto a single character. The variety of skills and their effects, along with the charge time limitation, tends to make combat much more tactical and interesting than a typical Final Fantasy combat, which is good, given that you spend nearly all of your time in combat. Somewhat oddly, given the plethora of status effects, there aren't any combat items; most conspicuously, there's no Phoenix Down equivalent, so if a character goes down he stays down for the rest of the battle. On the other hand, at the end of battle all characters are restored to full HP and MP.
OK, I think that covers the mechanics. Now, on to the plot. The blurb for the game makes a big deal out of the fact that you are, apparently, a zombie. (Or something of that nature -- all you learn in the game is that you were apparently dead before the beginning of the game, and then you're not. There's someone who might be able explain it to you but doesn't, and there's a tape which might have an explanation, but its contents never get revealed.) But, does the fact that you are a zombie (or whatever) affect the game in any way? No. You can't eat people's brains to gain their abilities; you can't turn other people into zombies; healing spells still heal you; in short, the "being a zombie" thing doesn't affect gameplay one bit. Anyway, there is a plot of some sort, but it's pretty thin. You're apparently trying to return to civilization, but you have to hack your way through various enemies first. These enemies have some personality, but it's not clear why you couldn't, say, just go around. It also feels like they ran out of time on the plot -- in addition to the aforementioned tape, which is just left hanging, the most conspicuous clue is that the story ends at the end of Level 3 -- Level 4 is just a bunch of bonus extra monsters without any plot at all. Ultimately, the questions of why you're fighting all of these enemies, or what you're gaining by doing so, are pretty much left unanswered.
Finally, the presentation. The presentation is top-notch (which is undoubtedly part of the reason this game ends up being rated so highly). The graphics are crisp and well-done, and the animation is nice and smooth; the sound effects are a cut above the generic terrible Flash game sound effects; there's even voice acting, which is nicely done (of course, "better than laughably terrible" already puts it way ahead of nearly all Flash games, but this is definitely good work). The music is also good (it strangely reminds me of the Heroes of Might and Magic 3 music), although it's a little too short given the number of times you'll hear it repeated.
Anyway, the initial parts of the game are pretty fun, but if you want to beat the whole game, it eventually turns into a kind of a slog. Especially if you want to beat the extra bosses in the 4th zone, which requires a lot of tedious leveling up. Still, it is a very well-crafted game, so I have to give it points for that.
(If you've read this far, here's my list of recommended skills, in no particular order: Break, for dealing with enemies that power up. Shatter Bolt, ditto. Electro Bolt, really useful for blowing off those annoying Interventions. Block, a nice all-purpose skill when you need to protect yourself. Regeneration (as many levels as you can spare), so you don't have to worry about your Focus. Heroic Intervention (level 2 is really nice), for getting rid of pesky bad status effects. You'll also want Disruption and Subversion for use against particular bosses, but you don't need them all the time.)
Saturday, June 07, 2008
Friday, June 06, 2008
WhiteboardWar: ChopRaider
I'm doing these in strict order of when I played them, so there'll be some not-so-great games mixed in with the good games. (Why did I try this one again? Oh yeah, I was mousing over what other people were playing, and it looked like it had an interesting name, so I decided to try it out. This method of game selection actually hasn't worked out so great for me, and yet I keep trying it. The moral, I guess, is that you should give your game an interesting name. Note that Sonny utterly fails this test, but it had enough buzz that I played it anyway...but we'll get to that soon enough.)
As far as game play goes, the game itself is an extremely traditional top-down shooter. You command the titular ChopRaider, a helicopter which is a "raider" despite apparently packing enough weaponry to destroy several small cities, equipped with bombs for dropping on ground targets and a gun for shooting at...well, mostly other ground targets, actually, and the occasional plane. The map is naturally packed with various things shooting at you, and your job is to shoot them first. There's also, in some maps, the obligatory POWs to rescue, although the game doesn't really seem to care very much if you actually rescue them or not.
Anyway, it's a pretty familiar formula. One somewhat unexpected feature is that when you kill a gun, it doesn't stay dead; after a while, the enemy War Factory will rebuild it. The only way to stop this is, naturally, to destroy the War Factory, which conveniently (and somewhat inexplicably) blows up everything in its sector; destroying all the War Factories on a map will clear that map. There's also factories which build smaller, mobile things to shoot at you (ports, which build destroyers, airbases, which build fighters, and tank factories, which build, well, you can figure it out); taking these out will destroy all of whatever they've been producing. You don't have to destroy these, but it makes life somewhat easier.
It is literally impossible to lose this game. If you die, you simply respawn on your carrier (with a slight deduction from your score). Now, there is a timer in the upper-right corner, so naturally I figured that the penalty for dying really came in the fact that it would cause you to lose precious time and thus increased the odds that you would run out of time before completing the mission. Imagine my surprise, then, the first time I saw the timer reach zero and blithely continue going. Apparently, the only penalty for running out of time is that you don't get any points for that mission. Since points are, to me, somewhat less interesting than just completing the game, this really isn't a particularly meaningful penalty. (There is one possible exception: The airbases occasionally produce bombers which will bomb your carrier. When this happens, a warning tone sounds. So maybe it's possible that if you're extremely careless, the enemy will sink your carrier, which would presumably cause you to lose. I was pretty careless, though, and nothing particularly bad ever happened to my carrier, so maybe this is just an empty threat.)
On to the presentation. The "WhiteboardWar" apparently refers to the art style, which looks as if someone has been drawing these things on a whiteboard (though apparently they have much finer markers than I do!); it's a simple and clean look. There's no music, just the background "whup" of the helicopter blades, which gets a little monotonous after a while, and the sound effects, which are also simple but effective.
Summing things up, then, there's really nothing about this game which makes it stand out from the pack and makes it an interesting game to play for more than about 15 minutes or so. It's competently executed, certainly, but there's just not enough imagination at its core. I rated it 3/5.
(One addendum which I forgot to mention: While ChopRaider's interface is pretty minimal, it does at least save your progress and allow you to replay previous missions. You would think this would be a pretty basic expectation in a Flash game, but you would be surprised how poor the replay features are in some Flash games.)
I'm doing these in strict order of when I played them, so there'll be some not-so-great games mixed in with the good games. (Why did I try this one again? Oh yeah, I was mousing over what other people were playing, and it looked like it had an interesting name, so I decided to try it out. This method of game selection actually hasn't worked out so great for me, and yet I keep trying it. The moral, I guess, is that you should give your game an interesting name. Note that Sonny utterly fails this test, but it had enough buzz that I played it anyway...but we'll get to that soon enough.)
As far as game play goes, the game itself is an extremely traditional top-down shooter. You command the titular ChopRaider, a helicopter which is a "raider" despite apparently packing enough weaponry to destroy several small cities, equipped with bombs for dropping on ground targets and a gun for shooting at...well, mostly other ground targets, actually, and the occasional plane. The map is naturally packed with various things shooting at you, and your job is to shoot them first. There's also, in some maps, the obligatory POWs to rescue, although the game doesn't really seem to care very much if you actually rescue them or not.
Anyway, it's a pretty familiar formula. One somewhat unexpected feature is that when you kill a gun, it doesn't stay dead; after a while, the enemy War Factory will rebuild it. The only way to stop this is, naturally, to destroy the War Factory, which conveniently (and somewhat inexplicably) blows up everything in its sector; destroying all the War Factories on a map will clear that map. There's also factories which build smaller, mobile things to shoot at you (ports, which build destroyers, airbases, which build fighters, and tank factories, which build, well, you can figure it out); taking these out will destroy all of whatever they've been producing. You don't have to destroy these, but it makes life somewhat easier.
It is literally impossible to lose this game. If you die, you simply respawn on your carrier (with a slight deduction from your score). Now, there is a timer in the upper-right corner, so naturally I figured that the penalty for dying really came in the fact that it would cause you to lose precious time and thus increased the odds that you would run out of time before completing the mission. Imagine my surprise, then, the first time I saw the timer reach zero and blithely continue going. Apparently, the only penalty for running out of time is that you don't get any points for that mission. Since points are, to me, somewhat less interesting than just completing the game, this really isn't a particularly meaningful penalty. (There is one possible exception: The airbases occasionally produce bombers which will bomb your carrier. When this happens, a warning tone sounds. So maybe it's possible that if you're extremely careless, the enemy will sink your carrier, which would presumably cause you to lose. I was pretty careless, though, and nothing particularly bad ever happened to my carrier, so maybe this is just an empty threat.)
On to the presentation. The "WhiteboardWar" apparently refers to the art style, which looks as if someone has been drawing these things on a whiteboard (though apparently they have much finer markers than I do!); it's a simple and clean look. There's no music, just the background "whup" of the helicopter blades, which gets a little monotonous after a while, and the sound effects, which are also simple but effective.
Summing things up, then, there's really nothing about this game which makes it stand out from the pack and makes it an interesting game to play for more than about 15 minutes or so. It's competently executed, certainly, but there's just not enough imagination at its core. I rated it 3/5.
(One addendum which I forgot to mention: While ChopRaider's interface is pretty minimal, it does at least save your progress and allow you to replay previous missions. You would think this would be a pretty basic expectation in a Flash game, but you would be surprised how poor the replay features are in some Flash games.)
Thursday, June 05, 2008
Chronotron
OK, we'll kick things off with the game that Kenneth first sent me, beginning this whole odyssey. If it had been less clever, maybe my whole trip through Kongregate would never have happened. Ah well.
(Brief disclaimer: As I discuss the game, there may be very minor spoilers. I certainly won't reveal how to solve puzzles, but I may discuss some mechanics which the game doesn't explicitly specify, though I'll try to keep to things which I think are pretty obvious. This is true in general, so consider yourself warned.)
So, the basic concept behind Chronotron, as mentioned above, is very, very clever. You're a robot with a time pod. You start out at some time (which, being a physicist, I'll call t0), leave the time pod, go around and do some stuff, and then return to the time pod. When you return to the time pod, you're transported back to the original time t0. Now, you see your past self go out and do all of the stuff you just did, but your current self can go off and do different things. Your two (or more) selves will never directly interact (that is, you can't collide with a past self), but they can indirectly affect each other in all sorts of ways, which is the heart of the game.
Most of the time, you want to keep the interactions relatively simple. A pretty common case is to go out, stand on a button which holds a door open for a while, and go back in. Then your next self will go through that door and do whatever you need to do on the opposite side. However, your future selves can also affect the past. Let's say that on the other side of that door, you accidentally trigger a switch that opens a pit between the button and the time pod. Now, when your past self tries to return to the time pod, he'll fall into the pit, which means he never returned to the time pod, which means you never created your second copy of yourself, which means you never triggered that switch and opened the pit, which means your past self could have returned to the time pod, which means...you've created a paradox! When this happens, you'll need to back up and try again. However, as the game helpfully tells you, "it's possible to alter the past without creating a paradox". This creates all sorts of interesting possibilities.
Now, some of the negatives. The most glaring is that the game is a little glitchy. Sometimes your past selves won't do what they did the first time around, even if nothing else has changed. This can range from slightly annoying to incredibly infuriating. The presentation is also a little basic. The background music is serviceable, but gets a little tiring after a while. The graphics are OK, while the sound -- well, the jump and pause noises are clearly borrowed from Super Mario Bros., so I doubt the rest is original, either.
A game like this is obviously going to depend heavily on its level design, and here the results are a mixed bag. The design is solid throughout -- there aren't any levels which feel like a real clunker, and there aren't any levels which depend on really annoying timing or positioning precision, which is definitely a huge plus. And each level (beyond the first few introductory levels, at least) will make you think at least a little (and some will make you think quite a lot). That said, there are a few criticisms to be made here, too. Remember above when I said that a common thing to do is to stand on a button to open a door for future selves to go through? You do this a lot. And going out, standing on a button for 20 seconds, and then going back is not really the most exciting thing in the world. It becomes even less exciting when you realize that 20 seconds isn't quite enough time for your future self to do all of the things he needs to do on the other side of that door, so you have to restart and then go out and stand on that button for 30 seconds instead. This gets boring pretty quickly. But also, remember above when I said that you can alter the past without causing a paradox? You don't do this very much at all. This has the potential to be a very interesting mechanic, but it's not really used very much in the game. There aren't many levels where you do something that seems aimless with your first copy, and then later copies do other things which turn that something aimless into something really useful, and this could be pretty fascinating (although in the wrong hands, I can also see how it could be pretty horrible).
Anyway, overall I gave this a 4/5, but obviously this concept has a lot of room to grow. I can see a sequel easily fixing a lot of these complaints and being a really excellent game.
OK, we'll kick things off with the game that Kenneth first sent me, beginning this whole odyssey. If it had been less clever, maybe my whole trip through Kongregate would never have happened. Ah well.
(Brief disclaimer: As I discuss the game, there may be very minor spoilers. I certainly won't reveal how to solve puzzles, but I may discuss some mechanics which the game doesn't explicitly specify, though I'll try to keep to things which I think are pretty obvious. This is true in general, so consider yourself warned.)
So, the basic concept behind Chronotron, as mentioned above, is very, very clever. You're a robot with a time pod. You start out at some time (which, being a physicist, I'll call t0), leave the time pod, go around and do some stuff, and then return to the time pod. When you return to the time pod, you're transported back to the original time t0. Now, you see your past self go out and do all of the stuff you just did, but your current self can go off and do different things. Your two (or more) selves will never directly interact (that is, you can't collide with a past self), but they can indirectly affect each other in all sorts of ways, which is the heart of the game.
Most of the time, you want to keep the interactions relatively simple. A pretty common case is to go out, stand on a button which holds a door open for a while, and go back in. Then your next self will go through that door and do whatever you need to do on the opposite side. However, your future selves can also affect the past. Let's say that on the other side of that door, you accidentally trigger a switch that opens a pit between the button and the time pod. Now, when your past self tries to return to the time pod, he'll fall into the pit, which means he never returned to the time pod, which means you never created your second copy of yourself, which means you never triggered that switch and opened the pit, which means your past self could have returned to the time pod, which means...you've created a paradox! When this happens, you'll need to back up and try again. However, as the game helpfully tells you, "it's possible to alter the past without creating a paradox". This creates all sorts of interesting possibilities.
Now, some of the negatives. The most glaring is that the game is a little glitchy. Sometimes your past selves won't do what they did the first time around, even if nothing else has changed. This can range from slightly annoying to incredibly infuriating. The presentation is also a little basic. The background music is serviceable, but gets a little tiring after a while. The graphics are OK, while the sound -- well, the jump and pause noises are clearly borrowed from Super Mario Bros., so I doubt the rest is original, either.
A game like this is obviously going to depend heavily on its level design, and here the results are a mixed bag. The design is solid throughout -- there aren't any levels which feel like a real clunker, and there aren't any levels which depend on really annoying timing or positioning precision, which is definitely a huge plus. And each level (beyond the first few introductory levels, at least) will make you think at least a little (and some will make you think quite a lot). That said, there are a few criticisms to be made here, too. Remember above when I said that a common thing to do is to stand on a button to open a door for future selves to go through? You do this a lot. And going out, standing on a button for 20 seconds, and then going back is not really the most exciting thing in the world. It becomes even less exciting when you realize that 20 seconds isn't quite enough time for your future self to do all of the things he needs to do on the other side of that door, so you have to restart and then go out and stand on that button for 30 seconds instead. This gets boring pretty quickly. But also, remember above when I said that you can alter the past without causing a paradox? You don't do this very much at all. This has the potential to be a very interesting mechanic, but it's not really used very much in the game. There aren't many levels where you do something that seems aimless with your first copy, and then later copies do other things which turn that something aimless into something really useful, and this could be pretty fascinating (although in the wrong hands, I can also see how it could be pretty horrible).
Anyway, overall I gave this a 4/5, but obviously this concept has a lot of room to grow. I can see a sequel easily fixing a lot of these complaints and being a really excellent game.
Intro (also, a little more technical issues)
I suppose I should talk a little bit about what Kongregate is. At its base, it's just a place where people can upload Flash games and other people can play them, which is not too different from many other sites such as Newgrounds. There are a couple of features which differentiate it, however. First is that it's very oriented toward building a community (hence the name, I guess), so, for instance, every time you're playing a game, there's also a chat panel to the right where you can carry on enlightened discussions on Hume's Enquiry Concerning Human Undestanding with everyone else in the room. I'll leave it to the clever people in the audience to figure out how well this works in practice, so this is a feature that doesn't really do anything for me.
The feature which does do something for me, however, is badges. After all, adding achievements to a terrible game instantly makes it something that you want to play, because you get rewarded with this achievement at the end!
Anyway, as you might expect, Kongregate is no stranger to Sturgeon's Law, but that doesn't mean that there are some good games there. And hopefully I can find some of them!
Oh yeah, the obligatory referral link: Sign up using this link!
OK, the promised technical issues. (Try to contain your excitement!) It looks like Blogger can't import comments from external sources, so the old comments will not appear (I still have them saved on bantha, however). I suppose I could go in and add them by hand to old posts, but that is not terribly exciting, to say the least, so I think I'll pass.
One item of curiosity: the old blog, even when lying completely dormant for years on end, never seemed to get any comment spam, which pleasantly surprised me. I guessed that my comment system was so old and janky that the spam scripts didn't know how to handle it. Well, it turns out that I was half right. So, my old comment script saves the comments in a file with a name of ###.comment, where ### is the ID number of the post being commented in. When I was cleaning out the comment directory, I found that there was, in fact, an extremely large file called .comment. Apparently the spam scripts would just submit their comment without any post number attached at all, and the comment script (apparently not being so great) would accept this. The spam comments would never show up on the blog, of course, because they weren't actually attached to a post, and a casual ls of the comments directory wouldn't turn them up, either. Anyway, this makes it quite easy to nuke all of the spam.
I suppose I should talk a little bit about what Kongregate is. At its base, it's just a place where people can upload Flash games and other people can play them, which is not too different from many other sites such as Newgrounds. There are a couple of features which differentiate it, however. First is that it's very oriented toward building a community (hence the name, I guess), so, for instance, every time you're playing a game, there's also a chat panel to the right where you can carry on enlightened discussions on Hume's Enquiry Concerning Human Undestanding with everyone else in the room. I'll leave it to the clever people in the audience to figure out how well this works in practice, so this is a feature that doesn't really do anything for me.
The feature which does do something for me, however, is badges. After all, adding achievements to a terrible game instantly makes it something that you want to play, because you get rewarded with this achievement at the end!
Anyway, as you might expect, Kongregate is no stranger to Sturgeon's Law, but that doesn't mean that there are some good games there. And hopefully I can find some of them!
Oh yeah, the obligatory referral link: Sign up using this link!
OK, the promised technical issues. (Try to contain your excitement!) It looks like Blogger can't import comments from external sources, so the old comments will not appear (I still have them saved on bantha, however). I suppose I could go in and add them by hand to old posts, but that is not terribly exciting, to say the least, so I think I'll pass.
One item of curiosity: the old blog, even when lying completely dormant for years on end, never seemed to get any comment spam, which pleasantly surprised me. I guessed that my comment system was so old and janky that the spam scripts didn't know how to handle it. Well, it turns out that I was half right. So, my old comment script saves the comments in a file with a name of ###.comment, where ### is the ID number of the post being commented in. When I was cleaning out the comment directory, I found that there was, in fact, an extremely large file called .comment. Apparently the spam scripts would just submit their comment without any post number attached at all, and the comment script (apparently not being so great) would accept this. The spam comments would never show up on the blog, of course, because they weren't actually attached to a post, and a casual ls of the comments directory wouldn't turn them up, either. Anyway, this makes it quite easy to nuke all of the spam.
Wednesday, June 04, 2008
Paul's Trip Through Kongregate (also, hello there!)
So I was talking with Kenneth yesterday, and he happened to bring up this blog. And we were talking about Kongregate, which I have recently been sucked into. And I had an idea! I have comments about these games that I've been playing, and they're a little too substantial to just put in the comments section. Besides, why would I want to put them in the comments where they could be read by hundreds of people (including maybe even the game authors), when I could put them here and have one or two people read them if I was lucky? So I decided to dust off the blog and put it to that purpose.
Anyway, I'll probably comment on one game per day. I'll only comment on games that I have finished (for some value of "finished"), since that seems like the fairest thing to do, so there may be a bias here towards games that are good and/or short. But I don't think there's anything wrong with that!
As you can also see, I'm trying to modernize the blog a little bit by using one of the current Blogger standard templates. Also, instead of using the old janky custom comments system I had, I've just switched over to the standard Blogger comment system (yes, this blog was created before Blogger had comments available). This has caused the old comments to disappear, naturally, though I still have them around; maybe I'll figure out if I can put them back into old posts properly. For the time being I've just left it at the default of requiring a Google account to post, but if this annoys people I can make it less restrictive. Anyway, there will probably be more changes in the immediate future, but I mainly just want to get things into a condition where I can post with minimal effort and without the result looking horrible.
Oh, yeah, obligatory plug: If this series induces you to sign up for Kongregate, use this link, if you would be so kind.
First review tomorrow!
So I was talking with Kenneth yesterday, and he happened to bring up this blog. And we were talking about Kongregate, which I have recently been sucked into. And I had an idea! I have comments about these games that I've been playing, and they're a little too substantial to just put in the comments section. Besides, why would I want to put them in the comments where they could be read by hundreds of people (including maybe even the game authors), when I could put them here and have one or two people read them if I was lucky? So I decided to dust off the blog and put it to that purpose.
Anyway, I'll probably comment on one game per day. I'll only comment on games that I have finished (for some value of "finished"), since that seems like the fairest thing to do, so there may be a bias here towards games that are good and/or short. But I don't think there's anything wrong with that!
As you can also see, I'm trying to modernize the blog a little bit by using one of the current Blogger standard templates. Also, instead of using the old janky custom comments system I had, I've just switched over to the standard Blogger comment system (yes, this blog was created before Blogger had comments available). This has caused the old comments to disappear, naturally, though I still have them around; maybe I'll figure out if I can put them back into old posts properly. For the time being I've just left it at the default of requiring a Google account to post, but if this annoys people I can make it less restrictive. Anyway, there will probably be more changes in the immediate future, but I mainly just want to get things into a condition where I can post with minimal effort and without the result looking horrible.
Oh, yeah, obligatory plug: If this series induces you to sign up for Kongregate, use this link, if you would be so kind.
First review tomorrow!
Subscribe to:
Posts (Atom)