Nav

як стваріць укагаку.txt - Notepad++

Як стварыць сваю укаґаку (з Simplicity Template YAYA)

Дзе Пачынаць?

Упершыню, трэба ведаць, што такое гэта "укаґака". (па назву 'ґоўст' ('прывід') ў ангелскім грамадствам.) Тыпічная укаґака - галоўны персонаж а іх сябар ('Сакура' і 'Кіро'). Ў японскыя укаґакы, сакура звычайна дзяўчына, а Кіро - маленькая жывёла якісці. Але, укаґакы могуць быць што угодно! Я толькі ведаю ангелскую мову, так што магу параіць толькі ангельскыя укаґакы — напрыклад:
"I often dream of marigolds" для унікальны, разгаворны вопыт
"Needle" для... ну, вопыт іголку. будзеш бачыць.
"Call of the sea" распявае тры історыю пра людзі і моря.
"Xander's Refuge" проста думаю што ён будзе цікавы. (сам с яго не гуляў)

Каб гуляць з укаґакы, трэба камп’ютерная праграма, якы можа іх запускаць. Ёсць некаторыя разныя праграмы, але хочам ўсталяваць только адзін* (SSP). Каб зрабіць гэтага, перайсці да ssp.shillest.net і дакрануйце на велікый розавы квадрат налево, якы кажа "complete install package". Затем, націсніце на SSP.zip два раза, каб ўсталяваць яе.

*Ninix-kagari таксама існуе і палучае абнаўленне, але колкасць функціі - не так шмат.


Калі упершыню запускаеш ССП, будзеш бачыць Эмілі, дапаможнік укаґакы і ССП. Калі разумееш японскую мову, яна напэўна будзе карысным. (А калі разумееш ангелскую мову, SSP Angel - падобны дапаможнік. Параю заппмаваць яе калісці.) Цяперь можаш насцісніць правой кнопкай мышы на Эмілі, каб адкрыць меню, дзе можна зменіць укаґаку, або дадаць яшчэ адно укаґаку на хатнім экране. (І яшчэ кручу рэчы, але яны не так важна зараз).

Можаш гуляць з некаторыя укаґакы, каб ведаць што яны такое, а затем вярнуць сюды, або можаш проста працягваць! Калі хочаш гуляць, вікі Ukagaka Dream Team мае добры спісок ангэлскыя укаґакы) Параю сам тех із праграмісты Zichqec, Galla, і Zdzisiu.

Пачатка: што цябе трэба, каб стварыць укаґаку?

Перад ўсе што будзем тут зрабіць, адкрывай SSP а перайсці да настройкі. (Ў меню правой кнопкай мышы.)
Ў першае акно (Агульны), націсніць на выбар "уключыць функуія для разработчіков". Гэта дазваляе цябе адкрыць палітра разработчіков з Ctrl+Shift+D (ctrl+shift+в), дзе будзе крыху палезныя функціі.

А пасля таго, табе трэба:

1) Редактар код.
- Калі ты ужо праграміст, працягвай з рэдактар, якы ўжо карыстаеш. Гэта лёгка :Р
- А калі не, я параю gVim або Notepad++ — N++ будзе легче карыстаць, але мне проста падабаецца vim ^^;;
- іншыя редактары і ёсць - проста хочаш штосці з вылученне код!

2) Абалонка (ці ўмець як маляваць)
- Калі ўмееш маляваць, то добра! Маляванне абалонку самы будзе працаваць
- Калі не ўмееш, а не хочаш навучаць, ёсць ўжо-маляваны абалонкы якім можна карыстацца. UDT мае маленкі спісок а вось тут можаш знайсці абалонкы ад японскіх мастатак
- (іншыя спосабы мастацтва - 3D мадэлінг, напрыклад, таксама тут мачгыма.)

3) Гэта тэхніческы не нужда, але будзе вельмі-вельмі карысна мець шаблон.
- Я параю Simplicity Template / Шаблон Простота (ў YAYA) от Zichqec, але ёсць іншых (GT ghost template, Minimum YAYA template і CHIPS, напрыклад.)

...і ўсё! Ўсталявай шаблон*, адкрыце редактар, а сустракай мяне ў наступным этапе :D

* Будзем на гэтаму карыстаць YAYA і шаблон Simplicity, але спадзяюся, што некаторыя факты ўсё-яшчэ будуць палезныя.

Што такое yaya?

YAYA - мова код. Гэта то, што будзем карыстаць ў гэтая кіраўніцтва. Іншыя праграмныя мовы ёсць, але не зараз ведаю пра імі - прабачце!
yaya падобны да C і Python, але яна не зусім лагічна калі ўжо ўмееш кадіраваць. Не хваляй так моцна калі не ўмееш - яна не так дрэнна))

Каб узнаць больш пра yaya, паглядзіце на YAYA Fundamentals - Zichqec


install.txt і descript.txt

самой першы этап - install.txt. ён выглядае так:

  • charset,UTF-8
    type,ghost

    name,Назва Укаґака
    directory,nazva_papka

charset - charset укаґаку. ў янпоскыя укаґакы гэта SHIFT_JIS, а ёсць іншыя charset-і для вяское мовы, але моцна параю UTF-8. Гэта будзе працаваць з любой тэкст.

type - тіп рэчы. Тут гэта ghost (таму што ўсё гэта - укаґака.)

name - назва целую укаґаку. гэта будзе то, што бачыць ў меню правой кнопкай.

directory - назва папка, дзе будзе ўсталяваны укаґаку. Паспрабуйце падумаць штосці унікальны, каб не перепісываць іншая укаґака! (SSP мае увагу пра гэта, але лепше быць беспечна.)
Напішіце, таксама, толькі ў характеры alphanumeric - калі не, людзі можа быць маюць крыху праблем!

каб знойдзець гэты файл, перайцсі да папку, дзе ўсталявалі SSP, а тады перайсці да ghost\[simplicity]\ .



адкрыць і напоўніць яму з інформацію! прыклад:

  • charset,UTF-8
    type,ghost

    name,жыццё ў поісках маражанае
    directory,icecreamquesting

(прабач за ангнльскую, я думаў, што гэта смяшна..)
І вось цяпер трэба напоўніць два descript.txt-і. пачынаем тут з descript.txt абалонку!

ад папка, ў якім ты зараз (SSP\ghost\[simplicity]\) ідзі ў папку \shell а тады \master .
[ssp\ghost\[simplicity]\shell\master\]



там будзе кучу фоткі, але мы хочам файл descript.txt. адкрывайце яго, а ты ўбачыш гэта:

  • charset,UTF-8
    type,shell

    name,Абалонка па змаўчанне
    craftman,Some_Person
    craftmanw,Нейкі_Чалавек
    craftmanurl,https://example.com/

    seriko.alignmenttodesktop,free
    seriko.use_self_alpha,1

Бачыш, што type цяпер shell? гэта значыць, што ён абалонка.

name,Назва абалонка - назва абалонка. будзе паказаны ў меню правой кнопкай.
craftman,Some_ Person - як craftmanw, але не для спеціальныя ціфры. Не трэба калі не хочаш.
craftmanw, - назва чалавек, хто малявалі абалонка. Напэўна будзе тваё імя!
craftmanurl, - спасылку чалавек, хто малявалі абалонка. калі ёсць сайт або аккаунте для сваю мастацтву, напішіце яму тут.

seriko.alignmenttodesktop,free - дзе на экране абалонка можа рухацца. free значыць паўсюль, а таксама ёсць top (наверху) і bottom (на панель задання).
seriko.use_self_alpha,1 - дазваляе празрачнасць. Калі не можаш маляваць з празрачнасць, то удаляй гэты ряд а дадайце фон із толькі адзін колір.

(прыклад празрачныя/непразрачныя фоткі:)

калі ўсё гэта гатоў, верніць па две папкі а ідзі да ghost\master\ .
(SSP\ghost\[simplicity]\ghost\master\)



descript.txt там выглядае вельмі падобны:

  • charset,UTF-8

    name,Назва Укаґака
    type,ghost

    shiori,yaya.dll

    craftman,Some Person
    craftmanw,Нейкі чалавек
    craftmanurl,https://example.com/

    sakura.name,Назва сакура
    kero.name,Назва кіро

    icon,icon.ico

    sstp.allowunspecifiedsend,0

shiori - мова код. мы карыстаем yaya, але ёсць іншых. (напрыклад kawari). калі мова код не мяняеш, не дакрануй гэты ряд.
(я сам не зусім разумею shiori так што... ну глядзіце ў іншых местах, каб ведаць далей.)

sakura.name - назва сакура ў код. другыя укаґакы могуць гэта бачыць (але болшінства нічога не будзе зрабіць з гэтым інформацію.) Таксама бачна ў шукацельнік укаґакы.
kero.name - назва кіро ў код.

icon - іконка на панель заданняў.

sstp.allowunspecifiedsend,0 - паглядзіце на Ukadoc.

і ўсё! цяпер можам працягваць да абалонка або пісанне укаґакы! :D

Першыя крокі: абалонка

знайсці папка, дзе ўсталявалі SSP. адтуль, перайсці ў папку ghost\[simplicity]\shell\master. Там будзе пару фоткі, а некаторыя файлы текста. Для гэтага кіраўніцтва будзем маляваць і кадіраваць па-прастейшаму, так што памятуй, што ёсць шмат цікавыя рэчы магчыма зрабіць са знешнасці.

Звычайна, укаґака будзе мець адзінаццаць (11) выраженыя для Сакура, а Кіро - тры (3). І ў Сакура і ў Кіро будуць анімаціі морганне і размаўлянне.
(Сапраўды, абодвае можа мець колькі угодно, а калі Кіро таксама чалавек, то той самы адзінаццаць (11) - добры чісел, але... па-прастейшаму ;Х )

Добры колкасць выраженыя так:

  • 0 - Звычайны
    1 - Бянтэжны
    2 - Здзіўлены
    3 - Хваляючы
    4 - Сорамны
    5 - Усмешка
    6 - Закрывая вочы
    7 - Сярдзіты
    8 - Насміхая
    9 - Сярдзіты (збянтэжаны)
    25 - Спявая

(Калі хочаце такія самыя выраженне для кіро - 10-19. праграмны рэч.)

Выраженыя кіро Ад сюды:
  • 0 - Звычайны
    1 - Адкрыя вочы
    19 - Спявая

Малюйце тваі фоткі і пастаўце ім у гэтая папка, тады называйце імі як surface0.png, surface1.png, surface2.png і. г. д. Тады, адкройце surfaces.txt і дадаць пару лініі код:

    surface0
    {
    }

    //гэта выраженыя бянтэжнасць
    surface1
    {
    }

    surface2
    {
    }

    //(ігд......)

Гэта - таму SSP не будзе з табой зліцца. калі гэтага не зрабіць, ну, праграм будзе працаваць, але заўсёды з увага, а нельга будуць анімаціі. (я не буду доўга размаўляць пра анімаціі.)

можаш і не маляваць анімація для размаўленне, але параю морганне. (часца сам не малюю тое, але ж...)
[!] калі малявалі на лісты, гэта будзе крыху цяжка, але я веру ў цябе!
каб зрабіць гэта, адкройце surface0 (ці любая фотка) ў свой праграм мастацтва. (mspaint, krita, ibispaint, sai...) Спадзяюся што маеш слой.
Выбірай месца вакол вочы, скапіруйце яно, і ўставіць на новем слой. (ці скапіруйце лінія і ўставіце - цветы ўсё яшчэ трэба маляваць зноў.)
Перемалюйце вочы крыху закрыты, а захавайце як новая фотка. (назва будзе штосці як surface100.png)
Перемалюйце вочы закрыты, захавайце. (surface101.png)

закрывайце праграм мастацтва, і вярні ўвагу да surfaces.text.

ў шаблон простота ўжо ёсць анімація, якая трэба. Проста удалить // перед яму а будзеш гатовыя! Ура!!!
Калі працуеш з іншы шаблон, анімацыя будзе выглядзець... ну, іншы. але вось код з назвы, якы я аддаў на прыклад:
    surface0
    {
    animation0.interval,random,4
    animation0.pattern0,overlay,100,0,0,0
    animation0.pattern1,overlay,101,100,0,0
    animation0.pattern2,overlay,-1,50,0,0
    }

animation0.interval,random,4

0 - номер анімація
interval - тіп анімація
random - час анімація (ёсць іншыя, напрыклад "runonce")
4 - кожная секунда будзе 1/4 шанс граць анімацію. (гэта тут таму што час - random)

animation0.pattern0,overlay,101,100,0,0

0 - кадр анімація
overlay - як кадр будзе выглядзець - я не ведаю як тлумачыць.. (ёсць іншыя, напрыклад "multiply")
101 - номер фотка. нельга быць назва. (surface101 а не surfaceVočy)
> -1 - гэта нічога, так што працуе як празрачны кадр. вельмі карысны.
100 - час перад тым, што выграе кадр, ў... вельмі маленькыя секунды
0,0 - коордінаты x,y . пакуль не зусім важна імі змяніць.

Анімація для размаўленне будзе болшь ці меньш той же самы рэч, але тіп анімаціі будзе "talk" а не "random". Казаць праўду, я не ведаю як добра тлумачыць гэта, так што... хадзем далей!

Пра хітбоксі

два рэчы тут: хітбоксі, які хадзіць ў {скобкі}, а surface.append. слухайце внімательна!

код хібокс выглядае так:

    surface0
    {
    collision0,0,0,130,65,галава
    }

collision0 - значыць, што гэта хітбокс. 0 - номер хітбокса, так што змяніце яго калі дадаеце болей.
0,0,0,0 - x,y,xr,yr коордінаты
'галава' - назва хітбокс. паказана калі ставіць мышь без руханне на хітбокс. (а трэба ведаць для код ў mouse.dic).

каб знайсці каардінаты, можаш адкрыць фотку ў mspaint і маляваць квадрат, тады знойдзець уголы (сверху налева і унізу направа) і паведайце, што чіслы коордінаты.

іншы спосаб знайсці каррдінаты - ўсталяваць праграм Coordin. адкрыць праграм, а дадайце на яго фотку. калі малюеш ў праграме квадрат, каардінаты будуць скапіраван на буфер абмену. тады ўставіць імі ў нужнае месца!

напэўна замецілі, што прыклад тут названы "галава". Гэта таму што вельмі шмат укаґакы можаш 'песціць' (так казаць). з хітбоксем можаш зрабіць што угодна, але галава будзе наш прыклад.
А вось, хадзем да surface.append. Гэта можа цябе спасаць крыху часу! вот прыклад з адзін маіх укаґакы:

    surface.append0-11,!10
    {
    collision0,145,30,213,65,head
    }

замецайце, што першы номар напісан без , между яму і текст surface.append. Ёсць прычыны для гэтага, але не думаю што я магу тлумачыць тут.

калі хочаш толькі неколькі разныя фоткі, можаш напісаць номары так:
surface.append3,7,5
а для целы ряд фоткы (напрыклад адзін (1) да дзевяць (9)):
surface.append1-9
калі ставіць перад номар !, гэта значыць, што не карыстаеш таго номар ў код.
surface.append0-4,!2 будзе дадаць код ў скобкы да фоткы 0, 1, 3, і 4, але не фотка 3.

А так, surface.append будзе дадаць код {ў яго скобкі} да больш чым адна фотка! для хітбоксі, калі месца дзе хочаш мець хітбокс не занадта змяняецца, гэта вельмі карысны.

а што калі не ўмею маляваць?

скачайце бесценнае знешнасць паглядзіце на номеры фоткі а чытайце яго readme

Першыя крокі: пісанне

А вось тут дзе табе трэба пісаць! ці праграмаваць але гэта іменна не так важна. (сур’ёзна!)
каб пачаць, знайсці папка, дзе ўсталявалі SSP. адтуль, хадзіце да ghost\[simplicity]\ghost\master. там будзе кучу файлі текста, але зараз мы хочам тех, што заканчывае с .dic (ці .kis ці .py ці... што твой дзіўны іншы шаблон карыстае.)





Так што, дзе пачынаць? я параю з boot.dic. ў гэты файл будзе дыялогі, які бачыш калі адкрываеш ці закрываеш укаґаку.

Boot.dic

OnFirstBoot - самая первая загрузка. Не нужден, але добрае месца тлумачыць пра сваю укаґаку. Я не магу рассказаць табе што напісаць, але вось прыклад:

    OnFirstBoot {
    "\1\s[10]\0\s[0]Прывітанне новы сябар! %(нік), так? Я чыталі твой ліст сто тысяч раз! Целы ноч не спалі, таму былі так рады сустракаць табе! Гатоў ўбачыць горад?"
    }

OnFirstBoot - назва функуія. Гэта асновая функція, так што не меняйце назва!
- іншыя функціі, якыя не асновыя, трэба пачынаць з On. напрыклад: OnRazmaulaj

{} - важныя скобкі. трэба пачаць з { а закрыць з }.
"штосыі!" - нітка. ніткы могуць мець любое текст! (акрамя " ў сяредзіну другыя "-і...)
\1 \0 - чалавек хто будзе штосці размаўляць. \0 - Сакура а \1 - Кіро. яшчэ можаш зваць з \p[2] (\p[3], \p[4] і.г.д.)
\s[0] - фотка знешнасць. не ісключытельны, так што "\0\s[0]\1\s[0]" будзе паказаць две сакуры на экране.
%(штосці_не_ведаю) - пераменная ў нітку. там %(нік) - гэта назва карыстальнік. (я карыстаю %(нік) але называйце свою переменную як хочаш :) )

