— DriftNov —

Hikaye Nasıl Yazılır?

DriftNov editörü — Form, Script ve Blueprint modlarına tam rehber

Bu rehber, DriftNov'un dallanmalı hikaye editörünü kullanarak kendi interaktif hikayenizi nasıl yazacağınızı anlatır. Yeni bir hikaye oluşturduğunuzda üç farklı çalışma modundan birini seçebilirsiniz; hepsi aynı veriyi düzenler, sadece arayüzleri farklıdır.

1. Genel Bakış — 3 Mod

Editör aynı hikayeyi üç farklı şekilde göstermenize izin verir. İstediğiniz zaman aralarında geçiş yapabilirsiniz — hiçbiri "daha doğru" değildir, sadece farklı işler için daha uygundur.

Blueprint — yeni başlayanlar için en basiti Hikayeyi görsel bir harita olarak görürsünüz; her kutu bir sahnedir, oklar bağlantılardır. Bir sahneye çift tıklayınca o sahneyi baştan sona düzenleyebileceğiniz güzel bir pop-up açılır — script sözdizimi yazmadan, bağlantıları gözünüzün önünde görerek hikaye kurarsınız. Kod bilmeyen biri için en sezgisel yoldur.
Form — hızlı, küçük değişiklikler için Sahneleri sade bir liste + alan düzeninde düzenlersiniz. Tek bir sahnede küçük bir metin veya bağlantı değişikliği yapacaksanız en hızlı yoldur; ama Blueprint'teki görsel bağlam burada yoktur.
Script — uygulama dışında yazmak veya AI'a yazdırmak için Hikayeyi düz metin olarak, kendi sözdiziminizle yazarsınız. Uygulamayı hiç açmadan bir metin editöründe hikayenizi baştan yazıp editöre yapıştırmak, ya da bir yapay zekaya bu formatta bir hikaye ürettirmek istediğinizde kullanılır (bkz. sayfanın en altındaki AI Promptu).

Pratik yaklaşım: Kod yazmaya alışkın değilseniz tamamen Blueprint içinde kalıp her sahneyi pop-up'tan düzenleyin. Script yazmaya alışkınsanız veya hikayeyi bir AI'a yazdırdıysanız Script ile toplu olarak yapıştırın, sonra Form veya Blueprint ile ince ayar yapın.

Önemli: Blueprint modu yalnızca geniş ekranlarda (bilgisayarda web sitesi üzerinden, veya tabletin geniş görünümünde) çalışır. Telefon uygulamasında veya dar bir pencerede editörü açtığınızda Blueprint sekmesi görünmez, otomatik olarak Form'a döner. Blueprint'i kullanabilmek için web sitesini bir bilgisayardan açmanız gerekir.

2. Form Editörü

Form modunda ekran ikiye bölünür: solda sahne listesi, sağda seçili sahnenin tüm alanları.

Sol panel — Sahne listesi

Sağ panel — Sahne alanları

Form modunun avantajı: her alan doğrulanır, hatalı bir bağlantı veya eksik seçenek anında kırmızı işaretlenir. Script yazmayı bilmeseniz de hikayenizi baştan sona bu modda tamamlayabilirsiniz.

3. Script Editörü

Script modunda hikayenin tamamını düz metin olarak görür ve düzenlersiniz. Bu, deneyimli yazarlar için en hızlı yöntemdir — özellikle uzun hikayeleri sıfırdan yazarken. Script modundaki değişiklikler otomatik uygulanmaz; bitirdiğinizde "Forma Uygula" butonuna basarsınız, editör metni ayrıştırıp sahnelere dönüştürür.

3.1 Sahne Formatı

Her sahne aşağıdaki kalıpla başlar ve --- ile biter:

# sahneId | TİP | bölüm | Başlık
Anlatı metni burada. Ortam, atmosfer, karakterin eylemleri.
KARAKTER: Diyalog satırı.
PLAYER: Oyuncunun söylediği şey.
> Seçenek metni -> hedefSahneId
> Seçenek metni (koşul) -> hedefSahneId
-> otomatikHedefSahneId

---

bölüm alanı tam sayıdır. Giriş sahnesi (INTRO) için 0, sonrasında 1, 2, 3… şeklinde devam eder. Editör bu numarayı sahneyi hangi bölüme ait göstereceğini anlamak için kullanır.

Eğer hikaye stat sistemi kullanıyorsa, script'in en üstüne (herhangi bir # sahnesinden önce) stat tanımları eklenir:

@stat: cesaret | Cesaret | 10
@stat: empati  | Empati  | 15
AlanAçıklama
keyScript içinde efekt/koşulda kullanılır: {cesaret+5}, [stat:cesaret>=30]
EtiketOyuncuya gösterilen isim
Başlangıç değeriOyun başındaki değer, genellikle 0-100 arası

Stat kullanmayan hikayelerde bu satırlar tamamen atlanır.

3.2 Sahne Tipleri

TipKullanım
INTROİlk sahne. Sadece 1 tane olur. -> ilkSahne ile biter.
MAINSeçim sahnesi. 2-4 arası > seçeneği zorunludur.
INTERLUDESeçimsiz geçiş/atmosfer sahnesi. -> sonrakiSahne ile biter.
WEEK_SUMMARYBölüm sonu özeti. Seçim yok, bir sonraki bölümün ilk sahnesine bağlanır.
ROUTERİçeriksiz dallanma noktası. Onay puanı veya stat/bayrağa göre yönlendirir.
ENDINGSon sahne. Seçim yok. -> credits ile biter.
CREDITSTek credits sahnesi. Her ending buraya bağlanır.
Kesin kural: Sahnede > seçeneği varsa tip MAIN olmalıdır; yoksa INTERLUDE olmalıdır. Bu kuralın istisnası yoktur — aksi halde editör hata verir.

