{"id":31053253,"url":"https://github.com/plinkr/flash-blip","last_synced_at":"2026-04-11T09:13:32.027Z","repository":{"id":309224753,"uuid":"1035326527","full_name":"plinkr/flash-blip","owner":"plinkr","description":"A fast-paced 2D game built with the LÖVE framework. Dodge obstacles, survive as long as you can, and get the highest score","archived":false,"fork":false,"pushed_at":"2025-09-08T06:43:22.000Z","size":213,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-08T07:18:28.763Z","etag":null,"topics":["2d-game","arcade","game","game-development","gamedev","indie-game","love2d","love2d-game","lua","pixel-art","retro-style","vertical-scroller"],"latest_commit_sha":null,"homepage":"","language":"Lua","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/plinkr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-08-10T06:38:25.000Z","updated_at":"2025-09-08T06:10:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"aebe87ab-96d3-4929-9a90-2308d71cc7d0","html_url":"https://github.com/plinkr/flash-blip","commit_stats":null,"previous_names":["plinkr/flash-blip"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/plinkr/flash-blip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plinkr%2Fflash-blip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plinkr%2Fflash-blip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plinkr%2Fflash-blip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plinkr%2Fflash-blip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plinkr","download_url":"https://codeload.github.com/plinkr/flash-blip/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plinkr%2Fflash-blip/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275194015,"owners_count":25421441,"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-09-15T02:00:09.272Z","response_time":75,"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":["2d-game","arcade","game","game-development","gamedev","indie-game","love2d","love2d-game","lua","pixel-art","retro-style","vertical-scroller"],"created_at":"2025-09-15T02:01:18.732Z","updated_at":"2026-04-11T09:13:32.021Z","avatar_url":"https://github.com/plinkr.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FLASH-BLIP\n\n\u003cimg width=\"1800\" height=\"540\" alt=\"banner_flash-blip\" src=\"https://github.com/user-attachments/assets/6f70c19d-98e8-4dd8-8321-8f71d00c383d\" /\u003e\n\nA fast-paced 2D game built with the LOVE framework. Dodge obstacles, survive as long as you can, and get the highest score.\n\nThe game is primarily oriented toward endless mode, where players aim for the highest possible score in an infinite survival challenge.\n\nLevels are fully procedurally generated. The game features 100 unique levels, each built using a deterministic random seed to ensure consistent layouts of points and obstacles across runs. This replaces the previous 10 fixed levels with a scalable, replayable progression system that increases in difficulty and required blips from level 1 to 100.\n\nhttps://plinkr.itch.io/flash-blip\n\n*Inspired by the work of Kenta Cho*\n\n## Technical Details\n\nThe endless mode initializes with random obstacle generation for replayability, drawing from procedural algorithms in [`game.lua`](game/game.lua). The game uses no external assets; all visuals are rendered using simple geometric shapes (e.g., rectangles, circles) via LÖVE's drawing primitives.\n\nFonts are custom-drawn as pixel-based matrices in [`font.lua`](game/font.lua), allowing for lightweight, code-generated typography without bitmap files.\nReference [`text.lua`](game/text.lua) for how text is rendered and positioned in-game.\n\nBackground music is generated procedurally using pure Lua code, via LÖVE's audio APIs and algorithmic composition(reference [`music.lua`](game/music.lua)), no audio assets are required. \n\n\n## How to Play\n\n### Objective\nJump to the next point and dodge the obstacles while jumping, don't let the player's square circle reach the bottom of the screen, collect the powerups and try to achieve the highest score. In Arcade mode, you can try to beat all the levels. For detailed in-game explanations, access the HELP menu.\n\n### Controls\n- SPACE, RETURN, or left-click to blip/move to the next point.\n- C or right-click to ping for powerup collection or phase shift when this powerup is active.\n- ESC to pause, show the menu, or quit.\n- Use the up and down arrow keys to navigate through menu options, and press Enter or Space to select one.\n- R to restart.\n- For Android, touch the screen to blip and hold the screen or use two simultaneous touches to ping. You can sweep with two fingers to scroll the levels or the help.\n\n*You can also use a Game Controller.*\n\n### Powerups\nThere are 6 in total: 3 active that the player activates on pickup, and 3 passive that provide ongoing benefits.\n\n- **Active Powerups**:\n  - Star: Grants 10 seconds of invulnerability, allowing safe passage through obstacles.\n  - Hourglass: Shrinks and slows the orbiting obstacles around points, slows the player's fall scroll speed, and nearly stops the player below 80% of the screen height, lasting 10 seconds.\n  - Phase Shift: Enables a larger faster ping that teleports the player to the next point upon contact with a ping or the next point, ignoring obstacles, lasting 10 seconds.\n\n- **Passive Powerups**:\n  - Bolt: Creates a lightning bolt around two-thirds of the way down the screen. When the player touches it, they are instantly teleported safely to the next point, preventing a fall to the bottom. The effect lasts for 30 seconds.\n  - Score Multiplier: Multiplies the score by 4x while active, lasting 30 seconds.\n  - Spawn Rate Boost: Doubles the rate of random powerup generation, lasting 30 seconds.\n\nPowerups are collected via pinging (right-click, C key, or holding the screen in Android) or blipping over them.\n\n### Difficulty Progression\nDifficulty ramps up dynamically based on points scored, increasing obstacle rotation speed, density, and scrolling speed (reference scaling logic in [`game.lua`](game/game.lua) and [`main.lua`](game/main.lua)).\n\n### Levels\nThe win condition is defined in [`level_definitions.lua`](game/level_definitions.lua) and affected by the level's difficulty, requiring a set number of blips (jumps to next points) to complete the level, endless mode has no win condition, the objective is to get high scores.\n\n## Development Status\nThe game remains in active development. It now features 100 procedurally generated levels with deterministic random seeds, ensuring consistent layouts for each level across runs. An endless mode is also included, with procedurally generated circles, rotating obstacles, and powerups such as slow motion and teleportation. Scoring mechanics and intuitive menus are in place, and future updates may include an online scoreboard for tracking top scores and competitive progression.\n\n## Installation and Running\n\n### Prerequisites\nInstall [`LÖVE framework`](https://love2d.org/) (version 11.5 *Mysterious Mysteries* recommended).\n\n### Clone the Repo\n```\ngit clone https://github.com/plinkr/flash-blip.git\n```\n\n### Run\n```\ncd flash-blip/\nlove game/\n```\nfrom the project directory. No additional dependencies or assets needed.\n\n### Releases\nPre-built releases for Linux, Windows, and Web are available in the [`GitHub Releases`](/../../releases) section. These are generated automatically using GitHub Actions for easy distribution without needing to install LÖVE manually.\n\n## Contributing\nContributions are encouraged, particularly from LÖVE2D learners. Open issues for bugs or feature requests, or submit pull requests for improvements while preserving the no-external-assets approach.\n\n## Screenshots\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp style=\"max-width:900px; margin:0 auto;\"\u003eA few screenshots, click a thumbnail to open the full image.\u003c/p\u003e\n  \u003cdiv style=\"margin-top:12px; overflow-x:auto; white-space:nowrap; padding:8px 4px; -webkit-overflow-scrolling:touch;\"\u003e\n    \u003ca href=\"https://github.com/user-attachments/assets/269a75b3-9023-44f8-8178-8bd77dc633de\" target=\"_blank\" rel=\"noopener\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/269a75b3-9023-44f8-8178-8bd77dc633de\" width=\"280\" style=\"display:inline-block; margin-right:8px; border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.12);\" alt=\"screen10\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/user-attachments/assets/b3074879-0375-458b-a399-a3553bb64d5a\" target=\"_blank\" rel=\"noopener\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/b3074879-0375-458b-a399-a3553bb64d5a\" width=\"280\" style=\"display:inline-block; margin-right:8px; border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.12);\" alt=\"screen1\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/user-attachments/assets/7339ce10-9aed-43db-a4c8-f767d1471c1e\" target=\"_blank\" rel=\"noopener\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/7339ce10-9aed-43db-a4c8-f767d1471c1e\" width=\"280\" style=\"display:inline-block; margin-right:8px; border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.12);\" alt=\"screen2\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/user-attachments/assets/d64fcf5c-2614-4111-a199-8d2f3d4fb577\" target=\"_blank\" rel=\"noopener\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/d64fcf5c-2614-4111-a199-8d2f3d4fb577\" width=\"280\" style=\"display:inline-block; margin-right:8px; border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.12);\" alt=\"screen3\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/user-attachments/assets/974c3ee3-ef76-4e67-973a-a16381dff637\" target=\"_blank\" rel=\"noopener\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/974c3ee3-ef76-4e67-973a-a16381dff637\" width=\"280\" style=\"display:inline-block; margin-right:8px; border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.12);\" alt=\"screen6\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/user-attachments/assets/a4f72ff3-716b-4ec7-b9fc-482cb5570ead\" target=\"_blank\" rel=\"noopener\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/a4f72ff3-716b-4ec7-b9fc-482cb5570ead\" width=\"280\" style=\"display:inline-block; margin-right:8px; border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.12);\" alt=\"screen7\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/user-attachments/assets/f9d19003-1dd6-4cce-ae05-0a15bd2b6590\" target=\"_blank\" rel=\"noopener\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/f9d19003-1dd6-4cce-ae05-0a15bd2b6590\" width=\"280\" style=\"display:inline-block; margin-right:8px; border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.12);\" alt=\"screen8\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/user-attachments/assets/91302b32-f9a5-4494-a1e5-c87483779282\" target=\"_blank\" rel=\"noopener\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/91302b32-f9a5-4494-a1e5-c87483779282\" width=\"280\" style=\"display:inline-block; margin-right:8px; border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.12);\" alt=\"screen9\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/user-attachments/assets/4447f1a4-e363-49f7-ab39-d987e63229cf\" target=\"_blank\" rel=\"noopener\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/4447f1a4-e363-49f7-ab39-d987e63229cf\" width=\"280\" style=\"display:inline-block; margin-right:8px; border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.12);\" alt=\"screen5\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/user-attachments/assets/ec4d357d-b6aa-4399-8ccf-98d714fbea26\" target=\"_blank\" rel=\"noopener\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/ec4d357d-b6aa-4399-8ccf-98d714fbea26\" width=\"280\" style=\"display:inline-block; margin-right:8px; border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.12);\" alt=\"screen4\" /\u003e\n    \u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n## License\nMIT License. See the [`LICENSE`](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplinkr%2Fflash-blip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplinkr%2Fflash-blip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplinkr%2Fflash-blip/lists"}