stardance has been extended another month! the new deadline is october 31 :)

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

ShinyMist

@ShinyMist

Joined July 2nd, 2026

  • 39Devlogs
  • 2Projects
  • 1Ships
  • 25Votes
Coding novice, but I'm sure i'll knock your socks of (;
Ship

Barrel Roll Bullet

A recoil-based platformer where, instead of traditional jumping and movement, you shoot to propel yourself around each level.

My game includes multiple abilities, unlockable gun skins and 50 levels.

The biggest challenge I faced was developing an accurate and efficient collision system. Initially, I planned to use AABB collision, but because it relies on rectangular bounding boxes, I found that the gun barrel could appear to float when rotating or interacting with objects.

I then experimented with mask collision to achieve pixel-perfect accuracy. However, using a large number of masks throughout a level caused noticeable drops in performance.

I eventually settled on a middle ground using SAT (Separating Axis Theorem) polygon-based collision. This provided much more accurate collision detection for the rotating gun while being significantly more performant than mask collision, allowing me to maintain both responsive gameplay and consistent performance.

I am proud of the persistence I have demonstrated throughout the project. During the early stages of development, I encountered significant gaps in my knowledge, particularly as I was new to object-oriented programming. At times, I struggled with seemingly simple tasks, such as correctly initialising a game window or positioning a rectangle where I intended it to be.

Despite these difficulties, I continued to learn, troubleshoot and refine my approach rather than abandoning features when they became challenging.

  • 39 devlogs
  • 118h
  • 17.91x multiplier
  • 2120 Stardust
Try project → See source code →
Open comments for this post

31m 23s logged

Dev Log #39
.
THE FINAL DEV LOG
.
I am finally ready to ship!!!
.
I did the following:

Made a working read me
Made a working exe file of my game
Removed de-bugging features so game works as intended.
Stopped music overlap from happening
Removed all copyrighted music (may have mentioned this previously)

I used pyinstaller tocreate my exe file.
.
Level buttons now only work if player max player level is less than or equal to the level you are selecting.
.
Stopped music overlap by puting stop music into every game state + in load room function
.
Its been a pleasure to take part in the stardance event. Lets have a look to see how far this project has come!!!

0
0
151
Open comments for this post

2h 37m 18s logged

Dev Log #38
.
DONE
.
I did the following:

Added music that plays while in level
Removed copyrighted music
Finished all GUI
Made code neat using ruff

Will ship at some point soon. See you on ship day!!!!

0
0
90
Open comments for this post

4h 36m 28s logged

Dev Log #37
.
All code is 100% complete now, the only thing left to do is finish all of the UI and then I am ready to ship.
.
Today I:

Fixed portals
Added level skip button
Displayed bonus objectives
Made button rotation work when pressed also
Made gun select display gun images

Portal code issue was caused by object overlapping with tiles, cause tile collision resolution to push the player out of the tile, and at times out of the map. Fixed this by teleporting player slightly above the object (above being determined by orientation).
.
Level skip increases player level, restarts level and spawns player in next level.
.
Bonus objectives screen.blitted on win, text appears green when objective met, red when it hasn’t
.
Used updated rotated button rect rather then previous and changed screen.blit to use center of rect rather than topleft
.
For each button in gun group, i screen.blited that gun into the center of the select gun skin rect
.
Thats all, hope to ship by tonight.

0
0
66
Open comments for this post

5h 13m 34s logged

Dev Log #36
.
I have done most of the updating of UI, having only a few assests left and one level left to edit.
.
In addition to this, I have also made it so that buttons now appear pressed when pressed, rather than disappearing.
.
My easter egg room also stops the music correctly on level complete.
.
The final objectives are as follows:

Have gun select each have image of gun
Waiver has displayed text
Hint video made and linked correctly
All button can only be pressed when on screen
Finish misc Assets
Add death, win, and coins/stars collected based on mission objectives complete

Thats all, I think 20/09/2026 could still be the date for the books, but I’ve got to put the burners on to get this finsished to a level of polish I’m happy with.

0
0
68
Open comments for this post

1h 41m 31s logged

Dev Log #35
.
Been a bit distracted from this project due to school starting but I’ve been able to get a few things done.
.
I have done the following:

Finished dialogue texts
Made it so that dialogue box only appears when there is text
Given kill tiles rotatable counterparts
Added muzzle flash
Added ability pick up sounds
Updated a few more assets

My Git commits have started to get a bit sloppy as i do these little bits on during my free periods, but im getting back into the swing of things
.
The dialogue box will only appear if text != “” and will put the player in the start playing state, without requiring a mouse click like it did previously.
.
Adding sounds was pretty simple so I wil leave an example bellow

        if self.rect.colliderect(ability["rect"]):
            if self.gravity_flip > 0:

                up_gravity_fx.play()

            else:

                down_gravity_fx.play()

            ability["collected"] = True
            self.gravity_flip *= -1

That’s all, I think 20/09/2026 will be a date for the books as I’m confident I will be finished by then.

ALSO, if anyone sees this before ship, could you let me know any ideas for what my 16x16 tile for regular tiles could look like? Many thanks if you respond

0
0
58
Open comments for this post

5h 43m 51s logged

Dev Log #34.
.
Just cleaning some things up now, we are in the home stretch
.
I did the following:

Updated assest
Updated object display code
fixed broken dialogue

Most assets have a fresh new look created in photopea
.
Buttons can now be loaded at rotated orientations
.
Dialogue now does display and does not disapear on first level load. This is because the start playing state was being skipped, i fixed this by using a continue, which skipped the rest of the current loop iteration, preventing the start-state code from continuing to run after changing playing_state.
.
Thats all, most of my time when into design. See you next devlog

0
0
27
Open comments for this post

9h 23m 5s logged

Dev Log #33
.
As you can probably guess, I have done alot

I have done the following:

• Gave all levels the correct level variables
• Made buttons work correctly when rotated
• Made teleport bullets work as intended
• Made gates and broken tiles allow bullets to pass through when collision is removed
• Created an EXE file of my game for friends to use for playtesting
• Made a stat tracker to use playtest information to improve my game
• Corrected all file directories that had to be moved for PyInstaller to work properly
• Fixed the Easter egg room so it now loads correctly
• Added AI declaration comments

That is a lots, so let me quick fire explain how i did them

  1. Painful repetition, change variables, restart level, change tiles, reset level, change ability position, reset. Repeat for level in levels (do this 50 times)
    .
  2. This was partially assisted by AI, but from what I understand the buttons’ Tiled rotation number is used to adjust the collision rectangle’s position so it matches the rotated button object in tiled. Collision check works as did previously.
    .
  3. Teleport bullets originally tp the player if a bullet fired priviously hit a way after pickup, despite no bullet being fired after pickup and also sometimes caused the player to shoot downwards through tiles.
    .
    I fixed the wrong bullet tp by using a self.variable rather than a global one as previously, allowing each bullet to know if they were teleport enabled, rather than all bullets being teleport enabled.
    .
    The tile collision isssue was fixed by by moving the player backwards along the bullet’s path until they are outside the tile, preventing the gun from passing through walls and being pulled down
    .
  4. This one will just explain itself (if tile in list, then ignore kill on contact):
for tile in Tiles.tiles:
    if self.rect.colliderect(tile["rect"]):
        tile_property = tile["property"].get("type")

        if tile_property in Tiles.open_gates:
            continue
  1. This used pyinstaller, not something i really code or anything so, I’ll just say i did it sucessfully
    .
  2. Stat tracker records bullet count, time and deaths/restarts that a level took on completion. Difficulty of a level can also be decided by a play tester by pressing any number button during a level.
    .
    This data is level specific, and on key press of /, will create a json file that holds all the data, which can then be sent for me for review of things like bullet max, time complete bonus time, ect.
    .
  3. Self explanatory, just changed things like “Image/buttn.png” to “Game/Image/button.png”
    .
  4. Restart all function was required in load room function as it contains map load, so the level map that was supposed to load is not displayed instead of the secret easter egg map.
    .
    9.Should have declared AI usage earlier, but I have been checking my chat history and I have been able to determine what sections of my code are AI generated
    .
    That’s all, gotta try and keep my daily streak alive this time to score myself a free plush.
2
0
80
Open comments for this post

3h 32m 36s logged

Dev Log #32
.
Made 50 levels today, that is all.
.
Every 3 levels, a new ability/feature is added. This allows the player to get used to the new thing added, making their later appearance managble as the player is now used to how they function.
.
I have not set the player and goal location co-ordinates for each level, or other variables like if mini stars are required.
.
That’s all for today.

0
0
23
Open comments for this post

2h 13m 6s logged

Dev Log #31
.
I AM FINISHED!!!
.
Well, pretty much at least.
.
Today I:

Completed the Waiver
Made some more levels

I made it so that the text box works with word wrap, enter key and backspace key.
.
I did this by splitting the text into words and lines, then checking each word’s width against the rect boundaries.
.
If the word exceeds the boundaries x, the texts’ x position is reset and the Y-coordinate is incremented, creating a new line.
.
The Enter key creates a new line by resetting x and incrementing y, while Backspace removes the last character from the text string, preventing it from being displayed.
.
The waiver now checks if all fields are filled and allows you to press a button that is connected to a hyperlink that will, in the future, take you to a video created my me showing how each level is complete.
.
Also made 12 levels today, each new feature is slowly implemented one at time.
.
That’s all for today.

0
0
36
Open comments for this post

2h 43m 4s logged

Dev Log #30
.
The big 30!!!
.
Done quite a bit today, just last bit of polishing and then we move towards UI, music, level design, ect.
.
Today I:

FINISHED THE DIALOGUE SYTEM
Added a leave waiver button (was a softlock)
Added a text box to waiver [WIP]

Dialogue system works fully (minus sound but thats still a win in my books). Plays on level start and level completion and once dialogue is viewed by the player, it is not shown to them again.
.
Mouse can be clicked to remove dialogue from the screen, without triggering bullet fire.
.
Also fixed the issue of the text backround being displayed on re-entry and re-completion of the level, but fixed that easily with a variable, setting it to true or false if level had already been completed, then only displaying the text bg when it was true.
.
Waiver leave button pretty simple, basic pygame rect collidepoint detection.
.
Text box sets text_active to true on mouse click, mouse clicks anywhere else set it to false, meaning player can only type when they have clicked on it (when they want to).
.
I appened every event.unicode into a list on key press, meaning I had a list of the players key storkes, then screen.blitted each letter in the list.
.
Final touches are making all fields complete required to acess button that is a hyperlink to video of me completing stages with instuctions to help, and also backspace and enter and wordwrap working with the text_box.
.
Then I think I’m done for the most part on the coding side of things, and will move onto level creation.
.
The only thing I haven’t completed from my long list from a preious dev_log are:

Level editor
Upside down ability
James bond level start
Hint dialogue on multiple deaths
Boss fight

Not to say these aren’t going to be added but they are not simple things and will not really add to much to my game in all honesty. Given the deadline of end of this month I have given myself, I don’t know if I will have time to add these (except for the James bond level start thing as that is a UI thing that will require art, music ect so might work on that when not coding.
.
That’s all, thanks for reading (:

0
0
13
Open comments for this post

2h 15m 48s logged

Dev Log #29
.
I’m pretty close to finishing the code side of my game now, the rest of my efforts will soon be focous toward things like:

Writing dialogue
Making nicer looking UI
Making tiles look good rather than coloured blocks
Animations
Music

Today I did the following:

Re made the dialogue system AGAIN
Created a gun selection screen

My dialogue system displays a word at a time and plays a short noise for each word shown, similarily to undertale voice blips. However, I think it sounds quite bad and I plan to replace it with a set dialogue sound that plays at the start, like animal crossing.
.
My dialogue system now plays on level start and level completion, and does not re-trigger on level repeat, using similar code used in my star tracking code.
.
Gun select code is similar to my level select code, using a different class but the same code, just changing the lock out code to only unlock once star count is >= button number - 1 * 6, so that each button is unlocked for each 6 stars earned, as well as having the default gun already unlocked.
.
That’s all for today, I hope to have a complete game by the end of the month so I can have this finished before the school year starts.

0
0
10
Open comments for this post

2h 10m 43s logged

Dev Log #28
.
Didn’t do alot today, or for the 2 other days…
.
I finally made ghost bullets work correctly and have changed the dialogue sytem a bit
.
The ghost bullets working and not working previously was juts a matter of using variables inside the bullet class rather than global ones, making it work better for some reason, I had the assistance of a friend in fixing the issue, and safe to say it solved it
.
Dialogue sytem has only been changed slightly so not much point documenting the changes, spacing, timing of letters, ect.
.
Sorry for short devlog, I hope I have more tommorrow.

0
0
14
Open comments for this post

3h 24m 4s logged

Dev Log #27
.
More things checked of the list today:
.
Today I did:

Added gravity flip ability
Added teleport bullets
Added player mission objectives

However, some other things i worked on today are still a work in progress, such as:

Diologue system
Ghost bullets (travel through walls)

Gravity flip works similarily to how slow time works, settings the variable self.gravity_flip to -1 on contact, then multiplying graivty strenght by it, reversing the direction of gravity
.
This however made my realign function not work when on the ceiling, so i added to re-align that if gravity_flip was negative, to detect ceiling hit rather than grounded, allowing it to work why gravity was flipped.
.
Teleport bullets work by setting a can teleport function to True on contact, then when true, if bullet collidesrect with tile, self.rect of bullet is equal to self.rect of gun. the can tele[port function is then set to false, making the ability only work once as intended.
.
Player mission objects are as follows:

Complete level
Complete level in set ammount of time
Complete level with less bullets than provided

This uses lists in a way i have never used them before and looks like this

total_stars = 0
level_stars = [[False, False, False] for _ in range(levels)]

If player completes level, level_stars[Settings.player_level - 1][0] for current player level is set to True.
.
If player completes level quickly (complete_time < bonus_time), then …[1] is set to true
.
If player reaches has_won game state with a number of bullets lower than the bullet max, then then …[2] is set to True.
.
Total stars is incremented by one for each goal completed, and if level_stars[Settings.player_level - 1][1,2 or 3] is already set to true, then the increment is skipped, meaning you can only get 3 stars per level.
.
That’s all for now, hope to fix the issues I had today in tomorrows devlog!!

1
0
28
Open comments for this post

2h 6m 21s logged

Dev Log #26
.
Popped ULT today!!!
.
Today I added the following:

Slow time ability
Breakable surfaces
Bullet pickup
Fixed up dialogue system (Not fully complete)

Slow time ability works by setting a time to a decimal then multplying the following by it:

Velocity (Bullet + Player)
Rotation speed
Gravity strength

Multiplying by a decimal reduces the numbers, emulating slowed time rather than reducing fps which is a bit of a cop-out
.
Breakable surfaces work similarly to the gate tiles, the tiles having a alpha value of 0 when bullet rect makes contact with tile of that class and adding that tile type to a list: broken_tiles.
.
All tiles in that list are then ignored by tile collision
.
Bullet pickup works by detecting rect collision between the player and the surface, when contact is made the players bullet count (representing bullets shot total) is reduced by one, increasing the number of shots available to the player by one.
.
Dialogue system now works with full words, voice blips are annoying but will fix late stage when adding polish. Will also make it that player has to click mouse to go to next dialogue screen to give them time to read the text.
.
That is 3 and a bit things of the list, very good progress, juggling summer work, this and most importantly my Minecraft duties has been an upward hill battle but I’m getting there.
.
See you next develop with more progress!!!

0
0
16
Open comments for this post
Reposted by @ShinyMist

4h 10m 22s logged

New camera mode for the main menu!
Demo is in the video! :steamhappy:

Before remaking/overhauling the main menu UI into light/dark mode (and, to look nice, of course), I’ve decided to rework the camera as it’s a bit of a weak point in the menu.

It features:

  • Camera sway
  • Camera switching between points
  • 15 different points for the camera

Now, this has also reminded me that the main menu needs a little bit different of a song selection, as drum and bass for a gentle camera sway obviously doesn’t work.

Miscellanous changes/fixes:

  • Flying trees fixed
  • statsGui (naming fix soonTM) bgcolor and background transparency changed in light mode to that of the old UI.
5
1
90
Open comments for this post

39m 22s logged

Dev Log #25
.
My love for videojuegos has got the better of me.
.
Over theses 2 days all I have done is made some level maps and fixed the spawing positions of both win condition and the player based on the new maps.
.
But I have structure now, and rather than geting destracted, I have set myself some goals to complete hopefully by the end of the month, leaving me time to make the UI look nice.
.
I present to you. THE TOD0 LIST:
.
A - DIOLOGUE

  1. Fix dialogue system
  2. Add hint dialogue
  3. Add new level dialogue
  4. Add completed dialogue

B - ABILITIES/TILES

  1. Bullet Pickup
  2. Ghost bullets
  3. Teleport bullets
  4. Time SLOW (not stop)
  5. Gravity flip ?
  6. Map flip ?
  7. Breakable tiles
  8. Level editor ?

C - UI

  1. James bond level start animation
  2. Gun skin menu
  3. All menus with all required buttons

D - Miscellaneous

  1. Mission objectives (Bad piggies esque)
  2. Determine gun skin unlock criteria
  3. A FINAL BOSS !?!?!

I hope tomorrow if filled with WAY more advancements of the work kind rather than the Minecraft kind (;

0
0
11
Open comments for this post

2h 43m 16s logged

Dev Log #24
.
A progress full day today, but mabye not for the best??
.
Today I done the following:

Added a charcater diologue box
Fixes re-align function so that it works when rotation direction is reversed

Just doing little sidequests for now as I’m trying to hide from my enemy, level design.

The things is I’m not very good at games, so i dont have the reaction time to create very punishing levels with little room for error.
.
So to combat this, I end up making really hard levels or super easy ones.
.
Additionally, I barley add any time to my total when creating levels as it uses a piece of software outside of visual studio.
.
My character text box is pretty much a recreation of the ones seen in undertale, even using the voice blip of toriel as a place holder.
.
This should allow me to add a small story that I will make sure to keep simple, like a mario esque plot.
.
The re-align function was fixed by using the variable rotation direction, then setting that to 1 or -1 depending on contact with reverse direction ability or not
.
Then multiplying rot_speed by that value reverse the direction that re-align moves.
.
I will have to knuckle down on level design tomorrow and make sure each level introduces the abilities and tiles one at a time, letting the player get used to them, allowing for levels that include a mix of multiple to be more approachable.

0
0
12
Open comments for this post

3h 9m 59s logged

Dev Log #23
.
Very good day today, embracing the foddian likeness of my game, making sure that the player gets as angry as possible, just to make that feeling of victory feel so sweet.
.
Here’s what I did today:

LOSER document created (must be filled in to reveal hints, which will be added later)
Change rotation direction ability
New map (Still a WIP)

Document uses follow mouse function and draw line function. Starting the line at the mouses previous position and ending it at its new position.
.
This happens very fast, so the lines do not appear blocky and appear like real pencil drawing.
.
The change rotation ability uses the pbject layer like my previous time stop ability, and now that I understand how object layers work, i was easily able to make this ability by copying my clock abiltiy load and changing the result of contact.
.
The result being making rotation speed negative, reversing direction of rotation.
.
The new map uses a mix of many abilities and objects, but I have not added them in just yet.
.
I could quite easily I feel but I’ve reached my 3 hour brain capacity limit, because realisticly with the time spent making pngs, finding sounds, reading pygame documentation and waching tutorials, I’ve probably spent about 5.
.
But rewards are not for the weak or the lazy, and this little project of mine is helping me leaps and bounds for my future A-level comp sci journey.
.
See you next time, with some jucy new progress!!!!

0
0
9
Open comments for this post

3h 19m 40s logged

Dev log #22
.
Back to business!!
.
Today I added:

Uncompleted level select lockout
Separated tile load into own file
Easter egg room added

Level lockout works by calculating max_player_level, the furthest level a player can select based on if they have beat the previous levels.
.
This works buy using a function to check if current player_level is greater than max_player_level, if it is then max_player_level = player level.
.
Then for level select button with number greater than max_player_level, a red cross is screen.blited ontop,as well as not allowing mouse clicks of the rect from having any function.
.
Tile file separation helped me remove 150 lines from my main file, improving readability.
.
My easter egg has a 2% chance of happening and gives the player a custom gun appearance on discovery.
.
The code used to change the guns appearenece should let me, in future, make custom skins for the gun, skins that could be rewarded for levels complete, secondary level goals reached, ect…
.
I will not share how to reach my secret room, but I think it would be better for someone to stumble across it by accident.
.
Good day today, progress is picking up pace again, good job me!!!
.
Strange, it seems, there is a man here….

1
0
41
Loading more…

Followers

Loading…