Sahne ID kuralları (öneri):

3.3 Diyalog Kuralları

# Karakter konuşması — büyük harf, iki nokta
DEFNE: Bugün çok yorgunum.
MERT: Yok canım, sen her zaman böylesin.

# Oyuncu konuşması
PLAYER: Anlıyorum. Devam et.

# Anlatı — prefix yok, düz metin
Sınıf yavaş yavaş boşalıyor. Sen pencereye bakıyorsun.

# Oyuncu adı kullanımı
MERT: Ey, {playerName}! Buradasın demek.

3.4 Seçenekler ve Efektler

# Temel seçenek
> Seçenek metni -> hedefSahneId

# Seçenek + onay etkisi
> Seçenek metni -> hedefSahneId {onay+10}

# Seçenek + stat etkisi
> Seçenek metni -> hedefSahneId {cesaret+5, empati+3}

# Seçenek + bayrak (flag) etkisi
> Seçenek metni -> hedefSahneId {flag:grupDefne=true}

# Seçenek + koşul (koşul karşılanmazsa seçenek kilitli görünür)
> Seçenek metni [stat:empati>=40] -> hedefSahneId {onay+15}
Efekt sözdizimiAçıklama
{onay+10}onay puanı +10
{onay-5}onay puanı -5
{statAdı+3}o stat +3
{flag:grupDefne=true}bayrağı true yap
{onay+10, empati+2, flag:mertPlan=true}birden fazla efekt virgülle

3.5 Koşullar

SözdizimiAçıklama
[stat:statAdı>=40]o stat en az 40 olmalı
[flag:grupDefne=true]bayrak true olmalı
[onay:60-100]onay puanı 60-100 arasında olmalı

Koşulu karşılanmayan seçenekler oyuncuya kilitli görünür, tıklanamaz.

3.6 Router Sahnesi

ROUTER sahnesi seçim veya anlatı içermez; yalnızca ? ile başlayan sıralı koşul satırları taşır. Motor bu satırları yukarıdan aşağı kontrol eder, ilk eşleşen koşulun hedefine gider.

# b2_router | ROUTER | 2 | Yol Ayrımı
? flag:grupDefne=true -> b2_s1_grup
? flag:grupDefne=false -> b2_s1_kutuphane

---

# b4_router | ROUTER | 4 | Son Karar Yolu
? onay:70-100 -> b4_s4_high
? onay:40-69 -> b4_s4_mid
? onay:0-39 -> b4_s4_low

Karmaşık koşulları aşamalı değerlendirmek için bir ROUTER başka bir ROUTER'a bağlanabilir — örneğin önce bir bayrağı kontrol edip sonra onay puanına göre ayrım yapabilirsiniz.

3.7 Statlar ve Onay Sistemi

Onay: Tek bir genel ilişki/onay puanıdır (0-100), ROUTER'da onay:X-Y ile kullanılır. Her hikayede otomatik mevcuttur.

Statlar: Hikayeye özel, birden fazla değer olabilir (ör. bir polisiyede zeka, gözlem, ikna; bir macerada güç, cesaret, sezgi). Script'in en üstünde @stat: satırlarıyla tanımlanır ve bölüm özeti ekranında bar olarak gösterilir.

Tanımsız (gizli) statlar: @stat: bildirimi olmadan sadece efekt/koşul olarak kullanılan dahili sayaçlardır — oyuncuya görsel bar olarak gösterilmez. Örneğin "kaç ipucu topladı" gibi gizli bir takip için kullanılabilir:

> Seçenek B -> b1_s2 {ipucu+15}
> Seçenek C [stat:ipucu>=30] -> b1_ara_ozel

3.8 Tam Örnek

@stat: empati | Empati | 10

# intro | INTRO | 0 | Başlangıç
-> b1_s1

---

# b1_s1 | MAIN | 1 | İlk Gün
Eylül. Yeni bir şehir, yeni bir iş. Ofise ilk adımını atıyorsun.
Masaların arasında biri sana bakıyor: Ayşe.
AYŞE: Sen yeni işe başlayan mısın?
PLAYER: Evet, bugün ilk gün.
> "Kaybolmak kötü değil, keşfetmek için geldim." -> b1_ara_a {onay+10, empati+5}
> "Yardım edersen daha kolay olur." -> b1_ara_b {onay+5}
> Sadece gülümse, otur, konuşma. -> b1_ara_b {onay-5}

---

# b1_ara_a | INTERLUDE | 1 | Öğle Arası
Öğle molası. Sen pencere kenarına çekilmişsin, kahveni tutuyorsun.
-> b1_s2

---

# b1_ara_b | INTERLUDE | 1 | Mola Farkı
Öğle molasında koridorda Ayşe'ye rastlıyorsun.
AYŞE: İş nasıl gidiyor şimdiye kadar?
-> b1_s2

3.9 Sık Yapılan Hatalar

4. Blueprint Modu

Blueprint, hikayenizin akışını görsel bir harita olarak gösterir. Her kutu (node) bir sahneyi temsil eder; oklar sahneler arasındaki bağlantıları gösterir. Sadece haritaya bakmak için değil, hikayenin tamamını burada yazabilmek için tasarlanmıştır.

4.1 Harita üzerinde gezinme

4.2 Bir sahneyi düzenlemek — çift tıkla, pop-up aç

Herhangi bir node'a çift tıkladığınızda, o sahnenin tüm alanlarını gösteren geniş bir pop-up açılır. Bu pop-up üç sütuna ayrılmıştır:

