Emmanuel Deloget

Members
  • Content count

    4797
  • Joined

  • Last visited

Community Reputation

1381 Excellent

About Emmanuel Deloget

  • Rank
    GDNet News Editor

Personal Information

  1. One I'm proud of (although it's not game-related): I found a way to store our XML configuration files in a way that allows us to share said configuration in multiple programs directly, without the need to load the XML file again. I did this by pinpointing a shared memory block at the same address in each process.   But the most challenging part was to make sure that we were able to read/modify the configuration concurrently without the help of mutexes to limit context switches. So we went the road of spinlocks. But spinlocks introduced some weird priority inversion issue - so in the end we have what is called a Test-and-Test-and-Set spinlock with a variable backoff parameter (it took me a while to figure it out).   The classical test-and-set spinlock is mostly written like this: class spinlock { int sl; public: void lock() { while (!atomic_test_and_set(&sl, 0, 1)) { } } void unlock() { atomic_set(&sl, 0); } }; A TTAS+Backoff is a bit more complex (I added the priority boost, as it also had a major impact on the contention).  class ttas_backoff_spinlock { int sl; int old_priority; public: void lock() { while (1) { if (atomic_test(&sl, 0) { if (atomic_test_and_set(&sl, 0, 1)) old_priority = save_and_boost_process_priority(HIGH_PRIORITY); return; } microsecond_sleep(rand() % 1000); } } void unlock() { set_process_priority(old_priority); atomic_set(&sl, 0); } }; With carefull research, you'll find numerous explaination of both the TTAS algorithm. The backoff principle is a bit more obscure: first, its a wait for a random very short time (in the example above: at most 1 millisecond). Second, the wait is done through a system call - that gives the OS the opportunity to schedule.   It should be noted that while I'm proud of the solutions I used in this program (it even have a carefully written garbage collector that use some weird heuristic to discover if a block os sizeof(void*) bytes is a pointer to another part of the same memory area or not), it must be noted that I found a better solution to implement the lock. My original reason to use a spinlock had to do with the poor state of the pthread mutex implementation (read: weird, difficult to explain behavior on mutex release when more than one other process waits on the mutex) when the mutex is shared by multiple processes (I'm working on a not-that-recent version of Linux). I finaly found relatively painless solutions to implement named mutexes on Linux that overcomes the pthread mutex limitations - yet I haven't had the time to implement it and fully test it. 
  2. What do consider with P2P game?

    Some information about how to establish the connection between two hosts behind a firewall : http://en.wikipedia.org/wiki/Hole_punching, especially http://en.wikipedia.org/wiki/TCP_hole_punching ; this might not be an easy trick if you don't have much network knowledge (in which case I suggest you to read http://www.bford.info/pub/net/p2pnat/index.html). An informational RFC has been published on the subject (http://tools.ietf.org/html/rfc5128). http://www.comp.nus.edu.sg/~bleong/publications/netgames09-p2p.pdf provides a state of the market (always interesting).    Some libraries out there might help (summoning google)   * https://github.com/ckennelly/hole-punch is about UDP hole punching.  * http://cs.nyu.edu/zilin/cplusplus/ provides some source code to do UDB hole punching as well   Source code that shows TCP hole punching in C or C++ is harder to find (I found C# examples, Java examples, but I failed to find any C or C++ example).    But then, the first issue is not connection : it's identification. What is the IP/port address of an unknown distant machine? If you're playing on the local network you can setup some broadcast-based discovery protocol (a la upnp). But you can't use that on the internet and thus you need to setup something to help your users to find another player (using what is called a rendezvous protocol : http://en.wikipedia.org/wiki/Rendezvous_protocol).   BR
  3. Of course. Why wouldn't it be possible? It's software - you can make the screen show anything you want and process input any way you want. You can take a mouse position, check if it's contained by any arbitrary shape, and then do whatever the heck you want with that information.     On the technical side, the shape can be arbitrary.    On the human size, one have to consider how we are procesing shapes. If it's a bit complex we'll lost the purpose of the button and we'll focus on the button itself. That makes it less readable. If it's really complex (for example a really weird concave shape with numerous holes and so on) we'll have problem discerning the button itself, and we won't know where we are supposed to click.    So while we're not limited to rectangle, it's still a good idea to limit ourselves to simple, convex shapes - unless they represent a pattern which is easily understood (such as a country on a world map). Noone wants to make something that is too complex to be parsed by an average humain brain. 
  4. std::vector vs std::unique_ptr

    I concur. Thou shall never manage arrays through anything but std::vector<>. For one, the std::default_deleter (that you don't want to change, otherwise you manager a std::unique_ptr<T,Deleter> instead of a std::unique_ptr<T>) performs a delete on the underlying object, while you'll want a delete[]. Second, std::vector<> [i]is[/i] a smart pointer for arrays. There is no need for anything else.
  5. A guide to getting started with boost::asio

    I would love to see a nicely written (i.e. latexified) PDF version of this article. It's really great.
  6. J4rG0|\|

    'lo, There's a reason why I used a formal description of a pipeline: it's far more precise and concise than the same definition written in plain english (or in plain French in this case). The full definition of a pipeline is given by: [quote] A pipeline P is a chain of functions F1 , ..., Fn such that P (x) = (Fn ° ... ° F1) (x) [/quote] The remaining part is here to help. If you want the same full description in plain English, you also have to talk about a myriad of pther thing, including input and output sets and so on. Whenever I want to define something on my own blog, I tend to use a formal definition - or a definition which is as formal as possible. Now, I agree: this makes the text more difficult to read (but then, I also speak of expression templates in that very post )
  7. It's about frustration...

    [quote name='kseh' timestamp='1309994215'] It's difficult to tell by your post whether the elements that you're talking about would appear equally &quot;stupid&quot; if the game was played with another piece of equipment. Especially since you point out that the performance of the equipment that you choose to use was what you believed to be the root cause of your frustration. [/quote] I (kind of?) answer to the first sentence later. It's not the performance of the keyboard which is quiestionable, it's its suitability to the task. I'm pretty sure one of the requirement of the game developpers was : "on PC, support keyboard + mouse input" - for the simple reason that it's unreasonable to ask for every player to buy another controller: that would nearly double the game price, not to mention that some PC players are perfectly able to successfully play with the keyboard (I have no double that skillfull player will do a lot better than me and won't even be slightly annoyed by the issues I experience ; but skillfull players are less frequent that one might think). [quote name='kseh' timestamp='1309994215'] The only other thing I can say is that I'd recommend to either buy a new controller (in which case I'd be curious to know if your opinion remains unchanged) or to investigate the game's requirements a little better before you purchase it to determine if it'll be suitable for your preferred equipment. [/quote] Up to very recently, CRPG on PC were not made for gamepad. Those who were (Oblivion for example) proposed a clean interface that allowed a user to play with their keyboard+mouse with no difficulties. So this is definitely possible. Since the W2 requirements does not even mention the prefered controller, one would be right to assume that new CRPG are still playable with a keyboard. If it's no longer true, it's not the fault of the player, but a mistake of the developpers. Saying that I have some kind of obligation to surf the internet for further, more precise information is a bit unreasonable: I'm not buying a car, I'm buying a video game. A piori, I should not have to spend my time searching for this kind of information (a posteriori, it seems I should have; but if you consider that it's a normal behavior then you must ask yourself why). Now, if I play this part with a pad, I will of course have a different experience. I may be more confortable to crash the skulls of my opponents. This is quite logical and this is due to the topology of a gamepad (the buttons that I would have used are available under the right thumb which is one of our most agile finger - provided that you are right handed; on the keyboard, you would play the sequence with ASDW, meaning that you would use 4 left hand fingers for the same task. This is definitely disfunctionnal: you can't have the same agility than with the right thumb, yet the designer asks you to perform the same action in the same timing. I don't believe I'm exagerating when I say it cannot work well). Before I go for the other part of my answer, I must say that I don't dislike or dismiss anything you say. There are valuable, thought provoking arguments that I'm considering carefully. I have not written these replies to blindly assert a questionable position: yes, my thoughts were provoked by frustration, but that doesn't mean the resulting argumentation is flawed and I certainly don't believe it is. You've already admitted that you never played this game. You should give it a try, and use the keyboard in the village (it's part of the main quest so you'll have to pass through this). You'll see by yourself that in this case, and despite the fact that its an otherwise perfectly legitimate input system, the keyboard is very difficult to use and is in fact ruining the game experience. [quote name='zyrolasting' timestamp='1310002863'] [quote] Please, tone down. If you don't want to see my point I won't force you to do so, and you have the right to express yourself in other places. You are obviously overreacting to my prose. Are you a Red Projeckt designer? If yes, then you shall explain me why those design choices were made. If not, why so serious? [/quote] I'm not sure what you mean. I'm fine, and am not affiliated with Red Projeckt. I do see your points, but as kseh pointed out, conversation is a feedback system where you can expect to get responses similar to your message in some way, whether they agree with your statements or not. For example, when it comes to being &quot;serious&quot;, I tend to actually become [i]less[/i] serious and tactful when addressing clearly opinionated conclusions that seem more like insults than criticisms. [/quote] Point taken. I used derogatory words induced by frustration. Yet, as I said earlier in the message, I don't understand why one would answer using the same or a similar tone: it's not like I said something that directly or indirectly impacted you yet it appears that I did - in which case it's completely unvoluntary. I was hoping to provoke reaction (I wouldn't have posted anything otherwise) but I was expected either "I agree" or "I disagree", and I certainly didn't want to start some kind of ember war (I cannot decently call this discussion a flame war, yet there is a distinct agrressive tone here and there). [quote name='zyrolasting' timestamp='1310002863'] Believe me, I'm a nice guy if you get to know me, and am almost always willing to have open discussion. I'll try to watch my tact in the future if you really thought it was that bad, but I never intend to attack anyone... Just arguments! [/quote] An I believe you certainly are, otherwise I wouldn't have replied at all [quote name='zyrolasting' timestamp='1310002863'] [quote] Well, you are also representative of another kind of casual gamer. And I do love challenge too. What I don't like is biased difficulty that comes from design errors or usability bugs - the kind of difficulty The Witcher 2 exhibits. [/quote] Again, the tone of your entry drew more focus on your subjective interpretation of an ideal gaming experience instead of actual design flaws. If there were actual mistakes a game exhibits, I won't deny they are there. [/quote] If you're really reacting to the tone of my post, then please, accept my apologies. Otehrwise, I thought I made quite clear that the hand fighting system is flawed when using a keyboard. I'm not stating something else. Of course, as kseh hinted, I could have used another input system (provided that I had a functional one, which is not the case). The assumtpion that I can buy another one is flawed (I believe putting 50€ in a game is largely sufficient; I won't add another 40€ to buy a controller unless I'm sure I'll be able to use it on other games - something which is not yet the case, as many PC games usually don't expect or need them at all; it may change in the future but it's still not the case. Remember I bought the first one no to play with it, but to experience programming with XNA ; at that time, I was single, without child, and with plenty time to do this kind of thing). I could have bought another game - it's a bit too late. As I pointed out, nothing in the official communication says that the game requires a gamepad - or that the game experience is better with a gamepad. Surfing the net to get this kind of information is not something I would do naturally, and prior experience of games that were designed for a gamepad (again, Oblivion) showed me that they were equally usable with a keyboard. It is therefore perfectly normal and not unreasonnable to believe that keyboard+mouse are suitable controllers for W2. I insist on this because it's way to easy to dismiss this claim by saying "you should have done something else". I don't think I did something wrong in this particular case, yet the game punishes me for not using s controller which is definitely not advertised as the prefered method of play. I spent a wooping couple of hours redacting this comment. I hope I made myself clearer, and I hope I was civil enough. Best regards, -E.
  8. It's about frustration...

    [quote name='kseh' timestamp='1309994215'] I do sympathize a little bit in that I use a trackball mouse that only has two buttons. When I come across a game that expects me to have a mouse wheel, I have on occasion been completely unable to play the game as effectively as others with a mouse-wheel. However given that a mouse with a mouse-wheel is more likely to be thought of as standard equipment than my personally favored trackball, I suck it up and either go find a suitable mouse to use, limp through the best I can, or play a different game. [/quote] If a 3 mouse button is part of the official requirement set, you have no choice but using a 3 mouse button. If it's not but not having one make the game difficult, then someone, somewhere, has overlooked the issue. [quote name='kseh' timestamp='1309994215'] [quote] Now, you can say that I might have overreacted in my original post. It's more or less true. There are evidences to supports your claims (if you make such a claim): derogatory words (&quot;stupid&quot; has been coined 11 times, as weasalmongler pointed out). I can counterbalance that with the fact that I present factual arguments, mainly how the village scene in the Witcher 2 is implemented. You might choose to disregard my report, that doesn't change much with respect to its existence. This partitcular part of W2 is filled with stupid design errors. These errors have been pointed out by many respected game designers during the past 20 years, which means that they should not show up in recent, AAA games. If they do, then someone did an obvious mistake. Since the mistake in question has been known for years, it's therefore borderline stupid. [/quote] Your OP took a posture in which you were very assertively challenging the game industry for not sufficiently supporting your preferred input device and not accommodating your expectations regarding difficulty level. [/quote] No. I was asserting that some recent games I played exhibits game design errors that have been specifically labeled as game design errors for the best part of the 20 last years. I did it with some kind of rage and frustration because of the direct experience I had for a game I bought 50 €. [quote name='kseh' timestamp='1309994215'] It should not be surprising that an equally assertive reply was received. [/quote] And yet I am, because it doesn't make sense to blindly support a third party in which you have no interest. Even if you are an aspiring game developer, and I believe that's a good goal to pursue, it doesn't make sense. It's not like I was attacking someone you know, or someone who was not able to answer to my diatribe. I don't understand the subjective reasons (and I don't even speak of objective reasons) that would have moved your inner self enough to make you reply in an equally assertive way. I mean, I was the guy who was frustrated - what about you? I would have understood "an eye for an eye" but in our situation I don't see how this could apply. Again, I'm not trying to provoque you or to diminuish the merit of your answers. It's just that I really don't get this one. [quote name='kseh' timestamp='1309994215'] I haven't played The Witcher 2. [/quote] I'm really trying to not offense anyone - except perhaps the RP developpers, and even that is not true - but you must admit that there is something illogical in saying that my arguments are more or less invalid without having played the game. [quote name='kseh' timestamp='1309994215'] But on the surface, your &quot;factual arguments&quot; seem to me to be more an opinion that is biased by the fact that you choose to play the game using a particular piece of equipment that did not perform up to your expectations. [/quote] Yes, it is an opinion, backed with arguments that are based upon verifiable facts. Play the game, and in that particular zone, try to use the keyboard, and you'll see that it's not adapted to the situation. The fact that the keyboard does not fit the situation may not sound serious, and yet nothing, nowhere told me that I had to use a pad instead of the keyboard to play the game. Sure, with a pad, it would have been easier (I finally decided to give it a second try, and succeeded - but not without much trouble). The optimal configuration says: [quote] Recommended requirements: Processor: Quad Core Intel or AMD RAM: 3 GB Windows XP, 4 GB Windows Vista/7 Graphics: GeForce 260 1 GB or (HD4850 1 GB) HDD Space: 16 GB [/quote] This is directly taken from http://thewitcher.com/support/index.html as my computer refuses to C-c/C-v my game box. Nothing in this description says that a gamepad is even recommended. Nothing in the game tells you that you'd better use a gamepad - no readme, no warning on the interface, and so on. It either means that the keyboard is a perfectly legitimate input controller, in which case the fact that it is not well suited for this particular part of the game is a usability issue (if you don't like the term "bug" ; but you'll have to tell me the difference. To me, a bug is something that either prevent the program to function normally, or that prevent the user to use the program as it was intended. I beleive we're right in this second case). If the keyboard is not suitable for the game then it's a documentation issue (and I remind you that Microsoft consider these as documentation bugs : a failure to properly document a requirement). In either case, there is a problem, and this problem exists because someone overlooked something which is important.
  9. It's about frustration...

    [s]Hopefully, when I'll hit the "Add comment" button, everything should be OK (wrt the layout). Otherwise, I'll edit the message. [/s] [s]Woop. I'm probably missing something obvious. It seems I cannot get the layout rigth... :/ After multiple verification, it seems there is the right number of tags, but if you see a mistake, please drop a word. Thanks in advance, and sorry for the inconvenience. [/s] It seems the message was just too long. I splitted it in 3 posts. Sorry for this inconvenience as well. [quote name='kseh' timestamp='1309994215'] [quote] There are disabilities that prevent playing any video game - blindness is one of them. Being deaf is also a disability, and having games that rely on hearing sounds (that's so good for the atmosphere) is just yet another annoying thing for them. Now, you also have minor disabilities - for example, the difficulty to move some fingers of your right hand after an accident. Don't these people deserve the right to play the game they want? Sure, they will probably be unable to perfectly handle the pad, but that doesn't mean they should not play at all. [/quote] I'd be inclined to agree with you here and support your argument and say that the cause of making games more accessible to players with disabilities is one worth valiantly pursuing. Except that as far as I know you don't have a disability and using a keyboard to play games is a choice of preference not one of physical disability. If I'm wrong about this then I apologize profusely [/quote] You're not wrong, but I believe I was answering something which was only loosely related to the issues I mention. I never mention that I had any kind of disabilities, and my side argument was that if a person like me, with no particular disability, experiences difficult and frustrating moments related to usability, then a person with disability is very likely to experience even more difficulties. [quote name='kseh' timestamp='1309994215'] If I'm right about this then perhaps you could make it clear if you are trying to rally support for cause. But from my current perspective it looks like you're trying to use a worthy cause to excuse poor game performance due to a personal choice. [/quote] I don't have to excuse any poor game's performance. Do I? [quote name='kseh' timestamp='1309994215'] [quote] A game which is needlessly hard because of the way it handles user input exhibits a usability bug. You might disagree with this, that doesn't mean it's not a truism (take care: emphasis is important. [/quote] I disagree both with the statement itself and the opinion the statement is a truism. [/quote] If you disagree with that, it's going to be very difficult to get my point. If a game implements user input handling in a way that makes the game artificially difficult (providing that the whole point of the game is not getting using input right ; it can happen: I've seen game where you goal is to master a recalcitrant mouse) then something went wrong. This is especially true if you have two input systems that supposedly offers you the same experience (more on that later): if one of them is notably more difficult to use than the other, then you have a problem, and the problem lies on your (I mean: the developper, not you ) side, not on the player side. [quote name='kseh' timestamp='1309994215'] Taken to the ridiculous, I could opt to personally generate the digital signal through an input wire instead of allowing a peripheral to perform that action for me. If I do decide to use that input technique, I don't think it's reasonable to expect the game to account for my slower data input or the errors that I will make as I attempt that input. Yes, that example is ridiculous but I'm trying to highlight that a game like any software has optimal specifications. Choosing to ignore those specifications and expecting equal performance is not reasonable. [/quote] That's hardly an argument. Of course there are optimal specifications, as well as minimal one. Minimal specifications are here to tell what configuration is required to play the game. Optimal specification is supposed to offer an optimal experience, not to offer the legitimate, reasonable experience everyone is supposed to have while playing the game. If an input mechanism is required to have a legitimate game experience, it makes no sense to propose another input mechanism. If you offer another input mechanism, you have to make sure this input mechanism is correctly supported. This is programming 101: a software that only barely work is not a functionnal software. Since we are lurking a game development forum, I can assume that you understand this. Regarding optimal specification, do you expect every game marked with the NVIDIA logo to not play on an ATI? I'm pretty sure you don't. What you could expect is a better quality, or a faster rendering, not an inadequate rendering. If you notice any flaw, you'll rightly describe them as rendering bug. [quote name='kseh' timestamp='1309994215'] Also, not to nitpick on choice of words but I also take a bit of an exception to referring to it as a &quot;bug&quot;. &quot;Bug&quot; implies a certain amount of negligence on the part of the programmer. A decision that a game's primary input device will be a controller or a mouse is not a bug. [/quote] But then, how would you call the negligence that lead to badly supported hardware when you claim you support it - even if you say it isn't the prefered hardware? If you make a program, caliming suport for (let's say) IPv6, but chose to not spend too much effort in supporting (say) multicasting, then your IPv6 support is likely to be tagged as "don't work' by your customer, and you (as the software developper) will agree on that. I don't fully agree on your definition of a bug. There are bug situation you can't avoid unless you master your chain tool and your OS, and this is a wet dream scenario. Id doesn't matter if your software crash because of someone else - your software isn't supposed to crash, point. But that's really a side comment that adds nothing to the discussion, so let's forget about it. [quote name='kseh' timestamp='1309994215'] It may certainly cause a &quot;Usability Issue&quot; for those that don't have access to the expected hardware, but it is not a bug. [/quote] No offense intended but I have some difficulties to understand that.
  10. It's about frustration...

    Please, tone down. If you don't want to see my point I won't force you to do so, and you have the right to express yourself in other places. You are obviously overreacting to my prose. Are you a Red Projeckt designer? If yes, then you shall explain me why those design choices were made. If not, why so serious? A few years ago I read a novel where the main protagonist was banned from some kind of heaven because he hit someone in the face. The reason why he did so is that the someone insulted him. That ddidn't minor his crime because: [list] [*] if the insult was valid i.e. if the protagonist really deserves it, then he has no right to hit the second men, who was just stating the truth. [*] in the other case, the insult should not have triggered any reaction since it was obviously wrong. [/list] This parabole is just here to explain you that overraction is not a normal reaction, and it is certainly uncalled for. You can think what you want, but you have to limit your expression to what you can argument. This is how humanity have debated for thousands of years. Now, you can say that I might have overreacted in my original post. It's more or less true. There are evidences to supports your claims (if you make such a claim): derogatory words ("stupid" has been coined 11 times, as weasalmongler pointed out). I can counterbalance that with the fact that I present factual arguments, mainly how the village scene in the Witcher 2 is implemented. You might choose to disregard my report, that doesn't change much with respect to its existence. This partitcular part of W2 is filled with stupid design errors. These errors have been pointed out by many respected game designers during the past 20 years, which means that they should not show up in recent, AAA games. If they do, then someone did an obvious mistake. Since the mistake in question has been known for years, it's therefore borderline stupid. I might be a bit harsh - I cannot deny this. The discourse might not be adapted to the audience (or to you). But still, there is a design error, and this design error produces frustration. [quote]When did we appoint you to represent us? I'm a casual gamer too, and I like a challenge.[/quote] Well, you are also representative of another kind of casual gamer. And I do love challenge too. What I don't like is biased difficulty that comes from design errors or usability bugs - the kind of difficulty The Witcher 2 exhibits. And to answer your question, noone appointed me. It's just that I have a good knowledge of the players demographic and when I say "I [i]believe[/i] I'm [i]kind of[/i] representative" (did you read "I'm sure I'm really and totally representative"? If you did, you missed something, so I added the emphasis) I mean it, given the knowledge I have of this particular point - knowledge I gathered during industry conferences and reading bits here and there. Now, I can be wrong. Maybe I'm just the sole guy in the world who have this kind of issue. I'm not sure it makes my words less important (just like repeating aloud what millions thinks doesn't make words more importants). [quote]I'd love to see a blind man with Parkinson's play Waka-Laka on DDR, but I'd love to see the look on shareholders' faces even more. But seriously, how do you think things would play out if the disabled were allowed to interact with systems that can hurt them?[/quote] Last time I checked, games were a medium that would allow someone to experience danger without putting himself in a dangerous situation. It's quite rare to see a video game hurting the player. There are disabilities that prevent playing any video game - blindness is one of them. Being deaf is also a disability, and having games that rely on hearing sounds (that's so good for the atmosphere) is just yet anotehr annoying thing for them. Now, you also have minor disabilities - for example, the difficulty to move some fingers of your right hand after an accident. Don't these people deserve the right to play the game they want? Sure, they will probably be unable to perfectly handle the pad, but that doesn't mean they should not play at all. If you allow me to give you free tips, I would warn you to avoid logical falacies when you argument online. That doesn't work well. Going to the extreme and showing they can't match does not provide a good base for an logical argument. [quote]You were talking about not liking games being hard, not bugs.[/quote] A game which is [i]needlessly[/i] hard [i]because of the way it handles user input[/i] exhibits a usability bug. You might disagree with this, that doesn't mean it's not a truism (take care: emphasis is important. You shown an habit in misreading what I wrote, so take the time to really get this sentence right before you answer (if you answer)). Best regards anyway
  11. It's about frustration...

    [quote]If you have so little time to play, you are bound to get frustrated all the time with any kind of game, I think. To me it seems like you are forcing yourself to play, for an unknown reason, and that kind of defeats the purpose of play. [/quote] Be assured that I don't force myself to play I enjoy these moments - as I said, I like the CRPG narrative and story. My time being limited doesn't mean I should stop playing because of the frustration. I'm an old guy (35 years) with a good gaming story. I'm this kind of guy that makes the backbone of the digital generation. I was lucky enough to grow up with computers (I started programming at 8 ; how could you be more lucky? ) and I've been playing video games for more than 25 years. From a usability point of view, I believe they evolve in the right direction - although from time to time a particular game got this wrong. Most of the time, this is a game deign error that could have been avoided (you cannot ask a keyboard player to be as efficient with keypress as a pad player ; so don't ask him to do the same thing). [quote]I can relate to calling a game unfair if gameplay is nearly impossible and offering criticism where it is due, but why is it the developer's problem that you aren't good at gaming and have a tight schedule?[/quote] Given my age and my background, I believe I'm kind of representative of an important part of the gamer's demographics. I guess many gamers of my age either turned hardcore (and have no life ; ok, that's a bit stretchy ) or turned casual as I did. Casual gamers (for the lack of a better word; here, I mean "gamers that really enjoy games but don't have the possibility to play as much as they want") tend to have a tight schedule (by definition) and since they don't play often, lack some gamers skills. Now, if the developper wants to sell their game, we also tend to have a high purchasing power. Equation is quite easy to get right [quote]I know you said you lacked experience, and I'm not shaming you for that, but being inexperienced at a game is hardly an excuse to dismiss the game or the people who slaved over it as "silly".[/quote] I bet it is: it's the whole point of the usability studies which are a very hot topic in the game development industry. It's silly (and the developpers are, by extension) for at least two reasons: [list] [*] first, because it puts unecessary restriction on the ability level of your customers. People with disabilities are forbidden to play any AAA game - and that's a shame for the industry. [*] from a business point of view, it makes no sense to make games difficult ; it reduces the game audience which is never a good thing (the core gamer audience is not big enough to make the industry viable by itself ; you have to extend the audience if you want a correct return on investment). The game can be easy to play yet still being challenging. As you said earlier, the developpers expect you to become better as you progress through the game (that's a normal evolution: you know the game patterns, thus you can defeat more challenging opponents). Progressive difficulty is hard to get right, but it's the only solution if you don't want to get your players frustrated. Given the fact that an AAA game's budget is in the 10-30 million euros, you [i]can[/i] spend a fraction of that sum to ensure that the game is playable even by less experienced gamers. Eitehr you do that, or you are bound to make the game industry a niche industry that will be taken by Zynga-like creatures. [/list] Now I admit that I've been a bit harsh in this journal entry I was kind of frustrated. [quote]One last thought: Imagine you designed a game, and you put genuine effort into making it fun and challenging, yet "beatable". Suddenly some guy starts saying you "got stupid" because he had trouble at one part of your game while others did O.K. Why would you think this complaint was important enough to change the way you design games?[/quote] If he is able to support his claim with valid arguments, then I might listen to him. Maybe I did wrong. Just because nearly nobody saw an obvious usability big doesn't mean that the bug does not exist. [quote]The other thing that you're doing that's handicapping yourself is playing games that were designed to be played with a controller on your keyboard. If you were playing a game where you had to pay attention to sound cues, you wouldn't play without speakers. If possible, invest in a controller.[/quote] I have one. It used to be functionnal XB360 game pad (fun to use in a program) - I mean, right before baby put some nasty liquid on it. Do you know that these beasts are nearly impossible to crack open? you cannot clean them easily... But the real point is: what's the point of allowing a sub-optimal input system in a game? If it's designed to be played with a controller, then forbid the use of a keyboard. Tell me that and it will save me a few euros. Please, developpers of the world, be honnest with your customer - you need them to trust you. [quote name='kseh' timestamp='1309891396'] If you're consistently coming across situations that makes it impossible to continue playing games that you buy, consider trying a different approach or even games other than CRPG (especially if your time is limited).[/quote] Problem is that I really dislike many game genres - FPS-ish games tends to frustrate me even more. I play some fancy indy games from time to time (last one was Gish ; very fun and entertaining). I want to add something to supplement my post: CRPGs are supposed to be character-oriented, not game-oriented (that's the purpose of this large list of stats); the gamer is supposed to make choice for the character, but it's the character who fights. What's the point of having stats that defy normality if you are responsible for every move of your character? In The Witcher 2, when fighting these guards, I'm pretty sure the real Geralt de Riv would bow their skulls away with one hand in the pocket. Yet I am forced into a fight I cannot win because I (as a player) don't have the necessary skills. Either you do a CRPG - meaning that you understand what's a CRPG is and why you give the character some stats - or you don't - and in this case, don't call the game a CRPG, so I'm not lured into buying it
  12. It's about frustration...

    Granted, I rarely play games. As a direct consequence to this, there are lots of things I'm not good at when playing: I am slow at typing specific keys, I don't see patterns that have been added to please hardcode gamers (you know, things like "if you find a hidden way to a hidden place, then you'll find good stuff at this place"). And since I'm the proud father of a 15 month baby, I have limited time to play anyway, so there is little chance for me to enhance my playing skills (not to mention that I'm not sure that I really want to enhance them). But mind you, I play. Mostly single-player RPGs or RTS - I tend to prefer the former. I've been long time adept of pen & paper role playing games, and when I believe a CRPG is to be tested, I buy it. Over the time, my collection has become quite interesting : Baldur's gate I & II TES 1: Arena TES 2: Daggerfall TES 3: Morrowind TES 4: Oblivion Neverwinter Nights 1 Return to the Temple of Element Evil Ultima Undeworld I & II Dragon Age: Origins The Witcher 1 & 2 I believe I have some other CRPG lying around - and this is not counting adventure games (Raymon, I still have my copy of Morning Wrath) or hack-n-slash with a RPG twist. I just love them. When I play, I tend to follow a simple pattern: when possible, I set the difficulty to the lowest level (I cannot afford to play the same section of the game again and again), I try to be always higher level than needed (to minimize the risks of restarting the same sequence again and again because I'm too weak to overcome the challenge) and I try to follow the base story as much as I can (in sandbox-like games such as the TES series, I try to avoid side quests unless they offer a very good reward or unless I need to level more in order to fight a big boss). The goal is simple: since they are games whose duration lie between 30 and 150 hours, and since I can play at most 4-6 hours per week, I must make sure that these hours are not lost doing things that are unnecessary. I'm looking for fun, not completeness. Most of the time this simple strategy works fine. In fact, until recently, it worked each time I played - and it was fun. I think what I find of interest in a CRPG is not the challenge. I don't mind challenge - especially when it fits the story - but I prefer the discovery of the story (this is why I'm not going to spend much time in a MMORPG: the story is secondary in these games). What I really dislike is everything that can frustrate me of this pleasure. And this is here I wanted to come. I cannot understand why recent CRPGs are more akin to create moments of frustration than older ones. I remember I spent 30 minutes to one hour to understand how Morrowind's Shrine of Azura worked (my fault ; I don't remember why it took so much time, but I beleive I misread something at some point) - but I can afford to lost 30 minutes here and there. I also remember a few particular frustration moments in this game or that game but I was able to overcome the difficulty (sometimes by changing my way of doing something). After all, I have saves to allow me to start again later if I'm a bit stuck. Take Obivion for instance: the choice made by designers to level the monsters as you level is just plain silly. Let me play as I want to play, damn it! But then, most of the time the difficulty during fights only happen on random encounters, so you just have to reload the latest save and you're done. Then comes DA:O. If you play the whole game in "Easy" difficulty (or whatever it's named), then the whole game will be quite kind with you (you will die a few time - the challenge does not disapear) - that is, until you get to the final part of the game. Then you'll have to start and start again (and again, and again, and again) the same stupid fights because suddenly the game difficulty changed drastically. After 6 hours full of restarting again and again the same fight, I uninstalled the game with the following verdict: "that was a good game, too bad the game designers went kind of stupid at the end". And more rencently, I decided to go for a ride with The Witcher 2. And frankly, this is a good game. Except that I'm stuck in a stupid village, trying to rescue this stupid bard, with this stupid "please, no blood" attitude. Which mean "you have to fight with your bare hands and if you lose, you die" (how stupid: they are allowed to kill me, but I can't?). Dear Red Projeckt game designer, if you ever read this: this is just plain silly. I set the difficulty level to the lowest possible value because I'm not good at gaming. I only have my keyboard. And you ask me to punch a guy in the face with the following conditions: if he touches me 3 to 4 times, I'm dead I need to punch them 6 to 8 times to k.o. one guy there are two of them (or more, depending on the dialog) in a row I cannot save between the fights (meaning that if I die before I k.o. the last one, I must redo everythign, including the lengthy dialog at the beginning) Not only the conditions are unfair but they are also directly responsible for the frustration moment. That and the (damn "I don't play on a console, you freak" stupid) fight system wait for one to two second. The tempo is just here so that you cannot rely on the system to know when you're going to be active. In other words, it's here to artificially increase the difficulty. press the key (one of QSDZ) that appear on the screen. you have less than (I'd say) 300ms to do that, and you must press the key only once (which means: go away, you little guy with disabilities, we don't want you to play) . At this point, if you fail, you might take a severe hit and loose 1/3 of your life. If you success then... one time out of three? (random: it can be 3 times in a row) you have to press another key in - guestimate - (300 - the time you used to press the first key) millisecond. If you fail, you might take a severe hit again. Remeber that you have to press the first key once or you second keypress will directly be interpreted as a wrong key - and you'll take a hit. If you succeed, then once in a while you will punch the stupid guy in front of you. A bit. Enough for him to scream "my nails!" or something like that. Having two fights in a row using this system is just plain impossible for many people, including me. Now, if I manage to do a perfect on the first fight (I did this one - out of 20 tries), you still have to defeat the second guy. If you fail, you start over - and over - and over - and over... Repeat ad nauseam. So here is my verdict, after 3 hours of play: "it's a good game, too bad it's not meant to be played". Uninstall (bonus: frees a few GB on the drive), sell DVD, and insult designers (during the frustration rampage). The frustration is doubled, because it hurts to buy a 50EUR game just to see that a stupid game design decision prevent you to have any kind of pleasure once you hit that stupid village. That's 2 or 3 hours of game if you decided to let the cinematic play as I did. Red Projekt guys, this is a failure - and an upseting one. -- Bonus: count the number of time I wrote the word "stupid" and win a bonus cookie!
  13. Clean Design vs Efficiency

    [quote name='mhagain' timestamp='1295121425' post='4759393'] [quote name='scwizzo' timestamp='1294941993' post='4758383']I get a feeling that the people who voted for "efficiency" have not worked in a corporate setting for long, or at all. If a design is clean, as it's been said, it will be easy to change large scale factors that would make it efficient later. Developing poor code adds a lot of time when something large scale wants to get changed, and in the end may doom a project. Develop a clean design and you will have, by nature, developed an efficient one as well.[/quote] You can't really apply principles suitable for a corporate setting to games (which is what the OP asked about); it's comparing apples to oranges. Well, you can, but you should be aware of what you're doing and why you're doing it, and reasonably certain that you're going to get definite ROI from it. [/quote] This is kind of weird to me. Corporate settings are defined to 1/ make sure ROI is here 2/ ensure software quality Which are desirable properties, even in the game development world. I agree that in many situations, large corporations tends to implement policies that go too far beyond these goals, mostly because they have to deal with existing softwares or software with a very long life cycle (defense contract in France requires companies to provision development time for 10 to 30 years), because in some situations development teams can be quite large (how many people are working on the next iteration of Windows? Think to a digit in the 2-5 range, multiply by 1000, and you'll get a number which is not very far from the reality) and because (sorry for non game development companies(*)) they also have to deal with a non-null pool of inneficient developers. This is a Bad Thing, true. But then: 1/ game code base tend to have a life cycle which is longer and longer (see third party and in-house middlewares) 2/ teams are increasingly large (see the credits for TES:Arena, then TES:Daggerfall, then TES:Morrowind, then TES:Oblivion) 3/ in these teams, it is inevitable that the developers efficiency level are disparate. The game industry is facing the same evolution than the classical software industry, and one of its challenge is to handle this evolution cleanly. More and more software engineers are recruited (10 years back, providing a convincing demo of your skills was enough to get a job in the GI), and game development companies now implement helpers that have been common in the software industry for the past 5 to 10 years (continuous integration, source version tracking, bug tracking, but also architecture documents, multi-team setup and so on). So in essence, comparing the classical software industry and the game industry is not the same as comparing apples to oranges : it's comparing an old, solid, calm apple tree to a young, shiny and vigorous apple tree. The young tree learnt from the experience of the old tree and try to not reproduce the same errors, with various results (read the various post mortem in GDmag, and see how many of them cite development problems due to a code base that grew out of control). [quote name='mhagain' timestamp='1295121425' post='4759393'] Having said that, clean design wins every time. Unless you seriously overengineer the thing, with multiple layers of abstraction, the performance trade-off (assuming that there even is one) should be minimal. Then profile, identify your bottlenecks, and tackle them explicitly. [/quote] That + code for your platform, know your build settings (including your compiler) and so on. All the things an architect should master before he can call himself a software architect. Vitruvius already saw this point 2000 years ago: you cannot be an architect if you don't know at least a large part of everything which is important in your industry. You have to have a clear understanding of both the theory (architecture principles ...), the history of your engineering field and the practice (implementation). Missing one of these will either lead you to inneficient architecture, reproduction of common errors, unscalable conception, and so on. [size="1"](*) disclaimer: I do not work in the game industry (I work in the telecom industry ; I spent most of my work life on embedded, critical systems). I [i]worked[/i] in the game industry, and I have continuously studied it for the past 15 years. [/size]
  14. [quote name='littlekid' timestamp='1295542698' post='4761916'] Thanks for the replies. To Emmanuel: [quote name = 'Emmanuel'] [color="#1C2837"][size="2"]I tipically avoid that situation. When I want to export ....... C wrapper is quite limited (we speak of 1, maybe 2 hours) and I avoid any kinf od issue (I haven't met the case where this solution is limited)..[/size][/color] [color="#1C2837"][size="2"][/quote][/size][/color] [size="2"][color="#1C2837"] [/color][/size][color="#1C2837"][size="2"]I don't really understand what you mean by that? Is it possible to show a small quick code snippet of what you are referring?[/size][/color] [/quote] In the DLL, in pseudo code [code] extern "C" { // PRIVATE TYPE. It shall be a POD type typedef struct { object* o; } object_handle; typedef void* handle_type; EXPORT object_type create_object() { object* o = new object(); object_handle* h = new object_handle(); h->o = o; return reinterpret_cast<object_type>(h); } EXPORT delete_object(object_type p) { handle* h = reinterpret_cast<object_handle*>(p); delete h->o; delete h; } } [/code] I use an encapsulation for the object before if class object uses multiple inheritance, I will loose quite a lot of information if I cast the object pointer to a void*. Using a simple, POD structure is the legal way to transfer an object pointer to C code. The client code looks like this: [code] #include "module_loader.h" class client_object { typedef void* object_type; typedef object_type (*constructor)(); typedef void (*destructor)(object_type); constructor m_pfn_constructor; destructor m_pfn_destructor; object_type m_o; public: client_object(const module_loader& ml) { m_pfn_constructor = ml.loadsym<constructor>("create_object"); m_pfn_destructor = ml.loadsym<destructor>("delete_object"); m_o = m_pfn_constructor(); } ~client_object() { m_pfn_destructor(m_o); } }; [/code] I now have my object on the client side (writing such a class takes about 10 minutes) and a C interface on the DLL side (which took me a handfull of minutes to write as well), but no C++ thingy is lost during the C++ to C to C++ transition (mostly thanks to the handle struct, which is a POD structure (and therefore a pointer to this structure is convertible to void* and back from void*).