{"id":31790120,"url":"https://github.com/arceryz/star-pong","last_synced_at":"2025-10-10T15:22:27.083Z","repository":{"id":314242697,"uuid":"1051218143","full_name":"arceryz/star-pong","owner":"arceryz","description":"Arcade-style Pong with spaceship dueling mechanics for extra strategy.","archived":false,"fork":false,"pushed_at":"2025-10-01T08:23:39.000Z","size":17653,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-01T08:41:53.302Z","etag":null,"topics":["arcade","arcade-game","crt","csharp","game","game-engine","game-engine-2d","game-framework","gamedev","monogame","monogame-framework","multiplayer","multiplayer-game","pong","space"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arceryz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-05T16:16:51.000Z","updated_at":"2025-10-01T07:20:42.000Z","dependencies_parsed_at":"2025-09-18T22:57:51.858Z","dependency_job_id":"0087d4b3-834d-408d-b27c-e3a99efff2f8","html_url":"https://github.com/arceryz/star-pong","commit_stats":null,"previous_names":["arceryz/gp1-pong","arceryz/star-pong"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/arceryz/star-pong","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arceryz%2Fstar-pong","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arceryz%2Fstar-pong/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arceryz%2Fstar-pong/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arceryz%2Fstar-pong/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arceryz","download_url":"https://codeload.github.com/arceryz/star-pong/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arceryz%2Fstar-pong/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279004576,"owners_count":26083735,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arcade","arcade-game","crt","csharp","game","game-engine","game-engine-2d","game-framework","gamedev","monogame","monogame-framework","multiplayer","multiplayer-game","pong","space"],"created_at":"2025-10-10T15:22:25.826Z","updated_at":"2025-10-10T15:22:27.077Z","avatar_url":"https://github.com/arceryz.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# STAR-PONG\n\n\u003cimg align=\"left\" style=\"width:350px\" src=\"https://github.com/arceryz/star-pong/blob/master/StarPong.gif\" width=\"380px\"\u003e\n\nSTAR-PONG is a 2-player variant of pong where both player must protect their mothership\nfrom the bomb, while also fighting each other with bullets in space. The game tries to\nbe inspired by the arcade era, with sounds, shaders and pixel art to match. \n\n[Play on Itch.io](https://arceryz.itch.io/star-pong) or download from the [Releases](https://github.com/arceryz/star-pong/releases).\n\n---\n\u003cbr\u003e\u003cbr\u003e\n\n**Created by**\n- Timothy van der Valk (Programmer/Creator) [LinkedIn](https://www.linkedin.com/in/timothy-van-der-valk-3185ba323/) [Website](https://timothyvv.nl/)\n- Hunter Short (Music) [LinkedIn](https://www.linkedin.com/in/hunter-short-68708ba4/)\n- Theo Daskalakis (Sound Effects) [LinkedIn](https://www.linkedin.com/in/theo-daskalakis-3259a3328/)\n- Ro van der Neut (Art) [LinkedIn](https://www.linkedin.com/in/ro-van-der-neut-679a6a380/)\n\n## Features\n\n- 2-player and player-vs-AI mode.\n- Pong gameplay where the bomb direction can be controlled.\n- Dogfighting with bullets, adding another strategic layer.\n- Energy system for bullets and shield.\n- Shield to deflect bullets and bomb, acts as the pong paddle.\n- Animated sprites for player ship, bomb, bullets, and vfx.\n- Parallax scrolling starfield background.\n- Soundtracks for title, gameplay, sudden death and game end.\n- Sound effects for most game elements.\n- CRT shader effect for retro feel.\n- Turbo-mode in settings menu, makes everything ultra-rapid-fire and faster (including AI).\n- Health bars and score display in-game.\n- Tons of explosions and and fire.\n- Screen shake integrated in the CRT-shader post process.\n- Debug visualisations for collision boxes (Press `(Z)`) and scene tree (Press `(T)`).\n- Easter egg^^.\n\nThis game and all its code, except that in [/External](/External), was written by me from the Monday 8th of September 2025, to Sunday 21st. \nIt is written for the course *Game Programming 1* at the Utrecht University of Applied Sciences. The assignment was to create *Pong*.\nI decided to collaborate with friends to extend the basic implementation of pong to this.\n\nAll of the assets, which includes Music, Sound Effects and Art, we're created specifically for this project in the same time frame or shorter. \nThe only external code I used is the [FastNoiseLite Library](https://github.com/Auburn/FastNoiseLite) for the random movement of the mothership,\nand the [Primitives2D Library](https://github.com/DoogeJ/MonoGame.Primitives2D) for drawing debug shapes. None of these libraries are critical to the game.\n\nThe game uses CRT-effect shader that I wrote myself. It features a barrel distortion, scanline effect, blurring and bar lines effect.\n\n## Controls\n\nThe controls are explained in the game as well. The game is designed for two players to play on the same keyboard.\nThe AI opponent takes control of the red team if enabled.\n\n|   | Blue | Red  |\n|------|------|------|\n| Ship Movement | W/S | Up/Down arrows |\n| Shoot | C | O |\n| Toggle Shield | V | P |\n\nIn addition to this, there are some shortcut controls explained on the title screen as well:\n- `(Z)` Toggle collisionbox visualisations.\n- `(T)` Toggle Scene Tree visualiser. Useful for debugging and learning.\n- `(Esc)` Quit the game.\n- `(F)` Toggle fullscreen.\n- `(Shift-R)` Return to title screen from anywhere.\n\nThe game window can be resized, and the game will scale to fit the window while maintaining aspect ratio.\nThis code is inside the *Engine* class. It uses a rendertarget to render the game to, and then draws that to the real screen.\n\n## Technical Details\n\nWritten in C# using Monogame, I initially created a naive implementation of pong with no notion of a game objects or reusable components.\nWhen I started extending the game to add bullets, background layers and other objects, it became quickly apparent that a more structured approach was needed.\nThis is when I started to implement a GameObject system, inspired by Godot's Scene Tree hierarchy. Components are game objects, and they can be organized\nin a tree structure to inherit position, draw layers and update order. This system made writing the game much more pleasant. Logic for anything can be\nencapsulated in a game object and then added to the scene.\n\nSpeaking of *scenes*, these are also just nodes in the tree. The Scene Tree simply switches the root node when changing scenes. Garbage collection\nis handled by clearing up references to the old scene. The collision detection system uses the \"Groups\" feature of the Scene Tree, it queries\nall objects in the \"physics\" group and then performs naive O(n^2) collision detection. This is not optimal, but it works fine for the small amount of objects in the game.\nI extended the input system from Monogame to track key *presses* as well.\n\nBuilding on top of the scene tree, I used a draw sorting system that sorts objects based on their draw layer and their child index.\nThis ensures that children always draw on top of parents, but that draw layers are still respected. This is similar to Godot's architecture.\n\nThe core of the engine consists of\n- [Engine](/Source/Engine.cs)\n- [Scene Tree](/Source/Framework/SceneTree.cs)\n- [Draw Sorter](/Source/Framework/DrawSorter.cs)\n- [Physics](/Source/Framework/Physics.cs)\n- [Input](/Source/Framework/Input.cs)\n\nEverything else is part of the framework for building actual games (sprites, buttons, labels, fonts etc). No AI was used in the writing of this code.\nAll design decisions are made by me, and all of this code is written by me, by hand. I learned a lot about comfortable ways to structure game engine code,\ndealing with assets and so on. The result is a sturdy framework that can be used for future assignments.\n\n## LICENSE\n\nThe source code is licensed under the MIT license. See [LICENSE](/LICENSE) for more information.\nThe assets are NOT under the MIT license. Please contact the author of the respective asset for more information.\nThe authors are one of the four mentioned at the top from (Art, SFX and Music). Respect their work and do not use it without permission.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farceryz%2Fstar-pong","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farceryz%2Fstar-pong","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farceryz%2Fstar-pong/lists"}