Yani Blueprint'te tek bir yerden çıkmadan: haritaya bakıp hangi sahnenin eksik olduğunu görür, çift tıklayıp o sahneyi tamamen yazar, kapatır ve bir sonraki node'a geçebilirsiniz. Değişiklik yapıp pop-up'ı kapatmaya çalıştığınızda kaydedilmemiş değişiklik varsa uygulama sizi uyarır.

Blueprint özellikle şu durumlarda faydalıdır: kırık bir bağlantıyı (yetim sahneyi) görsel olarak bulmak, bir bölümde gerçekten iki farklı yol açık mı diye kontrol etmek, tüm seçeneklerin yanlışlıkla aynı sahneye yönlendirilip yönlendirilmediğini görmek — ve script sözdizimi hiç bilmeden sıfırdan bir hikaye kurmak.

5. Sık Sorulan Sorular

Hangi modda başlamalıyım?
Kod yazmaya alışkın değilseniz Form ile başlayın. Metin yazmaya alışkınsanız Script çok daha hızlıdır.

Script'te yaptığım değişiklik neden görünmüyor?
Script modundaki değişiklikler otomatik kaydedilmez — "Forma Uygula" butonuna basmanız gerekir.

Kaç bölüm veya sahne yazmalıyım?
Sınır yoktur; tek bölümlük kısa bir hikaye de yazabilirsiniz, çok bölümlü uzun bir roman da. Önemli olan her MAIN sahnede seçeneklerin gerçekten farklı bir sonraki içeriğe götürmesidir.

Onay ile stat arasındaki fark nedir?
Onay tek, genel bir ilişki puanıdır ve her hikayede hazır gelir. Statlar ise hikayeye özel, birden fazla olabilen, sizin tanımladığınız değerlerdir.


AI Promptu

Script Üretmek İçin AI Promptu

Bir yapay zeka sohbet aracına (ChatGPT, Claude vb.) hikayenizin konusuyla birlikte aşağıdaki metni olduğu gibi kopyalayıp yapıştırın. Bu, sizin hikayenize özel bir talimat değildir — sadece DriftNov editörünün script formatını tanımlayan genel kurallardır. Konu kısmını kendi hikayenizle değiştirmeniz yeterli.

Sen bir interaktif/dallanmalı hikaye script yazarısın. Aşağıdaki formatı KESİNLİKLE
ihlal etmeden, verdiğim konuya göre tam bir hikaye scripti üreteceksin.

GENEL YAPI
- Her sahne "# sahneId | TİP | bölüm | Başlık" satırıyla başlar ve "---" ile biter.
- "bölüm" alanı tam sayıdır: giriş sahnesi için 0, sonra 1, 2, 3, ...
- Hikaye stat (istatistik) kullanıyorsa, dosyanın en başına (ilk "#" sahnesinden önce)
  şu satırları ekle:
  @stat: key | Etiket | başlangıç_değeri
  Stat kullanmıyorsan bu satırları hiç yazma.

SAHNE TİPLERİ (sadece bu yedi tip vardır, başka tip icat etme)
- INTRO        : Tek bir tane, bölüm=0. Seçenek yok. Sadece "-> ilkSahneId" ile biter.
- MAIN         : 2-4 arası "> ..." seçeneği ZORUNLUDUR. Seçeneksiz MAIN yazma.
- INTERLUDE    : Seçenek YOKTUR. Sadece "-> sonrakiSahneId" ile biter.
- WEEK_SUMMARY : Bölüm özeti. Seçenek yok, bir sonraki bölümün ilk sahnesine bağlanır.
- ROUTER       : Anlatı/diyalog İÇERMEZ. Sadece "? koşul -> hedef" satırları olur.
                 Motor satırları yukarıdan aşağı kontrol eder, ilk eşleşen koşulun
                 hedefine gider.
- ENDING       : Seçenek yok. Sadece "-> credits" ile biter.
- CREDITS      : Tek bir tane, script'in en sonunda. Bağlantısı yoktur.

KESİN KURAL: Sahnede ">" seçeneği varsa tip mutlaka MAIN olmalı; yoksa mutlaka
INTERLUDE olmalı. Bu kuralın istisnası yoktur.

DİYALOG YAZIMI
KARAKTER: Büyük harfle karakter adı, iki nokta, ardından diyalog satırı.
PLAYER: Oyuncunun söylediği şey.
Prefix (önek) olmayan satırlar anlatı/betimleme metnidir.

SEÇENEKLER VE EFEKTLER (sadece MAIN sahnelerde)
> Seçenek metni -> hedefSahneId
> Seçenek metni -> hedefSahneId {onay+10}
> Seçenek metni -> hedefSahneId {statAdi+5, flag:bayrakAdi=true}
> Seçenek metni [stat:statAdi>=40] -> hedefSahneId
> Seçenek metni [flag:bayrakAdi=true] -> hedefSahneId
> Seçenek metni [onay:60-100] -> hedefSahneId

ROUTER KOŞUL SATIRLARI (sadece ROUTER sahnelerde)
? flag:bayrakAdi=true -> hedefSahneId
? stat:statAdi>=50 -> hedefSahneId
? onay:60-100 -> hedefSahneId

UYULMASI ZORUNLU KURALLAR
1. Sahne ID'leri küçük harf ve alt çizgi kullanır (ör. b1_s1, b1_ara_a) ve benzersizdir.
2. Her MAIN sahnedeki seçenekler en az 2 farklı hedef ID'ye gitmelidir. Tüm
   seçenekler aynı sahneye gidiyorsa bu geçersizdir — yeniden yaz.
3. Her ENDING sahnesi mutlaka "-> credits" ile bitmelidir.
4. Script'te tam olarak bir tane CREDITS sahnesi olmalıdır.
5. "@stat:" satırları SADECE dosyanın en başında olur; hiçbir sahnenin içinde
   yazılamaz.
6. ROUTER sahnesinde anlatı metni veya diyalog OLAMAZ, sadece "?" satırları olur.
7. Script içindeki her "->" hedefi ve her seçenek hedefi, script'te tanımlı
   gerçek bir sahne ID'sine işaret etmelidir — kırık bağlantı bırakma.

ÇIKTI FORMATI
Yukarıdaki kurallara birebir uyan, tam ve oynanabilir bir script üret. Script
dışında açıklama, yorum veya markdown code fence ekleme — sadece script metnini
yaz.

Şimdi şu konu için bir hikaye yaz:
[KONUNUZU / KARAKTERLERİNİZİ / TEMANIZI BURAYA YAZIN]
↑ Başa dön

How to Write a Story

DriftNov editor — a complete guide to Form, Script, and Blueprint mode

This guide explains how to write your own interactive story using DriftNov's branching story editor. When you create a new story, you can choose between three different working modes; all of them edit the same underlying data, they just present it differently.

1. Overview — 3 Modes

The editor lets you view and edit the same story in three different ways. You can switch between them at any time — none is "more correct" than the others, each simply suits a different task.

Blueprint — the simplest for beginners See your story as a visual map — each box is a scene, arrows are connections. Double-click any scene to open a nicely laid-out popup where you can write the entire scene — no script syntax to type, and you build the story while literally seeing the connections in front of you. The most intuitive way in if you don't know any code.
Form — fast, small edits Edit scenes through a plain list + fields layout. The quickest way to make a small text or link change on one scene, though you lose Blueprint's visual context.
Script — writing outside the app, or having an AI write it Write the story as plain text using its own syntax. Use this when you want to draft the story in a plain text editor without ever opening the app, or have an AI generate a story in this format for you (see the AI Prompt at the bottom of this page).

A practical workflow: if you're not used to writing code-like syntax, stay entirely in Blueprint and edit every scene through its popup. If you're comfortable writing script, or had an AI generate one, paste it in bulk via Script, then fine-tune with Form or Blueprint.

Important: Blueprint mode only works on wide screens (on the website from a computer, or a tablet in a wide layout). Opening the editor on the phone app or in a narrow window hides the Blueprint tab entirely and falls back to Form automatically. To use Blueprint you need to open the website from a computer.

2. Form Editor

In Form mode the screen is split in two: the scene list on the left, and all the fields of the selected scene on the right.

Left panel — Scene list

Right panel — Scene fields

The advantage of Form mode: every field is validated, and a broken link or missing choice is flagged red immediately. You can complete an entire story here without ever writing raw script.

3. Script Editor

In Script mode you see and edit the whole story as plain text. This is the fastest method for experienced writers — especially when drafting a long story from scratch. Script changes are not applied automatically; when you're done, press "Apply to Form" and the editor parses the text into scenes.

3.1 Scene Format

Every scene starts with the following pattern and ends with ---:

# sceneId | TYPE | part | Title
Narrative text here. Setting, atmosphere, character actions.
CHARACTER: A line of dialogue.
PLAYER: What the player says.
> Choice text -> targetSceneId
> Choice text (condition) -> targetSceneId
-> autoTargetSceneId

---

The part field is an integer. The intro scene uses 0, followed by 1, 2, 3… The editor uses this number to know which part a scene belongs to.

