Skip to content

Conversation

LeandroCustodio2002
Copy link

This pull request adds Flappy Pixel, a minimalistic Flappy Bird-inspired game where you control a single-pixel bird through pipes while collecting coins. The game combines retro simplicity with responsive gameplay and a fun audio-visual experience. The game is fully integrated into the normal operating system workflow, making it launchable like any standard application.

Flappy Pixel gameplay screenshot

Key Features

  • Dynamic Obstacles: Pipes spawn randomly along the Y-axis for endless replayability
  • Coin Collection: Collect coins to increase your score and trigger fun sound effects
  • Highscore & Medals: Track your progress with a highscore system and unlock colorful medals based on performance
  • Menus: Intuitive start and game-over menus for smooth gameplay flow
  • Custom Audio: Sound effects and music fully generated with Godot’s AudioStreamPlayer, keeping the game lightweight and retro
  • OS Integration: The game runs as a standard application within the operating system workflow

Highlights

  • Retro minimalism with a single-pixel player
  • Wave and rainbow effects for highscore and medal notifications
  • Responsive controls and classic Flappy Bird mechanics

@popcar2
Copy link
Owner

popcar2 commented Sep 6, 2025

Did you use AI to make this? I can review the code and give you pointers if you'd like but as it stands I cannot merge this, since the code has many weird errors and oddities.

@LeandroCustodio2002
Copy link
Author

Did you use AI to make this? I can review the code and give you pointers if you'd like but as it stands I cannot merge this, since the code has many weird errors and oddities.

Yes, I used AI to assist and speed up some parts of the code. If you could review my PR and provide some feedback, it would help me a lot. Im willing to make any necessary adjustments, I would really like to be able to contribute to the project.

@popcar2
Copy link
Owner

popcar2 commented Sep 6, 2025

Sure, I'll review it soon. This doesn't guarantee your PR will get merged, however. AI writes lots of garbage and I would recommend learning Godot & GDScript proper to contribute to projects.

Copy link
Owner

@popcar2 popcar2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just skimmed the code but these are the biggest issues. Honestly, please don't use AI for coding. Especially in GDScript. People will realize instantly that it's poorly made with many issues.

@onready var button: Button = $Panel/VBoxContainer/Button

func _ready() -> void:
label_title.text = "Flappy Pixel"
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Set the default label text in the labels themselves, not in functions

button.text = "Start Game"

func _on_button_pressed() -> void:
emit_signal("start_game")
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is anything using this signal?

@export var shadow: PackedScene
@onready var hud: CanvasLayer = $Hud
@onready var sfx: Node = $sfx
@onready var song: AudioStreamPlayer2D = $song
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have better node names please, "song" is unclear. Also, it shouldn't be an AudioStreamPlayer2D because that's positional audio.


func _physics_process(delta: float) -> void:
if life > 0:
if (is_on_ceiling() or is_on_wall() or is_on_floor()) and alive:
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why check if it's on ceiling/wall/floor?

if not is_on_floor():
velocity.y += gravity * delta

# Pulo
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pulo???

value = -1.0
generator_playback.push_frame(Vector2(value, value))

func play_coin() -> void:
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The coin sound is pretty bad

generator_playback.push_frame(Vector2(value, value))
await get_tree().create_timer(duration).timeout

func giorno() -> void:
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

giorno???

self.rotation += 4 * delta

move_and_slide()
if not alive and life == 1:
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why would alive be set false when life > 0?

@export var coin: PackedScene

@onready var deathScreen: CanvasLayer = $DeathScreen
@onready var bg: ParallaxBackground = $Background
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use Parallax2D.

queue_free()

func _process(_delta: float) -> void:
position.x -= 1
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is framerate-dependant. Multiply speed by delta. This applies to all your scripts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants