Been been having a bad work week (been doing a lot of DVB related stuff, which sucks), but that's no excuse for not updating my blog... just an excuse to make it small...
I've been looking at the concept of one-button games, and I think it's (conceptually) awesome... I wouldn't do a game like that myself, nor would I consider it commercially, but from a game design standpoint, it's very cool!
Above you can click and play "The Adventures Of One Button Bob", one of the best games of the genre I've seen so far...
What one-button games demonstrate (beyond the usual examples of a character that can just jump, or something like that) is that with good design, and thorough thinking, you can create quite fun experiences with just one button, which is a neat mind-workout...
I've been trying to apply some of the same logic in my own game designs, by asking myself several times "Do I really need this control? Is this adding or detracting from the game?"... By cutting down from the initial design, you might end up with something more streamlined and fun... of course, you might also end up with nothing from a gameplay standpoint (i.e. "The Heavy Rain Syndrome")...
So that's it for this short blog entry... hopefully I'll write a bigger one this week... :)
Ah, BTW, check out the "Splinter Cell: Conviction" launch trailer... It's cliché, but it's awesome... Haven't felt excited by a Splinter Cell game since the first one! :)
Lately, on the gamedev side of life, I've been working on a platform game structure, so I could create a more or less complete platform game from an editor...
I was considering three engines on which to build the "Game Player" itself: Flash (Flex-based), Torque (Torque Game Builder, more exactly) and Spellbook (my own engine).
One of the most important aspects for me was the ability to use my pipeline to build the game... so that would imply creating the assets in 3d Studio, use a tool we call IBGen to build the sprite images and then use that for the game.
So, I started with a Actionscript exporter for my Flash tries... Although I got a platformer structure working pretty fast, Flash is just too slow for my purposes, which is too bad, since it was going very well:
Flash would have the advantage of running on lots of platforms (Mac, PC, Linux, and so on), with a huge ammount of compatibility, from a HW standpoint (the old PC-dev nemesis!).
I tried Torque Game Builder (TGB) next, with the Platformer Starter Kit (PSK). And while it had some nice ideas, the ammount of work on the code itself that would have to be done to adjust itself to the needs of my project would have been too big, considering that I would have to learn the inner workings of Torque and PSK... But the state machine that the PSK uses was very nice, so I kind of designed a similar system for my own platform system.
So I decided to go Spellbook, and all was good... until I had to do collision detection...
Normally, I do collision detection in 2d either using tilemaps and circles, or by cheating, testing horizontal and vertical displacements separatly and reacting accordingly, but at the end of all projects, I end up with an extremely ugly piece of code that's too finicky to work with again... and each time I swear I'm going to do a better job at that...
Well, this time I decided to try to do it correctly from the start, using 2d polygons as collision primitives and reacting appropriately (more or less physically correct) to the collisions.
On my initial formulation of the problem, I'd like to find out if a polygon A that will want to move a certain delta will collide with polygon B, and if so, find out when and where.
Some quick searches later, I didn't seem to find a general swept-polygon test, so I had to implement my own.
My own test is not as efficient as it could be, I think... For example, I can probably take advantage of the fact that the polygons are convex to speed up the process, but the algorithm outlined below is fast enough for my needs...
My algorithm is all designed around of checking if the line segment formed from points Pn and P'n intersect any side of the other polygon:
Pn is the nth point of the first polygon, P'n is that point offset by the delta, so P'n=Pn+delta.
So, check if that segment collides with any of the segments that define the second polygon, taking the one that will take less "time" to hit.
To discover the intersection of two line segments, La and Lb, you just have to solve the equation:
La=Lb
Since La=P1+ua(P2-P1) and Lb=P3+ub(P4-P3), and we're working in 2d, we get the following two equations:
x1+ua(x2-x1)=x3+ub(x4-x3)
y1+ua(y2-y1)=y3+ub(y4-y3)
Solving for ua and ub, we get something like:
den=(y4-y3)(x2-x1)-(x4-x3)(y2-y1)
ua=((x4-x3)(y1-y3)-(y4-y3)(x1-x3))/den
ub=((x2-x1)(y1-y3)-(y2-y1)(x1-x3))/den
If den=0, the lines are parallel and will never intersect, unless the numerator of both equations are also 0, in that case the lines are coincident.
Finally, if 0<ua<1, the lines intersect, and point of intersection is PC=P1+ua(P2-P1).
One thing I've noticed is that since the polygons are convex, you only have test half the segments in the polygon, the segments that are facing the opposite direction from the delta (green ones, in the example below):
The whole function would look similar to:
t_min=FLT_MAX For all vertexes(V) in poly A For all edges(E) in poly B P1=V P2=V+delta t=point_of_intersection(P1,P2,E) if (in_range(t,0,1) and in_range(t,0,t_min)) then best_vertex=V best_edge=E t_min=t end end end For all vertexes(V) in poly B For all edges(E) in poly A P1=V P2=V+delta t=point_of_intersection(P1,P2,E) if (in_range(t,0,1) and in_range(t,0,t_min)) then best_vertex=V best_edge=E t_min=t end end end if (t_min==FLT_MAX) return NO_INTERSECTION TimeOfContact=t_min PointOfContact=V+delta*t_min NormalOfContact=E.normal()
One important thing about this routine: it just handles collisions through movement (if the object is already colliding when the test is done, it will acknowledge no collision).
Now, collision response is as important as collision detection, since that's where lots of things can go bad...
When we don't detect a collision on object A moving a certain delta, end position of said object is just:
posA=posA+delta
But what happens if we have a collision?
Well, we have to contemplate some movement and modify the delta, according to the normal:
if (test_collision(A,delta,TimeOfContact,PointOfContact,Normal)) then posA=posA+delta*TimeOfContact else posA=posA+delta end
But imagine you have gravity and are moving to the right, so that delta=(10,10) and you detect the collision time is 0.2 (from a possible 0..1).
So, you would move down 2 units, and to the right 2 units, and then stop, instead of moving 10 units to the right, since nothing is stopping the player from doing that!
So, we need to account for multiple collisions during the whole time interval, and we get to something like:
float total_time=1 while (test_collision(A,delta,TimeOfContact,PointOfContact,Normal)) then posA=posA+delta*min(TimeOfContact,total_time) total_time=total_time-TimeOfContact delta=delta-normal*dot_product(normal,delta) if (delta.is_null) break end
The "delta=delta-normal*dot_product(Normal,delta)" removes the offending movement component from the displacement vector. In the above example, the new delta would be (10,0), and we would only have 0.8 time to move on that vector. This would create the correct final position of (10,2), instead of the incorrect (2,2) of the first version.
Now, there's a final problem with this solution... Since our poly/poly intersection function can't handle cases where a collision is already existing, this would fail, since the first intersection would make the first polygon be lying just on top of the the second polygon, intersecting the edge (correctly), but future movement would pass right through it...
You could handle this case by checking for colinearity and a series of other processes, but I found out that the simpler way to work this through is now to allow the movement that would bring us to that limit case, by just changing the order of a couple of operations:
float total_time=1 while (test_collision(A,delta,TimeOfContact,PointOfContact,Normal)) then delta=delta-normal*dot_product(normal,delta) if (delta.is_null) break posA=posA+delta*min(TimeOfContact,total_time) total_time=total_time-TimeOfContact end
While this isn't as correct from a formal standpoint, it works great in practice, stopping those small edge cases that can be quite tricky to get working correctly...
Any questions, or suggestions of improvements, let me know... I'm sure I can make this a better algorithm by taking in account the fact that the polygons are convex.
Note that this algorithm works with concave polygons aswell, but you'd have to remove the dot_product test on the poly/poly intersection test, and make sure the scale of the objects are very different, so that you don't have simultaneous collisions to handle, which happens quite easily in concave polygons.
But this raises a good point: heroes in most games are mostly jerks...
They scrounge along the possessions of people while they're home and take what they want! While some games penalize this sort of behavior (by not allowing players to do it, or only certain classes), most games are happy with this loot whoring!
And this is not the only instance of heroes being jerks... For example, think of the multi-character games (Baldur's Gate, for example), where you could breeze through the game only worrying to gear up the main character and just passing the leftover pieces to the other members... and none of them got pissed and left! It's funny to think that in MMORPGs, you have to devise pretty complex loot distribution systems so that it is more fair... would be fun a single-player game where players other than your main character could also try to get the loot for themselves, instead of defering to the great hero...
Another example is a kill X of Y quests in most RPGs (especially MMORPGs)... in World of Warcraft, for example, you get a quest where you have to kill some Murlocs because they're being riled by an evil sorcerer... why not just kill the sorcerer?! Oh, wait, you get that quest later, but in the meantime you were a genocidal maniac just killing people because they were of a different, hardly-sentient race!
I'm not saying that games shouldn't have these kind of quests, but make it a moral quandary... give the player the oportunity to not outright slay everything in sight and get different rewards according to the path... Is this boring for most players? Ok, how about we just kill really evil things, instead of this grey moral ground? Or give some penalty to allignment, which influences what you can or cannot use... Would love to see that kind of feature in WoW, to be honest...
I know it's harder on the devs, requires much more game design, but it would definately be interesting...
In most RPGs, heroes are made out to be saviors of all that's good, veritable paragons of virtue; and yet, they are probably responsible for more death than the evil dark lord they're trying to dethrone... but that's allright, 'cos most bad guys are evil because they do evil stuff to innocents...
And hence we come to the crux of the issue: in games, the end justifies the means, which if you think carefully enough, is the reason while most people think violent videogames are the worst thing in the world... While in most movies (the competing media for "Worst Thing In The World"), when the character does something "wrong", it gets to struggle with it for the whole duration of the film, on videogames, the character is you... so, ideally, you would struggle with the decisions you make... but the decision you made wasn't to go postal on evil-controlled race, it was in fact to use your pixels to hit the other pixels, until the other pixels wielded more pixels and you ran away happy...
There is no correlation between what you do in the game and the real life parallels (and that's why that the relations between game violence and real violence are completely blown out of proportion!): if you would feel in the game that you were indeed "killing" something/someone, you would generate an empathic relation that would make you struggle with yourself, negating the positive feeling you get with the "quest achieved"... If that wouldn't happen, congratulations, you're a sociopath and if games don't send you over the edge, probably the wrong type of cereal will!
Games nowadays struggle hard with graphical, audio and physics realism, but they still shy away from the really though concepts of game designing for realism... yes, I know magic doesn't exist, but I'm willing to suspend my desbelief for that... what I'm less inclined to do is to suspend my realism on what I'm supposed to achieve in the game by my victory!
Of course, this doesn't apply to the oh-so-popular anti-hero player character, that isn't a clear-cut good guy as most RPGs have... these are a whole new level, and they're much harder to create as believable characters, in my opinion.
At the end of the day, heroes are indeed jerks... jerks on a mission, but nevertheless jerks...
Changing topics, went yesterday to see "Star Wars in Concert"... and it was frikkin' awesome... John Williams might not be the most original guy in the world (just check out the soundtracks for Star Wars, Superman, Indiana Jones and Harry Potter... they have the same elements), but when it comes to creating movie anthems, he's probably the best in the world in what he does... His sense of melody and grandeur is just breathtaking, and listening an orchestra playing this live just adds to the sense of awe...
To finalize, the dutch metal band Epica doing a cover of the Imperial March (also awesome live, I've seen it, yay!):
First things first - God of War 3 is amazing... I have to review my review... all the faults I pointed out in my early impressions really go away from the middle of the game onward... I've finished it in the weekend and it's the second best game on 2010 so far (only second to Mass Effect 2)... So reviewed scores for it:
God of War 3
Gameplay: 10/10
Story: 8/10
Graphics: 9/10
Sound: 9/10
Brutallity and Violence: 10/10
Overall: 9/10
Next on my playlist: Heavy Rain... again... :\
And since I'm on the topic of games, check out this trailer:
I'm a sucker for graphical adventures, and this one has a visual style and a humor type that appeals to me... Can't wait to take it for a test drive and see if it's any good...
Weekends are the time for relaxing and movie watching... besides lots of gaming, of course...
This weekend I saw 3 movies: "2012" (which I missed on the movies), "Solomon Kane" and "In the Name of the King: A Dungeon Siege Tale".
First up, 2012... well, as most people on the net probably said, the movie is terrible, but has nice destruction sequences... I didn't follow any of the movie reviews and such when it hit the theatres, to avoid spoilers, but I'm guessing everyone thought the same... the destruction sequences are massive and very well done (Roland Emerich style), but when I thought you couldn't top off the wrongness of plots in disaster movies after "The Day After Tomorrow", Emerich shows us you can always dig deeper! Mutated neutrinos?! Come on, even as a plot basis for a disaster movie, that's pretty week... oscillating in pseudo science like that, and Mayan predictions (why would a damn stellar allignment activate a neutrino cloud?! Wouldn't it just be better to get some pseudo-scientific gravity based connondrum?!). But unlike "The Day After Tomorrow", even the special effects can't save this train wreck, to be honest... most of the good stuff you already seen on the trailer, and from a certain point onwards, it's just filler... I'll give it a 3/10...
Solomon Kane I saw in the cinema, and it was pretty much what was expected... I really like the dark fantasy style of Robert E. Howard, where magic is present but is very subtle, and shows a violent world where the concept of good and evil isn't clear cut.
Problem with the movie, in my opinion, was the editing... I kept feeling they left out parts of the storyline! Add that an erratic pacing, and you have a movie that is "Could be amazing, but...".
For example, they set up the main character, Solomon Kane, as a anguished man, trapped between heaven and hell, good and evil, but then seem to forget that part of the character development altogether, so you end up with an action hero that could have been played by Bruce Willis (no insult intended, but most of his action characters seem a bit undimensional, albeit terribly fun!).
So basically, it all comes down to an editing/directing issue, with is a shame, since I'm guessing no sequels will be come out to correct this (I'm predicting disapointing ticket sales, to be honest)... This one is getting a 7/10...
Finally, I was feeling up for a terrible movie on Sunday, so I decided to watch "In the Name of the King: A Dungeon Siege Tale", which I bought for 1.5€... Good value for money, if you ask me, considering that I was expecting a way worse movie...
Well, I have to admit I'm biased... I was uber-psyched when the "Dungeon Siege" game came out, only to be terribly disapointed by it... While it didn't fail in a big way on anything in particular (and from a technical standpoint it was awesome), the pieces didn't quite add up... The characters were generic, the levelling system was annoying and I just didn't care enough for anything in the storyline to even finish the game, let alone the expansion...
So I was expecting the same from the movie... which was exactly what I got! Generic characters, cliché settings (oh, wow, he was the king's son!?!? I didn't see that one comming... before the start credits!)... But the action sequences are pretty nifty (Jason Statham is awesome!), and even the silly moments (Ninjas?!? Really?!?) aren't enough to offset what is actually an entertaining movie, and probably the best movie in Uwe Boll's career (on par with Postal, to be honest). I know, that's not saying much, but I've seen much worse movies and bought full price ticket aswell ("Dungeons and Dragons" anyone?)!
The cast of actors also help the movie a lot, with stars like Burt Reynolds, Jason Statham, Ray Liotta (Can he do any other role besides raving psychotic bad guy?!), John Rhys-Davies, Ron Perlman, Claire Forlani and Kristanna Loken... It's amazing that Uwe can actually get these people to work on his movies, to be honest... Final score: 5/10
So, this is basically the weekend update... Final report card:
God of War 3: GET IT NOW! What you still doing here?!
2012: Avoid at all costs, just watch the trailer, all the good bits are there
Solomon Kane: "Could be amazing, but..."
In the Name of the King: A Dungeon Siege Tale: It's terrible, but surprisingly entertaining
Yesterday I started playing Heavy Rain, and my PS3 decided to crash during one of the millions of cutscenes... Had to turn it off and on again (in the power outlet!), and when Heavy Rain started again, I'd lost ALL my progress in the game! I have to start all over again! The most boring game in the world, and I have to do it all over again! ARGH!!!!!
Good to know that Yahtzee agrees with me on the game though... But remember, you heard it here first! :)
Thankfully, I picked up my collector's edition of God of War 3 aswell, so I'm going to play that before I go back to Heavy Rain...
Now for my rant: localization...
Ok, I get it, localization makes the games more accessible to the audience and that (supposedly) translates to higher sales and more $$$...
But do they have to do such a poor work on the localization?!
Number 1: my God of War 3 Collector's Edition is more expensive, and it is for collector's... So why do they spoil the cover (which had a nice relief image in golden ink that shines wonderfully) with a stupid logo saying "Game In Portuguese"?!?! I don't care! Specially, I don't care enough for it to be in the front of the game... No, it's not a sticker (that could be placed outside the protective plastic), it's part of the damn cover! Can't be removed and it looks awfull (it's big and has the portuguese flag colors, green and red, which look horrific with the gastly scene in the background!). There's 2000 warnign signs in the back of the game box, along with full portuguese text, why couldn't they put that info (if it was important enough...) on the back! Thank you so fucking much, Sony Portugal, for devaluating my game...
Number 2: I understand "big names" are almost mandatory for voice acting, but was the best it could be done was to cast Ricardo Carriço as Kratos?!?! I don't have anything against the actor, to be honest, he's been involved in interesting projects in the past and has always been a strong supporter of gaming in Portugal, but casting him as Kratos is just wrong!
Kratos is an hyper-violent sociopath that speaks like he has had a cheese grater passed through his throat at a young age... Everything he says is an extension of that, and that's why he is believable when he says he wants to kill Zeus... I wouldn't doubt anyone that spoke like that!
Then we have Ricardo Carriço, which just tries to mimic the general style of the voice and fails miserably, because he doesn't sound like that ever! You notice his voice failing at times because of the exertion of trying to speak violentely...
I know our country is small and all, but in approximately 2 million portuguese of the right age and sex, they couldn't find a closer match?!
Thankfully, the game has the option for english voice, which makes it good again! Yay!
In my view, voice localization is only worth the effort if the game doesn't loose character and intensity with it... Specially in a country like Portugal, in which we don't dub anything, so we are used to listening to movies and content in general to be in English with portuguese subtitles... If you're going to do it wrong, don't do it at all!
From a "review" standpoint, I've played about 3 hours of GoW3, and I must say that it's the same as GoW1 and GoW2... So if you liked that, you'll like this one... The game doesn't feel stale at all, and it's great fun (the ending of the first boss battle is awesome, with the first person view and all).
The only complaint I have (and it's not really a complaint, it's more a statement of fact) is that I don't see a big difference graphic-wise from GotW2 to GotW3... Sure, if has more polygons, and GotW2 was probably the most beautiful PS2 game made, but I was kind of expecting something more... next-gen... It still looks beautiful, but I can't help the feeling that the much-vaunted next-gen isn't really next gen, it's "extended gen"... It's "current-gen" on HD (when the games support it, which GotW3 does).
The storyline is the usual GotW fare, which means starting mega-powerful, losing powers, complain at the Gods, getting powers, more threatning everything that moves (I swear I'll see Kratos starting to threaten rocks for just being there!) and I imagine a climatic ending...
Anyway, time for numbers:
God of War 3
Gameplay: 10/10
Story: 7/10
Graphics: 7/10
Sound: 9/10
Brutallity and Violence: 10/10
Overall: 9/10
It's definately a must have on the PS3, on par with Uncharted 2...
I'm playing Heavy Rain now... but I use the term "playing" loosely...
Heavy Rain is alot of things, but a game it is not... Of course, that depends on the definition of game that we use, but at this juncture I'm just using the definition that stays that a game is something that you play... and you don't play Heavy Rain, you watch it... I'd estimate that the play/watch ratio is about 1 hour of play per 5 hours of cutscenes.
Every action you perform in the game, you are treated with some seconds of cutscene, and this goes through the whole game... the term "game" doesn't suit it, since we watch more than play. A more apt term would be "interactive movie". It's not even a decent exploratory system, since moving in the game is atrocious!
We can argue that the decisions we make on the game are meaningful, and affect the outcome of the game, but even the first proposition (that the actions are meaningful) is subject to discussion: a series of times in the game, I just press the button to see what will happen, since the effect of my button-pressing isn't apparent until I actually press the button (Ctrl-Alt-Del did an awesome cartoon about this here).
So we have a "game" that makes us watch it, and difficults the decision-making process... hardly a game, to be honest...
David Cage several times has said that Heavy Rain would redefine games and the way we feel about them, but to be honest, I think we had plenty of that previously: Steve Jackson's Fighting Games series of books... And even if it was another medium, we have the brilliance of Don Bluth back in 1983, when he released Dragon's Lair on Laserdisc!!!
So, in my opinion, Heavy Rain is just the natural evolution of "interactive movie" games... of course, is is an amazing leap in technology, writing and emotional involvement, equivelent from going from Amoeba (Steve Jackson) to mamals (Don Bluth's games) to Heavy Rain (Cro Magnon)... but still a way off to a true interactive movie experience (where you can really do everything, not just what the game designer thought of).
It has lots of positive points, though... the fact that you don't have a "save game" facility makes you be more carefull with your decisions, since you have to live with them until the end of the game. For example, I shot some guy in the game, and I'll have to carry that around for the rest of the game... downside of this is that I didn't actually wanted to kill him, thought the button did something else, and I wish I could rewind and do that scene as I intended to. But given the tradeoff, it's better like this, since it makes the player/watcher be more empathic with the decisions they take, which is kind of lacking in other games (point in question, the Holy/Unholy thing in Dante's Inferno, which is kind of pointless and doesn't reflect on the personality of the player, but on the concept of beating the game-system). Choices have to be meaningful to achieve some measure of empathy between the player and the game character, and this is Heavy Rain's strenght: make the actions count, make the player question his judgement, make the player part of the story.
Heavy Rain is a very well executed piece of software, with amazing graphics, a compelling story (after the first 1.5 hours though), but still it isn't a game... it's well executed interactive fiction.
Because I like numbers, here's a final breakdown on my rant:
Heavy Rain
Gameplay: 3/10
Story: 9/10
Graphics: 9/10
Sound: 8/10
Emo-ness: 10/10
Overall: 5/10
Try it if you like studying games, otherwise grab a good book or see a good movie...
Hey all, and welcome to "Return of the Spellcaster", my new blog...
Why "Return of the Spellcaster"? Well, considering Spellcaster Studios is no more, I decided to reclaim my old screen name, in the pre-interwebs day (back when BBS were new!), Spellcaster...
Anyway, in this blog (that I hope to keep current and alive, like all bloggers do), I intend to talk about my projects, games I play, movies I see, music I hear, etc...
It's like a media review center to cope with my sudden urges to write some words about any theme...