You are browsing as a guest. Sign up (or log in) to start making projects!

Mehmet

@Mehmet

Joined May 31st, 2026

  • 41Devlogs
  • 4Projects
  • 4Ships
  • 51Votes
For i in range(9999)
follower.add(Mehmet)
Ship

I built Orbital, the all-in-one project that encompasses whatever you need from a 2D astronomical simulator.

When first loading it up, a window titled “Orbital” pops up, and you will see a star right at the center. You can change the window dimensions however you would like, whether fullscreen or resized small.

This is where the fun starts: I spent tireless hours implementing a slingshot mechanism where you can intuitively and easily launch “orbitals,” as I like to call them. You can think of these as small planets that you can send to orbit around each other and around bigger stars, masses, and objects that you create yourself. The starting star is just to get you going.

Controls and Features:
• Navigation: Use the WASD keys and/or arrow keys to navigate around this 2D world and find different orbits across the gigantic canvas. It does not have an end (unless you spend 10 hours of unemployment trying to find it, but I am sure you are not that stubborn).
• Mass Adjustment: Use the plus (+) and minus (-) keys to change the mass of the objects you throw into the simulation.
• Physics: It runs on full n-body physics; nothing is hard-coded and everything is dynamic. No matter how quirky and interesting your orbits are, they will be solely and originally yours.
• Visuals: The colors change up every once in a while. I really tried to make it as minimalist and physics-identifying as possible.
• Reset: Press the R key on your keyboard to reset the world and start from a fresh universe, marked by the reset star that kickstarts everything again.

I am really proud of the n-body physics because it was surprisingly manageable and cool to work on.

Where I really struggled was on advanced merging. Normally, if objects are touching, you can simply merge them. But when objects move super fast, one frame they are far away, and by the next frame, high velocity math teleports them right past or into the other object. If you slingshot a planet relatively fast, it could easily glitch and teleport through objects. To fix this, I had to calculate whether the path the object took from frame 0 to frame 1 intersected any other objects along its trajectory.

That was an especially hard, albeit depressing challenge, but nevertheless, it was encountered and defeated so you could enjoy astronomical bliss.

Thank you!

  • 16 devlogs
  • 17h
Try project → See source code →
Open comments for this post

1h 17m 14s logged

I updated the project. I was notified that it initially crashed on macOS, and the arrow keys were a bit janky on macOS as well. All of that has been completely fixed, and I’ve updated the readme and the latest code on GitHub to encompass those changes.

0
0
27
Open comments for this post

30m 50s logged

It’s shaping up. I added the characters, changed the title and the icon at the top left,

I’ve set my eyes on controls next.

0
0
13
Open comments for this post

18m 21s logged

Please format the following text to Markdown in your brain.

Blobbe, written B-L-O-B-B-E, is a platformer game that I’m making fully and entirely in Python, Pygame. I have no clue what Pygame is and how it works right now, but I’m gonna look into the docs, look at examples, and figure it out. I hope to build a very nice and cool platforming game to learn more about game development and Pygame itself.

Right now, I’ve built a color-changing rectangle that changes colors five times every second (so every 200 milliseconds). Here are screenshots of it. (I dont wanna open OBS)

0
0
33
Open comments for this post

25m 13s logged

Today I changed the title card of the window that pops up.

A few other updates:
• I tweaked the final game feel a bit.
• I made the initial spawning star spawn in a sort of light yellow color, and I also added that light yellow color to the colors list.
• I made sure that the window of the simulation is also in dark mode, so you get more encapsulated in it.

0
0
29
Open comments for this post

23m 4s logged

Added a background grid so that you get a sense of spatial bigness and tininess. You get a feel for how big and small your orbitals really are.

0
0
12
Open comments for this post

35m 53s logged

I finally got the complex merging done.

Before, when an orbital was going too fast, one frame it was at the back of another orbital, and the next frame, it was in front of it. Since its velocity was so high, the radii didn’t ever collide, so it just went through other ones without merging. That was really not acceptable, so I worked a lot on making sure it works.

How I did it is actually very interesting:

  1. Get the starting position of the moving object and its ending position on the next frame.
  2. Get the coordinates of the target object you want to check for a potential merge.
  3. Draw a line from where the moving object started to where it ended, and check if the target object is intersecting that line (calculating what percentage along that line the checked object sits).
  4. If it intersects, you merge them.