крыху пра кантент прыклад - укаґкы могуць быць ўсё разныя рэчы! тут гэта падобнае да візуальны раман, а карыстальнік сустракае хтосці, хто будзе паказаць ім па новы горад. (або штосці як гэта.)
іншы прыклад ад сваю (мою) укаґаку:

    OnFirstBoot {
    //[...]
    "\1\s[10]\2\s[20]\0\s[0]А, прывітанне! Я вельмі рад, што ты тут. Ёсць шмат аб чым хачу гаворыць сёння. Не трэба размаўляць, калі не хочаш. ...Але, это ж ты казалі, што проста хацелі слухаць......"
    }

...зрабіў укаґака ў толькі несколькі дні - нічога не кажы мяне пра мову...
але бачыш што паспрабую казаць, так? Неба предел!
Калі гэта зроблены, наступная функція - OnBoot.

(ну, с шаблон простота, гэта OnInitialize, але тая не хочам зараз)

OnBoot - звычайная загрузка. Ў шаблон простота ёсць спецыальныя дыялогі для дзень нараджэння карыстальніка і новы год, але OnBoot таксама можа выглядзець проста так:

    OnBoot {
    "Прывітанкі, %(нік)! Дзе хочаш ісці сёння?"
    }

...але гэта будзе кажа той самы рэч кожны раз, так што можаш дадаць яшчэ дыялогі:

    OnBoot {
    "Прывітанкі, %(нік)! Дзе хочаш ісці сёння?"

    "Надвор’е заўсёды добра тут, ці не так? Хтось ведае чаму...?"

    "Прывітанне! кветкі сёння проста прыгожыя!"
    }

а карыстальнік будзе бачыць адзін з гэтыя тры дыялогі калі запускае укаґаку. Праграмаванне!

(А, і калі не напісана номер \0 ці \1 на пачатку нітку - будзе сказано Сакура. Лепше ставіць номер там, але я гэта не зраблю... хехе)

OnClose - як OnBoot, але для калі закрывае укаґаку. Прыклад:

    OnClose {
    "Гэты быў добры доўгы дзень па горадзе! Пабачымся пазней, %(нік)!"

    "А, мне трэба ісці! Пакуль %(нік), да сустрэчы!"
    --
    "\w6\x\-"
    }

-- - аддае апошная нітка да наступная нітка. без яго ніткі будуць на случайны выбар.

\w1 - \w9 - маленькая пауза ў тэкст. таксама можаш напісаць \w[3000] для пауза із некаторыя маленькыя секунды, але гэта больше літары :Р

\x - знак, якы дазваляе текст заставаць на экране да таго, як карыстальнік націсніць на поле с текстом. \x[noclear] зрабіць той ж самы, але не пачысціць поле із текста.

\- закрывае укаґаку. Тэхніческі можаш паставіць дзе угодно, але закрывае укаґаку *адразу*. будзь з ім асцярожна!

...а гэта ўсё ў boot.dic! Вядома, калі твая укаґака ў від чалавекі на экране хто размаўляе (а не штосці як Slime Fighter 2000) ты напэўна тут хочаш добра колкасць дыялогі, але зараз ў цябе будзе адзін ці два на функціі. А гэта добрая пачатка! зараз, хадзем да aitalk.dic.

Aitalk.dic

aitalk.dic - вось тут, дзе магія! болшасць таго, што укаґаку гаворыць будзе напісаны тут. каб пачаць, хачу размаўляць пра функцію OnAiTalk.

ў шаблон простота, OnAiTalk выглядае так:

    OnAiTalk
    {
    if CHAIN.IDName == ""
    {
    LastTalk = RandomTalk
    }
    else
    {
    LastTalk = ChainTalk
    }
    LastTalk
    }

ШТО такое прайдзе тут?!?! чаму ўсё гэтыя =-і ???

с пачатку:
OnAiTalk - назва функція. асновая функцыя, так што не перайменуйце.
{} - важныя скобкі! кожны этап трэба пачынаць з { а заканчываць з }. нельга быць адзін без другы...
if - калі. (если, калі мець бодьш сенсу. я не ведаю. калі/калі варыць галава.)
CHAIN.IDName - назва переменная! тут яна звязана к цепы. будзем узнаць пра імі пазней.
== - роўны. Памятай - два знакі == роўны! Калі маеш толькі адзін код будзе не так.
"" - пустая нітка.

ряд if CHAIN.IDName == "" значыць "калі переменная CHAIN.IDName пустой, то сделай то, што ў {гэтыя скобкі}".

LastTalk - переменная. (яна нітка.)
RandomTalk - масіў дыялогі. (хутка будзем там...)
= - зменіць да штосці. ну... не ведаю як тлумачыць? мабыць так:

ряд LastTalk = RandomTalk значыць "нітка LastTalk будзе адзін случайны элемент з масіў RandomTalk". Спадзяюся, што разумееш.. ^^;;

else - калі гэта неправільна, зрабі тое, што ў {гэтыя скобкі}.

так што ряд else {LastTalk = Chaintalk} значыць "калі переменная CHAIN.IDName НЕ пустой, то зрабі то, што ў вось {гэтыя скобкі}".

апошні LastTalk будзе паказаць кантент у переменная (памятуй, што яна нітка) на поле с текстом. Зараз, LastTalk будзе штосці з RandomTalk, так што давайце чытаць прв гэтаму!

RandomTalk - функція (як OnBoot і OnClose!)

ряд LastTalk = RandomTalk значыць "нітка LastTalk будзе адзін случайны элемент з функціі RandomTalk".

