When designing a game [I didn't build], I realized one of the most important ways of making the game indefinitely interestingly was to make it really hard to solve. This meant making it NP-hard on purpose.
This is helpful, but not sufficient. At the same time it has to be engaging and still look solvable i.e. the player must always have the feeling that "next time I'll do it!" or he will just stop playing.
One of the last bosses in Zelda is an interesting example. It starts as a dragon with three heads. One which is only killable by fire, the other by ice, the last one is invincible but tries to bite you. When the outer heads are dead the third head transforms to a fast moving snake which you have to hit at a specific point to damage. Each time you hit it it gets faster. Now, if you die something interesting happens: The next snake will start slower i.e. easier, so players should be able to kill more parts of it. This repeats itself every time you die. I noticed this when my mother (who loves Nintendo games, but isn't a really good player) died 20 times or so at the snake. Every time it was a bit slower and every time she was like "Well I did manage to kill one more part. THIS time I kill it!" and ran in again. In the end she killed the boss and was happy.
That's manipulative :-(
Making these easier by option, or by offering a "skip" or an "assist" to gwt past an obstacle, is one thing, but secretly nerfng is an abomination.
That just teaches people have an over inflated opinion of themselves and to think that bullheaded religion is better than strategy or skill practice.
That's manipulative :-( Making these easier by option, or by offering a "skip" or an "assist" to get past an obstacle, is one thing, but secretly nerfng is an abomination. That just teaches people have an over inflated opinion of themselves and to think that bullheaded religion is better than strategy or skill practice.
I have a book called Games, Puzzles, and Computation (Hearn & Demaine). It discusses and proves the hardness of various games and puzzles. Not the scale of AAA titles, though.
It's an interesting read. Not too mathy. They make clause gadgets in the same way as the example here for Super Mario Brothers and use that to prove things.
Edit: Realized the author of this book is actually one of the authors of this paper. So, yeah, if you found this article/paper interesting be sure to pick up the book.
The game's components (underlying rules) can be used to build NP-hard problems. The published games (specific world setups (are not NP-hard, even with generalizations to make them non-constant sized.
This paper is fun and interesting, and it shows how a common abstract language underlies many diverse concrete games. However, one should not make bold statements about sophisticated challenges that 10-year-olds are solving. wert
This is ridiculous. The real maps in these games didn't include even a hint of this kind of branching nonsense, so this kind of result says nothing about the actual difficulty of these games. And yet I sadly suspect "Zelda is NPC" is now going to become Internet folk wisdom. Groan. This paper is actively harmful if you ask me.
NP-completeness doesn't say anything about the difficulty of a specific instance of a given problem. It's trivial to construct CNF formulas that are solvable in polynomial time, for example.
An algorithm that is able to determine for every Zelda level, in polynomial time, whether or not the exit can be reached from the start is something quite different. As shown in this paper, this would imply that the same algorithm can solve every instance of every problem in NP efficiently, a.k.a. answer the million dollar question.
A cleaner way of stating the results of the paper would be: "The puzzle mechanics of Zelda are NPC". This statement is harder to misread, though I wouldn't hold my breath given the extreme illiteracy concerning theoretical computer science prevalent even among programmers with a degree, never mind the internet.
Zelda is not simply a single instance of a static puzzle with a well-defined solution, it has code creating things dynamically. The title implies that the NP-complete problems are part of the actual gameplay. If you're only looking at mechanics you can pick nearly any game with movement and pull out traveling salesman.
I had this argument with my brother too, who is a mathematician. He was able to enjoy it on its own terms, I wasn't.
As he concluded, "they couldn't solve an interesting problem, so they solved an uninteresting one instead."
And from a certain stance, these fabricated problems do hold a bit of interest, especially when you consider how many mathematicians go out of their way to be impractical. Referencing the games confuses their work more than anything else, though.
A straight up implementation of TSP (I assume you mean the decision variant) needs some kind of door that shuts with a timer.
How do you plan to encode arbitrary graphs? This poses a challenge for 2d platformers. In case of any 2d game, how do you encode non-planar graphs? You would need some kind of teleportation device.
A graph with few edges and large edge values will also be problematic if you plan on keeping your input size polynomial (in |V| and |E|), as you'd need a widget capable of encoding an arbitrarily long edge in constant map space.
Once you have solved all the above problems, feel free to write a paper about it ;).
Those features are nice but unnecessary. Just use planar graphs. Then you don't have to enforce single-visiting either. Limited scrolling will bound the longest edges but you don't need arbitrary edges. Only problems of a limited size will be able to fit in the limited memory of the game but that's still NP-complete over what does fit.
The key word in the original paper (from 2012 (!)) is "Generalized".
IIRC, it's trivial that to "solve" Zelda Polynomial time (with an emulator) -- the entire state space of the console can be represented in constant space, so a trivial algorithm would be to traverse the state space tree with breadth-first search.
Picking a 'constant' of 2^k, with k the entire memory space of the console, is a rather inaccurate representation. It's like arguing that a desktop computer is not turing complete: true in such a narrow sense that using it to win a bar bet is going to lead to someone getting punched in the face.
20 comments
[ 3.6 ms ] story [ 30.3 ms ] threadOne of the last bosses in Zelda is an interesting example. It starts as a dragon with three heads. One which is only killable by fire, the other by ice, the last one is invincible but tries to bite you. When the outer heads are dead the third head transforms to a fast moving snake which you have to hit at a specific point to damage. Each time you hit it it gets faster. Now, if you die something interesting happens: The next snake will start slower i.e. easier, so players should be able to kill more parts of it. This repeats itself every time you die. I noticed this when my mother (who loves Nintendo games, but isn't a really good player) died 20 times or so at the snake. Every time it was a bit slower and every time she was like "Well I did manage to kill one more part. THIS time I kill it!" and ran in again. In the end she killed the boss and was happy.
It's an interesting read. Not too mathy. They make clause gadgets in the same way as the example here for Super Mario Brothers and use that to prove things.
Edit: Realized the author of this book is actually one of the authors of this paper. So, yeah, if you found this article/paper interesting be sure to pick up the book.
This paper is fun and interesting, and it shows how a common abstract language underlies many diverse concrete games. However, one should not make bold statements about sophisticated challenges that 10-year-olds are solving. wert
[1] http://www.cs.cmu.edu/~tom7/sigbovik/mariox.pdf [2] http://www.youtube.com/watch?v=HhGI-GqAK9c
An algorithm that is able to determine for every Zelda level, in polynomial time, whether or not the exit can be reached from the start is something quite different. As shown in this paper, this would imply that the same algorithm can solve every instance of every problem in NP efficiently, a.k.a. answer the million dollar question.
A cleaner way of stating the results of the paper would be: "The puzzle mechanics of Zelda are NPC". This statement is harder to misread, though I wouldn't hold my breath given the extreme illiteracy concerning theoretical computer science prevalent even among programmers with a degree, never mind the internet.
As he concluded, "they couldn't solve an interesting problem, so they solved an uninteresting one instead."
And from a certain stance, these fabricated problems do hold a bit of interest, especially when you consider how many mathematicians go out of their way to be impractical. Referencing the games confuses their work more than anything else, though.
How do you plan to encode arbitrary graphs? This poses a challenge for 2d platformers. In case of any 2d game, how do you encode non-planar graphs? You would need some kind of teleportation device.
A graph with few edges and large edge values will also be problematic if you plan on keeping your input size polynomial (in |V| and |E|), as you'd need a widget capable of encoding an arbitrarily long edge in constant map space.
Once you have solved all the above problems, feel free to write a paper about it ;).
IIRC, it's trivial that to "solve" Zelda Polynomial time (with an emulator) -- the entire state space of the console can be represented in constant space, so a trivial algorithm would be to traverse the state space tree with breadth-first search.