2.9 KiB
2.9 KiB
TIC-80 Lua Code Regularities
Based on the analysis of mranderson.lua, the following regularities and conventions should be followed for future modifications and development within this project:
General Structure & Lifecycle
- 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. - Initialization: Game state variables and one-time setup should occur at the global scope or within a dedicated initialization function called once.
Naming Conventions
- Functions: Custom function names should use
PascalCase(e.g.,UpdatePlayer,DrawHUD). Existing mathematical helper functions likeSQR()are an exception. - Variables: Variables should use
snake_case(e.g.,player_x,game_state), aligning with the existingflip_xvariable. - Constants: Constants should be named using
SCREAMING_SNAKE_CASE(e.g.,MAX_SPEED,GRAVITY_STRENGTH).
Variable Handling & Grouping
- 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.
- 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}). - 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:
instead of
my_table = { key1 = value1, key2 = value2, }my_table = {key1 = value1, key2 = value2}.
Functions
- Helper Functions: Reusable logic or common calculations should be extracted into separate, clearly named helper functions.
Input Handling
btn()for Input: User input should be handled primarily through the TIC-80btn()function, checking for specific button presses or states.
Graphics & Rendering
spr()for Sprites: Individual sprites should be rendered using thespr()function.map()for Maps: Tilemaps should be drawn using themap()function.Print.text()for Text: Text display should utilize thePrint.text()function.
Code Style
- Indentation: Use consistent indentation, likely 2 spaces, for code blocks to enhance readability.
- Comments: Employ comments to explain complex logic, delineate code sections, or clarify non-obvious design choices.
- 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 addorgit commitoperations. This responsibility will be handled by the user.