RandomTalk - гэта функція, як я ўжо казаў. Замецайце, што яна не пачынае з "On"! Гэта значыць, што калі напіше \![raise,RandomTalk], нічога не здарыцца! \![raise,OnFunkcia] пакуль не будзе зусім важна, але памятуй, што raise толькі працуе з функціі, якыя пачынаюць з On.

Таму што тут будзе дыялогі, які укаґака казаць, хочаш больш чым адзін дыялог. Напрыклад:

    RandomTalk : nonoverlap_pool {
    "\0\s[0]Яшчэ адзін цудоўны дзень па горадзе!\e"

    "\0\s[7]Думаеш, што маражанае можам знайсці?\w3\s[0]\nГэта тайны рэч, маражанае.\e"

    "\0\s[0]Я жыву толькі быць прыклад. Дзіўны быт."

    }

: nonoverlap_pool - ў yaya, працент случайны выбарі змяняецца, калі ў функціі больш чым першыя нужны пару скобкі {}. гэты мадіфікатар значыць, што кожны дыялог будзе сказано адзін раз, прежде чым, як паўтаряецца. Уключая дыялоґі ў if/else-і! Без яго дыялоґі усё яшчэ паказаны, але паўторы здаряцца вельмі часца.
\0 - якы чалавек размаўляе. \0 - Сакура, а \1 - Кіро. (больш чалавекы можаш зваць з \p[2], \p[3], \p[4], і. г. д.)
\s[0] - фотка знешнасць. Не ісключытельна, так што \1\s[0]\0\s[0] будзе паказаць два сакуры на экране.
\w1 - \w9 - пауза ў некаторыя маленькыя секунды за пяць. таксама ёсць \w[3000] (3000 прыкладны чісел), што некаторыя маленткыя секунды, не за пяць.
\n - новы ряд. як < br> ў HTML. \n[half] будзе полтора новы ряд.



\e - канчатак тэкста. "текст текст текст\e чаму я тут" будзе паказаны як "текст текст текст" ў поле с текстом.

а ты гатовыя напісаць за укаґака цяпер! але прежде чым, як выйходзіць...

    RandomTalk {
    "ў мяне ёсць важная навіна!\e:chain=навіна"
    }

    навіна
    {{CHAIN
    "вельмі-вельмі важная навіна!"
    "слухай внімательна..."
    "чакай яшчэ хвілінку......"
    "Ты мой лепшы сябар!"
    }}CHAIN

:chain=штосці - мадыфікатар \e, што пачынае ланцуг дыялогі. Ўверх тут ланцуг па назвы "навіна".
навіна - назва ланцуг. Яны могуць быць што угодна.
{{CHAIN - ў yaya, гэта кажа што функція сапраўды ланцуг.
}}CHAIN - канец ланцуг. Не забывай яму...

дыялоґі ў ланцуг будзе сказаны (па час разгавора) ў ряд. Так што калі час разгавора адна хвілінка, кожную хвілінку укаґака будзе казаць адзін дыялог з ланцуга. напрыклад:

    штосці
    {{CHAIN
    "пасля звычайны дыялог, першы дыялог ў ланцуг. (тэхніческы другы.)"
    "прашла адна хвілінка, а я цяпер кажу другы дыялог ланцуга."
    "яшчэ адна хвілінка, а мой апошні дыялог. наступны дыялог будзе ад RandomTalk."
    }}CHAIN

магчымасці ёсць! для разгавор можа быць лепше карыстацца \x або \x[noclear], i \n (паглядзі на I Often Dream of Marigolds), але можаш зрабіць што хочаш :D

так што ідзі і напішы укаґаку! гэта амаль ўсё што трэба - далей будзем паглядзець на астатнае файлі .dic .

mouse.dic

mouse.dic - для взаймадейсвтіі мышы! тут толькі размаўляем пра OnMouseDoubleClick і OnMouseMove, але ёсць іншых!

Пачынаем з OnMouseDoubleClick:

    OnMouseDoubleClick {
     if reference5 == 0 {
      if reference3 == 0 {
       OnSakuraMenu
      }
      else {
       OnKeroMenu
      }
     }
    }

OnMouseDoubleClick - назва функція. гэта - двойны націск мыші.

if - калі[, то...] (напрыклад: if peremennaia == 1 {} калі правілна, што переменная чісел 1, то сделай то, што ў {гэтыя скобкі}.)
reference5 - націсканая кнопка мышы. 0 значыць левая.
reference3 - націсканы чалавек. 0 - сакура а 1 - кіро.
OnSakuraMenu - запускае функція меню ў сакуры.
else - калі if і elseif-і неверный, сделай гэтага.
OnKeroMenu - запускае функція меню ў Кіро.

Гэтае часць код значыць, што калі карыстальнік зрабіць двойнае націск на сакура, гэта будзе адкрыць меню сакуры — а калі зрабіць двойнае націск на астатнае чалавекі (Кіро і чалавекі, якы зваць з \p[2] ігд) будзе адкрыць меню кіро.

дарэчы, reference4 - назва націсканы хітбокс, калі хочаш карыстаць яму яксці тут.

далей - OnMouseMove:

    OnMouseMove {
     if reference4 != "" {
      stroke++

       if stroke % 40 == 0 {
        if reference3 == 0; OnMouseMove.Sakura
        else; OnMouseMove.Kero
       }
     }
    }

!= - калі пераменная не штосці. як ==, але наадварот.
stroke - переменная (чісла). Як часца чалавек рухалісь мышы на чалавек.
++ - дадаць адзін чісел да переменная. краткая форма += 1 . (переменная нельга быць нітка каб карыстаць гэтаму.)
% - modulo - чісел па модулю. (6 % 2 = 0 .)

OnMouseMove.Sakura - функція OnMouseMove для сакура. калі правільна памятаю, ёсць некаторыя рэчы які нельга зрабіць з гэта спосаб, але імі не ведаю... прабачце..!!
OnMouseMove.Kero - функція OnMouseMove для кіро.

