godot-genre-romance

安装量: 36
排名: #19494

安装

npx skills add https://github.com/thedivergentai/gd-agentic-skills --skill godot-genre-romance
Genre: Romance & Dating Sim
Romance games are built on the "Affection Economy"—the management of player time and resources to influence NPC attraction, trust, and intimacy.
Core Loop
Meet
Encounter potential love interests and establish baseline rapport.
Date
Engage in structured events to learn preferences and test compatibility.
Deepen
Invest resources (time, gifts, choices) to increase affection/stats.
Branch
Story diverges into character-specific "Routes" based on major milestones.
Resolve
Reach a specialized ending (Good/Normal/Bad) based on relationship quality. NEVER Do in Romance Games NEVER create "Vending Machine" romance — If giving 10 gifts always equals a confession, the characters feel like objects. ALWAYS incorporate variables like current mood, timing, and stat thresholds (e.g., "Must have 10 Courage to ask out"). NEVER use 100% opaque stats — If the player doesn't know why they failed a date, they feel cheated. ALWAYS provide subtle feedback or visible "Relationship Screens" (e.g., hearts pulsing, trust bars filling). NEVER use binary Affection (Love/Hate) — Real relationships are complex. Use multi-axis stats such as Attraction (physical/chemistry), Trust (emotional safety), and Comfort (familiarity) for deeper simulation. NEVER use the "Same Date Order" trap — Repeating the exact same date sequence for every character makes the game feel repetitive. ALWAYS vary date locations, activities, and dialogue structures per love interest. NEVER forget "Missable" Milestones — If a player misses the "Valentine's Day" event because they were working, that's a meaningful (if painful) consequence. Don't force every event to happen regardless of player choices. NEVER ignore NPC Autonomy — If an NPC only exists for the player, they feel hollow. Give them their own schedules, goals, and the ability to reject the player if specific conditions (like low trust) aren't met. Phase Skills Purpose 1. Stats dictionaries , resources Tracking multi-axis affection, character profiles 2. Timeline autoload-architecture , signals Managing time/days, triggering scheduled dates 3. Narrative godot-dialogue-system , visual-novel Conversational branching and choice consequence 4. Persistence godot-save-load-systems Saving relationship states, CG gallery, flags 5. Aesthetics ui-theming , godot-tweening Heart-themed UI, blushing effects, emotive icons Architecture Overview 1. Affection Manager (The Heart) Handles complex relationship stats and gift preferences for all characters.

affection_manager.gd

class_name AffectionManager extends Node signal milestone_reached ( character_id , level ) var relationship_data : Dictionary = { }

character_id:

func add_affection ( char_id : String , type : String , amount : int ) -> void : if not relationship_data . has ( char_id ) : relationship_data [ char_id ] = { "attraction" : 0 , "trust" : 0 , "comfort" : 0 } relationship_data [ char_id ] [ type ] = clamp ( relationship_data [ char_id ] [ type ] + amount , - 100 , 100 ) check_milestones ( char_id ) func get_gift_effect ( char_id : String , item_id : String ) -> int :

Logic for likes/dislikes with diminishing returns

return 10

Placeholder

  1. Date Event System Manages the success or failure of romantic outings.

date_event_system.gd

func run_date ( character_id : String , location_res : DateLocation ) -> void : var score = 0

Weighted calculation

score += relationship_data [ character_id ] [ "attraction" ] * location_res . chemistry_mod score += relationship_data [ character_id ] [ "trust" ] * location_res . safety_mod if score

location_res . success_threshold : play_date_outcome ( "SUCCESS" , character_id ) else : play_date_outcome ( "FAILURE" , character_id ) 3. Route Manager Controls story branching and persistent unlocks.

route_manager.gd

var unlocked_routes : Array [ String ] = [ ] func lock_in_route ( char_id : String ) :

Detect conflicts with other routes here

if flags . get ( "on_route" ) : return current_route = char_id flags [ "on_route" ] = true unlocked_cgs . append ( char_id + "_prologue" ) Key Mechanics Implementation Emotional Feedback (Juice) Don't just change a number; show the change.

ui_feedback.gd

func
play_heart_burst
(
pos
:
Vector2
)
:
var
heart
=
heart_scene
.
instantiate
(
)
add_child
(
heart
)
heart
.
global_position
=
pos
var
tween
=
create_tween
(
)
.
set_parallel
(
)
tween
.
tween_property
(
heart
,
"scale"
,
Vector2
(
1.5
,
1.5
)
,
0.5
)
tween
.
tween_property
(
heart
,
"modulate:a"
,
0.0
,
0.5
)
Time-Gated Events
Romance thrives on anticipation.
Deadline Scheduling
"Confess by June 15th or lose."
Contextual Dialogue
Characters reacting differently based on time of day or weather.
Common Pitfalls
The "Pervert" Trap
Forcing the player to always pick the flirtiest option to win.
Fix
Allow "Trust" and "Friendship" paths to lead to romance eventually.
Opaque Success
Failing a date without knowing why.
Fix
Use character dialogue to hint at preferences ("I'm not really a fan of loud places...").
Route Conflict
Accidentally dating two people with zero consequences.
Fix
Implement a "Jealousy" or "Conflict Detection" system in the Route Manager.
Godot-Specific Tips
Resources for Characters
Use
CharacterProfile
resources to store base stats, sprites, and gift preferences.
RichTextLabel Animations
Use custom BBCode for "blushing" text (pulsing pink) or "nervous" text (shaking).
Dialogic Integration
While this skill focuses on the systems , pairing it with Godot's Dialogic plugin is highly recommended for handling the actual dialogue boxes. Reference Master Skill: godot-master Sub-specialty: godot-genre-visual-novel
返回排行榜