godot-genre-party
0
总安装量
3
周安装量
安装命令
npx skills add https://github.com/thedivergentai/gd-agentic-skills --skill godot-genre-party
Agent 安装分布
opencode
3
gemini-cli
3
codex
3
claude-code
2
github-copilot
2
Skill 文档
Genre: Party / Minigame Collection
Expert blueprint for party games balancing accessibility, variety, and social fun.
NEVER Do
- NEVER long tutorials â Players want instant fun. 3-second looping GIF + 1-sentence instruction is ideal.
- NEVER excessive downtime â Loading between 10s minigames kills momentum. Keep assets light, use threaded loading, or persistent board scene.
- NEVER inconsistent controls â Minigame A uses A to jump, B uses B. Standardize: A=Accept/Action, B=Back/Cancel across all minigames.
- NEVER forget dynamic input mapping â Remap InputMap at runtime (InputMap.action_add_event) for “p1_jump”, “p2_jump” per controller.
- NEVER ignore accessibility â Color-blind modes, audio cues for visual events, adjustable difficulty. Party games need inclusive design.
Available Scripts
MANDATORY: Read the appropriate script before implementing the corresponding pattern.
party_input_router.gd
4-player device isolation for local multiplayer. Maps device_id to player_id, handles join requests, routes inputs to player-specific signals.
Core Loop
- Lobby: Players join and select characters/colors.
- Meta: Players move on a board or vote for the next game.
- Play: Short, intense minigame (30s – 2m).
- Score: Winners get points/coins.
- Repeat: Cycle continues until a turn limit or score limit.
Skill Chain
| Phase | Skills | Purpose |
|---|---|---|
| 1. Input | input-mapping |
Handling 2-4 local controllers dynamically |
| 2. Scene | godot-scene-management |
Loading/Unloading minigames cleanly |
| 3. Data | godot-resource-data-patterns |
Defining minigames via Resource files |
| 4. UI | godot-ui-containers |
Scoreboards, instructions screens |
| 5. Logic | godot-turn-system |
Managing the “Board Game” phase |
Architecture Overview
1. Minigame Definition
Using Resources to define what a minigame is.
# minigame_data.gd
class_name MinigameData extends Resource
@export var title: String
@export var scene_path: String
@export var instructions: String
@export var is_1v3: bool = false
@export var thumbnail: Texture2D
2. The Party Manager
Singleton that persists between minigames.
# party_manager.gd
extends Node
var players: Array[PlayerData] = [] # Tracks score, input_device_id, color
var current_round: int = 1
var max_rounds: int = 10
func start_minigame(minigame: MinigameData) -> void:
# 1. Show instructions scene
await show_instructions(minigame)
# 2. Transition to actual game
get_tree().change_scene_to_file(minigame.scene_path)
# 3. Pass player data to the new scene
# (The minigame scene must look up PartyManager in _ready)
3. Minigame Base Class
Every minigame inherits from this to ensure compatibility.
# minigame_base.gd
class_name Minigame extends Node
signal game_ended(results: Dictionary)
func _ready() -> void:
setup_players(PartyManager.players)
start_countdown()
func end_game() -> void:
# Calculate winner
game_ended.emit(results)
PartyManager.handle_minigame_end(results)
Key Mechanics Implementation
Local Multiplayer Input
Handling dynamic device assignment.
# player_controller.gd
@export var player_id: int = 0 # 0, 1, 2, 3
func _physics_process(delta: float) -> void:
var device = PartyManager.players[player_id].device_id
# Use the specific device ID for input
var direction = Input.get_vector("p%s_left" % player_id, ...)
# Better approach: Remap InputMap actions at runtime explicitly
Asymmetric Gameplay (1v3)
Balancing the “One” vs the “Many”.
- The One: Powerful, high HP, unique abilities (e.g., Bowser suit).
- The Many: Weak individually, must cooperate to survive/win.
Godot-Specific Tips
- SubViewport: Powerful for 4-player split-screen. Each player gets a camera, all rendering the same world (or different worlds!).
- InputEventJoypadButton: Use
Input.get_connected_joypads()to auto-detect controllers on the Lobby screen. - Remapping: Godot’s
InputMapsystem can be modified at runtime usingInputMap.action_add_event(). Creating “p1_jump”, “p2_jump” dynamically is a common pattern.
Common Pitfalls
- Long Tutorials: Players just want to play. Fix: 3-second looping GIF + 1 sentence instruction overlay before the game starts.
- Downtime: Loading times between 10-second minigames. Fix: Keep minigame assets light. Use a “Board” scene that stays loaded in the background if possible, or use creating
Threadloading. - Confusing Controls: Minigame A uses “A” to jump, Minigame B uses “B”. Fix: Standardize. “A” is always Accept/Action. “B” is always Back/Cancel.
Reference
- Master Skill: godot-master