0
0
12
Open comments for this post

1h 57m 1s logged

Added some instructions to make it easier, added more colors, and I’m now working on making more rigorous merge logic.

0
0
11
Open comments for this post

42m 55s logged

Today I added zooming that works with scrolling up and scrolling down appropriately: when you scroll down, everything gets smaller, and when you scroll up, everything gets bigger. Mass and gravity, of course, stay the same.

I made sure that the sling function (basically spawning new orbitals) works flawlessly. Our aim function—which draws that mini press-and-drag indicator to make it easier to see where you are spawning orbitals—is also working with both camera differentiation and zoom differentiation.

This way, you can zoom all the way out and still spawn orbitals in the correct way, or zoom all the way in and spawn them super close up. All the physics and rendering works beautifully.

0
0
9
Ship

It started as a basic Python script and has now evolved into a premium, focused, and hyper-minimalist single-page web app.

Check out the live clock (with toggleable milliseconds), stopwatch with laps, and countdown timer complete with customized E-flat Major arpeggio bell chimes synthesized on the fly via Web Audio API. Also cleaned up the Python CLI tool to refresh inline and support hardware chimes.

  • 5 devlogs
  • 12h
  • 4.88x multiplier
  • 58 Stardust
Try project → See source code →
Open comments for this post

6h 34m 56s logged

Hey everyone, I’m back with a massive update for Timed.!

After focusing on other projects for a bit, I decided to return and give this project the thorough cleanup, visual redesign, and feature set it deserves. It has been transformed from an extremely basic prototype into a premium, focused, and hyper-minimalist time hub. Here is what is new in the latest version:### 1. Aesthetic Clean-up & Hyper-Minimalism- Clean Slate Background: Removed the distracting background gradient glow for a clean, uniform deep slate environment.- Logo Refinement: Removed the bullet dot next to the logo for a cleaner top-left header.- Hidden Footer: Removed the copyright text and footer entirely, leaving zero visual clutter.- Tabular Digit Spacing: Styled the clock displays to use tabular monospaced digits, preventing annoying layout shifting when the seconds change.

2. Live Clock & Mode Segregation- **

Hidden Minute Ring on Clock**:

The spinning progress ring is now hidden on the Live Clock mode page (to avoid confusion), but it still displays smoothly in Timer and Stopwatch modes.- Interactive Toggles: Tapping the clock display now toggles millisecond view on/off, and there are custom buttons to swap between 12-hour and 24-hour display modes.

3. All-New Stopwatch Mode- Added a full Stopwatch Mode to the web application, featuring millisecond accuracy, controls to pause and resume, and a scrolling lap recording panel.

4. Upgrade Countdown Timer & Presets- Added preset buttons for quick intervals (5m Break, 15m Break, 25m Pomodoro, 50m Focus).- Added an input picker for custom hours, minutes, and seconds.

5. Synthesized Acoustic Bell Chimes- Got rid of the basic, harsh beep sounds.- Coded a custom Web Audio API synthesizer that dynamically triggers a warm, premium E-flat Major arpeggio chime (Eb4 -> Bb4 -> D5 -> F5) using physical acoustic decay curves when the timer completes.

6. Polished Terminal Application (timerr.py)- Upgraded the CLI python app to refresh in-place (\r) so it doesn’t flood the console output.- Added input validation to prevent user typos from crashing the script.- Built a terminal-based stopwatch with lap tracking.- Upgraded the CLI buzzer to play a beautiful arpeggiated chime using Windows system hardware chimes.### 7. Deployment & GitHub- Deployed the entire static application to Vercel at a clean production URL: timed-focused.vercel.app- Staged, committed, and pushed the updated codebase to the remote GitHub repository at SameRainbows/Timed.

0
0
6
Open comments for this post

27m 3s logged

I made some more intuitive user changes:

  1. Slingshot Dampening:
    Now, the slingshot isn’t like an Angry Bird slingshot that propels your particles to the other side of the universe (though you could do that if you want, just open the code). All the slingshot coordinates and values are now multiplied by 0.2. We’re nerfing it a lot, but it seems more intuitive that way. Since you don’t know it’s nerfed, you won’t notice there is a higher capacity. In our case, a higher capacity actually means friction. Don’t get me wrong: it’s not particle friction, because they go super fast. It’s friction when trying to get orbits to work.

  2. Repository Tweaks:
    Calling the script from_scratch.py was killing me, so I found something simpler: orbital.py. It’s much better. I updated the GitHub repository so that the current release is orbital.py (the refactored version). While main.py (the previous version) has a few more features right now, orbital.py is much cleaner. Main.py was more of a learning run, and I feel like I’m bringing my A-game with this new refactor.

  3. Look and Feel:
    I really liked the black background and white orbitals of the previous main.py version, so I changed the clinical-seeming style of from_scratch.py. I scrapped that look and made sure the new orbital.py has some taste.