OnMouseMove.Sakura і OnMouseMove.Kero вельмі падобныя, так што толькі будзем крыху паглядзець на OnMouseMove.Sakura:

    OnMouseMove.Sakura {
     if reference4 == "галава" {
      "\0\s[0]пеці??"
     }
    }

(reference4, памятайце, назва хібокс.)
ряд if reference4 == "галава" значыць "калі чацвёрцы референц (пецаны хітбокс) па назву 'галава', то зрабі то, што ў {гэтыя скобкі}". Тут гэта будзе проста вярніць случайны выбар з дыялогі.

Ўсё што трэба зрабіць тут - напісаць больше дыялогі ў другая пара скобкі! Гэта будзе канчатак файл для пісанне, але можам хутка паглядзець на OnMouseLeaveAll.

    OnMouseLeaveAll {
     stroke = 0
    }

OnMouseLeaveAll здарыцца, калі мышь з’едзе з любой чалавек (у гэтую укаґаку) на экране. Тут гэта функція вярніць номер переменная stroke да ноль (0). Важна, таму што без яе ты былі бы няспынна песціць укаґаку калі мышь толькі крыху рухалась праз чалавек! А мы гэта не хочам.

цяпер мы гатовыя перайсці да menu.dic! (уключая kero_menu.dic)

menu.dic і kero_menu.dic

menu.dic там, дзе знаходзіць код для меню сакура. (kero_menu.dic той самы рэч, але для кіро.)
Гэта можа выглядзець як занадта, але не хваляйся! Гэта на реалансці не так дрэнна)
ітак, файл пачынае з гэтым:

    SakuraMenuGreetings : nonoverlap {
     "здравствуй."
     "как мне можно помочь?"
    }

SakuraMenuGreetings - функція (якы будзем пазваць як пераменная)
: nonoverlap - мадыфікатар, якы значыць, што кожны дыялог будзе сказано перад таго, як паўтарае.
скобкі, спадзяюся, ты зараз разумееш! (треба быць адзін { на пачатку а адзін } на канцы функціі.)
дыялогі унутры будзе паказаны перад ўсе ў меню. (так што, як первы рэч ў меню.) Гэтая функція не трэба, але можа быць добра мець яе.

Далей - галоўны меню сакура:

    OnSakuraMenu : all {
     "\0\s[0]\b2\![set,autoscroll,disable]"

     if SHIORI3FW.Eventid == "OnMouseDoubleClick"; SakuraMenuGreetings
     "\n\n\_q"

     "\![*]\q[гаворыць,OnAiTalk]"

     if LastTalk != ""; "  \![*]\q[паўтары гэта,OnLastTalk]"

     "\n\n"
     "\![*]\q[зменіць час разгаворы,OnTalkRateMenu]\n\n"

     "\![*]\q[Гэта ўсё, пустой]"

     "\_q"
    }

: all - мадыфікатар, што значыць кожная нітка будзе паказаны ў поле с текстам. (нічога будзе на случайны выбар!)
\0 - чалавек, хто размаўляе. \0 - сакура а \1 - кіро. (таксама ёсць варыянт \p[2], \p[3], \p[4] і.г.д для больше чалавекі.)
\s[0] - фотка знешнасць. не ісключытельна, так што \1\s[0] будзе зменіць фотка знешнасць кіро да первая фотка знешнасць сакура.
\b - змяніць поле с текстом. \b2 будзе зваць вялікае поле с текстом.
\![set,autoscroll,disable] - выключая авто-пакрутка поле с текстом. (ставіць,автопакрутка,выключіць).
SHIORI3FW.Eventid - переменная SHIORI. назва функцыя, які толькі што прайшла.
> ряд if SHIORI3FW.Eventid == "OnMouseDoubleClick"; SakuraMenuGreetings значыць "калі апошная функцыя была OnMouseDoubleClick, то запускай функціі SakuraMenuGreetings". (Які не мае мадыфікатар 'all', так што будзе на случайны выбар.)
\n - новы ряд. ёсць і \n[half] для палавіна новы ряд. (half - палавіна, палова).
\_q - пачатка хуткы раздзел. Значыць, што текст между первы \_q і другы \_q будзе паказаны на поле с текстом адразу.
\![*] - значок выбар. таксама можна быць напісана як %*.
\q[Настроек,OnFunkcia] - выбар ў меню. перад , - назва, а пасля , - функцыя. Толькі функціі, які пачынаюць з On можна быць напісана там.

Дарэчы - ряд if LastTalk != ""; " \![*]\q[паўтары гэта,OnLastTalk]" значыць "калі LastTalk не пустая нітка, то дадайце гэтая нітка да текст". OnLastTalk, як будзеш бачыць, проста запускае LastTalk як функцыя.

Спадзяюся, што цяпер крыху разумееш меню! можаш дадаць любыя выбарі да любыя функціі. меню ў меню ў меню... (калі ласка не дадайце занадта.)

Далей ў файл OnLastTalk (яна простая):

    OnLastTalk {
    LastTalk
    }

Яна проста запускае LastTalk (што будзе ніткі апошні рэч ад OnAiTalk, што укаґака казала.)

наступныя два рэчы, OnTalkRateMenu і OnTalkRateChange, можа выглядзець складанныя, але яны сапраўды вельмі простыя.
OnTalkRateMenu аддае настройкі для змена час разгавора:

    OnTalkRateMenu : all {
     _talkrate = "Выкл"
     if aitalkinterval == 30; _talkrate = "30 секундов"
     elseif aitalkinterval == 60; _talkrate = "1 хвілін"
     elseif aitalkinterval == 180; _talkrate = "3 хвіліны"
     elseif aitalkinterval == 300; _talkrate = "5 хвілін"
     elseif aitalkinterval == 600; _talkrate = "10 хвілін"
     "\0\s[0]\b2\![set,autoscroll,disable]\_q"
     "час разгаворы: %(_talkrate)\n\n"
     "\![*]\q[Выкл,OnTalkRateChange,0]\n"
     "\![*]\q[30 секундов,OnTalkRateChange,30]\n"
     "\![*]\q[1 хвілін,OnTalkRateChange,60]\n"
     "\![*]\q[3 хвіліны,OnTalkRateChange,180]\n"
     "\![*]\q[5 хвілін,OnTalkRateChange,300]\n"
     "\![*]\q[10 хвілін,OnTalkRateChange,600]\n"
     "\n"
     "\![*]\q[назад (у меню),OnSakuraMenu]  \![*]\q[Гэта ўсё,пустой]"
    }

