Comments (2)
Hi! and sorry for not finding an explanation for your previous issue (why a js1k entry doesn't work from a bookmarklet)
If size is not a constraint, you should probably try to make a platform game using a real library like Phaser: https://gamedevacademy.org/how-to-make-a-mario-style-platformer-with-phaser-3/?a=13
But if you want to play with my mini Mario entry, I can give you some hints:
-
A constant vertical scroll would require the addition of a scrollY variable here: https://github.com/xem/js1k19/blob/gh-pages/SMB1-1k/index.html#L47, then in the game loop (https://github.com/xem/js1k19/blob/gh-pages/SMB1-1k/index.html#L159) you can update this variable at each frame, for example "scrollY -= .1;" for a slow scroll
-
For double jump, you need to add a doubleJump variable, then in the jump code (https://github.com/xem/js1k19/blob/gh-pages/SMB1-1k/index.html#L209), you can handle the case where UP is pressed -and- mario is not grounded -and- doubleJump is false. In that case, perform a new jump (vy = -.25;), and set doubleJump to true. When Mario lands on a solid tile, reset doubleJump to 0. For wall jump, it's almost the same thing: mario jumps again if he's not grounded -and- hits a wall on the left or on the right
-
Each of your enemies must have its own object representing its X/Y position that is updated when it moves, and a list of projectiles which is updated when it fires. At each frame you'll have to check if each projectile hits mario (in that case, die), or a wal (in that case, it disappears). In the render code, (https://github.com/xem/js1k19/blob/gh-pages/SMB1-1k/index.html#L245) you'll need to draw each enemy and each projectile at their correct X/Y positions
-
There are already 5 types of blocks (https://github.com/xem/js1k19/blob/gh-pages/SMB1-1k/index.html#L27), you can define a 6th one that is a deadly block. Then, in the collision detection (https://github.com/xem/js1k19/blob/gh-pages/SMB1-1k/index.html#L88), make mario die if the touched block is of type 6
-
Create a 7th "coin" block type, and a "coins" variable which get updated every time a coin is collected. You can save the total amount of coins in localStorage. Also create an item inventory (a list) that you may also save in localStorage. Then, when you're on the shop screen (for example, after the level end flag), draw your items, give a price to each one, and when one is clicked and if it doesn't cost more than the money you already have, add it in the inventory.
from ama.
First thing that I tried was the double jumping, so I added a variable named doubleJump, set it to false, and changed the jump code from
if(u && !grounded){ vy = -.25; }
to:
if(u && !grounded){ vy = -.25; } if(u && !grounded && doubleJump === false){ var doubleJump = true; vy = -.25; }
but it didn't work. What is my mistake?
from ama.
I can't seem to get the double jump to work, I have been fiddling around but it still doesn't work
from ama.
I made a beginning of double jump (see link below)
the idea is to enable the possibility of double jump a few frames (here, 30) after the start of the first jump, otherwise it happens instantly as soon as mario starts jumping.
So I introduced a jump frame counter and made the double jump work if up is pressed and mario in the air and doublejump is not made yet and jump frame counter > 30.
All the features you want are doable pretty easily by adding more variables and using logic, please try by yourself for the next ones.
But if it's too hard for you, I strongly advise using a real 2D game engine like phaser. there are tons of docs to learn
https://xem.github.io/webgl-guide/visualizer/#PGNhbnZhcyBpZD1hPgo8c2NyaXB0PgpjID0gYS5nZXRDb250ZXh0KGAyZGApOwp0b3AucmVsb2FkID0gKCkgPT4gewogIC8vbG9jYXRpb24gPSBsb2NhdGlvbjsKfQphLndpZHRoID0gMTUgKiA5OwphLmhlaWdodCA9IDEzICogOTsKLy8gU01CIDEtMWsKLy8gPT09PT09PT0KLy8gSW50cm9kdWN0aW9uCi8vIC0tLS0tLS0tLS0tLQovLyBUaGlzIGRlbW8gaXMgYSAxa2IgZGVtYWtlIG9mIHRoZSBmaXJzdCBzdGFnZSBvZiBTdXBlciBNYXJpbyBCcm9zIG9uIE5FUy4KLy8gVG8gZml0IGluIHRoZSBidWRnZXQsIHRoZXJlJ3Mgbm8gZGVjb3JhdGlvbiAobW91bnRhaW5zLCBjbG91ZHMsIGJ1c2hlcywgY2FzdGxlLCBodWIpLCBubyBzdWItYXJlYXMgYW5kIG5vIHBvd2VyLXVwcy4KLy8gVGhlcmUncyBqdXN0IG9uZSBlbmVteSwgYW5kIG5vIG11c2ljIChpdCBzaG91bGQgYmUgcGxheWluZyBpbiB5b3VyIGhlYWQgYW55d2F5KS4KLy8gQmVzaWRlcyB0aGF0LCB0aGUgbWFwIGFuZCBnYW1lcGxheSBhcmUgYXMgYWNjdXJhdGUgYXMgcG9zc2libGUuCi8vIEkgdXNlZCB0aGlzIG1hcC9ncmlkIGZvciByZWZlcmVuY2U6IGh0dHBzOi8vZ29vLmdsL25qdTZEUgovLyBUaGUgaWRlYSAvIGNoYWxsZW5nZSBjYW1lIGZyb20gdGhpcyB0d2VldDogaHR0cHM6Ly90d2l0dGVyLmNvbS9tYWRfbWF3L3N0YXR1cy8xMDYwNzc1OTYyMTg1MzkyMTI4Ci8vIEEgMTI2MCBieXRlcyB3aXAgdmVyc2lvbiB3aXRoIG1vcmUgZGV0YWlsZWQgZ3JhcGhpY3MgaXMgdmlzaWJsZSBoZXJlOiBodHRwczovL3R3aXR0ZXIuY29tL01heGltZUV1emllcmUvc3RhdHVzLzEwNjM3NjM5MTg3NTYxNjM1ODUKLy8gRXZlcnkgc3ByaXRlIG9mIHRoZSBnYW1lIGlzIHJlZHVjZWQgdG8gYSBjb2xvcmVkIHBpeGVsLgovLyBUaGUgZ2FtZSBmZWF0dXJlcyBhIDIxMSoxNXB4IG1hcCwgYW5kIHNob3duIG9uIGEgMTUqMTNweCB2aWV3cG9ydCwgYnV0IGl0IGlzIHNjYWxlZCB1cCA5IHRpbWVzIHRvIGJlIGVhc2llciB0byB3YXRjaC4KLy8gQWxsIHRoZSBtYXAncyBwaXhlbHMgYXJlIHJlcHJlc2VudGVkIHdpdGggZGlmZmVyZW50IG51bWJlcnMsIG9yICJpZCIncywgYW5kIGRyYXduIHdpdGggZGlmZmVyZW50IGNvbG9yczoKLy8gLSAwOiBza3kKLy8gLSAxOiBncm91bmQgYmxvY2sgLyBzdGFpcnMgLyBmbGFnIGJhc2lzCi8vIC0gMjogZGlzYWJsZWQgcXVlc3Rpb24gYmxvY2sKLy8gLSAzOiBxdWVzdGlvbiBibG9jawovLyAtIDQ6IHBpcGUKLy8gSXQgd2FzIG1pbmlmaWVkIHdpdGggVGVyc2VyLW9ubGluZTogaHR0cHM6Ly94ZW0uZ2l0aHViLmlvL3RlcnNlci1vbmxpbmUvCi8vIGFuZCBwYWNrZWQgd2l0aCBSZWdQYWNrOiBodHRwczovL3Npb3JraS5naXRodWIuaW8vcmVnUGFjay5odG1sCi8vIEdsb2JhbCB2YXJzCi8vIC0tLS0tLS0tLS0tCi8vIFRoZSBnbG9iYWwgdmFycyBgbGAsIGB1YCBhbmQgYHJgIGluZGljYXRlIGlmIHRoZSBsZWZ0LCB1cCBhbmQgcmlnaHQgYXJyb3cga2V5cyBhcmUgcHJlc3NlZCBvciByZWxlYXNlZC4KLy8gVGhleSdyZSBkZWNsYXJlZCB3aXRob3V0ICJ2YXIiIHRvIHByZXZlbnQgdGhlIG1pbmlmaWVyIGZyb20gcmVuYW1pbmcgdGhlbS4KbCA9IHUgPSByID0gMDsKLy8gVGhlIGZvbGxvd2luZyB2YXJzIGFyZSBhbGxvd2VkIHRvIGJlIHJlbmFtZWQgYnkgdGhlIG1pbmlmaWVyIHRvIHNhdmUgYnl0ZXMuCnZhcgptYXAgPSBbXSwgICAgICAvLyBNYXAKc2Nyb2xsID0gMCwgICAgLy8gSG9yaXpvbnRhbCBtYXAgc2Nyb2xsCnZ5ID0gMCwgICAgICAgIC8vIE1hcmlvJ3MgdmVydGljYWwgc3BlZWQKZW5kID0gMCwgICAgICAgLy8gR2FtZSBvdmVyCm4gPSA5LCAgICAgICAgIC8vIFBpeGVscyB6b29tCnggPSAyLCAgICAgICAgIC8vIE1hcmlvJ3MgWCBwb3NpdGlvbgp5ID0gMiwgICAgICAgICAvLyBNYXJpbydzIFkgcG9zaXRpb24KaW50cm8gPSAyNCwgICAgLy8gRnJhbWVzIG9mIGludHJvZHVjdGlvbiAoYmxhY2sgc2NyZWVuKQplbmVteSA9IDI0LCAgICAvLyBUaGUgZmlyc3QgZW5lbXkncyBYIHBvc2l0aW9uIChZIGlzIGNvbnN0YW50OiAxMCkKZGogPSAwLCAvLyBkb3VibGUganVtcApqZiA9IDAsIC8vIGp1bXAgZnJhbWUKICAgIAovL2dyb3VuZGVkID0gMCAvLyBJcyBNYXJpbyB0b3VjaGluZyB0aGUgZ3JvdW5kPyAoZG9lc24ndCBuZWVkIHRvIGJlIGluaXRpYWxpemVkKQovLyBIZWxwZXJzCi8vIC0tLS0tLS0KLy8gVGhpcyBmdW5jdGlvbiBhZGRzIGEgcGlwZSAoaWQgPSA0KSBvbiB0aGUgbWFwIGF0IGEgZ2l2ZW4gdG9wLWxlZnQgcG9zaXRpb24uCi8vIFRoZSBwaXBlIHdpbGwgYmUgMnB4IHdpZGUgYW5kIGFzIGhpZ2ggYXMgbmVlZGVkIHRvIHRvdWNoIHRoZSBncm91bmQgYXQgeSA9IDExLgpwaXBlID0gKHkseCkgPT4gewogIGZvcihZID0gMTE7IFktLSA+IHk7KXsKICAgIG1hcFtZXVt4XSA9IG1hcFtZXVt4KzFdID0gNDsKICB9Cn0sCi8vIFRoaXMgZnVuY3Rpb24gYWRkcyBhICJzdGFpciIgb2YgZ3JvdW5kIHBpeGVscyAoaWQgPSAxKSBhdCBhIGdpdmVuIHBvc2l0aW9uLgovLyBJZiB0aGUgYHJpZ2h0YCBwYXJhbWV0ZXIgaXMgc2V0LCB0aGUgc3RhaXIgd2lsbCBmYWNlIHJpZ2h0ICgpLCBvdGhlcndpc2UgaXQgd2lsbCBmYWNlIGxlZnQgKCkuCi8vIEFsc28sIHNldCB0aGUgZmxhZyBiYXNpcyAoeCA9IDE5OCwgeSA9IDEwKS4Kc3RhaXIgPSAoeSwgeCwgcmlnaHQpID0+IHsKICBmb3IoWSA9IDExOyBZLS0gPiB5Oyl7CiAgICBpZihyaWdodCl7CiAgICAgIGZvcihYID0geDsgWCA8IHggKyBZIC0geTsgWCsrKXsKICAgICAgICBtYXBbWV1bWF0gPSBtYXBbMTBdWzE5OF0gPSAxOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgZm9yKFggPSB4OyBYLS0gPiB4IC0gWSArIHk7KXsKICAgICAgICBtYXBbWV1bWF0gPSBtYXBbMTBdWzE5OF0gPSAxOwogICAgICB9CiAgICB9CiAgfQp9LAovLyBUaGlzIGZ1bmN0aW9uIGRldGVjdHMgYW5kIHJlc3BvbmRzIHRvIGNvbGxpc2lvbnMgYmV0d2VlbiBhIGNvcm5lciBvZiBNYXJpbydzIHBpeGVsIGFuZCBvdGhlciBibG9ja3Mgb2YgdGhlIG1hcC4KLy8gVGhlIGB1cGAgcGFyYW1ldGVyIGlzIHNldCBpZiBNYXJpbyBpcyBqdW1waW5nLCBhbmQgbWVhbnMgdGhhdCB0aGUgY29sbGlzaW9uIHRoYXQgaXMgYmVpbmcgY2hlY2tlZCBpcyBiZXR3ZWVuIE1hcmlvJ3MgInRvcCIgYW5kIGEgYmxvY2sgYWJvdmUgaGltLgpjb2xsaXNpb24gPSAoeCwgeSwgdXApID0+IHsKICAvLyBJZiB0aGUgbWFwIGFjdHVhbGx5IGhhcyBhIGxpbmUgYXQgdGhlIGdpdmVuIFkgY29vcmRpbmF0ZS4KICAvLyBUaGlzIG11c3QgYmUgY2hlY2tlZCBiZWNhdXNlIE1hcmlvIGNhbiBqdW1wIGFib3ZlIGFuZCBmYWxsIGJlbG93IHRoZSBtYXAuCiAgaWYobWFwW35+eV0pewogICAgLy8gVGVzdCBpZjoKICAgIC8vIC0gTWFyaW8gaXMganVtcGluZy4KICAgIC8vIC0gYW5kIHRoZSBtYXAgY29udGFpbnMgYSBzb2xpZCBibG9jayBhdCB0aGVzZSBjb29yZGluYXRlcy4KICAgIC8vIC0gYW5kIHRoaXMgYmxvY2sgaXMgbm90IGFscmVhZHkgYSBkaXNhYmxlZCBxdWVzdGlvbiBibG9jayAoaWQgPSAyKS4KICAgIC8vIEluIHRoYXQgY2FzZSwgY2FuY2VsIE1hcmlvJ3MgdmVydGljYWwgc3BlZWQgYW5kIGRlY3JlYXNlIHRoZSB2YWx1ZSBvZiB0aGF0IGJsb2NrOgogICAgLy8gLSBBIHF1ZXN0aW9uIGJsb2NrIChpZCA9IDMpIHdpbGwgYmVjb21lIGEgZGlzYWJsZWQgcXVlc3Rpb24gYmxvY2sgKGlkID0gMikuCiAgICAvLyAtIEEgYnJpY2sgYmxvY2sgKGlkID0gMSkgd2lsbCBiZWNvbWUgc2t5IChpZCA9IDApLgogICAgLy8gLSBTa3kgKDApLCBncm91bmQgKDEpIGFuZCBwaXBlcyAoNCkgY2FuJ3QgYmUgaGl0IGZyb20gYmVsb3csIHNvIHRoZXkncmUgbm90IGNvbmNlcm5lZCBoZXJlLgogICAgaWYodXAgJiYgbWFwW35+eV1bfn54XSAmJiBtYXBbfn55XVt+fnhdICE9IDIpIG1hcFt+fnldW35+eF0tLSwgdnkgPSAwOwogICAgLy8gVGhlbiwgcmV0dXJuIHRoZSBpZCBvZiB0aGUgYmxvY2sgYXQgdGhlc2UgY29vcmRpbmF0ZXMuCiAgICByZXR1cm4gbWFwW35+eV1bfn54XTsKICB9Cn07Ci8vIE1BUAovLyAtLS0KLy8gRGVmaW5lIGEgMjExICogMTUgZ3JpZCB3aXRoIDEwIGxpbmVzIG9mIHNreSAoaWQgPSAwKSwgYW5kIDUgbGluZXMgb2YgZ3JvdW5kIChpZCA9IDEpLgovLyBUaGUgZ3JvdW5kIGhhcyAzIGhvbGVzIChpZCA9IDApIGF0IGNvb3JkaW5hdGVzIHggPSA2OSAmIDcwLCB4ID0gODYgJiA4NyAmIDg4LCBhbmQgeCA9IDE1MyAmIDE1NC4KLy8gMjExIGlzIHJlcGxhY2VkIGJ5IDk5OSB0byBzYXZlIGJ5dGVzCmZvcihpID0gMTU7IGktLTspewogIG1hcFtpXSA9IFtdOwogIGZvcihqID0gOTk5OyBqLS07KXsKICAgIG1hcFtpXVtqXSA9IChpID4gMTAgJiYgIVs2OSwgNzAsIDg2LCA4NywgODgsIDE1MywgMTU0XS5pbmNsdWRlcyhqKSk7CiAgfQp9Ci8vIFNldCBhbGwgdGhlIHF1ZXN0aW9uIGJsb2NrcyAoaWQgPSAzKSBhbmQgYnJpY2sgYmxvY2tzIChpZCA9IDEpIG9uIHRoZSA0dGggYW5kIDh0aCBsaW5lcy4KZm9yKGkgb2ZbMjIsOTQsMTA5LDEyOSwxMzBdKSBtYXBbM11baV0gPSAzOwpmb3IoaSBvZls4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw5MSw5Miw5MywxMjEsMTIyLDEyMywxMjgsMTMxXSkgbWFwWzNdW2ldID0gMTsKZm9yKGkgb2ZbOCwyMSwyMyw3OCwxMDYsMTA5LDExMiwxNzBdKSBtYXBbN11baV0gPSAzOwpmb3IoaSBvZlsyMCwyMiwyNCw3Nyw3OSw5NCwxMDAsMTE4LDEyOSwxMzAsODgsODksMTcxXSkgbWFwWzddW2ldID0gbWFwWzEwXVsxOThdID0gMTsKLy8gU2V0IGFsbCB0aGUgcGlwZXMuCnBpcGUoOSwgMjgpOwpwaXBlKDgsIDM4KTsKcGlwZSg3LCA0Nik7CnBpcGUoNywgNTcpOwpwaXBlKDksIDgzKTsKcGlwZSg5LCAxNzkpOwovLyBTZXQgYWxsIHRoZSBzdGFpcnMKLy8gQWZ0ZXIgdGhlIGZpcnN0IHN0YWlyLCB0d28gcGFpciBvZiBzdGFpcnMgaGF2ZSBhIDFweCBkaWZmZXJlbmNlICh4ID0gMTUyICYgMTUzLCB4ID0gMTkwICYgMTkxKS4KLy8gVGhpcyBpcyBiZWNhdXNlIHRob3NlIHRob3NlIHN0YWlycyBoYXZlIGEgMnB4LXdpZGUgcGxhdGZvcm0gb24gdG9wLgovLyBJdCB3YXMgc2ltcGxlciB0byBvdmVybGFwIHR3byBzdGFpcnMgdGhhbiBhZGRpbmcgYSBjb2x1bW4gb2YgcGl4ZWxzLgpzdGFpcig2LCAxMzgpOwpzdGFpcig2LCAxNTIpOwpzdGFpcig2LCAxNTMpOwpzdGFpcigyLCAxOTApOwpzdGFpcigyLCAxOTEpOwpzdGFpcig2LCAxNDAsIDEpOwpzdGFpcig2LCAxNTUsIDEpOwovLyBJbnB1dAovLyAtLS0tLQovLyBFdmVyeSB0aW1lIGEga2V5IGlzIHByZXNzZWQgKG9ua2V5ZG93biksIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgaXMgc2V0IHRvICJ3IiAodGhlIDV0aCBjaGFyIG9mIGUudHlwZSA9ICJrZXlkb3duIikKLy8gRXZlcnkgdGltZSBhIGtleSBpcyByZWxlYXNlZCAob25rZXl1cCksIGl0IGlzIHNldCB0byAidW5kZWZpbmVkIiAodGhlIDV0aCBjaGFyIG9mIGUudHlwZSA9ICJrZXl1cCIpCi8vIFRob3NlIGZsYWdzIGNhbiBiZSB0ZXN0ZWQgYXMgaWYgdGhleSB3ZXJlIGJvb2xlYW5zIGJlY2F1c2UgInciIGlzIHRydXRoeSBhbmQgdW5kZWZpbmVkIGlzIGZhbHN5LgpvbmtleWRvd24gPSBvbmtleXVwID0gZSA9PiBzZWxmWydsdXInW2Uud2hpY2ggLSAzN11dID0gZS50eXBlWzVdOwovLyBHYW1lIGxvb3AKLy8gLS0tLS0tLS0tCnogPSBzZXRJbnRlcnZhbCgKICAvLyBUaGUgZ2FtZSBpcyB1cGRhdGVkIGFuZCB0aGUgY2FudmFzIGlzIHJlZHJhd24gZXZlcnkgOW1zOiAKICBlID0+IHsKICAgIGNvbnNvbGUubG9nKHUpOwogICAgCiAgICAvLyBNb3ZlIHRoZSBlbmVteSB0byB0aGUgbGVmdC4KICAgIGVuZW15IC09IC4wMjsKICAgIC8vIElmIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBlbmVteSBhbmQgTWFyaW8gaXMgc21hbGxlciB0aGFuIDFweDoKICAgIGlmKE1hdGguaHlwb3QoZW5lbXkgLSB4LCAxMCAtIHkpIDwgMSl7CiAgICAgIC8vIElmIE1hcmlvIGlzIGp1bXBpbmcsICJraWxsIiB0aGUgZW5lbXkgYnkgbW92aW5nIGl0IGF0IHg9LTFweCwgb3V0IG9mIHRoZSB2aWV3cG9ydC4KICAgICAgaWYoZ3JvdW5kZWQpewogICAgICAgIGVuZW15ID0gLTE7CiAgICAgICAgdnkgPSAtLjI7CiAgICAgIH0KICAgICAgLy8gSWYgbWFyaW8gaXMgZ3JvdW5kZWQsIGdhbWUgb3Zlci4KICAgICAgZWxzZSB7CiAgICAgICAgZW5kID0gMTsKICAgICAgfQogICAgfQogICAgLy8gTWFyaW8gZ29lcyBsZWZ0IGlmIGBsYCBpcyBzZXQgYW5kIGlmIGhpcyBwb3NpdGlvbiBvbiB0aGUgbWFwIGlzIGxhcmdlciB0aGFuIHRoZSBtYXAgc2Nyb2xsLgogICAgaWYobCAmJiB4ID4gc2Nyb2xsKXsKICAgICAgeCAtPSAuMTsKICAgICAgLy8gU3RvcCBNYXJpbyBpZiBoZSBoaXRzIGEgc29saWQgYmxvY2sgb24gdGhlIGxlZnQuCiAgICAgIC8vIFRvIHN0b3AgTWFyaW8gcHJlY2lzZWx5IGFnYWluc3QgdGhlIHdhbGwsIGhpcyB4IGNvb3JkaW5hdGUgaXMgZmxvb3JlZCBhbmQgaW5jcmVtZW50ZWQgKGkuZS4gc2V0IHRvIHRoZSBibG9jaydzIHggKyAxKS4KICAgICAgaWYoY29sbGlzaW9uKHgsIHkpKXsKICAgICAgICB4ID0gfn54ICsgMTsKICAgICAgfQogICAgfQogICAgLy8gTWFyaW8gZ29lcyByaWdodCBpZiBgcmAgaXMgc2V0LgogICAgaWYocil7CiAgICAgIHggKz0gLjE7CiAgICAgIC8vIFN0b3AgTWFyaW8gaWYgaGUgaGl0cyBhIHNvbGlkIGJsb2NrIG9uIHRoZSByaWdodC4KICAgICAgLy8gaGlzIHggY29vcmRpbmF0ZSBpcyBzZXQgdG8gdGhlIGJsb2NrJ3MgeCAtIDEuMSAoaWYgaXQgd2FzIGp1c3QgMSwgaXQgd291bGQgY29udGludWUgdG8gY29sbGlkZSBhbmQgY2F1c2UgYnVncyBvbiB0aGUgbmV4dCBmcmFtZSkuCiAgICAgIGlmKGNvbGxpc2lvbih4ICsgMSwgeSkpewogICAgICAgIHggPSB+fnggLSAuMTsKICAgICAgfQogICAgICAvLyBNYWtlIHRoZSBtYXAgc2Nyb2xsIGlmIE1hcmlvIGdvZXMgZnVydGhlciB0aGFuIHRoZSBjdXJyZW50IHNjcm9sbCB2YWx1ZSArIDdweC4KICAgICAgZWxzZSBpZih4ID4gc2Nyb2xsICsgNyl7CiAgICAgICAgc2Nyb2xsICs9IC4xOwogICAgICB9CiAgICB9CiAgICAvLyBNYXJpbyBqdW1wcyBpZiBgdWAgaXMgc2V0IGFuZCBpZiBNYXJpbyBpcyBjdXJyZW50bHkgdG91Y2hpbmcgdGhlIGdyb3VuZC4KICAgIC8vIFRoZSBqdW1wIGlzIG1hZGUgYnkgc2V0dGluZyBoaXMgdmVydGljYWwgc3BlZWQgdG8gLS4yNSBwaXhlbHMvZnJhbWUuCiAgICBpZih1ICYmICFncm91bmRlZCl7CiAgICAgIHZ5ID0gLS4yNTsKICAgIH0KICAgIAogICAgaWYodSAmJiBncm91bmRlZCAmJiAhZGogJiYgamYgPiAzMCl7CiAgICAgIHZ5ID0gLS4yNTsKICAgICAgZGogPSAxOwogICAgfQogICAgLy8gQWRkIGdyYXZpdHkgKC4wMTJweC9mcmFtZSkgdG8gTWFyaW8ncyB2ZXJ0aWNhbCBzcGVlZCBhbmQgdGhlIHZlcnRpY2FsIHNwZWVkIHRvIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbi4KICAgIHZ5ICs9IC4wMTI7CiAgICB5ICs9IHZ5OwogICAgLy8gRHVyaW5nIGEganVtcCAoaWYgdGhlIHZlcnRpY2FsIHNwZWVkIGhhcyBiZWVuIHNldCB0byBhIG5lZ2F0aXZlIHZhbHVlKToKICAgIGlmKHZ5IDwgMCl7CiAgICAgIC8vIEFkZCB2ZXJ0aWNhbCBzcGVlZCB0byB5IHBvc2l0aW9uCiAgICAgIHkgKz0gdnk7CiAgICAgIC8vIElmIGEgc29saWQgYmxvY2sgaXMgaGl0IGJ5IE1hcmlvJ3MgdG9wLWxlZnQgY29ybmVyIG9yIHRvcC1yaWdodCBjb3JuZXI6CiAgICAgIGlmKGNvbGxpc2lvbih4LCB5LCAxKSB8IGNvbGxpc2lvbih4ICsgLjksIHksIDEpKXsKICAgICAgICAvLyBQbGFjZSBNYXJpbyBqdXN0IGJlbG93IHRoZSBzb2xpZCBibG9jay4KICAgICAgICB5ID0gfn55ICsgMTsKICAgICAgICAvLyBDYW5jZWwgaGlzIHZlcnRpY2FsIHNwZWVkLgogICAgICAgIHZ5ID0gMDsKICAgICAgfQogICAgfQogICAgLy8gSWYgTWFyaW8gZGllcyBieSBmYWxsaW5nIGluIGEgaG9sZSwgb3Igd2lucyBieSB0b3VjaGluZyB0aGUgZmxhZywgZ2FtZSBvdmVyCiAgICBpZih5ID4gMTQgfHwgeCA+IDE5OCkgZW5kID0gMTsKICAgIC8vIFN0b3AgTWFyaW8ncyBmYWxsIHdoZW4gaGlzIGJvdHRvbS1sZWZ0IGNvcm5lciBvciBib3R0b20tcmlnaHQgY29ybmVyIHRvdWNoZXMgYSBzb2xpZCBibG9jay4KICAgIC8vIEhlIGlzIGNvbnNpZGVyZWQgImdyb3VuZGVkIiBhbmQgdGhlICJ1cCIgZmxhZyBpcyB1bnNldCB0byBhdm9pZCBqdW1waW5nIGFnYWluIGltbWVkaWF0ZWx5LgogICAgLy8gVGhvdWdoLCBNYXJpbyB3aWxsIGNvbnRpbnVlIGp1bXBpbmcgYXMgbG9uZyBhcyBubyBvdGhlciBrZXkgaXMgcHJlc3NlZCBiZWNhdXNlIHRoZSBvbmtleWRvd24gZXZlbnQgd2lsbCBiZSBmaXJlZCBjb250aW51b3VzbHkuCiAgICBncm91bmRlZCA9ICEoY29sbGlzaW9uKHgsIHkgKyAxKSB8IGNvbGxpc2lvbih4ICsgLjUsIHkgKyAxKSk7CiAgICBpZighZ3JvdW5kZWQpIHkgPSB+fnksIHZ5ID0gMCwgZGo9MCwgamYgPSAwOwogICAgCiAgICBqZisrOwoKICAgIC8vIERyYXcgdGhlIHNjZW5lOgogICAgLy8gU2t5CiAgICBjLmZpbGxTdHlsZSA9IGAjNTlmYDsKICAgIGMuZmlsbFJlY3QoMCwgMCwgOTk5LCA5OTkpOwogICAgLy8gTWFwCiAgICBmb3IoaSA9IDEzOyBpLS07KXsKICAgICAgZm9yKGogPSA5OTk7IGotLTspewogICAgICAgIC8vIFRoaXMgY29tbWVudGVkIGNvZGUgd291bGQgaGF2ZSBkcmF3biBhbGwgdGhlIGNsb3VkcyBpbiB3aGl0ZSBpZiB0aGVyZSB3ZXJlIGVub3VnaCBieXRlcyBsZWZ0LgogICAgICAgIC8qCiAgICAgICAgaWYoaiU0OCA9PSA5KXsKICAgICAgICAgIGMuZmlsbFN0eWxlPWAjZmZmYDsKICAgICAgICAgIGMuZmlsbFJlY3QoaipuLXNjcm9sbCpuLDIqbixuLG4pOwogICAgICAgICAgYy5maWxsUmVjdCgoaisxOSkqbi1zY3JvbGwqbiwyKm4sMypuLG4pOwogICAgICAgICAgYy5maWxsUmVjdCgoaisxMSkqbi1zY3JvbGwqbixuLG4sbik7CiAgICAgICAgICBjLmZpbGxSZWN0KChqKzI2KSpuLXNjcm9sbCpuLG4sMipuLG4pOwogICAgICAgIH0KICAgICAgICAqLwogICAgICAgIC8vIFBpcGVzCiAgICAgICAgaWYobWFwW2ldW2pdID09IDQpewogICAgICAgICAgYy5maWxsU3R5bGUgPSBgIzhkMWA7CiAgICAgICAgICBjLmZpbGxSZWN0KGogKiBuIC0gc2Nyb2xsICogbiwgaSAqIG4sIG4sIG4pOwogICAgICAgICAgLy8gUmV1c2UgdGhlIHBpcGVzJyBjb2xvciB0byBkcmF3IHRoZSBmbGFnIGJldHdlZW4gdGhlIGxpbmVzIDIgYW5kIDExIGF0IHggPSAxOTguCiAgICAgICAgICBjLmZpbGxSZWN0KDE5OCAqIG4gKyAyIC0gc2Nyb2xsICogbiwgbiwgMiwgOSAqIG4pOwogICAgICAgIH0KICAgICAgICAvLyBRdWVzdGlvbiBibG9ja3MKICAgICAgICBlbHNlIGlmKG1hcFtpXVtqXSA9PSAzKXsKICAgICAgICAgIGMuZmlsbFN0eWxlID0gYCNmOTNgOwogICAgICAgICAgYy5maWxsUmVjdChqICogbiAtIHNjcm9sbCAqIG4sIGkgKiBuLCBuLCBuKTsKICAgICAgICB9CiAgICAgICAgLy8gR3JvdW5kIC8gYnJpY2sgLyBzdGFpcnMKICAgICAgICBlbHNlIGlmKG1hcFtpXVtqXSl7CiAgICAgICAgICBjLmZpbGxTdHlsZSA9IGAjYzQwYDsKICAgICAgICAgIGMuZmlsbFJlY3QoaiAqIG4gLSBzY3JvbGwgKiBuLCBpICogbiwgbiwgbik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBFbmVteQogICAgYy5maWxsU3R5bGUgPSBgI2EwMGA7CiAgICBjLmZpbGxSZWN0KGVuZW15ICogbiAtIHNjcm9sbCAqIG4sIDEwICogbiwgbiwgbik7CiAgICAvLyBNYXJpbwogICAgYy5maWxsU3R5bGUgPSBgI2QyMGA7CiAgICBjLmZpbGxSZWN0KHggKiBuIC0gc2Nyb2xsICogbiwgeSAqIG4sIG4sIG4pOwogICAgLy8gUmVsb2FkIHRoZSBwYWdlIGFmdGVyIGEgZ2FtZSBvdmVyICh3aW4gLyBsb3NlKQogICAgaWYoZW5kKXsKICAgICAgdG9wLnJlbG9hZCgpOwogICAgfQogICAgLy8gRHJhdyBhIGJsYWNrIHNjcmVlbiBkdXJpbmcgdGhlIGludHJvICgyNCBmcmFtZXMpCiAgICAvLyAoSXQgYWxzbyBzZXJ2ZXMgYXMgYSB0cmFuc2l0aW9uIGFmdGVyIGEgZ2FtZSBvdmVyKQogICAgaWYoaW50cm8pewogICAgICBjLmZpbGxTdHlsZSA9IGAjMDAwYDsKICAgICAgYy5maWxsUmVjdCgwLCAwLCA5OTksIDk5OSk7CiAgICAgIGludHJvLS07CiAgICB9CiAgfSwgOQopCi8vIEFmdGVyIG1pbmlmaWNhdGlvbiwgc29tZSBtYW51YWwgb3B0aW1pemF0aW9ucyB3ZXJlIGFkZGVkOgovLyAtIGw9dT1yPTA7dmFyIGY9W10sZT0wLG89MCx0PTAsbj0yLFI9MixTPTI0LGE9MjQgPT4gZj1bbD11PXI9ZT1vPXQ9MF0sbj1SPTIsUz1hPTI0Ci8vIC0gZ3JvdW5kZWQgPT4gegovLyAtICIgPT4gYAovLyAtIHJlcGxhY2UgdGhlIGZ1bmN0aW9uIGluIHNldEludGVydmFsIHdpdGggYSBzdHJpbmcKLy8gVGhlIG1pbmlmaWVkIHNpemUgaXMgMTUwN2IuCi8vIEFmdGVyIFJlZ1BhY2tpbmcgd2l0aCB0aGUgc2NvcmUgMS8wLzAgYW5kIHRoZSB2YXJzIGEgYW5kIGMgaWdub3JlZCwgdGhlIHNpemUgaXMgMTAxOGIuCjwvc2NyaXB0Pgo8c3R5bGU+CiogeyBvdmVyZmxvdzogaGlkZGVuIAo=
from ama.
Im really sorry if I am annoying. I want to greatly challenge myself and thoroughly understand this, but I might try phaser. thanks tho
from ama.
Related Issues (20)
- What IRC channels are you in? HOT 1
- How and why did you get into programming? HOT 1
- What's your favorite gif? HOT 3
- What is a skill you'd like to learn and why? HOT 1
- What was your best programming moment? HOT 2
- What's your favorite project on GitHub and why? HOT 1
- Q: Is the logo for EscApe '␛🐒'? HOT 1
- Do you participate in mentoring or coaching others? HOT 1
- Have you ever tried Polymer? HOT 1
- Resources to get started with Code Golfing? HOT 2
- HOT 1
- HOT 3
- How do you convert the Intel SDM pdf to html HOT 1
- Coding Problem: Html sizing display issue for TradingView widget
- You have 2 hours to build a fantastic app, what tech do you use? HOT 1
- Do you spread some "code golfed" chunks in your production code at work ? HOT 1
- Any idea for next Js13kGames contest ? (2015 edition) HOT 2
- How did you get into codegolfing and why? HOT 3
- What does your phone homescreen look like? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ama.