Every system in Microwave Man is implemented in GDScript and runs inside Godot’s physics and scene tree. This page documents the exact values and logic behind movement, collection, scoring, and the overall flow from the main menu through to the end screen, drawn directly from the source code.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/titledgames/microwave-man/llms.txt
Use this file to discover all available pages before exploring further.
Movement physics
The player character (player.gd) is a CharacterBody2D. Each physics frame, gravity is applied when the player is not on the floor, and horizontal velocity is set directly from input.
- Speed: 200 px/s horizontal — set instantly when a direction key is held.
- Gravity: 980 units per second squared, applied every frame while airborne.
- Deceleration: When no direction key is pressed,
move_towardreduces horizontal velocity to 0 at a rate ofSPEED(200) per second, producing immediate but smooth stopping rather than a hard snap.
Jumping
Jumping is gated to the floor. The player’s vertical velocity is set toJUMP_VELOCITY (-350) only when the jump action is pressed and is_on_floor() returns true. A sound effect plays on every valid jump.
Animations
The player has two named animations on itsAnimatedSprite2D:
default— plays whenever the player’s speed vector has a non-zero length (i.e., the player is moving or falling).coin— plays when a coin is collected. While it is active, theis_playing_specialflag preventsdefaultfrom interrupting it.
Coin collection
Coins areArea2D nodes (coin.gd). When the player’s physics body enters the coin’s area, the following sequence runs:
Verify the body is the player
The coin checks
body.is_in_group("player") to ignore non-player collisions.Trigger collect animation
If the player has the
play_collect_animation method, it is called, setting is_playing_special = true and playing the "coin" sprite animation.Play coin sound
A new instance of
coin_sfx.tscn is added to the current scene’s tree. Using a separate scene instance allows overlapping sound effects without interrupting each other.Scoring
Score is time-based, not coin-based. AScoreTimer node in main.gd fires on a regular interval, and each timeout increments the score by 1. Collecting coins does not affect the score counter.
ScoreLabel is updated immediately after each increment via $HUD.update_score(score), which sets the label’s text to the string representation of the current score.
HUD
The HUD (hud.gd) is a CanvasLayer that overlays the gameplay scene. It manages three UI elements:
ScoreLabel— displays the current score as a string.Message— a timed text display used for “Get Ready” and “Game Over” messages. After$MessageTimertimes out the message hides automatically.StartButton— shown after the Game Over message sequence completes, allowing the player to restart.
Game flow
Main menu
The player sees the title screen (
main_menu.tscn). The build version is displayed if set in project settings. Press Play Game to continue.Get Ready
new_game() resets the score to 0, moves the player to the start position, and tells the HUD to show “Get Ready”. The StartTimer provides a brief delay before gameplay begins.Gameplay
The player navigates the level, collecting coins and accumulating time-based score. The
ScoreTimer runs continuously until game_over() is called.Discord Rich Presence
On desktop builds, Microwave Man sets a Discord Rich Presence status using theDiscordRPC engine singleton. This is skipped automatically on the web build.
- Details:
Play as a microwave! - State:
Playing the game!