_пераменная - калі ставіш _ перад пераменная, гэта значыць, што яна часовая перамення. Так казаць, пераменная, які пачынае з _ будзе толькі унутры пару скобкі, дзе ўпершыню напісаны.
> унутры тех скобкі а таксама {скобкі {между скобкі}}.
elseif - калі першы if няправільна, то праверь, калі наступны элемент ў спіске правільна. змяшення else і if. (то, калі).
_talkrate - часовая пераменная час разгаворы. нітка.
aitalkinterval - пераменная час разгаворы. Чісла ў секунды.
%(_пераменная) - пераменная ў ніткы. без ціфра працент і скобкі, назва пераменная будзе паказана ў поле с текстам, а не кантент.

а OnTalkRateChange зменіць час разгаворы:

    OnTalkRateChange {
     aitalkinterval = TOINT(reference0)
    }

TOINT - зменіць нітка номеры да чісел.
reference0 - нітка первы рэч пасля назва функцыя ў настроек выбар. можаш аддаць любое чісел reference-і, а яны будуць чіслены як reference0, reference1, reference2, і.г.д. Тут ў нас проста адна референція.
> іншы функціі ад SHIORI і SSP маюць сваіх референціі. (Паглядзі: Ukadoc, вікі AYAYA.)

а гэта ўсё! Як будзеш ўбачыць ў kero_menu.dic, можаш дадаць шмат разныя выбарі ў меню (і не толькі - выбарі працююць ў любая нітка) але яны сапраўды не трэба для поўная укаґака.

kero_menu.dic

kero_menu.dic там, дзе знаходзіць меню кіро. у асновы выгдядае як меню сакура, толькі без ўсё тыя настройкі:

    KeroMenuGreetings : nonoverlap {
     "\1Прывітанне."
    "\1Як ты?"
    }

    OnKeroMenu : all {
    "\1\b2\![set,autoscroll,disable]"

    if SHIORI3FW.Eventid == "OnMouseDoubleClick"; KeroMenuGreetings

    "\n\n\_q"

    //"\![*]\q[якім-то настроек меню,OnЯкімМеню]\n\n"

    "\![*]\q[Гэта ўсё,пустой]"
    }

