Coder Social home page Coder Social logo

​ about ama HOT 2 CLOSED

xem avatar xem commented on September 22, 2024

from ama.

Comments (2)

xem avatar xem commented on September 22, 2024

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:

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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.

gBasil avatar gBasil commented on September 22, 2024

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.

gBasil avatar gBasil commented on September 22, 2024

I can't seem to get the double jump to work, I have been fiddling around but it still doesn't work

from ama.

xem avatar xem commented on September 22, 2024

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.

gBasil avatar gBasil commented on September 22, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.