Loved the run. I was particularly surprised by the use of the grapple beam to damage boost out of the super missile room in the ghost ship. Being surprised is what makes TASes great!
I can't vote, but would give this a hearty yes.
There's at least one in White Plains (between NYC and Yorktown). Malls take up a lot of space, and space costs a lot in Manhattan, so you typically don't see them there. This is the exception rather than the rule, as all other US cities I can think of have large malls.
I'm still laughing about this from the last page! I've lived in New York, California, Texas, Georgia, Michigan, and visited most of the other states. New Yorkers are easily the meanest people in the country.
That's not the right attitude. Just have as much fun as you can in whatever way you enjoy most.
Some things I liked in NY:
- Museum of Modern Art (MoMA) is great
- China town
- Yankees game
- Play chess at Washington Square Park
- Wander the galleries in soho
- Get some New York style pizza
- Sit in a cafe all day near NYU and people watch/read a book
- Visit Strand book store (828 broadway)
- Check out a concert; lots of good underground and mainstream music venues there. Even if you've never heard of the band, just finding a random cheap show can be fun.
- Brooklyn Zoo
- Museum of Natural History
A Metroid-style game is a better example. Let's say you have 100 rooms in the game, each room takes ~4 seconds to get through, and the optimal path must go through 200 rooms. You might brute force each room individually using a smart branch-and-bound algorithm (i.e., using alpha-beta pruning, memoization, etc.) testing roughly 100 rooms * (2^8 inputs) ^ (4 s * 60 fps / 16 smartness-factor) = 1.33e38 possibilities. Then the collection of optimal rooms can be combined to find the optimal 200 room path through the game using a shortest path graph algorithm (e.g., floyd-warshall).
Compare to a brute forcing of the entire game: (2^8 inputs)^(4 s * 60 fps * 200 rooms) = 256^384000 possibilities.
Now clearly the dynamic programming approach is still not close to feasible, however, if we start making other assumptions, such as the optimal 4s second path through a room is composed of optimal 1 second paths, and ignore input combinations with start and select, we can reduce that to 100 rooms * 4 segments/room * (2^6 inputs) ^ (1s * 60fps / 16) = 1.4e15. If testing each of those combinations took 1 million cycles, then a quad-core 2 GHz chip would be done in ~3 days.
The assumption we've made here is that an optimal run of the whole game will consist of optimal runs of subsections of the game. The tradeoff is that the subsections have to be chosen small to prevent exponential explosion, but large enough to allow for local minima to be overcome. Techniques like this would never work for an entire RPGs, where local minima take forever to be overcome (e.g., I have to buy a potion 18 minutes before I need it (unless you explicitly define buying a potion as one of the primary goals of the path before it's needed)), but would work great for certain platformers (e.g., contra).
Right, which is exactly why you should use dynamic programming. If the optimal 10 second version always contains the optimal 5 seconds, then a simple greedy algorithm will work. If it may contain the optimal 5 seconds, then you use dynamic programming.
The whole idea with dynamic programming is that you break the overall problem into subproblems, which are easily solved optimally, and then combine the subproblems (which may be locally suboptimal) into a globally optimal solution.
Aside from moozoh's great point about the length of the sequence, and the number of useful inputs being far less than you assumed, most video games exhibit optimal substructure over any significant period of time (i.e., an optimal 10 second sequence will also be optimal in the first 5 seconds).
Optimal substructure can be leveraged by using dynamic programming to make the problem polynomial over the length of the input sequence, instead of exponential, as you assumed. If I were to hazard a guess, I think brute forcing a game with dynamic programming is probably close to feasible on current machines.
Not quite. All finite length binary representations overflow (floating point, fixed point, etc.). The intuition is that if you have N bits to represent a number, there are only 2^N different numbers you can represent, and there is always some number bigger than all 2^N possibilities. That's overflow.
What actually happens when the number overflows in a game is subject to hardware and software implementation.
Yrr, that armor fight is sweet... One minor suggestion for the WIP: it looks as though you are turbo-ing through the dialog, dropping frames occasionally. Very entertaining, regardless!