kollabor 0.4.9__py3-none-any.whl → 0.4.15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agents/__init__.py +2 -0
- agents/coder/__init__.py +0 -0
- agents/coder/agent.json +4 -0
- agents/coder/api-integration.md +2150 -0
- agents/coder/cli-pretty.md +765 -0
- agents/coder/code-review.md +1092 -0
- agents/coder/database-design.md +1525 -0
- agents/coder/debugging.md +1102 -0
- agents/coder/dependency-management.md +1397 -0
- agents/coder/git-workflow.md +1099 -0
- agents/coder/refactoring.md +1454 -0
- agents/coder/security-hardening.md +1732 -0
- agents/coder/system_prompt.md +1448 -0
- agents/coder/tdd.md +1367 -0
- agents/creative-writer/__init__.py +0 -0
- agents/creative-writer/agent.json +4 -0
- agents/creative-writer/character-development.md +1852 -0
- agents/creative-writer/dialogue-craft.md +1122 -0
- agents/creative-writer/plot-structure.md +1073 -0
- agents/creative-writer/revision-editing.md +1484 -0
- agents/creative-writer/system_prompt.md +690 -0
- agents/creative-writer/worldbuilding.md +2049 -0
- agents/data-analyst/__init__.py +30 -0
- agents/data-analyst/agent.json +4 -0
- agents/data-analyst/data-visualization.md +992 -0
- agents/data-analyst/exploratory-data-analysis.md +1110 -0
- agents/data-analyst/pandas-data-manipulation.md +1081 -0
- agents/data-analyst/sql-query-optimization.md +881 -0
- agents/data-analyst/statistical-analysis.md +1118 -0
- agents/data-analyst/system_prompt.md +928 -0
- agents/default/__init__.py +0 -0
- agents/default/agent.json +4 -0
- agents/default/dead-code.md +794 -0
- agents/default/explore-agent-system.md +585 -0
- agents/default/system_prompt.md +1448 -0
- agents/kollabor/__init__.py +0 -0
- agents/kollabor/analyze-plugin-lifecycle.md +175 -0
- agents/kollabor/analyze-terminal-rendering.md +388 -0
- agents/kollabor/code-review.md +1092 -0
- agents/kollabor/debug-mcp-integration.md +521 -0
- agents/kollabor/debug-plugin-hooks.md +547 -0
- agents/kollabor/debugging.md +1102 -0
- agents/kollabor/dependency-management.md +1397 -0
- agents/kollabor/git-workflow.md +1099 -0
- agents/kollabor/inspect-llm-conversation.md +148 -0
- agents/kollabor/monitor-event-bus.md +558 -0
- agents/kollabor/profile-performance.md +576 -0
- agents/kollabor/refactoring.md +1454 -0
- agents/kollabor/system_prompt copy.md +1448 -0
- agents/kollabor/system_prompt.md +757 -0
- agents/kollabor/trace-command-execution.md +178 -0
- agents/kollabor/validate-config.md +879 -0
- agents/research/__init__.py +0 -0
- agents/research/agent.json +4 -0
- agents/research/architecture-mapping.md +1099 -0
- agents/research/codebase-analysis.md +1077 -0
- agents/research/dependency-audit.md +1027 -0
- agents/research/performance-profiling.md +1047 -0
- agents/research/security-review.md +1359 -0
- agents/research/system_prompt.md +492 -0
- agents/technical-writer/__init__.py +0 -0
- agents/technical-writer/agent.json +4 -0
- agents/technical-writer/api-documentation.md +2328 -0
- agents/technical-writer/changelog-management.md +1181 -0
- agents/technical-writer/readme-writing.md +1360 -0
- agents/technical-writer/style-guide.md +1410 -0
- agents/technical-writer/system_prompt.md +653 -0
- agents/technical-writer/tutorial-creation.md +1448 -0
- core/__init__.py +0 -2
- core/application.py +343 -88
- core/cli.py +229 -10
- core/commands/menu_renderer.py +463 -59
- core/commands/registry.py +14 -9
- core/commands/system_commands.py +2461 -14
- core/config/loader.py +151 -37
- core/config/service.py +18 -6
- core/events/bus.py +29 -9
- core/events/executor.py +205 -75
- core/events/models.py +27 -8
- core/fullscreen/command_integration.py +20 -24
- core/fullscreen/components/__init__.py +10 -1
- core/fullscreen/components/matrix_components.py +1 -2
- core/fullscreen/components/space_shooter_components.py +654 -0
- core/fullscreen/plugin.py +5 -0
- core/fullscreen/renderer.py +52 -13
- core/fullscreen/session.py +52 -15
- core/io/__init__.py +29 -5
- core/io/buffer_manager.py +6 -1
- core/io/config_status_view.py +7 -29
- core/io/core_status_views.py +267 -347
- core/io/input/__init__.py +25 -0
- core/io/input/command_mode_handler.py +711 -0
- core/io/input/display_controller.py +128 -0
- core/io/input/hook_registrar.py +286 -0
- core/io/input/input_loop_manager.py +421 -0
- core/io/input/key_press_handler.py +502 -0
- core/io/input/modal_controller.py +1011 -0
- core/io/input/paste_processor.py +339 -0
- core/io/input/status_modal_renderer.py +184 -0
- core/io/input_errors.py +5 -1
- core/io/input_handler.py +211 -2452
- core/io/key_parser.py +7 -0
- core/io/layout.py +15 -3
- core/io/message_coordinator.py +111 -2
- core/io/message_renderer.py +129 -4
- core/io/status_renderer.py +147 -607
- core/io/terminal_renderer.py +97 -51
- core/io/terminal_state.py +21 -4
- core/io/visual_effects.py +816 -165
- core/llm/agent_manager.py +1063 -0
- core/llm/api_adapters/__init__.py +44 -0
- core/llm/api_adapters/anthropic_adapter.py +432 -0
- core/llm/api_adapters/base.py +241 -0
- core/llm/api_adapters/openai_adapter.py +326 -0
- core/llm/api_communication_service.py +167 -113
- core/llm/conversation_logger.py +322 -16
- core/llm/conversation_manager.py +556 -30
- core/llm/file_operations_executor.py +84 -32
- core/llm/llm_service.py +934 -103
- core/llm/mcp_integration.py +541 -57
- core/llm/message_display_service.py +135 -18
- core/llm/plugin_sdk.py +1 -2
- core/llm/profile_manager.py +1183 -0
- core/llm/response_parser.py +274 -56
- core/llm/response_processor.py +16 -3
- core/llm/tool_executor.py +6 -1
- core/logging/__init__.py +2 -0
- core/logging/setup.py +34 -6
- core/models/resume.py +54 -0
- core/plugins/__init__.py +4 -2
- core/plugins/base.py +127 -0
- core/plugins/collector.py +23 -161
- core/plugins/discovery.py +37 -3
- core/plugins/factory.py +6 -12
- core/plugins/registry.py +5 -17
- core/ui/config_widgets.py +128 -28
- core/ui/live_modal_renderer.py +2 -1
- core/ui/modal_actions.py +5 -0
- core/ui/modal_overlay_renderer.py +0 -60
- core/ui/modal_renderer.py +268 -7
- core/ui/modal_state_manager.py +29 -4
- core/ui/widgets/base_widget.py +7 -0
- core/updates/__init__.py +10 -0
- core/updates/version_check_service.py +348 -0
- core/updates/version_comparator.py +103 -0
- core/utils/config_utils.py +685 -526
- core/utils/plugin_utils.py +1 -1
- core/utils/session_naming.py +111 -0
- fonts/LICENSE +21 -0
- fonts/README.md +46 -0
- fonts/SymbolsNerdFont-Regular.ttf +0 -0
- fonts/SymbolsNerdFontMono-Regular.ttf +0 -0
- fonts/__init__.py +44 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/METADATA +54 -4
- kollabor-0.4.15.dist-info/RECORD +228 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/top_level.txt +2 -0
- plugins/agent_orchestrator/__init__.py +39 -0
- plugins/agent_orchestrator/activity_monitor.py +181 -0
- plugins/agent_orchestrator/file_attacher.py +77 -0
- plugins/agent_orchestrator/message_injector.py +135 -0
- plugins/agent_orchestrator/models.py +48 -0
- plugins/agent_orchestrator/orchestrator.py +403 -0
- plugins/agent_orchestrator/plugin.py +976 -0
- plugins/agent_orchestrator/xml_parser.py +191 -0
- plugins/agent_orchestrator_plugin.py +9 -0
- plugins/enhanced_input/box_styles.py +1 -0
- plugins/enhanced_input/color_engine.py +19 -4
- plugins/enhanced_input/config.py +2 -2
- plugins/enhanced_input_plugin.py +61 -11
- plugins/fullscreen/__init__.py +6 -2
- plugins/fullscreen/example_plugin.py +1035 -222
- plugins/fullscreen/setup_wizard_plugin.py +592 -0
- plugins/fullscreen/space_shooter_plugin.py +131 -0
- plugins/hook_monitoring_plugin.py +436 -78
- plugins/query_enhancer_plugin.py +66 -30
- plugins/resume_conversation_plugin.py +1494 -0
- plugins/save_conversation_plugin.py +98 -32
- plugins/system_commands_plugin.py +70 -56
- plugins/tmux_plugin.py +154 -78
- plugins/workflow_enforcement_plugin.py +94 -92
- system_prompt/default.md +952 -886
- core/io/input_mode_manager.py +0 -402
- core/io/modal_interaction_handler.py +0 -315
- core/io/raw_input_processor.py +0 -946
- core/storage/__init__.py +0 -5
- core/storage/state_manager.py +0 -84
- core/ui/widget_integration.py +0 -222
- core/utils/key_reader.py +0 -171
- kollabor-0.4.9.dist-info/RECORD +0 -128
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/WHEEL +0 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/entry_points.txt +0 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,1122 @@
|
|
|
1
|
+
<!-- Dialogue Craft skill - writing natural, purposeful dialogue -->
|
|
2
|
+
|
|
3
|
+
dialogue craft mode: SUBTEXT OVER STATEMENT
|
|
4
|
+
|
|
5
|
+
when this skill is active, you follow dialogue-first discipline.
|
|
6
|
+
this is a comprehensive guide to crafting compelling, natural dialogue.
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
PHASE 0: CONTEXT VERIFICATION
|
|
10
|
+
|
|
11
|
+
before writing ANY dialogue, verify the writing context is understood.
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
check for existing dialogue samples
|
|
15
|
+
|
|
16
|
+
<read><file>context.md</file></read>
|
|
17
|
+
|
|
18
|
+
if no context file exists:
|
|
19
|
+
<create>
|
|
20
|
+
<file>context.md</file>
|
|
21
|
+
<content>
|
|
22
|
+
# Dialogue Context
|
|
23
|
+
|
|
24
|
+
## Project Overview
|
|
25
|
+
[brief description of story]
|
|
26
|
+
|
|
27
|
+
## Character Voices
|
|
28
|
+
[character name]: [speech pattern notes]
|
|
29
|
+
[character name]: [speech pattern notes]
|
|
30
|
+
|
|
31
|
+
## Dialogue Samples
|
|
32
|
+
[existing dialogue to match voice]
|
|
33
|
+
</content>
|
|
34
|
+
</create>
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
check character voice consistency
|
|
38
|
+
|
|
39
|
+
<terminal>find . -name "*.md" -type f | xargs grep -l "dialogue\|voice" 2>/dev/null | head -5</terminal>
|
|
40
|
+
|
|
41
|
+
<terminal>find . -name "*dialogue*" -o -name "*voice*" -type f 2>/dev/null | head -5</terminal>
|
|
42
|
+
|
|
43
|
+
review existing character dialogue before writing new lines.
|
|
44
|
+
match the established voice patterns.
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
identify dialogue purpose
|
|
48
|
+
|
|
49
|
+
ask yourself BEFORE writing:
|
|
50
|
+
[ ] what is this scene trying to accomplish?
|
|
51
|
+
[ ] what information MUST be conveyed?
|
|
52
|
+
[ ] what information SHOULD be hidden (subtext)?
|
|
53
|
+
[ ] what is each character's agenda?
|
|
54
|
+
[ ] what power dynamic exists between speakers?
|
|
55
|
+
|
|
56
|
+
never write dialogue without knowing its purpose.
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
verify scene context
|
|
60
|
+
|
|
61
|
+
<read><file>scene_outline.md</file></read>
|
|
62
|
+
|
|
63
|
+
if no scene outline exists, create minimal context:
|
|
64
|
+
[ ] setting (where are we?)
|
|
65
|
+
[ ] characters present
|
|
66
|
+
[ ] scene goal (what must happen?)
|
|
67
|
+
[ ] emotional state of each character entering
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
PHASE 1: THE FUNDAMENTAL TRUTH OF DIALOGUE
|
|
71
|
+
|
|
72
|
+
dialogue is NOT conversation.
|
|
73
|
+
|
|
74
|
+
real conversation:
|
|
75
|
+
[ ] full of filler words, repetition, dead ends
|
|
76
|
+
[ ] boring, meandering, pointless
|
|
77
|
+
[ ] 90% small talk and logistics
|
|
78
|
+
|
|
79
|
+
good dialogue:
|
|
80
|
+
[ ] distilled to its essence
|
|
81
|
+
[ ] every line advances plot, character, or theme
|
|
82
|
+
[ ] sounds natural without being realistic
|
|
83
|
+
|
|
84
|
+
the dialogue paradox:
|
|
85
|
+
to make dialogue feel real, remove everything that makes it real
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
example: real vs good dialogue
|
|
89
|
+
|
|
90
|
+
real conversation:
|
|
91
|
+
"hey, how are you doing?"
|
|
92
|
+
"pretty good, just got here, you know?"
|
|
93
|
+
"yeah, traffic was bad on the way over too"
|
|
94
|
+
"tell me about it, i was stuck on the highway for like"
|
|
95
|
+
"an hour, people driving crazy, you know how it is"
|
|
96
|
+
"oh totally, same here, but i made it, so"
|
|
97
|
+
"right, yeah, good to see you"
|
|
98
|
+
"you too"
|
|
99
|
+
|
|
100
|
+
good dialogue:
|
|
101
|
+
"you're late."
|
|
102
|
+
"traffic on 95. again."
|
|
103
|
+
"we talked about this."
|
|
104
|
+
"i know. won't happen again."
|
|
105
|
+
"it can't. the meeting started ten minutes ago."
|
|
106
|
+
|
|
107
|
+
the second version:
|
|
108
|
+
[ ] conveys conflict immediately
|
|
109
|
+
[ ] establishes history without exposition
|
|
110
|
+
[ ] shows power dynamic
|
|
111
|
+
[ ] implies ongoing problem
|
|
112
|
+
[ ] creates tension
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
PHASE 2: SAID VS OTHER SPEECH TAGS
|
|
116
|
+
|
|
117
|
+
the golden rule: said is invisible
|
|
118
|
+
|
|
119
|
+
readers' eyes glide over "said." they pause on other tags.
|
|
120
|
+
|
|
121
|
+
use said 90% of the time.
|
|
122
|
+
|
|
123
|
+
[ok] "i can't believe you did that," she said.
|
|
124
|
+
[ok] "what do you mean?" he said.
|
|
125
|
+
[ok] "fine," she said.
|
|
126
|
+
|
|
127
|
+
these tags call attention to themselves:
|
|
128
|
+
[x] "i can't believe you did that," she exclaimed.
|
|
129
|
+
[x] "what do you mean?" he questioned.
|
|
130
|
+
[x] "fine," she snapped.
|
|
131
|
+
|
|
132
|
+
every time you use a fancy tag, you pull reader out of story.
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
when to use alternative tags
|
|
136
|
+
|
|
137
|
+
use only when the manner of speech is NOT clear from context:
|
|
138
|
+
[ ] whispered - when volume matters
|
|
139
|
+
[ ] shouted / yelled - when escalation is needed
|
|
140
|
+
[ ] murmured / mumbled - when clarity is intentionally reduced
|
|
141
|
+
[ ] grunted - when character is refusing full speech
|
|
142
|
+
|
|
143
|
+
even then, consider if action beat works better.
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
speech tag frequency
|
|
147
|
+
|
|
148
|
+
not every line needs a tag.
|
|
149
|
+
|
|
150
|
+
once established, readers know who's talking.
|
|
151
|
+
|
|
152
|
+
"i can't do this."
|
|
153
|
+
"yes you can."
|
|
154
|
+
"you don't understand."
|
|
155
|
+
"try me."
|
|
156
|
+
|
|
157
|
+
short exchanges without tags create rhythm and tension.
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
PHASE 3: ACTION BEATS
|
|
161
|
+
|
|
162
|
+
action beats replace speech tags while adding movement and character.
|
|
163
|
+
|
|
164
|
+
[ok] "i don't know." she picked at her cuticles. "maybe i left it at home."
|
|
165
|
+
|
|
166
|
+
[ok] "you think this is funny?" he slammed his hand on the table. the
|
|
167
|
+
silverware rattled. "because i don't."
|
|
168
|
+
|
|
169
|
+
[ok] "sure." he wouldn't meet her eyes. "whatever you say."
|
|
170
|
+
|
|
171
|
+
beats do triple duty:
|
|
172
|
+
[ ] identify speaker
|
|
173
|
+
[ ] add physical action
|
|
174
|
+
[ ] reveal emotional state
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
effective beats vs ineffective beats
|
|
178
|
+
|
|
179
|
+
effective beats:
|
|
180
|
+
[ ] character-specific gestures
|
|
181
|
+
[ ] meaningful interactions with environment
|
|
182
|
+
[ ] actions that reveal subtext
|
|
183
|
+
[ ] pacing changes (long beat = pause)
|
|
184
|
+
|
|
185
|
+
ineffective beats:
|
|
186
|
+
[x] generic body parts (he nodded, she shrugged)
|
|
187
|
+
[x] meaningless movement (he walked, she turned)
|
|
188
|
+
[x] repetitive actions (he smiled for the tenth time)
|
|
189
|
+
|
|
190
|
+
combine beat with dialogue purpose:
|
|
191
|
+
"i'm not angry." she smiled, teeth gritted. "why would you think that?"
|
|
192
|
+
|
|
193
|
+
the smile contradicts the words. that's good dialogue.
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
beat placement
|
|
197
|
+
|
|
198
|
+
beats can come before, during, or after dialogue.
|
|
199
|
+
|
|
200
|
+
before:
|
|
201
|
+
she poured herself another drink. "you going to answer me?"
|
|
202
|
+
|
|
203
|
+
during (for pacing):
|
|
204
|
+
"i told you" - she slammed the drawer - "i wasn't going to do it."
|
|
205
|
+
|
|
206
|
+
after:
|
|
207
|
+
"whatever." he turned back to the tv.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
PHASE 4: SUBTEXT - WHAT'S NOT SAID
|
|
211
|
+
|
|
212
|
+
subtext is the meaning beneath the words.
|
|
213
|
+
|
|
214
|
+
characters rarely say what they mean. they:
|
|
215
|
+
[ ] protect themselves
|
|
216
|
+
[ ] protect others
|
|
217
|
+
[ ] maintain social masks
|
|
218
|
+
[ ] pursue hidden agendas
|
|
219
|
+
[ ] avoid vulnerability
|
|
220
|
+
|
|
221
|
+
on-the-nose dialogue (bad):
|
|
222
|
+
"i am angry at you because you betrayed my trust and now i don't know
|
|
223
|
+
if i can ever forgive you."
|
|
224
|
+
|
|
225
|
+
subtext-heavy dialogue (good):
|
|
226
|
+
"pass the salt."
|
|
227
|
+
"here."
|
|
228
|
+
"thanks."
|
|
229
|
+
"anytime."
|
|
230
|
+
"that's it?"
|
|
231
|
+
"what did you want, a speech?"
|
|
232
|
+
|
|
233
|
+
the second version says everything through:
|
|
234
|
+
[ ] mundane request (salt)
|
|
235
|
+
[ ] minimal response
|
|
236
|
+
[ ] expectation of something more
|
|
237
|
+
[ ] deflection
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
creating subtext: the gap technique
|
|
241
|
+
|
|
242
|
+
gap between words and meaning = subtext
|
|
243
|
+
|
|
244
|
+
example: character wants to leave but doesn't want to say it
|
|
245
|
+
|
|
246
|
+
on-the-nose:
|
|
247
|
+
"i want to go home now."
|
|
248
|
+
|
|
249
|
+
subtext version:
|
|
250
|
+
"what time is it?"
|
|
251
|
+
"almost ten."
|
|
252
|
+
"huh. didn't realize it was so late."
|
|
253
|
+
"we can stay longer if you want."
|
|
254
|
+
"no, i should probably..."
|
|
255
|
+
|
|
256
|
+
the real message is conveyed through:
|
|
257
|
+
[ ] checking time (looking for exit)
|
|
258
|
+
[ ] noticing lateness (seeking justification)
|
|
259
|
+
[ ] trailing off (leaving door open for other to decide)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
emotional subtext through misdirection
|
|
263
|
+
|
|
264
|
+
characters deflect emotion with:
|
|
265
|
+
[ ] logistics ("did you lock the door?")
|
|
266
|
+
[ ] humor ("that's one way to look at it")
|
|
267
|
+
[ ] deflection ("i'm fine, just tired")
|
|
268
|
+
[ ] anger (easier than sadness)
|
|
269
|
+
[ ] silence
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
exercise: subtext conversion
|
|
273
|
+
|
|
274
|
+
take these direct statements and rewrite with subtext:
|
|
275
|
+
|
|
276
|
+
direct: "i love you but i'm scared you'll hurt me."
|
|
277
|
+
|
|
278
|
+
subtext version:
|
|
279
|
+
"you're leaving again?"
|
|
280
|
+
"just for the weekend."
|
|
281
|
+
"right. the weekend."
|
|
282
|
+
"i'll call."
|
|
283
|
+
"you always say that."
|
|
284
|
+
|
|
285
|
+
direct: "i stole the money and i feel guilty."
|
|
286
|
+
|
|
287
|
+
subtext version:
|
|
288
|
+
"you hear about the break-in?"
|
|
289
|
+
"yeah. sad."
|
|
290
|
+
"people these days, right?"
|
|
291
|
+
"yeah. desperate times."
|
|
292
|
+
"guess so."
|
|
293
|
+
|
|
294
|
+
notice how neither character admits guilt outright.
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
PHASE 5: VOICE DIFFERENTIATION
|
|
298
|
+
|
|
299
|
+
every character needs a distinct voice.
|
|
300
|
+
|
|
301
|
+
voice elements:
|
|
302
|
+
[ ] sentence length
|
|
303
|
+
[ ] vocabulary level
|
|
304
|
+
[ ] use of slang or jargon
|
|
305
|
+
[ ] speech patterns (pauses, repetitions)
|
|
306
|
+
[ ] metaphors they use
|
|
307
|
+
[ ] what they DON'T say
|
|
308
|
+
[ ] formality level
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
voice differentiation example
|
|
312
|
+
|
|
313
|
+
same situation, three characters:
|
|
314
|
+
|
|
315
|
+
character A (educated, formal, precise):
|
|
316
|
+
"i believe there's been a misunderstanding. i never agreed to those
|
|
317
|
+
terms. perhaps we should review the original agreement."
|
|
318
|
+
|
|
319
|
+
character B (casual, colloquial, direct):
|
|
320
|
+
"nah, that ain't right. we never said nothing about that. you're
|
|
321
|
+
mixing stuff up."
|
|
322
|
+
|
|
323
|
+
character C (guarded, minimal, reactive):
|
|
324
|
+
"that's not what i remember."
|
|
325
|
+
"you remember wrong."
|
|
326
|
+
"do i?"
|
|
327
|
+
|
|
328
|
+
three distinct voices in the same scene.
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
voice consistency exercises
|
|
332
|
+
|
|
333
|
+
before writing a character, create voice profile:
|
|
334
|
+
|
|
335
|
+
[ ] education level: [affects vocabulary, sentence complexity]
|
|
336
|
+
[ ] regional background: [affects idioms, pronunciation]
|
|
337
|
+
[ ] profession: [affects jargon, worldview]
|
|
338
|
+
[ ] age: [affects slang references, formality]
|
|
339
|
+
[ ] secret: [affects what they avoid saying]
|
|
340
|
+
[ ] default emotion: [affects tone]
|
|
341
|
+
[ ] speech habit: [affects pattern]
|
|
342
|
+
|
|
343
|
+
example voice profile:
|
|
344
|
+
|
|
345
|
+
character: marcus
|
|
346
|
+
education: high school dropout, well-read autodidact
|
|
347
|
+
background: south side chicago, former mechanic
|
|
348
|
+
age: 42
|
|
349
|
+
secret: feels inadequate around educated people
|
|
350
|
+
default emotion: defensive skepticism
|
|
351
|
+
speech habit: repeats questions when processing, uses "look" as
|
|
352
|
+
transition, short sentences, mechanical metaphors
|
|
353
|
+
|
|
354
|
+
sample dialogue based on profile:
|
|
355
|
+
"look, i'm saying it doesn't fit. the pieces, they don't match.
|
|
356
|
+
you follow? like an engine with wrong-size pistons. looks okay on
|
|
357
|
+
the outside, but inside? grinding. you hear what i'm saying?"
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
PHASE 6: DIALOGUE PACING AND RHYTHM
|
|
361
|
+
|
|
362
|
+
dialogue has musicality. vary the rhythm.
|
|
363
|
+
|
|
364
|
+
fast-paced dialogue:
|
|
365
|
+
[ ] short sentences
|
|
366
|
+
[ ] interruptions
|
|
367
|
+
[ ] overlaps (--)
|
|
368
|
+
[ ] minimal tags
|
|
369
|
+
[ ] action beats only for emphasis
|
|
370
|
+
|
|
371
|
+
slow-paced dialogue:
|
|
372
|
+
[ ] longer sentences
|
|
373
|
+
[ ] pauses (indicated by beats)
|
|
374
|
+
[ ] internal thoughts
|
|
375
|
+
[ ] more detailed action beats
|
|
376
|
+
[ ] reflection
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
example: pacing shift
|
|
380
|
+
|
|
381
|
+
fast (argument):
|
|
382
|
+
"you said--"
|
|
383
|
+
"i know what i said."
|
|
384
|
+
"then explain--"
|
|
385
|
+
"there's nothing to explain."
|
|
386
|
+
"bullshit."
|
|
387
|
+
"watch your mouth."
|
|
388
|
+
|
|
389
|
+
slow (aftermath):
|
|
390
|
+
he stood by the window, not turning. the room felt very quiet.
|
|
391
|
+
"i didn't mean to," she said.
|
|
392
|
+
"you never do."
|
|
393
|
+
"that's unfair."
|
|
394
|
+
he turned finally. "is it?"
|
|
395
|
+
|
|
396
|
+
the same scene, different pacing for different effect.
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
interrupting and cutting off
|
|
400
|
+
|
|
401
|
+
use em dashes for interruption:
|
|
402
|
+
"i was trying to tell--"
|
|
403
|
+
"i don't care what you were trying."
|
|
404
|
+
|
|
405
|
+
use ellipses for trailing off:
|
|
406
|
+
"i don't know if i can..."
|
|
407
|
+
"can what?"
|
|
408
|
+
"never mind."
|
|
409
|
+
|
|
410
|
+
how characters interrupt reveals:
|
|
411
|
+
[ ] power dynamics (who gets to interrupt?)
|
|
412
|
+
[ ] emotional state (desperation interrupts more)
|
|
413
|
+
[ ] relationship (intimacy allows interruption)
|
|
414
|
+
|
|
415
|
+
intimacy and interruption:
|
|
416
|
+
close characters can finish each other's thoughts.
|
|
417
|
+
distant characters interrupt to dominate.
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
PHASE 7: EXPOSITION THROUGH DIALOGUE
|
|
421
|
+
|
|
422
|
+
rule: never have characters tell each other what they both know.
|
|
423
|
+
|
|
424
|
+
bad exposition (the "as you know, bob" conversation):
|
|
425
|
+
"as you know, steve, our father died three years ago in that tragic
|
|
426
|
+
car accident on highway 10, leaving us the family business that's
|
|
427
|
+
been in our family for four generations since 1923."
|
|
428
|
+
|
|
429
|
+
this is not dialogue. this is a data dump disguised as dialogue.
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
good exposition: characters arguing about what they both know
|
|
433
|
+
|
|
434
|
+
"we're not selling."
|
|
435
|
+
"it's not worth keeping anymore."
|
|
436
|
+
"it's all we have left of him."
|
|
437
|
+
"dad's dead, janie. the shop died with him."
|
|
438
|
+
|
|
439
|
+
both know the context. the argument reveals:
|
|
440
|
+
[ ] there's a family business
|
|
441
|
+
[ ] their father died
|
|
442
|
+
[ ] one wants to sell, one doesn't
|
|
443
|
+
[ ] it's about memory, not money
|
|
444
|
+
|
|
445
|
+
all conveyed without stating facts outright.
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
exposition through conflict
|
|
449
|
+
|
|
450
|
+
characters reveal background by fighting about it.
|
|
451
|
+
|
|
452
|
+
"you always take his side."
|
|
453
|
+
"i do not."
|
|
454
|
+
"you've been doing it since we were kids. he breaks the window,
|
|
455
|
+
you blame me."
|
|
456
|
+
"that was twenty years ago."
|
|
457
|
+
"some things don't change."
|
|
458
|
+
|
|
459
|
+
reveals:
|
|
460
|
+
[ ] sibling relationship
|
|
461
|
+
[ ] family dynamic (one parented differently)
|
|
462
|
+
[ ] ongoing resentment
|
|
463
|
+
[ ] specific past incident
|
|
464
|
+
|
|
465
|
+
shown through conflict, not explained.
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
exposition through voice
|
|
469
|
+
|
|
470
|
+
background leaks through how characters speak.
|
|
471
|
+
|
|
472
|
+
"the customer is always--" he made air quotes "right. that what they
|
|
473
|
+
taught you in business school?"
|
|
474
|
+
|
|
475
|
+
in six words:
|
|
476
|
+
[ ] character's attitude (skeptical)
|
|
477
|
+
[ ] other character's education (business school)
|
|
478
|
+
[ ] class tension (blue collar vs white collar)
|
|
479
|
+
[ ] relationship dynamic (one looking down on the other)
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
PHASE 8: GENRE-SPECIFIC DIALOGUE PATTERNS
|
|
483
|
+
|
|
484
|
+
different genres have different dialogue conventions.
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
thriller/suspense dialogue
|
|
488
|
+
|
|
489
|
+
characteristics:
|
|
490
|
+
[ ] information withholding
|
|
491
|
+
[ ] coded language
|
|
492
|
+
[ ] misdirection
|
|
493
|
+
[ ] tension in subtext
|
|
494
|
+
[ ] questions as power moves
|
|
495
|
+
|
|
496
|
+
"do you have it?"
|
|
497
|
+
"i might."
|
|
498
|
+
"might isn't good enough."
|
|
499
|
+
"then maybe you should've been clearer about what you needed."
|
|
500
|
+
|
|
501
|
+
nothing is stated outright. everything is negotiation.
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
romance dialogue
|
|
505
|
+
|
|
506
|
+
characteristics:
|
|
507
|
+
[ ] vulnerability is the goal
|
|
508
|
+
[ ] miscommunication creates tension
|
|
509
|
+
[ ] emotional progress is tracked
|
|
510
|
+
[ ] subtext gradually becomes text
|
|
511
|
+
|
|
512
|
+
early stage:
|
|
513
|
+
"you're still here?"
|
|
514
|
+
"looks like."
|
|
515
|
+
"why?"
|
|
516
|
+
"haven't figured that out yet."
|
|
517
|
+
|
|
518
|
+
late stage (after breakthrough):
|
|
519
|
+
"you're still here."
|
|
520
|
+
"i'm not going anywhere."
|
|
521
|
+
"you promise?"
|
|
522
|
+
"i promise."
|
|
523
|
+
|
|
524
|
+
the same words, different meaning through established intimacy.
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
science fiction/fantasy dialogue
|
|
528
|
+
|
|
529
|
+
characteristics:
|
|
530
|
+
[ ] worldbuilding through speech
|
|
531
|
+
[ ] created slang/jargon
|
|
532
|
+
[ ] cultural values revealed
|
|
533
|
+
[ ] avoid exposition dumps
|
|
534
|
+
|
|
535
|
+
"void take it, you ran the hyperdrive hot?"
|
|
536
|
+
"we needed the speed."
|
|
537
|
+
"at the cost of my engine? spacer's luck, you're lucky it didn't
|
|
538
|
+
blow us into quantum."
|
|
539
|
+
|
|
540
|
+
reveals:
|
|
541
|
+
[ ] hyperdrive technology
|
|
542
|
+
[ ] spacer culture ("spacer's luck")
|
|
543
|
+
[ ] religious element ("void take it")
|
|
544
|
+
[ ] physics concept ("quantum" as bad outcome)
|
|
545
|
+
|
|
546
|
+
all shown through character voice, not explained.
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
literary/contemporary dialogue
|
|
550
|
+
|
|
551
|
+
characteristics:
|
|
552
|
+
[ ] heightened realism
|
|
553
|
+
[ ] philosophical undertones
|
|
554
|
+
[ ] character depth through speech patterns
|
|
555
|
+
[ ] subtext is primary
|
|
556
|
+
|
|
557
|
+
"do you think people change?"
|
|
558
|
+
"depends."
|
|
559
|
+
"on what?"
|
|
560
|
+
"on whether they want to."
|
|
561
|
+
"and if they don't?"
|
|
562
|
+
"then they don't. they just get better at hiding."
|
|
563
|
+
|
|
564
|
+
conversations about ideas, revealed through concrete moments.
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
PHASE 9: DIALOGUE BLOCKS AND WHITE SPACE
|
|
568
|
+
|
|
569
|
+
how dialogue looks on page matters.
|
|
570
|
+
|
|
571
|
+
short exchanges:
|
|
572
|
+
create white space
|
|
573
|
+
increase reading speed
|
|
574
|
+
feel lighter, faster
|
|
575
|
+
|
|
576
|
+
long speeches:
|
|
577
|
+
create dense blocks
|
|
578
|
+
slow reading down
|
|
579
|
+
feel heavier, more significant
|
|
580
|
+
|
|
581
|
+
use formatting to control pacing.
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
when characters monologue
|
|
585
|
+
|
|
586
|
+
monologues are rare in real life. use them sparingly.
|
|
587
|
+
|
|
588
|
+
valid reasons for monologue:
|
|
589
|
+
[ ] teaching (someone needs to learn)
|
|
590
|
+
[ ] confession (emotional release)
|
|
591
|
+
[ ] interrogation (power position)
|
|
592
|
+
[ ] performance (character is literally performing)
|
|
593
|
+
|
|
594
|
+
invalid reasons:
|
|
595
|
+
[x] author wants to explain something
|
|
596
|
+
[x] character "just needs to say this"
|
|
597
|
+
[x] filling space
|
|
598
|
+
|
|
599
|
+
break long speeches with:
|
|
600
|
+
[ ] listener reactions
|
|
601
|
+
[ ] action beats
|
|
602
|
+
[ ] paragraph breaks
|
|
603
|
+
[ ] internal thoughts (if pov allows)
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
white space as emotional indicator
|
|
607
|
+
|
|
608
|
+
sparse, sparse = tension, withholding
|
|
609
|
+
|
|
610
|
+
"well?"
|
|
611
|
+
"i can't."
|
|
612
|
+
"why?"
|
|
613
|
+
"i just can't."
|
|
614
|
+
|
|
615
|
+
dense, flowing = intimacy, openness
|
|
616
|
+
|
|
617
|
+
"it's not that i don't want to, it's just that i've tried before and
|
|
618
|
+
it never works out the way you expect it to, you know? you plan and
|
|
619
|
+
you hope and then something happens and it's all gone, and i'm not
|
|
620
|
+
sure i can go through that again, not after last time."
|
|
621
|
+
|
|
622
|
+
use page layout as emotional tool.
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
PHASE 10: DIALOGUE REVISION CHECKLIST
|
|
626
|
+
|
|
627
|
+
first draft dialogue is rarely good dialogue. revise systematically.
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
read dialogue aloud
|
|
631
|
+
|
|
632
|
+
<terminal>say "your dialogue here" -v 200</terminal> (macos)
|
|
633
|
+
<terminal>espeak "your dialogue here"</terminal> (linux)
|
|
634
|
+
|
|
635
|
+
if you stumble, reader will too.
|
|
636
|
+
|
|
637
|
+
mark:
|
|
638
|
+
[ ] awkward phrasing
|
|
639
|
+
[ ] unnatural rhythms
|
|
640
|
+
[ ] repeated words
|
|
641
|
+
[ ] tongue twisters
|
|
642
|
+
[ ] too-long sentences
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
check every speech tag
|
|
646
|
+
|
|
647
|
+
[ ] can tag be removed? (speaker is clear)
|
|
648
|
+
[ ] can tag be "said"? (usually yes)
|
|
649
|
+
[ ] can tag be replaced with action beat? (often yes)
|
|
650
|
+
[ ] is tag doing necessary work? (if no, remove)
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
check for said-bookisms
|
|
654
|
+
|
|
655
|
+
these are almost always wrong:
|
|
656
|
+
[x] ejaculated (has different meaning now)
|
|
657
|
+
[x] pontificated (too academic)
|
|
658
|
+
[x] articulated (too clinical)
|
|
659
|
+
[x] expostulated (who talks like this?)
|
|
660
|
+
[x] retorted (unless it's actually a retort)
|
|
661
|
+
[x] queried (use "asked" or nothing)
|
|
662
|
+
|
|
663
|
+
rule: if you can't imagine a real person using this verb to describe
|
|
664
|
+
speech, don't use it.
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
check for adverb dependence
|
|
668
|
+
|
|
669
|
+
"i hate you," she said angrily.
|
|
670
|
+
"i hate you," she said.
|
|
671
|
+
"i hate you." she slammed the door.
|
|
672
|
+
|
|
673
|
+
adverbs indicate weak dialogue. strengthen the words instead.
|
|
674
|
+
|
|
675
|
+
weak adverbs to avoid:
|
|
676
|
+
angrily, sadly, happily, excitedly, nervously, quickly, slowly,
|
|
677
|
+
loudly, softly, bitterly, sweetly
|
|
678
|
+
|
|
679
|
+
if you need an adverb, rewrite the dialogue.
|
|
680
|
+
|
|
681
|
+
|
|
682
|
+
check for on-the-nose disease
|
|
683
|
+
|
|
684
|
+
characters saying exactly what they feel:
|
|
685
|
+
[x] "i am so angry right now!"
|
|
686
|
+
[x] "i'm really sad about this."
|
|
687
|
+
[x] "i love you so much."
|
|
688
|
+
|
|
689
|
+
real people deflect:
|
|
690
|
+
[ ] "i can't talk about this."
|
|
691
|
+
[ ] "whatever. it's fine."
|
|
692
|
+
[ ] "you too."
|
|
693
|
+
|
|
694
|
+
find direct emotion statements and convert to subtext.
|
|
695
|
+
|
|
696
|
+
|
|
697
|
+
check for information dump
|
|
698
|
+
|
|
699
|
+
characters explaining things they both know:
|
|
700
|
+
[x] "as we discussed earlier..."
|
|
701
|
+
[x] "remember when we..."
|
|
702
|
+
[x] "as you know..."
|
|
703
|
+
|
|
704
|
+
if both characters know it, they wouldn't say it.
|
|
705
|
+
|
|
706
|
+
either:
|
|
707
|
+
[ ] cut the exposition
|
|
708
|
+
[ ] make it conflict
|
|
709
|
+
[ ] find someone who DOESN'T know
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
check for speech consistency
|
|
713
|
+
|
|
714
|
+
read one character's dialogue in isolation.
|
|
715
|
+
does it sound like the same person throughout?
|
|
716
|
+
|
|
717
|
+
common consistency breaks:
|
|
718
|
+
[x] formal character suddenly uses slang
|
|
719
|
+
[x] uneducated character uses academic words
|
|
720
|
+
[x] quiet character delivers long speech
|
|
721
|
+
[x] funny character becomes dead serious without reason
|
|
722
|
+
|
|
723
|
+
characters can change, but reader needs to see why.
|
|
724
|
+
|
|
725
|
+
|
|
726
|
+
PHASE 11: DIALOGUE EXERCISES
|
|
727
|
+
|
|
728
|
+
practice these to improve dialogue craft.
|
|
729
|
+
|
|
730
|
+
|
|
731
|
+
exercise 1: the yes/no game
|
|
732
|
+
|
|
733
|
+
two characters. one wants something, one won't give it.
|
|
734
|
+
write dialogue where neither says yes or no directly.
|
|
735
|
+
|
|
736
|
+
aim: 200-400 words
|
|
737
|
+
constraint: no direct yes or no
|
|
738
|
+
goal: maintain tension while refusing direct answer
|
|
739
|
+
|
|
740
|
+
|
|
741
|
+
exercise 2: the double conversation
|
|
742
|
+
|
|
743
|
+
two characters talking about two things at once.
|
|
744
|
+
what they're discussing vs. what they're actually discussing.
|
|
745
|
+
|
|
746
|
+
surface: planning a party
|
|
747
|
+
subtext: their failing relationship
|
|
748
|
+
|
|
749
|
+
aim: 300-500 words
|
|
750
|
+
goal: make subtext clear without stating it
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
exercise 3: voice differentiation
|
|
754
|
+
|
|
755
|
+
write a scene with three characters discussing the same event.
|
|
756
|
+
each character should have distinct voice.
|
|
757
|
+
|
|
758
|
+
aim: 400-600 words
|
|
759
|
+
challenge: remove all speech tags
|
|
760
|
+
goal: reader knows who's speaking from voice alone
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
exercise 4: the argument with no words
|
|
764
|
+
|
|
765
|
+
write an argument using only:
|
|
766
|
+
[ ] sentence fragments
|
|
767
|
+
[ ] interruptions
|
|
768
|
+
[ ] single words
|
|
769
|
+
[ ] actions
|
|
770
|
+
|
|
771
|
+
no complete sentences. no explanations.
|
|
772
|
+
|
|
773
|
+
aim: 200-300 words
|
|
774
|
+
goal: conflict completely clear
|
|
775
|
+
|
|
776
|
+
|
|
777
|
+
exercise 5: exposition through conflict
|
|
778
|
+
|
|
779
|
+
convey a complex backstory through an argument.
|
|
780
|
+
both characters know the full history.
|
|
781
|
+
neither states it outright.
|
|
782
|
+
|
|
783
|
+
aim: 400-600 words
|
|
784
|
+
challenge: write for someone who knows nothing about the story
|
|
785
|
+
goal: reader understands the backstory without it being explained
|
|
786
|
+
|
|
787
|
+
|
|
788
|
+
exercise 6: genre shift
|
|
789
|
+
|
|
790
|
+
take the same basic situation (one character wants to leave, one wants
|
|
791
|
+
them to stay) and write it in three genres:
|
|
792
|
+
[ ] thriller
|
|
793
|
+
[ ] romance
|
|
794
|
+
[ ] comedy
|
|
795
|
+
|
|
796
|
+
aim: 200-400 words each
|
|
797
|
+
goal: see how genre changes speech patterns
|
|
798
|
+
|
|
799
|
+
|
|
800
|
+
exercise 7: subtext-only rewrite
|
|
801
|
+
|
|
802
|
+
take a passage of direct dialogue and rewrite with maximum subtext.
|
|
803
|
+
characters should talk about anything BUT what they actually mean.
|
|
804
|
+
|
|
805
|
+
direct: "i'm pregnant and i'm scared you'll leave me."
|
|
806
|
+
|
|
807
|
+
rewrite: conversation about dinner plans that's actually about the
|
|
808
|
+
pregnancy and fear.
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
exercise 8: the silent scene
|
|
812
|
+
|
|
813
|
+
write a scene where two characters have a complete conversation without
|
|
814
|
+
either saying what they really mean. every line is deflection.
|
|
815
|
+
|
|
816
|
+
aim: 300-500 words
|
|
817
|
+
goal: reader understands the real conversation
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
PHASE 12: DIALOGUE MISTAKES TO AVOID
|
|
821
|
+
|
|
822
|
+
these are the most common dialogue problems.
|
|
823
|
+
|
|
824
|
+
|
|
825
|
+
mistake 1: everyone sounds the same
|
|
826
|
+
|
|
827
|
+
symptom: you could swap character names and nothing would change.
|
|
828
|
+
|
|
829
|
+
fix: create voice profiles for each character. give each:
|
|
830
|
+
[ ] distinct sentence length preference
|
|
831
|
+
[ ] vocabulary level
|
|
832
|
+
[ ] speech habit
|
|
833
|
+
[ ] default deflection
|
|
834
|
+
|
|
835
|
+
|
|
836
|
+
mistake 2: too-formal speech
|
|
837
|
+
|
|
838
|
+
symptom: characters speak in complete, grammatically perfect sentences.
|
|
839
|
+
|
|
840
|
+
real speech:
|
|
841
|
+
[ ] fragments
|
|
842
|
+
[ ] contractions
|
|
843
|
+
[ ] restarts
|
|
844
|
+
[ ] filler words (used sparingly)
|
|
845
|
+
[ ] colloquialisms
|
|
846
|
+
|
|
847
|
+
"i am going to the store to purchase milk." (robot)
|
|
848
|
+
"i'm gonna run out for milk." (human)
|
|
849
|
+
|
|
850
|
+
|
|
851
|
+
mistake 3: overuse of names
|
|
852
|
+
|
|
853
|
+
symptom: characters constantly address each other by name.
|
|
854
|
+
|
|
855
|
+
"john, i don't think that's a good idea."
|
|
856
|
+
"but mary, we have to try."
|
|
857
|
+
"john, listen to me."
|
|
858
|
+
|
|
859
|
+
real people only use names for:
|
|
860
|
+
[ ] getting attention
|
|
861
|
+
[ ] emphasis/anger
|
|
862
|
+
[ ] intimacy
|
|
863
|
+
[ ] confusion (multiple people present)
|
|
864
|
+
|
|
865
|
+
use names sparingly.
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
mistake 4: excessive phonetic spelling
|
|
869
|
+
|
|
870
|
+
symptom: writing accents phonetically.
|
|
871
|
+
|
|
872
|
+
"i'm gonna go to the store, bawss."
|
|
873
|
+
"y'all come back now, ya hear?"
|
|
874
|
+
|
|
875
|
+
this is:
|
|
876
|
+
[ ] hard to read
|
|
877
|
+
[ ] often offensive
|
|
878
|
+
[ ] rarely necessary
|
|
879
|
+
|
|
880
|
+
better: indicate accent through:
|
|
881
|
+
[ ] word choice
|
|
882
|
+
[ ] sentence structure
|
|
883
|
+
[ ] cultural references
|
|
884
|
+
[ ] occasional dropped g or shortened word
|
|
885
|
+
|
|
886
|
+
|
|
887
|
+
mistake 5: starting with hello
|
|
888
|
+
|
|
889
|
+
symptom: scenes start with greeting.
|
|
890
|
+
|
|
891
|
+
"hello, john."
|
|
892
|
+
"hi, mary. how are you?"
|
|
893
|
+
"i'm fine. how are you?"
|
|
894
|
+
"also fine."
|
|
895
|
+
|
|
896
|
+
start at the real beginning:
|
|
897
|
+
[ ] in the middle of action
|
|
898
|
+
[ ] with the important line
|
|
899
|
+
[ ] at the moment of change
|
|
900
|
+
|
|
901
|
+
skip the social niceties unless they're doing work.
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
mistake 6: speech tag pile-up
|
|
905
|
+
|
|
906
|
+
symptom: every line has a tag.
|
|
907
|
+
|
|
908
|
+
"hello," he said.
|
|
909
|
+
"hi," she said.
|
|
910
|
+
"how are you?" he said.
|
|
911
|
+
"fine," she said.
|
|
912
|
+
|
|
913
|
+
trust the reader. once established, they know who's talking.
|
|
914
|
+
|
|
915
|
+
|
|
916
|
+
mistake 7: emotional monologue
|
|
917
|
+
|
|
918
|
+
symptom: character delivers full emotional speech.
|
|
919
|
+
|
|
920
|
+
"i've been so sad since my mother died. i feel empty inside, like
|
|
921
|
+
there's a hole where my heart used to be. i cry myself to sleep
|
|
922
|
+
every night."
|
|
923
|
+
|
|
924
|
+
real people deflect:
|
|
925
|
+
[ ] change the subject
|
|
926
|
+
[ ] make a joke
|
|
927
|
+
[ ] leave the room
|
|
928
|
+
[ ] get angry
|
|
929
|
+
|
|
930
|
+
emotion leaks out. it doesn't pour.
|
|
931
|
+
|
|
932
|
+
|
|
933
|
+
PHASE 13: ADVANCED TECHNIQUES
|
|
934
|
+
|
|
935
|
+
|
|
936
|
+
unspoken dialogue
|
|
937
|
+
|
|
938
|
+
what characters choose not to say is as important as what they say.
|
|
939
|
+
|
|
940
|
+
"do you still--"
|
|
941
|
+
"no."
|
|
942
|
+
"i wasn't going to ask about that."
|
|
943
|
+
"what were you going to ask?"
|
|
944
|
+
"doesn't matter."
|
|
945
|
+
|
|
946
|
+
the unspoken question hangs over the entire exchange.
|
|
947
|
+
|
|
948
|
+
|
|
949
|
+
dialogue as action
|
|
950
|
+
|
|
951
|
+
sometimes the dialogue IS the action.
|
|
952
|
+
|
|
953
|
+
"don't"
|
|
954
|
+
"i have to"
|
|
955
|
+
"then i can't let you"
|
|
956
|
+
"you're not going to stop me"
|
|
957
|
+
"watch me"
|
|
958
|
+
|
|
959
|
+
each line is a move in the conflict. no physical action needed.
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
echo dialogue
|
|
963
|
+
|
|
964
|
+
characters repeat words, showing fixation.
|
|
965
|
+
|
|
966
|
+
"he's gone"
|
|
967
|
+
"i know he's gone"
|
|
968
|
+
"but he's really gone"
|
|
969
|
+
"i know"
|
|
970
|
+
"like, actually gone gone"
|
|
971
|
+
"i know"
|
|
972
|
+
|
|
973
|
+
repetition shows:
|
|
974
|
+
[ ] denial
|
|
975
|
+
[ ] processing
|
|
976
|
+
[ ] trauma
|
|
977
|
+
[ ] obsession
|
|
978
|
+
|
|
979
|
+
|
|
980
|
+
the non-answer answer
|
|
981
|
+
|
|
982
|
+
characters respond to the question beneath the question.
|
|
983
|
+
|
|
984
|
+
"are you seeing anyone?"
|
|
985
|
+
"why do you ask?"
|
|
986
|
+
"just curious."
|
|
987
|
+
"curious about what?"
|
|
988
|
+
|
|
989
|
+
the first question isn't "are you seeing someone."
|
|
990
|
+
the real question is "do i still have a chance."
|
|
991
|
+
|
|
992
|
+
the answer ("why do you ask?") responds to the real question.
|
|
993
|
+
|
|
994
|
+
|
|
995
|
+
dialogue callbacks
|
|
996
|
+
|
|
997
|
+
earlier dialogue gains new meaning later.
|
|
998
|
+
|
|
999
|
+
earlier:
|
|
1000
|
+
"if you ever need me, you know where to find me."
|
|
1001
|
+
"i won't need you."
|
|
1002
|
+
|
|
1003
|
+
later:
|
|
1004
|
+
she knocked on his door at 3 am. "you said."
|
|
1005
|
+
"i know what i said."
|
|
1006
|
+
|
|
1007
|
+
the callback carries the weight of earlier context.
|
|
1008
|
+
|
|
1009
|
+
|
|
1010
|
+
PHASE 14: DIALOGUE RULES (STRICT MODE)
|
|
1011
|
+
|
|
1012
|
+
|
|
1013
|
+
while this skill is active, these rules are MANDATORY:
|
|
1014
|
+
|
|
1015
|
+
[1] NEVER let characters say exactly what they mean
|
|
1016
|
+
find the deflection
|
|
1017
|
+
find the subtext
|
|
1018
|
+
find the way to say it indirectly
|
|
1019
|
+
|
|
1020
|
+
[2] SAID is your default speech tag
|
|
1021
|
+
use "said" unless another tag does necessary work
|
|
1022
|
+
if you must use another tag, ask yourself:
|
|
1023
|
+
- is this the ONLY way to convey this information?
|
|
1024
|
+
- would an action beat work better?
|
|
1025
|
+
|
|
1026
|
+
[3] READ every dialogue passage aloud
|
|
1027
|
+
if you stumble, rewrite
|
|
1028
|
+
if it sounds stiff, rewrite
|
|
1029
|
+
if it sounds like writing, rewrite
|
|
1030
|
+
|
|
1031
|
+
[4] CHECK every information dump
|
|
1032
|
+
if both characters know it, why are they saying it?
|
|
1033
|
+
either cut it or make it conflict
|
|
1034
|
+
|
|
1035
|
+
[5] GIVE every character a distinct voice
|
|
1036
|
+
if you can remove character names and not tell who's speaking,
|
|
1037
|
+
your voices aren't distinct enough
|
|
1038
|
+
|
|
1039
|
+
[6] USE action beats instead of speech tags when possible
|
|
1040
|
+
beats do double duty: identify speaker AND reveal character
|
|
1041
|
+
|
|
1042
|
+
[7] NEVER use phonetic spelling for accents
|
|
1043
|
+
indicate accent through word choice, sentence structure, rhythm
|
|
1044
|
+
|
|
1045
|
+
[8] CUT greetings, goodbyes, and other social filler
|
|
1046
|
+
start at the important moment
|
|
1047
|
+
end at the important moment
|
|
1048
|
+
|
|
1049
|
+
[9] VARY sentence length for rhythm
|
|
1050
|
+
fast dialogue = short sentences
|
|
1051
|
+
slow dialogue = longer sentences
|
|
1052
|
+
mix them to create musicality
|
|
1053
|
+
|
|
1054
|
+
[10] REMEMBER that conflict is the engine of dialogue
|
|
1055
|
+
characters want different things
|
|
1056
|
+
let those wants collide through speech
|
|
1057
|
+
|
|
1058
|
+
|
|
1059
|
+
FINAL REMINDERS
|
|
1060
|
+
|
|
1061
|
+
|
|
1062
|
+
dialogue is character
|
|
1063
|
+
|
|
1064
|
+
good dialogue reveals:
|
|
1065
|
+
[ ] what character wants
|
|
1066
|
+
[ ] what character fears
|
|
1067
|
+
[ ] what character believes
|
|
1068
|
+
[ ] how character sees themselves
|
|
1069
|
+
[ ] how character sees others
|
|
1070
|
+
|
|
1071
|
+
if dialogue doesn't reveal character, cut it.
|
|
1072
|
+
|
|
1073
|
+
|
|
1074
|
+
dialogue is conflict
|
|
1075
|
+
|
|
1076
|
+
every conversation is a negotiation.
|
|
1077
|
+
characters want things.
|
|
1078
|
+
sometimes those wants align.
|
|
1079
|
+
sometimes they clash.
|
|
1080
|
+
let them clash.
|
|
1081
|
+
|
|
1082
|
+
|
|
1083
|
+
dialogue is subtext
|
|
1084
|
+
|
|
1085
|
+
what's said is never the whole story.
|
|
1086
|
+
what's not said is often the real story.
|
|
1087
|
+
the gap between words and meaning is where story lives.
|
|
1088
|
+
|
|
1089
|
+
|
|
1090
|
+
listen
|
|
1091
|
+
|
|
1092
|
+
listen to how people actually talk.
|
|
1093
|
+
not in movies.
|
|
1094
|
+
not in books.
|
|
1095
|
+
in real life.
|
|
1096
|
+
|
|
1097
|
+
[ ] restaurants
|
|
1098
|
+
[ ] public transit
|
|
1099
|
+
[ ] line at the grocery store
|
|
1100
|
+
[ ] your own conversations
|
|
1101
|
+
|
|
1102
|
+
notice the:
|
|
1103
|
+
[ ] interruptions
|
|
1104
|
+
[ ] unfinished thoughts
|
|
1105
|
+
[ ] changes of subject
|
|
1106
|
+
[ ] things left unsaid
|
|
1107
|
+
|
|
1108
|
+
use it. distill it. make it art.
|
|
1109
|
+
|
|
1110
|
+
|
|
1111
|
+
the goal
|
|
1112
|
+
|
|
1113
|
+
dialogue that:
|
|
1114
|
+
[ ] reveals character
|
|
1115
|
+
[ ] advances plot
|
|
1116
|
+
[ ] creates tension
|
|
1117
|
+
[ ] sounds natural
|
|
1118
|
+
[ ] carries subtext
|
|
1119
|
+
|
|
1120
|
+
every line should do at least two of these.
|
|
1121
|
+
|
|
1122
|
+
now go write something people actually want to read.
|