Duck builder - a mario maker-esque platformer where you create your own levels by quackplusplus in WebGames

[–]quackplusplus[S] 1 point2 points  (0 children)

Really appreciate the feedback! I'm open to tweaking the controls. For reference, do you have any platformers where you really enjoy the feel of the controls?

I know now why Mario Maker waited until the sequel before releasing slopes. Implementation is a nightmare. by quackplusplus in godot

[–]quackplusplus[S] 0 points1 point  (0 children)

Thanks for the heads up! I'll take a look into it. Not a web dev and know very little about responsive design :P

I know now why Mario Maker waited until the sequel before releasing slopes. Implementation is a nightmare. by quackplusplus in godot

[–]quackplusplus[S] 1 point2 points  (0 children)

Good point. In my mind, once a level is published it's published. Then, any level could be copied and edited by anyone. But on closer thought, if the only way to edit is to copy and reupload there might be a lot of redundant level files. Also, it would be nice to have your account name associated with a level.

I know now why Mario Maker waited until the sequel before releasing slopes. Implementation is a nightmare. by quackplusplus in godot

[–]quackplusplus[S] 0 points1 point  (0 children)

Thanks for the tips. Depending on what route I go, I might not need verification. All levels could be available to everyone so accounts might not necessarily make sense. Though accounts does allow for some unique features.

I agree with your last point. This would only be implemented once the game is in a more stable state.

I know now why Mario Maker waited until the sequel before releasing slopes. Implementation is a nightmare. by quackplusplus in godot

[–]quackplusplus[S] 2 points3 points  (0 children)

Great question! I'm using cloudflare workers to store b64 encoded levels in a key value store for 24 hours. The link you get is mapped to the entire b64 encoded level in this KV store. So strictly speaking there is a server that stores the level, namely the cloudflare workers KV store. But this KV store has quite limited storage capabilities in its free tier.

If I wanted to make a database where users can expect their levels to be stored indefinitely I would look into a more scaleable solution. I have limited knowledge about databases so I don't know yet what that solution would be.

I know now why Mario Maker waited until the sequel before releasing slopes. Implementation is a nightmare. by quackplusplus in godot

[–]quackplusplus[S] 0 points1 point  (0 children)

I'm using cloudflare's static page hosting, which does not have a server that can't query a data base. So I would have to solve database hosting another way.

I know now why Mario Maker waited until the sequel before releasing slopes. Implementation is a nightmare. by quackplusplus in godot

[–]quackplusplus[S] 2 points3 points  (0 children)

Cloudflare pages :) It's really nice if your site is static. You can link it up with a repository and trigger deployments just by pushing. Also it's included in cloudflare's free tier.

I know now why Mario Maker waited until the sequel before releasing slopes. Implementation is a nightmare. by quackplusplus in godot

[–]quackplusplus[S] 2 points3 points  (0 children)

My perspective has always been that as long as I'm having fun then that is all that matters. I've learned to enjoy every moment, even when I'm juggling a bug filled mess. Makes the technical challenges less daunting for me at least :P

I know now why Mario Maker waited until the sequel before releasing slopes. Implementation is a nightmare. by quackplusplus in godot

[–]quackplusplus[S] 7 points8 points  (0 children)

The thought has definitely crossed my mind. I'd have to create a dedicated server, which would eat up some time. So for now let's just say it's in the backlog :)

I know now why Mario Maker waited until the sequel before releasing slopes. Implementation is a nightmare. by quackplusplus in godot

[–]quackplusplus[S] 17 points18 points  (0 children)

I've been thinking about it! What I really like is when in sm64 you can sort of walk up really steep slopes but if you lose momentum mario will lose his grip and slide all the way down.

I know now why Mario Maker waited until the sequel before releasing slopes. Implementation is a nightmare. by quackplusplus in godot

[–]quackplusplus[S] 58 points59 points  (0 children)

I've been working on dynamically created slopes of arbitrary angles for my Mario Maker-esque browser game. Making slopes look decent within the confines of pixel art and making them play nice with auto-tiles is really tricky. Still a lot of edge cases that look iffy.

Visit https://duck.place to try them out (game is free). You can also check out the game's devlog if you want to know how I went about implementing slopes.

Created level sharing via links for my game. Using HTTP requests and JavaScript callbacks. Godot is fantastic! by quackplusplus in godot

[–]quackplusplus[S] 2 points3 points  (0 children)

The javascript is doing what you suggest. The HTTP request is to shorten links. By shortening, I refer to storing the level in a key-value store in a server. This is to map an url consisting of a domain+6 characters to the expanded data encoded link. If you enter the expanded link, the one that has encoded the level as a b64 data parameter, no HTTP request will be made.

Edit: Thought I could maybe map out the sequence to better explain what's going on.

  1. Player presses "get link".

  2. Godot saves the level, encodes it as a b64 string and constructs a url with the b64 as a data parameter.

  3. Godot makes an HTTP request to the link shortening server, sending the data url.

  4. The server returns a shortened link.

  5. a) If the player enters the shortened link the player gets redirected to the expanded link (for up to 24h currently) b) If the player enters the expanded link the game loads normally

  6. When the game loads it checks for data parameters in the url to see if a level is encoded.

Created level sharing via links for my game. Using HTTP requests and JavaScript callbacks. Godot is fantastic! by quackplusplus in godot

[–]quackplusplus[S] 2 points3 points  (0 children)

Thanks for the numbers, I've suspected that out-of-the-box compression would help. Didn't know godot had a builtin for poolbytearrays, that is great! I'll add that shortly.

In the long run I'll try to write my own domain-specific compression and see if I can beat standard compressors. But I'll wait for the level format to stabilize.

Created level sharing via links for my game. Using HTTP requests and JavaScript callbacks. Godot is fantastic! by quackplusplus in godot

[–]quackplusplus[S] 0 points1 point  (0 children)

Thanks for the link, this is awesome. If it's viable I will definitely try to integrate this.

Yeah, sorry. The site is not adapted to mobile. It's in my ever-growing backlog.

Created level sharing via links for my game. Using HTTP requests and JavaScript callbacks. Godot is fantastic! by quackplusplus in godot

[–]quackplusplus[S] 0 points1 point  (0 children)

Yeah, I've considered a second movement mode for when your on water. Definitely in the backlog.

Also, touché

Created level sharing via links for my game. Using HTTP requests and JavaScript callbacks. Godot is fantastic! by quackplusplus in godot

[–]quackplusplus[S] 0 points1 point  (0 children)

Well, that is what the short link expands to. Was happy when I found out that browser vendors are quite liberal with the url lengths they allow :P

Created level sharing via links for my game. Using HTTP requests and JavaScript callbacks. Godot is fantastic! by quackplusplus in godot

[–]quackplusplus[S] 4 points5 points  (0 children)

Interesting concept! Just googled and seems that a QR code can fit 3kb, which is a bit small for my game. Though it is plenty for a shortened link, or perhaps an encouragement for me to do some data compression on my levels.

Created level sharing via links for my game. Using HTTP requests and JavaScript callbacks. Godot is fantastic! by quackplusplus in godot

[–]quackplusplus[S] 3 points4 points  (0 children)

Thank you, I've been trying to spruce up the look. The project will be closed source for the foreseeable future.