не буду размаўдяць пра ўсё гэта зноў, але калі хочаш, можаш зменіць выбар ў каментар (і удалыць // каб паказаць яго ў меню):

    "\![*]\q[Глядзець на спісок маражанае,OnЯкімМеню]\n\n"

(або "%*\__q[OnЯкімМеню]Глядзець на спісок маражанае\__q\n\n". я звычайна пішу сваі выбарі так.)

Па змаўчанне, функція OnЯкімМеню ў блок-каментар, а выглядае так:

    /*
    OnЯкімМеню : all {
     "\1якім-то іншы меню."
     "\n\n\_q"

     "\![*]\q[назад (у меню),OnKeroMenu]\n"
     "\![*]\q[Гэта ўсё,пустой]"
    }
    */

блок-каментары пачынаюць з /* а заканчываюць з */. яны можа быць праз некалькі рядов, а не толькі адзін, як з //-каментары. каб карыстаць функцію, проста удаляй /* і */!

І вось, памятаеш тая змена выбар? Зараз, можам зменіць гэты меню быць такім:

    OnЯкімМеню : all {
    "\1\_q"
    "Маражанае дня: няма\n"
    "цены: 5₽ за ўсё\n"
    "Шакаладны | Мятны | Ванільны"
    "\n\n"
    "\![*]\q[Назад (ў меню),OnKeroMenu]\n"
    "\![*]\q[Гэта ўсё,пустой]"
    "\_q"
    }

а две меню зараз будзе выглядзець так, як паказаны ў гэтыя фоткі:

вядома, ты напэўна не хочаш спісок маражанае ў сваю укаґаку. Мабыць нават не хочаш меню для кіро! Ў гэтым выпадке, удаляй функція што не хочаш, або удаляй целы файл. Я проста хачу даць цябе ідея пра то, што можаш зоабіць з укаґаку.

\q[] супраць \__q[]\__q: якая разніца?

\q[] і \__q[]\__q абодвае тегы для выбарі, але ёсць неколькі рэчы, дзе адразнываюць.

анатамыя \q:

    "\q[Назва Выбар,OnFunkcia,Reference0,jašće adzin referencia,a jašče,i hetak dalej]"

анатамыя \__q:

    "\__q[OnFunkcia,referencii,ne chaču ich znoŭ napisac,ale razumeeš idea]Назва Выбар\__q"

ў напісанне код, гэта твой выбар, які тег карыстацца. вось што трэба ведаць пра паказанне ў поле с текстом:
\q - не ездзіць праз ряд дзе сядзе. Текст-к-реч чытае назва функція, а не назва выбар.

\__q - едзе праз ряд, дзе сядзе. Текст-к-реч чытае назва выбар.

ад точкай зренне даступнасць, \__q, па моему, проста лепше, таму і яму карыстаю. Але мабыць для табе \q лепше напісаць - я не ведаю! так што карыстай тег, які табе больш падабаецца.

Ёсць яшчэ два файлі, на якім можам паглядзець: other.dic і meta.dic.

meta.dic і other.dic
meta.dic

Ў meta.dic ёсць некаторыя функціі, што дапаможа мець. калі чесна, акрамя пераклад, нічога там не трэба зрабіць. як ўсё астатнае, калі штосці не хочаш, можаш яму удаліць.

other.dic

астатнае функціі. некаторыя тут, напеўна, параю не удаляць.

первая функція тут - OnTranslate:

    OnTranslate {
    _talk = reference0

    if reference1 == "" && reference2 == "" {
    _talk = EVAL('"' + REPLACE(_talk,'"','""') + '"')

    TOSTR(_talk)
    }

Па каментары Ponapalt:
гэта то, што дазваляе %(убудаваныя_элементы) працаваць у ўвод скріпта.
этап if reference1 == "" && reference2 == "" {} значыць:
> Калі гэта ад ўвод скріпта [то,]
> передай ўвод скріпта : няма падзея (ref2) , няма спеціальны сцяг (ref1)

...а калі хочаш дадаць штосці да OnTranslate (як змена текста або штосці падобнае), паставіць гэта ў месца перад ряд TOSTR(_talk)

(паведаць далей: Ukadoc)

OnAnchorSelect толькі там, каб дазваляць спасылкаванне веб-сайті як якары.
(выглядае так:)

    OnAnchorSelect {
    if "http://" _in_ reference0 || "https://" _in_ reference0; "\j[""%(reference0)""]"
    }

_in_ - знайсці гэтая нітка ў пераменная. будзе знайсці нітка і ў сярэдзіны слоў.
|| - або. трэба напісаць поўнае выраженне.
\j - теґ якар.

(паведаць далей: Ukadoc)

Гарачыя клавішчы:

    OnKeyPress {
     if reference0 == "f1"; "\![open,readme]"
     elseif reference0 == "t"; OnAiTalk
     elseif reference0 == "r"; OnLastTalk
    }

OnSurfaceRestore прайдзе прыменра 30 секундов пасля канцы скріпта. Яно вярніць знешнасць да змаўчанне.

    OnSurfaceRestore {
     "\1\s[10]\0\s[0]"
    }

OnWindowStateRestore падобны, але запускае калі вярніць укаґаку з іконкы. Па змаўчанне знешнасць будзе \0\s[0]\1\s[10], але часам гэта не хочам.

    OnWindowStateRestore {
    "\1\s[10]\0\s[0]"
    }

On_homeurl - URL абнаўленне. ў шаблон простота ўжо крыху пра гэта, так што не буду размаўляць пра яго сам.

тады цікавы рэч - спасыклі правой кнопкай мыші! яны дзве самыя верхныя выбары ў меню правай кнопкай, а як ўсё, функціі. Як ты бачыш, ў гэты шаблон яны проста спасылкі да дзесці, але можаш дадаць што угодна там. (так як нейкі меню! :0 )

первая фунцыя - FormatLinks - для фарматавання спасылкі. Наступныя - On_sakura.reccomendsites і On_kero.reccomendsites. яны выглядаюць так:

    On_sakura.reccomendsites {
     FormatLinks(reccomendsites_sakura)
    }

тот ряд значыць, што запускае функція FormatLinks с масіў reccomendsites_sakura як референція.

масіў reccomendsites_sakura будзе так:

    reccomendsites_sakura : array {
     "назва спасылкы" ; "https://example.com"
    }

: array - мадіфікатар функціі. значыць, што будзе як масіў данных.

каб дадаць больш спасылкі, проста скапіраваць фармат а зменіць назва а спасыдку ў ніткі!

On_sakura.portalsites (і portalsites_sakura) - тыя самыя рэчы, але для другая кнопка ў меню.

Тут не буду размаўляць пра займеннікі - ёсць прымер ў шаблон простота (расейская версія), калі сапраўды хочаш ведаць.
(Я пакуль што проста карыстаю ты + яны/-лі.)

апошны рэч ў файл - OnNotifyUserInfo. гэта там, дзе уведаем назва, дзень нараджэння, і ґендар карыстальніка.

    OnNotifyUserInfo : void {
     SHIORI3FW.UserName = reference[0]
     нік = reference[0]
     SHIORI3FW.UserNameFull = reference[1]
     SHIORI3FW.UserBirthday = SPLIT(reference[2],',',3)
     for _i = 0 ; _i < 3 ; _i++ {
      SHIORI3FW.UserBirthday[_i] = TOINT(SHIORI3FW.UserBirthday[_i])
     }
     SHIORI3FW.UserSex = reference[3]
    }

: void - мадыфікатар функція. Гэта значыць, што функуія нічога не будзе вярніць. (Як ніткі і.г.д.)

SHIORI3FW.UserName - назва карыстальнік ў настройкі SSP.

нік - пераменная для назва карыстальнік. легче напісаць, чым "%(SHIORI3FW.UserName)" ;P

SHIORI3FW.UserNameFull - поўнае назва карыстальніка.

SHIORI3FW.UserBirthday - дзень нарадження карыстальніка. нітка, так што трэба меняць яе крыху.

SHIORI3FW.UserSex - ґендар карыстальніка ў настройкі SSP. (муж, жена, і ніякы.)

ў Zichqec ёсць добры дапаможнік пра цыклі тут.

а гэта ўсё-ўсё, што трэба ведаць! ідзі і зрабіце сваю укаґаку! калі штосці яшчэ не разумееш, ну, гэта быў напісан для nanowrimo а я праграміст, не тлумачыцель. прабачце... але паглядзіце на Yaya fundamentals, вікі ukagaka dream team, a ukadoc а я уверен, што яксці будеш разумець :) ўдачы!!!

Апошная заметка

Хочаш дапаможа ў реальнім часу? Сустракай нас на діскорд UDT! Я сам буду там па назву (smoky) кошкаааааа.
Гэты гайд быў напісан не са сучасная версія Simplicity Template, так што некаторыя рэчы магуць быць разныя. Але не занадта!

More from the Dev

Credit: 98.css from jdan on github