0
0
9
Open comments for this post

27m 11s logged

I fixed the “merging from hell”. The first issue was the radius calculation. When two circles merge, simply adding their radii (r1 + r2) is physically wrong because the combined area grows way too fast. In reality, the area of the circles should add up: A_new = A1 + A2. By plugging in the area formula π × r², we get π × r_new² = (π × r1²) + (π × r2²). The π cancels out completely, leaving r_new = math.sqrt(r1² + r2²). I updated the collision code with this, and now the combined masses have physically accurate sizes.To make this look right, I also fixed the visual scaling issue. Previously, every particle rendered at shapesize(1, 1) regardless of its actual mass or radius. I changed the instantiator so that a body’s shapesize dynamically scales with its physics radius: self.turt.shapesize(self.radius / 10, self.radius / 10). Now when objects collide, you can actually see the merged planet grow on the screen.Lastly, I added a quick reset button. Pressing the R key runs a function that loops through the current objects, hides all their turtles to prevent visual ghosts, clears the main objects list, resets the camera back to center coordinates, and spawns a fresh central star

0
0
11
Open comments for this post

43m 42s logged

Hey, I added merging, but it’s “merging out of hell” because I made a very unphysically true and crude (if you’d call it that), but working prototype of merge_collisions and the merge function itself.

It works as I intended, but not physically truly. Right now, it adds the radii of the circles themselves. If you think about it, that’s physically wrong because there’s a big difference between adding the areas of the circles versus their radii. That’s something I want to get right, so the next time I’m working on it, I’ll make sure to fix it so that we are adding the areas of the circles rather than their radii.

I also found a bit of a problem where the merged objects themselves have a shape size of (1, 1). That’s not right because if you merge two objects with shape size 1, you’d expect the new shape size to be 2. Right now, no matter how many objects you merge, it still stays at 1, resulting in a very, very dense circle.

I’m going to change that so we add the areas themselves, and have that new, bigger area update the visual representation of those astronomical objects.

I’ll keep you guys updated. See you next time.

0
0
5
Open comments for this post

2h 41m 46s logged

Lots of stuff today:

  1. Camera movement: I added camera movement to our new refractor.

  2. Better version of the sling: The older one just expected you to press, drag, and release without seeing much of an indicator. While that works if you know the program a bit, I think a direct, laser-esque pointer that shows you actively as you’re pressing, dragging, and releasing is more intuitive and easier to work with. So I added that.

Now we have intuitive camera movement and intuitive spawning.

For this refactor, we won’t have any UI. All the sliders for gravity and mass will be per keyboard or hotkey.

0
0
5
Open comments for this post

47m 20s logged

Welcome!

Today, I fully migrated to the object-oriented programming architecture. Earlier, the class wasn’t really full OOP; it was just a hidden list factory that appended the stuff via a class instead of doing it manually. I wanted to change that because this is going to be a refactor in an OOP perspective, and that’s what I did.I made sure that all the formulas used the latest changes:1. Earlier, they would use the index of the objects inside the objs list of lists. It would be something like object1 and the index of whichever element it wants to access, like mass, radius, velocity, or coordinates. It was very sloppy, and you had to keep up with what each index meant.2. With an OOP version, you just write object1.mass, object1.x, or object1.vx. Each and every line is more intuitive.I also worked more on the planet spawning. Remember, this is a new file with a different perspective of trying to remake this in an OOP sense, using classes and the benefits that ensue from them.Additionally, today I implemented the balancing of the canvas differences in Tkinter and Turtle:- In Turtle, the (0, 0) coordinate is directly in the middle of the screen.- In Tkinter, it’s at the absolute top left of the screen.You have to make sure that all the formulas and all the logic get the correct version, which in my project is the Turtle version. I added and worked out the logic that would make sure that balance is kept.

0
0
4
Loading more…

Followers

Loading…