Platformed App banner

Platformed App

46 devlogs
172h 9m 7s

My friend Timothy is making a web project called Platformed (https://flavortown.hackclub.com/projects/7342 or https://platformed.jmeow.net) where you can make your own 2D platforming levels, so I am making a native Godot client for it that will le…

My friend Timothy is making a web project called Platformed (https://flavortown.hackclub.com/projects/7342 or https://platformed.jmeow.net) where you can make your own 2D platforming levels, so I am making a native Godot client for it that will let you download and play levels from his API. Everything will be re-implemented without referencing his code as much as possible while adding a few nice things of my own. My work also involves helping him with the web version while conveniently fixing bugs that happen to impact me

No AI was used to pump out this certified Slop®

Demo Repository

Loading README...

cskartikey

Tagged your project as well cooked!

🔥 cskartikey marked your project as well cooked! As a prize for your nicely cooked project, look out for a bonus prize in the mail :)

CoolBean

I fixed the account creation issue by bypassing Tim’s website and making api calls directly. I also updated the account creation button so I can tell if someone is using an older unsupported version or not. I had a feeling, A HUNCH, that the devlog I had posted before would end up being the second to last devlog, and I WAS RIGHT!!!!!!

Attachment
0
CoolBean

Shipped this project!

Hours: 170.92
Cookies: 🍪 3694
Multiplier: 21.61 cookies/hr

I basically built open-source Mario Maker! You can create, play, and share levels completely independent of any connection to a server (although I do still provide the option to upload levels you make to the Platformed server). I am super proud of how the app turned out, and I think it justifies its existence as a standalone app instead of a website. I am especially happy with how the theme system turned out, and I can’t wait to see what themes people come up with. I learned a lot about using Godot, since I have pretty much only used Unity up to this project.

CoolBean

Documentation is complete, bugs discovered by testing have been fixed, and I am tired. The project is at last coming to an end. There are a few more loose ends to tie up before I ship, but this very well may be the second-to-last (if not last) devlog. Thanks so much to my past self for deciding to try and learn Godot. It’s been really fun.

Attachment
0
CoolBean

Documentation is going pretty well, although the process is a bit slower than I thought. The process is basically ping-ponging between my IDE, my screen recorder, and GitHub. I managed to get the getting started page for the editor done today though, so yippee

Attachment
0
CoolBean

I finally got trigger moving working, then I fixed the context menu moving incorrectly when you zoom. That was the last big issue I know of at the time of writing this, so I added a few more UI elements I was missing for new users. It’s now time for the final step: DOCUMENTATION! I’m sure my friends will find a few more bugs I didn’t catch during testing, but other than that my focus is now solely on writing the docs. Then, the project will be complete at long last.

Attachment
Attachment
Attachment
Attachment
0
CoolBean

I added the missing fill command (whoops) and started working on touchups like making triggers movable in the editor. Pretty soon, I’ll be able to finish polishing, and I can start on documentation. After all these centuries… A SHIP IS ON THE HORIZON 🗣🔥🔥🔥

Attachment
0
CoolBean

I added an absolute mountain of stuff today. I was absolutely locked INNNNNNNN. Instead of yapping about it all, I will just add a ton of screenshots.

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
CoolBean

Right clicking on a trigger will populate the trigger editor with its commands. I also refactored the theme system to account for creating new commands.

Attachment
0
CoolBean

I finished the UI design for the trigger editor and started programming the backend for it. Also fixed some bugs that I found

Attachment
0
CoolBean

I finally got level uploading fixed!!! I added a picture of the level working in the web version as proof (https://platformed.jmeow.net/level/79). The context menu buttons are fixed, so I’m working on the trigger editor. I think the design came out pretty good if I do say so myself.

Attachment
Attachment
0
CoolBean

I implemented the ability to rotate tiles after all this time lol. In the process, I broke the buttons so I’m gonna have to fix that. Tomorrow me’s job.

Attachment
0
CoolBean

I started working on the context menu for edit mode. There’s a lot of functionality I plan to pack into it, so it took a lot of groundwork before I even started programming what the actual buttons themselves would do. Probably gonna rewrite half of it tomorrow anyways. I just need to finish this and trigger editing, then I can finally move on to polish and documentation. It’s the homestretch!!!

Attachment
0
CoolBean

A lot of refactoring and Godot pain later, and selection dragging is finally here! Select some blocks, then click and drag to move them wherever you want. (Apparently, you cannot do [Export] Godot.Collections.Dictionary<int, Godot.Collections.Array>, or Godot will throw a hissy fit)

Attachment
0
CoolBean

You can now edit the names and descriptions of your uploaded levels from the desktop client. I scrapped the theme I made before and created an entire customizable theme system for the desktop client! It took a lot of work, but it lets you make some pretty cool (and sometimes really goofy) color palettes. I think it really helps you make the client your own. Plus it’s more customizable than Tim’s theme system so HAHA I WIN

Attachment
Attachment
Attachment
Attachment
Attachment
0
CoolBean

Selections are finally fixed! They don’t keep track of actual tiles yet, but I’m really happy to have the custom rectangle drawing actually working. I also took the time to make it so zooming actually stays where the mouse is instead of always scaling toward the left corner.

0
CoolBean

I didn’t have very much time today, so I did some clean-up work with the UI. I tried to consolidate the bajillion theme overrides into one theme where I could so making sweeping style changes won’t be so painful.

Attachment
0
CoolBean

ok so level uploading was actually broken but i fixed it AND added a whole bunch of new stuff that’s possible now that there is login! You can delete levels, edit existing web levels, and also I fixed a bunch of code jank and ui stuff to display the new buttons and indicators. Level deletion is being a little wonky though, so I will have to look further into that. Luckily, Tim is working on API docs (finally. better late than never I guess).

Attachment
Attachment
0
CoolBean

THIS IS A HUGE UPDATE!!! I added the ability to sign in to your platformed account! Now you can see the levels that are saved to your account and upload levels you made in the desktop editor! PICTURED IS THE FIRST EVER DESKTOP LEVEL UPLOADED THE WEBSITE!!!!!!!!!!!!!!!!!

Attachment
Attachment
Attachment
0
CoolBean

I didn’t get much time today, but I did what I could. I improved the settings menu and found a couple of bugs. One of those bugs has something to do with how I’m re-encoding rotation data from the editor and I’ll need to fix it.

Attachment
Attachment
0
CoolBean

The settings menu now works properly, although I only added one setting for now lol. I’m trying to focus on the editor and only programmed a settings menu so there is a user-accessible way to change tilesets. In the process, I unearthed a bunch of annoying bugs that took forever to fix either because of minor hard to spot typos or Godot documentation being better than Unity but still bad. All of this to improve the editor which FINALLY HAS SEMI-WORKING OUTLINES!!!!!

Attachment
Attachment
Attachment
0
CoolBean

I added the 8-bit tileset to the desktop version, but that meant I needed a way for the user to switch tilesets, which meant I needed a settings menu, which meant I needed to program and design a settings menu (WIP). Oh yeah I also designed some tiles that were missing from the 8-bit set in Figma.

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
CoolBean

There are now shortcuts for several different functions. I also did some coding to support rotating existing tiles for the to-be-implemented edit mode in the editor (revolutionary, I know). Lastly, I added support for drawing arbitrarily sized outlines. I’m working on getting them to appear when a block is selected in edit mode, but it is proving significantly harder than I thought it would be.

Attachment
0
CoolBean

You can now save a level to your levels folder or to a custom place in your directory. I also added play mode so you can test your changes without saving them to a file. Next up on the agenda is either going to be adding sign-in so you can upload your levels or working on the non-place/mass edit mode in the editor. Both are pretty daunting so I will decide in the morning.

Attachment
Attachment
0
CoolBean

I did some behind the scenes work on functions I will need for saving and editor play mode. I also added icons for buttons that were missing them, and I combined the save and export button into one. Me and my brother both went to grandma’s house again today, but I managed to get a bit more done.

Attachment
0
CoolBean

I didn’t have much time today since I went to see a movie with my grandma, but I got undo and redo working together properly. Undo and redo move you forward and backward in the chain of edits, and starting a new edit breaks the chain.

Attachment
0
CoolBean

I spent a lot of time programming edit history to support undo and redo. Undo is officially working, but redo is going to be a bit more complicated. I also spent what felt like a bit too much time catching all the different ways you should be able to switch between modes, but I hope all the time I spend agonizing over little details will make the first-time user experience more intuitive and less janky feeling.

Attachment
0
CoolBean

I am slowly fleshing out all the functions of the UI and trying to make an intuitive design. Jack joined flavortown, so I’m all on my own for this one. By summoning my inner Tantacrul, I think I was able to make some improvements compared the web editor, but I guess you’ll just have to compare the two and decide for yourself once they are both done.

Attachment
Attachment
0
CoolBean

The editor is fully underway now. There was some backend code I had to rewrite for it to play nice with the editor viewport, but other than that, things are going smoothly. Below is a screenshot of the very first level to be imported into the editor!

Attachment
0
CoolBean

The tile generation refactor is finally useable! There were definitely some… interesting bugs along the way, but loading times are now about 32x faster. The level “Part 2” (https://platformed.jmeow.net/level/28) took about 8 seconds to load on my school computer. Now it only takes a quarter of a second. The rewrite was a complete pain to do, but I’m super happy with it. Now the editor will be sigificantly easier to implement.

Attachment
Attachment
0
CoolBean

I am reworking the entire tile system from scratch to be more effecient by using Godot 4’s new TileMapLayers so I can facilitate lag-free editing on low end PCs. The only problem? I HATE TILEMAPLAYERS SO MUCH!!!!!!!!!! COLLISION DETECTION IS BARELY USABLE AND GETTING INFORMATION ABOUT A SPECIFIC TILE VIA COLLISIONS IS MISERABLE AND LAUGHABLY OVERENGINEERED.
I M L O S I N G M Y M I N D

Attachment
Attachment
0
CoolBean

Tim has been furiously adding and updating features as the March 31st deadline approaches, so I have been trying my best to keep parity. He will be shipping soon, and I can renew my focus solely on the editor which I have laid the basic groundwork for.
(sorry for the long gap between devlogs. there were some weird flavortown issues)
¯_(ツ)_/¯

Attachment
0
CoolBean

The My Levels button actually does something now!!! Click it to be taken to the magical land of an empty page. All you have to do is click the Set Levels Folder button to select a folder on your computer, and as long as it contains level .json files, LEVELS WILL APPEAR (☉o☉)

In the future, you will hopefully be able to save levels you like from the web into your levels folder.

Attachment
Attachment
0
CoolBean

I’ve been busy trying to keep up with the rapid updates that are coming alongside the new trigger system added to Platformed. Lots and lots of new blocks to add. At the time of writing, I have all three trigger block types and all four trigger command types accounted for.

Pictured is the level Trigger Happy, created by the lead developer of Platformed to demonstrate the capabilities of triggers. It is officially fully functional in my Godot client!(https://platformed.jmeow.net/level/44)

Attachment
0
CoolBean

After much anticipation (by nobody), TRIGGERS ARE OFFICIALLY HERE!!! Also in this update are a few small bug fixes to movement.

1

Comments

heitordecarvalhopesso

adiciona inimigos como cobra e escorpião, combina com o estilo do personagem

CoolBean

I redid the whole UI to be easier to work with now that I have a better understanding of Godot’s UI system. I also added a preview page so you can see the ratings and completion percentage for a level before you jump straight into it. This page will also be a nice place to implement saving to My Levels. Godot’s UI takes a lot more code than Unity to get certain things set up, but the experience is still better in every way.

Attachment
Attachment
0
CoolBean

I completely rewrote the tile system. Tile is now an abstract class from which each type of tile inherits. This is in service of the upcoming trigger update to platformed. The rewrite also let me implement sound! Also included in this update are a couple of bug fixes to Godot things my Unity brain could not understand.

1

Comments

CoolBean
CoolBean 2 months ago

Video was cut for being to big to upload

CoolBean

Lots and lots of UI/UX. The game now lets you browse uploaded levels just like the site, and click to play them. I finally added a feature the website doesn’t have: pausing!

Attachment
Attachment
Attachment
0
CoolBean

Lots of little movement tweaks to get different levels working right. Pretty soon, I’ll be able to move on to adding features that actually justify this client existing!

Pictured is me getting to the end of https://platformed.jmeow.net/level/28 in the Godot client. This is the hardest level anyone has made so far, rendering it the perfect test of how accurate my movement code is to the web client.

Attachment
0
CoolBean

I did a mountain of Quality of Life work. Better code segmentation, correct block rotations, custom block behaviors, small movement tweaks to match the web version, custom hitbox shapes for different block types, and a whole lot of other small things that together make all the difference.

Attachment
Attachment
0
CoolBean

The user interface is now functional and visually perceptible to the naked human eye. You can type in a level ID to load into that level. Next is to make all the special blocks work and to allow you to actually leave and load new levels.

Attachment
0
CoolBean

I have officially become the greatest Godot UI developer in all of human history.

(but fr i figured out all the ui stuff i need. time to start implementing)

Attachment
0
CoolBean

Movement now has acceleration, which brings it a lot closer to platformed AND just makes the movement feel a lot nicer overall.

0
CoolBean

Tiles can now actually tell what kind of tile they are. I made them change their textures and disable collisions accordingly

Attachment
0
CoolBean

I added wall jumping. Feature parity went up by like 2%, but fun went up 1000%

0
CoolBean

Adjacencies are now working properly!!!

Attachment
0
CoolBean

Blocks now know the directions in which they are surrounded by other blocks. I made a little test visualization to make sure it was working properly and i think it looks pretty cool :) Next is to get the blocks to update to the correct texture based on what blocks surround it.

Attachment
Attachment
0
CoolBean

DecodeRLE now returns a list of rows instead of just an array of ints. This gave me more trouble than I expected.

Attachment
0