|
9551
|
My awesome macropad! by @eunalian | Stardance
|
eunalian
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @eunalian | Stardan Title: My awesome macropad! by @eunalian | Stardance...
|
1793184456.346966
|
1793789256.346966
|
|
9552
|
My awesome macropad! by @Palakchoudhary | Stardanc My awesome macropad! by @Palakchoudhary | Stardance...
|
Palakchoudhary
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Palakchoudhary | S Title: My awesome macropad! by @Palakchoudhary | Stardance...
|
1793379315.4948852
|
1793984115.4948852
|
|
9553
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792932492.804161
|
1793796492.804161
|
|
9554
|
My first slack bot! by @mokshjain939 | Stardance
|
mokshjain939
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T00:20:56Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a Slack bot using Node.js and Slack Bolt. The bot responds to several slash commands, including ping, hello, echo, random cat facts, random jokes, a help command that lists all available commands, and a few other commands. Writing the code part was straightforward, as the guide provided examples of how code for the slash command to be executed looks like, so one could identify the changes required to achieve the desired result for a similar command. The harder part was learning how all the different technologies (Node.js, Git, GitHub server) worked together through the Git push and git pull mechanism. I had to first learn how to set up a Slack app, followed by connecting it to my code, use Git and GitHub, deploy the bot to a VPS, and keep it running using systemd. I also ran into a few debugging issues where the older versions of the code were still being used, which taught me how deployment, Git, SSH, and updating the server actually work. I am proud that I was able to get the bot running 24/7 on a remote server and understand how coding locally, then pushing and pulling the changes, and updating the live bot works. To test the bot, use any of the following commands in Slack: /dsb-ping-mj - Check the bot’s latency. /dsb-echo-mj - Repeat what you say. /dsb-hello-mj - Greet the bot. /dsb-catfact-mj - Get a random cat fact. /dsb-joke-mj - Get a random joke. /dsb-help-mj - Show this help message. /dsb-dogpic-mj - Get a random dog picture. /dsb-catpic-mj - Get a random cat picture. /dsb-howareyou-mj - Ask the bot how it’s doing. /dsb-napd-mj - View the NASA Astronomy Picture of the Day. /dsb-meme-mj - Get a random meme. The source code and README are in the GitHub repository- https://github.com/mokshjain939-cmd/MJ-s-Stardance-Bot .", "repo": "https://github.com/mokshjain939-cmd/MJ-s-Stardance-Bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0B9XALC1NH"}]...
|
[{"post_id": 6259, "ts": "2026 [{"post_id": 6259, "ts": "2026-06-10T14:53:10Z", "hours": 0.9819, "text": "Added some more prompts, finally the bot has 10+ commands, will make it more attractive after a while. I need to learn javascript right now to improve the bot further"}, {"post_id": 5525, "ts": "2026-06-09T10:32:49Z", "hours": 1.0683, "text": "The slackbot is finally coded and all the prompts can be checked by /dsb-help-mj. Now I plan to make some changes/additions that would make the slackbot more useful"}, {"post_id": 5458, "ts": "2026-06-09T07:49:07Z", "hours": 0.7053, "text": "I am currently working on building a slackbot that will respond to several slash commands and additional events. Right now I am using the guide to make the slack bot but I plan to use the internet to learn about various prompts of javascript applicable here and apply that knowledge here"}]...
|
Title: My first slack bot! by @mokshjain939 | Star Title: My first slack bot! by @mokshjain939 | Stardance
Devlogs:
I am currently working on building a slackbot that will respond to several slash commands and additional events. Right now I am using the guide to make the slack bot but I plan to use the internet to learn about various prompts of javascript applicable here and apply that knowledge here
The slackbot is finally coded and all the prompts can be checked by /dsb-help-mj. Now I plan to make some changes/additions that would make the slackbot more useful
Added some more prompts, finally the bot has 10+ commands, will make it more attractive after a while. I need to learn javascript right now to improve the bot further
Ships:
I built a Slack bot using Node.js and Slack Bolt. The bot responds to several slash commands, including ping, hello, echo, random cat facts, random jokes, a help command that lists all available commands, and a few other commands. Writing the code part was straightforward, as the guide provided examples of how code for the slash command to be executed looks like, so one could identify the changes required to achieve the desired result for a similar command. The harder part was learning how all the different technologies (Node.js, Git, GitHub server) worked together through the Git push and git pull mechanism. I had to first learn how to set up a Slack app, followed by connecting it to my code, use Git and GitHub, deploy the bot to a VPS, and keep it running using systemd. I also ran into a few debugging issues where the older versions of the code were still being used, which taught me how deployment, Git, SSH, and updating the server actually work. I am proud that I was able to get the bot running 24/7 on a remote server and understand how coding locally, then pushing and pulling the changes, and updating the live bot works. To test the bot, use any of the following commands in Slack: /dsb-ping-mj - Check the bot’s latency. /dsb-echo-mj - Repeat what you say. /dsb-hello-mj - Greet the bot. /dsb-catfact-mj - Get a random cat fact. /dsb-joke-mj - Get a random joke. /dsb-help-mj - Show this help message. /dsb-dogpic-mj - Get a random dog picture. /dsb-catpic-mj - Get a random cat picture. /dsb-howareyou-mj - Ask the bot how it’s doing. /dsb-napd-mj - View the NASA Astronomy Picture of the Day. /dsb-meme-mj - Get a random meme. The source code and README are in the GitHub repository- https://github.com/mokshjain939-cmd/MJ-s-Stardance-Bot ....
|
1793314106.0052218
|
1793400506.0052218
|
|
9555
|
HelioGuard AI by @nero_404 | Stardance
|
nero_404
|
1
|
24.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T15:30:06Z", "hours": 24.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "After around 24 hours of work across 8 devlogs, I made HelioGuard AI — an educational space risk intelligence dashboard that turns NASA public asteroid and space weather data into understandable risk scores, object reports, and student-friendly mission briefings. I built the project because NASA open data is very powerful, but the raw JSON can be difficult for students and non-experts to understand. HelioGuard fetches near-Earth object data from NASA NeoWs and space weather events from NASA DONKI, cleans the data, calculates risk scores, and presents everything through a responsive arcade-inspired interface. The risk system is transparent instead of being a black box. Each asteroid is scored using its estimated diameter, velocity, miss distance, and NASA hazardous classification: Asteroid Risk = 100 × clamp( 0.30 × diameter score + 0.20 × velocity score + 0.35 × closeness score + 0.15 × hazardous flag ) The final HelioGuard Index combines asteroid and space weather conditions: HelioGuard Index = 0.45 × Asteroid Risk + 0.55 × Space Weather Risk The most challenging part was combining different NASA APIs and turning very different scientific values into one understandable system. I also had to handle API failures safely, create loading and fallback states, design a rule-based ORBIT-01 briefing engine, and make the full landing page and detailed dashboard work on both desktop and mobile. I am most proud that this became more than a simple API wrapper. The project includes a complete visual experience, a documented mathematical model, asteroid reports, space weather summaries, educational explanations, transparent limitations, and a full research proposal. Research PDF: https://github.com/BeBecpp/helioguard-ai/blob/main/docs/HelioGuard_AI_Research_Proposal.pdf Research notes: https://github.com/BeBecpp/helioguard-ai/blob/main/docs/RESEARCH.md When trying the project, click Launch App, explore the top asteroid reports, open the risk explanation, and read the ORBIT-01 mission briefing. HelioGuard AI uses NASA public data, but its scores are an educational mathematical model. It is not an official NASA or NOAA product and must not be used as an emergency warning system.", "repo": "https://github.com/BeBecpp/helioguard-ai", "demo": "https://bebecpp.github.io/helioguard-ai/"}]...
|
[{"post_id": 40788, "ts": "202 [{"post_id": 40788, "ts": "2026-08-04T15:24:34Z", "hours": 2.2217, "text": "Today I spent around 2 hours and 13 minutes doing the final testing and polish for HelioGuard AI before shipping.I tested the live NASA data again, fixed and checked the API connection, and confirmed that the asteroid and space weather sections are loading correctly. I also tested the landing page, Launch App flow, detailed dashboard, risk scores, asteroid cards, ORBIT-01 mission briefing, animations, and mobile responsive layout.I cleaned up the final UI, checked the GitHub repository, README, research PDF, live demo links, and educational disclaimer. HelioGuard AI now feels like a complete student space learning experience instead of only a simple API dashboard.The project uses NASA public data, mathematical risk scoring, and AI-style mission briefings to help students understand asteroid and space weather information in a fun arcade-inspired interface.This is my final devlog before shipping. Next, I am submitting HelioGuard AI for review and continuing to improve it based on feedback."}, {"post_id": 6020, "ts": "2026-06-10T02:51:43Z", "hours": 10.1667, "text": "I spent about 10 hours working on HelioGuard AI, focusing on the premium arcade-style frontend, the Launch App dashboard flow, NASA public data presentation, and student-friendly explanations. I improved how the project explains the HelioGuard Index, asteroid risk scores, space weather summaries, and ORBIT-01 mission briefings. I also worked on the README, research PDF links, GitHub cleanup, deployment preparation, and overall project presentation so reviewers can understand the project more easily. This session helped HelioGuard AI feel more like a complete educational space learning tool instead of just a simple API dashboard. Next, I’m going to keep testing the live demo, polish screenshots, improve dashboard details, and prepare the project for shipping after identity verification."}, {"post_id": 5712, "ts": "2026-06-09T16:40:03Z", "hours": 5.5694, "text": "I spent about 5 hours and 30 minutes continuing work on HelioGuard AI. This was a bigger polish session where I focused on improving both the project presentation and the actual user experience. I worked on the frontend direction, the premium arcade-style layout, and the flow between the landing page and the detailed dashboard. I also kept refining how the project explains NASA public data, the HelioGuard Index, asteroid risk scores, and mission briefings in a way that students can understand without reading raw API data. One important part of this session was making the project feel more complete and serious: I worked on the README, research PDF links, project cleanup, and making sure the live demo and GitHub repo are easier for reviewers to understand. My goal is to make HelioGuard AI feel like a real educational space learning tool, not just a quick API demo. Next, I’m going to keep testing the live demo, improve screenshots, clean up the final GitHub presentation, and prepare the project for shipping once identity verification is complete."}, {"post_id": 4171, "ts": "2026-06-07T12:05:12Z", "hours": 0.4714, "text": "Today I continued polishing HelioGuard AI and improved the project presentation for Stardance. I worked on making the frontend feel more like a premium arcade-style space learning experience, with a cleaner landing page, stronger mission visuals, and a better flow from the homepage into the detailed dashboard. I also prepared the research side of the project so it feels more serious and explainable. HelioGuard AI is not just a visual dashboard — it uses NASA public data, a mathematical risk scoring model, and AI-style mission briefings to help students understand asteroid and space weather information. I added a research PDF that explains the project motivation, data sources, system architecture, mathematical risk model, limitations, and educational purpose. Research PDF: https://github.com/BeBecpp/helioguard-ai/blob/main/docs/HelioGuard_AI_Research_Proposal.pdf Next, I’m going to keep testing the live demo, improve screenshots, and continue polishing the detailed dashboard so the project is ready for shipping after identity verification."}, {"post_id": 4149, "ts": "2026-06-07T11:09:46Z", "hours": 0.7278, "text": "cheacking the design"}, {"post_id": 4130, "ts": "2026-06-07T10:11:07Z", "hours": 2.6983, "text": "I spent about 2 hours and 40 minutes continuing work on HelioGuard AI. This session focused on making the project feel more like a real educational space mission tool instead of just a normal dashboard. I worked on improving the visual direction, organizing the NASA data into a more understandable structure, and refining the student-friendly explanation flow. The project now feels more connected: real NASA public data comes in, the risk model turns it into scores, and the mission briefing explains what the data means for students. Next, I’m going to keep polishing the interface, improve the asteroid object reports, and make the HelioGuard Index easier to understand with clearer explanations and better screenshots."}, {"post_id": 3903, "ts": "2026-06-07T00:33:19Z", "hours": 1.9711, "text": "I spent about 1.5 hours setting up the first working version of HelioGuard AI. I focused on building the core structure of the project: connecting the NASA data idea, planning the risk scoring system, and creating the first dashboard layout. The main goal of this session was to turn the concept into something real instead of just an idea. I worked on the React/TypeScript structure, the NASA API direction, the HelioGuard Index concept, and the first version of the student-friendly mission briefing. Next, I want to improve the UI so it feels less like a normal dashboard and more like a space learning lab for students."}, {"post_id": 3525, "ts": "2026-06-06T14:38:13Z", "hours": 0.6094, "text": "WELCOME TO HELIOGUARD_AI NASA-data-powered AI dashboard for asteroid and space weather risk intelligence."}]...
|
Title: HelioGuard AI by @nero_404 | Stardance
Dev Title: HelioGuard AI by @nero_404 | Stardance
Devlogs:
WELCOME TO HELIOGUARD_AI NASA-data-powered AI dashboard for asteroid and space weather risk intelligence.
I spent about 1.5 hours setting up the first working version of HelioGuard AI. I focused on building the core structure of the project: connecting the NASA data idea, planning the risk scoring system, and creating the first dashboard layout. The main goal of this session was to turn the concept into something real instead of just an idea. I worked on the React/TypeScript structure, the NASA API direction, the HelioGuard Index concept, and the first version of the student-friendly mission briefing. Next, I want to improve the UI so it feels less like a normal dashboard and more like a space learning lab for students.
I spent about 2 hours and 40 minutes continuing work on HelioGuard AI. This session focused on making the project feel more like a real educational space mission tool instead of just a normal dashboard. I worked on improving the visual direction, organizing the NASA data into a more understandable structure, and refining the student-friendly explanation flow. The project now feels more connected: real NASA public data comes in, the risk model turns it into scores, and the mission briefing explains what the data means for students. Next, I’m going to keep polishing the interface, improve the asteroid object reports, and make the HelioGuard Index easier to understand with clearer explanations and better screenshots.
cheacking the design
Today I continued polishing HelioGuard AI and improved the project presentation for Stardance. I worked on making the frontend feel more like a premium arcade-style space learning experience, with a cleaner landing page, stronger mission visuals, and a better flow from the homepage into the detailed dashboard. I also prepared the research side of the project so it feels more serious and explainable. HelioGuard AI is not just a visual dashboard — it uses NASA public data, a mathematical risk scoring model, and AI-style mission briefings to help students understand asteroid and space weather information. I added a research PDF that explains the project motivation, data sources, system architecture, mathematical risk model, limitations, and educational purpose. Research PDF: https://github.com/BeBecpp/helioguard-ai/blob/main/docs/HelioGuard_AI_Research_Proposal.pdf Next, I’m going to keep testing the live demo, improve screenshots, and continue polishing the detailed dashboard so the project is ready for shipping after identity verification.
I spent about 5 hours and 30 minutes continuing work on HelioGuard AI. This was a bigger polish session where I focused on improving both the project presentation and the actual user experience. I worked on the frontend direction, the premium arcade-style layout, and the flow between the landing page and the detailed dashboard. I also kept refining how the project explains NASA public data, the HelioGuard Index, asteroid risk scores, and mission briefings in a way that students can understand without reading raw API data. One important part of this session was making the project feel more complete and serious: I worked on the README, research PDF links, project cleanup, and making sure the live demo and GitHub repo are easier for reviewers to understand. My goal is to make HelioGuard AI feel like a real educational space learning tool, not just a quick API demo. Next, I’m going to keep testing the live demo, improve screenshots, clean up the final GitHub presentation, and prepare the project for shipping once identity verification is complete.
I spent about 10 hours working on HelioGuard AI, focusing on the premium arcade-style frontend, the Launch App dashboard flow, NASA public data presentation, and student-friendly explanations. I improved how the project explains the HelioGuard Index, asteroid risk scores, space weather summaries, and ORBIT-01 mission briefings. I also worked on the README, research PDF links, GitHub cleanup, deployment preparation, and overall project presentation so reviewers can understand the project more easily. This session helped HelioGuard AI feel more like a complete educational space learning tool instead of just a simple API dashboard. Next, I’m going to keep testing the live demo, polish screenshots, improve dashboard details, and prepare the project for shipping after identity verification.
Today I spent around 2 hours and 13 minutes doing the final testing and polish for HelioGuard AI before shipping.I tested the live NASA data again, fixed and checked the API connection, and confirmed that the asteroid and space weather sections are loading correctly. I also tested the landing page, Launch App flow, detailed dashboard, risk scores, asteroid cards, ORBIT-01 mission briefing, animations, and mobile responsive layout.I cleaned up the final UI, checked the GitHub repository, README, research PDF, live demo links, and educational disclaimer. HelioGuard AI now feels like a complete student space learning experience instead of only a simple API dashboard.The project uses NASA public data, mathematical risk scoring, and AI-style mission briefings to help students understand asteroid and space weather information in a fun arcade-inspired interface.This is my final devlog before shipping. Next, I am submitting HelioGuard AI for review and continuing to improve it based on feedback.
Ships:
After around 24 hours of work across 8 devlogs, I made HelioGuard AI — an educational space risk intelligence dashboard that turns NASA public asteroid and space weather data into understandable risk scores, object reports, and student-friendly mission briefings. I built the project because NASA open data is very powerful, but the raw JSON can be difficult for students and non-experts to understand. HelioGuard fetches near-Earth object data from NASA NeoWs and space weather events from NASA DONKI, cleans the data, calculates risk scores, and presents everything through a responsive arcade-inspired interface. The risk system is transparent instead of being a black box. Each asteroid is scored using its estimated diameter, velocity, miss distance, and NASA hazardous classification: Asteroid Risk = 100 × clamp( 0.30 × diameter score + 0.20 × velocity score + 0.35 × closeness score + 0.15 × hazardous flag ) The final HelioGuard Index combines asteroid and space weather conditions: HelioGuard Index = 0.45 × Asteroid Risk + 0.55 × Space Weather Risk The most challenging part was combining different NASA APIs and turning very different scientific values into one understandable system. I also had to handle API failures safely, create loading and fallback states, design a rule-based ORBIT-01 briefing engine, and make the full landing page and detailed dashboard work on both desktop and mobile. I am most proud that this became more than a simple API wrapper. The project includes a complete visual experience, a documented mathematical model, asteroid reports, space weather summaries, educational explanations, transparent limitations, and a full research proposal. Research PDF: https://github.com/BeBecpp/helioguard-ai/blob/main/docs/HelioGuard_AI_Research_Proposal.pdf Research notes: https://github.com/BeBecpp/helioguard-ai/blob/main/docs/RESEARCH.md When trying the project, click Launch App, explore the top asteroid reports, open the risk explanation, and read the ORBIT-01 mission briefing. HelioGuard AI uses NASA public data, but its scores are an educational mathematical model. It is not an official NASA or NOAA product and must not be used as an emergency warning system....
|
1792878612.978165
|
1793742612.978165
|
|
9556
|
Untitled project by @prahaaladh64 | Stardance
|
prahaaladh64
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @prahaaladh64 | Stardan Title: Untitled project by @prahaaladh64 | Stardance...
|
1793217297.98847
|
1793822097.98847
|
|
9557
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792936161.3808491
|
1793800161.3808491
|
|
9558
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792921659.5299246
|
1793785659.5299246
|
|
9559
|
My awesome macropad! by @Dasher2801 | Stardance
|
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T18:51:16Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I developed a “hackpad” featuring four buttons (like keyboard arrow keys), a rotary encoder, and an OLED display, all connected via a XIAO RP2040. The buttons are designed for Discord—specifically for hanging up calls or using the soundboard.", "repo": "https://github.com/Dasher2801/Hackpad", "demo": ""}]...
|
[{"post_id": 11454, "ts": "202 [{"post_id": 11454, "ts": "2026-06-18T18:44:46Z", "hours": 0.0, "text": "I’m working on my Hackpad, which is for Discord (mute, disconnect, etc.)"}]...
|
Title: My awesome macropad! by @Dasher2801 | Stard Title: My awesome macropad! by @Dasher2801 | Stardance
Devlogs:
I’m working on my Hackpad, which is for Discord (mute, disconnect, etc.)
Ships:
I developed a “hackpad” featuring four buttons (like keyboard arrow keys), a rotary encoder, and an OLED display, all connected via a XIAO RP2040. The buttons are designed for Discord—specifically for hanging up calls or using the soundboard....
|
1793440209.9262078
|
1793526609.9262078
|
|
9560
|
Tomodatchi App by @yuanyastr | Stardance
|
yuanyastr
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Tomodatchi App by @yuanyastr | Stardance
|
1793166853.684146
|
1793771653.684146
|
|
9561
|
Untitled project by @etienne-richter | Stardance
|
etienne-richter
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @etienne-richter | Star Title: Untitled project by @etienne-richter | Stardance...
|
1793195602.0907886
|
1793800402.0907886
|
|
9562
|
Gatepass by @Pranjal | Stardance
|
Pranjal
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Gatepass by @Pranjal | Stardance
|
1792806719.3662832
|
1793411519.3662832
|
|
9563
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792947091.737524
|
1793811091.737524
|
|
9564
|
a rc plane by @gabrielF | Stardance
|
gabrielF
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: a rc plane by @gabrielF | Stardance
|
1793162849.3936296
|
1793767649.3936296
|
|
9565
|
Untitled by @iamocean | Stardance
|
iamocean
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @iamocean | Stardance
|
1793288948.340589
|
1793893748.340589
|
|
9566
|
My awesome macropad! by @DhruvaPraveen | Stardance
|
DhruvaPraveen
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @DhruvaPraveen | St Title: My awesome macropad! by @DhruvaPraveen | Stardance...
|
1793425745.2985845
|
1794030545.2985845
|
|
9567
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792929184.5408804
|
1793793184.5408804
|
|
9568
|
More More Diamonds! by @R_PG_ | Stardance
|
R_PG_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: More More Diamonds! by @R_PG_ | Stardance
|
1793458073.1198378
|
1794062873.1198378
|
|
9569
|
My awesome macropad! by @hamzatahir | Stardance
|
hamzatahir
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @hamzatahir | Stard Title: My awesome macropad! by @hamzatahir | Stardance...
|
1792785026.223517
|
1793389826.223517
|
|
9570
|
Capital Chaos by @sol4r_on_hackclub | Stardance
|
sol4r_on_hackclub
|
1
|
171.6
|
3336
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T19:42:41Z", "hours": 171.0, "multiplier": 19.54, "payout": 3336, "blessing": "neutral", "text": "Welcome to Capital Chaos! One of Stardance’s most awaited projects ;) (hopefully anyways) We’ve got chaos, a bunch of random events, a boss fight and so much more for you to explore. SKIP if you are on Linux/MacOS (or you can vote based on the videos - completely up to you) as I only have a windows executable for now. I am honestly super proud of this, and the community built around this game. I hope you enjoy it as well. There have been TONNES of challenges, such as pathfinding, the initial grid also seemed really daunting. To the vacancy count which was literally plaguing me for the past MONTH and got fixed today (it was one line… i know.. maybe I should have used AI). But besides, it’s a sick project. I hope you all love it. Unzip the file in the release and it should be good to go. READ THE README FOR INSTRUCTIONS AND CONTROLS!! THERE IS NO TUTORIAL Read the story, watch the videos if you can and just enjoy the game! It will be on steam in 8-9 months so maybe subscribe?", "repo": "https://github.com/Sol4rOnGit/PocketCity", "demo": "https://github.com/Sol4rOnGit/PocketCity/releases"}]...
|
[{"post_id": 57569, "ts": "202 [{"post_id": 57569, "ts": "2026-08-29T19:13:24Z", "hours": 0.5961, "text": "Thank you all so much for the support! Framework 12 is on it’s way (and this wait is painful). After 171 hours! 19.54x is actually insane and I appreciate it a lot. Join the Discord! I made a discord (click above) and i’ll give you all an early supporter role before I put it out on YouTube and stuff for the “wishlist” when the full game comes out (if you want to stay in touch after stardance is done. ALSO IF YOU COMMENTED WHILE THE GAME WAS STILL CALLED POCKET CITY DM ME ILL GIVE U A SPECIAL ROLE The game beta is still up and you can try it out Currently just doing some minor stuff to the game (Fixed some normal/easy mode not settings correct phases. B2 Bomber should destroy itself and stop the nuke siren once launched), and slowly adding a tutorial but I’m like 90% focused on revising for uni entrance exams"}, {"post_id": 52586, "ts": "2026-08-22T19:35:44Z", "hours": 3.4139, "text": "BETA TEST! Nvm I have to devlog my final changes But lemme talk to those stardance reviewers real quick. Scroll down to see the endless content of my story, and all the community feedback (also on my youtube). Playing the game is a bit of a learning curve so you can watch my videos and stuff on it as well. I’d say watch this one: Boss Fight for the boss fight and maybe one of the other ones that you find interesting. Maybe this one because it has over 1,000 views and still climbing! The game is released there but it is windows only for now (i will release linux and maybe mac on the actual release game don’t worry but I’m super restricted for time right now) SKIP IF YOU’RE ON LINUX / MAC For everyone: Changes: Amended GameAudioManager to adjust for max voices which uses a List based system that appends and unappends. Boss fight also toggles and untoggles the game audio dependant on each audio source, because the game could currently have hundreds or even thousands of audio source which is really bad optimisation. So each audio source that I want to track has a ManagedAudioSource attached which automatically registers and unregisters itself from the GameAudioManager. I also edited the boss fight to make it a touch harder and amended the moves ;) And come and beta test NOWWW. leave all your comments, suggestions etc. on THE NEW DISCORD COMMUNITY!! or youtube, i’ll read it all and, again, thank you all for your support . I don’t know what to put as the image so here."}, {"post_id": 51908, "ts": "2026-08-21T20:18:25Z", "hours": 8.8033, "text": "Final DevLog before First Ship - Boss Battle I don’t think words can explain what I made so click here to watch a video on my probably final major addition (no pressure) & also help with a small dilemma I have. NO!! that does not mean this game will stop development, but i think i finally have enough hours (+10-15 more safety) to get a Framework 12! (and then i will be able to crack on with entrance exams - so i guess development will slow a touch). Of course I’ll ship once the game is polished enough. You might see a devlog or two from the “Capital Chaos Website” - follow me ;) I really hope you guys all enjoy it and now I need to do the readme and stuff. I also realised I was one of the most viewed on Stardance which is honestly amazing and I appreciate all of the support :) And thank you to all the new friends I’ve made and all the followers and commenters. It’s honestly been insane."}, {"post_id": 49800, "ts": "2026-08-18T18:52:58Z", "hours": 3.8472, "text": "Game Sountrack? But before I talk about that, lemme just say the game audio is almost finished, we have menu sounds for clicks and stuff, and i added support for main menu music. The firetruck hoses actually do stuff, floods sound like floods, theres some peaceful background nature sounds and yeah it makes the game feel so much nicer. although i forgot place sounds which was a massive oversight. also my wifi is still working. no idea why, but not complaining. and i’m cooking on a soundtrack lowk although none of it seems correlated in any way and idk how i’ll make it fit into this game but you know what maybe it’ll just all go into some random album. None of the hours put into these songs count but its okay. i’m no pro tho so. all i’ll say is i love some bass"}, {"post_id": 49147, "ts": "2026-08-17T19:36:51Z", "hours": 2.6206, "text": "I’m getting new wifi lol, & 150 hours so yeah i won’t be here and probably will have to post a 10 hour thing BUT on the plus side, we got a nice death screen that has a bunch of quotes that you can read below [SerializeField] private string[] quotes = { \"Opportunities multiply as they are seized \\n - Sun Tzu\", \"If you are going through hell, keep going \\n - Winston Churchill\", \"No empire was built on the first draft\", \"Fall seven times, stand up eight\", \"That which does not kill us, makes us stronger \\n - Friedrich Nietzsche\", \"Out of ash, a new foundation\", \"I have not failed. I just found 10,000 ways that don't work \\n - Thomas Edison\", \"A man is not finished when he is defeated. He is finished when he quits \\n - Richard M. Nixon\", \"It does not matter how slowly you go as long as you do not stop \\n - Confucius\", \"Out of difficulties grow miracles \\n - Jean de La Bruyère\", \"The greater the obstactle, the more glory in overcoming it \\n - Molière\", \"A Pocket Sized City is too small for your ambition. Build again \\n - The Dev\", \"Success usually comes to those who are too busy to be looking for it \\n - Henry David Thoreau\", \"Go big or go home\", \"You can't give up just yet. Stay determined... \\n - Undertale\" }; Maybe you’ll catch the little easter egg there as well ;) Working on adding game audio!! and probably finally enough hours to get the framework 12 (btw I wouldn’t recommend this as a daily laptop (f13 better), I just want something I can write on lol)"}, {"post_id": 48073, "ts": "2026-08-16T11:08:59Z", "hours": 3.8794, "text": "INSANE tree optimisations Went from 60-80 fps @ 4K to 400-450 (in game). Yes a 6 to 7x increase. How you ask? GPU Mesh Instance drawing offloading the CPU work of handling thousands of game objects. In English, I’m no longer spawning thousands of tree objects, but instead telling the GPU to draw the tree instances every frame. This seems quite unintuitive because you’re now drawing thousands of things every second. BUT this means that there are no game objects, so the CPU doesn’t even know that these exist. Also the GPU draws it thousands of times anyways. A game object handles transforms, rotations, etc. that the CPU has to keep track of whether it is active or not. This had the added benefit of the trees having no overhead when the trees are disabled, so you regain all of your framerate! Also I used some neat little script that combined the meshes all together in the GameObject prefab. Now it really should be able to run on your potato PC/Laptop. Combine script using UnityEngine; public class MeshCombineUtility : MonoBehaviour { [ContextMenu(\"Combine Children Meshes\")] public void Combine() { MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>(); CombineInstance[] combine = new CombineInstance[meshFilters.Length]; Matrix4x4 matrix = transform.worldToLocalMatrix; for (int i = 0; i < meshFilters.Length; i++) { if (meshFilters[i].gameObject == gameObject) continue; combine[i].mesh = meshFilters[i].sharedMesh; combine[i].transform = matrix * meshFilters[i].transform.localToWorldMatrix; } Mesh combinedMesh = new Mesh(); combinedMesh.CombineMeshes(combine, true, true); #if UNITY_EDITOR string directory = $\"Assets/Assets/Mesh/Tree/{gameObject.name}.asset\"; UnityEditor.AssetDatabase.CreateAsset(combinedMesh, directory); UnityEditor.AssetDatabase.SaveAssets(); Debug.Log($\"Combined mesh saved to {directory}\"); #endif } } Draw section of GPU Mesh Instancing private void DrawTreeMeshes() { if (treeMesh == null || treeMaterial == null) return; foreach (var kvp in generatedChunks) { ChunkData chunk = kvp.Value; if (chunk.spawnedTrees == null || chunk.spawnedTrees.Count == 0) continue; int batchSize = 1023; int totalTrees = chunk.spawnedTrees.Count; for(int i = 0; i < totalTrees; i+=batchSize) { int length = Mathf.Min(batchSize, totalTrees - i); Matrix4x4[] subMatrices = new Matrix4x4[length]; for (int j = 0; j < length; j++) { subMatrices[j] = chunk.spawnedTrees[i + j].matrix; } int meshIndex = Mathf.Abs(chunk.chunkCord.GetHashCode() + i) % treeMesh.Length; Graphics.DrawMeshInstanced(treeMesh[meshIndex], 0, treeMaterial, subMatrices, length); } } }"}, {"post_id": 47547, "ts": "2026-08-15T14:59:51Z", "hours": 1.4756, "text": "You won’t believe it. I got it working FIRST TRY That’s actually crazy to be honest. Tells you how much expirience those 8 hours of menu development have given me. Someone give me a Unity menu doctorate or sum But on a serious note, we have game difficulty selection and its all nice and self contained. With controller support of course. You can see we have Previous Saves but that isn’t really functional yet. One of the things I learnt is to never rely on the UI giving you the data, only the click, so you’d manually add the elements and then call .value or .isOn respective to the component, and the same goes for dropdowns although I didn’t use one here. Let me know if you think it looks clean or any improvements to the UI readability, etc."}, {"post_id": 47161, "ts": "2026-08-14T20:58:41Z", "hours": 10.3042, "text": "I HATE Menus (in Unity at least) Genuinely hate them. But yeah we got settings menu working (which genuinely took like 5-6 hours because of stupid unity legacy stuff vs new stuff and then unity 6 vs 2023 version stuff i was used to) AHHHH I don’t remember it being this painful in Godot to be honest so maybe Godot is better for that? i had to get rid of VSync because it only worked on refresh. Created a debug menu to test performance, just to see that the only useful thing there was FPS and like RAM usage, and some engine stuff like active Rigidbodys. I couldn’t see the CPU utilisation or GPU utilisation which was… the thing I wanted to see. Although don’t worry performance does seem to be reasonable and early to mid game I can push over 1000 FPS on potato settings (specs at bottom if you care about them). It does obviously go down as the game continues on, but I think it’s quite optimised. Even with shadows its on 500+ FPS with a mid sized down. Although adding trees will quarter your FPS numbers. but it looks pretty so there’s your tradeoff. Although problematically if you turn trees off and you had already generated trees the fps stays low even though you’re not rendering it? I don’t know why unity is so weird. The game is quite unbalanced, but we’re in the final polishing stages (my target is 150 hours for the framework and hopefully it’s secure! (vote nice and high thanks - i did put a lot of effort into this game.) Up next: Difficulty selection Polishing Rebalancing updates Release!"}, {"post_id": 45186, "ts": "2026-08-11T14:41:21Z", "hours": 5.9322, "text": "NEW NAME!!! Flash Floods + Main Menu If you remember, Pocket City is a game that already exists so now it’s called Capital Chaos. Thank you YouTube comments! And all of you as well, for the suggestions. Ofc new video to go with it: watch by clicking here! I created flash floods that.. well flood the entire map. It’s meant to be a little toned down of a disaster, thats more survivable because it gives the game a touch more balance. It stops all services from working, so that could be detrimental during a virus attack. But on the other hand, it stops every single fire and prevents new ones and explosions. A lifesaver if theres a nuke, it gets completely nullified. Also new main menu, I think it looks pretty neat. Especially compared to the old one."}, {"post_id": 43501, "ts": "2026-08-08T20:10:46Z", "hours": 9.3828, "text": "Nukes… from a plane A famous plane. The B2 Bomber. Idk gng I got bored. No but it drops a nuke that decimates everything in a decent radius and then sets everything in a bigger radius on fire, and now we have a new rare event called a “military invasion”.. that spawns like 8 helicotpers AS WELL as the b2 bomber. The B2 Bomber starts a few clicks out and then flies toward the set target building. Then it drops the nuke, and you have a few seconds to try and kill the nuke before it kills you, and on impact (yes we are finally using rigidbodys as they are intended) it explodes. You better have that turret system ready. Of course, it’s clearly not enough. So maybe I’ll add a anti-missile system as a YouTube comment said. Speaking of YouTube, thank you for all the support :) 100+ comments goes crazy, and we’re on 73 subs up from the previous 29 literally 3 weeks ago. Not subscribed? Help a fellow dev out: TechScope Channel"}, {"post_id": 36089, "ts": "2026-07-27T23:24:15Z", "hours": 6.7969, "text": "WORKING AIR DEFENCE + ATTACK HELICOPTERS So we got working air defence turrets with some predictive aiming, and attack helicopters that shoot missiles at random buildings. Although you’re unlikely to get 3 attack helicopters at once… for now. The helicopters blades do spin, they bob up and down, they go towards buildings. They shoot out these missiles, which pathfind their way to the targetted building. They all have a healthsystem which means that the turrets do some damage on collisions only though, one turret might take a while but two (or the 7 you see below) will MOW them down. Still have to hook it all up to the Finance Manager, Special Building placement and other boring stuff, but… I need more IDEAS!! (read this thx) …for more Military stuff that can be added. Tank wars? Who knows. I was thinking of a military invasion as being one of the rare events which spawns like 10 missiles and 5 attack helicopters and maybe a B2 bomber or some stuff. I also need more allied options, maybe I’ll add like an anti-bomb turret that is specifically for the B2 bomber or something and does 100000 damage. Or maybe your own airbase that spawns an allied helicopter and now you have dogwars. or maybe your own plane. idk So yes @Adam_Lotfalla this is what the helicopter was for. Yay more things to worry about!!! Still have integrations left! I’ll see you (hopefully) tomorrow once that’s done. but its midnight now so goodbye."}, {"post_id": 35447, "ts": "2026-07-26T21:18:10Z", "hours": 1.8178, "text": "Hmmmm… What’s cooking? (Blender just WON’T count toward my hours but prolly spent 2-3 extra hours here) The helicopter blades actually spin. And W Unity particle system for the missile."}, {"post_id": 33603, "ts": "2026-07-23T17:37:47Z", "hours": 2.6228, "text": "I NEED YOUR HELP Pocket City already exists as a game. I know this is stupid and I should have checked this before starting since I had the intention of publishing it to steam but here we are. If you want more details, or more knowledge about the game check this video out: Video Oops…"}, {"post_id": 32074, "ts": "2026-07-20T23:48:35Z", "hours": 6.6703, "text": "UFOs in an Alien Invasion 💔💔 The second rare event addition to Pocket City! Get a chunk of your population zapped up by some not so friendly aliens… Any more ideas, let me know below! But it was pretty neat to implement. 3D modelled it and everything. 3 hours of doing god knows what. Tried to figure quality settings out and probably did smth else but was too busy with the World Cup to remember what I did. Probably bug fixes and stuff. Oh yeah and you see a pretty cool ripple pulse thing that propogates through the map. Although it is a little weak right now but i’ll fix that next time. Super tired. mb"}, {"post_id": 27226, "ts": "2026-07-12T16:41:03Z", "hours": 4.4661, "text": "Bugs are genuinely taking the life out of me Genuinely the worst thing ever. I STILL can’t figure it out but I had to post my weekly devlog anyways. Can you believe we’re 28 weeks into 2026??! Here’s the chaos where I accidentally created a “Pocket Empire” (Day 1105) Watch the video (click the title) if you wanna see how I ended up here and a minor crash out. very minor."}, {"post_id": 26578, "ts": "2026-07-11T14:19:18Z", "hours": 9.2114, "text": "I’m being forced to post Yeah thanks stardance. 10 hour limit for what. Probably spam filter. Also MASSIVE BUG(s). One is that the game just randomly deletes all the buildings from a chunk. No idea why, I’ve been at it for so long. Another issue is the stupid vacancy counter which has been broken FOREVER but atleast now it doesn’t go negative. I have a serious feeling I will have to spend a week just POLISHING the game. Whatever, Currently working through a new feature of allowing you to use your money that you spent so long accumulating to try and fix the chaos that you went through. This is done through the “Council FX” which I may rename if you guys can think of a better name, and you can see the countless things to do such as: Taking On DEBT!! YAY!! 100k that gains 1% every day. Seems low.. but it will pile up very quickly since it’s compound interest. Overclocking the grid for free placement + infinite water/power Maximising Housing/Business revenue Curing all infections … and many more as well as the ??? at level 100… who knows what that does. £2.5 million btw. Of course, those levels are the XP, which has finally given that a use. And no you wont be at level 11000 just like that, i’m just being lazy for testing. Also rebalanced so that all of the commercial buildings have ~10-15% of their previous employment caps. So that you’re not just spamming residential. It also makes industrial more useful as they have more employers even though they produce less money."}, {"post_id": 23054, "ts": "2026-07-05T19:50:43Z", "hours": 2.3469, "text": "Main menu 👀 I need help. UI clearly isn’t for me"}, {"post_id": 22419, "ts": "2026-07-04T21:33:08Z", "hours": 7.5172, "text": "CRIME!!! + C# Generics I added Arson and added a Police manager that goes out and solves these crimes. Lots more to come, let me know of any ideas you have! But before that let me teach you ALL something. C# Generics. I had a bunch of scripts that all did ABOUT the same thing but with different. This was FindClosestHospital, FindClosestFireStation and the thing I was adding which was FindClosestPoliceStation. It felt quire redundant to copy the same lines but instead of Hopsital it was replaced with FireStation or PoliceStation. //Generic functions private T FindClosestReachableService<T>(Vector2Int targetPos, Func<T, bool> hasAvailableVehicles, out List<Vector2Int> bestRoute) where T : Building { T closestBuilding = null; bestRoute = null; int shortestRouteLength = int.MaxValue; bool foundBuildingOfThisType = false; foreach (var kvp in gridManager.GetMapGrid()) { GridManager.GridTile tile = kvp.Value; if (tile.buildingScript != null && tile.buildingScript is T serviceBuilding) { foundBuildingOfThisType = true; if (!hasAvailableVehicles(serviceBuilding)) continue; List<Vector2Int> testRoute = CalculateRoadPath(tile.buildingScript.gridPos, targetPos); if (testRoute == null || testRoute.Count == 0) continue; if (testRoute.Count < shortestRouteLength) { shortestRouteLength = testRoute.Count; bestRoute = testRoute; closestBuilding = serviceBuilding; } } } if (!foundBuildingOfThisType) { bestRoute = null; return null; } return closestBuilding; } Above is an example of the C# generic. We have “T” type, and I think this is a good place to learn about them. Instead of defining the function as returning something like Building , we make T a type. and you can see it passed in a little <T> after the function name. We can also pass in entire functions like Func<T, bool> which is utilised as shown below: Building bestStation = FindClosestReachableService<PoliceStation>(building.gridPos, ps => ps.HasPolice(), out route); you can see ps => ps.HasPolice() calls that out. And finally, to define what T is meant to be, I’ve added where T : Building . You can do this many times, such as by having both a T as well as a U! and you’d have a repeated where T : Building where U: PotatoChips or something idk what U is meant to be bro. This was my first time using it but it’s pretty cool and if you’re using C# I’d recommend learning it as it saved me like 200 lines of code and changing something 3 times to change the same thing! And yes, I added a third thing which is Arson! which is a crime based thing, and you have a visual that shows up as a timer. if a police doesn’t solve the crime it sets on fire. It’s not too bad but it adds a use for the police, with much more to come for the police to deal with in the future! Also added asteroid BOMBARDMENT as a debuff. Yeah it’s brutal. 3 strikes… thats up to 108 tiles DESTROYED and set on fire. And of course, the image is from a youtube video: Click me!"}, {"post_id": 20327, "ts": "2026-07-01T22:02:59Z", "hours": 4.1806, "text": "BETTER UI + XP At the top of the image you can see a little progress bar… yep I’ve added XP now. Got plans for that, probably going to allow you to unlock stuff later. Like the lockdown ability etc. The UI has been overhauled. The actual images are a touch on the placeholder side apart from the road but it looks pretty good. You cycle between road, zoning and special building placement with 1, 2 and 3. Use R to rotate between the modes like residential, commercial and industrial zoning as well as Utilities & Emergency for the special buildings. Then finally T to rotate between those specific buildings. Complicated? Maybe? But it’s also a lot faster. I have completely lost my muscle memory of spamming R like the “good old days” though. Looks good? Bad? Horrible update and the game should never be changed ever again? Best update in the world and I should win £1 trillion? What do you think?"}, {"post_id": 17186, "ts": "2026-06-27T21:52:31Z", "hours": 9.9433, "text": "MAKE IT RAIN ASTEROIDS Pretty long run honestly. But before that, let’s talk about retrofitting your buildings. Earthquakes are pretty bad. Very bad when you loose your 100k building in a moment. So upgrade it. Yes it’ll cost you 35 to 55k now. But is your peace of mind worth that? And I added asteroids! These fly down and annihilate everything in a 3 unit radius and then set everything else in the 6 unit radius on fire. Lots of minor bug fixes as well, trying to get the game really polished now. Some rejigging of the game’s back end, such as creating a new abstract class for employer and reworking the systems to ensure that they run more smoothly and I believe almost finally fixing the unemployment/vacancy problem. I say almost because every 5 runs I see the game yell at me that it didn’t count something correctly but honestly I’ve spent so long on this I don’t even know if it’d be harder to just rewrite the entire employment system. For more detail, see my video linked below! See if you guys like it, my first proper long form I Added ASTEROIDS that ANNIHILATE your Adorable City And boy will this thing cook your economy."}, {"post_id": 15293, "ts": "2026-06-24T20:46:40Z", "hours": 7.6331, "text": "POLITICS!! + Debugging Hell v2 I mean I guess it is? Not too sure. Event Manager completely overhauled. Double events now no longer have the chance of repeating the same event. Created a new GameEffects script which just takes a bunch of simple code away from EventManager and plays the basic functions such as the “tax revenue increases” which you see below. This was quite a headache to create, and I severely underestimated how much time this would take. I have 2 extra nested classes inside of EventManager for Political Question and Political Scenario. [... inside EventManager.cs ...] public class PoliticalQuestion { public string Question; public TaskCompletionSource<bool> TaskCompletionSource = new TaskCompletionSource<bool>(); public Action onAccept; public PoliticalQuestion(string question, Action onAccept) { Question = question; this.onAccept = onAccept; } } public class PoliticalScenario { public string description; public Action runnable; public PoliticalScenario(string featureDescription, Action functionality) { description = featureDescription; runnable = functionality; } } [Header(\"Political Question Variables\")] public List<PoliticalQuestion> PendingQuestions = new List<PoliticalQuestion>(); public event Action onQueueChanged; private PoliticalScenario[] goodFeatures; private PoliticalScenario[] badFeatures; The political question is sent off to the UI manager, which displays it as shown below. Then it handles user input pressing Y/Enter or N/Esc to accept the user choice, and returns it back to the Event Manager. Seems simple enough, yet there are many ways to do it but I think that the above implementation works the best out of all the ones that I tried. I attempted to use Game Manager as a middleman but that did not work out - so I resorted to passing an entire class. The political scenario allows for the string to actually do something, so that the game knows what to process and what the user agreed to without creating a bunch of variables, and can allow for stacked political question events which is nice. Game’s looking really neat, and the multipliers and stuff can make the game go very crazy very quickly. Too much of a good thing is a bad thing!! Debugged the entire system for like a solid 3 hours it was actually bad. Came first in the UK tho!! I’m back after those 6 exams are done. Yes I know the UI looks pretty bad but it’s good enough for pre-beta testing. Oh yeah, speaking of UI everything is more bold. Figured out how to do that."}, {"post_id": 14641, "ts": "2026-06-23T20:29:50Z", "hours": 2.74, "text": "I HAVE A PLANN For the spinal sprint toward completion. Should end up taking me to hour 70-75? Then we polish the UI and add a main menu… lacking feature I guess. Anyways, reorganised the code base and split game manager up, created folders and fixed dependencies for everything. There is now an event manager, which handles all of the events separately, and as you can see from this simple to-do list (should my next project be the to do list to end all to do lists with calendar integration and stuff???) that I have completed the first bit “Weighted Event system”. So now nothing has an equal chance of happening! Also as a side effect made adding new effects a lot easier due to the nested WeightedEvents class which was similar to an idea I had in my old minecraft mod plugin and transferred the skills across the languages. Quite nice neat code actually, that isn’t 600 lines long, so I can quickly show it to you below. It’s very applicable and I believe I have used it twice or three times in the past 4 months alone. The declarations for the events now look like this, very centralised and easy to add/remove events and modify the weightings. Called in the Start() function. weightedEvents.Add(new WeightedEvent(\"Nothing\", 20, () => { })); weightedEvents.Add(new WeightedEvent(\"Earthquake\", 5, Earthquake)); weightedEvents.Add(new WeightedEvent(\"Fire\", 40, SetBuildingOnFire)); weightedEvents.Add(new WeightedEvent(\"Virus\", 20, () => { TriggerVirusOutbreak(); } )); and the class is just simply storing the name, the weight and a weighted Event. public class WeightedEvent { public string name; public int weight; public Action weightedEvent; public WeightedEvent(string name, int weight, Action weightedEvent) { this.name = name; this.weight = weight; this.weightedEvent = weightedEvent; } } we do need to store the total weight which happens on the Start() function currently. When playRandomEvent() is called, we increase the cursor by the event’s weight until it is greater than the rolled random number between 0 and the total weight, at which point the class’ event is called. Broke nothing in the end! That’s great isn’t it, especially after migrating a bunch of “legacy” code. Hopefully didn’t jinx it."}, {"post_id": 12737, "ts": "2026-06-20T20:33:13Z", "hours": 4.3403, "text": "Okay now i SUCK at my own video game. Don’t worry it’s hard mode. Also lost 2 hours of work somewhere cuz it didn’t save? Don’t understand how. That’s always great isn’t it. But still, 62 days in and I’m fried because of one silly mistake I made 40 days ago. Really teaches you consequences I guess. Spent my time completely overhauling how everything works. You used to make too much money, so I made the revenue even more population based, by making the max revenue a multiplier of the max population. Completely rewrote the losing population, unemployment and vacancy calculations to prevent strange negative numbers which was irritating me for the past one and a half weeks. Also overhauled the inflation to use a formula instead of a very rudimentary lookup table from if statements which is staged into a end-game (130 days+) and early game stage with 20% and 2% simple interest respectively (no not compound for once - that would make the game too hard. Extreme mode?) The game is actually like a good game now. I don’t know how to explain apart from that though."}, {"post_id": 11524, "ts": "2026-06-18T20:22:52Z", "hours": 2.1214, "text": "I FINALLY LOST IN MY OWN GAME!! Rebalancing the game slowly but surely. Currently added inflation, which increases the price of everything as the days go by. It gets less severe the longer you play but the inflation rate stays high. The game days now vary, take 5 seconds at the start and slowly get faster and faster toward 1.5s linearly. The inflation rate also increases with bands as the game progresses so you need to keep up. This makes the game a good progression, but make one mistake during an earthquake and it might be ggs for you. There is now finally a game over function… although no restart but don’t worry about it. It just pauses the game and tells you that the game is finished. Next up: Detailed Finances, Rubbish? (follow thx)"}, {"post_id": 10848, "ts": "2026-06-17T19:53:45Z", "hours": 1.2564, "text": "Currently rebalancing the video game to make the game progression more realistic as it is currently extremely difficult at the start and stupidly impossible to die toward the end. Completely forgot to tell you guys that you can follow my projects on my YouTube: Video Like & sub if you can… mb for the self promo though. Sadly I have 6 exams next week so the next 2 weeks are most likely going to be slow ones… not dominating the leaderboards anymore."}, {"post_id": 10754, "ts": "2026-06-17T17:25:21Z", "hours": 4.8722, "text": "Working healthcare! The game now has a virus… and it spreads pretty quickly. Houses get infected, added to the random event chances on top of earthquakes and fires. I created hospitals that dispatch ambulances as required. Now all services cost money. Using the same A* algorithm from last time, but a little more complex due to the nature of the virus spreading to random buildings. This requires the game to check for any viruses. I created an UI that displays the day progression, using actions & delegates again. The day length is now no longer fixed, but instead it becomes smaller the longer you stay on the map, to try and add difficulty ramping. The game is currently very difficult at the start and incredibly easy at the end, so I’m trying to reverse this a bit and make it hard at the start but terrible towards the end. Also just realised there’s no ending lol - you just become broke and softlock yourself. Never done it to myself which really speaks out about how UNBALANCED the game is. I think it’s time to work on game balancing now before implementing new features, and over half way to shipping? maybe at 65-80 hours in at this rate?"}, {"post_id": 8771, "ts": "2026-06-14T16:10:08Z", "hours": 4.5692, "text": "WORKING PATHFINDING ON THE GRID! Created new assets so the game looks complete now! You can see the firetruck going from the Fire station all the way to the burning building where it will extinguish it. Yes, it follows the roads as intended and uses the A* algorithm to figure out the best path. And they shoot water out, so visual feedback for everything. This was super fun as it was the first time I’ve implemented the A* in a video game on a grid that procedurally generated. The coal power generator, fire station and fire trucks have models now, I think I made them good enough to fit with the game. Police station and healthcare to still be implemented but it’s looking good so far. This required creating a new services manager, creating a pathfinding script, updating global services and how everything interacts with the fire, and creating reverse pathfinding and small details. It’s coming together really cleanly now."}, {"post_id": 8393, "ts": "2026-06-13T23:23:02Z", "hours": 7.1706, "text": "Debugging HELL I added fires, which you can see in the corner. Unity Particle system actually really cool for that by the way. This forced me to rewrite how fires work and add new bits to the Building parent class. That was fine. Had to update the UI to show you that an earthquake was happening, which works more reliably than last time and I figured the ghost error out. I decided to implement water & energy requirements. Overhauled ChunkManager to allow for this, as each chunk needs enough. If it doesn’t produce enough, it imports from other chunks. If it can’t do that, everyone starts packing it up and leaving. Added this to city stats. Then modelled a cute little water tower as you can see below. Then I added energy, lots of chaos. Trying really hard to avoid circular loops to avoid a stack overflow, but it’s looking pretty good. User warnings now show up, like when an earthquake happens, or if a building burns down or if you can’t do something or don’t have money for something. Now I think I have time to do the fun part - creating chaotic fun stuff to make the city feel even more alive. But it’s looking pretty good right now. It’s getting close to being shipped, almost 40 hours in. Like & follow for the link ;) Now I really need to sleep. OH NO AND REVISE FOR THE PHYSICS TEST ON TUESDAY"}, {"post_id": 8051, "ts": "2026-06-13T13:04:47Z", "hours": 2.0944, "text": "It’s been a really long time since I’ve posted. Some progress going on here. Little sneak peak of the fires… yep. You thought the game was gonna be peaceful? On another 7+ hour sprint today"}, {"post_id": 7093, "ts": "2026-06-11T21:27:16Z", "hours": 4.3672, "text": "Clean codebase always pays off (unless you want to keep your job apparently?) Fixed the vacancies counter, as before I was using = instead of +=. Told you it’s the little things that catch you out. Created a safer version of the draft forceRemoveElement() that accounts for jobs and residents when destroying a building (houses/shops/industry). This now updates the game realistically, e.g. if you destroy a house, then you reduce from the population. If the residents were employed, then it removes positions from buildings. If they were unemployed, then we remove it from the stats. Since I am not storing direct references between buildings but creating a game pool for performance, this makes the operations require lots of calling. This could probably be optimised in the future but I will do that near the first release due to the ever-changing code base. This required updating GameManager.cs to have LosePopulation(), LoseJobs() with a helper RemoveWorkersFromBuildings() function. Luckily the lists in GridMananger that I made like 20 hours ago for “future proofing” came in useful. Finally, you can press F to show city statistics and it updates in real time."}, {"post_id": 6481, "ts": "2026-06-10T22:00:31Z", "hours": 1.0161, "text": "What’s the difference between these two: int maxEmployees = 50; int employees = 25; float taxRevenue = 1500.0f; ONE : float revenue = (employees / maxEmployees) * taxRevenue; TWO: float revenue = (employees * taxRevenue) / maxEmployees; Mathematically, they’re the same. a/b * c = c/b * a However, I missed one thing while coding (a lot harder to see when it’s not just this). They’re both integers. now what C# does is it divides 25/50. we get 0.5. but they’re both integers, so it tries to store it as an integer, which floors it to a 0. Therefore, it’ll suddenly jump to max revenue when the company is full. obviously not what was intended. Option 2 makes you multiply the integer with a float, and stores 25 * 1500 as a float, which can now be nicely divided by 50 to get the value that we inteded. Sometimes… actually, no MOST of the time it’s the little things that catch you out. Anyways, this has very much balanced the game. The companies get as many employees as they can, then grow by 1 employee each day. Their revenue scales with the employee count, so now residential houses are useful for once. If anything, essential. Next up: Road tax, Land tax. This might be the one time you want tax… or maybe it’s too much?"}, {"post_id": 6445, "ts": "2026-06-10T20:48:12Z", "hours": 1.1464, "text": "Sometimes, the most productive thing you can do is destroying everything for a clean slate. So that’s what I did and refactored my codebase, painting my GitHub red. The old city generation code ended up becoming messy spaghetti code that made it difficult to debug and work on it. And that sort of legacy code when I look back in a month is what ends up shelving projects for years on end. This half an hour will save me many in the future. I also removed the cluster expansion method of building expansion completely as it created annoying expansions that didn’t make sense of everything being 1 square off a road. Also created a GameManager and moved aspects of GridManager and FinanceManager to the new script, to try and centralise the logic and stop having random bits such as the day manager in the FinanceMananger, which didn’t make an sense. Also yes, I wasted 20 minutes trying to figure out what was going wrong when I forgot to add GameManager.cs to the scene 💔"}, {"post_id": 6367, "ts": "2026-06-10T18:39:39Z", "hours": 3.0794, "text": "It can’t POSSIBLY BE THAT HARD CAN IT? No but you have to mix up TAGS AND LAYERS. There’s some error you got 5 builds ago but NEVER APPEARED AGAIN. EVEN HOURS INTO TESTING. HOW DID IT FIX ITSELF?! The UI now updates how much you gained in the past day! But anyways, you can finally toggle between the layers… after too much debugging (and realising it was just me being stupid). But it’s okay I’ll hopefully get that laptop from this blood sweat and tears. Look how gorgeous it looks now!"}, {"post_id": 5918, "ts": "2026-06-09T22:00:15Z", "hours": 5.0561, "text": "Did you know it costs more to remove a road than create one?! Strange… Finally have a working economy in the game now! It’s VERY unbalanced. You WILL become very rich. And residential is currently useless, and everything just has a set employee count for now. But that will change soon, and we’ll make the game intelligent. Also the game clock is currently in the Finance Manager which is a little odd so maybe I’ll fix that later. But, I have used actions & delegates to optimise the game handling of the ridiculous amount of scripts for each building that will be running once the cities become larger and larger. Created a UI manager to update the script, which uses the above actions & delegates from the script manager. Created a Finance Manager which led me to have to recode GridManager for monetary support, but that was honestly less painful than it sounds. I also spent a considerable amount of time debugging last post’s Zoning. The code has multiple ways of producing a building and this caused me to have to go back and go through all of the code line by line to figure all the pathways out and debug it eventually. And yes, as promised I made it cost money to zone. Every action, such as creating a road and destroying them cost money and using my amazing research skills of using the first google result, destroying a road costs double placing a road! I think I should sleep. See you soon!"}, {"post_id": 5134, "ts": "2026-06-08T20:27:14Z", "hours": 2.4142, "text": "CITY ZONING! Annoyed that a massive skyscraper decided to spawn right next to a nice cozy cottage? Not anymore! You can zone areas by residential, commercial and industrial. There is also a “No Build” zone for areas that you just want to keep clear for now. This will eventually cost you money, because paperwork is really expensive apparently. (And to keep the game balanced of course). But there’s no money yet. I think you should like & follow to see how the game’s economy works."}, {"post_id": 4989, "ts": "2026-06-08T17:13:15Z", "hours": 2.5267, "text": "Pocket City Dev 5 The terrain was a little bland, so I decided to spice it up with nature. To fill the grid up, I decided to implement trees. Created a few basic tree grid varieties and implemented it into GridManager.cs. However, this forced me to spawn all of the trees in the Start() function which causes a longer loading time, CPU spike and worst of all it makes it so that after the initial radius no more trees spawn. Increasing the radius exponentially increases the amount of trees being added (because each ring has more grid sections to cover). So i had to pivot. I created a new Chunk Manager, split the main grid up into 16x16 chunks, and checked the player camera and only loaded the surrounding chunks. This makes trees spawn around the player continuously. However, this would become laggy as it would happen every frame. Two ways I decided to prevent this: Check if the player had changed chunks. If it’s still the same chunk, early return to skip the entire code process. Check if the nature has already been loaded. Only load if not loaded. This obviously saves on time complexity, and allows me to have the freedom of creating varying tree density. It also makes it so that the trees do not regenerate constantly. And that completes the visuals for now. Probably will add more foliage and other variety in the future, but for now this will suffice. Finally, this has a severe performance penalty. To cater for lower-end devices, I added a toggle which will later come to a settings menu for ~4x the performance without impacting gameplay. Optimisations, such as chunkloading and LODs will be added later to increase the performance with trees, but that will come after the core game is finalised."}, {"post_id": 3868, "ts": "2026-06-06T23:09:38Z", "hours": 2.8567, "text": "Hello everyone! The city is finally generating. They automatically generate alongside roads or try grow in clusters with each other. Game looks pretty sweet. Almost 9 hours in, I think it’s time to get some sleep now."}, {"post_id": 3730, "ts": "2026-06-06T19:33:02Z", "hours": 4.095, "text": "Coming first in the UK leaderboard is pretty honourable. Anyways, working on Pocket City and we’ve almost got generation of buildings and I’ve got a lot of things lined up for this project. I really need that framework 12 💔. The roads have a cursor and you can destroy and create them in a row as well, camera movement is more polished with a sprint key. Got all the building assets and everything ready. What a entry to stardance & hackclub!"}, {"post_id": 3473, "ts": "2026-06-06T12:53:43Z", "hours": 1.3806, "text": "Procedural road addition, so that when you add a tile (which is still done through code currently), it will decide which road layout to add, be it an intersection, 4 way, 3 way, a road turn or anything else. Added clean camera movement with WSAD + scroll as well."}, {"post_id": 3429, "ts": "2026-06-06T11:20:47Z", "hours": 1.0264, "text": "Hello! I’m working on creating a top-down 2D-styled but 3D game where you control a city. I’ve got this grid layout so far and it works fabulously and I somehow got the rotations correct on the first try 🤣"}]...
|
Title: Capital Chaos by @sol4r_on_hackclub | Stard Title: Capital Chaos by @sol4r_on_hackclub | Stardance
Devlogs:
Hello! I’m working on creating a top-down 2D-styled but 3D game where you control a city. I’ve got this grid layout so far and it works fabulously and I somehow got the rotations correct on the first try 🤣
Procedural road addition, so that when you add a tile (which is still done through code currently), it will decide which road layout to add, be it an intersection, 4 way, 3 way, a road turn or anything else. Added clean camera movement with WSAD + scroll as well.
Coming first in the UK leaderboard is pretty honourable. Anyways, working on Pocket City and we’ve almost got generation of buildings and I’ve got a lot of things lined up for this project. I really need that framework 12 💔. The roads have a cursor and you can destroy and create them in a row as well, camera movement is more polished with a sprint key. Got all the building assets and everything ready. What a entry to stardance & hackclub!
Hello everyone! The city is finally generating. They automatically generate alongside roads or try grow in clusters with each other. Game looks pretty sweet. Almost 9 hours in, I think it’s time to get some sleep now.
Pocket City Dev 5 The terrain was a little bland, so I decided to spice it up with nature. To fill the grid up, I decided to implement trees. Created a few basic tree grid varieties and implemented it into GridManager.cs. However, this forced me to spawn all of the trees in the Start() function which causes a longer loading time, CPU spike and worst of all it makes it so that after the initial radius no more trees spawn. Increasing the radius exponentially increases the amount of trees being added (because each ring has more grid sections to cover). So i had to pivot. I created a new Chunk Manager, split the main grid up into 16x16 chunks, and checked the player camera and only loaded the surrounding chunks. This makes trees spawn around the player continuously. However, this would become laggy as it would happen every frame. Two ways I decided to prevent this: Check if the player had changed chunks. If it’s still the same chunk, early return to skip the entire code process. Check if the nature has already been loaded. Only load if not loaded. This obviously saves on time complexity, and allows me to have the freedom of creating varying tree density. It also makes it so that the trees do not regenerate constantly. And that completes the visuals for now. Probably will add more foliage and other variety in the future, but for now this will suffice. Finally, this has a severe performance penalty. To cater for lower-end devices, I added a toggle which will later come to a settings menu for ~4x the performance without impacting gameplay. Optimisations, such as chunkloading and LODs will be added later to increase the performance with trees, but that will come after the core game is finalised.
CITY ZONING! Annoyed that a massive skyscraper decided to spawn right next to a nice cozy cottage? Not anymore! You can zone areas by residential, commercial and industrial. There is also a “No Build” zone for areas that you just want to keep clear for now. This will eventually cost you money, because paperwork is really expensive apparently. (And to keep the game balanced of course). But there’s no money yet. I think you should like & follow to see how the game’s economy works.
Did you know it costs more to remove a road than create one?! Strange… Finally have a working economy in the game now! It’s VERY unbalanced. You WILL become very rich. And residential is currently useless, and everything just has a set employee count for now. But that will change soon, and we’ll make the game intelligent. Also the game clock is currently in the Finance Manager which is a little odd so maybe I’ll fix that later. But, I have used actions & delegates to optimise the game handling of the ridiculous amount of scripts for each building that will be running once the cities become larger and larger. Created a UI manager to update the script, which uses the above actions & delegates from the script manager. Created a Finance Manager which led me to have to recode GridManager for monetary support, but that was honestly less painful than it sounds. I also spent a considerable amount of time debugging last post’s Zoning. The code has multiple ways of producing a building and this caused me to have to go back and go through all of the code line by line to figure all the pathways out and debug it eventually. And yes, as promised I made it cost money to zone. Every action, such as creating a road and destroying them cost money and using my amazing research skills of using the first google result, destroying a road costs double placing a road! I think I should sleep. See you soon!
It can’t POSSIBLY BE THAT HARD CAN IT? No but you have to mix up TAGS AND LAYERS. There’s some error you got 5 builds ago but NEVER APPEARED AGAIN. EVEN HOURS INTO TESTING. HOW DID IT FIX ITSELF?! The UI now updates how much you gained in the past day! But anyways, you can finally toggle between the layers… after too much debugging (and realising it was just me being stupid). But it’s okay I’ll hopefully get that laptop from this blood sweat and tears. Look how gorgeous it looks now!
Sometimes, the most productive thing you can do is destroying everything for a clean slate. So that’s what I did and refactored my codebase, painting my GitHub red. The old city generation code ended up becoming messy spaghetti code that made it difficult to debug and work on it. And that sort of legacy code when I look back in a month is what ends up shelving projects for years on end. This half an hour will save me many in the future. I also removed the cluster expansion method of building expansion completely as it created annoying expansions that didn’t make sense of everything being 1 square off a road. Also created a GameManager and moved aspects of GridManager and FinanceManager to the new script, to try and centralise the logic and stop having random bits such as the day manager in the FinanceMananger, which didn’t make an sense. Also yes, I wasted 20 minutes trying to figure out what was going wrong when I forgot to add GameManager.cs to the scene 💔
What’s the difference between these two: int maxEmployees = 50; int employees = 25; float taxRevenue = 1500.0f; ONE : float revenue = (employees / maxEmployees) * taxRevenue; TWO: float revenue = (employees * taxRevenue) / maxEmployees; Mathematically, they’re the same. a/b * c = c/b * a However, I missed one thing while coding (a lot harder to see when it’s not just this). They’re both integers. now what C# does is it divides 25/50. we get 0.5. but they’re both integers, so it tries to store it as an integer, which floors it to a 0. Therefore, it’ll suddenly jump to max revenue when the company is full. obviously not what was intended. Option 2 makes you multiply the integer with a float, and stores 25 * 1500 as a float, which can now be nicely divided by 50 to get the value that we inteded. Sometimes… actually, no MOST of the time it’s the little things that catch you out. Anyways, this has very much balanced the game. The companies get as many employees as they can, then grow by 1 employee each day. Their revenue scales with the employee count, so now residential houses are useful for once. If anything, essential. Next up: Road tax, Land tax. This might be the one time you want tax… or maybe it’s too much?
Clean codebase always pays off (unless you want to keep your job apparently?) Fixed the vacancies counter, as before I was using = instead of +=. Told you it’s the little things that catch you out. Created a safer version of the draft forceRemoveElement() that accounts for jobs and residents when destroying a building (houses/shops/industry). This now updates the game realistically, e.g. if you destroy a house, then you reduce from the population. If the residents were employed, then it removes positions from buildings. If they were unemployed, then we remove it from the stats. Since I am not storing direct references between buildings but creating a game pool for performance, this makes the operations require lots of calling. This could probably be optimised in the future but I will do that near the first release due to the ever-changing code base. This required updating GameManager.cs to have LosePopulation(), LoseJobs() with a helper RemoveWorkersFromBuildings() function. Luckily the lists in GridMananger that I made like 20 hours ago for “future proofing” came in useful. Finally, you can press F to show city statistics and it updates in real time.
It’s been a really long time since I’ve posted. Some progress going on here. Little sneak peak of the fires… yep. You thought the game was gonna be peaceful? On another 7+ hour sprint today
Debugging HELL I added fires, which you can see in the corner. Unity Particle system actually really cool for that by the way. This forced me to rewrite how fires work and add new bits to the Building parent class. That was fine. Had to update the UI to show you that an earthquake was happening, which works more reliably than last time and I figured the ghost error out. I decided to implement water & energy requirements. Overhauled ChunkManager to allow for this, as each chunk needs enough. If it doesn’t produce enough, it imports from other chunks. If it can’t do that, everyone starts packing it up and leaving. Added this to city stats. Then modelled a cute little water tower as you can see below. Then I added energy, lots of chaos. Trying really hard to avoid circular loops to avoid a stack overflow, but it’s looking pretty good. User warnings now show up, like when an earthquake happens, or if a building burns down or if you can’t do something or don’t have money for something. Now I think I have time to do the fun part - creating chaotic fun stuff to make the city feel even more alive. But it’s looking pretty good right now. It’s getting close to being shipped, almost 40 hours in. Like & follow for the link ;) Now I really need to sleep. OH NO AND REVISE FOR THE PHYSICS TEST ON TUESDAY
WORKING PATHFINDING ON THE GRID! Created new assets so the game looks complete now! You can see the firetruck going from the Fire station all the way to the burning building where it will extinguish it. Yes, it follows the roads as intended and uses the A* algorithm to figure out the best path. And they shoot water out, so visual feedback for everything. This was super fun as it was the first time I’ve implemented the A* in a video game on a grid that procedurally generated. The coal power generator, fire station and fire trucks have models now, I think I made them good enough to fit with the game. Police station and healthcare to still be implemented but it’s looking good so far. This required creating a new services manager, creating a pathfinding script, updating global services and how everything interacts with the fire, and creating reverse pathfinding and small details. It’s coming together really cleanly now.
Working healthcare! The game now has a virus… and it spreads pretty quickly. Houses get infected, added to the random event chances on top of earthquakes and fires. I created hospitals that dispatch ambulances as required. Now all services cost money. Using the same A* algorithm from last time, but a little more complex due to the nature of the virus spreading to random buildings. This requires the game to check for any viruses. I created an UI that displays the day progression, using actions & delegates again. The day length is now no longer fixed, but instead it becomes smaller the longer you stay on the map, to try and add difficulty ramping. The game is currently very difficult at the start and incredibly easy at the end, so I’m trying to reverse this a bit and make it hard at the start but terrible towards the end. Also just realised there’s no ending lol - you just become broke and softlock yourself. Never done it to myself which really speaks out about how UNBALANCED the game is. I think it’s time to work on game balancing now before implementing new features, and over half way to shipping? maybe at 65-80 hours in at this rate?
Currently rebalancing the video game to make the game progression more realistic as it is currently extremely difficult at the start and stupidly impossible to die toward the end. Completely forgot to tell you guys that you can follow my projects on my YouTube: Video Like & sub if you can… mb for the self promo though. Sadly I have 6 exams next week so the next 2 weeks are most likely going to be slow ones… not dominating the leaderboards anymore.
I FINALLY LOST IN MY OWN GAME!! Rebalancing the game slowly but surely. Currently added inflation, which increases the price of everything as the days go by. It gets less severe the longer you play but the inflation rate stays high. The game days now vary, take 5 seconds at the start and slowly get faster and faster toward 1.5s linearly. The inflation rate also increases with bands as the game progresses so you need to keep up. This makes the game a good progression, but make one mistake during an earthquake and it might be ggs for you. There is now finally a game over function… although no restart but don’t worry about it. It just pauses the game and tells you that the game is finished. Next up: Detailed Finances, Rubbish? (follow thx)
Okay now i SUCK at my own video game. Don’t worry it’s hard mode. Also lost 2 hours of work somewhere cuz it didn’t save? Don’t understand how. That’s always great isn’t it. But still, 62 days in and I’m fried because of one silly mistake I made 40 days ago. Really teaches you consequences I guess. Spent my time completely overhauling how everything works. You used to make too much money, so I made the revenue even more population based, by making the max revenue a multiplier of the max population. Completely rewrote the losing population, unemployment and vacancy calculations to prevent strange negative numbers which was irritating me for the past one and a half weeks. Also overhauled the inflation to use a formula instead of a very rudimentary lookup table from if statements which is staged into a end-game (130 days+) and early game stage with 20% and 2% simple interest respectively (no not compound for once - that would make the game too hard. Extreme mode?) The game is actually like a good game now. I don’t know how to explain apart from that though.
I HAVE A PLANN For the spinal sprint toward completion. Should end up taking me to hour 70-75? Then we polish the UI and add a main menu… lacking feature I guess. Anyways, reorganised the code base and split game manager up, created folders and fixed dependencies for everything. There is now an event manager, which handles all of the events separately, and as you can see from this simple to-do list (should my next project be the to do list to end all to do lists with calendar integration and stuff???) that I have completed the first bit “Weighted Event system”. So now nothing has an equal chance of happening! Also as a side effect made adding new effects a lot easier due to the nested WeightedEvents class which was similar to an idea I had in my old minecraft mod plugin and transferred the skills across the languages. Quite nice neat code actually, that isn’t 600 lines long, so I can quickly show it to you below. It’s very applicable and I believe I have used it twice or three times in the past 4 months alone. The declarations for the events now look like this, very centralised and easy to add/remove events and modify the weightings. Called in the Start() function. weightedEvents.Add(new WeightedEvent("Nothing", 20, () => { })); weightedEvents.Add(new WeightedEvent("Earthquake", 5, Earthquake)); weightedEvents.Add(new WeightedEvent("Fire", 40, SetBuildingOnFire)); weightedEvents.Add(new WeightedEvent("Virus", 20, () => { TriggerVirusOutbreak(); } )); and the class is just simply storing the name, the weight and a weighted Event. public class WeightedEvent { public string name; public int weight; public Action weightedEvent; public WeightedEvent(string name, int weight, Action weightedEvent) { this.name = name; this.weight = weight; this.weightedEvent = weightedEvent; } } we do need to store the total weight which happens on the Start() function currently. When playRandomEvent() is called, we increase the cursor by the event’s weight until it is greater than the rolled random number between 0 and the total weight, at which point the class’ event is called. Broke nothing in the end! That’s great isn’t it, especially after migrating a bunch of “legacy” code. Hopefully didn’t jinx it.
POLITICS!! + Debugging Hell v2 I mean I guess it is? Not too sure. Event Manager completely overhauled. Double events now no longer have the chance of repeating the same event. Created a new GameEffects script which just takes a bunch of simple code away from EventManager and plays the basic functions such as the “tax revenue increases” which you see below. This was quite a headache to create, and I severely underestimated how much time this would take. I have 2 extra nested classes inside of EventManager for Political Question and Political Scenario. [... inside EventManager.cs ...] public class PoliticalQuestion { public string Question; public TaskCompletionSource<bool> TaskCompletionSource = new TaskCompletionSource<bool>(); public Action onAccept; public PoliticalQuestion(string question, Action onAccept) { Question = question; this.onAccept = onAccept; } } public class PoliticalScenario { public string description; public Action runnable; public PoliticalScenario(string featureDescription, Action functionality) { description = featureDescription; runnable = functionality; } } [Header("Political Question Variables")] public List<PoliticalQuestion> PendingQuestions = new List<PoliticalQuestion>(); public event Action onQueueChanged; private PoliticalScenario[] goodFeatures; private PoliticalScenario[] badFeatures; The political question is sent off to the UI manager, which displays it as shown below. Then it handles user input pressing Y/Enter or N/Esc to accept the user choice, and returns it back to the Event Manager. Seems simple enough, yet there are many ways to do it but I think that the above implementation works the best out of all the ones that I tried. I attempted to use Game Manager as a middleman but that did not work out - so I resorted to passing an entire class. The political scenario allows for the string to actually do something, so that the game knows what to process and what the user agreed to without creating a bunch of variables, and can allow for stacked political question events which is nice. Game’s looking really neat, and the multipliers and stuff can make the game go very crazy very quickly. Too much of a good thing is a bad thing!! Debugged the entire system for like a solid 3 hours it was actually bad. Came first in the UK tho!! I’m back after those 6 exams are done. Yes I know the UI looks pretty bad but it’s good enough for pre-beta testing. Oh yeah, speaking of UI everything is more bold. Figured out how to do that.
MAKE IT RAIN ASTEROIDS Pretty long run honestly. But before that, let’s talk about retrofitting your buildings. Earthquakes are pretty bad. Very bad when you loose your 100k building in a moment. So upgrade it. Yes it’ll cost you 35 to 55k now. But is your peace of mind worth that? And I added asteroids! These fly down and annihilate everything in a 3 unit radius and then set everything else in the 6 unit radius on fire. Lots of minor bug fixes as well, trying to get the game really polished now. Some rejigging of the game’s back end, such as creating a new abstract class for employer and reworking the systems to ensure that they run more smoothly and I believe almost finally fixing the unemployment/vacancy problem. I say almost because every 5 runs I see the game yell at me that it didn’t count something correctly but honestly I’ve spent so long on this I don’t even know if it’d be harder to just rewrite the entire employment system. For more detail, see my video linked below! See if you guys like it, my first proper long form I Added ASTEROIDS that ANNIHILATE your Adorable City And boy will this thing cook your economy.
BETTER UI + XP At the top of the image you can see a little progress bar… yep I’ve added XP now. Got plans for that, probably going to allow you to unlock stuff later. Like the lockdown ability etc. The UI has been overhauled. The actual images are a touch on the placeholder side apart from the road but it looks pretty good. You cycle between road, zoning and special building placement with 1, 2 and 3. Use R to rotate between the modes like residential, commercial and industrial zoning as well as Utilities & Emergency for the special buildings. Then finally T to rotate between those specific buildings. Complicated? Maybe? But it’s also a lot faster. I have completely lost my muscle memory of spamming R like the “good old days” though. Looks good? Bad? Horrible update and the game should never be changed ever again? Best update in the world and I should win £1 trillion? What do you think?
CRIME!!! + C# Generics I added Arson and added a Police manager that goes out and solves these crimes. Lots more to come, let me know of any ideas you have! But before that let me teach you ALL something. C# Generics. I had a bunch of scripts that all did ABOUT the same thing but with different. This was FindClosestHospital, FindClosestFireStation and the thing I was adding which was FindClosestPoliceStation. It felt quire redundant to copy the same lines but instead of Hopsital it was replaced with FireStation or PoliceStation. //Generic functions private T FindClosestReachableService<T>(Vector2Int targetPos, Func<T, bool> hasAvailableVehicles, out List<Vector2Int> bestRoute) where T : Building { T closestBuilding = null; bestRoute = null; int shortestRouteLength = int.MaxValue; bool foundBuildingOfThisType = false; foreach (var kvp in gridManager.GetMapGrid()) { GridManager.GridTile tile = kvp.Value; if (tile.buildingScript != null && tile.buildingScript is T serviceBuilding) { foundBuildingOfThisType = true; if (!hasAvailableVehicles(serviceBuilding)) continue; List<Vector2Int> testRoute = CalculateRoadPath(tile.buildingScript.gridPos, targetPos); if (testRoute == null || testRoute.Count == 0) continue; if (testRoute.Count < shortestRouteLength) { shortestRouteLength = testRoute.Count; bestRoute = testRoute; closestBuilding = serviceBuilding; } } } if (!foundBuildingOfThisType) { bestRoute = null; return null; } return closestBuilding; } Above is an example of the C# generic. We have “T” type, and I think this is a good place to learn about them. Instead of defining the function as returning something like Building , we make T a type. and you can see it passed in a little <T> after the function name. We can also pass in entire functions like Func<T, bool> which is utilised as shown below: Building bestStation = FindClosestReachableService<PoliceStation>(building.gridPos, ps => ps.HasPolice(), out route); you can see ps => ps.HasPolice() calls that out. And finally, to define what T is meant to be, I’ve added where T : Building . You can do this many times, such as by having both a T as well as a U! and you’d have a repeated where T : Building where U: PotatoChips or something idk what U is meant to be bro. This was my first time using it but it’s pretty cool and if you’re using C# I’d recommend learning it as it saved me like 200 lines of code and changing something 3 times to change the same thing! And yes, I added a third thing which is Arson! which is a crime based thing, and you have a visual that shows up as a timer. if a police doesn’t solve the crime it sets on fire. It’s not too bad but it adds a use for the police, with much more to come for the police to deal with in the future! Also added asteroid BOMBARDMENT as a debuff. Yeah it’s brutal. 3 strikes… thats up to 108 tiles DESTROYED and set on fire. And of course, the image is from a youtube video: Click me!
Main menu 👀 I need help. UI clearly isn’t for me
I’m being forced to post Yeah thanks stardance. 10 hour limit for what. Probably spam filter. Also MASSIVE BUG(s). One is that the game just randomly deletes all the buildings from a chunk. No idea why, I’ve been at it for so long. Another issue is the stupid vacancy counter which has been broken FOREVER but atleast now it doesn’t go negative. I have a serious feeling I will have to spend a week just POLISHING the game. Whatever, Currently working through a new feature of allowing you to use your money that you spent so long accumulating to try and fix the chaos that you went through. This is done through the “Council FX” which I may rename if you guys can think of a better name, and you can see the countless things to do such as: Taking On DEBT!! YAY!! 100k that gains 1% every day. Seems low.. but it will pile up very quickly since it’s compound interest. Overclocking the grid for free placement + infinite water/power Maximising Housing/Business revenue Curing all infections … and many more as well as the ??? at level 100… who knows what that does. £2.5 million btw. Of course, those levels are the XP, which has finally given that a use. And no you wont be at level 11000 just like that, i’m just being lazy for testing. Also rebalanced so that all of the commercial buildings have ~10-15% of their previous employment caps. So that you’re not just spamming residential. It also makes industrial more useful as they have more employers even though they produce less money.
Bugs are genuinely taking the life out of me Genuinely the worst thing ever. I STILL can’t figure it out but I had to post my weekly devlog anyways. Can you believe we’re 28 weeks into 2026??! Here’s the chaos where I accidentally created a “Pocket Empire” (Day 1105) Watch the video (click the title) if you wanna see how I ended up here and a minor crash out. very minor.
UFOs in an Alien Invasion 💔💔 The second rare event addition to Pocket City! Get a chunk of your population zapped up by some not so friendly aliens… Any more ideas, let me know below! But it was pretty neat to implement. 3D modelled it and everything. 3 hours of doing god knows what. Tried to figure quality settings out and probably did smth else but was too busy with the World Cup to remember what I did. Probably bug fixes and stuff. Oh yeah and you see a pretty cool ripple pulse thing that propogates through the map. Although it is a little weak right now but i’ll fix that next time. Super tired. mb
I NEED YOUR HELP Pocket City already exists as a game. I know this is stupid and I should have checked this before starting since I had the intention of publishing it to steam but here we are. If you want more details, or more knowledge about the game check this video out: Video Oops…
Hmmmm… What’s cooking? (Blender just WON’T count toward my hours but prolly spent 2-3 extra hours here) The helicopter blades actually spin. And W Unity particle system for the missile.
WORKING AIR DEFENCE + ATTACK HELICOPTERS So we got working air defence turrets with some predictive aiming, and attack helicopters that shoot missiles at random buildings. Although you’re unlikely to get 3 attack helicopters at once… for now. The helicopters blades do spin, they bob up and down, they go towards buildings. They shoot out these missiles, which pathfind their way to the targetted building. They all have a healthsystem which means that the turrets do some damage on collisions only though, one turret might take a while but two (or the 7 you see below) will MOW them down. Still have to hook it all up to the Finance Manager, Special Building placement and other boring stuff, but… I need more IDEAS!! (read this thx) …for more Military stuff that can be added. Tank wars? Who knows. I was thinking of a military invasion as being one of the rare events which spawns like 10 missiles and 5 attack helicopters and maybe a B2 bomber or some stuff. I also need more allied options, maybe I’ll add like an anti-bomb turret that is specifically for the B2 bomber or something and does 100000 damage. Or maybe your own airbase that spawns an allied helicopter and now you have dogwars. or maybe your own plane. idk So yes @Adam_Lotfalla this is what the helicopter was for. Yay more things to worry about!!! Still have integrations left! I’ll see you (hopefully) tomorrow once that’s done. but its midnight now so goodbye.
Nukes… from a plane A famous plane. The B2 Bomber. Idk gng I got bored. No but it drops a nuke that decimates everything in a decent radius and then sets everything in a bigger radius on fire, and now we have a new rare event called a “military invasion”.. that spawns like 8 helicotpers AS WELL as the b2 bomber. The B2 Bomber starts a few clicks out and then flies toward the set target building. Then it drops the nuke, and you have a few seconds to try and kill the nuke before it kills you, and on impact (yes we are finally using rigidbodys as they are intended) it explodes. You better have that turret system ready. Of course, it’s clearly not enough. So maybe I’ll add a anti-missile system as a YouTube comment said. Speaking of YouTube, thank you for all the support :) 100+ comments goes crazy, and we’re on 73 subs up from the previous 29 literally 3 weeks ago. Not subscribed? Help a fellow dev out: TechScope Channel
NEW NAME!!! Flash Floods + Main Menu If you remember, Pocket City is a game that already exists so now it’s called Capital Chaos. Thank you YouTube comments! And all of you as well, for the suggestions. Ofc new video to go with it: watch by clicking here! I created flash floods that.. well flood the entire map. It’s meant to be a little toned down of a disaster, thats more survivable because it gives the game a touch more balance. It stops all services from working, so that could be detrimental during a virus attack. But on the other hand, it stops every single fire and prevents new ones and explosions. A lifesaver if theres a nuke, it gets completely nullified. Also new main menu, I think it looks pretty neat. Especially compared to the old one.
I HATE Menus (in Unity at least) Genuinely hate them. But yeah we got settings menu working (which genuinely took like 5-6 hours because of stupid unity legacy stuff vs new stuff and then unity 6 vs 2023 version stuff i was used to) AHHHH I don’t remember it being this painful in Godot to be honest so maybe Godot is better for that? i had to get rid of VSync because it only worked on refresh. Created a debug menu to test performance, just to see that the only useful thing there was FPS and like RAM usage, and some engine stuff like active Rigidbodys. I couldn’t see the CPU utilisation or GPU utilisation which was… the thing I wanted to see. Although don’t worry performance does seem to be reasonable and early to mid game I can push over 1000 FPS on potato settings (specs at bottom if you care about them). It does obviously go down as the game continues on, but I think it’s quite optimised. Even with shadows its on 500+ FPS with a mid sized down. Although adding trees will quarter your FPS numbers. but it looks pretty so there’s your tradeoff. Although problematically if you turn trees off and you had already generated trees the fps stays low even though you’re not rendering it? I don’t know why unity is so weird. The game is quite unbalanced, but we’re in the final polishing stages (my target is 150 hours for the framework and hopefully it’s secure! (vote nice and high thanks - i did put a lot of effort into this game.) Up next: Difficulty selection Polishing Rebalancing updates Release!
You won’t believe it. I got it working FIRST TRY That’s actually crazy to be honest. Tells you how much expirience those 8 hours of menu development have given me. Someone give me a Unity menu doctorate or sum But on a serious note, we have game difficulty selection and its all nice and self contained. With controller support of course. You can see we have Previous Saves but that isn’t really functional yet. One of the things I learnt is to never rely on the UI giving you the data, only the click, so you’d manually add the elements and then call .value or .isOn respective to the component, and the same goes for dropdowns although I didn’t use one here. Let me know if you think it looks clean or any improvements to the UI readability, etc.
INSANE tree optimisations Went from 60-80 fps @ 4K to 400-450 (in game). Yes a 6 to 7x increase. How you ask? GPU Mesh Instance drawing offloading the CPU work of handling thousands of game objects. In English, I’m no longer spawning thousands of tree objects, but instead telling the GPU to draw the tree instances every frame. This seems quite unintuitive because you’re now drawing thousands of things every second. BUT this means that there are no game objects, so the CPU doesn’t even know that these exist. Also the GPU draws it thousands of times anyways. A game object handles transforms, rotations, etc. that the CPU has to keep track of whether it is active or not. This had the added benefit of the trees having no overhead when the trees are disabled, so you regain all of your framerate! Also I used some neat little script that combined the meshes all together in the GameObject prefab. Now it really should be able to run on your potato PC/Laptop. Combine script using UnityEngine; public class MeshCombineUtility : MonoBehaviour { [ContextMenu("Combine Children Meshes")] public void Combine() { MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>(); CombineInstance[] combine = new CombineInstance[meshFilters.Length]; Matrix4x4 matrix = transform.worldToLocalMatrix; for (int i = 0; i < meshFilters.Length; i++) { if (meshFilters[i].gameObject == gameObject) continue; combine[i].mesh = meshFilters[i].sharedMesh; combine[i].transform = matrix * meshFilters[i].transform.localToWorldMatrix; } Mesh combinedMesh = new Mesh(); combinedMesh.CombineMeshes(combine, true, true); #if UNITY_EDITOR string directory = $"Assets/Assets/Mesh/Tree/{gameObject.name}.asset"; UnityEditor.AssetDatabase.CreateAsset(combinedMesh, directory); UnityEditor.AssetDatabase.SaveAssets(); Debug.Log($"Combined mesh saved to {directory}"); #endif } } Draw section of GPU Mesh Instancing private void DrawTreeMeshes() { if (treeMesh == null || treeMaterial == null) return; foreach (var kvp in generatedChunks) { ChunkData chunk = kvp.Value; if (chunk.spawnedTrees == null || chunk.spawnedTrees.Count == 0) continue; int batchSize = 1023; int totalTrees = chunk.spawnedTrees.Count; for(int i = 0; i < totalTrees; i+=batchSize) { int length = Mathf.Min(batchSize, totalTrees - i); Matrix4x4[] subMatrices = new Matrix4x4[length]; for (int j = 0; j < length; j++) { subMatrices[j] = chunk.spawnedTrees[i + j].matrix; } int meshIndex = Mathf.Abs(chunk.chunkCord.GetHashCode() + i) % treeMesh.Length; Graphics.DrawMeshInstanced(treeMesh[meshIndex], 0, treeMaterial, subMatrices, length); } } }
I’m getting new wifi lol, & 150 hours so yeah i won’t be here and probably will have to post a 10 hour thing BUT on the plus side, we got a nice death screen that has a bunch of quotes that you can read below [SerializeField] private string[] quotes = { "Opportunities multiply as they are seized \n - Sun Tzu", "If you are going through hell, keep going \n - Winston Churchill", "No empire was built on the first draft", "Fall seven times, stand up eight", "That which does not kill us, makes us stronger \n - Friedrich Nietzsche", "Out of ash, a new foundation", "I have not failed. I just found 10,000 ways that don't work \n - Thomas Edison", "A man is not finished when he is defeated. He is finished when he quits \n - Richard M. Nixon", "It does not matter how slowly you go as long as you do not stop \n - Confucius", "Out of difficulties grow miracles \n - Jean de La Bruyère", "The greater the obstactle, the more glory in overcoming it \n - Molière", "A Pocket Sized City is too small for your ambition. Build again \n - The Dev", "Success usually comes to those who are too busy to be looking for it \n - Henry David Thoreau", "Go big or go home", "You can't give up just yet. Stay determined... \n - Undertale" }; Maybe you’ll catch the little easter egg there as well ;) Working on adding game audio!! and probably finally enough hours to get the framework 12 (btw I wouldn’t recommend this as a daily laptop (f13 better), I just want something I can write on lol)
Game Sountrack? But before I talk about that, lemme just say the game audio is almost finished, we have menu sounds for clicks and stuff, and i added support for main menu music. The firetruck hoses actually do stuff, floods sound like floods, theres some peaceful background nature sounds and yeah it makes the game feel so much nicer. although i forgot place sounds which was a massive oversight. also my wifi is still working. no idea why, but not complaining. and i’m cooking on a soundtrack lowk although none of it seems correlated in any way and idk how i’ll make it fit into this game but you know what maybe it’ll just all go into some random album. None of the hours put into these songs count but its okay. i’m no pro tho so. all i’ll say is i love some bass
Final DevLog before First Ship - Boss Battle I don’t think words can explain what I made so click here to watch a video on my probably final major addition (no pressure) & also help with a small dilemma I have. NO!! that does not mean this game will stop development, but i think i finally have enough hours (+10-15 more safety) to get a Framework 12! (and then i will be able to crack on with entrance exams - so i guess development will slow a touch). Of course I’ll ship once the game is polished enough. You might see a devlog or two from the “Capital Chaos Website” - follow me ;) I really hope you guys all enjoy it and now I need to do the readme and stuff. I also realised I was one of the most viewed on Stardance which is honestly amazing and I appreciate all of the support :) And thank you to all the new friends I’ve made and all the followers and commenters. It’s honestly been insane.
BETA TEST! Nvm I have to devlog my final changes But lemme talk to those stardance reviewers real quick. Scroll down to see the endless content of my story, and all the community feedback (also on my youtube). Playing the game is a bit of a learning curve so you can watch my videos and stuff on it as well. I’d say watch this one: Boss Fight for the boss fight and maybe one of the other ones that you find interesting. Maybe this one because it has over 1,000 views and still climbing! The game is released there but it is windows only for now (i will release linux and maybe mac on the actual release game don’t worry but I’m super restricted for time right now) SKIP IF YOU’RE ON LINUX / MAC For everyone: Changes: Amended GameAudioManager to adjust for max voices which uses a List based system that appends and unappends. Boss fight also toggles and untoggles the game audio dependant on each audio source, because the game could currently have hundreds or even thousands of audio source which is really bad optimisation. So each audio source that I want to track has a ManagedAudioSource attached which automatically registers and unregisters itself from the GameAudioManager. I also edited the boss fight to make it a touch harder and amended the moves ;) And come and beta test NOWWW. leave all your comments, suggestions etc. on THE NEW DISCORD COMMUNITY!! or youtube, i’ll read it all and, again, thank you all for your support . I don’t know what to put as the image so here.
Thank you all so much for the support! Framework 12 is on it’s way (and this wait is painful). After 171 hours! 19.54x is actually insane and I appreciate it a lot. Join the Discord! I made a discord (click above) and i’ll give you all an early supporter role before I put it out on YouTube and stuff for the “wishlist” when the full game comes out (if you want to stay in touch after stardance is done. ALSO IF YOU COMMENTED WHILE THE GAME WAS STILL CALLED POCKET CITY DM ME ILL GIVE U A SPECIAL ROLE The game beta is still up and you can try it out Currently just doing some minor stuff to the game (Fixed some normal/easy mode not settings correct phases. B2 Bomber should destroy itself and stop the nuke siren once launched), and slowly adding a tutorial but I’m like 90% focused on revising for uni entrance exams
Ships:
Welcome to Capital Chaos! One of Stardance’s most awaited projects ;) (hopefully anyways) We’ve got chaos, a bunch of random events, a boss fight and so much more for you to explore. SKIP if you are on Linux/MacOS (or you can vote based on the videos - completely up to you) as I only have a windows executable for now. I am honestly super proud of this, and the community built around this game. I hope you enjoy it as well. There have been TONNES of challenges, such as pathfinding, the initial grid also seemed really daunting. To the vacancy count which was literally plaguing me for the past MONTH and got fixed today (it was one line… i know.. maybe I should have used AI). But besides, it’s a sick project. I hope you all love it. Unzip the file in the release and it should be good to go. READ THE README FOR INSTRUCTIONS AND CONTROLS!! THERE IS NO TUTORIAL Read the story, watch the videos if you can and just enjoy the game! It will be on steam in 8-9 months so maybe subscribe?...
|
1793307082.4963882
|
1793393482.4963882
|
|
9571
|
My first slack bot! by @BIG_JO | Stardance
|
BIG_JO
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @BIG_JO | Stardance
|
1793162912.7037494
|
1793767712.7037494
|
|
9572
|
Beta Pictoris by @ivanarya | Stardance
|
ivanarya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Beta Pictoris by @ivanarya | Stardance
|
1792745632.2964165
|
1793350432.2964165
|
|
9573
|
Untitled project by @Dewidos | Stardance
|
Dewidos
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Dewidos | Stardance
|
1793332156.5663357
|
1793936956.5663357
|
|
9574
|
Number Guessing Game by @rakshit-kant | Stardance
|
rakshit-kant
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Number Guessing Game by @rakshit-kant | Sta Title: Number Guessing Game by @rakshit-kant | Stardance...
|
1793278153.3846724
|
1793882953.3846724
|
|
9575
|
E-ink macropad by @arthusp | Stardance
|
arthusp
|
0
|
14.64
|
0
|
[]
|
[{"post_id": 51116, "ts": "202 [{"post_id": 51116, "ts": "2026-08-20T16:43:53Z", "hours": 1.75, "text": "Yesterday I finished routing all of the PCB and I fixed all of the DRC errors"}, {"post_id": 49662, "ts": "2026-08-18T15:27:55Z", "hours": 2.2408, "text": "Today I routed the pcb again with a new design and new arrangement of the components"}, {"post_id": 30108, "ts": "2026-07-17T12:54:24Z", "hours": 2.8561, "text": "Added custom macros changeable via serial and saved on the ESP32 via Preferences, I also added Upload, Load and Delete bmp files to show on the E-Ink display. The MacroPad will be controlled via a web page with WebSerial or an app easily. The macros include : Key combinations Text enter wait time between actions Theoretically infinite number of actions"}, {"post_id": 28913, "ts": "2026-07-15T14:51:17Z", "hours": 0.4789, "text": "I finished the design for the key and i have done some adjustments (shift key for scale). I now need to figure out to extend the FPC connector to make it work."}, {"post_id": 28354, "ts": "2026-07-14T15:46:57Z", "hours": 1.3197, "text": "After lots of troubleshooting, I finally got the screen to work w/ full and partial refresh with GxEPD2! I used the code from GooDisplay as a base with the code from another display to make this one working with GxEPD2"}, {"post_id": 14611, "ts": "2026-06-23T19:42:07Z", "hours": 2.3931, "text": "Today I started working with the 0.97 inch display from Goodisplay (GDEM0097T61). This display is not supported by GxEPD2 so I decided to add support for it myself. I took the code from the GDEM0213B74 display as a base because it uses the same controller but I didn’t manage to make it work despite my efforts. Then I decided to try the software given by the manufacturer which did not work either. I concluded that my e-ink display must be the problem so I returned it and I will need to wait another two weeks to get the new one 😑"}, {"post_id": 5090, "ts": "2026-06-08T19:35:46Z", "hours": 0.9169, "text": "I finally finished the PCB and I will now continue the case in 3d and images for the project. I had a hard time routing the 3v3 line because I did it last but I managed to do all the traces on 2 layers"}, {"post_id": 4536, "ts": "2026-06-07T21:37:20Z", "hours": 0.9622, "text": "I finished the schematic using the e-paper documentation and I am now working on the pcb"}, {"post_id": 4425, "ts": "2026-06-07T19:03:44Z", "hours": 1.7264, "text": "I started doing some research on a e-paper display for the keys of the macropad and landed on the 0.97 inch Small E ink Screen from GooDisplay which I will be using. I started modeling the keys around the screen and started working on the PCB : I traced all the connections for the displays and power management. I will also be using a 74HC154 to be able to select one display at a time to change its image. This project will work with an esp32-s3 with flash memory to remember each key and image and I am planning to include a rotary encoder to switch between layers for the keys"}]...
|
Title: E-ink macropad by @arthusp | Stardance
Dev Title: E-ink macropad by @arthusp | Stardance
Devlogs:
I started doing some research on a e-paper display for the keys of the macropad and landed on the 0.97 inch Small E ink Screen from GooDisplay which I will be using. I started modeling the keys around the screen and started working on the PCB : I traced all the connections for the displays and power management. I will also be using a 74HC154 to be able to select one display at a time to change its image. This project will work with an esp32-s3 with flash memory to remember each key and image and I am planning to include a rotary encoder to switch between layers for the keys
I finished the schematic using the e-paper documentation and I am now working on the pcb
I finally finished the PCB and I will now continue the case in 3d and images for the project. I had a hard time routing the 3v3 line because I did it last but I managed to do all the traces on 2 layers
Today I started working with the 0.97 inch display from Goodisplay (GDEM0097T61). This display is not supported by GxEPD2 so I decided to add support for it myself. I took the code from the GDEM0213B74 display as a base because it uses the same controller but I didn’t manage to make it work despite my efforts. Then I decided to try the software given by the manufacturer which did not work either. I concluded that my e-ink display must be the problem so I returned it and I will need to wait another two weeks to get the new one 😑
After lots of troubleshooting, I finally got the screen to work w/ full and partial refresh with GxEPD2! I used the code from GooDisplay as a base with the code from another display to make this one working with GxEPD2
I finished the design for the key and i have done some adjustments (shift key for scale). I now need to figure out to extend the FPC connector to make it work.
Added custom macros changeable via serial and saved on the ESP32 via Preferences, I also added Upload, Load and Delete bmp files to show on the E-Ink display. The MacroPad will be controlled via a web page with WebSerial or an app easily. The macros include : Key combinations Text enter wait time between actions Theoretically infinite number of actions
Today I routed the pcb again with a new design and new arrangement of the components
Yesterday I finished routing all of the PCB and I fixed all of the DRC errors...
|
1793296218.7681136
|
1793901018.7681136
|
|
9576
|
My first slack bot! by @awvielalala | Stardance
|
awvielalala
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @awvielalala | Stard Title: My first slack bot! by @awvielalala | Stardance...
|
1793148556.8860624
|
1793753356.8860624
|
|
9577
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792943624.9454916
|
1793807624.9454916
|
|
9578
|
Untitled project by @deforgetito | Stardance
|
deforgetito
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @deforgetito | Stardanc Title: Untitled project by @deforgetito | Stardance...
|
1793433428.163814
|
1794038228.163814
|
|
9579
|
TableTop by @baker | Stardance
|
baker
|
1
|
13.0
|
77
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-09T13:00:59Z", "hours": 13.0, "multiplier": 5.73, "payout": 77, "blessing": "neutral", "text": "I made an online monopoly board. It was way harder than expected. Really proud of it though. Do not use vpn when trying to play since you cant find rooms.", "repo": "https://github.com/Hamdan772/TableTop", "demo": "https://tabletop-monopoly-night.vercel.app"}]...
|
[{"post_id": 5579, "ts": "2026 [{"post_id": 5579, "ts": "2026-06-09T12:57:13Z", "hours": 7.0, "text": "was sick today so I skipped school so I worked 7hrs on TableTop hehe. Added rules from the rulebook to be functional everything seems to be working. And for some reason you cant play with VPN on. Gonna ship it now"}, {"post_id": 4950, "ts": "2026-06-08T16:13:20Z", "hours": 1.0, "text": "FAAA there is SO many bugs in the game logic gotta fix it…………………. (tbh its more of an oversight on my part)"}, {"post_id": 4918, "ts": "2026-06-08T14:48:01Z", "hours": 0.0, "text": "Fixed online rooms allowing peer to peer play. fixing public tables and game logic. would love suggestions"}, {"post_id": 4879, "ts": "2026-06-08T13:18:12Z", "hours": 2.0, "text": "I decided not to make risk global domination and make it focused on monopoly. fixing this rn"}, {"post_id": 4089, "ts": "2026-06-07T08:55:40Z", "hours": 0.0, "text": "literally relearning how to play risk (25% done with game logic)"}, {"post_id": 4067, "ts": "2026-06-07T08:00:35Z", "hours": 0.0, "text": "working on new board (ill fix online play later)"}, {"post_id": 4044, "ts": "2026-06-07T07:03:36Z", "hours": 0.0, "text": "Done with monopoly (online rooms is in works) what do yall think? What games should I add next?"}]...
|
Title: TableTop by @baker | Stardance
Devlogs:
Do Title: TableTop by @baker | Stardance
Devlogs:
Done with monopoly (online rooms is in works) what do yall think? What games should I add next?
working on new board (ill fix online play later)
literally relearning how to play risk (25% done with game logic)
I decided not to make risk global domination and make it focused on monopoly. fixing this rn
Fixed online rooms allowing peer to peer play. fixing public tables and game logic. would love suggestions
FAAA there is SO many bugs in the game logic gotta fix it…………………. (tbh its more of an oversight on my part)
was sick today so I skipped school so I worked 7hrs on TableTop hehe. Added rules from the rulebook to be functional everything seems to be working. And for some reason you cant play with VPN on. Gonna ship it now
Ships:
I made an online monopoly board. It was way harder than expected. Really proud of it though. Do not use vpn when trying to play since you cant find rooms....
|
1792878759.8847857
|
1793742759.8847857
|
|
9580
|
My awesome macropad! by @AliHassan | Stardance
|
AliHassan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @AliHassan | Starda Title: My awesome macropad! by @AliHassan | Stardance...
|
1793256485.2547548
|
1793861285.2547548
|
|
9581
|
Volumetric clouds by @Thino | Stardance
|
Thino
|
0
|
40.03
|
0
|
[]
|
[{"post_id": 23142, "ts": "202 [{"post_id": 23142, "ts": "2026-07-05T22:20:39Z", "hours": 6.3236, "text": "Devlog 9 - Super duper optimization So I was watching some shader-related video on yt where they explained that the heavy hitter on performance is sampling and not calculations. So I decided to redo some stuff and holy shit I can render at full res with almost 200 fps with MORE detail. So yeah what I did was basically rework how I generate and sample my noise which made it run so much better (Also still a WIP the repetition will be dealt with and the values will be tuned for better details)"}, {"post_id": 21856, "ts": "2026-07-04T00:23:47Z", "hours": 2.515, "text": "Devlog 8 - Added a new option for steps and experimented I added a setting so that instead of each step being the same distance you can chose how many steps it’s going to take and then it bases it on the distance betweeen the entrance and the exit to of the bounding box. I also experimented with settings trying to make it look good as clouds and yeah its starting to look really good. And lastly I added blur since the samples are kinda noisy"}, {"post_id": 21658, "ts": "2026-07-03T18:42:55Z", "hours": 3.9739, "text": "Devlog 7 - I Added bounding boxes and shadows So I added bounding boxes like I have been wanting to and it was suprisingly easy using the slab method, I also added shadows which gives the coulds so much more depth So for the bounding boxes I use the slab method which return the entry and exit position of a ray for a grid aligned bounding box for very cheap. It is also easy to see if it doesn’t intersect because the exit position is closer than the entrance position so you can return early. For the shadows I do another lower quality raymarch for each step in the main raymarch towards the sun to see how much cloud is in the way. I am also having some problems with the Henyey Greenstein function returning abnormally huge numbers so that is turned off rn while I investigate further."}, {"post_id": 20367, "ts": "2026-07-01T23:08:08Z", "hours": 4.0533, "text": "Devlog 6 - Finally completing the port to the compute shader I was finally able to port the volumetrics to the compute shader which allows it to run at 1/2 or 1/4 res improving the performance greatly. I also tried making a cloud layer which is what you can see in the image. It still look kinda bad but trust it will become better with time. It’s also running at a stable 200 fps with 1000 max distance which is great! Next I want to add proper bounding Boxes since this is just skipping the step if its outside the y range of 60 - 70 which isn’t very efficient. I also want to add internal shadows so for each step in the raycast it will send out another raycast to see how much light it gets, hopefully that can make it less flat."}, {"post_id": 20073, "ts": "2026-07-01T16:15:42Z", "hours": 3.2406, "text": "#Devlog 5.5 - I hate unity I just wanted to post a devlog since I haven’t done so in a long time but also I haven’t added a complete feature so that’s why I did 5.5 instead of 6. Basically I have spent a couple of hours trying to get the worldpos in a compute shader since it’s a whole different process compared to the normal shaders. It’s honestly insane that something that takes like 3 lines of code in one shader takes like hundreds distributed through multiple scripts in another. Anyways now that I have the worldpos in the compute shader the rest should be a breeze! (Image showing the texture generated by the compute shader in which red is the decimal part of x, green is the same but for y, and green for z)"}, {"post_id": 17126, "ts": "2026-06-27T20:09:34Z", "hours": 3.56, "text": "#Devlog 5 - Major fog improvements Added: Lights and shadow Perlin noise smaller fixes / optimizations What I have done So since last devlog I have made the fog pickup lights and shadows from the main light, it’s very easy to do since unity provides the values for me. I also added perlin noise to the noise generator along with the worley, I use the perlin as the base for the fog and the worley to make the edges more detailed with remapping. I have also made some smaller optimizations like the raymarching stopping if the transmittance (the value which decided how much fog there is) gets so high that any additional fog wouldn’t make a noticeable difference. What next? Make the clouds render at half / quarter res and blur to increase performance Add bounding boxes for more control over where the fog goes Add textures and tress and grass and stuff Side note: My friend @Lazyllama is going to join me and he will be making more of the game mechanics so that I can focus on this."}, {"post_id": 15983, "ts": "2026-06-25T23:11:17Z", "hours": 8.4239, "text": "Devlog 4 - Some major changes to the project So basically during some time I had no motivation at all to work on the game, I think it’s mostly because I spent this whole spring making a game whh I wasn’t really happy with. Anyways I decided to force myself into making it and while adding some simple fog based on distance I decided that it didn’t look right and went down a rabbit hole of volumetric fog (procrastination). Anyways I realized that while I was procrastinating I was genuinely interested in this and other things that I guess would fall into the category “Graphics programming”. Anyways what I wanted to say was that the game will most likely not be a fishing game, maybe there will be some kind of game mechanics added but I’m going to focus on learning more of what I find interesting. Also During the time between this and last devlog I have been working on volumetric fog and generating noise through fullscreen shaders and compute shaders. Right now I use worley noise for the fog although it still look very bad since it is IN DEVELOPMENT. Anyways thanks for reading and I hope the next devlog isn’t for 8h and also has some better images! (Yes this is volumetric I know it doesn’t look like what you would associate with volumetric rendering since it isn’t affected by lighting and stuff and also looks kinda 3d I don’t know what’s going on with that)"}, {"post_id": 11295, "ts": "2026-06-18T14:08:37Z", "hours": 3.4128, "text": "Devlog 3 - Movement I finally added some movement as I felt it was important to see how the ocean looks from the players perspective. I had, and still have, some issues with it which will be fixed when I figure out what is causing them. I will try to implement a LOD system for the ocean because I think the huge ocean is what is making the game stutter. Also I’m not sure if you can upload videos so this will be a test for that."}, {"post_id": 4595, "ts": "2026-06-07T23:10:58Z", "hours": 2.0025, "text": "Devlog 2 - Refining the water I did some major changes to how the water looks, first of all I increased the amount of waves to make it less repetitive. I now have 40 waves with random direction and magnitude. I also changed the water to have a more low polygon look using per face normals. I made this change because I am going to make all the assets myself and as a beginner in 3d modelling I should stick to simple models, and my game should follow that theme. Whats next? I want to add a system that allows me to make waves randomly as I do have to make like 4 numbers for each wave that all work together. Also adding some actual gameplay would be nice."}, {"post_id": 3824, "ts": "2026-06-06T21:40:30Z", "hours": 2.5211, "text": "Devlog 1 - Getting wet with unity’s shadergraphs I decided to start working on my project today since I had literally nothing else to do. So i booted up unity and got started with making some terrain which turned out to be not terrible. After that it was time for water, since my game is a fishing game I decided that water would be pretty important, and so I would spend a lot of time making sure it looks good. Research I did some research on how other games handle water, and after deciding I in fact did not want to struggle with FFTs i decided to use the sum of some Gerstner waves (a.k.a trochoidal waves). I booted up desmos since it’s great for solving the math part before moving on to the coding part, and after getting something that worked I started working on making it to a shader. ( Image 1: desmos waves ) Making the shader After playing around with the shadergraph to make sure I understood how it works I got started making the actual waves. I had to make a custom function in HLSL both for vertex displacement and for getting the normal values. After hooking it all up I had some actual waves. Now of course this didn’t go as smoothly as described, as most of my time went into debugging and trying to understand how shadergraphs work. ( Image 2: waves in unity!!! 🥹🥹🥹) What comes next? So after this I want to make the water look like actual water and maybe take a look at making the waves less repetitive, although it is pretty hard to see from the players perspective. I will make sure to come back to this when I have a better idea of what it will all look like. Anyways I’ll see you later and I hope you have as much fun making stuff as I do! ✨"}]...
|
Title: Volumetric clouds by @Thino | Stardance
De Title: Volumetric clouds by @Thino | Stardance
Devlogs:
Devlog 1 - Getting wet with unity’s shadergraphs I decided to start working on my project today since I had literally nothing else to do. So i booted up unity and got started with making some terrain which turned out to be not terrible. After that it was time for water, since my game is a fishing game I decided that water would be pretty important, and so I would spend a lot of time making sure it looks good. Research I did some research on how other games handle water, and after deciding I in fact did not want to struggle with FFTs i decided to use the sum of some Gerstner waves (a.k.a trochoidal waves). I booted up desmos since it’s great for solving the math part before moving on to the coding part, and after getting something that worked I started working on making it to a shader. ( Image 1: desmos waves ) Making the shader After playing around with the shadergraph to make sure I understood how it works I got started making the actual waves. I had to make a custom function in HLSL both for vertex displacement and for getting the normal values. After hooking it all up I had some actual waves. Now of course this didn’t go as smoothly as described, as most of my time went into debugging and trying to understand how shadergraphs work. ( Image 2: waves in unity!!! 🥹🥹🥹) What comes next? So after this I want to make the water look like actual water and maybe take a look at making the waves less repetitive, although it is pretty hard to see from the players perspective. I will make sure to come back to this when I have a better idea of what it will all look like. Anyways I’ll see you later and I hope you have as much fun making stuff as I do! ✨
Devlog 2 - Refining the water I did some major changes to how the water looks, first of all I increased the amount of waves to make it less repetitive. I now have 40 waves with random direction and magnitude. I also changed the water to have a more low polygon look using per face normals. I made this change because I am going to make all the assets myself and as a beginner in 3d modelling I should stick to simple models, and my game should follow that theme. Whats next? I want to add a system that allows me to make waves randomly as I do have to make like 4 numbers for each wave that all work together. Also adding some actual gameplay would be nice.
Devlog 3 - Movement I finally added some movement as I felt it was important to see how the ocean looks from the players perspective. I had, and still have, some issues with it which will be fixed when I figure out what is causing them. I will try to implement a LOD system for the ocean because I think the huge ocean is what is making the game stutter. Also I’m not sure if you can upload videos so this will be a test for that.
Devlog 4 - Some major changes to the project So basically during some time I had no motivation at all to work on the game, I think it’s mostly because I spent this whole spring making a game whh I wasn’t really happy with. Anyways I decided to force myself into making it and while adding some simple fog based on distance I decided that it didn’t look right and went down a rabbit hole of volumetric fog (procrastination). Anyways I realized that while I was procrastinating I was genuinely interested in this and other things that I guess would fall into the category “Graphics programming”. Anyways what I wanted to say was that the game will most likely not be a fishing game, maybe there will be some kind of game mechanics added but I’m going to focus on learning more of what I find interesting. Also During the time between this and last devlog I have been working on volumetric fog and generating noise through fullscreen shaders and compute shaders. Right now I use worley noise for the fog although it still look very bad since it is IN DEVELOPMENT. Anyways thanks for reading and I hope the next devlog isn’t for 8h and also has some better images! (Yes this is volumetric I know it doesn’t look like what you would associate with volumetric rendering since it isn’t affected by lighting and stuff and also looks kinda 3d I don’t know what’s going on with that)
#Devlog 5 - Major fog improvements Added: Lights and shadow Perlin noise smaller fixes / optimizations What I have done So since last devlog I have made the fog pickup lights and shadows from the main light, it’s very easy to do since unity provides the values for me. I also added perlin noise to the noise generator along with the worley, I use the perlin as the base for the fog and the worley to make the edges more detailed with remapping. I have also made some smaller optimizations like the raymarching stopping if the transmittance (the value which decided how much fog there is) gets so high that any additional fog wouldn’t make a noticeable difference. What next? Make the clouds render at half / quarter res and blur to increase performance Add bounding boxes for more control over where the fog goes Add textures and tress and grass and stuff Side note: My friend @Lazyllama is going to join me and he will be making more of the game mechanics so that I can focus on this.
#Devlog 5.5 - I hate unity I just wanted to post a devlog since I haven’t done so in a long time but also I haven’t added a complete feature so that’s why I did 5.5 instead of 6. Basically I have spent a couple of hours trying to get the worldpos in a compute shader since it’s a whole different process compared to the normal shaders. It’s honestly insane that something that takes like 3 lines of code in one shader takes like hundreds distributed through multiple scripts in another. Anyways now that I have the worldpos in the compute shader the rest should be a breeze! (Image showing the texture generated by the compute shader in which red is the decimal part of x, green is the same but for y, and green for z)
Devlog 6 - Finally completing the port to the compute shader I was finally able to port the volumetrics to the compute shader which allows it to run at 1/2 or 1/4 res improving the performance greatly. I also tried making a cloud layer which is what you can see in the image. It still look kinda bad but trust it will become better with time. It’s also running at a stable 200 fps with 1000 max distance which is great! Next I want to add proper bounding Boxes since this is just skipping the step if its outside the y range of 60 - 70 which isn’t very efficient. I also want to add internal shadows so for each step in the raycast it will send out another raycast to see how much light it gets, hopefully that can make it less flat.
Devlog 7 - I Added bounding boxes and shadows So I added bounding boxes like I have been wanting to and it was suprisingly easy using the slab method, I also added shadows which gives the coulds so much more depth So for the bounding boxes I use the slab method which return the entry and exit position of a ray for a grid aligned bounding box for very cheap. It is also easy to see if it doesn’t intersect because the exit position is closer than the entrance position so you can return early. For the shadows I do another lower quality raymarch for each step in the main raymarch towards the sun to see how much cloud is in the way. I am also having some problems with the Henyey Greenstein function returning abnormally huge numbers so that is turned off rn while I investigate further.
Devlog 8 - Added a new option for steps and experimented I added a setting so that instead of each step being the same distance you can chose how many steps it’s going to take and then it bases it on the distance betweeen the entrance and the exit to of the bounding box. I also experimented with settings trying to make it look good as clouds and yeah its starting to look really good. And lastly I added blur since the samples are kinda noisy
Devlog 9 - Super duper optimization So I was watching some shader-related video on yt where they explained that the heavy hitter on performance is sampling and not calculations. So I decided to redo some stuff and holy shit I can render at full res with almost 200 fps with MORE detail. So yeah what I did was basically rework how I generate and sample my noise which made it run so much better (Also still a WIP the repetition will be dealt with and the values will be tuned for better details)...
|
1793278353.6751642
|
1793883153.6751642
|
|
9582
|
TriSecure - Voting System with Raspberrypi by @Viv TriSecure - Voting System with Raspberrypi by @Vivek_Reddy | Stardance...
|
Vivek_Reddy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: TriSecure - Voting System with Raspberrypi Title: TriSecure - Voting System with Raspberrypi by @Vivek_Reddy | Stardance...
|
1793404444.5721111
|
1794009244.5721111
|
|
9583
|
My awesome macropad! by @Elnur | Stardance
|
Elnur
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-06T13:38:19Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made macropad. Learned how to work in kiCAD", "repo": "https://github.com/ElnurMavlonov/macropad_hardware", "demo": ""}]...
|
[{"post_id": 3462, "ts": "2026 [{"post_id": 3462, "ts": "2026-06-06T12:38:17Z", "hours": 0.2625, "text": "Today, I did something crazy. At 2:00 PM, I had absolutely no idea what to do, but I had this intense urge to finally learn KiCad. I just wanted to build something and figure it out. Fast forward to 5:30 PM, and it’s finally done! The peace of mind I feel right now is incredible. big thanks to whoever made the guide."}]...
|
Title: My awesome macropad! by @Elnur | Stardance
Title: My awesome macropad! by @Elnur | Stardance
Devlogs:
Today, I did something crazy. At 2:00 PM, I had absolutely no idea what to do, but I had this intense urge to finally learn KiCad. I just wanted to build something and figure it out. Fast forward to 5:30 PM, and it’s finally done! The peace of mind I feel right now is incredible. big thanks to whoever made the guide.
Ships:
I made macropad. Learned how to work in kiCAD...
|
1793307031.3458757
|
1793393431.3458757
|
|
9584
|
Donar management web app by @VishalDeshmukh | Star Donar management web app by @VishalDeshmukh | Stardance...
|
VishalDeshmukh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Donar management web app by @VishalDeshmukh Title: Donar management web app by @VishalDeshmukh | Stardance...
|
1792759842.470666
|
1793364642.470666
|
|
9585
|
Untitled project by @yogeshwar | Stardance
|
yogeshwar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @yogeshwar | Stardance
|
1793401044.0273173
|
1794005844.0273173
|
|
9586
|
My first slack bot! by @Abhay_Rathore | Stardance
|
Abhay_Rathore
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Abhay_Rathore | Sta Title: My first slack bot! by @Abhay_Rathore | Stardance...
|
1793181081.779478
|
1793785881.779478
|
|
9587
|
ones wheeeler by @Lamarcus_DeGeorge | Stardance
|
Lamarcus_DeGeorge
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ones wheeeler by @Lamarcus_DeGeorge | Stard Title: ones wheeeler by @Lamarcus_DeGeorge | Stardance...
|
1792741759.020088
|
1793346559.020088
|
|
9588
|
Visionary by @Ritik | Stardance
|
Ritik
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Visionary by @Ritik | Stardance
|
1793156119.6260247
|
1793760919.6260247
|
|
9589
|
Servo button controller by @erdi | Stardance
|
erdi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Servo button controller by @erdi | Stardanc Title: Servo button controller by @erdi | Stardance...
|
1793397409.4112377
|
1794002209.4112377
|
|
9590
|
Awesome Graphing Calculator by @aerith | Stardance
|
aerith
|
0
|
5.76
|
0
|
[]
|
[{"post_id": 7360, "ts": "2026 [{"post_id": 7360, "ts": "2026-06-12T08:23:22Z", "hours": 0.6531, "text": "Made it take up the whole screen instead of just a small portion at the bottom!"}, {"post_id": 6750, "ts": "2026-06-11T09:39:51Z", "hours": 5.1094, "text": "I FINALLY GOT IT TO DRAW A GRID AFTER WAY TOO LONG!! web development using purely WASM is a pain…"}]...
|
Title: Awesome Graphing Calculator by @aerith | St Title: Awesome Graphing Calculator by @aerith | Stardance
Devlogs:
I FINALLY GOT IT TO DRAW A GRID AFTER WAY TOO LONG!! web development using purely WASM is a pain…
Made it take up the whole screen instead of just a small portion at the bottom!...
|
1793364722.023499
|
1793969522.023499
|
|
9591
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792918486.3184159
|
1793782486.3184159
|
|
9592
|
Orbitdeck by @felix_jrdb | Stardance
|
felix_jrdb
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Orbitdeck by @felix_jrdb | Stardance
|
1793181152.0761054
|
1793785952.0761054
|
|
9593
|
Untitled project by @hugotinbily | Stardance
|
hugotinbily
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @hugotinbily | Stardanc Title: Untitled project by @hugotinbily | Stardance...
|
1793177392.4753366
|
1793782192.4753366
|
|
9594
|
Interactive 3D experience of meteors detected by @ Interactive 3D experience of meteors detected by @0x15 | Stardance...
|
0x15
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Interactive 3D experience of meteors detect Title: Interactive 3D experience of meteors detected by @0x15 | Stardance...
|
1793271184.5649233
|
1793875984.5649233
|
|
9595
|
Flasks by @Philo | Stardance
|
Philo
|
1
|
59.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-29T22:45:32Z", "hours": 59.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hi, so my goal was to make a small FOSS Wine Frontend for MacOS (sorta like crossover but FOSS, I started this before there was any good alternatives) It’s admittedly very primitive in its current form but i had fun working on it (at the beginning at least) and it taught me Swiftui the only games I tested out are Undertale yellow and RERUN by danidev (ifykyk) and chances are without a heavily patched wine version only simple apps and games will run on it you have the option to download GPTK 3.0 (default when starting it up) and upstream wine (both pretty primitive without patches from the Crossover source tree)", "repo": "https://github.com/CopticFelo/Flasks", "demo": "https://github.com/CopticFelo/Flasks/releases/latest"}]...
|
[{"post_id": 84618, "ts": "202 [{"post_id": 84618, "ts": "2026-10-29T22:37:17Z", "hours": 5.8739, "text": "Devlog 20 (Final one, probably) So turns out one month ago wasn’t the end of stardance and i hadn’t worked on this much on october (burnout) and here we are :< so here are some last minute changes to hopefully make this somewhat shippable Default Flasks So I started working on this “epic feature” of having a default flask that you always should have (mainly to avoid have to figure out what to display when you don’t have any flasks ;>) So the main idea is to check if you have no flasks, if you don’t, It will download GPTK 3.0 and create a flask using GPTK 3.0 (won’t download GPTK if you have it alr tho) but i quickly found out that the plumbing for this was gonna be annoying, mainly cuz swift is a stupid language and swiftui is an even stupider framework (yes i regret not using appkit) so i made an LLM complete the rest of it and reviewed it and it seems fine so i went with it “WineD3D” “Default” So in the part where you select your Graphics translation layer, The default option can’t just be WineD3D since that’s only the default for upstream wine (+ it doesn’t actually do anything when you select thus letting the default DirectX translation run) so let’s just call it default Removed prototypes for features i don’t have to implement :< Like Installer support, literally spent like 4 hours on it before realizing iam outta time so had to cut and also support for DXMT and D3DMetal (those wouldn’t have made any sense even if i made them work since these depend on the runner and we have no specialized runner)"}, {"post_id": 69116, "ts": "2026-09-16T12:25:47Z", "hours": 2.7825, "text": "Devlog 19 We are nearing the end now so you might notice there are actual releases on github now The Sidebar idk why i thought it’s a good idea to add sort of a crappy sidebar you can do things like change flask settings and whatnot from but it happened so no time to complain now all the buttons on it work using the alr bundled tools with wine (taskmgr, winecfg, wineserver, etc) except winetricks which i am still figuring out GPTK support!! Made GPTK downloadable finally, also included some checks cuz wine is called wine64 sometimes hopefully that doesn’t infringe on apple’s license?? (they did say they forbid bundling i am pretty sure not downloading)"}, {"post_id": 63914, "ts": "2026-09-07T23:06:45Z", "hours": 2.5258, "text": "Devlog 18 lot of rapid fire small changes/features, gonna possibly continue like that till the end of stardance cuz the next step is to make a good enough wine runner, which is gonna need a stupid amount of time that is mostly not tracked by hackatime I made an App Icon :> So it sucks a bit cuz i am terrible at art but it’s fine, it’s modeled after my irl water “flask” funnily enough, don’t ask why, idk either ESync/MSync support ye it just sets the environment variable for each, not working in upstream wine since you need a custom patched version of wine to use it which i don’t have rn Flask Settings Made A Flask and want to change its settings? now you can do that (it’s literally just the OptionView wrapped in another sheet) Small Changes Selected Flask state is now preserved between app restarts Added the ability to delete a flask (still need to make a confirmation dialog for it tho)"}, {"post_id": 61108, "ts": "2026-09-03T20:39:54Z", "hours": 0.9214, "text": "Devlog 17 ICON EXTRACTION!!! so instead of making a whole PE Parser, i learned of this tool called “wrestool” it’s a part of something called Icoutils so what if……we just bundle wrestool and then use it to extract raw ICO data from an exe file? and since NSImage supports ico this worked perfectly!! I struggled a bit with byte encoding but eventually realized we want raw bytes (not a string lol) and found the correct option and that was it"}, {"post_id": 60506, "ts": "2026-09-02T21:50:38Z", "hours": 2.0094, "text": "Devlog 16 UI was getting too messy so had to intervene Creating Flasks != adding apps to said flask So in all most other Wine Frontends, you typically have 1 app per wine prefix In Flasks, I want to give the user the ability to add however apps they like to a flask This was a bit annoying with the “InstallAppWizard” handling both flask creation and adding apps to a flask So…. Separated Flask Creation from Adding apps It was fairly trivial there is nothing to talk about as the views were alr made i just needed to restructure things a bit also that create flask button being at the bottom of the sidebar may haunt me later……."}, {"post_id": 58766, "ts": "2026-08-31T10:22:56Z", "hours": 4.4014, "text": "Devlog 15 finally…. this is taking so long Bundling so i found out i was an idiot for not realizing that i could actually bundle everything i need in the app bundle instead of pulling the entire universe on first launch so i bundled DXVK, DXMT (likely a wrong version of dxmt but whatever, will fix) I still need to figure out a way of doing this instead of hosting random dlls on the repo (xcode build scripts maybe?) DXVK actually works now!! I made Flasks put symlinks to the bundled DXVK in System32 and SysWoW64 and used wine dll overrides and that was it tho i did spend like half a day trying to figure why was wine not detecting my dxvk dlls and it turned out i was using a “builtin” version of dxvk that needs to be put in the lib folder of wine itself but oh well also made a quick ui for it (which is getting completely overhauled next devlog cuz this is a mess) But what about DXMT? still a WIP, DXMT is considerably more complex cuz apparently i need another wine version that exposes some APIs in winemac.drv or something? Concerns… i really wish once stardance ends i would just fork some WineCX version and maintain it myself cuz this is dumb also Apple dropping support for Rosetta in MacOS 28 is worrying cuz now someone needs to port fex to mac (codeweavers doing this but i don’t think they are ever open sourcing it)"}, {"post_id": 53201, "ts": "2026-08-23T17:16:17Z", "hours": 4.5683, "text": "Devlog 14 How DXVK enablement? I wanted to finally tackle something i have been avoiding for a while now, Enabling tweaks like DXVK/DXMT/D3DMetal in the case of D3DMetal and DXMT, i learned it’s a bit more involved unfortunately so i decided to focus on the easiest one DXVK for now It turns out I have no idea where to get DXVK from, where to put it, when to download, how to use it seamlessly, etc so i decided to tackle some other things first b4 doing this WineDownloader is now just Downloader I made the class WineDownloader more general purpose because we need to make it work for DXVK too New Download Window I made a new window design using Table and it looks kinda cool tbh What’s next why, onboarding ofc I am now thinking of two main options for downloading things (DXVK, Winetricks, etc) Either fetch all dependencies separately or create some base package on github that i can just extract furthermore the code for untaring is so annoying and verbose so i need to make it make more general purpose :<"}, {"post_id": 50295, "ts": "2026-08-19T13:29:22Z", "hours": 0.8708, "text": "Devlog 13 Some enhancements here and there Add apps to existing Flasks yes, you can do that now (see image #2), while the code structure is a bit ugly it does work beautifully, maybe there are still bugs but ig that’s true for the whole app Copy console output to clipboard I added a small button in the console to copy all console logs to clipboard, nothing much to be said here i just used NSPasteboard"}, {"post_id": 49684, "ts": "2026-08-18T16:03:14Z", "hours": 3.3708, "text": "Devlog 12 Added a Console View So I made a simple console that displays output from wine that you can show and hide, it honestly looks better than i ever expected it would turn out I still have to make sure that when multiple programs are open, that the logs wouldn’t conflict with each other"}, {"post_id": 49048, "ts": "2026-08-17T17:14:34Z", "hours": 3.1536, "text": "Devlog 11 mostly code maintenance if iam gonna be honest, anyways….. Added a context menu to the app grid So yeah we now have a context menu that shows 2 options “Show in finder” -> does what it says on the tin lol, it just needed me to fix my poor URL instantiation “Remove app from the Flask” -> again pretty straightforward, removes the reference to the app from the Flask LICENSE now we GPL 3.0, so that’s cool :>"}, {"post_id": 47510, "ts": "2026-08-15T13:58:15Z", "hours": 2.2022, "text": "Devlog 10 NSCollectionView?! While i was trying to refine the Grid View we made in the last devlog (handling selection, keyboard events, animations, etc), i learned about this AppKit view called NSCollectionView that does precisely what i wanted, it is even used in Finder’s grid view For those of you who don’t know AppKit , it is an imperative UI framework made originally for NeXTSTEP (NS for NeXTSTEP btw) in 1988 but later became MacOS’s main UI framework Now to use an AppKit View in SwiftUI you need something called NSViewRepresentable Using this thing on its own is somewhat complex but to use it with NSCollectionView (which is alr a very involved AppKit view) proved to be a monumental task especially for me who had never touched AppKit before So after wasting a lot of time trying to figure this out i just went back to the LazyVGrid approach and hopefully we can come back to this later Adding Selection and Animation to LazyVGrid I started by adding a selection effect to the grid, meaning that if you click on a program once a background appears behind it (look at the screenshot lol i can’t explain :<) at first it was terribly slow to activate cuz we effectively had 2 .onTapGesture but then i found this solution on stackoverflow . gesture ( TapGesture ( count : 2 ) . onEnded { isRunning = true Task . detached { try await flask . runApp ( programPath ) DispatchQueue . main . async { isRunning = false } } } ) . simultaneousGesture ( TapGesture () . onEnded { selectedProgram = programPath } ) as for animation it was relatively easy, I just used PhaseAnimator to replicate the MacOS app jump effect"}, {"post_id": 45403, "ts": "2026-08-11T20:35:24Z", "hours": 2.7711, "text": "Devlog #9 Made a small program grid view for each flask aaand it actually launches programs now!!! I made this small grid view thing using LazyVGrid to represent each program registered in a flask’s flask.json file, tried to make it a blend between crossover’s and whisky’s approach and actually made it launch programs Naturally as an avid undertale fan, i knew i had to try undertale yellow first (which is windows-only), at first with upstream wine it just showed a black screen (with sound) but when i did some patches to be able to use Gcenx’s gptk builds (specifically GPTK 3.0) it worked!! the only sad part is that it appears that to get the icon from a windows executable you need to make some sort of PE header parser (which whisky has made) for now i just use the generic icon that MacOS gives us (which is a whisky icon rn bec i had whisky installed)"}, {"post_id": 44889, "ts": "2026-08-10T22:47:34Z", "hours": 1.2997, "text": "Devlog #8 The InstallAppWizard now looks a bit nicer I can’t seem to ignore just how ugly this Install App thing looks, so i searched a bit for swiftui views that could help and even referenced Whisky’s (the now deprecated MacOS FOSS wine frontend) BottleCreationView.swift to make something a little less heinous (still heinous but a bit less) using the Form view and in the end i settled on this (look at the attached screenshots -_-) I really should find something more important to work on lol because this InstallAppWizard view is not that important for now"}, {"post_id": 44241, "ts": "2026-08-09T21:20:32Z", "hours": 1.1436, "text": "Devlog #?? (idk, who’s keeping track atp) Small optimizations The picker which lets you pick the wine/runner version for the flask bothered me bec it always kept refreshing whenever you changed views in the Install App wizard thing so i made it that the install app wizard owned the runner library and just passed it down using @ Binding to the CreateFlaskView then it would be updated only when the sheet appeared The Sidebar no longer displays dummy data So finally got around to making the sidebar display the actual list of created flasks (aka wine prefixes), it took a while cuz there was a nasty bug in the json decoding function i used to create flask entries, quickly patched it and everything worked as expected :>"}, {"post_id": 44149, "ts": "2026-08-09T18:30:58Z", "hours": 7.7839, "text": "Hi, been a while since the last one mostly struggling to do idiomatic swift/swiftUI error handling :< anyways…… Singletons are (allegedly) bad idk why (ig for testing or something) but i found out Singletons are an anti-pattern so i removed them in favor of just using @ Observable and @ Environment the way it’s done rn is kinda dumb but “will fix later”™ Throwing Errors I’ve added proper error handling for once, everyone online seemed to recommend you create your own custom error type and i did that with the new FlaskError enum and made all functions which should throw (and not just print a stupid message to the console :-< ) throw a FlaskError still i need to hook it up to the UI which is more easier said then done, i have no clue what is the cleanest way to do that in SwiftUI and am kinda just freestyling it rn and I know it still looks ugly rn cuz still prototyping (Sub)process yeah so i wanted to they async/await on the processes i was spawning (e.g: to get wine version, to make wine prefix, to run a program in wine prefix, etc) but learned you have to make an extension to the Process class so i just used the cross platform newer first-party Subprocess library instead, probably for the best anyways"}, {"post_id": 36071, "ts": "2026-07-27T22:28:57Z", "hours": 3.2411, "text": "Lots of new functions for wine Big News! you can now create flasks (aka wine prefixes) they don’t actually show up anywhere or anything and you can’t do anything with them yet…..but it’s a start I made it keep a small flask.json file inside each prefix to keep track of which wine version created the prefix, which programs should get launched with that prefix, etc, ofc this is just a json encoded instance of the flask struct using swift’s JSONEncode I wrote functions to launch a .exe from Wine and to scan for created flasks, i just haven’t hooked them up to any UI yet What’s next I really really NEED to figure out error handling in SwiftUI apps as i am currently just throwing errors to standard output or straight up ignoring them and returning (which is bad), so i think i won’t work on more backend functions until i learn how to handle errors correctly And ofc hook the UI up to the wine functions and error handlers and whatnot Also polish the UI a bit, currently a bit rough"}, {"post_id": 34341, "ts": "2026-07-24T23:14:24Z", "hours": 2.1814, "text": "More UI Changes So I realized i have no idea how to design good UX so i went and took inspiration from other wine frontends and settled on a “setup wizard-like thing” to create a new flask (and yea we are going with one program per flask for now) and now the setup wizard is divided into 3 sections/steps Flask, App, Options (with Flask being the screen we designed in the previous devlog) continuing on that i made the App section/step view which just lets you select whether your program is standalone/portable (meaning doesn’t need an installer) or an installer and lets you select its path Now Hopefully we can stop working on UI for a bit bec UI is boring imo"}, {"post_id": 34203, "ts": "2026-07-24T18:36:41Z", "hours": 1.7358, "text": "Changes Made this ugly dialog box for creating bottles which i am calling here flasks (since the app name is flasks), i really struggled making it not look atrocious but alas it still looks ugly in my opinion (add it to the “will fix later” list) Earlier i was trying to use a module called SWCompression to untar the wine download but turns out calling /usr/bin/tar is much easier but i forgot to remove an import of SWCompression and somehow it never warned me about it? in any case, i just removed it Added some more .gitignore entries for xcode, swift and MacOS stuff from gitignore.io (may be useful later ig)"}, {"post_id": 33407, "ts": "2026-07-23T10:11:07Z", "hours": 2.2111, "text": "Changes I made a small modal window sheet to download wine runners/versions/engines (whtv you wanna call them) ofc only Gcenx’s builds are available and are hardcoded in for now (and also need to add the option to cancel a download but later lol) Earlier i made a WineLibrary class to scan for installed wine versions in Application Support/Flasks/Runners, hadn’t had the chance to check if it actually works tho (hopefully it does?) yeah that’s about it."}, {"post_id": 33033, "ts": "2026-07-22T16:20:16Z", "hours": 4.2964, "text": "What this is I was kinda feeling frustrated that the only good option to run Windows apps and games on MacOS was crossover (which is paid) so i decided i would try making an alternative for it (that doesn’t suck + is user friendly) Disclaimer: I will try my best but wine is a really complicated piece of software and making a FOSS competitor to a paid product like crossover ain’t ez so NO PROMISES that i will actually be able to complete this Changes (not really much) made sidebar for displaying wine prefixes (currently just uses dummy data :<) implemented some download functions for downloading & extracting wine from Gcenx’s MacOS wine builds and placing it in a “runners” folder in App. Support (hopefully i can find something better than that but for now it’s fine)"}]...
|
Title: Flasks by @Philo | Stardance
Devlogs:
What Title: Flasks by @Philo | Stardance
Devlogs:
What this is I was kinda feeling frustrated that the only good option to run Windows apps and games on MacOS was crossover (which is paid) so i decided i would try making an alternative for it (that doesn’t suck + is user friendly) Disclaimer: I will try my best but wine is a really complicated piece of software and making a FOSS competitor to a paid product like crossover ain’t ez so NO PROMISES that i will actually be able to complete this Changes (not really much) made sidebar for displaying wine prefixes (currently just uses dummy data :<) implemented some download functions for downloading & extracting wine from Gcenx’s MacOS wine builds and placing it in a “runners” folder in App. Support (hopefully i can find something better than that but for now it’s fine)
Changes I made a small modal window sheet to download wine runners/versions/engines (whtv you wanna call them) ofc only Gcenx’s builds are available and are hardcoded in for now (and also need to add the option to cancel a download but later lol) Earlier i made a WineLibrary class to scan for installed wine versions in Application Support/Flasks/Runners, hadn’t had the chance to check if it actually works tho (hopefully it does?) yeah that’s about it.
Changes Made this ugly dialog box for creating bottles which i am calling here flasks (since the app name is flasks), i really struggled making it not look atrocious but alas it still looks ugly in my opinion (add it to the “will fix later” list) Earlier i was trying to use a module called SWCompression to untar the wine download but turns out calling /usr/bin/tar is much easier but i forgot to remove an import of SWCompression and somehow it never warned me about it? in any case, i just removed it Added some more .gitignore entries for xcode, swift and MacOS stuff from gitignore.io (may be useful later ig)
More UI Changes So I realized i have no idea how to design good UX so i went and took inspiration from other wine frontends and settled on a “setup wizard-like thing” to create a new flask (and yea we are going with one program per flask for now) and now the setup wizard is divided into 3 sections/steps Flask, App, Options (with Flask being the screen we designed in the previous devlog) continuing on that i made the App section/step view which just lets you select whether your program is standalone/portable (meaning doesn’t need an installer) or an installer and lets you select its path Now Hopefully we can stop working on UI for a bit bec UI is boring imo
Lots of new functions for wine Big News! you can now create flasks (aka wine prefixes) they don’t actually show up anywhere or anything and you can’t do anything with them yet…..but it’s a start I made it keep a small flask.json file inside each prefix to keep track of which wine version created the prefix, which programs should get launched with that prefix, etc, ofc this is just a json encoded instance of the flask struct using swift’s JSONEncode I wrote functions to launch a .exe from Wine and to scan for created flasks, i just haven’t hooked them up to any UI yet What’s next I really really NEED to figure out error handling in SwiftUI apps as i am currently just throwing errors to standard output or straight up ignoring them and returning (which is bad), so i think i won’t work on more backend functions until i learn how to handle errors correctly And ofc hook the UI up to the wine functions and error handlers and whatnot Also polish the UI a bit, currently a bit rough
Hi, been a while since the last one mostly struggling to do idiomatic swift/swiftUI error handling :< anyways…… Singletons are (allegedly) bad idk why (ig for testing or something) but i found out Singletons are an anti-pattern so i removed them in favor of just using @ Observable and @ Environment the way it’s done rn is kinda dumb but “will fix later”™ Throwing Errors I’ve added proper error handling for once, everyone online seemed to recommend you create your own custom error type and i did that with the new FlaskError enum and made all functions which should throw (and not just print a stupid message to the console :-< ) throw a FlaskError still i need to hook it up to the UI which is more easier said then done, i have no clue what is the cleanest way to do that in SwiftUI and am kinda just freestyling it rn and I know it still looks ugly rn cuz still prototyping (Sub)process yeah so i wanted to they async/await on the processes i was spawning (e.g: to get wine version, to make wine prefix, to run a program in wine prefix, etc) but learned you have to make an extension to the Process class so i just used the cross platform newer first-party Subprocess library instead, probably for the best anyways
Devlog #?? (idk, who’s keeping track atp) Small optimizations The picker which lets you pick the wine/runner version for the flask bothered me bec it always kept refreshing whenever you changed views in the Install App wizard thing so i made it that the install app wizard owned the runner library and just passed it down using @ Binding to the CreateFlaskView then it would be updated only when the sheet appeared The Sidebar no longer displays dummy data So finally got around to making the sidebar display the actual list of created flasks (aka wine prefixes), it took a while cuz there was a nasty bug in the json decoding function i used to create flask entries, quickly patched it and everything worked as expected :>
Devlog #8 The InstallAppWizard now looks a bit nicer I can’t seem to ignore just how ugly this Install App thing looks, so i searched a bit for swiftui views that could help and even referenced Whisky’s (the now deprecated MacOS FOSS wine frontend) BottleCreationView.swift to make something a little less heinous (still heinous but a bit less) using the Form view and in the end i settled on this (look at the attached screenshots -_-) I really should find something more important to work on lol because this InstallAppWizard view is not that important for now
Devlog #9 Made a small program grid view for each flask aaand it actually launches programs now!!! I made this small grid view thing using LazyVGrid to represent each program registered in a flask’s flask.json file, tried to make it a blend between crossover’s and whisky’s approach and actually made it launch programs Naturally as an avid undertale fan, i knew i had to try undertale yellow first (which is windows-only), at first with upstream wine it just showed a black screen (with sound) but when i did some patches to be able to use Gcenx’s gptk builds (specifically GPTK 3.0) it worked!! the only sad part is that it appears that to get the icon from a windows executable you need to make some sort of PE header parser (which whisky has made) for now i just use the generic icon that MacOS gives us (which is a whisky icon rn bec i had whisky installed)
Devlog 10 NSCollectionView?! While i was trying to refine the Grid View we made in the last devlog (handling selection, keyboard events, animations, etc), i learned about this AppKit view called NSCollectionView that does precisely what i wanted, it is even used in Finder’s grid view For those of you who don’t know AppKit , it is an imperative UI framework made originally for NeXTSTEP (NS for NeXTSTEP btw) in 1988 but later became MacOS’s main UI framework Now to use an AppKit View in SwiftUI you need something called NSViewRepresentable Using this thing on its own is somewhat complex but to use it with NSCollectionView (which is alr a very involved AppKit view) proved to be a monumental task especially for me who had never touched AppKit before So after wasting a lot of time trying to figure this out i just went back to the LazyVGrid approach and hopefully we can come back to this later Adding Selection and Animation to LazyVGrid I started by adding a selection effect to the grid, meaning that if you click on a program once a background appears behind it (look at the screenshot lol i can’t explain :<) at first it was terribly slow to activate cuz we effectively had 2 .onTapGesture but then i found this solution on stackoverflow . gesture ( TapGesture ( count : 2 ) . onEnded { isRunning = true Task . detached { try await flask . runApp ( programPath ) DispatchQueue . main . async { isRunning = false } } } ) . simultaneousGesture ( TapGesture () . onEnded { selectedProgram = programPath } ) as for animation it was relatively easy, I just used PhaseAnimator to replicate the MacOS app jump effect
Devlog 11 mostly code maintenance if iam gonna be honest, anyways….. Added a context menu to the app grid So yeah we now have a context menu that shows 2 options “Show in finder” -> does what it says on the tin lol, it just needed me to fix my poor URL instantiation “Remove app from the Flask” -> again pretty straightforward, removes the reference to the app from the Flask LICENSE now we GPL 3.0, so that’s cool :>
Devlog 12 Added a Console View So I made a simple console that displays output from wine that you can show and hide, it honestly looks better than i ever expected it would turn out I still have to make sure that when multiple programs are open, that the logs wouldn’t conflict with each other
Devlog 13 Some enhancements here and there Add apps to existing Flasks yes, you can do that now (see image #2), while the code structure is a bit ugly it does work beautifully, maybe there are still bugs but ig that’s true for the whole app Copy console output to clipboard I added a small button in the console to copy all console logs to clipboard, nothing much to be said here i just used NSPasteboard
Devlog 14 How DXVK enablement? I wanted to finally tackle something i have been avoiding for a while now, Enabling tweaks like DXVK/DXMT/D3DMetal in the case of D3DMetal and DXMT, i learned it’s a bit more involved unfortunately so i decided to focus on the easiest one DXVK for now It turns out I have no idea where to get DXVK from, where to put it, when to download, how to use it seamlessly, etc so i decided to tackle some other things first b4 doing this WineDownloader is now just Downloader I made the class WineDownloader more general purpose because we need to make it work for DXVK too New Download Window I made a new window design using Table and it looks kinda cool tbh What’s next why, onboarding ofc I am now thinking of two main options for downloading things (DXVK, Winetricks, etc) Either fetch all dependencies separately or create some base package on github that i can just extract furthermore the code for untaring is so annoying and verbose so i need to make it make more general purpose :<
Devlog 15 finally…. this is taking so long Bundling so i found out i was an idiot for not realizing that i could actually bundle everything i need in the app bundle instead of pulling the entire universe on first launch so i bundled DXVK, DXMT (likely a wrong version of dxmt but whatever, will fix) I still need to figure out a way of doing this instead of hosting random dlls on the repo (xcode build scripts maybe?) DXVK actually works now!! I made Flasks put symlinks to the bundled DXVK in System32 and SysWoW64 and used wine dll overrides and that was it tho i did spend like half a day trying to figure why was wine not detecting my dxvk dlls and it turned out i was using a “builtin” version of dxvk that needs to be put in the lib folder of wine itself but oh well also made a quick ui for it (which is getting completely overhauled next devlog cuz this is a mess) But what about DXMT? still a WIP, DXMT is considerably more complex cuz apparently i need another wine version that exposes some APIs in winemac.drv or something? Concerns… i really wish once stardance ends i would just fork some WineCX version and maintain it myself cuz this is dumb also Apple dropping support for Rosetta in MacOS 28 is worrying cuz now someone needs to port fex to mac (codeweavers doing this but i don’t think they are ever open sourcing it)
Devlog 16 UI was getting too messy so had to intervene Creating Flasks != adding apps to said flask So in all most other Wine Frontends, you typically have 1 app per wine prefix In Flasks, I want to give the user the ability to add however apps they like to a flask This was a bit annoying with the “InstallAppWizard” handling both flask creation and adding apps to a flask So…. Separated Flask Creation from Adding apps It was fairly trivial there is nothing to talk about as the views were alr made i just needed to restructure things a bit also that create flask button being at the bottom of the sidebar may haunt me later…….
Devlog 17 ICON EXTRACTION!!! so instead of making a whole PE Parser, i learned of this tool called “wrestool” it’s a part of something called Icoutils so what if……we just bundle wrestool and then use it to extract raw ICO data from an exe file? and since NSImage supports ico this worked perfectly!! I struggled a bit with byte encoding but eventually realized we want raw bytes (not a string lol) and found the correct option and that was it
Devlog 18 lot of rapid fire small changes/features, gonna possibly continue like that till the end of stardance cuz the next step is to make a good enough wine runner, which is gonna need a stupid amount of time that is mostly not tracked by hackatime I made an App Icon :> So it sucks a bit cuz i am terrible at art but it’s fine, it’s modeled after my irl water “flask” funnily enough, don’t ask why, idk either ESync/MSync support ye it just sets the environment variable for each, not working in upstream wine since you need a custom patched version of wine to use it which i don’t have rn Flask Settings Made A Flask and want to change its settings? now you can do that (it’s literally just the OptionView wrapped in another sheet) Small Changes Selected Flask state is now preserved between app restarts Added the ability to delete a flask (still need to make a confirmation dialog for it tho)
Devlog 19 We are nearing the end now so you might notice there are actual releases on github now The Sidebar idk why i thought it’s a good idea to add sort of a crappy sidebar you can do things like change flask settings and whatnot from but it happened so no time to complain now all the buttons on it work using the alr bundled tools with wine (taskmgr, winecfg, wineserver, etc) except winetricks which i am still figuring out GPTK support!! Made GPTK downloadable finally, also included some checks cuz wine is called wine64 sometimes hopefully that doesn’t infringe on apple’s license?? (they did say they forbid bundling i am pretty sure not downloading)
Devlog 20 (Final one, probably) So turns out one month ago wasn’t the end of stardance and i hadn’t worked on this much on october (burnout) and here we are :< so here are some last minute changes to hopefully make this somewhat shippable Default Flasks So I started working on this “epic feature” of having a default flask that you always should have (mainly to avoid have to figure out what to display when you don’t have any flasks ;>) So the main idea is to check if you have no flasks, if you don’t, It will download GPTK 3.0 and create a flask using GPTK 3.0 (won’t download GPTK if you have it alr tho) but i quickly found out that the plumbing for this was gonna be annoying, mainly cuz swift is a stupid language and swiftui is an even stupider framework (yes i regret not using appkit) so i made an LLM complete the rest of it and reviewed it and it seems fine so i went with it “WineD3D” “Default” So in the part where you select your Graphics translation layer, The default option can’t just be WineD3D since that’s only the default for upstream wine (+ it doesn’t actually do anything when you select thus letting the default DirectX translation run) so let’s just call it default Removed prototypes for features i don’t have to implement :< Like Installer support, literally spent like 4 hours on it before realizing iam outta time so had to cut and also support for DXMT and D3DMetal (those wouldn’t have made any sense even if i made them work since these depend on the runner and we have no specialized runner)
Ships:
Hi, so my goal was to make a small FOSS Wine Frontend for MacOS (sorta like crossover but FOSS, I started this before there was any good alternatives) It’s admittedly very primitive in its current form but i had fun working on it (at the beginning at least) and it taught me Swiftui the only games I tested out are Undertale yellow and RERUN by danidev (ifykyk) and chances are without a heavily patched wine version only simple apps and games will run on it you have the option to download GPTK 3.0 (default when starting it up) and upstream wine (both pretty primitive without patches from the Crossover source tree)...
|
1793354020.3747606
|
1793440420.3747606
|
|
9596
|
Untitled project by @isurajgupta24 | Stardance
|
isurajgupta24
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @isurajgupta24 | Starda Title: Untitled project by @isurajgupta24 | Stardance...
|
1793289416.3471448
|
1793894216.3471448
|
|
9597
|
My first slack bot! by @TheRealDSAL | Stardance
|
TheRealDSAL
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @TheRealDSAL | Stard Title: My first slack bot! by @TheRealDSAL | Stardance...
|
1793396917.2590168
|
1794001717.2590168
|
|
9598
|
Reasearch Paper Assistant by @Shikhar_Singh | Star Reasearch Paper Assistant by @Shikhar_Singh | Stardance...
|
Shikhar_Singh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Reasearch Paper Assistant by @Shikhar_Singh Title: Reasearch Paper Assistant by @Shikhar_Singh | Stardance...
|
1793397377.7855942
|
1794002177.7855942
|
|
9599
|
an app for the medical field by @Harsheyz | Starda an app for the medical field by @Harsheyz | Stardance...
|
Harsheyz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: an app for the medical field by @Harsheyz | Title: an app for the medical field by @Harsheyz | Stardance...
|
1793029726.7570367
|
1793634526.7570367
|
|
9600
|
My awesome macropad! by @lalit | Stardance
|
lalit
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @lalit | Stardance
|
1793274757.0860069
|
1793879557.0860069
|