4
0
Files
mranderson/GEMINI.md

2.9 KiB

TIC-80 Lua Code Regularities

Based on the analysis of impostor.lua, the following regularities and conventions should be followed for future modifications and development within this project:

General Structure & Lifecycle

  1. TIC-80 Game Loop: All primary game logic, updates, and rendering should be encapsulated within the TIC() function, which serves as the main entry point for each frame of the TIC-80 game cycle.
  2. Initialization: Game state variables and one-time setup should occur at the global scope or within a dedicated initialization function called once.

Naming Conventions

  1. Functions: Custom function names should use PascalCase (e.g., UpdatePlayer, DrawHUD). Existing mathematical helper functions like SQR() are an exception.
  2. Variables: Variables should use snake_case (e.g., player_x, game_state), aligning with the existing flip_x variable.
  3. Constants: Constants should be named using SCREAMING_SNAKE_CASE (e.g., MAX_SPEED, GRAVITY_STRENGTH).

Variable Handling & Grouping

  1. Global Variables: Major game state variables (e.g., position, velocity, animation frames) are typically defined at the global scope for easy access throughout the game loop.
  2. Lua Tables for Grouping: Collections of related data should be grouped into Lua tables for better organization and readability (e.g., player = {x = 0, y = 0, speed = 1}).
  3. Table Formatting: Tables with multiple elements or complex structures should always be defined with line breaks for each key-value pair, rather than inline, to improve readability. Example:
    my_table = {
      key1 = value1,
      key2 = value2,
    }
    
    instead of my_table = {key1 = value1, key2 = value2}.

Functions

  1. Helper Functions: Reusable logic or common calculations should be extracted into separate, clearly named helper functions.

Input Handling

  1. btn() for Input: User input should be handled primarily through the TIC-80 btn() function, checking for specific button presses or states.

Graphics & Rendering

  1. spr() for Sprites: Individual sprites should be rendered using the spr() function.
  2. map() for Maps: Tilemaps should be drawn using the map() function.
  3. Print.text() for Text: Text display should utilize the Print.text() function.

Code Style

  1. Indentation: Use consistent indentation, likely 2 spaces, for code blocks to enhance readability.
  2. Comments: Employ comments to explain complex logic, delineate code sections, or clarify non-obvious design choices.
  3. Code Sections: Use comments (e.g., --- INIT ---, --- UPDATE ---, --- DRAW ---, --- HELPERS ---) to clearly delineate logical sections of the codebase.

Agent Directives

  • Git Operations: In the future, do not perform git add or git commit operations. This responsibility will be handled by the user.