If your story uses a stat system, add stat declarations at the very top of the script (before any # scene):

@stat: courage | Courage | 10
@stat: empathy | Empathy | 15
FieldDescription
keyUsed in effects/conditions: {courage+5}, [stat:courage>=30]
LabelThe name shown to the player
Starting valueValue at the start of the game, usually 0-100

Stories that don't use stats simply skip these lines entirely.

3.2 Scene Types

TypeUsage
INTROThe first scene. Only one exists. Ends with -> firstScene.
MAINChoice scene. 2-4 > choices are required.
INTERLUDEA choice-less transition/atmosphere scene. Ends with -> nextScene.
WEEK_SUMMARYEnd-of-part recap. No choices, links to the next part's first scene.
ROUTERA content-free branching point. Routes based on the approval score or a stat/flag.
ENDINGA final scene. No choices. Ends with -> credits.
CREDITSA single credits scene. Every ending links here.
Strict rule: if a scene has any > choices its type must be MAIN; otherwise it must be INTERLUDE. There is no exception — otherwise the editor raises an error.

Scene ID conventions (recommended):

3.3 Dialogue Rules

# Character dialogue — uppercase name, colon
LEA: I'm so tired today.
MARK: Nah, you're always like that.

# Player dialogue
PLAYER: I get it. Go on.

# Narration — no prefix, plain text
The classroom slowly empties out. You look toward the window.

# Using the player's name
MARK: Hey, {playerName}! So you're here.

3.4 Choices and Effects

# Basic choice
> Choice text -> targetSceneId

# Choice + approval effect
> Choice text -> targetSceneId {approval+10}

# Choice + stat effect
> Choice text -> targetSceneId {courage+5, empathy+3}

# Choice + flag effect
> Choice text -> targetSceneId {flag:joinedGroup=true}

# Choice + condition (locked in the UI if not met)
> Choice text [stat:empathy>=40] -> targetSceneId {approval+15}
Effect syntaxDescription
{approval+10}approval score +10
{approval-5}approval score -5
{statName+3}that stat +3
{flag:joinedGroup=true}set the flag to true
{approval+10, empathy+2, flag:planReady=true}multiple effects, comma-separated

3.5 Conditions

SyntaxDescription
[stat:statName>=40]that stat must be at least 40
[flag:joinedGroup=true]the flag must be true
[approval:60-100]approval score must be between 60-100

Choices whose condition isn't met appear locked to the player and can't be selected.

3.6 Router Scene

A ROUTER scene has no choices or narrative — only an ordered list of lines starting with ?. The engine checks them top to bottom and jumps to the target of the first matching condition.

# b2_router | ROUTER | 2 | Fork in the Road
? flag:joinedGroup=true -> b2_s1_group
? flag:joinedGroup=false -> b2_s1_library

---

# b4_router | ROUTER | 4 | Final Decision Path
? approval:70-100 -> b4_s4_high
? approval:40-69 -> b4_s4_mid
? approval:0-39 -> b4_s4_low

One ROUTER can chain into another to evaluate complex conditions in stages — for example, check a flag first, then branch on approval score.

3.7 Stats and the Approval System

Approval: A single, general relationship/approval score (0-100), used in ROUTER as approval:X-Y. Available automatically in every story.

Stats: Story-specific values, and you can have several (e.g. a mystery might use intellect, observation, persuasion; an adventure might use strength, courage, instinct). Declared at the top of the script with @stat: lines and shown as a bar on the part-summary screen.

Undeclared (hidden) stats: Internal counters used only in effects/ conditions without an @stat: declaration — they are never shown to the player as a bar. Useful for hidden tracking, e.g. "how many clues collected":

> Choice B -> b1_s2 {clue+15}
> Choice C [stat:clue>=30] -> b1_int_special

3.8 Full Example

@stat: empathy | Empathy | 10

# intro | INTRO | 0 | Beginning
-> b1_s1

---

# b1_s1 | MAIN | 1 | Day One
September. A new city, a new job. You step into the office for the first time.
Someone is watching you from across the desks: Ava.
AVA: Are you the new hire?
PLAYER: Yeah, first day today.
> "Getting lost isn't bad — that's why I came to explore." -> b1_int_a {approval+10, empathy+5}
> "It'd be easier if you helped me out." -> b1_int_b {approval+5}
> Just smile, sit down, say nothing. -> b1_int_b {approval-5}

---

# b1_int_a | INTERLUDE | 1 | Lunch Break
Lunch break. You've drifted to the window, holding your coffee.
-> b1_s2

---

# b1_int_b | INTERLUDE | 1 | A Different Break
You run into Ava in the hallway during lunch.
AVA: So, how's the job treating you so far?
-> b1_s2

3.9 Common Mistakes

4. Blueprint Mode

Blueprint shows your story's flow as a visual map. Each box (node) represents a scene; arrows show the connections between scenes. It's built not just to view your structure, but to write the entire story right here.

4.1 Navigating the map

4.2 Editing a scene — double-click to open a popup

Double-clicking any node opens a wide popup with every field for that scene. It's split into three columns:

So without ever leaving Blueprint: look at the map to see which scene is missing, double- click it to write it completely, close the popup, and move to the next node. If you try to close the popup with unsaved changes, the app warns you first.

Blueprint is especially useful for: visually locating a broken link (an orphan scene), checking whether a part truly has two open paths, spotting whether every choice accidentally routes to the same scene — and building an entire story from scratch without ever learning the script syntax.

5. Frequently Asked Questions

Which mode should I start with?
If you're not used to writing code-like syntax, start with Form. If you're comfortable writing plain text, Script is much faster.

Why don't my Script changes show up?
Script changes aren't saved automatically — you need to press "Apply to Form".

How many parts or scenes should I write?
There's no limit; you can write a short single-part story or a long, multi-part one. What matters is that every MAIN scene's choices genuinely lead to different upcoming content.

What's the difference between approval and stats?
Approval is a single, general relationship score built into every story. Stats are story-specific values you define yourself, and you can have several of them.


AI Prompt

AI Prompt for Generating a Script

Paste the text below as-is into an AI chat tool (ChatGPT, Claude, etc.) together with your story's premise. This isn't a prompt tailored to any specific story — it's just the general rules that define the DriftNov editor's script format. Simply replace the topic placeholder with your own premise.

You are an interactive/branching story script writer. Following the format below
WITHOUT ANY EXCEPTION, write a complete story script based on the premise I give you.

GENERAL STRUCTURE
- Every scene starts with "# sceneId | TYPE | part | Title" and ends with "---".
- The "part" field is an integer: 0 for the intro scene, then 1, 2, 3, ...
- If the story uses stats, add declarations at the very top of the file (before any
  "#" scene):
  @stat: key | Label | starting_value
  If the story doesn't use stats, skip these lines entirely.

SCENE TYPES (only these seven types exist, do not invent new ones)
- INTRO        : Exactly one, part=0. No choices. Ends only with "-> firstSceneId".
- MAIN         : 2-4 "> ..." choices are REQUIRED. Never write MAIN without choices.
- INTERLUDE    : Has NO choices. Ends only with "-> nextSceneId".
- WEEK_SUMMARY : End-of-part recap. No choices, links to the next part's first scene.
- ROUTER       : Contains NO narrative or dialogue. Only "? condition -> target" lines.
                 The engine checks them top to bottom and jumps to the target of the
                 first matching condition.
- ENDING       : No choices. Ends only with "-> credits".
- CREDITS      : Exactly one, at the very end of the script. Has no outgoing link.

STRICT RULE: if a scene has any ">" choice its type MUST be MAIN; otherwise it MUST
be INTERLUDE. There is no exception to this rule.

WRITING DIALOGUE
CHARACTER: Character name in uppercase, a colon, then the dialogue line.
PLAYER: What the player says.
Lines with no prefix are narration/description text.

CHOICES AND EFFECTS (only inside MAIN scenes)
> Choice text -> targetSceneId
> Choice text -> targetSceneId {approval+10}
> Choice text -> targetSceneId {statName+5, flag:flagName=true}
> Choice text [stat:statName>=40] -> targetSceneId
> Choice text [flag:flagName=true] -> targetSceneId
> Choice text [approval:60-100] -> targetSceneId

ROUTER CONDITION LINES (only inside ROUTER scenes)
? flag:flagName=true -> targetSceneId
? stat:statName>=50 -> targetSceneId
? approval:60-100 -> targetSceneId

MANDATORY RULES
1. Scene IDs use lowercase letters and underscores (e.g. b1_s1, b1_int_a) and must
   be unique.
2. Every MAIN scene's choices must lead to at least 2 different target IDs. If all
   choices lead to the same scene, that's invalid — rewrite it.
3. Every ENDING scene must end with "-> credits".
4. The script must contain exactly one CREDITS scene.
5. "@stat:" lines appear ONLY at the very top of the file; never inside a scene.
6. A ROUTER scene must NOT contain narrative text or dialogue, only "?" lines.
7. Every "->" target and every choice target must point to a real scene ID that
   exists in the script — never leave a broken link.

OUTPUT FORMAT
Produce a complete, playable script that strictly follows the rules above. Do not
add any explanation, commentary, or markdown code fences outside the script —
output only the script text itself.

Now write a story for the following premise:
[WRITE YOUR TOPIC / CHARACTERS / THEME HERE]
↑ Back to top

Как написать историю

Редактор DriftNov — полное руководство по режимам Form, Script и Blueprint

Это руководство объясняет, как написать собственную интерактивную историю с помощью разветвлённого редактора DriftNov. При создании новой истории вы можете выбрать один из трёх режимов работы; все они редактируют одни и те же данные, просто по-разному их представляют.

1. Обзор — 3 режима

Редактор позволяет просматривать и редактировать одну и ту же историю тремя разными способами. Вы можете переключаться между ними в любой момент — ни один из них не «правильнее» других, каждый просто подходит для своей задачи.

Blueprint — самый простой для новичков Вы видите историю как визуальную карту — каждый блок это сцена, стрелки это связи. Двойной клик по любой сцене открывает удобное всплывающее окно, где можно полностью написать сцену — без синтаксиса скрипта, видя связи прямо перед глазами. Самый интуитивный способ для тех, кто не пишет код.
Form — быстро, для мелких правок Редактирование сцен через простой список + поля. Самый быстрый способ внести небольшое изменение текста или связи в одной сцене, хотя визуального контекста Blueprint здесь нет.
Script — для написания вне приложения или с помощью ИИ Написание истории обычным текстом с собственным синтаксисом. Используется, когда вы хотите набросать историю в текстовом редакторе, ни разу не открывая приложение, или попросить ИИ сгенерировать историю в этом формате (см. промпт для ИИ внизу страницы).

Практичный подход: если вы не привыкли писать код-подобный синтаксис, оставайтесь полностью в Blueprint и редактируйте каждую сцену через всплывающее окно. Если вам удобно писать скрипт, или его сгенерировал ИИ, вставьте его целиком через Script, затем доработайте через Form или Blueprint.

Важно: режим Blueprint работает только на широких экранах (на сайте с компьютера, или на планшете в широком режиме). Открыв редактор в мобильном приложении или в узком окне, вы не увидите вкладку Blueprint вообще — произойдёт автоматический возврат к Form. Чтобы использовать Blueprint, откройте сайт с компьютера.

2. Редактор Form

В режиме Form экран разделён на две части: список сцен слева и все поля выбранной сцены справа.

Левая панель — список сцен

Правая панель — поля сцены

Преимущество режима Form: каждое поле проверяется, разорванная связь или отсутствующий выбор сразу помечаются красным. Всю историю можно завершить здесь, ни разу не написав сырой скрипт.

3. Редактор Script

В режиме Script вы видите и редактируете всю историю как обычный текст. Это самый быстрый метод для опытных авторов — особенно при написании длинной истории с нуля. Изменения в Script не применяются автоматически; закончив, нажмите «Применить к форме», и редактор разберёт текст в сцены.

3.1 Формат сцены

Каждая сцена начинается со следующей строки и заканчивается ---:

# sceneId | ТИП | раздел | Заголовок
Текст повествования. Обстановка, атмосфера, действия персонажей.
ПЕРСОНАЖ: Реплика диалога.
PLAYER: Что говорит игрок.
> Текст выбора -> целеваяСценаId
> Текст выбора (условие) -> целеваяСценаId
-> автоЦелеваяСценаId

---

Поле раздел — целое число. Для вступительной сцены используется 0, далее 1, 2, 3… Редактор использует этот номер, чтобы понять, к какому разделу относится сцена.

Если история использует систему статов, добавьте объявления статов в самом начале скрипта (перед любой сценой #):

@stat: смелость | Смелость | 10
@stat: эмпатия  | Эмпатия  | 15
ПолеОписание
keyИспользуется в эффектах/условиях: {смелость+5}, [stat:смелость>=30]
МеткаНазвание, видимое игроку
Начальное значениеЗначение в начале игры, обычно от 0 до 100

Истории без статов просто полностью пропускают эти строки.

3.2 Типы сцен

ТипИспользование
INTROПервая сцена. Существует только одна. Заканчивается -> перваяСцена.
MAINСцена выбора. Обязательны 2-4 варианта >.
INTERLUDEПереходная/атмосферная сцена без выбора. Заканчивается -> следующаяСцена.
WEEK_SUMMARYИтог раздела. Без выбора, ведёт к первой сцене следующего раздела.
ROUTERТочка ветвления без содержимого. Направляет по очкам одобрения или стату/флагу.
ENDINGФинальная сцена. Без выбора. Заканчивается -> credits.
CREDITSЕдинственная сцена титров. Каждая концовка ведёт сюда.
Строгое правило: если в сцене есть хотя бы один выбор >, её тип должен быть MAIN; иначе — INTERLUDE. Исключений нет — иначе редактор выдаст ошибку.

Соглашения по ID сцен (рекомендуется):

3.3 Правила диалогов

# Реплика персонажа — имя заглавными буквами, двоеточие
ЛЕА: Я сегодня так устала.
МАРК: Да ладно, ты всегда такая.

# Реплика игрока
PLAYER: Понимаю. Продолжай.

# Повествование — без префикса, обычный текст
Класс постепенно пустеет. Ты смотришь в сторону окна.

# Использование имени игрока
МАРК: Эй, {playerName}! Так ты здесь.

3.4 Выборы и эффекты

# Базовый выбор
> Текст выбора -> целеваяСценаId

# Выбор + эффект одобрения
> Текст выбора -> целеваяСценаId {одобрение+10}

# Выбор + эффект стата
> Текст выбора -> целеваяСценаId {смелость+5, эмпатия+3}

# Выбор + эффект флага
> Текст выбора -> целеваяСценаId {flag:вГруппе=true}

# Выбор + условие (в интерфейсе заблокирован, если не выполнено)
> Текст выбора [stat:эмпатия>=40] -> целеваяСценаId {одобрение+15}
Синтаксис эффектаОписание
{одобрение+10}очки одобрения +10
{одобрение-5}очки одобрения -5
{статИмя+3}этот стат +3
{flag:вГруппе=true}установить флаг в true
{одобрение+10, эмпатия+2, flag:планГотов=true}несколько эффектов через запятую

3.5 Условия

СинтаксисОписание
[stat:статИмя>=40]этот стат должен быть не менее 40
[flag:вГруппе=true]флаг должен быть true
[одобрение:60-100]очки одобрения должны быть между 60-100

Выборы с невыполненным условием отображаются заблокированными и недоступны для нажатия.

3.6 Сцена Router

Сцена ROUTER не содержит выборов или повествования — только упорядоченный список строк, начинающихся с ?. Движок проверяет их сверху вниз и переходит к цели первого совпавшего условия.

# b2_router | ROUTER | 2 | Развилка
? flag:вГруппе=true -> b2_s1_группа
? flag:вГруппе=false -> b2_s1_библиотека

---

# b4_router | ROUTER | 4 | Путь финального решения
? одобрение:70-100 -> b4_s4_высокий
? одобрение:40-69 -> b4_s4_средний
? одобрение:0-39 -> b4_s4_низкий

Один ROUTER может вести к другому ROUTER для поэтапной оценки сложных условий — например, сначала проверить флаг, а затем разветвиться по очкам одобрения.

3.7 Статы и система одобрения

Одобрение: единый общий показатель отношений/одобрения (0-100), используется в ROUTER как одобрение:X-Y. Доступен автоматически в каждой истории.

Статы: значения, специфичные для истории, их может быть несколько (например, в детективе — интеллект, наблюдательность, убеждение; в приключении — сила, смелость, интуиция). Объявляются в начале скрипта строками @stat: и отображаются в виде полосы на экране итогов раздела.

Необъявленные (скрытые) статы: внутренние счётчики, используемые только в эффектах/условиях без объявления @stat: — никогда не показываются игроку в виде полосы. Полезны для скрытого отслеживания, например «сколько улик собрано»:

> Выбор Б -> b1_s2 {улика+15}
> Выбор В [stat:улика>=30] -> b1_int_особая

3.8 Полный пример

@stat: эмпатия | Эмпатия | 10

# intro | INTRO | 0 | Начало
-> b1_s1

---

# b1_s1 | MAIN | 1 | Первый день
Сентябрь. Новый город, новая работа. Ты впервые заходишь в офис.
Кто-то смотрит на тебя со стороны столов: Ава.
АВА: Ты новенький?
PLAYER: Да, сегодня первый день.
> «Заблудиться — не страшно, я как раз за этим и пришёл.» -> b1_int_a {одобрение+10, эмпатия+5}
> «Было бы проще, если бы ты помогла.» -> b1_int_b {одобрение+5}
> Просто улыбнись, сядь, промолчи. -> b1_int_b {одобрение-5}

---

# b1_int_a | INTERLUDE | 1 | Обеденный перерыв
Обеденный перерыв. Ты стоишь у окна с чашкой кофе.
-> b1_s2

---

# b1_int_b | INTERLUDE | 1 | Другой перерыв
Ты встречаешь Аву в коридоре во время обеда.
АВА: Ну как, нравится работа?
-> b1_s2

3.9 Частые ошибки

4. Режим Blueprint

Blueprint показывает поток вашей истории в виде визуальной карты. Каждый блок (узел) представляет сцену; стрелки показывают связи между сценами. Он создан не только для просмотра структуры, но и для того, чтобы писать всю историю прямо здесь.

4.1 Навигация по карте

4.2 Редактирование сцены — двойной клик открывает окно

Двойной клик по любому узлу открывает широкое всплывающее окно со всеми полями этой сцены. Оно разделено на три колонки:

Таким образом, не выходя из Blueprint: смотрите на карту, чтобы увидеть, какой сцены не хватает, дважды кликните, чтобы полностью её написать, закройте окно и переходите к следующему узлу. Если вы попытаетесь закрыть окно с несохранёнными изменениями, приложение сначала предупредит вас.

Blueprint особенно полезен для: визуального поиска разорванной связи (сцены-сироты), проверки того, действительно ли в разделе открыты два разных пути, обнаружения, что все выборы случайно ведут в одну и ту же сцену — и создания всей истории с нуля, ни разу не изучая синтаксис скрипта.

5. Часто задаваемые вопросы

С какого режима начать?
Если вы не привыкли писать код-подобный синтаксис, начните с Form. Если вам удобно писать обычный текст, Script будет намного быстрее.

Почему мои изменения в Script не отображаются?
Изменения в Script не сохраняются автоматически — нужно нажать «Применить к форме».

Сколько разделов или сцен нужно писать?
Ограничений нет; можно написать короткую историю из одного раздела или длинную, многораздельную. Важно, чтобы выборы в каждой сцене MAIN действительно вели к разному последующему содержанию.

В чём разница между одобрением и статами?
Одобрение — единый общий показатель отношений, встроенный в каждую историю. Статы — значения, специфичные для конкретной истории, которые вы определяете сами, и их может быть несколько.


Промпт для ИИ

Промпт для ИИ для генерации скрипта

Вставьте текст ниже как есть в чат с ИИ (ChatGPT, Claude и т.д.) вместе с идеей вашей истории. Это не промпт под конкретную историю — это общие правила, описывающие формат скрипта редактора DriftNov. Просто замените плейсхолдер темы на свою собственную идею.

Ты — автор сценариев для интерактивных/разветвлённых историй. Строго следуя
формату ниже, БЕЗ ИСКЛЮЧЕНИЙ, напиши полный сценарий истории по теме, которую я
дам.

ОБЩАЯ СТРУКТУРА
- Каждая сцена начинается со строки "# sceneId | ТИП | раздел | Заголовок" и
  заканчивается "---".
- Поле "раздел" — целое число: 0 для вступительной сцены, далее 1, 2, 3, ...
- Если история использует статы, добавь объявления в самом начале файла (перед
  любой сценой "#"):
  @stat: key | Метка | начальное_значение
  Если статы не используются, полностью пропусти эти строки.

ТИПЫ СЦЕН (существует только эти семь типов, не придумывай новые)
- INTRO        : Ровно одна, раздел=0. Без выбора. Заканчивается только
                 "-> перваяСценаId".
- MAIN         : ОБЯЗАТЕЛЬНЫ 2-4 варианта "> ...". Никогда не пиши MAIN без
                 выборов.
- INTERLUDE    : НЕ содержит выборов. Заканчивается только "-> следующаяСценаId".
- WEEK_SUMMARY : Итог раздела. Без выбора, ведёт к первой сцене следующего
                 раздела.
- ROUTER       : НЕ содержит повествования или диалога. Только строки
                 "? условие -> цель". Движок проверяет их сверху вниз и
                 переходит к цели первого совпавшего условия.
- ENDING       : Без выбора. Заканчивается только "-> credits".
- CREDITS      : Ровно одна, в самом конце сценария. Не имеет исходящей связи.

СТРОГОЕ ПРАВИЛО: если в сцене есть хотя бы один выбор ">", её тип ОБЯЗАТЕЛЬНО
должен быть MAIN; иначе — ОБЯЗАТЕЛЬНО INTERLUDE. Исключений из этого правила нет.

НАПИСАНИЕ ДИАЛОГОВ
ПЕРСОНАЖ: Имя персонажа заглавными буквами, двоеточие, затем реплика.
PLAYER: Что говорит игрок.
Строки без префикса — это повествование/описание.

ВЫБОРЫ И ЭФФЕКТЫ (только внутри сцен MAIN)
> Текст выбора -> целеваяСценаId
> Текст выбора -> целеваяСценаId {одобрение+10}
> Текст выбора -> целеваяСценаId {статИмя+5, flag:флагИмя=true}
> Текст выбора [stat:статИмя>=40] -> целеваяСценаId
> Текст выбора [flag:флагИмя=true] -> целеваяСценаId
> Текст выбора [одобрение:60-100] -> целеваяСценаId

СТРОКИ УСЛОВИЙ ROUTER (только внутри сцен ROUTER)
? flag:флагИмя=true -> целеваяСценаId
? stat:статИмя>=50 -> целеваяСценаId
? одобрение:60-100 -> целеваяСценаId

ОБЯЗАТЕЛЬНЫЕ ПРАВИЛА
1. ID сцен используют строчные буквы и подчёркивания (например, b1_s1,
   b1_int_a) и должны быть уникальными.
2. Выборы в каждой сцене MAIN должны вести как минимум к 2 разным ID целей.
   Если все выборы ведут в одну и ту же сцену, это недопустимо — перепиши.
3. Каждая сцена ENDING должна заканчиваться "-> credits".
4. В сценарии должна быть ровно одна сцена CREDITS.
5. Строки "@stat:" находятся ТОЛЬКО в самом начале файла; никогда внутри сцены.
6. Сцена ROUTER НЕ должна содержать текст повествования или диалог, только
   строки "?".
7. Каждая цель "->" и каждая цель выбора должны указывать на реально
   существующий в сценарии ID сцены — никогда не оставляй разорванных связей.

ФОРМАТ ВЫВОДА
Создай полный, играбельный сценарий, строго соблюдающий правила выше. Не
добавляй никаких пояснений, комментариев или markdown-блоков кода вне сценария —
выведи только текст самого сценария.

Теперь напиши историю на следующую тему:
[НАПИШИТЕ ЗДЕСЬ ВАШУ ТЕМУ / ПЕРСОНАЖЕЙ / ИДЕЮ]
↑ Наверх