πŸ’Ύ Archived View for spline-online.ru β€Ί instead β€Ί stead3.gmi captured on 2024-12-17 at 09:59:27. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-05-26)

-=-=-=-=-=-=-

Stead3. ДокумСнтация

ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния

Код ΠΈΠ³Ρ€ ΠΏΠΎΠ΄ INSTEAD ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π½Π° языкС Lua (5.1), поэтому, Π·Π½Π°Π½ΠΈΠ΅ этого языка ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, хотя ΠΈ Π½Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π―Π΄Ρ€ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ написано Π½Π° lua, поэтому Π·Π½Π°Π½ΠΈΠ΅ Lua ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ для ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Π½ΠΎΠ³ΠΎ понимания ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΈ условии, Ссли Π²Π°ΠΌ интСрСсно этим Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ.

Π—Π° врСмя своСго развития, INSTEAD ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» мноТСство Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρ‹ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΆΠ°Π½Ρ€ΠΎΠ² (ΠΎΡ‚ Π°Ρ€ΠΊΠ°Π΄, Π΄ΠΎ ΠΈΠ³Ρ€ с тСкстовым Π²Π²ΠΎΠ΄ΠΎΠΌ). А Ρ‚Π°ΠΊΠΆΠ΅, Π² INSTEAD ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρ‹, написанныС Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π²ΠΈΠΆΠΊΠ°Ρ…, Π½ΠΎ основой INSTEAD остаСтся ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ядро, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½Π° созданиС тСкстографичСских ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‡Π΅ΡΠΊΠΈΡ… ΠΈΠ³Ρ€. Π’ Π΄Π°Π½Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ описана ΠΈΠΌΠ΅Π½Π½ΠΎ эта базовая Ρ‡Π°ΡΡ‚ΡŒ, ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅... НачнитС своС ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ INSTEAD с написания простой ΠΈΠ³Ρ€Ρ‹!

Π’ Ρ„Π΅Π²Ρ€Π°Π»Π΅ 2017 Π³ΠΎΠ΄Π°, послС 8 Π»Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, INSTEAD (вСрсия 3.0) Π²Ρ‹ΡˆΠ΅Π» с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π½ΠΎΠ²ΠΎΠ³ΠΎ ядра STEAD3. Π‘Ρ‚Π°Ρ€ΠΎΠ΅ ядро ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ STEAD2. INSTEAD ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ³Ρ€ написанных ΠΊΠ°ΠΊ Π½Π° STEAD2, Ρ‚Π°ΠΊ ΠΈ Π½Π° STEAD3. Π­Ρ‚ΠΎ руководство описываСт STEAD3.

Если Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ вопросы, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ сайт INSTEAD:

[https://instead-hub.github.io]

Или ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‡Π°Ρ‚Ρƒ Π½Π° gitter:

[https://gitter.im/instead-hub/instead]

https://instead-hub.github.io

https://gitter.im/instead-hub/instead

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ создания

Когда ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ "тСкстовоС ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅" Ρƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° людСй Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Π­Ρ‚ΠΎ Π»ΠΈΠ±ΠΎ тСкст с ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ дСйствий, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

,----

| Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄ собой стол. На столС Π»Π΅ΠΆΠΈΡ‚ яблоко. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?

|

| 1) Π’Π·ΡΡ‚ΡŒ яблоко

| 2) ΠžΡ‚ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ стола

`----

Или, Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ€Π΅ΠΆΠ΅, это классичСскиС ΠΈΠ³Ρ€Ρ‹ с тСкстовым Π²Π²ΠΎΠ΄ΠΎΠΌ, Π³Π΄Π΅ для управлСния ΠΈΠ³Ρ€ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ дСйствия с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

,----

| Π’Ρ‹ Π½Π° ΠΊΡƒΡ…Π½Π΅. Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ стол.

| > ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ стол.

| На столС Π΅ΡΡ‚ΡŒ яблоко.

`----

Π£ ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π΅ΡΡ‚ΡŒ свои прСимущСства ΠΈ нСдостатки.

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‚ΠΎ ΠΎΠ½ Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ ΠΆΠ°Π½Ρ€Ρƒ ΠΊΠ½ΠΈΠ³-ΠΈΠ³Ρ€ ΠΈ ΡƒΠ΄ΠΎΠ±Π΅Π½ большС для Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π½Ρ‹Ρ… тСкстов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ _события_, происходящиС с Π³Π»Π°Π²Π½Ρ‹ΠΌ Π³Π΅Ρ€ΠΎΠ΅ΠΌ, ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½ для создания классичСских квСстов, Π³Π΄Π΅ Π³Π»Π°Π²Π½Ρ‹ΠΉ Π³Π΅Ρ€ΠΎΠΉ исслСдуСт _смодСлированный_ Π² ΠΈΠ³Ρ€Π΅ _ΠΌΠΈΡ€_, свободно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡΡΡŒ ΠΏΠΎ Π½Π΅ΠΌΡƒ ΠΈ взаимодСйствуя с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ этого ΠΌΠΈΡ€Π°.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠΈΡ€, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€Π° ΠΈΠ³Ρ€Ρ‹, ΠΈ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°. ОсобСнно, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с русским языком.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ INSTEAD Π±Ρ‹Π» создан для написания Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ³Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ прСимущСства ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ², ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡ… нСдостатков.

ΠœΠΈΡ€ ΠΈΠ³Ρ€Ρ‹ Π½Π° INSTEAD модСлируСтся ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΈΠ³Ρ€Π΅ Π΅ΡΡ‚ΡŒ мСста (сцСны ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹) ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ΅Ρ‰Π°Ρ‚ΡŒ Π³Π»Π°Π²Π½Ρ‹ΠΉ Π³Π΅Ρ€ΠΎΠΉ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ взаимодСйствуСт (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΆΠΈΠ²Ρ‹Ρ… пСрсонаТСй). Π˜Π³Ρ€ΠΎΠΊ свободно ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ ΠΌΠΈΡ€ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, дСйствия с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π½Π΅ прописаны Π² Π²ΠΈΠ΄Π΅ явных ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню, Π° скорСС Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ классичСскиС графичСскиС квСсты Π² стилС 90-Ρ….

На самом Π΄Π΅Π»Π΅, Π² INSTEAD Π΅ΡΡ‚ΡŒ мноТСство Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ процСсс ΠΈΠ³Ρ€Ρ‹ максимально Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ Π½Π΅ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ "тСкстовыС квСсты". Π­Ρ‚ΠΎ подтвСрТдаСтся Π² Ρ‚ΠΎΠΌ числС ΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° Π΄Π²ΠΈΠΆΠΊΠ΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½ΠΎ мноТСство Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€, интСрСс ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΠΈ тСкстовых ΠΈΠ³Ρ€ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²Ρ‹Ρ…, Π½ΠΎ ΠΈ люди Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΆΠ°Π½Ρ€ΠΎΠΌ.

ΠŸΠ΅Ρ€Π΅Π΄ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ руководства, я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² классичСскиС ΠΈΠ³Ρ€Ρ‹ INSTEAD, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎ Ρ‡Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ€Π°Π· Π²Ρ‹ здСсь, Ρ‚ΠΎ Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅ Π²Ρ‹ ΡƒΠΆΠ΅ сдСлали это.

ΠŸΡ€Π°Π²Π΄Π°, Π½Π΅ стоит ΠΏΠΎΠΊΠ° ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ этих ΠΈΠ³Ρ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ старыС ΠΈΠ³Ρ€Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ часто написаны Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ, с использованиСм ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… конструкций. ВСкущая вСрсия INSTEAD позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Π΅Π΅, ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ понятнСС. Об этом ΠΈ рассказываСтся Π² Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅.

Если вас интСрСсуСт история создания Π΄Π²ΠΈΠΆΠΊΠ°, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ всС Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΎΡΡŒ: [https://instead-hub.github.io/article/2010-05-09-history/]

https://instead-hub.github.io/article/2010-05-09-history/

Как выглядит классичСская INSTEAD ΠΈΠ³Ρ€Π°

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ выглядит классичСская INSTEAD ΠΈΠ³Ρ€Π°?

_Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ_ ΠΈΠ³Ρ€Ρ‹ содСрТит ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ статичСской ΠΈ динамичСской части сцСны, Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ события ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ сцСны (Π² графичСском ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅) с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°ΠΌΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сцСны.

_ΠžΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ сцСны_ отобраТаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΏΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π΅ сцСны, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ явном осмотрС сцСны (Π² графичСском ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ -- _БтатичСская Ρ‡Π°ΡΡ‚ΡŒ сцСны_ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ статичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… сцСны (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, это Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΈ) ΠΈ отобраТаСтся всСгда. Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ написана Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ³Ρ€Ρ‹.

_ДинамичСская Ρ‡Π°ΡΡ‚ΡŒ сцСны_ составлСна ΠΈΠ· описаний ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² сцСны, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π° сцСнС. Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ гСнСрируСтся автоматичСски ΠΈ отобраТаСтся всСгда. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π² Π½Π΅ΠΉ прСдставлСны ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ своС мСстополоТСниС.

Π˜Π³Ρ€ΠΎΠΊΡƒ доступны ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, доступныС Π½Π° любой сцСнС -- _ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ_. Π˜Π³Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ инвСнтаря ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ инвСнтаря Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ сцСны ΠΈΠ»ΠΈ инвСнтаря.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ понятиС инвСнтаря являСтся условным. НапримСр, Π² "ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π΅" ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ "ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ", "ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ", "ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ" ΠΈ Ρ‚.Π΄.

_ДСйствиями_ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ:

Как ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ

Π˜Π³Ρ€Π° прСдставляСт ΠΈΠ· сСбя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ скрипт (тСкстовый Ρ„Π°ΠΉΠ») `main3.lua `. (ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° `main3.lua ` ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΈΠ³Ρ€Ρƒ Π½Π° STEAD3!) Π”Ρ€ΡƒΠ³ΠΈΠ΅ рСсурсы ΠΈΠ³Ρ€Ρ‹ (скрипты Π½Π° lua, Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ ΠΌΡƒΠ·Ρ‹ΠΊΠ°) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. ВсС ссылки Π½Π° рСсурсы Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° -- ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈΠ³Ρ€Ρ‹.

Π’ Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π° `main3.lua ` ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, состоящий ΠΈΠ· Ρ‚Π΅Π³ΠΎΠ² (строк ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°). Π’Π΅Π³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с символов: Π΄Π²Π° минуса.

--

Π”Π²Π° минуса это ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Lua. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Π³ΠΈ.

Π’Π΅Π³ `$Name: ` содСрТит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ‚Π΅Π³Π°:

-- $Name: Бамая интСрСсная ΠΈΠ³Ρ€Π°!$

Π—Π°Ρ‚Π΅ΠΌ слСдуСт (ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) Π·Π°Π΄Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΠ³Ρ€Ρ‹:

-- $Version: 0.5$

И ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ авторство:

-- $Author: Анонимный Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΡŒ тСкстовых ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ$

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΠ³Ρ€Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π΅Π³ΠΎΠΌ `$Info: `

-- $Info: Π­Ρ‚ΠΎ Ρ€Π΅ΠΌΠ΅ΠΉΠΊ старой ΠΈΠ³Ρ€Ρ‹\nΠ‘ ZX spectrum$

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° `\n ` Π² `Info `, это станСт ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ строки, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ "Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ" Π² INSTEAD.

Если Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΈΠ³Ρ€Ρƒ Π² Windows, Ρ‚ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ваш Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ UTF-8 _Π±Π΅Π· BOM_. ИмСнно эту ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ написании ΠΈΠ³Ρ€Ρ‹!

Π”Π°Π»Π΅Π΅, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΈΠ³Ρ€Π΅. О модулях Π±ΡƒΠ΄Π΅Ρ‚ рассказано ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

require "fmt" -- Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ форматирования
fmt.para = true -- Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ΠΎΠ² (отступы)

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ стоит ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: `game.act `, `game.use `, `game.inv `, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ рассказано Π½ΠΈΠΆΠ΅.

game.act = 'НС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.';
game.use = 'Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.';
game.inv = 'Π—Π°Ρ‡Π΅ΠΌ ΠΌΠ½Π΅ это?';

_Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ_ ΠΈΠ³Ρ€Ρ‹ слСдуСт ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `init() `, которая вызываСтся Π΄Π²ΠΈΠΆΠΊΠΎΠΌ Π² самом Π½Π°Ρ‡Π°Π»Π΅. Π’ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состояниС ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ³Ρ€Ρ‹, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия, Π½ΡƒΠΆΠ½Ρ‹Π΅ для ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ настройки ΠΌΠΈΡ€Π° ΠΈΠ³Ρ€Ρ‹. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, функция `init() ` ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Π°.

function init() -- Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ Π½ΠΎΠΆ ΠΈ Π±ΡƒΠΌΠ°Π³Ρƒ
        take 'Π½ΠΎΠΆ'
        take 'Π±ΡƒΠΌΠ°Π³Π°'
end

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΈΠ³Ρ€Π° ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°, выполняСтся запуск ΠΈΠ³Ρ€Ρ‹. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `start() `, которая запускаСтся нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ запуском ΠΈΠ³Ρ€Ρ‹. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ Π² случаС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сохранСнной ΠΈΠ³Ρ€Ρ‹, `start() ` вызовСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ сохранСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΎ,

function start(load) -- Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ состояниС?
        if load then
                dprint "Π­Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° состояния."
        else
                dprint "Π­Ρ‚ΠΎ старт ΠΈΠ³Ρ€Ρ‹."
        end
        -- Π½Π°ΠΌ сСйчас Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ
end

ГрафичСский ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡ‰Π΅Ρ‚ доступныС ΠΈΠ³Ρ€Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ games. Unix-вСрсия ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΊΡ€ΠΎΠΌΠ΅ этого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° просматриваСт Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ³Ρ€Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ `~/.instead/games `. Windows-вСрсия: `Documents and Settings/USER/Local Settings/Application Data/instead/games `. Π’ Windows- ΠΈ standalone-Unix-вСрсии ΠΈΠ³Ρ€Ρ‹ ищутся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ `./appdata/games `, Ссли ΠΎΠ½ сущСствуСт.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сборках INSTEAD (Π² Windows, Π² Linux Ссли ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ собран с gtk ΠΈ Π΄Ρ€.) ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ ΠΈΠ· мСню "Π’Ρ‹Π±ΠΎΡ€ ΠΈΠ³Ρ€Ρ‹". Π›ΠΈΠ±ΠΎ, Π½Π°ΠΆΠ°Ρ‚ΡŒ `f4 `. Если Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ с ΠΈΠ³Ρ€Π°ΠΌΠΈ присутствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° ΠΈΠ³Ρ€Π°, INSTEAD запустит Π΅Π΅ автоматичСски, это ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ свою ΠΈΠ³Ρ€Ρƒ вмСстС с Π΄Π²ΠΈΠΆΠΊΠΎΠΌ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΊΠ»Π°Π΄Π΅Ρ‚Π΅ ΠΈΠ³Ρ€Ρƒ Π² свой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ запускаСтС INSTEAD.

_*Π’Π°ΠΆΠ½ΠΎ!*_
ΠŸΡ€ΠΈ написании ΠΈΠ³Ρ€Ρ‹, Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ отступы для оформлСния ΠΊΠΎΠ΄Π° ΠΈΠ³Ρ€Ρ‹, ΠΊΠ°ΠΊ это сдСлано Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ руководства, этим самым Π²Ρ‹ сократитС количСство ошибок ΠΈ сдСлаСтС свой ΠΊΠΎΠ΄ нагляднСй!

НиТС приводится ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ шаблон для вашСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹:

-- $Name: Моя пСрвая ΠΈΠ³Ρ€Π°$
-- $Version: 0.1$
-- $Author: Анонимный Π°Π²Ρ‚ΠΎΡ€$

require "fmt"
fmt.para = true

game.act = 'Π“ΠΌ...';
game.use = 'НС сработаСт.';
game.inv = 'Π—Π°Ρ‡Π΅ΠΌ это ΠΌΠ½Π΅?';

function init()
-- инициализация, Ссли ΠΎΠ½Π° Π½ΡƒΠΆΠ½Π°
endc;

ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

Π’ΠΎ врСмя ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности вашСй ΠΈΠ³Ρ€Ρ‹) ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ INSTEAD Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ `-debug `, Ρ‚ΠΎΠ³Π΄Π° Π² случаС ошибок Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π±ΠΎΠ»Π΅Π΅ подробная информация ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Π² Π²ΠΈΠ΄Π΅ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `-debug ` ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π² ярлыкС (Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² Windows), Π° для Π΄Ρ€ΡƒΠ³ΠΈΡ… систСм, я Π΄ΡƒΠΌΠ°ΡŽ Π²Ρ‹ ΠΈ Ρ‚Π°ΠΊ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ `-debug ` автоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ клавиш `ctrl-d ` ΠΈΠ»ΠΈ `f7 `. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΈ явно ΡƒΠΊΠ°Π·Π°Π²:

require "dbg"

Π’ ΠΊΠΎΠ΄Π΅ вашСй ΠΈΠ³Ρ€Ρ‹.

ΠŸΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΈΠ³Ρ€Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ часто ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΠ³Ρ€Ρƒ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ состояниС ΠΈΠ³Ρ€Ρ‹. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сохранСний Ρ‡Π΅Ρ€Π΅Π· мСню (ΠΈΠ»ΠΈ ΠΏΠΎ клавишам `f2~/~f3 `), ΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ быстрым сохранСниСм/Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ (клавиши `f8~/~f9 `).

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ `-debug ` Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ клавишами `alt-r `. Π’ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с `f8~/~f9 ` это Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстро ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ измСнСния Π² ΠΈΠ³Ρ€Π΅ послС Π΅Π΅ ΠΏΡ€Π°Π²ΠΊΠΈ.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Если Π²Ρ‹ просто пСрСзапуститС INSTEAD, Ρ‚ΠΎ скорСС всСго ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ староС состояниС ΠΈΠ³Ρ€Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ автосохранСния! Π›ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ эту настройку Π² мСню (автосохранСниС), Π»ΠΈΠ±ΠΎ явно пСрСзапускайтС ΠΈΠ³Ρ€Ρƒ послС ΠΏΡ€Π°Π²ΠΎΠΊ. ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‡Π΅Ρ€Π΅Π· мСню (Π½Π°Ρ‡Π°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ) ΠΈΠ»ΠΈ `alt-r ` Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ `-debug ` ΠΊΠ°ΠΊ это описано Π²Ρ‹ΡˆΠ΅.

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ `-debug ` Windows-вСрсия INSTEAD создаСт консольноС ΠΎΠΊΠ½ΠΎ (Π² Unix вСрсии, Ссли Π²Ρ‹ запускаСтС INSTEAD ΠΈΠ· консоли, Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π² Π½Π΅Π΅) Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π²Ρ‹Π²ΠΎΠ΄ ошибок. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `print() ` Π²Ρ‹ смоТСтС ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ свои сообщСния с ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ. НапримСр:

act = function(s)
        print ("Act is here! ");
        ...
end;

НС ΠΏΡƒΠ³Π°ΠΉΡ‚Π΅ΡΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ всС руководство ΠΈ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ свою ΠΈΠ³Ρ€Ρƒ, Π²Ρ‹, скорСС всСго, взглянСтС Π½Π° этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с большим Π²ΠΎΠΎΠ΄ΡƒΡˆΠ΅Π²Π»Π΅Π½ΠΈΠ΅ΠΌ.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `dprint() `, которая посылаСт Π²Ρ‹Π²ΠΎΠ΄ Π² ΠΎΠΊΠ½ΠΎ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°, ΠΈ Π²Ρ‹ смоТСтС ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

act = function(s)
        dprint ("Act is here! ");
        ...
end;

Π’ΠΎ врСмя ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ сохранСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат состояниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ³Ρ€Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Ρ„Π°ΠΉΠ»Ρ‹ сохранСний, создайтС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ `saves ` Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с вашСй ΠΈΠ³Ρ€ΠΎΠΉ (Π² Ρ‚ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π³Π΄Π΅ содСрТится `main3.lua `) ΠΈ ΠΈΠ³Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π² saves. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π΅Π½ для пСрСноса ΠΈΠ³Ρ€Ρ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (особСнно, Ссли Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Unix систСмами) Π²Π°ΠΌ понравится идСя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ синтаксиса Π²Π°ΡˆΠΈΡ… скриптов Ρ‡Π΅Ρ€Π΅Π· запуск компилятора `luac `. Π’ Windows это Ρ‚ΠΎΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ выполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ lua для Windows ([http://luabinaries.sourceforge.net])/ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ `luac52.exe `.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ синтаксис ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ INSTEAD, для этого Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ `-luac `:

sdl-instead -debug -luac <ΠΏΡƒΡΡ‚ΡŒ ΠΊ скрипту.lua>

http://luabinaries.sourceforge.net

Π‘Ρ†Π΅Π½Π°

_Π‘Ρ†Π΅Π½Π°_ (ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°) -- это Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΈΠ³Ρ€Ρ‹, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ³Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ сцСны ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ. НапримСр, сцСной ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится Π³Π΅Ρ€ΠΎΠΉ. Или участок лСса, доступный для наблюдСния.

Π’ любой ΠΈΠ³Ρ€Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ сцСна с ΠΈΠΌΠ΅Π½Π΅ΠΌ `main `. ИмСнно с Π½Π΅Π΅ начнСтся ΠΈ ваша ΠΈΠ³Ρ€Π°!

room {
        nam = 'main';
        disp = "Главная ΠΊΠΎΠΌΠ½Π°Ρ‚Π°";
        dsc = [[Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.]];
}

Π—Π°ΠΏΠΈΡΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΈ всС сущности Π² INSTEAD это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹) `main ` Ρ‚ΠΈΠΏΠ° `room ` (ΠΊΠΎΠΌΠ½Π°Ρ‚Π°). Атрибут ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `nam ` Ρ…Ρ€Π°Π½ΠΈΡ‚ имя ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ `main `, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ ΠΈΠ· ΠΊΠΎΠ΄Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ своС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя. Если Π²Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ сообщСниС ΠΎΠ± ошибкС.

Для обращСния ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ запись:

dprint("ΠžΠ±ΡŠΠ΅ΠΊΡ‚: ", _'main')

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ³Ρ€Ρ‹ Π΅ΡΡ‚ΡŒ _Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹_ ΠΈ _ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий_. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°: `nam ` ΠΈ `dsc `. Атрибуты Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ -- символом Ρ‚ΠΎΡ‡ΠΊΠ° с запятой `; `).

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ тСкстовыми строками, функциями-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΈ Π±ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями. Однако, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `nam ` всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ тСкстовой строкой, Ссли ΠΎΠ½ Π·Π°Π΄Π°Π½.

На самом Π΄Π΅Π»Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ имя ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

room {
        disp = "Главная ΠΊΠΎΠΌΠ½Π°Ρ‚Π°";
        dsc = [[Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.]];
}

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, Π΄Π²ΠΈΠΆΠΎΠΊ сам даст имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΈ это имя Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΊΠΈΠΌ числом. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ это число, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ явно Иногда ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ бСзымянныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΉ. ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ "бСзымянный", Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ - ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

myroom = room {
        disp = "Π§ΡƒΠ»Π°Π½";
        dsc = [[Π’Ρ‹ Π² Ρ‡ΡƒΠ»Π°Π½Π΅.]];
}

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ `myroom ` Π² Ρ‚Π°ΠΊΠΎΠΌ случаС становится синонимом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ссылкой Π½Π° сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚).

dprint("ΠžΠ±ΡŠΠ΅ΠΊΡ‚: ", myroom)

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ способа, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ±Π°. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈ имя ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-ссылку:

main_room = room {
        nam = 'main';
        disp = "Главная ΠΊΠΎΠΌΠ½Π°Ρ‚Π°";
        dsc = [[Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.]];
}

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ Π² любом случаС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-ссылки -- это просто способ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ доступ ΠΊ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, для нашСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ ΠΌΡ‹ обязаны ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `nam = 'main' `, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ main с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈ начнСтся нашС ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅!

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π΅ сцСны, Π² качСствС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° сцСны Π±ΡƒΠ΄Π΅Ρ‚ использован Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `disp `. На самом Π΄Π΅Π»Π΅, Ссли Π±Ρ‹ ΠΌΡ‹ Π΅Π³ΠΎ Π½Π΅ Π·Π°Π΄Π°Π»ΠΈ, Ρ‚ΠΎ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΌΡ‹ Π±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ `nam `. Но `nam ` Π½Π΅ всСгда ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ сцСны, особСнно Ссли это строка Π²Ρ€ΠΎΠ΄Π΅ `main `, ΠΈΠ»ΠΈ Ссли это числовой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ присвоил ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ автоматичСски.

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ понятный Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `title `. Если ΠΎΠ½ Π·Π°Π΄Π°Π½, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Π² качСствС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½. `title ` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ находится _Π²Π½ΡƒΡ‚Ρ€ΠΈ_ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹. Π’ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях (ΠΏΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² Π² эту ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ `disp ` ΠΈΠ»ΠΈ `nam `.

mroom = room {
        nam = 'main';
        title = 'Начало ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ';
        disp = "Главная ΠΊΠΎΠΌΠ½Π°Ρ‚Π°";
        dsc = [[Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.]];
}

Атрибут `dsc ` -- это описаниС сцСны, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выводится ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² сцСну ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ явном осмотрС сцСны. Π’ Π½Π΅ΠΌ Π½Π΅Ρ‚ описаний ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² сцСнС.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символ `, ` вмСсто `; ` для раздСлСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². НапримСр:

room {
        nam = 'main',
        disp = 'Главная ΠΊΠΎΠΌΠ½Π°Ρ‚Π°',
        dsc = 'Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.',
}

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ -- строковыС. Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записана Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…:

room {
        nam = 'main';
        disp = 'Главная ΠΊΠΎΠΌΠ½Π°Ρ‚Π°';
        dsc = "Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.";
}

Для Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… описаний ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ запись Π²ΠΈΠ΄Π°:

dsc = [[ ΠžΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ описаниС... ]];

ΠŸΡ€ΠΈ этом ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ строк ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ описания сцСны присутствовали Π°Π±Π·Π°Ρ†Ρ‹ -- ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ символ `^ `.

dsc = [[ ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Π±Π·Π°Ρ†. ^^
Π’Ρ‚ΠΎΡ€ΠΎΠΉ Абзац.^^

Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π°Π±Π·Π°Ρ†.^
На Π½ΠΎΠ²ΠΎΠΉ строкС.]];

Π― Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `[[ ΠΈ ]] ` для `dsc `.

Напомню Π΅Ρ‰Π΅ Ρ€Π°Π·, Ρ‡Ρ‚ΠΎ имя `nam ` ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ‚ΠΎ, ΠΊΠ°ΠΊ сцСна Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ для ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² Π²ΠΈΠ΄Π΅ надписи свСрху) ΠΌΠΎΠΆΠ½ΠΎ (ΠΈ, часто, Π½ΡƒΠΆΠ½ΠΎ!) Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ. Для этого ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ `disp ` ΠΈ `title `. `title ` Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ ΠΊΠΎΠΌΠ½Π°Ρ‚ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ `disp ` (Ссли ΠΎΠ½ Π΅ΡΡ‚ΡŒ).

Если `disp ` ΠΈ `title ` Π½Π΅ Π·Π°Π΄Π°Π½Ρ‹, Ρ‚ΠΎ считаСтся, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ равняСтся ΠΈΠΌΠ΅Π½ΠΈ.

`disp ` ΠΈ `title ` ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ `false `, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС, отобраТСния Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

_ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹_ -- это Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ сцСны, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ взаимодСйствуСт ΠΈΠ³Ρ€ΠΎΠΊ.

obj {
    nam = 'стол';
    dsc = 'Π’ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ стоит {стол}.';
    act = 'Π“ΠΌ... ΠŸΡ€ΠΎΡΡ‚ΠΎ стол...';
};

Имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `nam ` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ Π΅Π³ΠΎ Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ. Π₯отя, Π² нашСм случаС, стол вряд Π»ΠΈ Ρ‚ΡƒΠ΄Π° ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚. Если Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ `disp `, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ для Π΅Π³ΠΎ отобраТСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚. НапримСр:

obj {
    nam = 'стол';
    disp = 'ΡƒΠ³ΠΎΠ» стола';
    dsc = 'Π’ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ стоит {стол}.';
    tak = 'Π― взялся Π·Π° ΡƒΠ³ΠΎΠ» стола';
    inv = 'Π― Π΄Π΅Ρ€ΠΆΡƒΡΡŒ Π·Π° ΡƒΠ³ΠΎΠ» стола.';
};

ВсС-Ρ‚Π°ΠΊΠΈ стол ΠΏΠΎΠΏΠ°Π» ΠΊ Π½Π°ΠΌ Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π΅, Ссли `disp ` Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ `false `.

`dsc ` -- описаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Оно Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π² динамичСской части сцСны, ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² сцСнС. Π€ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками отобраТаСтся Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ тСкста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ссылкой Π² ΠΎΠΊΠ½Π΅ INSTEAD. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² сцСнС ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‚ΠΎ всС описания выводятся ΠΎΠ΄Π½ΠΎ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»,

`act ` -- это ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся ΠΏΡ€ΠΈ дСйствии ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (дСйствиС Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сцСны, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ -- ΠΊΠ»ΠΈΠΊ ΠΌΡ‹ΡˆΠΊΠΎΠΉ ΠΏΠΎ ссылкС). Π•Π³ΠΎ основная Π·Π°Π΄Π°Ρ‡Π° -- Π²Ρ‹Π²ΠΎΠ΄ (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅) строки тСкста, которая станСт Ρ‡Π°ΡΡ‚ΡŒΡŽ событий сцСны, ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°.

ДобавляСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² сцСну

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² сцСну ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, сущСствуСт нСсколько ΠΏΡƒΡ‚Π΅ΠΉ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡ€ΠΈ создании ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ список `obj `, состоящий ΠΈΠ· ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

obj { -- ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
        nam = 'ящик';
        dsc = [[На ΠΏΠΎΠ»Ρƒ я Π²ΠΈΠΆΡƒ {ящик}.]];
        act = [[ВяТСлый!]];
}

room {
        nam = 'main';
        disp = 'Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°';
        dsc = [[Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.]];
        obj = { 'ящик' };
};

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ сцСны ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ "ящик" Π² динамичСской части.

ВмСсто ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-ссылку, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π·Π°Ρ€Π°Π½Π΅Π΅:

apple = obj { -- ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½ΠΎ Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ
        dsc = [[Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ {яблоко}.]];
        act = [[ΠšΡ€Π°ΡΠ½ΠΎΠ΅!!]];
}

room {
    nam = 'main';
        disp = 'Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°';
        dsc = [[Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.]];
        obj = { apple };
};

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ записи являСтся конструкция `with `:

room {
        nam = 'main';
        disp = 'Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°';
        dsc = [[Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.]];
}:with {
    'ящик',
       }

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ `with ` позволяСт ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ лишнСго уровня влоТСнности Π² ΠΊΠΎΠ΄Π΅ ΠΈΠ³Ρ€Ρ‹.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ прямо Π²Π½ΡƒΡ‚Ρ€ΠΈ `obj ` ΠΈΠ»ΠΈ `with `, описывая ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:

room {
        nam = 'main';
        disp = 'Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°';
        dsc = [[Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.]];
}:with {
        obj {
                nam = 'ящик';
                dsc = [[На ΠΏΠΎΠ»Ρƒ я Π²ΠΈΠΆΡƒ {ящик}.]];
                act = [[ВяТСлый!]];
        }
       };

Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² - Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΉ. Но Π² Ρ‚Π°ΠΊΠΎΠΌ случаС, Π²Ρ‹ Π½Π΅ смоТСтС ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-ссылкой. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, для Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΉ это ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Если Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², раздСляйтС ΠΈΡ… ссылки запятыми, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

obj = { 'ящик', apple };

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ строк для наглядности, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

obj = {
    'tabl',
    'apple',
    'knife',
};

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ размСщСния ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ помСстят ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹. Он Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π² дальнСйшСм.

Π”Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΈ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрСнСсСны ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ сцСны Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ (ΠΈΠ»ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ), ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ имя ΠΈ/ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-ссылку. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ.

Но Π½Π΅ΠΌΠ°Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ ΠΈ слуТат Π² качСствС Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΉ.

Π’Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Для создания Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹.

Один ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠ½Π°Ρ‚Π°Ρ…

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `Π΄Π΅Ρ€Π΅Π²ΠΎ ` ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈΡ… Π²Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹.

obj {
        nam = 'Π΄Π΅Ρ€Π΅Π²ΠΎ';
        dsc = [[Π’ΡƒΡ‚ стоит {Π΄Π΅Ρ€Π΅Π²ΠΎ}.]];
        act = [[ВсС Π΄Π΅Ρ€Π΅Π²ΡŒΡ выглядят ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ.]];
}

room {
        nam = 'ЛСс';
        obj = { 'Π΄Π΅Ρ€Π΅Π²ΠΎ' };
}

room {
        nam = 'Π£Π»ΠΈΡ†Π°';
        obj = { 'Π΄Π΅Ρ€Π΅Π²ΠΎ' };
}

ИспользованиС Ρ‚Π΅Π³ΠΎΠ² вмСсто ΠΈΠΌΠ΅Π½

Если Π²Π°ΠΌ Π½Π΅ нравится ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° для ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Π΅Π³ΠΈ. Π’Π΅Π³ΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ `tag ` ΠΈ всСгда Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символа `# `:

obj {
        tag = '#Ρ†Π²Π΅Ρ‚Ρ‹';
        dsc = [[Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ {Ρ†Π²Π΅Ρ‚Ρ‹}.]]
}

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, имя Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ сформировано автоматичСски, Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π²Ρ‹ смоТСтС ΠΏΠΎ Ρ‚Π΅Π³Ρƒ. ΠŸΡ€ΠΈ этом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅. НапримСр:

dprint(_'#Ρ†Π²Π΅Ρ‚Ρ‹') -- ΠΈΡ‰Π΅ΠΌ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Ρ‚Π΅Π³ΠΎΠΌ '#Ρ†Π²Π΅Ρ‚Ρ‹'

Π’Π΅Π³ΠΈ, это Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ‚ΠΎ смыслС, синоним Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½, поэтому сущСствуСт Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ запись создания ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° с Ρ‚Π΅Π³ΠΎΠΌ:

obj {
        nam = '#Ρ†Π²Π΅Ρ‚Ρ‹';
        dsc = [[Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ {Ρ†Π²Π΅Ρ‚Ρ‹}.]]
}

Если имя Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° начинаСтся с символа `# `, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚Π΅Π³ ΠΈ автоматичСски сгСнСрированноС числовоС имя.

ИспользованиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° сцСны decor

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ своС мСсто-ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΅ΡΡ‚ΡŒ смысл ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… Ρ‡Π°ΡΡ‚ΡŒΡŽ описания сцСны, Π° Π½Π΅ динамичСской области. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° сцСны `decor `. decor показываСтся всСгда ΠΈ Π΅Π³ΠΎ основная функция -- описаниС Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΉ сцСны.

room {
        nam = 'Π”ΠΎΠΌ';
        dsc = [[Π― Ρƒ сСбя Π΄ΠΎΠΌΠ°.]];
        decor = [[Π’ΡƒΡ‚ я Π²ΠΈΠΆΡƒ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсных Π²Π΅Ρ‰Π΅ΠΉ. НапримСр, Π½Π° {#стСна|стСнС}
        висит {#ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°|ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°}.]];
}: with {
        obj {
                nam = '#стСна';
                act = [[Π‘Ρ‚Π΅Π½Π° ΠΊΠ°ΠΊ стСна!]];
        };
        obj {
                nam = '#ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°';
                act = [[Π’Π°Π½-Π“ΠΎΠ³?]];
        }
        }

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ сразу нСсколько ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ²:

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС описанныС ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π² Π»ΡŽΠ±Ρ‹Ρ… пропорциях.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, связанныС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² сСбС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `obj ` (ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ `with `). ΠŸΡ€ΠΈ этом, ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², INSTEAD Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ списки ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Вакая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ просто для связывания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… описаний вмСстС. НапримСр, помСстим Π½Π° стол яблоко.

obj {
        nam = 'яблоко';
        dsc = [[На столС Π»Π΅ΠΆΠΈΡ‚ {яблоко}.]];
        act = 'Π’Π·ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈ?';
};

obj {
        nam = 'стол';
        dsc = [[Π’ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ стоит {стол}.]];
        act = 'Π“ΠΌ... ΠŸΡ€ΠΎΡΡ‚ΠΎ стол...';
        obj = { 'яблоко' };
};

room {
    nam = 'Π”ΠΎΠΌ';
        obj = { 'стол' };
}

ΠŸΡ€ΠΈ этом, Π² описании сцСны ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ описаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² `стол ` ΠΈ `яблоко `, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ `яблоко ` -- связанный со столом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `стол ` вслСд Π·Π° Π΅Π³ΠΎ `dsc ` Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ `dsc ` всСх Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π’Π°ΠΊΠΆΠ΅, слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ опСрируя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ `стол ` (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, пСрСмСщая Π΅Π³ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ) ΠΌΡ‹ автоматичСски Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π² Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ `яблоко `.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠ³ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ написан ΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

room {
        nam = 'Π”ΠΎΠΌ';
}:with {
        obj {
                nam = 'стол';
                dsc = [[Π’ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ стоит {стол}.]];
                act = 'Π“ΠΌ... ΠŸΡ€ΠΎΡΡ‚ΠΎ стол...';
        }: with {
                obj {
                        nam = 'яблоко';
                        dsc = [[На столС Π»Π΅ΠΆΠΈΡ‚ {яблоко}.]];
                        act = 'Π’Π·ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈ?';
                };
        }
       }

Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΡ‚ способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ для вас понятнСй.

Атрибуты ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ _функциями_. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

disp = function()
        p 'яблоко';
end

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄Π°Ρ‡Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‰Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ `disp = 'яблоко' `, Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ синтаксис записи Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Основная Π·Π°Π΄Π°Ρ‡Π° Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ -- это Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ строки ΠΈΠ»ΠΈ Π±ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ значСния. БСйчас ΠΌΡ‹ рассматриваСм Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ строки. Для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° строки Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ²Π½ΡƒΡŽ запись Π² Π²ΠΈΠ΄Π΅:

return "яблоко";

ΠŸΡ€ΠΈ этом Ρ…ΠΎΠ΄ выполнСния ΠΊΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСкращаСтся ΠΈ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²ΠΈΠΆΠΊΡƒ строку. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС "яблоко".

Π‘ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ способом Π²Ρ‹Π²ΠΎΠ΄Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Если `p ` / `pn ` / `pr ` вызываСтся с ΠΎΠ΄Π½ΠΈΠΌ тСкстовым ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, Ρ‚ΠΎ скобки ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ.
pn "НСт скобкам!"

ВсС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ тСкст Π² Π±ΡƒΡ„Π΅Ρ€ ΠΈ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π΅Π³ΠΎ Π΄Π²ΠΈΠΆΠΊΡƒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ постСпСнно Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Π·Π° счСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния `p~/~pn~/~pr `. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСкст, особСнно, Ссли это описаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π΄Π²ΠΈΠΆΠΎΠΊ сам расставляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ строк ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ для раздСлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ это ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ способом.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `.. ` ΠΈΠ»ΠΈ `, ` для склСйки строк. Π’ΠΎΠ³Π΄Π° `( ` ΠΈ `) ` ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹. НапримСр:

pn ("Π‘Ρ‚Ρ€ΠΎΠΊΠ° 1".." Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2");
pn ("Π‘Ρ‚Ρ€ΠΎΠΊΠ° 1", "Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2");
ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² событий состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°, Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π½Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ оформляСтС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `dsc `) Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° это Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ значСния, Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния ΠΈΠ³Ρ€Ρ‹! Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ обращаСтся ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ Π² Ρ‚Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‡Π΅Ρ‚ΠΊΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, ΠΈ Π½Π΅ связаны явно с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ процСссами!
_*Π’Π°ΠΆΠ½ΠΎ!*_
Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² являСтся Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΡ… Ρ‚ΠΎ событий Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Ρ†ΠΈΠΊΠ»ΠΎΠ² оТидания, ΠΈΠ»ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ (ΠΏΠ°ΡƒΠ·). Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° -- ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ состояниС ΠΈ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ INSTEAD, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ эти измСнСния ΠΈ снова ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ дСйствий ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Если Π²Π°ΠΌ трСбуСтся ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°, Π²Π°ΠΌ придСтся Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ `timer `.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ практичСски всСгда содСрТат условия ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. НапримСр:

obj {
        nam = 'яблоко';
        seen = false;
        dsc = function(s)
                if not s.seen then
                        p 'На столС {Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ} Π»Π΅ΠΆΠΈΡ‚.';
                else
                        p 'На столС Π»Π΅ΠΆΠΈΡ‚ {яблоко}.';
                end
        end;
        act = function(s)
                if s.seen then
                        p 'Π­Ρ‚ΠΎ яблоко!';
                else
                        s.seen = true;
                        p 'Π“ΠΌ... Π­Ρ‚ΠΎ ΠΆΠ΅ яблоко!';
                end
        end;
};

Если Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ ΠΊΠ°ΠΊ функция, Ρ‚ΠΎ всСгда _ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚_ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (`s `) -- сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ΠΎ-Π΅ΡΡ‚ΡŒ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, `s ` это синоним `_'яблоко' `. Когда Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с самим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π° Π½Π΅ явноС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Π°ΠΌ Π½Π΅ придСтся ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ ΠΈΠ³Ρ€Ρƒ. Π”Π° ΠΈ запись Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€ΠΎΡ‡Π΅.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π΅ сцСны Π² динамичСской части сцСны Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ тСкст: `На столС Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π»Π΅ΠΆΠΈΡ‚ `. ΠŸΡ€ΠΈ взаимодСйствии с `Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ `, пСрСмСнная `seen ` ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `яблоко ` Π±ΡƒΠ΄Π΅Ρ‚ установлСна Π² `true ` -- истина, ΠΈ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ яблоко.

Как Π²ΠΈΠ΄ΠΈΠΌ, синтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° `if ` довольно ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½. Для наглядности, нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

if <Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅> then <дСйствия> end

if have 'яблоко' then
        p 'Π£ мСня Π΅ΡΡ‚ΡŒ яблоко!'
end

if <Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅> then <дСйствия> else <дСйствия ΠΈΠ½Π°Ρ‡Π΅> end

if have 'яблоко' then
        p 'Π£ мСня Π΅ΡΡ‚ΡŒ яблоко!'
else
        p 'Π£ мСня Π½Π΅Ρ‚ яблока!'
end

if <Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅> then <дСйствия> elseif <Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 2> then <дСйствия 2> else <ΠΈΠ½Π°Ρ‡Π΅> end --  ΠΈ Ρ‚.Π΄.

if have 'яблоко' then
        p 'Π£ мСня Π΅ΡΡ‚ΡŒ яблоко!'
elseif have 'Π²ΠΈΠ»ΠΊΠ°' then
        p 'Π£ мСня Π½Π΅Ρ‚ яблока, Π½ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΈΠ»ΠΊΠ°!'
else
        p 'Π£ мСня Π½Π΅Ρ‚ Π½ΠΈ яблока, Π½ΠΈ Π²ΠΈΠ»ΠΊΠΈ!'
end

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ `if ` ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ логичСскоС "ΠΈ" (`and `), "ΠΈΠ»ΠΈ" (`or `), "ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅" (`not `) ΠΈ скобки `( ` `) ` для задания ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ². Π—Π°ΠΏΠΈΡΡŒ Π²ΠΈΠ΄Π° `if <пСрСмСнная> then ` ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрСмСнная Π½Π΅ Ρ€Π°Π²Π½Π° `false `. РавСнство описываСтся ΠΊΠ°ΠΊ `== `, нСравСнство -- `~= `.

if not have 'яблоко' and not have 'вилка' then
    p 'Π£ мСня Π½Π΅Ρ‚ Π½ΠΈ яблока, Π½ΠΈ Π²ΠΈΠ»ΠΊΠΈ!'
end

...
if w ~= apple then
   p 'Π­Ρ‚ΠΎ Π½Π΅ яблоко.';
end
...

if time() == 10 then
   p '10 ΠΉ Ρ…ΠΎΠ΄ настал!'
end
_*Π’Π°ΠΆΠ½ΠΎ!*_
Π’ ситуации ΠΊΠΎΠ³Π΄Π° пСрСмСнная Π½Π΅ Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² условии, INSTEAD даст ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’Π°ΠΌ придСтся Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π—Π°ΠΏΠΈΡΡŒ `s.seen ` ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрСмСнная `seen ` Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ `s ` (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ `яблоко `). ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `s ` (ΠΎΡ‚ self), Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -- это сам Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅, Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ поступили с `seen `. Но ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ.

obj {
        nam = 'яблоко';
        seen = false;
        eaten = false;
        color = 'красный';
        weight = 10;
        ...
};

ВсС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΡ€ΠΈ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Ρ„Π°ΠΉΠ» сохранСния ΠΈΠ³Ρ€Ρ‹.

Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСмСнная ΠΏΠΎΠΏΠ°Π»Π° Π² Ρ„Π°ΠΉΠ» сохранСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅:

obj {
        nam = 'яблоко';
        {
           t = 1; -- эта пСрСмСнная Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² сохранСния
           x = false; -- ΠΈ эта Ρ‚ΠΎΠΆΠ΅
        }
};

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π²Π°ΠΌ Π½Π΅ стоит Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ. Однако Π΅ΡΡ‚ΡŒ ситуация, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ этот ΠΏΡ€ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ массивы ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° всСгда ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ массивы для хранСния нСизмСняСмых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

obj {
        nam = 'яблоко';
        {
           text = { "Ρ€Π°Π·", "Π΄Π²Π°", "Ρ‚Ρ€ΠΈ" }; -- Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² Ρ„Π°ΠΉΠ» сохранСния
        }
        ...
};

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· `s ` -- Ссли это сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠΈΠ»ΠΈ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ - ссылкС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

apple = obj {
    color = 'красный';
}
...
-- Π³Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС
apple.color = 'Π·Π΅Π»Π΅Π½Ρ‹ΠΉ'

Или по имСни:

obj {
    nam = 'яблоко';
    color = 'красный';
}
...
-- Π³Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС
_'яблоко'.color = 'Π·Π΅Π»Π΅Π½Ρ‹ΠΉ'

На самом Π΄Π΅Π»Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° Π»Π΅Ρ‚Ρƒ (Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΡ… опрСдСлСния), хотя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² этом Π½Π΅Ρ‚ смысла. НапримСр:

apple 'xxx' (10) -- создали ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ xxx Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° apple ΠΏΠΎ ссылкС
(_'яблоко') 'xxx' (10) -- Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ΠšΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слуТСбного слова `local `:

act = function(s)
    local w = _'Π»Π°ΠΌΠΏΠΎΡ‡ΠΊΠ°'
    w.light = true
    p [[Π― Π½Π°ΠΆΠ°Π» Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈ Π»Π°ΠΌΠΏΠΎΡ‡ΠΊΠ° Π·Π°Π³ΠΎΡ€Π΅Π»Π°ΡΡŒ.]]
end

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, пСрСмСнная w сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° `act `. ΠœΡ‹ создали Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ссылку-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ `w `, которая ссылаСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ `Π»Π°ΠΌΠΏΠΎΡ‡ΠΊΠ° `, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свойство-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ `light ` Ρƒ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ:

_'Π»Π°ΠΌΠΏΠΎΡ‡ΠΊΠ°'.light = true

Но ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ произвСсти нСсколько дСйствий с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π² Ρ‚Π°ΠΊΠΈΡ… случаях ΠΏΡ€ΠΎΡ‰Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Ρ„Π°ΠΉΠ»-сохранСниС ΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Ρ€ΠΎΠ»ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΎΠ³Π΄Π° данная пСрСмСнная Π²ΠΈΠ΄ΠΈΠΌΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ lua Ρ„Π°ΠΉΠ»Π° ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Ρ„Π°ΠΉΠ» сохранСния.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

obj {
        nam = 'ΠΊΠΎΡ‚Π΅Π½ΠΎΠΊ';
        state = 1;
        act = function(s)
                s.state = s.state + 1
                if s.state > 3 then
                        s.state = 1
                end
                p [[ΠœΡƒΡ€Ρ€Ρ€!]]
        end;
        dsc = function(s)
                local dsc = {
                        "{ΠšΠΎΡ‚Π΅Π½ΠΎΠΊ} ΠΌΡƒΡ€Π»Ρ‹Ρ‡Π΅Ρ‚.",
                        "{ΠšΠΎΡ‚Π΅Π½ΠΎΠΊ} ΠΈΠ³Ρ€Π°Π΅Ρ‚.",
                        "{ΠšΠΎΡ‚Π΅Π½ΠΎΠΊ} облизываСтся.",
                };
                p(dsc[s.state])
        end;
        end

Как Π²ΠΈΠ΄ΠΈΠΌ, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `dsc ` ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ массив `dsc `. `local ` ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ дСйствуСт Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `dsc `. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Ρ‚Π°ΠΊ:

dsc = function(s)
    if s.state == 1 then
        p "{ΠšΠΎΡ‚Π΅Π½ΠΎΠΊ} ΠΌΡƒΡ€Π»Ρ‹Ρ‡Π΅Ρ‚."
    elseif s.state == 2 then
        p "{ΠšΠΎΡ‚Π΅Π½ΠΎΠΊ} ΠΈΠ³Ρ€Π°Π΅Ρ‚."
    else
        p "{ΠšΠΎΡ‚Π΅Π½ΠΎΠΊ} облизываСтся.",
    end
end

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:

global { -- ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
    global_var = 1; -- число
    some_number = 1.2; -- число
    some_string = 'строка';
    know_truth = false; -- Π±ΡƒΠ»Π΅Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    array = {1, 2, 3, 4}; -- массив
}

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° Ρ„ΠΎΡ€ΠΌΠ° записи, удобная для ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ:

global 'global_var' (1)

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ всСгда ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Ρ„Π°ΠΉΠ»-сохранСниС.

ΠšΡ€ΠΎΠΌΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ константы. Бинтаксис Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ:

const {
        A = 1;
        B = 2;
}
const 'Aflag' (false)

Π”Π²ΠΈΠΆΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ констант. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Ρ„Π°ΠΉΠ»-сохранСниС.

Иногда Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ `local ` (ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠ° Π²ΠΎ всСх Π²Π°ΡˆΠΈΡ… lua Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈΠ³Ρ€Ρ‹), Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ» сохранСния. Для Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ:

declare {
        A = 1;
        B = 2;
}
declare 'Z' (false)

Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Ρ„Π°ΠΉΠ» сохранСния. Одно ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… свойств Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

declare 'test' (function()
        p "Hello world!"
end)

global 'f' (test)

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `test ` Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ состояниС этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сохранСно Π² Ρ„Π°ΠΉΠ»Π΅ сохранСния. Π’ΠΎ-Π΅ΡΡ‚ΡŒ, Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ!

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

declare 'dprint' (dprint)

Π’Π΅ΠΌ самым дСлая Ρ‚Π°ΠΊΠΈΠ΅ Π½Π΅Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ -- Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ.

ДСкларация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎ сути, это присвоСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΈ, благодаря Ρ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ ссылку.

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ свои Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΈΠ· своСй ΠΈΠ³Ρ€Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

function mprint(n, ...)
        local a = {...}; -- Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ массив с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
        p(a[n]) -- Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ n-ΠΉ элСмСнт массива
end
...
dsc = function(s)
        mprint(s.state, {
                "{ΠšΠΎΡ‚Π΅Π½ΠΎΠΊ} ΠΌΡƒΡ€Π»Ρ‹Ρ‡Π΅Ρ‚.",
                "{ΠšΠΎΡ‚Π΅Π½ΠΎΠΊ} ΠΈΠ³Ρ€Π°Π΅Ρ‚.",
                "{ΠšΠΎΡ‚Π΅Π½ΠΎΠΊ} облизываСтся." });
end;

Пока Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ внимания Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΎΠ½ каТСтся Π²Π°ΠΌ слоТным.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ дСйствиС Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ (ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ сдСлал Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ `false `. НапримСр:

act = function(s)
        if broken_leg then
                return false
        end
        p [[Π― ΡƒΠ΄Π°Ρ€ΠΈΠ» Π½ΠΎΠ³ΠΎΠΉ ΠΏΠΎ мячу.]]
end

ΠŸΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ описаниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° `game.act `. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ описаниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ содСрТит описаниС Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΡ‹Ρ… дСйствий. Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

game.act = 'Π“ΠΌ... НС получаСтся...';

Π˜Ρ‚Π°ΠΊ, Ссли Π²Ρ‹ Π½Π΅ Π·Π°Π΄Π°Π»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `act ` ΠΈΠ»ΠΈ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ `false ` -- считаСтся, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π΅Ρ‚ ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `game `.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ `false ` ΠΈΠ· `act `, Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ рассказано дальшС, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… описанноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅.

На самом Π΄Π΅Π»Π΅, ΠΊΡ€ΠΎΠΌΠ΅ `game.act ` ΠΈ `act ` -- Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° сущСствуСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `onact ` Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° game, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° `act `.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `act ` Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, вызываСтся onact~ Ρƒ `game `. Если ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Π΅Ρ€Π½Π΅Ρ‚ `false `, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ `act ` обрываСтся. `onact ` ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, для контроля событий Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ³Ρ€Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

-- Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ onact ΠΊΠΎΠΌΠ½Π°Ρ‚, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ
-- для дСйствий Π½Π° любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

game.onact = function(s, ...)
        local r, v = std.call(here(), 'onact', ...)
        if v == false then -- Ссли false, ΠΎΠ±Ρ€ΡƒΠ±Π°Π΅ΠΌ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ
                return r, v
        end
        return
end

room {
        nam = 'shop';
        disp = 'Магазин';
        onact = function(s, w)
                p [[Π’ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅ нСльзя Π²ΠΎΡ€ΠΎΠ²Π°Ρ‚ΡŒ!]]
                p ([[Π”Π°ΠΆΠ΅, Ссли это всСго-лишь ]], w, '.')
                return false
        end;
        obj = { 'ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅', 'Ρ…Π»Π΅Π±' };
}

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ "ΠΏΠΎΡ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ" любой ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ сообщСниС ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ дСйствия.

ВсС, Ρ‡Ρ‚ΠΎ описано Π²Ρ‹ΡˆΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ `act ` дСйствуСт ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²: `tak `, `inv `, `use `, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°Ρ…, ΠΎ Ρ‡Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ рассказано Π΄Π°Π»Π΅Π΅.

Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ - ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ синтаксис Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. 'ΠžΠ±ΡŠΠ΅ΠΊΡ‚:ΠΌΠ΅Ρ‚ΠΎΠ΄(ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹)'. НапримСр:
apple:act() -- Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ 'act' Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° 'apple' (Ссли ΠΎΠ½   ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ функция!).
_'яблоко':act() -- Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π° Π½Π΅ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-ссылкС

Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ ΠΊΠ°ΠΊ функция. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ `std.call() ` для Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Ρ‚Π΅ΠΌ способом, ΠΊΠ°ΠΊΠΈΠΌ это Π΄Π΅Π»Π°Π΅Ρ‚ сам INSTEAD. (Π‘ΡƒΠ΄Π΅Ρ‚ описано Π² дальнСйшСм).

Π˜Π½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ -- ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `tak `.

НапримСр:

obj {
        nam = 'яблоко';
        dsc = 'На столС Π»Π΅ΠΆΠΈΡ‚ {яблоко}.';
        inv = function(s)
                p 'Я съСл яблоко.'
                remove(s); -- ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ яблоко ΠΈΠ· инвСнтаря
        end;
        tak = 'Π’Ρ‹ взяли яблоко.';
};

ΠŸΡ€ΠΈ этом, ΠΏΡ€ΠΈ дСйствии ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ "яблоко" (Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΌΡ‹ΡˆΠΈ Π½Π° ссылку Π² сцСнС) -- яблоко Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ±Ρ€Π°Π½ΠΎ ΠΈΠ· сцСны ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ. ΠŸΡ€ΠΈ дСйствии ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ (Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΌΡ‹ΡˆΠΈ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) -- вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `inv `.

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€ΠΈ дСйствии ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ Π½Π° яблоко Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π΅ -- яблоко Π±ΡƒΠ΄Π΅Ρ‚ съСдСно.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ взятия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² `act `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

obj {
        nam = 'яблоко';
        dsc = 'На столС Π»Π΅ΠΆΠΈΡ‚ {яблоко}.';
        inv = function(s)
                p 'Я съСл яблоко.'
                remove(s); -- ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ яблоко ΠΈΠ· инвСнтаря
        end;
        act = function(s)
                take(s)
                p 'Π’Ρ‹ взяли яблоко.';
        end
};

Если Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π΅ Π½Π΅ объявлСн ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `inv `, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ `game.inv `.

Если ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `tak ` Π²Π΅Ρ€Π½Π΅Ρ‚ `false `, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ взят, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

obj {
        nam = 'яблоко';
        dsc = 'На столС Π»Π΅ΠΆΠΈΡ‚ {яблоко}.';
        tak = function(s)
                p "Оно ΠΆΠ΅ Ρ‡Π΅Ρ€Π²ΠΈΠ²ΠΎΠ΅!"
                return false
        end;
};

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ сцСнами

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ Π² INSTEAD выглядят ΠΊΠ°ΠΊ ссылки Π½Π°Π΄ описаниСм сцСны. Для опрСдСлСния Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ сцСнами ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ сцСны -- список `way `. Π’ спискС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, Π² Π²ΠΈΠ΄Π΅ ΠΈΠΌΠ΅Π½ ΠΊΠΎΠΌΠ½Π°Ρ‚ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-ссылок, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ списку `obj `. НапримСр:

room {
        nam = 'room2';
        disp = 'Π—Π°Π»';
        dsc = 'Π’Ρ‹ Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ Π·Π°Π»Π΅.';
        way = { 'main' };
};

room {
    nam = 'main';
        disp = 'Главная ΠΊΠΎΠΌΠ½Π°Ρ‚Π°';
        dsc = 'Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.';
        way = { 'room2' };
};

ΠŸΡ€ΠΈ этом, Π²Ρ‹ смоТСтС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ сцСнами `main ` ΠΈ `room2 `. Как Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, `disp ` ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² Π½Π° Π»Π΅Ρ‚Ρƒ. Или ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `title `, для раздСлСния ΠΈΠΌΠ΅Π½ΠΈ сцСны ΠΊΠ°ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°:

room {
        nam = 'room2';
        disp = 'Π’ Π·Π°Π»';
        title = 'Π’ Π·Π°Π»Π΅';
        dsc = 'Π’Ρ‹ Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ Π·Π°Π»Π΅.';
        way = { 'main' };
};

room {
    nam = 'main';
        title = 'Π’ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅';
        disp = 'Π’ Π³Π»Π°Π²Π½ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ';
        dsc = 'Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.';
        way = { 'room2' };
};

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ сцСнами Π΄Π²ΠΈΠΆΠΎΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `onexit ` ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ сцСны ΠΈ `onenter ` Π² Ρ‚ΠΎΠΉ сцСнС, ΠΊΡƒΠ΄Π° ΠΈΠ΄Π΅Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊ. НапримСр:

room {
        onenter = 'Π’Ρ‹ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π² Π·Π°Π».';
        nam = 'Π—Π°Π»';
        dsc = 'Π’Ρ‹ Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ Π·Π°Π»Π΅.';
        way = { 'main' };
        onexit = 'Π’Ρ‹ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈΠ· Π·Π°Π»Π°.';
};

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈ всС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, `onexit ` ΠΈ `onenter ` ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ функциями. Π’ΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ это (ΠΊΠ°ΠΊ всСгда) сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ - ΠΊΠΎΠΌΠ½Π°Ρ‚Π°, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ -- это ΠΊΠΎΠΌΠ½Π°Ρ‚Π° ΠΊΡƒΠ΄Π° ΠΈΠ³Ρ€ΠΎΠΊ собираСтся ΠΈΠ΄Ρ‚ΠΈ (для `onexit `) ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ собираСтся ΡƒΠΉΡ‚ΠΈ (для `onenter `). НапримСр:

room {
        onenter = function(s, f)
                if f^'main' then
                        p 'Π’Ρ‹ ΠΈΠ΄Π΅Ρ‚Π΅ ΠΈΠ· ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ main.';
                end
        end;
        nam = 'Π—Π°Π»';
        dsc = 'Π’Ρ‹ Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ Π·Π°Π»Π΅.';
        way = { 'main' };
        onexit = function(s, t)
                if t^'main' then
                        p 'Π― Π½Π΅ Ρ…ΠΎΡ‡Ρƒ Π½Π°Π·Π°Π΄!'
            return false
                end
        end;
};

Π—Π°ΠΏΠΈΡΡŒ Π²ΠΈΠ΄Π°:

if f^'main' then

Π­Ρ‚ΠΎ сопоставлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π­Ρ‚ΠΎ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° записям:

if f == _'main' then

Или:

if f.nam == 'main' then

Или:

if std.nameof(f) == 'main' then

Как Π²ΠΈΠ΄ΠΈΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ `onexit `, эти ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ строки ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π±ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ статуса. Аналогично ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ `onact `, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Π²Π΅Ρ€Π½ΡƒΠ² `false ` ΠΈΠ· `onexit~/~onenter `.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ статуса ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом, Ссли это каТСтся Π²Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ:

return "Π― Π½Π΅ Ρ…ΠΎΡ‡Ρƒ Π½Π°Π·Π°Π΄", false

Если ΠΆΠ΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `p~/~pn~/~pr `, Ρ‚ΠΎ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ статус ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ `return `, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅.

_*Π’Π°ΠΆΠ½ΠΎ!*_
Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° `onenter ` ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ сцСну (`here() `) **Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½**!!! Π’ INSTEAD Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ `exit ` (ΡƒΡ…ΠΎΠ΄ ΠΈΠ· ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹) ΠΈ `enter ` (Π·Π°Ρ…ΠΎΠ΄ Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ _послС_ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π». Π­Ρ‚ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Ρ‹ ΠΊ использованию всСгда, ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‚ нСобходимости Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄.

Иногда Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΎΡΡŒ ΠΎΡ‚ названия ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Π΄Π΅Ρ‚ этот ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄. БущСствуСт нСсколько способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это. НапримСр, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `path `.

room {
        nam = 'room2';
        title = 'Π—Π°Π»';
        dsc = 'Π’Ρ‹ Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ Π·Π°Π»Π΅.';
        way = { path { 'Π’ Π³Π»Π°Π²Π½ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ', 'main'} };
};

room {
        nam = 'main';
    title = 'Главная ΠΊΠΎΠΌΠ½Π°Ρ‚Π°';
        dsc = 'Π’Ρ‹ Π² большой ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.';
        way = { path {'Π’ Π·Π°Π»', 'room2'} };
};

На самом Π΄Π΅Π»Π΅, `path ` создаСт ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ `disp `, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π²Π΅Π½ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ, ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ `onenter `, которая пСрСнаправляСт ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ Π·Π°Π΄Π°Π½Π½ΡƒΡŽ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ `path `.

Если Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

way = { path {'#Π²Π·Π°Π»', 'Π’ Π·Π°Π»', 'room2'} };

Π’ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ станСт ΠΈΠΌΠ΅Π½Π΅ΠΌ (ΠΈΠ»ΠΈ Ρ‚Π΅Π³ΠΎΠΌ, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅) Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° записи с явным Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° `nam `:

way = { path { nam = '#Π²Π·Π°Π»', 'Π’ Π·Π°Π»', 'room2'} };

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ происходил хотя Π±Ρ‹ Ρ€Π°Π·, ΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ это Π·Π° ΠΊΠΎΠΌΠ½Π°Ρ‚Π°:

way = { path {'#Π²Π΄Π²Π΅Ρ€ΡŒ', 'Π’ Π΄Π²Π΅Ρ€ΡŒ', after = 'Π’ Π³ΠΎΡΡ‚ΠΈΠ½ΡƒΡŽ', 'room2'} };

ВсС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ функциями.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, `path ` позволяСт ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ способом.

Иногда Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹. На самом Π΄Π΅Π»Π΅ это трСбуСтся Π½Π΅ часто. ИдСя ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π²ΠΈΠ΄Π΅Π½ Π΄Π°ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½. НапримСр, прСдставим сСбС сцСну ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠΌΠΎΠΌ Ρƒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π΄Π²Π΅Ρ€ΠΈ. Π’ΠΎΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΌ нСльзя, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π²Π΅Ρ€ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Π°.

НСт особого смысла ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ "Π΄Π²Π΅Ρ€ΡŒ". ΠŸΡ€ΠΎΡΡ‚ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `onenter ` сцСны Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄ΠΎΠΌΠ° ΠΌΡ‹ провСряСм, Π° Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ гСроя ΠΊΠ»ΡŽΡ‡? И Ссли ΠΊΠ»ΡŽΡ‡Π° Π½Π΅Ρ‚, Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π²Π΅Ρ€ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Π° ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄. Если ΠΆΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π΅Ρ€ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ сцСны, помСститС Π΅Π΅ Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ, Π½ΠΎ Π² `act ` ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ сдСлайтС осмотр Π΄Π²Π΅Ρ€ΠΈ, ΠΈΠ»ΠΈ Π΄Π°ΠΉΡ‚Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΡƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ - ΠΌΡ‹ рассмотрим ΠΏΠΎΠ·ΠΆΠ΅), Π½ΠΎ сам ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π΄Π°ΠΉΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΡƒ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ способом Ρ‡Π΅Ρ€Π΅Π· строку ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ².

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π±Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½ ΠΈ ΠΎΠ½ появляСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ событий. НапримСр, ΠΌΡ‹ осмотрСли часы ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ Ρ‚Π°ΠΌ сСкрСтный Π»Π°Π·.

obj {
        nam = 'часы';
        dsc = [[Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ старинныС {часы}.]];
        act = function(s)
                enable '#часы'
                p [[Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² часах Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‚Π°ΠΉΠ½ΠΎΠΉ Ρ…ΠΎΠ΄!]];
        end;
}

room {
        nam = 'Π—Π°Π»';
        dsc = 'Π’Ρ‹ Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ Π·Π°Π»Π΅.';
        obj = { 'часы' };
        way = { path { '#часы', 'Π’ часы', 'inclock' }:disable() };
};

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΡ‹ создали _ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ_ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Π·Π° счСт Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° `disable ` Ρƒ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ созданной с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `path `. ΠœΠ΅Ρ‚ΠΎΠ΄ `disable ` Π΅ΡΡ‚ΡŒ Ρƒ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠ½Π°Ρ‚), ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ состояниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСстаСт Π±Ρ‹Ρ‚ΡŒ доступным ΠΈΠ³Ρ€ΠΎΠΊΡƒ. Π—Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ свойством ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ _Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ_ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `enable() `;

Π”Π°Π»Π΅Π΅, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ Π½Π° ссылку, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ часы, вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `act `, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `enable() ` Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅ Π² Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ, Π° 'Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ' ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

obj {
        nam = 'часы';
        dsc = [[Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ старинныС {часы}.]];
        act = function(s)
                open '#часы'
                p [[Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² часах Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‚Π°ΠΉΠ½ΠΎΠΉ Ρ…ΠΎΠ΄!]];
        end;
}

room {
        nam = 'Π—Π°Π»';
        dsc = 'Π’Ρ‹ Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ Π·Π°Π»Π΅.';
        obj = { 'часы' };
        way = { path { '#часы', 'Π’ часы', 'inclock' }:close() };
};

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π°? Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСстаСт Π±Ρ‹Ρ‚ΡŒ доступным для ΠΈΠ³Ρ€ΠΎΠΊΠ°. Если Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚ΠΎ ΠΈ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ становятся нСдоступными.

Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π΅Π»Π°Π΅Ρ‚ нСдоступным содСрТимоС Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ Π½Π΅ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Однако, Π² случаС ΠΊΠΎΠΌΠ½Π°Ρ‚, ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ приводят ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ -- ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½ΠΈΡ… становится нСдоступным.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

room {
        nam = 'inclock';
        dsc = [[Π― Π² часах.]];
}:close()

obj {
        nam = 'часы';
        dsc = [[Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ старинныС {часы}.]];
        act = function(s)
                open 'inclock'
                p [[Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² часах Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‚Π°ΠΉΠ½ΠΎΠΉ Ρ…ΠΎΠ΄!]];
        end;
}

room {
        nam = 'Π—Π°Π»';
        dsc = 'Π’Ρ‹ Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ Π·Π°Π»Π΅.';
        obj = { 'часы' };
        way = { path { 'Π’ часы', 'inclock' } };
};

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Π° ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Π΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄. `path ` Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя, Ссли ΠΊΠΎΠΌΠ½Π°Ρ‚Π° Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ Π²Π΅Π΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΈΠ»ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Π°.

ДСйствиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°

Π˜Π³Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ инвСнтаря Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Для этого ΠΎΠ½ Ρ‰Π΅Π»ΠΊΠ°Π΅Ρ‚ ΠΌΡ‹ΡˆΡŒΡŽ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ инвСнтаря, Π° Π·Π°Ρ‚Π΅ΠΌ, Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ сцСны. ΠŸΡ€ΠΈ этом вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `used ` Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚, ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `use ` ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚.

НапримСр:

obj {
        nam = 'Π½ΠΎΠΆ';
        dsc = 'На столС Π»Π΅ΠΆΠΈΡ‚ {Π½ΠΎΠΆ}';
        inv = 'ΠžΡΡ‚Ρ€Ρ‹ΠΉ!';
        tak = 'Я взял ноТ!';
        use = 'Π’Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠΆ.';
};

obj {
        nam = 'стол';
        dsc = 'Π’ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ стоит {стол}.';
        act = 'Π“ΠΌ... ΠŸΡ€ΠΎΡΡ‚ΠΎ стол...';
        obj = { 'Π½ΠΎΠΆ' };
        used = function(s)
                p 'Π’Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ со столом...';
                return false
        end;
};

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `used ` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ `false `. Π—Π°Ρ‡Π΅ΠΌ? Если Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ `false ` ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сообщаСт Π΄Π²ΠΈΠΆΠΊΡƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ событиС ΠΎΠ½ Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π». Если Π±Ρ‹ ΠΌΡ‹ Π½Π΅ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ Π±Ρ‹ `false `, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° `use ` ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `Π½ΠΎΠΆ ` просто Π±Ρ‹ Π½Π΅ дошла. На самом Π΄Π΅Π»Π΅, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ `use ` ΠΈΠ»ΠΈ `used `, вряд Π»ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π²ΠΎ врСмя дСйствия ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ `false `:

use = function(s, w)
        if w^'яблоко' then
                p [[Π― почистил яблоко.]]
                w.cut = true
                return
        end
        return false;
end

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС `use ` Ρƒ яблока ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ -- дСйствиС Π½Π° яблоко. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ `false ` ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: `game.use `.

Но Π»ΡƒΡ‡ΡˆΠ΅, Ссли Π²Ρ‹ ΠΏΡ€ΠΎΠΏΠΈΡˆΠ΅Ρ‚Π΅ дСйствиС ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π½ΠΎΠΆΠ°:

use = function(s, w)
        if w^'яблоко' then
                p [[Π― почистил яблоко.]]
                w.cut = true
                return
        end
        p [[НС стоит Ρ€Π°Π·ΠΌΠ°Ρ…ΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΎΠΆΠΎΠΌ!]]
end

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ дСмонстрируСт Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρƒ use являСтся ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ дСйствуСм. Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° `used `, соотвСтствСнно, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -- это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСйствуСт Π½Π° нас:

obj {
        nam = 'мусорка';
        dsc = [[Π’ ΡƒΠ³Π»Ρƒ стоит {мусорка}.]];
        used = function(s, w)
                if w^'яблоко' then
                        p [[Π― выбросил яблоко Π² мусорку.]]
                        remove(w)
                        return
                end
                return false;
        end
}

Как Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ use вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `onuse ` Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `game `, ΠΏΠΎΡ‚ΠΎΠΌ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `ΠΈΠ³Ρ€ΠΎΠΊ `, Π° ΠΏΠΎΡ‚ΠΎΠΌ Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ `use `, Π²Π΅Ρ€Π½ΡƒΠ² ΠΈΠ· любого ΠΈΠ· пСрСчислСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² `onuse ` -- `false `.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `use ` ΠΈΠ»ΠΈ `used ` (ΠΈΠ»ΠΈ ΠΎΠ±Π°) это вопрос Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ `used ` вызываСтся Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ больший ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ "Π˜Π³Ρ€ΠΎΠΊ"

Π˜Π³Ρ€ΠΎΠΊ Π² ΠΌΠΈΡ€Π΅ INSTEAD прСдставлСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° `player `. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ нСсколько ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ³Ρ€ΠΎΠΊ присутствуСт ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Имя этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° -- `player `. БущСствуСт пСрСмСнная-ссылка `pl `, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Но ΠΈΠ½ΠΎΠ³Π΄Π° это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `obj ` Ρƒ ΠΈΠ³Ρ€ΠΎΠΊΠ° прСдставляСт собой ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π½Π΅Ρ‚ смысла ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° `player `, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

game.player = player {
        nam = "Василий";
        room = 'кухня'; -- стартовая ΠΊΠΎΠΌΠ½Π°Ρ‚Π° ΠΈΠ³Ρ€ΠΎΠΊΠ°
        power = 100;
        obj = { 'яблоко' }; -- Π·Π°ΠΎΠ΄Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ яблоко Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ
};

Π’ INSTEAD Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Для этого слуТит функция `change_pl() `. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° `player ` (ΠΈΠ»ΠΈ Π΅Π³ΠΎ имя). Ѐункция ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΈ ΠΏΡ€ΠΈ нСобходимости, осущСствит ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ, Π³Π΄Π΅ находится Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ³Ρ€ΠΎΠΊ.

Ѐункция `me() ` всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΈΠ³Ρ€ `me() ` == `pl `.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ "ΠœΠΈΡ€"

Π˜Π³Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠΈΡ€ прСдставлСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° `world `. Имя Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `game `. БущСствуСт ссылка-пСрСмСнная, которая Ρ‚Π°ΠΊΠΆΠ΅ называСтся `game `.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

НапримСр, пСрСмСнная game.codepage содСрТит ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ исходного ΠΊΠΎΠ΄Π° ΠΈΠ³Ρ€Ρ‹, ΠΈ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½Π° "UTF-8". Π― Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π°, Π²Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ `game.player ` -- содСрТит Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ `game ` ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: `act `, `inv `, `use `, `tak `, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Π½Ρ‹, Ссли Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ дСйствий ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ (ΠΈΠ»ΠΈ всС ΠΎΠ½ΠΈ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ `false `). НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹:

game.act = 'НС получаСтся.';
game.inv = 'Π“ΠΌ.. Бтранная ΡˆΡ‚ΡƒΠΊΠ°..';
game.use = 'НС сработаСт...';
game.tak = 'НС Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ½Π΅ это...';

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, всС ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ функциями.

Π’Π°ΠΊΠΆΠ΅, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ `game ` ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ: `onact `, `ontak `, `onuse `, `oninv `, `onwalk ` -- ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ дСйствия, Π² случаС Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° `false `.

Π•Ρ‰Π΅, Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `game ` ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ: `afteract `, `afterinv `, `afteruse `, `afterwalk ` -- ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ дСйствия.

Атрибуты-списки

Атрибуты-списки (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ `way ` ΠΈΠ»ΠΈ `obj `) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со своим содСрТимым с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°Π±ΠΎΡ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Атрибуты-списки ΠΏΡ€ΠΈΠ·Π²Π°Π½Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² сСбС списки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². На самом Π΄Π΅Π»Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ списки для собствСнных Π½ΡƒΠΆΠ΄, ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

room {
        nam = 'Ρ…ΠΎΠ»ΠΎΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊ';
        frost = std.list { 'ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅' };
}

Π₯отя, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, это Π½Π΅ трСбуСтся. НиТС пСрСчислСны ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° 'список'. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… для Π»ΡŽΠ±Ρ‹Ρ… списков, хотя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это Π±ΡƒΠ΄ΡƒΡ‚ `way ` ΠΈ `obj `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ways():disable() -- ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-списки:

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ спискам ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ:

pl.obj:add 'Π½ΠΎΠΆ'

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² списках хранятся Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΈΡ… Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅. Однако, Ссли Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° присутствуСт числовой Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `pri `, Ρ‚ΠΎ ΠΎΠ½ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ _ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°_ Π² спискС. Если `pri ` Π½Π΅ Π·Π°Π΄Π°Π½, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° считаСтся `0 `. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π² спискС, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ `pri < 0 `. Если Π² ΠΊΠΎΠ½Ρ†Π΅ списка -- `> 0 `.

obj {
        pri = -100;
        nam = 'ΡˆΡ‚ΡƒΠΊΠ°';
        disp = 'ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ инвСнтаря';
        inv = [[ΠžΡΡ‚ΠΎΡ€ΠΎΠΆΠ½Π΅ΠΉ с этим ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ.]];
}

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Π’ INSTEAD ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠŸΡ€ΠΈ описании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ соглашСния ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ….

Π˜Ρ‚Π°ΠΊ, основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

-`'where(Ρ‡Ρ‚ΠΎ) ` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ находится Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… мСстах, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -- Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Lua, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹;

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² условиях, Π»ΠΈΠ±ΠΎ для поиска ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `seen ` для написания условия:

onexit = function(s)
        if seen 'монстр' then -- Ссли Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 1 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€,
                --- скобки ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ
                p 'ΠœΠΎΠ½ΡΡ‚Ρ€ Π·Π°Π³ΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄!'
                return false
        end
end

А Ρ‚Π°ΠΊΠΆΠ΅, для нахоТдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² сцСнС:

use = function(s, w)
        if w^'ΠΎΠΊΠ½ΠΎ' then
                local ww = lookup 'собака'
                if not ww then
                        p [[А гдС моя собака?]]
                        return
                end
                place(ww, 'ΡƒΠ»ΠΈΡ†Π°')
                p 'Π― Ρ€Π°Π·Π±ΠΈΠ» ΠΎΠΊΠ½ΠΎ! Моя собака Π²Ρ‹ΠΏΡ€Ρ‹Π³Π½ΡƒΠ»Π° Π½Π° ΡƒΠ»ΠΈΡ†Ρƒ.'
                return
        end
        return false
end

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ `have `:

...
act = function(s)
        if have 'Π½ΠΎΠΆ' then
                p 'Но Ρƒ мСня ΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π½ΠΎΠΆ!';
        return
        end
        take 'Π½ΠΎΠΆ'
end
...
ΠœΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ вопрос, Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ функциями `lookup ` ΠΈ `_() `? Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ `lookup() ` ΠΈΡ‰Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ Π² случаС, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ -- просто Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Π΅Ρ€Π½Π΅Ρ‚. А запись `_() ` ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π·Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, `_() ` это бСзусловноС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Π­Ρ‚Π° функция Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π½Π΅ занимаСтся _поиском_. Волько Ссли Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π·Π°Π΄Π°Π½ Ρ‚Π΅Π³, Π±ΡƒΠ΄Π΅Ρ‚ осущСствлСн поиск срСди доступных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ `_() ` Π½Π° Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ нСдоступный Ρ‚Π΅Π³ -- Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ!

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

Π’ INSTEAD Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ `stdlib `, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всСгда ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ автоматичСски, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΊΠ°ΠΊ основной Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ инструмСнт ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠΈΡ€ΠΎΠΌ ΠΈΠ³Ρ€Ρ‹. Рассмотрим ΠΈΡ… Π² этой Π³Π»Π°Π²Π΅.

ΠŸΡ€ΠΈ описании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ΄ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ `w ` понимаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°, заданная ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‚Π΅Π³ΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-ссылкС. `[ wh ] ` - ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

include "lib" -- Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ Ρ„Π°ΠΉΠ» lib.lua ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с ΠΈΠ³Ρ€ΠΎΠΉ;
loadmod "module" -- Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ module.lua ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°;
local text = 'hello';
pf("Π‘Ρ‚Ρ€ΠΎΠΊΠ°: %q Число: %d\n", text, 10);
act = pfn(walk, 'ванная') "Π― Ρ€Π΅ΡˆΠΈΠ» Π·Π°ΠΉΡ‚ΠΈ Π² Π²Π°Π½Π½ΡƒΡŽ.";
act = pfn(enable, '#ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄') "Π― Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» отвСрстиС Π² стСнС!";

`- obj {} ` - созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°;

gamefile("part2.lua", true) -- ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ состояниС ΠΈΠ³Ρ€Ρ‹ (ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅), ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ  part2.lua ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ с main ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹.
if not visited() then
        p [[Π― Ρ‚ΡƒΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·.]]
end
walk('ΠΊΠΎΠ½Π΅Ρ†', false, false) -- бСзусловный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ (ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ onexit/onenter/exit/enter);
for_all(enable, 'ΠΎΠΊΠ½ΠΎ', 'Π΄Π²Π΅Ρ€ΡŒ');
local list = {}
local w = where('яблоко', list)
-- Ссли яблоко находится Π² Π±ΠΎΠ»Π΅Π΅, Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΌ мСстС, Ρ‚ΠΎ
-- list Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ массив этих мСст.
-- Если Π²Π°ΠΌ достаточно ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСстополоТСния, Ρ‚ΠΎ:
where 'яблоко' -- Π±ΡƒΠ΄Π΅Ρ‚ достаточно
if actions(w, 'tak') > 0 then -- ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ w Π±Ρ‹Π» взят хотя Π±Ρ‹ 1 Ρ€Π°Π·;
if actions(w) == 1 then -- act Ρƒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° w Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ 1 Ρ€Π°Π·;
_*Π’Π°ΠΆΠ½ΠΎ!*_
На самом Π΄Π΅Π»Π΅, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΊΠΎΠΌΠ½Π°Ρ‚Π°ΠΌΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π½ΠΎ ΠΈ со списками. Π’ΠΎ Π΅ΡΡ‚ΡŒ 'remove(apple, inv())' сработаСт Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ 'remove(apple, me())''; Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, remove(apple) Ρ‚ΠΎΠΆΠ΅ сработаСт ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· Ρ‚Π΅Ρ… мСст, Π³Π΄Π΅ ΠΎΠ½ присутствуСт.

Рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

act = function()
        pn "Π― ΠΈΠ΄Ρƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ..."
        walk (nextroom);
end

obj {
        nam = 'моя машина';
        dsc = 'ΠŸΠ΅Ρ€Π΅Π΄ Ρ…ΠΈΠΆΠΈΠ½ΠΎΠΉ стоит ΠΌΠΎΠΉ ΡΡ‚Π°Ρ€Π΅Π½ΡŒΠΊΠΈΠΉ {ΠΏΠΈΠΊΠ°ΠΏ} Toyota.';
        act = function(s)
                walk 'inmycar';
        end
};
_*Π’Π°ΠΆΠ½ΠΎ!*_
ПослС Π²Ρ‹Π·ΠΎΠ²Π° `walk ` Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° продолТится Π΄ΠΎ Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, послС `walk ` всСгда слСдуСт `return `, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π½Π΅ послСдняя строка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, хотя ΠΈ Π² этом случаС бСзопасно ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ `return `.
act = function()
        pn "Π― ΠΈΠ΄Ρƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ..."
        walk (nextroom);
        return
end

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ `walk ` вызовутся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ `onexit~/~onenter~/~exit~/~enter ` ΠΈ Ссли ΠΎΠ½ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚.

Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ

Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ -- это сцСны ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° `dlg `, содСрТащиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ -- Ρ„Ρ€Π°Π·Ρ‹. ΠŸΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΈΠ³Ρ€ΠΎΠΊ Π²ΠΈΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Ρ„Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ, получая ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ ΠΈΠ³Ρ€Ρ‹. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΡƒΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Ρ„Ρ€Π°Π·Ρ‹ ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ. ΠŸΡ€ΠΈ исчСрпании всСх Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Π΄ΠΈΠ°Π»ΠΎΠ³ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ссли Π² Π΄ΠΈΠ°Π»ΠΎΠ³Π΅ Π½Π΅Ρ‚ постоянно Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… Ρ„Ρ€Π°Π·, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ встрСчаСтся Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ° "Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€" ΠΈΠ»ΠΈ "Π‘ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ Ρ€Π°Π·"). ΠŸΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π²Ρ…ΠΎΠ΄Π΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³, всС скрытыС Ρ„Ρ€Π°Π·Ρ‹ снова становятся Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ сбрасываСтся Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС (Ссли, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π°Π²Ρ‚ΠΎΡ€ ΠΈΠ³Ρ€Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°Π» усилия ΠΏΠΎ измСнСнию Π²ΠΈΠ΄Π° Π΄ΠΈΠ°Π»ΠΎΠ³Π°).

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ Π² ΠΈΠ³Ρ€Π΅ осущСствляСтся ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° сцСну:

obj {
        nam = 'ΠΏΠΎΠ²Π°Ρ€';
        dsc = 'Π― Π²ΠΈΠΆΡƒ {ΠΏΠΎΠ²Π°Ρ€Π°}.';
        act = function()
                walk 'povardlg'
        end,
};

Π₯отя я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `walkin `, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² случаС `walkin ` Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ `onexit ` / `exit ` Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, Π° пСрсонаТ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² этой ΠΆΠ΅ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅, Π³Π΄Π΅ ΠΈ Π³Π»Π°Π²Π½Ρ‹ΠΉ Π³Π΅Ρ€ΠΎΠΉ. Π’ΠΎ Π΅ΡΡ‚ΡŒ:

obj {
        nam = 'ΠΏΠΎΠ²Π°Ρ€';
        dsc = 'Π― Π²ΠΈΠΆΡƒ {ΠΏΠΎΠ²Π°Ρ€Π°}.';
        act = function()
                walkin 'povardlg'
        end,
};

Если Π²Π°ΠΌ Π½Π΅ нравится прСфикс Ρƒ Ρ„Ρ€Π°Π· Π² Π²ΠΈΠ΄Π΅ дСфиса, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:

std.phrase_prefix = '+';

И ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСфикс Π² Π²ΠΈΠ΄Π΅ `+ ` ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„Ρ€Π°Π·ΠΎΠΉ. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ прСфикс Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. На Π²Ρ…ΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½ΠΎΠΌΠ΅Ρ€ Ρ„Ρ€Π°Π·Ρ‹. Π—Π°Π΄Π°Ρ‡Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ -- Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ строковый прСфикс.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ `std.phrase_prefix ` Π½Π΅ сохраняСтся, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Π΅ Π½Π° Π»Π΅Ρ‚Ρƒ, Π²Π°ΠΌ придСтся Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΅ состояниС Π² `start() ` Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ!

_*Π’Π°ΠΆΠ½ΠΎ!*_
Π― Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'noinv' ΠΈ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ свойство 'noinv' Π² Π΄ΠΈΠ°Π»ΠΎΠ³Π°Ρ…. Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ красивСй ΠΈ Π²Ρ‹ обСзопаситС свою ΠΈΠ³Ρ€Ρƒ ΠΎΡ‚ ошибок ΠΈ нСпрСдсказуСмых Ρ€Π΅Π°ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈ использовании инвСнтаря Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³Π° (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π°Π²Ρ‚ΠΎΡ€ Π½Π΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ).

НапримСр:

require "noinv"
...
dlg {
        nam = 'ΠžΡ…Ρ€Π°Π½Π½ΠΈΠΊ';
        -- Π² Π΄ΠΈΠ°Π»ΠΎΠ³Π°Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ
        noinv = true;
        ...
}

Π€Ρ€Π°Π·Ρ‹

Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ понятиСм Π² Π΄ΠΈΠ°Π»ΠΎΠ³Π°Ρ… являСтся _Ρ„Ρ€Π°Π·Π°_. Π€Ρ€Π°Π·Ρ‹ это Π½Π΅ просто вопрос-ΠΎΡ‚Π²Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ. Π€Ρ€Π°Π·Π° являСтся Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ, ΠΈ Π² этом смыслС, вСсь Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ СдинствСнной Ρ„Ρ€Π°Π·ΠΎΠΉ. НапримСр:

dlg {
        nam = 'Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€';
        title = [[Π Π°Π·Π³ΠΎΠ²ΠΎΡ€ с ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†ΠΎΠΌ]];
        enter = [[Π― обратился ΠΊ ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†Ρƒ.]];
        phr = {
                { 'Π£ вас Π΅ΡΡ‚ΡŒ Π±ΠΎΠ±Ρ‹?', '-- НСт.'},
                { 'Π£ вас Π΅ΡΡ‚ΡŒ шоколад?', '-- НСт.'},
                { 'Π£ вас Π΅ΡΡ‚ΡŒ квас?', '-- Π”Π°',
                        { 'А сколько ΠΎΠ½ стоит?', '-- 50 Ρ€ΡƒΠ±Π»Π΅ΠΉ.' },
                        { 'А ΠΎΠ½ Ρ…ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΉ?', '-- Π₯олодильник сломался.',
                                { 'Π‘Π΅Ρ€Ρƒ Π΄Π²Π°!', 'ΠžΡΡ‚Π°Π»ΡΡ ΠΎΠ΄ΠΈΠ½.',
                                        { 'Π”Π°ΠΉΡ‚Π΅ ΠΎΠ΄ΠΈΠ½!', function() p [[Ок!]]; take 'квас'; end };
                                }
                        }
                }
        }
}

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Ρ„Ρ€Π°Π·Π° задаСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ `phr ` ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³. Π€Ρ€Π°Π·Π° содСрТит Π² сСбС Π²Ρ‹Π±ΠΎΡ€Ρ‹, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² сСбС Π²Ρ‹Π±ΠΎΡ€Ρ‹ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅...

Π€Ρ€Π°Π·Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΠ°Ρ€Ρ‹: ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ -- рСакция. Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС, это строки. Но ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ функциями. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π±Ρ‹Π²Π°Π΅Ρ‚ рСакция, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎ измСнСнию ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°.

ΠŸΠ°Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ простой:

{'Вопрос', 'ΠžΡ‚Π²Π΅Ρ‚ }

А ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² сСбС массив ΠΏΠ°Ρ€:

{'Вопрос', 'ΠžΡ‚Π²Π΅Ρ‚',
        {'Под-вопрос1', 'Под-ΠΎΡ‚Π²Π΅Ρ‚1' },
        {'Под-вопрос2', 'Под-ΠΎΡ‚Π²Π΅Ρ‚2' },
}

На самом Π΄Π΅Π»Π΅, Ссли Π²Ρ‹ посмотритС Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `phr `, Ρ‚ΠΎ Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ массив Π²Ρ‹Π±ΠΎΡ€ΠΎΠ² Ρ‚ΠΎΠΆΠ΅ являСтся Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π² Π³Π»Π°Π²Π½ΡƒΡŽ Ρ„Ρ€Π°Π·Ρƒ `phr `, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ ΠΏΠ°Ρ€Π° отсутствуСт:

dlg {
        nam = 'Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€';
        title = [[Π Π°Π·Π³ΠΎΠ²ΠΎΡ€ с ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†ΠΎΠΌ]];
        enter = [[Π― обратился ΠΊ ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†Ρƒ.]];
        phr = {
        -- Ρ‚ΡƒΡ‚ ΠΌΠΎΠ³ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ вопрос ΠΎΡ‚Π²Π΅Ρ‚ 1-Π³ΠΎ уровня!
        -- 'Π“Π»Π°Π²Π½Ρ‹ΠΉ вопрос', 'Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚',
                { 'Π£ вас Π΅ΡΡ‚ΡŒ Π±ΠΎΠ±Ρ‹?', '-- НСт.'},
                { 'Π£ вас Π΅ΡΡ‚ΡŒ шоколад?', '-- НСт.'},
                { 'Π£ вас Π΅ΡΡ‚ΡŒ квас?', '-- Π”Π°',
                        { 'А сколько ΠΎΠ½ стоит?', '-- 50 Ρ€ΡƒΠ±Π»Π΅ΠΉ.' },
                        { 'А ΠΎΠ½ Ρ…ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΉ?', '-- Π₯олодильник сломался.',
                                { 'Π‘Π΅Ρ€Ρƒ Π΄Π²Π°!', 'ΠžΡΡ‚Π°Π»ΡΡ ΠΎΠ΄ΠΈΠ½.',
                                        { 'Π”Π°ΠΉΡ‚Π΅ ΠΎΠ΄ΠΈΠ½!', function() p [[Ок!]]; take 'квас'; end };
                                }
                        }
                }
        }
}

На самом Π΄Π΅Π»Π΅, Ρ‚Π°ΠΊ ΠΈ Π΅ΡΡ‚ΡŒ. И Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ "Π“Π»Π°Π²Π½Ρ‹ΠΉ вопрос" ΠΈ "Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚", Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ этот Π³Π»Π°Π²Π½Ρ‹ΠΉ вопрос. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ Ρ„Ρ€Π°Π·Π° `phr ` автоматичСски раскрываСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла Π² Π΄ΠΈΠ°Π»ΠΎΠ³Π°Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ СдинствСнной Ρ„Ρ€Π°Π·Ρ‹. И Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ Π²Ρ‹Π±ΠΎΡ€ΠΎΠ², Ρ‡Π΅ΠΌ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ Ρ„Ρ€Π°Π·Ρƒ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρƒ `phr ` Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ вопрос-ΠΎΡ‚Π²Π΅Ρ‚, Π½ΠΎ ΠΌΡ‹ сразу ΠΏΠΎΠΏΠ°Π΄Π°Π΅ΠΌ Π² массив Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ понятно.

Когда ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ Π½Π° самом Π΄Π΅Π»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΠ΄Π½ΠΎΠΉ Ρ„Ρ€Π°Π·ΠΎΠΉ, ΠΌΡ‹ Π½Π΅ совсСм ΠΏΡ€Π°Π²Ρ‹. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Ρ„Ρ€Π°Π·ΠΎΠΉ, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находятся Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Ρ€Π°Π·Ρ‹... Π­Ρ‚ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π½Π°ΠΌ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ„Ρ€Π°Π·Ρ‹ -- это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹! ΠšΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³-Π΄Ρ€ΡƒΠ³Π°. Π˜Ρ‚Π°ΠΊ, взглянСм Π½Π° Π΄ΠΈΠ°Π»ΠΎΠ³ свСТим взглядом:

dlg {
        nam = 'Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€';
        title = [[Π Π°Π·Π³ΠΎΠ²ΠΎΡ€ с ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†ΠΎΠΌ]];
        enter = [[Π― обратился ΠΊ ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†Ρƒ.]];
        phr = { -- это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Ρ„Ρ€Π°Π·Π°, Π±Π΅Π· dsc ΠΈ act
                -- это 1-я Ρ„Ρ€Π°Π·Π°, Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Ρ€Π°Π·Ρ‹ с dsc ΠΈ act
                { 'Π£ вас Π΅ΡΡ‚ΡŒ Π±ΠΎΠ±Ρ‹?', '-- НСт.'},
                -- это 2-я Ρ„Ρ€Π°Π·Π°, Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Ρ€Π°Π·Ρ‹ с dsc ΠΈ act
                { 'Π£ вас Π΅ΡΡ‚ΡŒ шоколад?', '-- НСт.'},
                -- это 3-я Ρ„Ρ€Π°Π·Π°, Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Ρ€Π°Π·Ρ‹ с dsc ΠΈ act
                { 'Π£ вас Π΅ΡΡ‚ΡŒ квас?', '-- Π”Π°',
                -- это 1-я Ρ„Ρ€Π°Π·Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ 3ΠΉ Ρ„Ρ€Π°Π·Ρ‹ с dsc ΠΈ act
                { 'А сколько ΠΎΠ½ стоит?', '-- 50 Ρ€ΡƒΠ±Π»Π΅ΠΉ.' },
                        { 'А ΠΎΠ½ Ρ…ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΉ?', '-- Π₯олодильник сломался.',
                                { 'Π‘Π΅Ρ€Ρƒ Π΄Π²Π°!', 'ΠžΡΡ‚Π°Π»ΡΡ ΠΎΠ΄ΠΈΠ½.',
                                    -- здСсь act Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
                                        { 'Π”Π°ΠΉΡ‚Π΅ ΠΎΠ΄ΠΈΠ½!', function() p [[Ок!]]; take 'квас'; end };
                                }
                        }
                }
        }
}

Как Π²ΠΈΠ΄ΠΈΠΌ, Π΄ΠΈΠ°Π»ΠΎΠ³ -- это ΠΊΠΎΠΌΠ½Π°Ρ‚Π°, Π° Ρ„Ρ€Π°Π·Ρ‹ -- ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ станСт понятным дальнСйшСС ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

*Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!* По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· вопросов Π² спискС, Π΄Π²ΠΈΠΆΠΎΠΊ повторяСт Π΅Π³ΠΎ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚Π²Π΅Ρ‚. Π­Ρ‚ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΈΠ°Π»ΠΎΠ³ выглядСл связанным. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ настройку `std.phrase_show `:
```
std.phrase_show = false -- Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π·Ρƒ-вопрос ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅
```

Π­Ρ‚Π° настройка дСйствуСт Π½Π° всС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ, устанавливайтС Π΅Π΅ Π² `init() ` ΠΈΠ»ΠΈ `start() ` Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Атрибуты Ρ„Ρ€Π°Π·

Рассмотрим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ„Ρ€Π°Π·Ρ‹:

phr = {
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!' },
                {'Бинюю', 'Π’ΠΎΡ‚!' },
        }
}

Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот Π΄ΠΈΠ°Π»ΠΎΠ³, Ρ‚ΠΎ Π² послС Π²Ρ‹Π±ΠΎΡ€Π°, скаТСм, красной Ρ‚Π°Π±Π»Π΅Ρ‚ΠΊΠΈ, Ρƒ нас останСтся Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π±ΠΎΡ€ синСй Ρ‚Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. Но наш замысСл, явно Π½Π΅ Π² этом! БущСствуСт нСсколько способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ.

Π’ΠΎΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ `pop() ` -- Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³Π°:

phr = {
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', function() p 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!'; pop() end; },
                {'Бинюю', function() p 'Π’ΠΎΡ‚!'; pop() end; },
        }
}

Или, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ записи:

phr = {
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', pfn(pop) 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!' },
                {'Бинюю', pfn(pop) 'Π’ΠΎΡ‚!' },
        }
}

Но это Π½Π΅ слишком ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ссли эти Ρ„Ρ€Π°Π·Ρ‹ содСрТат Π² сСбС Π½ΠΎΠ²Ρ‹Π΅ Ρ„Ρ€Π°Π·Ρ‹? Π’ случаях, ΠΊΠΎΠ³Π΄Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€, ΠΈ этот Π²Ρ‹Π±ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ СдинствСнным, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Ρƒ Ρ„Ρ€Π°Π·Ρ‹ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `only `:

phr = {
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                only = true,
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!' },
                {'Бинюю', 'Π’ΠΎΡ‚!' },
        }
}

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, послС Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Ρ€Π°Π·Ρ‹, всС Ρ„Ρ€Π°Π·Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ контСкста Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° частая ситуация, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„Ρ€Π°Π·Π° Π½Π΅ ΠΏΡ€ΡΡ‚Π°Π»Π°ΡΡŒ послС Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ дСлаСтся Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Ρ„Π»Π°Π³Π° `true `:

phr = {
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                only = true,
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!' },
                {'Бинюю', 'Π’ΠΎΡ‚!' },
                { true, 'А какая Π»ΡƒΡ‡ΡˆΠ΅?', 'Π’Π΅Π±Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ.' }, -- Ρ„Ρ€Π°Π·Π°
                -- которая Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ скрыта
        }
}

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ запись, с явным Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° `always `:

phr = {
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                only = true,
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!' },
                {'Бинюю', 'Π’ΠΎΡ‚!' },
                { always = true, 'А какая Π»ΡƒΡ‡ΡˆΠ΅?', 'Π’Π΅Π±Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ.' }, -- Ρ„Ρ€Π°Π·Π°
                -- которая Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ скрыта
        }
}

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π§Ρ‚ΠΎ-Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„Ρ€Π°Π·Π° Π±Ρ‹Π»Π° ΠΏΠΎΠΊΠ°Π·Π°Π½Π°(ΠΈΠ»ΠΈ спрятана) ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ? Для этого Π΅ΡΡ‚ΡŒ функция-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `cond `.

phr = {
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                only = true,
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!' },
                {'Бинюю', 'Π’ΠΎΡ‚!' },
                { true, 'А какая Π»ΡƒΡ‡ΡˆΠ΅?', 'Π’Π΅Π±Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ.' }, -- Ρ„Ρ€Π°Π·Π°
                -- которая Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ скрыта
        },
        { cond = function() return have 'яблоко' end,
                'А Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ яблоко?', 'Бпасибо, Π½Π΅Ρ‚.' };
}

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρƒ ΠΈΠ³Ρ€ΠΎΠΊΠ° яблока, покаТСтся Π²Π΅Ρ‚ΠΊΠ° Π΄ΠΈΠ°Π»ΠΎΠ³Π° "А Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ яблоко?".

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ уровня(контСкста) Π΄ΠΈΠ°Π»ΠΎΠ³Π° исчСрпаны. Для этого слуТит функция-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `onempty `.

phr = {
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                only = true,
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!' },
                {'Бинюю', 'Π’ΠΎΡ‚!' },
                onempty = function()
                        p [[Π’Ρ‹ сдСлал свой Π²Ρ‹Π±ΠΎΡ€.]]
                        pop()
                end;
        },
        { cond = function() return have 'яблоко' end,
                'А Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ яблоко?', 'Бпасибо, Π½Π΅Ρ‚.' };
}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ `onempty `, автоматичСский Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π½Π΅ производится, прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ `onempty ` сдСлаСт всС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ.

ВсС описанныС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ установлСны Ρƒ любой Ρ„Ρ€Π°Π·Ρ‹. Π’ Ρ‚ΠΎΠΌ числС ΠΈ Π½Π° 1-ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅:

phr = {
        onempty = function()
                p [[Π’ΠΎΡ‚ ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ.]]
                walkout()
        end;
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                only = true,
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!' },
                {'Бинюю', 'Π’ΠΎΡ‚!' },
                onempty = function()
                        p [[Π’Ρ‹ сдСлал свой Π²Ρ‹Π±ΠΎΡ€.]]
                        pop()
                end;
        },
        { cond = function() return have 'яблоко' end,
                'А Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ яблоко?', 'Бпасибо, Π½Π΅Ρ‚.' };
}

Π’Π΅Π³ΠΈ

Волько Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассмотрСли ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ довольно слоТныС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ. Однако, ΠΈ этих срСдств ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ. Иногда Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ„Ρ€Π°Π·Π°ΠΌ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… мСст Π΄ΠΈΠ°Π»ΠΎΠ³Π°. НапримСр, Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΡ…, ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… состояниС. А Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… Π²Π΅Ρ‚Π²Π΅ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³Π° Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

ВсС это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ для Ρ„Ρ€Π°Π·, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Ρ‚Π΅Π³. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π·Ρƒ с Ρ‚Π΅Π³ΠΎΠΌ ΠΎΡ‡Π΅Π½ΡŒ просто:

phr = {
        { '#Ρ‡Ρ‚ΠΎ?', 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                {'#красная', 'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!' },
                {'#синяя', 'Бинюю', 'Π’ΠΎΡ‚!' },
        },
}

Как Π²ΠΈΠ΄ΠΈΠΌ, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Ρ€Π°Π·Ρ‹ строки, которая начинаСтся Π½Π° символ `# ` - ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Π΅Π³Π°.

Для Ρ‚Π°ΠΊΠΈΡ… Ρ„Ρ€Π°Π· Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ `seen ` ΠΈΠ»ΠΈ `enable ` / `disable `. НапримСр, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° `only ` ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

phr = {
        { '#Ρ‡Ρ‚ΠΎ?', 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                {'#красная', 'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!'
                        cond = function(s)
                                return not closed('#синяя')
                        end
                },
                {'#синяя', 'Бинюю', 'Π’ΠΎΡ‚!',
                        cond = function(s)
                                return not closed('#красная')
                        end
                },
        },
}

Π’Π΅Π³ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠ·Π½Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ„Ρ€Π°Π·, Π΄Π΅Π»Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Ρ€Π°Π·Π°ΠΌΠΈ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `push ` ΠΈ `pop `.

НуТно ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΏΠΎ `push `, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π΅ Π½Π° ΠΎΠ΄Π½Ρƒ Ρ„Ρ€Π°Π·Ρƒ, Π° Π½Π° список Ρ„Ρ€Π°Π· этой Ρ„Ρ€Π°Π·Ρ‹. Π’ΠΎ-Π΅ΡΡ‚ΡŒ раскрываСм Π΅Π΅, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ это сдСлано для Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„Ρ€Π°Π·Ρ‹ `phr `. НапримСр:

phr = {
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                only = true,
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!', next = '#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅' },
                { 'Бинюю', 'Π’ΠΎΡ‚!', next = '#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅' },
        },
        { false, '#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅',
                {'Π― сдСлал Π²Π΅Ρ€Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€?', 'ВрСмя ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚.'}
        },
}

Π’ΡƒΡ‚ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ сразу нСсколько ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ²:

{ hidden = true, '#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅',
        {'Π― сдСлал Π²Π΅Ρ€Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€?', 'ВрСмя ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚.'}
},

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ Π½Π΅ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎ, Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ. Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Ρƒ Ρ„Ρ€Π°Π·Ρ‹ Π½Π΅ описана рСакция,Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Ρ€Π°Π·Ρ‹:

phr = {
        { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                only = true,
                {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!', next = '#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅' },
                { 'Бинюю', 'Π’ΠΎΡ‚!', next = '#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅' },
        },
        { false, '#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅', [[Π― взял Ρ‚Π°Π±Π»Π΅Ρ‚ΠΊΡƒ ΠΈ мастСр Ρ…ΠΈΡ‚Ρ€ΠΎ улыбнулся.]],
                {'Π― сдСлал Π²Π΅Ρ€Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€?', 'ВрСмя ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚.'},
                {'Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ дальшС?', 'Π’Ρ‹ свободСн.'},
        },
}

ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Ρ‚Π°Π±Π»Π΅Ρ‚ΠΊΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ„Ρ€Π°Π·Ρ‹ `#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅ `, Π° ΡƒΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ прСдставлСн Π²Ρ‹Π±ΠΎΡ€.

Если Π²Π°ΠΌ нравится линСйная запись, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

dlg {
        nam = 'Π΄ΠΈΠ°Π»ΠΎΠ³';
        phr = {
                { 'Π§Ρ‚ΠΎ это Ρƒ вас?', 'Π’Π°Π±Π»Π΅Ρ‚ΠΊΠΈ. ΠšΡ€Π°ΡΠ½Π°Ρ ΠΈ синяя. Π’Π°ΠΌ ΠΊΠ°ΠΊΡƒΡŽ?',
                        only = true,
                        {'ΠšΡ€Π°ΡΠ½ΡƒΡŽ', 'Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅!', next = '#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅' },
                        { 'Бинюю', 'Π’ΠΎΡ‚!', next = '#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅' },
                }
        }
}:with {
        { '#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅', [[Π― взял Ρ‚Π°Π±Π»Π΅Ρ‚ΠΊΡƒ ΠΈ мастСр Ρ…ΠΈΡ‚Ρ€ΠΎ улыбнулся.]],
                {'Π― сдСлал Π²Π΅Ρ€Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€?', 'ВрСмя ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚.'},
                {'Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ дальшС?', 'Π’Ρ‹ свободСн.'},
        },
       }

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `phr ` Π΄ΠΈΠ°Π»ΠΎΠ³Π° Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹. Но Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π·Π°Π΄Π°Π² `obj ` ΠΈΠ»ΠΈ `with `. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ раскрываСтся 1-я Ρ„Ρ€Π°Π·Π°, Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Ρ€Π°Π·Ρ‹ Π²Ρ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ внимания, Ρƒ Ρ„Ρ€Π°Π·Ρ‹ `#ΠΎΡ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ΅ ` Π½Π΅ стоит `false `), Π½ΠΎ Π²Ρ‹ смоТСтС Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ Π½Π° эти Ρ„Ρ€Π°Π·Ρ‹.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

Как Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² INSTEAD ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² состоянии ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚/Π·Π°ΠΊΡ€Ρ‹Ρ‚ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½/Π²ΠΊΠ»ΡŽΡ‡Π΅Π½. Как это соотвСтствуСт Ρ„Ρ€Π°Π·Π°ΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³Π°?

Для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„Ρ€Π°Π·, послС Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Ρ€Π°Π·Π° _закрываСтся_. ΠŸΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π²Ρ…ΠΎΠ΄Π΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ всС Ρ„Ρ€Π°Π·Ρ‹ _ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ_.

Для Ρ„Ρ€Π°Π· с `always = true ` (ΠΈΠ»ΠΈ `true ` Π² Π½Π°Ρ‡Π°Π»Π΅ опрСдСлСния) -- Ρ‚Π°ΠΊΠΎΠ³ΠΎ закрытия Π½Π΅ происходит.

Для Ρ„Ρ€Π°Π· с `hidden = true ` (ΠΈΠ»ΠΈ `false ` Π² Π½Π°Ρ‡Π°Π»Π΅ опрСдСлСния) -- Ρ„Ρ€Π°Π·Π° Π±ΡƒΠ΄Π΅Ρ‚ создана ΠΊΠ°ΠΊ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ. Она Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄ΠΈΠΌΠ° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ явно Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°.

Для Ρ„Ρ€Π°Π· с `cond() `, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ просмотрС Ρ„Ρ€Π°Π· вызываСтся этот ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈ Π² зависимости οΏ½οΏ½Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния (`true ` / Π½Π΅ `true `) Ρ„Ρ€Π°Π·Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ.

Зная это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ/ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π·Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ функциями Π²ΠΈΠ΄Π°: `disable ` / `enable ` / `empty ` / `open ` / `close ` / `closed ` / `disabled ` ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅...

Однако, Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹ это ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² самом Π΄ΠΈΠ°Π»ΠΎΠ³Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС Ρ„Ρ€Π°Π·Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Ρ‚Π΅Π³Π°ΠΌ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состояниС/Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π·Ρ‹ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠ½Π°Ρ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

Π§Ρ‚ΠΎ касаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ `push ` / `pop `, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… явно ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΠΈΠ°Π»ΠΎΠ³Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

_'диалог':push '#новая'

Но Π»ΡƒΡ‡ΡˆΠ΅ это Π΄Π΅Π»Π°Ρ‚ΡŒ Π² самом Π΄ΠΈΠ°Π»ΠΎΠ³Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² `enter `.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ `:reset `, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сбрасываСт стСк ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ устанавливаСт ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²ΡƒΡŽ Ρ„Ρ€Π°Π·Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

enter = function(s)
        s:reset '#Π½Π°Ρ‡Π°Π»ΠΎ'
end
Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ `enable ` / `disable ` / `open ` / `close ` Ρ„Ρ€Π°Π·Ρ‹, Ρ‚ΠΎ Π²Ρ‹ выполняСтС дСйствиС ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π°Π΄ этой Ρ„Ρ€Π°Π·ΠΎΠΉ, Π° Π½Π΅ Π½Π°Π΄ Ρ„Ρ€Π°Π·Π°ΠΌΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΡŒ. Но Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π΅ Ρ„Ρ€Π°Π· Π΄Π²ΠΈΠΆΠΎΠΊ остановится Π½Π° Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ/Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅-Ρ„Ρ€Π°Π·Π΅ ΠΈ Π½Π΅ Π²ΠΎΠΉΠ΄Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΡŒ, этого достаточно.

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Π’ STEAD3 ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ спСцифичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ВсС Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π° класса:

БистСмныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‡ΡŒΠ΅ имя начинаСтся с символа `@ ` ΠΈΠ»ΠΈ `$ `. Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² _модулях_. Они Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ смСрти ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠ΅ `gamefile `, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈΠ³Ρ€Ρ‹ ΠΈΠ· сохранСния, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅). ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: `@timer `, `@prefs `, `@snd `.

Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ своих ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎ ссылкС, Π±Π΅Π· явного помСщСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² сцСну ΠΈΠ»ΠΈ ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ, Π½ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ дСйствия Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² -- особСнный.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ `@

`

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π½ΠΎ Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ 'ссылок'.

ΠŸΡƒΡΡ‚ΡŒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ссылку, ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² сцСну, Π½ΠΎ стоит Π»ΠΈ это Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΌ простом случаС?

Как Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ систСмный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚?

obj {
        nam = '@walk';
        act = function(s, w)
                walk(w, false, false)
        end;
}
room {
        nam = 'main';
        title = 'Начало';
        decor = [[ΠΠ°Ρ‡Π°Ρ‚ΡŒ {@walk старт|ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅}]];
}

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ссылку "ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅" Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ `act ` ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `@walk ` с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ "старт".

На самом Π΄Π΅Π»Π΅, Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ stdlib ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, с ΠΈΠΌΠ΅Π½Π΅ΠΌ `@ `, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ свои ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ссылок ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

xact.walk = walk

room {
        nam = 'main';
        title = 'Начало';
        decor = [[ΠΠ°Ρ‡Π°Ρ‚ΡŒ {@ walk старт|ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅}]];
}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π° ΠΏΡ€ΠΎΠ±Π΅Π» послС `@ `. Данная запись Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

xact.myprint = function(w)
        p (w)
end

room {
        nam = 'main';
        title = 'Начало';
        decor = [[НаТми {@ myprint "hello world"|Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ}]];
}

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‡ΡŒΠ΅ имя начинаСтся Π½Π° символ `$ ` Ρ‚ΠΎΠΆΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ систСмными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ½ΠΈ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

Если Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ тСкста встрСчаСтся "ссылка" Π²ΠΈΠ΄Π°:

{$my a b c|тСкст}

Π’ΠΎ происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Ρ€ΠΎΠ»ΡŒ подстановки.

Π—Π°Ρ‡Π΅ΠΌ это Π½ΡƒΠΆΠ½ΠΎ? ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ записи Ρ„ΠΎΡ€ΠΌΡƒΠ» ΠΈΠ· тСкстового Π²ΠΈΠ΄Π° Π² графичСскиС. Π’Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ `$math ` ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² своСм `act ` ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ тСкст Π² графичСскоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (спрайт) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² тСкстовый ΠΏΠΎΡ‚ΠΎΠΊ. Π’ΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΊΡ€Π°ΠΉΠ½Π΅ просто, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

{$math|(2+3*x)/y^2}

ДинамичСскиС события

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° врСмя ΠΈΠ³Ρ€Ρ‹ увСличиваСтся Π½Π° `1 `. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, это ΠΈΠΌΠ΅Π΅Ρ‚ смысл для ΠΆΠΈΠ²Ρ‹Ρ… пСрсонаТСй, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… процСссов ΠΈΠ³Ρ€Ρ‹. Алгоритм шага ΠΈΠ³Ρ€Ρ‹ выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

НапримСр, сдСлаСм Барсика ΠΆΠΈΠ²Ρ‹ΠΌ:

obj {
        nam = 'Барсик';
        { -- Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ массив lf
                lf = {
                        [1] = 'Барсик ΡˆΠ΅Π²Π΅Π»ΠΈΡ‚ΡΡ Ρƒ мСня Π·Π° ΠΏΠ°Π·ΡƒΡ…ΠΎΠΉ.',
                        [2] = 'Барсик выглядываСт ΠΈΠ·-Π·Π° ΠΏΠ°Π·ΡƒΡ…ΠΈ.',
                        [3] = 'Барсик ΠΌΡƒΡ€Π»Ρ‹Ρ‡ΠΈΡ‚ Ρƒ мСня Π·Π° ΠΏΠ°Π·ΡƒΡ…ΠΎΠΉ.',
                        [4] = 'Барсик Π΄Ρ€ΠΎΠΆΠΈΡ‚ Ρƒ мСня Π·Π° ΠΏΠ°Π·ΡƒΡ…ΠΎΠΉ.',
                        [5] = 'Π― Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽ Ρ‚Π΅ΠΏΠ»ΠΎ Барсика Ρƒ сСбя Π·Π° ΠΏΠ°Π·ΡƒΡ…ΠΎΠΉ.',
                        [6] = 'Барсик высовываСт Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΈΠ·-Π·Π° ΠΏΠ°Π·ΡƒΡ…ΠΈ ΠΈ осматриваСт ΠΌΠ΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒ.',
                };
        };
        life = function(s)
                local r = rnd(5);
                if r > 2 then -- Π΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π΅ всСгда
                        return;
                end
                r = rnd(#s.lf); -- символ # -- число элСмСнтов Π² массивС
                p(s.lf[r]); -- Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΠ΄Π½ΠΎ ΠΈΠ· 6 состояний Барсика
        end;
....

И Π²ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² ΠΈΠ³Ρ€Π΅, ΠΊΠΎΠ³Π΄Π° Барсик ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΊ Π½Π°ΠΌ Π·Π° ΠΏΠ°Π·ΡƒΡ…Ρƒ!

take 'Барсик' -- Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ
lifeon 'Барсик' -- ΠΎΠΆΠΈΠ²ΠΈΡ‚ΡŒ Барсика!

Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π² Ρ‚ΠΎΠΌ числС ΠΈ сцСна) ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `life `, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π°ΠΊΡ‚ ΠΈΠ³Ρ€Ρ‹, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² список ΠΆΠΈΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `lifeon `. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΆΠΈΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `lifeoff `, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ `exit `, ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом.

Если Π² вашСй ΠΈΠ³Ρ€Π΅ ΠΌΠ½ΠΎΠ³ΠΎ "ΠΆΠΈΠ²Ρ‹Ρ…" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌ ΡΠ²Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² спискС, ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ. Для этого, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ числовым ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ (Ρ†Π΅Π»ΠΎΠ΅ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число) `lifeon `, Ρ‡Π΅ΠΌ мСньшС число, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. `1 ` -- самый высокий. Или Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `pri ` Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€Π°Π²Π΄Π°, этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² любом спискС.

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ процСсс Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅, запускайтС Π΅Π³ΠΎ Π² `enter ` ΠΈ удаляйтС Π² `exit `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

room {
        nam  = 'Π’ ΠΏΠΎΠ΄Π²Π°Π»Π΅';
        dsc = [[Π’ΡƒΡ‚ Ρ‚Π΅ΠΌΠ½ΠΎ!]];
        enter = function(s)
                lifeon(s);
        end;
        exit = function(s)
                lifeoff(s);
        end;
        life = function(s)
                if rnd(10) > 8 then
                        p [[Π― ΡΠ»Ρ‹ΡˆΡƒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΡˆΠΎΡ€ΠΎΡ…ΠΈ!]];
                        -- ΠΈΠ·Ρ€Π΅Π΄ΠΊΠ° ΠΏΡƒΠ³Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΡˆΠΎΡ€ΠΎΡ…Π°ΠΌΠΈ
                end
        end;
        way =  { 'Π”ΠΎΠΌ' };
}

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π±Ρ‹Π» Π»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ сцСны Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ `player_moved() `.

obj {
        nam  = 'Ρ„ΠΎΠ½Π°Ρ€ΠΈΠΊ';
        on = false;
        life = function(s)
                if player_moved() then -- Π³Π°ΡΠΈΡ‚ΡŒ Ρ„ΠΎΠ½Π°Ρ€ΠΈΠΊ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°Ρ…
                        s.on = false
                        p "Π― Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΠ» Ρ„ΠΎΠ½Π°Ρ€ΠΈΠΊ."
                        return
                end;
        end;
...
}

Для отслСТивания ΠΏΡ€ΠΎΡ‚Π΅ΠΊΠ°ΡŽΡ‰ΠΈΡ… Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ событий, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `time() ` ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-счСтчик. Для опрСдСлСния мСстополоТСния ΠΈΠ³Ρ€ΠΎΠΊΠ° -- `here() `. Для опрСдСлСния Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ "ΠΆΠΈΠ²ΠΎΠΉ" -- `live() `.

obj {
        nam  = 'Π΄ΠΈΠ½Π°ΠΌΠΈΡ‚';
        timer = 0;
        used = function(s, w)
                if w^'спичка' then -- спичка?
                        if live(s) then
                                return "Π£ΠΆΠ΅ Π³ΠΎΡ€ΠΈΡ‚!"
                        end
                        p "Π― ΠΏΠΎΠ΄ΠΆΠ΅Π³ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‚."
                        lifeon(s)
                        return
                end
                return false -- Ссли Π½Π΅ спичка
        end;
        life = function(s)
                s.timer = s.timer + 1
                if s.timer == 5 then
                        lifeoff(s)
                        if here() == where(s) then
                                p [[Π”ΠΈΠ½Π°ΠΌΠΈΡ‚ взорвался рядом со ΠΌΠ½ΠΎΠΉ!]]
                        else
                                p [[Π― ΡƒΡΠ»Ρ‹ΡˆΠ°Π», ΠΊΠ°ΠΊ взорвался Π΄ΠΈΠ½Π°ΠΌΠΈΡ‚.]];
                        end
                end
        end;
...
}

Если `life ` ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ тСкст события, ΠΎΠ½ пСчатаСтся послС описания сцСны.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° `life ` Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°, (`true ` ΠΈΠ»ΠΈ `false `). Если Π²Ρ‹ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ `true ` -- Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ Π²Π°ΠΆΠ½ΠΎΠ³ΠΎ события, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ вывСдСтся Π΄ΠΎ описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² сцСны, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

p 'Π’ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ вошСл ΠΎΡ…Ρ€Π°Π½Π½ΠΈΠΊ.'
return true

Или:

return 'Π’ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ вошСл ΠΎΡ…Ρ€Π°Π½Π½ΠΈΠΊ.', true

Если Π²Ρ‹ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ `false `, Ρ‚ΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° `life ` ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² прСрвСтся Π½Π° вас. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ `walk ` ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° `life `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

life = function()
        walk 'theend'
        return false -- это послСдний life
end

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ `life ` ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠ½Π°Ρ‚, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ `nolife `. НапримСр:

require "noinv"
require "nolife"

dlg {
        nam = 'ΠžΡ…Ρ€Π°Π½Π½ΠΈΠΊ';
        noinv = true;
        nolife = true;
...
}

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ стоит Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ вопрос ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈΠ· `life ` ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `walk ` Π²Π½ΡƒΡ‚Ρ€ΠΈ `life `, Ρ‚ΠΎ Π²Π°ΠΌ слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Если `life ` пСрСносит ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² Π½ΠΎΠ²ΡƒΡŽ Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ, Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдполагаСтся Ρ‡Ρ‚ΠΎ Π²Ρ‹:

НСкоторыС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ пояснСний.

`game:reaction() ` -- позволяСт Π²Π·ΡΡ‚ΡŒ/ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ссли Π·Π°Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² `false ` это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ.

`game:events() ` -- позволяСт Π²Π·ΡΡ‚ΡŒ/ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ `life ` ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹Π΅ ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹Π΅ сообщСния, Π·Π°Π΄Π°Π² `false `, `false ` ΠΌΡ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΠ»ΠΈ вСсь Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… `life ` ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π’ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ функция `life_walk() `, которая Π΄Π΅Π»Π°Π΅Ρ‚ описанныС дСйствия. Π’Π°ΠΌ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ `false `.

Π“Ρ€Π°Ρ„ΠΈΠΊΠ°

ГрафичСский ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ INSTEAD Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ сцСны `pic `, ΠΈ воспринимаСт Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

room {
        pic = 'gfx/home.png';
        nam = 'Π”ΠΎΠΌΠ°';
        dsc = 'Π― Ρƒ сСбя Π΄ΠΎΠΌΠ°';
};
_*Π’Π°ΠΆΠ½ΠΎ!*_
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π² путях Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прямыС `/ `. Π’Π°ΠΊΠΆΠ΅, Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΠΌΠ΅Π½Π°Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ латинскиС строчныС символы. Π­Ρ‚ΠΈΠΌ самым Π²Ρ‹ обСзопаситС свою ΠΈΠ³Ρ€Ρƒ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° всСх Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, ΠΊΡƒΠ΄Π° ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ INSTEAD.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, `pic ` ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Ρ€Π°ΡΡˆΠΈΡ€ΡΡ возмоТности Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Если Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ сцСнС Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `pic `, Ρ‚ΠΎ бСрСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `game.pic `. Если Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΈ ΠΎΠ½, Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π½Π΅ отобраТаСтся.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ всС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ png ΠΈ (ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€) jpg.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ `gif ` Ρ„Π°ΠΉΠ»Ρ‹.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ графичСскиС изобраТСния прямо Π² тСкст, Π² Ρ‚ΠΎΠΌ числС Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹, заглавия ΠΊΠΎΠΌΠ½Π°Ρ‚ ΠΈ `dsc ` с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `fmt.img ` (Для этого Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ `fmt `).

НапримСр:

require "fmt"

obj {
        nam = 'яблоко'
        disp = 'Π―Π±Π»ΠΎΠΊΠΎ'..fmt.img('img/apple.png');
}

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ сцСны всСгда слСдуСт ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ `pic ` Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, Π° Π½Π΅ вставки `fmt.img ` Π² `dsc ` ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹.

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° сцСны ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ `fmt.img ` ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² соотвСтствии с настройками INSTEAD (ΠΌΠ°ΡΡˆΡ‚Π°Π± Ρ‚Π΅ΠΌΡ‹), Π° `pic ` -- ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ `pic ` ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ свойствами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ отслСТивания ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊΠ»ΠΈΠΊΠΎΠ² ΠΌΡ‹ΡˆΡŒΡŽ.

Если Π²Ρ‹ помСститС `fmt.img ` Π²Π½ΡƒΡ‚Ρ€ΡŒ `{ ` ΠΈ `} `, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку.

obj {
        nam = 'яблоко';
        disp = 'яблоко ' ..img('img/apple.png');
        dsc = function(s)
                p ("На ΠΏΠΎΠ»Ρƒ Π»Π΅ΠΆΠΈΡ‚ {яблоко",fmt.img 'img/apple.png', "}");
                -- Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:
                -- return "На ΠΏΠΎΠ»Ρƒ Π»Π΅ΠΆΠΈΡ‚ {яблоко"..fmt.img('img/apple.png').."}";
                -- p "На ΠΏΠΎΠ»Ρƒ Π»Π΅ΠΆΠΈΡ‚ {яблоко"..fmt.img('img/apple.png').."}";
                -- ΠΈΠ»ΠΈ dsc = "На ΠΏΠΎΠ»Ρƒ Π»Π΅ΠΆΠΈΡ‚ {яблоко"..fmt.img('img/apple.png').."}";
        end;
}

INSTEAD ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ‚Π΅ΠΊΠ°Π½ΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ тСкстом. Если ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° вставляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `fmt.imgl ` / `fmt.imgr `, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ располоТСна Ρƒ Π»Π΅Π²ΠΎΠ³ΠΎ/ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ края.

_*Π’Π°ΠΆΠ½ΠΎ!*_
ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, вставлСнныС Π² тСкст с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `fmt.imgl ` / `fmt.imgr ` Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ссылками!!! Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… цСлях.

Для задания отступов Π²ΠΎΠΊΡ€ΡƒΠ³ изобраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `pad `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

fmt.imgl 'pad:16,picture.png' -- отступы ΠΏΠΎ 16 ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ края
fmt.imgl 'pad:0 16 16 4,picture.png' -- отступы: Π²Π²Π΅Ρ€Ρ…Ρƒ 0, справа 16, Π²Π½ΠΈΠ·Ρƒ 16, слСва 4
fmt.imgl 'pad:0 16,picture.png' -- отступы: Π²Π²Π΅Ρ€Ρ…Ρƒ 0, справа 16, Π²Π½ΠΈΠ·Ρƒ 0, слСва 16

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ псСвдо-Ρ„Π°ΠΉΠ»Ρ‹ для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ΠΈ пустых областСй:

dsc = fmt.img 'blank:32x32'..[[Π‘Ρ‚Ρ€ΠΎΠΊΠ° с пустым ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.]];
dsc = fmt.img 'box:32x32,red,128'..[[Π‘Ρ‚Ρ€ΠΎΠΊΠ° красным ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠΌ.]];

INSTEAD ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ составныС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

pic = 'gfx/mycat.png;gfx/milk.png@120,25;gfx/fish.png@32,32';

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, составная ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° прСдставляСт собой Π½Π°Π±ΠΎΡ€ ΠΏΡƒΡ‚Π΅ΠΉ ΠΊ изобраТСниям, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… символом `; `. Вторая ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ постфикс Π² Π²ΠΈΠ΄Π΅ `@x~_ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°,y_ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°% `, Π³Π΄Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ 0,0 соотвСтствуСт Π»Π΅Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ» всСго изобраТСния. ΠžΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ считаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ составной ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ -- `gfx/mycat.png `) ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ холста, Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° этот холст.

НалоТСниС происходит для Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π° Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ происходило ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ прСфикс `c `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

pic = 'gfx/galaxy.png;gfx/star.png@c128,132';

ΠžΡ„ΠΎΡ€ΠΌΠΈΠ² Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ составной ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° основС ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ состояния.

Если Π²Ρ‹ Π² своСй ΠΈΠ³Ρ€Π΅ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΈΠ»ΠΈ ΠΊ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌ, Π΄Π΅Π»Π°ΠΉΡ‚Π΅ это ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚Π΅ΠΌΡ‹ ΠΏΠΎΠ΄ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, INSTEAD сам Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ пСрСсчёт ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (ΠΏΡ€ΠΈ этом ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ для ΠΈΠ³Ρ€Ρ‹ выглядят Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΈΠ³Ρ€Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° Π±Π΅Π· ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ). Однако, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ нСбольшиС ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ вычислСний.

Если Π²Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, описанных Π² этой Π³Π»Π°Π²Π΅, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ "sprite", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности ΠΏΠΎ графичСскому ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΡŽ. Но я ΠΊΡ€Π°ΠΉΠ½Π΅ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π² своСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ³Ρ€Π΅.

ΠœΡƒΠ·Ρ‹ΠΊΠ°

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΡƒΠ·Ρ‹ΠΊΠΎΠΉ ΠΈ Π·Π²ΡƒΠΊΠ°ΠΌΠΈ Π²Π°ΠΌ понадобится ΠΌΠΎΠ΄ΡƒΠ»ΡŒ `snd `.

require "snd"

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π² Ρ†ΠΈΠΊΠ»Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΌΡƒΠ·Ρ‹ΠΊΡƒ, которая задаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: `snd.music(ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ) `.

_*Π’Π°ΠΆΠ½ΠΎ!*_
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π² путях Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прямыС `/ `. Π’Π°ΠΊΠΆΠ΅, Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΠΌΠ΅Π½Π°Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ латинскиС строчныС символы. Π­Ρ‚ΠΈΠΌ самым Π²Ρ‹ обСзопаситС свою ΠΈΠ³Ρ€Ρƒ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° всСх Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, ΠΊΡƒΠ΄Π° ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ INSTEAD.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ², Π½ΠΎ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ogg, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ поддСрТиваСтся Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΎ всСх вСрсиях INSTEAD (для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ).

_*Π’Π°ΠΆΠ½ΠΎ!*_
Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΡΠ²Π»ΡΡ‚ΡŒ ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ использовании Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€Π½ΠΎΠΉ ΠΌΡƒΠ·Ρ‹ΠΊΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дистрибутивах Linux ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (ошибки Π² связкС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ SDL_mixer ΠΈ libmikmod).
Π’Π°ΠΊΠΆΠ΅, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ 'mid' Ρ„Π°ΠΉΠ»Ρ‹, Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΈΠ³Ρ€ΠΎΠΊ ΡƒΡΠ»Ρ‹ΡˆΠΈΡ‚ ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Windows вСрсии INSTEAD (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, Unix вСрсии SDL_mixer собраны Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ timidity).

Π’ качСствС частоты ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ частоты ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ `11025 `.

room {
        pic = 'gfx/street.png';
        enter = function()
                snd.music 'mus/rain.ogg'
        end;
        nam = 'Π½Π° ΡƒΠ»ΠΈΡ†Π΅';
        dsc = 'На ΡƒΠ»ΠΈΡ†Π΅ ΠΈΠ΄Π΅Ρ‚ доТдь.';
};

`snd.music() ` Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ имя Ρ‚Ρ€Π΅ΠΊΠ°.

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `snd.music() ` ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -- количСство ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ (Ρ†ΠΈΠΊΠ»ΠΎΠ²). ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ счСтчик ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `snd.music() ` Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² -- Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. `0 ` -- ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Π΅Ρ‡Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ». `1..n ` -- количСство ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ. `-1 ` -- ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ‚Ρ€Π΅ΠΊΠ° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½ΠΎ.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΌΡƒΠ·Ρ‹ΠΊΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `snd.stop_music() `.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π»ΠΈ ΠΌΡƒΠ·Ρ‹ΠΊΠ°:

snd.music_playing()

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ врСмя нарастания ΠΈ затухания ΠΌΡƒΠ·Ρ‹ΠΊΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π°:

snd.music_fading(o, [i])

Π—Π΄Π΅ΡΡŒ `o ` - врСмя Π² мс. для затухания ΠΈ `i ` - врСмя Π² мс. для нарастания ΠΌΡƒΠ·Ρ‹ΠΊΠΈ. Если Π·Π°Π΄Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -- ΠΎΠ±Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. ПослС Π²Ρ‹Π·ΠΎΠ²Π°, установлСнныС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ всСх ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

Для проигрывания Π·Π²ΡƒΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `snd.play() `. ΠΠ°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ogg, хотя Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ распространСнных Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΡƒΠ·Ρ‹ΠΊΠΎΠΉ ΠΈ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ слСдит Π·Π° процСссом проигрывания ΠΌΡƒΠ·Ρ‹ΠΊΠΈ ΠΈ сохраняСт/восстанавливаСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‚Ρ€Π΅ΠΊ. Выйдя ΠΈΠ· ΠΈΠ³Ρ€Ρ‹ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ² Π΅Π΅ снова, ΠΈΠ³Ρ€ΠΎΠΊ ΡƒΡΠ»Ρ‹ΡˆΠΈΡ‚ Ρ‚ΠΎ ΠΆΠ΅ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡΠ»Ρ‹ΡˆΠ°Π» ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅. Π—Π²ΡƒΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ эффСкты, ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ Π½Π΅ сохраняСт ΠΈ Π½Π΅ восстанавливаСт Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Π΅ события. Π’Π°ΠΊ, Ссли ΠΈΠ³Ρ€ΠΎΠΊ Π½Π΅ успСл Π΄ΠΎΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ Π·Π²ΡƒΠΊ выстрСла ΠΈ Π²Ρ‹ΡˆΠ΅Π» ΠΈΠ· ΠΈΠ³Ρ€Ρ‹, послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° сохранСния ΠΎΠ½ Π½Π΅ ΡƒΡΠ»Ρ‹ΡˆΠΈΡ‚ Π·Π²ΡƒΠΊ (ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅) снова.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ссли ΡƒΡ‡Π΅ΡΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ `snd.play() ` позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π·Π°Ρ†ΠΈΠΊΠ»Π΅Π½Π½Ρ‹Π΅ Π·Π²ΡƒΠΊΠΈ, Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΡƒΠ·Ρ‹ΠΊΠΎΠΉ ΠΈ Π·Π²ΡƒΠΊΠ°ΠΌΠΈ становится ΡƒΠΆΠ΅ Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ.

Π˜Ρ‚Π°ΠΊ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: `snd.play(Ρ„Π°ΠΉΠ», [ΠΊΠ°Π½Π°Π»], [Ρ†ΠΈΠΊΠ»]) `, Π³Π΄Π΅:

Для остановки проигрывания Π·Π²ΡƒΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `snd.stop() `. Для остановки Π·Π²ΡƒΠΊΠ° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅ `snd.stop(ΠΊΠ°Π½Π°Π») `.

_*Π’Π°ΠΆΠ½ΠΎ!*_
Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π·Π°Ρ†ΠΈΠΊΠ»Π΅Π½Π½Ρ‹Π΅ Π·Π²ΡƒΠΊΠΈ, Π²Π°ΠΌ придСтся самим Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… состояниС (Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ снова с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `snd.sound() `) Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `start() `.

НапримСр:

global 'wind_blow' (false)
...
function start()
        if wind_blow then
                snd.play('snd/wind.ogg', 0)
        end
end

Если Π²Π°ΠΌ Π½Π΅ достаточно описанных здСсь Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ со Π·Π²ΡƒΠΊΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ описаниС модуля `snd `.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π°

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ INSTEAD сам занимаСтся Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄Π°. НапримСр, отдСляСт ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ сцСну ΠΎΡ‚ динамичСской. ВыдСляСт курсивом дСйствия ΠΈΠ³Ρ€ΠΎΠΊΠ°. ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ фокус Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² тСкстС ΠΈ Ρ‚.Π΄. ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π²Ρ€ΠΎΠ΄Π΅ `fmt ` ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ качСство Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ³Ρ€Ρ‹ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий со стороны Π°Π²Ρ‚ΠΎΡ€Π°.

НапримСр:

require 'fmt'
fmt.para = true -- Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ отступы ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ΠΎΠ²

И ваша ΠΈΠ³Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° какая-Ρ‚ΠΎ автоматичСская ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ тСкста, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ `fmt ` ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `fmt.filter `. НапримСр:

require "fmt"
fmt.filter = function(s, state)
        -- s -- Π²Ρ‹Π²ΠΎΠ΄
        -- state -- true, Ссли это Ρ‚Π°ΠΊΡ‚ ΠΈΠ³Ρ€Ρ‹ (Π²Ρ‹Π²ΠΎΠ΄ сцСны)
        if state then
                return 'Π­Ρ‚Π° строка Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ Π²Ρ‹Π²ΠΎΠ΄Π°\n'..s;
        end
        return s
end

МногиС Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ Π½Π° INSTEAD Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ своим ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΡ€ΠΎΠΌΠ΅ разбиСния тСкста `dsc ` Π½Π° ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ символов `^^ `, поэтому ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Π° Ρ‚Π°ΠΊ Π»ΠΈ Π²Π°ΠΌ хочСтся Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ своСй ΠΈΠ³Ρ€Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ?

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ½ΠΎΠ³Π΄Π° это всС-Ρ‚Π°ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

*Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!* По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, всС ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ строк, ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ символы табуляции Π²Ρ‹Ρ€Π΅Π·Π°ΡŽΡ‚ΡΡ ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ смысла ΠΈ Π΄Π°ΠΆΠ΅ Π²Ρ€Π΅Π΄Π½Ρ‹. Π’ Ρ€Π΅Π΄ΠΊΠΈΡ… случая��, Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ, Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‚ΡŒ `std.strip_call ` ΠΊΠ°ΠΊ `false ` Π² `init() ` ΠΈΠ»ΠΈ `start() `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
```
std.strip_call = false
obj {
dsc = [[Π’ΡƒΡ‚ Π»Π΅ΠΆΠΈΡ‚ {яблоко}.^^^^]] -- Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ строк
-- Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Ρ€Π΅Π·Π°Π½Ρ‹, хотя это странноС ΠΆΠ΅Π»Π°Π½ΠΈΠ΅
}
```
Но ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠΌ стилС. Для оформлСния сцСны Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ decor ΠΈ/ΠΈΠ»ΠΈ подстановки `$ `.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ простоС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

НапримСр:

room {
        nam = 'main';
        title = 'Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ';
        dsc = fmt.c 'Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ!'; -- Ссли Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 1 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€,
        -- скобки ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ;
}

Π’Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π»ΠΈΡΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° тСкст, Π½ΠΎ ΠΈ Π½Π° изобраТСния, вставлСнныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `fmt.img() `.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ форматирования, Ρ‚ΠΎ прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ относятся ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ строкам (ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π°ΠΌ). Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Π Π°Π·Π±ΠΈΠ²Π°ΠΉΡ‚Π΅ тСкст Π½Π° Π°Π±Π·Π°Ρ†Ρ‹ символами `^ ` ΠΈΠ»ΠΈ `pn() `.

INSTEAD ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ удаляСт лишниС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½Π΅Π²Π°ΠΆΠ½ΠΎ сколько ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² Π²Ρ‹ вставляСтС ΠΌΠ΅ΠΆΠ΄Ρƒ словами, всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ для расчСта расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ словами. Иногда это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ _Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½Ρ‹Π΅ строки_ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ: `fmt.nb(строка) `. НапримСр, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ `fmt ` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½Ρ‹Π΅ строки для создания отступов Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ΠΎΠ². Π’Π°ΠΊΠΆΠ΅, `fmt.nb ` ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ для Π²Ρ‹Π²ΠΎΠ΄Π° слуТСбных символов. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ вся строка-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `fmt.nb ` воспринимаСтся Π΄Π²ΠΈΠΆΠΊΠΎΠΌ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ большоС слово.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ тСкста, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ словами Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚Ρ‹. ΠŸΡ€ΠΈ использовании `fmt.nb ` ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚Ρ‹.

INSTEAD Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†, ΠΎΠ΄Π½Π°ΠΊΠΎ для Π²Ρ‹Π²ΠΎΠ΄Π° простых Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ `fmt.tab() `. Π­Ρ‚Π° функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ позиционирования Π² строкС (табулятор).

fmt.tab(позиция, [Ρ†Π΅Π½Ρ‚Ρ€])

_ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ_, это тСкстовый ΠΈΠ»ΠΈ числовой ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Если Π·Π°Π΄Π°Π½ числовой ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠ½ воспринимаСтся ΠΊΠ°ΠΊ позиция Π² пиксСлях. Если ΠΎΠ½ Π·Π°Π΄Π°Π½ Π² Π²ΠΈΠ΄Π΅ строкового ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° `число% `, Ρ‚ΠΎ ΠΎΠ½ воспринимаСтся ΠΊΠ°ΠΊ позиция, выраТСнная Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… ΠΎΡ‚ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΎΠΊΠ½Π° Π²Ρ‹Π²ΠΎΠ΄Π° сцСны.

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ строковой ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ _Ρ†Π΅Π½Ρ‚Ρ€_ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π·Π° `fmt.tab ` словС, которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ Π² строкС. ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ:

По-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ считаСтся Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `left `.

Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

room {
        nam = 'main';
        disp = 'Начало';
        -- Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ 'Начало!' ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ строки
        dsc = fmt.tab('50%', 'center')..'Начало!';
}

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `fmt.c() `. Π‘ΠΎΠ»Π΅Π΅ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

dsc = function(s)
    p(fmt.tab '0%')
    p "Π‘Π»Π΅Π²Π°";
    p(fmt.tab '100%', 'right')
    p "Π‘ΠΏΡ€Π°Π²Π°";
end

На самом Π΄Π΅Π»Π΅, СдинствСнная ситуация, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ `fmt.tab() ` ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ -- это Π²Ρ‹Π²ΠΎΠ΄ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ситуации, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пишСм Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

-- Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ 'Π Π°Π·' ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ строки
dsc = fmt.tab('50%', 'center')..'Π Π°Π· Π΄Π²Π° Ρ‚Ρ€ΠΈ!';

Волько слово "Π Π°Π·" Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π² Ρ†Π΅Π½Ρ‚Ρ€ строки, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ слова Π±ΡƒΠ΄ΡƒΡ‚ дописаны справа ΠΎΡ‚ этого слова. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ "Π Π°Π· Π΄Π²Π° Ρ‚Ρ€ΠΈ!" ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ `fmt.nb() `.

-- Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ 'Π Π°Π· Π΄Π²Π° Ρ‚Ρ€ΠΈ!' ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ строки
dsc = fmt.tab('50%', 'center')..fmt.nb ('Π Π°Π· Π΄Π²Π° Ρ‚Ρ€ΠΈ!');

Π’ INSTEAD Ρ‚Π°ΠΊΠΆΠ΅ сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ простоС Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ табулятор:

fmt.y(позиция, [Ρ†Π΅Π½Ρ‚Ρ€])

Как ΠΈ Π² случаС с `fmt.tab ` _позиция_, это тСкстовый ΠΈΠ»ΠΈ числовой ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π—Π΄Π΅ΡΡŒ ΠΎΠ½ воспринимаСтся ΠΊΠ°ΠΊ позиция строки, выраТСнная Π² пиксСлях ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… ΠΎΡ‚ высоты области сцСны. НапримСр, `100% ` -- соотвСтствуСт Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ области сцСны. `200% ` -- соотвСтствуСт Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ страницы Π²Ρ‹Π²ΠΎΠ΄Π° (Π΄Π²Π΅ высоты области Π²Ρ‹Π²ΠΎΠ΄Π° сцСны).

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ строковой ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ _Ρ†Π΅Π½Ρ‚Ρ€_ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ строки, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅:

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ `fmt.y ` Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ для строки. Если Π² строкС встрСтится нСсколько `fmt.y `, Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ послСдний ΠΈΠ· табуляторов.

-- Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ 'ГЛАВА I' - Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ сцСны
dsc = fmt.y('100%').."ГЛАВА I";

_Если позиция, указанная табулятором, ΡƒΠΆΠ΅ занята Π΄Ρ€ΡƒΠ³ΠΎΠΉ строкой, табулятор игнорируСтся._

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, статичСская Ρ‡Π°ΡΡ‚ΡŒ сцСны отдСляСтся ΠΎΡ‚ динамичСской Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ строки. Если Π²Π°ΠΌ это Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ `std.scene_delim `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

std.scene_delim = '^' -- ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π½Π΅ сохраняСтся, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π΅Π΅ для ΠΈΠ³Ρ€Ρ‹ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, ΠΈΠ»ΠΈ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `start() `.

Если вас катСгоричСски Π½Π΅ устраиваСт Ρ‚ΠΎ, ΠΊΠ°ΠΊ INSTEAD Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π°Π±Π·Π°Ρ†ΠΎΠ² тСкста), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `game.display() `, которая ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

game.display = function(s, state)
        local r, l, av, pv
        local reaction = s:reaction() or nil -- рСакция
        r = std.here()
        if state then -- Ρ‚Π°ΠΊΡ‚ ΠΈΠ³Ρ€Ρ‹?
                reaction = iface:em(reaction) -- курсив
                av, pv = s:events()
                av = iface:em(av) -- Π²Ρ‹Π²ΠΎΠ΄ "Π²Π°ΠΆΠ½Ρ‹Ρ…" life
                pv = iface:em(pv) -- Π²Ρ‹Π²ΠΎΠ΄ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… life
                l = s.player:look() -- objects [and scene] -- ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ сцСна
        end
        l = std.par(std.scene_delim,
                reaction or false, av or false, l or false,
                pv or false) or ''
        return l
end;

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ я ΠΏΡ€ΠΈΠ²Π΅Π» здСсь этот ΠΊΠΎΠ΄, Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Напротив, я катСгоричСски ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ‚Π°ΠΊΠΎΠΉ сильной привязки ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ тСкста. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ситуация, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ. Если Π²Ρ‹ ΠΏΠΈΡˆΠΈΡ‚Π΅ свою ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ, просто пропуститС этот тСкст.

ΠžΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΠ΅ тСкста с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

НапримСр:

room {
        nam = 'Intro';
        title = false;
        dsc = function(s)
                p ('Π’Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅: ')
                p (fmt.b(s))
        end;
}
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `fmt.u ` ΠΈ `fmt.st ` Π½Π° строках, содСрТащих ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Ρ‹Π²Ρ‹ Π»ΠΈΠ½ΠΈΠΉ Π² этих мСстах. Π§Ρ‚ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ тСкст Π² _Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½ΡƒΡŽ строку_:
```
fmt.u(fmt.nb "Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ тСкст Π±Π΅Π· пропусков" )
```

Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, INSTEAD Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Π°ΠΌΠΈ Π² ΠΎΠΊΠ½ΠΎ сцСны (Ссли Π½Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠ΅ Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΠ΅), поэтому Ссли Π²Π°ΠΌ всС-Ρ‚Π°ΠΊΠΈ трСбуСтся Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ наслСдованиС

_Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!_

Если Π²Ρ‹ ΠΏΠΈΡˆΠΈΡ‚Π΅ свою ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅, Ссли Π±Ρ‹ ΠΎΠ½Π° Π±Ρ‹Π»Π° простая. Для простой ΠΈΠ³Ρ€Ρ‹ информация ΠΈΠ· этой Π³Π»Π°Π²Ρ‹ Π½Π΅ понадобится. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, 90% ΠΈΠ³Ρ€ Π½Π° INSTEAD Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π΅Ρ‰Π΅ΠΉ, описанных Π² этой Π³Π»Π°Π²Π΅!

Если Π²Ρ‹ ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΈΠ³Ρ€Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ захочСтся ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… созданиС. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… способов:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ -- это функция, которая создаСт Π·Π° вас ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ заполняСт Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Π°ΠΌ это Π½ΡƒΠΆΠ½ΠΎ. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Допустим, Π² вашСй ΠΈΠ³Ρ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠΎΠ½. НуТно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½Π°, любоС ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ конструктор `window `.

window = function(v)
        v.window = true
                v.broken = false
        if v.dsc == nil then
                v.dsc = 'Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ {ΠΎΠΊΠ½ΠΎ}.'
        end
        v.act = function(s)
                if s.broken then
                        p [[Окно Ρ€Π°Π·Π±ΠΈΡ‚ΠΎ.]]
                else
                        p [[Π—Π° ΠΎΠΊΠ½ΠΎΠΌ Ρ‚Π΅ΠΌΠ½ΠΎ.]]
                end
        end
        if v.used == nil then
                v.used = function(s, w)
                        if w^'ΠΌΠΎΠ»ΠΎΡ‚ΠΎΠΊ' then
                                if s.broken then
                                        p [[Окно ΡƒΠΆΠ΅ Ρ€Π°Π·Π±ΠΈΡ‚ΠΎ.]]
                                else
                                        p [[Π― Ρ€Π°Π·Π±ΠΈΠ» ΠΎΠΊΠ½ΠΎ.]]
                                        s.broken = true;
                                end
                                return
                        end
                        return false
                end
        end
        return obj(v)
end

Как Π²ΠΈΠ΄ΠΈΠΌ, идСя конструкторов проста. Π’Ρ‹ просто создаСтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ `{} `, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ конструктор ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ. Π—Π°Ρ‚Π΅ΠΌ эта Ρ‚Π°Π±Π»ΠΈΡ†Π° пСрСдаСтся конструктору `obj ` / `room ` / `dlg ` ΠΈ возвращаСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½Π° стало Π»Π΅Π³ΠΊΠΎ:

window {
        dsc = [[Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ {ΠΎΠΊΠ½ΠΎ}.]];
}

Или, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ статичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ прямо Π² `obj `.

obj = { window {
                dsc = 'Π’ восточной стСнС Π΅ΡΡ‚ΡŒ {ΠΎΠΊΠ½ΠΎ}.';
        }
};

Π£ нашСго ΠΎΠΊΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ `used ` ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ `act ` ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΊΠ½ΠΎ -- просто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ² ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ `window `:

use = function(s, w)
        if w.window then
                p [[ДСйствиС Π½Π° ΠΎΠΊΠ½ΠΎ.]]
                return
        end
        return false
end

БостояниС "разбитости" ΠΎΠΊΠ½Π°, это Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `broken `.

Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ наслСдованиС Π² конструкторах?

На самом Π΄Π΅Π»Π΅, Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ наслСдованиС. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, вСдь конструктор `window ` Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄Ρ€ΡƒοΏ½οΏ½ΠΎΠΉ конструктор `obj `, Ρ‚Π΅ΠΌ самым получая всС свойства ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΆΠ΅, `window ` опрСдСляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ `window `, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΈΠ³Ρ€Π΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с ΠΎΠΊΠ½ΠΎΠΌ. НапримСр:

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° наслСдования создадим класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² `treasure `, Ρ‚Π΅. сокровищ.

global { score = 0 }
treasure = function()
        local v = {}
        v.disp = 'сокровищС'
        v.treasure = true
        v.points = 100
        v.dsc = function(s)
                p ('Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ {', std.dispof(s), '}.')
        end;
        v.inv = function(s)
                p ('Π­Ρ‚ΠΎ ΠΆΠ΅ ', std.dispof(s), '.');
        end;
        v.tak = function(s)
                score = score + s.points; -- ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ счСт
                p [[Π”Ρ€ΠΎΠΆΠ°Ρ‰ΠΈΠΌΠΈ Ρ€ΡƒΠΊΠ°ΠΌΠΈ я Π·Π°Π±Ρ€Π°Π» сокровища.]];
        end
        return obj(v)
end

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Π½Π° Π΅Π³ΠΎ основС создадим Π·ΠΎΠ»ΠΎΡ‚ΠΎ, Π°Π»ΠΌΠ°Π· ΠΈ сундук.

gold = function(dsc)
        local v = treasure();
        v.disp = 'Π·ΠΎΠ»ΠΎΡ‚ΠΎ';
        v.gold = true;
        v.points = 50;
        v.dsc = dsc;
        return v
end

diamond = function(dsc)
        local v = treasure();
        v.disp = 'Π°Π»ΠΌΠ°Π·';
        v.diamond = true;
        v.points = 200;
        v.dsc = dsc;
        return v
end

chest = function(dsc)
        local v = treasure();
        v.disp = 'сундук';
        v.chest = true
        v.points = 1000;
        v.dsc = dsc;
        return v
end

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π² ΠΈΠ³Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ сокровища Ρ‡Π΅Ρ€Π΅Π· конструкторы:

diamond1 = diamond("Π’ грязи я Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» {Π°Π»ΠΌΠ°Π·}.")
diamond2 = diamond(); -- Ρ‚ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ стандартноС описаниС Π°Π»ΠΌΠ°Π·Π°
gold1 = gold("Π’ ΡƒΠ³Π»Ρƒ я Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» блСск {Π·ΠΎΠ»ΠΎΡ‚Π°}.");

room {
        nam = 'ΠΏΠ΅Ρ‰Π΅Ρ€Π°';
        obj = {
                diamond1,
                gold1,
                chest("А Π΅Ρ‰Π΅ я Π²ΠΈΠΆΡƒ {сундук}!")
        };
}

На самом Π΄Π΅Π»Π΅, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-конструкторы ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ наслСдования, зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ вас. Π’Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простой ΠΈ понятный способ.

ΠŸΡ€ΠΈ написании конструкторов ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π΅Ρ‚ INSTEAD. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ `std.call(ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹) `, ΠΏΡ€ΠΈ этом эта функция Π²Π΅Ρ€Π½Π΅Ρ‚ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π² Π²ΠΈΠ΄Π΅ строки. НапримСр, рассмотрим ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ `window `, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ свою Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° осмотр ΠΎΠΊΠ½Π°, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° послС стандартного сообщСния ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Ρ€Π°Π·Π±ΠΈΡ‚ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ (Ссли ΠΎΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΠΎ).

window = function(nam, dsc, what)
    local v = {} -- создаСм ΠΏΡƒΡΡ‚ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ
    -- заполняСм СС
    v.window = true
    v.what = what
    v.broken = false
    if dsc == nil then
        v.dsc = 'Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ {ΠΎΠΊΠ½ΠΎ}'
    end
    v.act = function(s)
        if s.broken then
                p [[Окно Ρ€Π°Π·Π±ΠΈΡ‚ΠΎ.]]
        end
        local r, v = stead.call(s, 'what')
        if v then -- ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ выполнился?
                p(r)
        else
                p [[Π—Π° ΠΎΠΊΠ½ΠΎΠΌ Ρ‚Π΅ΠΌΠ½ΠΎ.]]
        end
    end
    return obj(v)
end

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π° Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ строку, которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°ΠΊΡ†ΠΈΠ΅ΠΉ Π²ΠΎ врСмя осмотра ΠΎΠΊΠ½Π°. ΠŸΡ€ΠΈ этом сообщСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΠΎ (Ссли ΠΎΠ½ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΠΎ), Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ этой Ρ€Π΅Π°ΠΊΡ†ΠΈΠ΅ΠΉ.

Класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡˆΠΈΡ€ΠΎΠΊΠΎ использовались Π² STEAD2. Π’ STEAD3 `obj ` / `dlg ` / `room ` Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ классы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ для Ρ‚Π΅Ρ… случаСв, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ создаваСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ укладываСтся Π² стандартныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ `obj ` / `room ` / `dlg ` ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса. ИзмСнив ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎ, ΠΊΠ°ΠΊ выглядит ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Π² сцСнС. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, рассмотрим созданиС класса "ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€". ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² сСбС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ.

-- create own class container
cont = std.class({ -- создаСм класс cont
        __cont_type = true; -- для опрСдСлСния Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
        display = function(s) -- пСрСопрСдСляСм ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°
                local d = std.obj.display(s)
                if s:closed() or #s.obj == 0 then
                        return d
                end
                local c = s.cont or 'Π’Π½ΡƒΡ‚Ρ€ΠΈ: ' -- ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ содСрТимого
                local empty = true
                for i = 1, #s.obj do
                        local o = s.obj[i]
                        if o:visible() then
                                empty = false
                                if i > 1 then c = c .. ', ' end
                                c = c..'{'..std.nameof(o)..'|'..std.dispof(o)..'}'
                        end
                end
                if empty then
                        return d
                end
                c = c .. '.'
                return std.par(std.space_delim, d, c)
        end;
}, std.obj) -- ΠΌΡ‹ наслСдуСмся ΠΎΡ‚ стандартного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ПослС этого, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Ρ‚Π°ΠΊ:

cont {
        nam = 'ящик';
        dsc = [[Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ {ящик}.]];
        cont = 'Π’ ящикС: ';
}: with {
        'яблоко', 'Π³Ρ€ΡƒΡˆΠ°';
        }

Когда ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ описаниС ящика, Π° Ρ‚Π°ΠΊΠΆΠ΅ содСрТимоС ящика Π² Π²ΠΈΠ΄Π΅ строки ссылок: Π’ ящикС: яблоко, Π³Ρ€ΡƒΡˆΠ°. `dsc ` ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² яблоко ΠΈ Π³Ρ€ΡƒΡˆΠ° Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹, Ссли ΠΎΠ½ΠΈ Π·Π°Π΄Π°Π½Ρ‹.

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ `dsc ` ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, оставляя лишь ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ:

-- Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠΊΠ°Π·Π° любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
-- Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ dsc
std.obj.display = function(self)
        local w = self:where() -- Π³Π΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚?
        if not std.is_obj(w, 'cont') then -- Ссли Π½Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅
                local d = std.call(self, 'dsc')
                return d
        end
end

К соТалСнию, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС классов Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ руководства, эти Π²Π΅Ρ‰ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ описаны Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ руководствС для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. А ΠΏΠΎΠΊΠ°, для вашСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹, Π²Π°ΠΌ Π½Π΅ стоит ΠΏΠΈΡΠ°Ρ‚ΡŒ свои классы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ совСты

Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° Ρ„Π°ΠΉΠ»Ρ‹

Когда ваша ΠΈΠ³Ρ€Π° становится большой, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΅Π΅ ΠΊΠΎΠ΄Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π² `main3.lua ` -- плохая идСя.

Для разбиСния тСкста ΠΈΠ³Ρ€Ρ‹ Π½Π° Ρ„Π°ΠΉΠ»Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `include `. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `include ` Π² глобальном контСкстС Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ `main3.lua ` Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈΡΡŒ ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ³Ρ€Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

-- main3.lua
include "episode1" -- .lua ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ
include "npc"
include "start"

room {
        nam = 'main';
....

Как ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ исходный тСкст Π½Π° Ρ„Π°ΠΉΠ»Ρ‹ зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ вас. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ„Π°ΠΉΠ»Ρ‹ Π² соотвСтствии с эпизодами ΠΈΠ³Ρ€Ρ‹ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ слабо связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой), Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, хранящиС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ ΠΈ Ρ‚.Π΄. Π­Ρ‚ΠΎ вопрос Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ удобства.

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСски ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ части ΠΈΠ³Ρ€Ρ‹ (с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹). Для этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ `gamefile `:

...
act = function() gamefile ("episode2") end -- .lua ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ
...
Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Если Π² вашСй ΠΈΠ³Ρ€Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° функция `init() `, Ρ‚ΠΎ Π² ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… частях ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ! Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, послС ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° тСкущая функция `init() `, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ являСтся ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

`gamefile() ` Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ Π·Π°Π±Ρ‹Ρ‚ΡŒ стСк ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ, запустив этот Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ. Для этого, Π·Π°Π΄Π°ΠΉΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ `true `. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ `gamefile ` Π² ΠΎΠ±ΠΎΠΈΡ… случаях. `gamefile() ` ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ….

act = function() gamefile ("episode3.lua", true); end;

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ `gamefile() ` ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для оформлСния ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡΠ·Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΈΠ³Ρ€ ΠΈΠ»ΠΈ ΠΈΠ³Ρ€-сборников, Π³Π΄Π΅ фактичСски ΠΈΠ· ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ выполняСтся запуск ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹.

МСню

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° инвСнтаря состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ³Ρ€ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π° Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΌΡ‹ΡˆΡŒΡŽ. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ инвСнтаря ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ сцСны ΠΈΠ»ΠΈ инвСнтаря. ПослС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‰Π΅Π»Ρ‡ΠΊΠ° происходит ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Ρ‚Π°ΠΊΡ‚ ΠΈΠ³Ρ€Ρ‹. Иногда Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ игровая ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ° отличаСтся ΠΎΡ‚ классичСских INSTEAD ΠΈΠ³Ρ€. Π’ΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ понадобится мСню.

МСню -- это элСмСнт инвСнтаря, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ срабатываСт Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ. ΠŸΡ€ΠΈ этом мСню ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π΄Π²ΠΈΠΆΠΊΡƒ, Ρ‡Ρ‚ΠΎ дСйствиС Π½Π΅ являСтся ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌ Ρ‚Π°ΠΊΡ‚ΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ мСню Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² Π·ΠΎΠ½Π΅ инвСнтаря ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€ΠΎΠΉ любой слоТности. НапримСр, сущСствуСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒ `proxymenu `, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€ΠΎΠΉ Π² стилС квСстов Π½Π° ZX-"Π‘ΠΏΠ΅ΠΊΡ‚Ρ€ΡƒΠΌ". Π’ ΠΈΠ³Ρ€Π΅ "Особняк" своС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ нСсколько ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² дСйствий, ΠΈ Ρ‚.Π΄.

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ мСню Π² области инвСнтаря, опрСдСляя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Ρ‚ΠΈΠΏΠΎΠΌ `menu `. ΠŸΡ€ΠΈ этом, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ мСню (`act `) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ послС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠΊΠ° ΠΌΡ‹ΡˆΠΈ. Если ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ `false `, Ρ‚ΠΎ состояниС ΠΈΠ³Ρ€Ρ‹ Π½Π΅ измСняСтся. НапримСр, рСализация ΠΊΠ°Ρ€ΠΌΠ°Π½Π°:

menu {
        state = false;
        nam = 'ΠΊΠ°Ρ€ΠΌΠ°Π½';
        disp = function(s)
                if s.state then
                        return fmt.u('ΠΊΠ°Ρ€ΠΌΠ°Π½'); -- ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π΅ΠΌ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠ°Ρ€ΠΌΠ°Π½
                end
                return 'ΠΊΠ°Ρ€ΠΌΠ°Π½';
        end;
        gen = function(s)
                if s.state then
                        s:open(); -- ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ Π² ΠΊΠ°Ρ€ΠΌΠ°Π½Π΅
                else
                        s:close(); -- ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ всС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ Π² ΠΊΠ°Ρ€ΠΌΠ°Π½Π΅
                end
                return s
        end;
        act = function(s)
                s.state = not s.state -- ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ состояниС
                s:gen(); -- ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Ρ€ΠΌΠ°Π½
        end;
}: with {
        obj {
                nam = 'Π½ΠΎΠΆ';
                inv = 'Π­Ρ‚ΠΎ Π½ΠΎΠΆ';
        };
}

function init()
        take 'ΠΊΠ°Ρ€ΠΌΠ°Π½':gen()
end

Бтатус ΠΈΠ³Ρ€ΠΎΠΊΠ°

Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ вывСсти ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ статус. НапримСр, количСство ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ΠΎΡ‡ΠΊΠΎΠ², состояниС гСроя ΠΈΠ»ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, врСмя суток. INSTEAD Π½Π΅ прСдоставляСт ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… областСй Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΊΡ€ΠΎΠΌΠ΅ сцСны ΠΈ инвСнтаря, поэтому, самым простым способом Π²Ρ‹Π²ΠΎΠ΄Π° статуса являСтся Π²Ρ‹Π²ΠΎΠ΄ Π΅Π³ΠΎ Π² Π·ΠΎΠ½Ρƒ инвСнтаря.

НиТС прСдставлСна рСализация статуса ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² Π²ΠΈΠ΄Π΅ тСкста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ появляСтся Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π΅, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, выглядит просто ΠΊΠ°ΠΊ тСкст.

global {
    life = 10;
    power = 10;
}

stat { -- stat -- ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ "статус"
        nam = 'статус';
        disp = function(s)
                pn ('Π–ΠΈΠ·Π½ΡŒ: ', life)
                pn ('Π‘ΠΈΠ»Π°: ', power)
        end
};

function init()
        take 'статус'
end

walk ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² onexit ΠΈ onenter

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ `walk ` ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² `onenter ` ΠΈ `onexit `. НапримСр, `path ` Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ½Π°Ρ‚Π° с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ `onenter `, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСносит ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ.

РСкомСндуСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΠ· `onexit ` / `onenter ` `false ` Π² случаС, Ссли Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ `walk ` ΠΈΠ· этих ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ исходного ΠΊΠΎΠ΄Π° ΠΈΠ³Ρ€Ρ‹

Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ своих ΠΈΠ³Ρ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° οΏ½οΏ½ΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки `-encode `:

sdl-instead -encode <ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ> [Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ]

И ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… `include ` / `gamefile `. Однако, для этого Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ `main3.lua `:

std.dofile = std.doencfile

ΠŸΡ€ΠΈ этом Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» `main3.lua ` Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, схСма выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (`game.lua ` -- Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»):

-- $Name: Моя закрытая ΠΈΠ³Ρ€Π°!$
std.dofile = std.doencfile
include "game"; -- Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΡƒΠ·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π΅Π΅ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ!
_*Π’Π°ΠΆΠ½ΠΎ!*_
НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΈΠ³Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `luac `, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ `luac ` создаСт платформозависимый ΠΊΠΎΠ΄! Однако, компиляция ΠΈΠ³Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для поиска ошибок Π² ΠΊΠΎΠ΄Π΅.

Π—Π°ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° рСсурсов

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ рСсурсы ΠΈΠ³Ρ€Ρ‹ (Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ, ΠΌΡƒΠ·Ρ‹ΠΊΡƒ, Ρ‚Π΅ΠΌΡ‹) Π² Ρ„Π°ΠΉΠ» рСсурсов `.idf `, для этого помСститС всС рСсурсы Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ `data ` ΠΈ запуститС INSTEAD:

sdl-instead -idf <ΠΏΡƒΡ‚ΡŒ ΠΊ data>

ΠŸΡ€ΠΈ этом, Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ создастся Ρ„Π°ΠΉΠ» `data.idf `. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΈΠ³Ρ€ΠΎΠΉ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ рСсурсы ΠΈΠ³Ρ€Ρ‹ Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, оставив сСбС ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹).

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ `.idf ` всю ΠΈΠ³Ρ€Ρƒ:

sdl-instead -idf <ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ³Ρ€Π΅>

Π˜Π³Ρ€Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ `idf ` ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹ instead (ΠΊΠ°ΠΊ Ссли Π±Ρ‹ это Π±Ρ‹Π»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ) Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:

sdl-instead game.idf

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ³Ρ€ΠΎΠΊΠ°ΠΌΠΈ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ с нСсколькими пСрсонаТами ΠΈ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ (см. `change_pl() `). Но Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ‚Ρ€ΡŽΠΊ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ инвСнтаря.

ИспользованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°.

obj {
        nam = 'камСнь';
        dsc = 'На ΠΊΡ€Π°ΡŽ Π»Π΅ΠΆΠΈΡ‚ {камСнь}.';
        act = function()
                remove 'камСнь';
                p 'Π― Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ» камСнь, ΠΎΠ½ сорвался ΠΈ ΡƒΠ»Π΅Ρ‚Π΅Π» Π²Π½ΠΈΠ·...';
        end

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `act ` ΠΌΠΎΠ³ Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅:

act = function(s)
        remove(s);
        p 'Π― Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ» камСнь, ΠΎΠ½ сорвался ΠΈ ΡƒΠ»Π΅Ρ‚Π΅Π» Π²Π½ΠΈΠ·...';
end

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ статусы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

Из ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ возвращаСтся тСкст, Π² Π²ΠΈΠ΄Π΅ `return ` "тСкст сообщСния". Или с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ `p() ` / `pr() ` / `pn() ` / `pf() `. ΠšΡ€ΠΎΠΌΠ΅ этого, Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ статусы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ³Ρ€Ρ‹.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ статуса `false `:

return false

Π’Π°ΠΊΠΎΠΉ статус ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ статус:

return true, false

Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ пСрСрисуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ инвСнтаря (Π½ΠΎ Π½Π΅ сцСна). Π”Π°Π½Π½Ρ‹ΠΉ статус ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ мСню Π² области инвСнтаря.

БущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ статус: `std.nop() `. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован просто ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΠ»ΠΈ совмСстно с `return `.

return std.nop()
-- ... ΠΈΠ»ΠΈ ...
std.nop()
-- Π΄Π°Π»Π΅Π΅ ΠΊΠΎΠ½Π΅Ρ† Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ return

Π’ этом случаС, содСрТимоС сцСны останСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ‚Π°ΠΊΡ‚ ΠΈΠ³Ρ€Ρ‹ (Π΄Π°ΠΆΠ΅ строка Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ останСтся старой). Π”Π°Π½Π½Ρ‹ΠΉ статус ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ совмСстно с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ `theme `, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ Π½Π° Π»Π΅Ρ‚Ρƒ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π΄Ρ€ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚Π΅ΠΌΡ‹.

Π’Π°ΠΉΠΌΠ΅Ρ€

Для асинхронных событий, привязанных ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π² INSTEAD Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€. На самом Π΄Π΅Π»Π΅, Π²Π°ΠΌ слСдуСт Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, стоит Π»ΠΈ Π² ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‡Π΅ΡΠΊΠΎΠΉ ΠΈΠ³Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ это воспринимаСтся Π½Π΅ слишком благосклонно. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для управлСния ΠΌΡƒΠ·Ρ‹ΠΊΠΎΠΉ ΠΈΠ»ΠΈ Π² ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… цСлях.

Для использования Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Π²Π°ΠΌ слСдуСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ `timer `.

require "timer"

Π’Π°ΠΉΠΌΠ΅Ρ€ программируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `timer `.

ΠŸΡ€ΠΈ срабатывании Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `game.timer `. Если `game.timer ` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ `false `, сцСна Π½Π΅ пСрСрисовываСтся. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выводится ΠΊΠ°ΠΊ рСакция.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ для ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ `timer `. Если Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ объявлСн ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `timer `, ΠΎΠ½ вызываСтся вмСсто `game.timer `. Если ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ `false ` -- вызываСтся `game.timer `.

НапримСр:

game.timer = function(s)
        if time() > 10 then
                return false
        end
        snd.play 'gfx/beep.ogg';
        p ("Timer:", time())
end

function init()
        timer:set(1000) -- Ρ€Π°Π· Π² сСкунду
end
room  {
    enter = function(s)
        timer:set(1000);
    end;
    timer = function(s)
        timer:stop();
        walk 'ΠΊΠΎΠΌΠ½Π°Ρ‚Π°2';
    end;
    nam = 'ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°';
    dsc = [[Π–Π΄ΠΈΡ‚Π΅.]];
}

БостояниС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Ρ„Π°ΠΉΠ» сохранСния, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Π΅Π³ΠΎ восстановлСнии.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ· Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ статус:

return true, false

Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ пСрСрисуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ инвСнтаря. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для статусов Π²Ρ€ΠΎΠ΄Π΅ часов.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² INSTEAD сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² миллисСкундах. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `instead.ticks() `. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число миллисСкунд, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π΅ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° старта ΠΈΠ³Ρ€Ρ‹.

ΠœΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π΅Π΅Ρ€

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ для ΠΈΠ³Ρ€Ρ‹ свой ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Ρ‚Π΅Π»ΡŒ ΠΌΡƒΠ·Ρ‹ΠΊΠΈ, создав Π΅Π³ΠΎ Π½Π° основС ΠΆΠΈΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

-- ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ‚Ρ€Π΅ΠΊΠΈ Π² случайном порядкС
require "snd"
obj {
        {
        tracks = {"mus/astro2.mod",
                "mus/aws_chas.xm",
                "mus/dmageofd.xm",
                "mus/doomsday.s3m"};
        };
        nam = 'ΠΏΠ»Π΅Π΅Ρ€';
        life = function(s)
                if not snd.music_playing() then
                local n = s.tracks[rnd(#s.tracks)]
                        snd.music(n, 1);
                end
        end;
}:lifeon();

НиТС приводится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΠΎΠ»Π΅Π΅ слоТного ΠΏΠ»Π΅Π΅Ρ€Π°. МСняСм Ρ‚Ρ€Π΅ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ закончился ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π±ΠΎΠ»Π΅Π΅ `2 ` ΠΌΠΈΠ½ΡƒΡ‚ ΠΈ ΠΈΠ³Ρ€ΠΎΠΊ ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» ΠΈΠ· ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ‚Ρ€Π΅ΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ число ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ (`0 ` - Π·Π°Ρ†ΠΈΠΊΠ»Π΅Π½Π½Ρ‹ΠΉ Ρ‚Ρ€Π΅ΠΊ):

require "timer"
global { track_time = 0 };

obj {
        nam = 'player';
        pos = 0;
        {
                playlist = { '01 Frozen sun.ogg', 0,
                        '02 Thinking.ogg', 0,
                        '03 Melancholy.ogg', 0,
                        '04 Everyday happiness.ogg', 0,
                        '10 Good morning again.ogg', 1,
                        '15 [Bonus track] The end (demo cover).ogg', 1
                };
        };
        tick = function(s)
                if snd.music_playing() and ( track_time < 120 or not player_moved() ) then
                        return
                end
                track_time = 0
        if s.pos == 0 then
                s.pos = 1
        else
                s.pos = s.pos + 2
        end
                if s.pos > #s.playlist then
                        s.pos = 1
                end
                snd.music('mus/'..s.playlist[s.pos], s.playlist[s.pos + 1]);
        end;
}

game.timer = function(s)
        track_time = track_time + 1
        music_player:tick();
end

function init()
        timer:set(1000)
end

Π–ΠΈΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Если Π²Π°ΡˆΠ΅ΠΌΡƒ Π³Π΅Ρ€ΠΎΡŽ Π½ΡƒΠΆΠ΅Π½ Π΄Ρ€ΡƒΠ³, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ `life ` этого пСрсонаТа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всСгда пСрСносит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ ΠΈΠ³Ρ€ΠΎΠΊΠ°:

obj {
        nam = 'лошадь';
        dsc = 'Рядом со ΠΌΠ½ΠΎΠΉ стоит {лошадь}.';
        act = [[Моя лошадка.]];
        life = function(s)
                if player_moved() then
                        place(s);
                end
        end;
}

function init()
        lifeon 'лошадь'; -- сразу ΠΎΠΆΠΈΠ²ΠΈΠΌ лошадь
end

Π’Ρ‹Π·ΠΎΠ² мСню

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΠ· ΠΈΠ³Ρ€Ρ‹ мСню INSTEAD с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `istead.menu() `. Если Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π·Π°Π΄Π°Ρ‚ΡŒ: `save `, `load ` ΠΈΠ»ΠΈ `quit `, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π» мСню.

ДинамичСскоС созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ нСльзя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ "Π½Π° Π»Π΅Ρ‚Ρƒ". ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ создаСтС ΠΈΡ… Π² глобальном пространствС lua Ρ„Π°ΠΉΠ»Π°. Однако, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΠ³Ρ€Ρ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² нСизвСстно Π·Π°Ρ€Π°Π½Π΅Π΅, ΠΈΠ»ΠΈ количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Π΅Π»ΠΈΠΊΠΎ ΠΈ ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ ΠΈΠ³Ρ€Ρ‹.

Π’ INSTEAD сущСствуСт способ создания любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° Π»Π΅Ρ‚Ρƒ. Для этого Π²Π°ΠΌ понадобится Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ _конструктор_ вашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ `new `.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½.

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `new ` ΠΈ `delete ` для создания ΠΈ удалСния динамичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

declare 'box' (function()
        return obj {
                dsc = [[Π’ΡƒΡ‚ Π»Π΅ΠΆΠΈΡ‚ {ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ°}.]];
                tak = [[Π― взял ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ.]];
        }
end)

local o = new (box);
take(o);
declare 'box' (function(dsc)
        return obj {
                dsc = dsc;
                tak = [[Π― взял ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ.]];
        }
end)
take(new(box, 'Π’ ΡƒΠ³Π»Ρƒ стоит {ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ°}'))

`new ` воспринимаСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ -- ΠΊΠ°ΠΊ Π·Π°Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-конструктор, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -- ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ конструктору. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния конструктора Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

function myconstructor()
        local v = {}
        v.disp = 'тСстовый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚'
        v.act = 'ВСстовая рСакция'
        return obj(v)
end
*Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!* ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° конструктор Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²! Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ происходит Π² самом Π½Π°Ρ‡Π°Π»Π΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΈΡ€Π° Π΅Ρ‰Π΅ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ! Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ простыС Ρ‚ΠΈΠΏΡ‹: строки, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, числа, Π±ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния. НСдСкларированныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ списки Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ ссылкС-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ:

purge(o) -- ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· всСх списков
delete(o) -- ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

ΠŸΡ€ΠΈ этом, `delete ` это ΠΈΠΌΠ΅Π½Π½ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· INSTEAD, Π° Π½Π΅ Π°Π½Π°Π»ΠΎΠ³ `remove() ` ΠΈΠ»ΠΈ `purge() `. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π½Π΅Ρ‚ особого смысла Π΄Π΅Π»Π°Ρ‚ΡŒ `delete `. Волько Ссли ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ большС Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ понадобится Π² ΠΈΠ³Ρ€Π΅, ΠΈΠ»ΠΈ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `delete() `.

Π‘ΠΎΠ»Π΅Π΅ практичСски-ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

-- Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ конструктор
-- path

declare 'make_path' (function(v) return path(v) end)

-- динамичСский ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄
-- создали Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
-- ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ Π΅Π³ΠΎ Π² ways()

put( new (make_path, { 'ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄', 'ΠΊΠΎΠΌΠ½Π°Ρ‚Π°2'}, ways())

Π—Π°ΠΏΡ€Π΅Ρ‚ Π½Π° сохранСниС ΠΈΠ³Ρ€Ρ‹

Иногда ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΡƒ Π΄Π΅Π»Π°Ρ‚ΡŒ сохранСния Π² ΠΈΠ³Ρ€Π΅. НапримСр, Ссли Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ сцСнах, Π³Π΄Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΉ элСмСнт составляСт случай, ΠΈΠ»ΠΈ для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… ΠΈΠ³Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Ρˆ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ пСрСзапуска ΠΈΠ³Ρ€Ρ‹.

Для ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сохранСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ `instead.nosave `.

НапримСр:

instead.nosave = true  -- Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ сохранСния

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ сохранСния Π½Π΅ Π²Π΅Π·Π΄Π΅, Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнах, ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚Π΅ `instead.nosave ` Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ»ΠΈ ΠΆΠ΅ мСняйтС состояниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π½Π° Π»Π΅Ρ‚Ρƒ -- ΠΎΠ½ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Ρ„Π°ΠΉΠ» сохранСний.

-- Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ
-- сохранСния Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ nosave.
instead.nosave = function()
        return here().nosave
end

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ Π½Π° сохранСния Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π·Π°ΠΏΡ€Π΅Ρ‚Π° Π½Π° автосохранСниС. Для управлСния автосохранСниСм Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ `instead.noautosave `.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ явно ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΠ³Ρ€Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π°: `instead.autosave([Π½ΠΎΠΌΠ΅Ρ€ слота]) `; Если Π½ΠΎΠΌΠ΅Ρ€ слота Π½Π΅ Π·Π°Π΄Π°Π½, Ρ‚ΠΎ ΠΈΠ³Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ сохранСна ΠΏΠΎΠ΄ слотом 'автосохранСниС'. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ сохраняСтся состояниС __послС__ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ‚Π°ΠΊΡ‚Π° ΠΈΠ³Ρ€Ρ‹.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π’ INSTEAD сущСствуСт Π΄Π²Π° способа ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ - с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `std.is_obj(пСрСмСнная, [Ρ‚ΠΈΠΏ]) `.

НапримСр:

a = room {
        nam = 'ΠΎΠ±ΡŠΠ΅ΠΊΡ‚';
};

dprint(std.is_obj(a)) -- Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ true
dprint(std.is_obj('ΠΎΠ±ΡŠΠ΅ΠΊΡ‚')) -- Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ false
dprint(std.is_obj(a, 'room')) -- Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ true
dprint(std.is_obj(a.obj, 'list')) -- Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ true

`std.is_obj() ` удобная для опрСдСлСния Ρ‚ΠΈΠΏΠ° ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ связан с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° `type `:

a = room {
        nam = 'ΠΎΠ±ΡŠΠ΅ΠΊΡ‚';
};

dprint(a:type 'room') -- Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ true

Π’Π΅ΠΌΡ‹ для sdl-instead

ГрафичСский ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ‚Π΅ΠΌ. _Π’Π΅ΠΌΠ°_ прСдставляСт ΠΈΠ· сСбя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, с Ρ„Π°ΠΉΠ»ΠΎΠΌ `theme.ini ` Π²Π½ΡƒΡ‚Ρ€ΠΈ.

Π’Π΅ΠΌΠ°, которая являСтся минимально Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ -- это Ρ‚Π΅ΠΌΠ° `default `. Π­Ρ‚Π° Ρ‚Π΅ΠΌΠ° всСгда загруТаСтся ΠΏΠ΅Ρ€Π²ΠΎΠΉ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Π½Π΅Π΅ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ частично ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π’Ρ‹Π±ΠΎΡ€ Ρ‚Π΅ΠΌΡ‹ осущСствляСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· мСню настроСк, ΠΎΠ΄Π½Π°ΠΊΠΎ конкрСтная ΠΈΠ³Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° свой внСшний Π²ΠΈΠ΄. Π’ этом случаС Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ с ΠΈΠ³Ρ€ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ свой Ρ„Π°ΠΉΠ» `theme.ini `. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ свободСн ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΡ€ΠΈ этом ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΈ творчСского замысла Π°Π²Ρ‚ΠΎΡ€Π° ΠΈΠ³Ρ€Ρ‹.

Бинтаксис `theme.ini ` ΠΎΡ‡Π΅Π½ΡŒ прост.

<ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€> = <Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅>

ΠΈΠ»ΠΈ

; ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ЗначСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²: строка, Ρ†Π²Π΅Ρ‚, число.

Π¦Π²Π΅Ρ‚ задаСтся Π² Ρ„ΠΎΡ€ΠΌΠ΅ `#rgb `, Π³Π΄Π΅ `r `, `g ` ΠΈ `b ` ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ†Π²Π΅Ρ‚Π° Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ основныС Ρ†Π²Π΅Ρ‚Π° Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ ΠΏΠΎ своим ΠΈΠΌΠ΅Π½Π°ΠΌ. НапримСр: `yellowgreen `, ΠΈΠ»ΠΈ `violet `.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния:

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ‚Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ с Ρ‚Π΅Π³Π°ΠΌΠΈ. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‚Π΅Π³: `$Name: `, содСрТащий UTF-8 строку с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚Π΅ΠΌΡ‹. НапримСр:

; $Name:Новая Ρ‚Π΅ΠΌΠ°$
; модификация Ρ‚Π΅ΠΌΡ‹ book
include = book ; -- ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌΡƒ Книга
scr.gfx.h = 500 ; -- Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΉ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ выполняСт поиск Ρ‚Π΅ΠΌ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ `themes `. Unix вСрсия ΠΊΡ€ΠΎΠΌΠ΅ этого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, просматриваСт Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ `~/.instead/themes/ ` Windows вСрсия -- `Documents and Settings/USER/Local Settings/Application Data/instead/themes `

ΠšΡ€ΠΎΠΌΠ΅ этого, Π½ΠΎΠ²Ρ‹Π΅ вСрсии INSTEAD ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ мноТСствСнных Ρ‚Π΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ³Ρ€Π΅. Давая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· стандартноС мСню INSTEAD Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ подходящСС ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅, ΠΈΠ· прСдусмотрСнных Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ³Ρ€Ρ‹. Для этого, всС Ρ‚Π΅ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² ΠΈΠ³Ρ€Π΅ Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ `themes `. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, каТдая Ρ‚Π΅ΠΌΠ° -- это ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ `themes `. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ находится свой Ρ„Π°ΠΉΠ» `theme.ini ` ΠΈ рСсурсы Ρ‚Π΅ΠΌΡ‹ (ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹, Π·Π²ΡƒΠΊΠΈ). ΠŸΡ€ΠΈ этом ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹-ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° `themes ` / `default ` - эта Ρ‚Π΅ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ² `theme.ini ` ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ рассмотрСли. Однако, ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ с рСсурсами Π² `theme.ini ` ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π½Π΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈΠ³Ρ€Ρ‹, Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ‚Π΅ΠΌΡ‹. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ содСрТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя самого Ρ„Π°ΠΉΠ»Π°, Π±Π΅Π· ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ. НапримСр:

mygame/
  themes/
    default/
      theme.ini
      bg.png
    widescreen/
      theme.ini
  main3.l	ua

`theme.ini `

scr.gfx.bg = bg.png
; ...	   

ΠŸΡ€ΠΈ этом, всС ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Ρ‚Π΅ΠΌΡ‹ `themes ` / `default `. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ `include `. ΠŸΡ€ΠΈ этом, INSTEAD сначала пытаСтся Π½Π°ΠΉΡ‚ΠΈ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ ΠΈΠ³Ρ€Ρ‹, ΠΈ Ссли Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ Π½Π΅ находится, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° Ρ‚Π΅ΠΌΠ° ΠΈΠ· стандартных Ρ‚Π΅ΠΌ INSTEAD (Ссли ΠΎΠ½Π° сущСствуСт). Π”Π°Π»Π΅Π΅, Π² `theme.ini ` ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ измСнСния.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ часто Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² INSTEAD Π² Π²ΠΈΠ΄Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Для использования модуля Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

require "имя модуля"

Или:

loadmod "имя модуля"

Если ΠΌΠΎΠ΄ΡƒΠ»ΡŒ поставляСтся вмСстС с ΠΈΠ³Ρ€ΠΎΠΉ.

Π§Π°ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² поставку INSTEAD, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΈΠ³Ρ€ΠΎΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ любой стандартный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ своим, Ссли ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΈΠ³Ρ€ΠΎΠΉ ΠΏΠΎΠ΄ Ρ‚Π΅ΠΌ-ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎ ΠΈ стандартный.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ, это фактичСски lua Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ: `имя_модуля.lua `.

НиТС пСрСчислСны основныС стандартныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ:

--$Name: Моя ΠΈΠ³Ρ€Π°!$
require "fmt"
require "click"

НСкоторыС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ входят Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ поставку, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ· [рСпозитория ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ]([https://github.com/instead-hub/stead3-modules]). ΠŸΡ€ΠΎΡΡ‚ΠΎ скачайтС Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²Π°ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΈΠ³Ρ€ΠΎΠΉ. Π’ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ loadmod().

https://github.com/instead-hub/stead3-modules

ΠœΠΎΠ΄ΡƒΠ»ΡŒ keys

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ события ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля `keys `.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ клавиш ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ тСкстового Π²Π²ΠΎΠ΄Π°.

Для задания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ клавиши Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `keys:filter(press, key) `. Π­Ρ‚Π° функция Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ `true ` Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ΅ событиС. НапримСр:

require "keys"

function keys:filter(press, key)
        return press -- Π»ΠΎΠ²ΠΈΠΌ наТатия Π»ΡŽΠ±Ρ‹Ρ… клавиш
end

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `press `, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π²Π΅Π½ `true ` для события наТатия клавиши ΠΈ `false ` -- отТатия. Π’ `key ` пСрСдаСтся символичСскоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅ клавиши (Π² Π²ΠΈΠ΄Π΅ строки).

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ клавиши ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ:

require "keys"

function keys:filter(press, key)
        if key == '0' or key == '1' or key == 'z' then
                return press -- Π»ΠΎΠ²ΠΈΠΌ наТатия клавиш z, 1 ΠΈ 0
        end
end

Π˜Ρ‚Π°ΠΊ, `keys:filter ` позволяСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ события ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. А сами события приходят Π² ΠΈΠ³Ρ€Ρƒ Π² Π²ΠΈΠ΄Π΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° `onkey ` для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΈΠ»ΠΈ (Ссли ΠΎΠ½ Π½Π΅ Π·Π°Π΄Π°Π½ Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅) для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° `game `.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `onkey ` дСйствуСт ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ STEAD3. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ `false ` ΠΈ Ρ‚ΠΎΠ³Π΄Π° считаСтся, Ρ‡Ρ‚ΠΎ клавиша Π½Π΅ Π±Ρ‹Π»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΈΠ³Ρ€ΠΎΠΉ. Π›ΠΈΠ±ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ дСйствиС.

_Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:_ Если ΠΈΠ³Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ _всС_ события клавиш, Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ самим INSTEAD Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ³Ρ€ΠΎΠΉ, Π° Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ. НапримСр, Ссли ΠΈΠ³Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ `escape ` (ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ false ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°), Ρ‚ΠΎ клавиша `escape ` пСрСстанСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ INSTEAD (`escape ` -- Π²Ρ‹Π·ΠΎΠ² мСню).

НиТС приводится простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран символичСских ΠΈΠΌΠ΅Π½ клавиш:

require "keys"

function keys:filter(press, key)
        return press -- Π»ΠΎΠ²ΠΈΠΌ всС наТатия
end

game.onkey = function(s, press, key)
        dprint("pressed: ", key)
        p("НаТата: ", key)
        return false -- Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ клавиши ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ INSTEAD
end

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ символичСскоС имя ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ клавиши.

ΠŸΡ€ΠΈ написании Π°Ρ€ΠΊΠ°Π΄Π½Ρ‹Ρ… ΠΈΠ³Ρ€ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ событиС ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Π° ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΅ (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π΅). Для этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `keys:state(имя клавиши) `.

Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ `true ` для Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши ΠΈ `false ` -- для ΠΎΡ‚ΠΆΠ°Ρ‚ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

require "timer"
require "keys"

game.timer = function(s) -- ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ состояниС клавиши курсор Π²ΠΏΡ€Π°Π²ΠΎ
        dprint("state of 'right' key: ", keys:state 'right')
        p("БостояниС клавиши 'Π²ΠΏΡ€Π°Π²ΠΎ':", keys:state 'right')
end

timer:set(30)

ΠœΠΎΠ΄ΡƒΠ»ΡŒ click

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π² своСй ΠΈΠ³Ρ€Π΅ ΠΊΠ»ΠΈΠΊΠΈ ΠΏΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ сцСны, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎ Ρ„ΠΎΠ½Ρƒ. Для этого, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ `click `. Π’Π°ΠΊΠΆΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояниС ΠΌΡ‹ΡˆΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

instead.mouse_pos([x, y])

ΠšΠΎΡ‚ΠΎΡ€Π°Ρ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ курсора. Если Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ `(x, y) `, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ курсор Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ (всС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π° ΠΎΠΊΠ½Π° INSTEAD).

require "click"
function click:filter(press, btn, x, y, px, py)
        dprint(press, btn, x, y, px, py)
        return press and px -- Π»ΠΎΠ²ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наТатия Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ
end
room {
        nam = 'main';
        pic = "box:320x200,red";
        onclick = function(s, press, btn, x, y, px, py)
                pn("Π’Ρ‹ Π½Π°ΠΆΠ°Π»ΠΈ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ: ", px, ", ", py)
                pn("ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹: ", x, ", ", y)
                p("Кнопка: ", btn)
        end;
}

_Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!_ Π’ INSTEAD ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΊΠ»ΠΈΠΊΠΎΠ² ΠΌΡ‹ΡˆΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ гасит быстрыС ΠΊΠ»ΠΈΠΊΠΈ. Π­Ρ‚ΠΎ сдСлано для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ эффСкта Π΄Ρ€Π΅Π±Π΅Π·Π³Π° клавиш ΠΌΡ‹ΡˆΠΈ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ `instead.mouse_filter() `, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для опрСдСлСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΌΡ‹ΡˆΠΈ ΠΈ установки Π½ΠΎΠ²ΠΎΠ³ΠΎ (Π² Ρ‚ΠΎΠΌ числС - Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

function start()
        dprint("Mouse filter delay: ", instead.mouse_filter())
        instead.mouse_filter(0) -- Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€
end

Или Ρ‚Π°ΠΊ:

old_filter = instead.mouse_filter(0) -- Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ
...
instead.mouse_filter(old_filter) -- восстановили

ΠœΠΎΠ΄ΡƒΠ»ΡŒ theme

ΠœΠΎΠ΄ΡƒΠ»ΡŒ theme позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π΅ΠΌΡ‹ Π½Π° Π»Π΅Ρ‚Ρƒ.

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚Π΅ΠΌΡ‹ Π½Π° Π»Π΅Ρ‚Ρƒ для ΠΈΠ³Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ содСрТат ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ -- источник ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ! Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ваша ΠΈΠ³Ρ€Π° Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ слоТно Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π΅ΠΌΡ‹ ΠΈΠ· ΠΊΠΎΠ΄Π° -- создайтС свою Ρ‚Π΅ΠΌΡƒ ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΅Π΅ Π² ΠΈΠ³Ρ€Ρƒ!

ΠŸΡ€ΠΈ этом, сохранСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‚Π΅ΠΌΡ‹ Π² Ρ„Π°ΠΉΠ»Π΅ сохранСния Π½Π΅ поддСрТиваСтся. Автор ΠΈΠ³Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ сам Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π΅ΠΌΡ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `start() `, ΠΊΠ°ΠΊ это дСлаСтся ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ спрайтов.

Для измСнСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π΅ΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

-- настройка ΠΎΠΊΠ½Π° Π²Ρ‹Π²ΠΎΠ΄Π°
theme.win.geom(x, y, w, h)
theme.win.color(fg, link, alink)
theme.win.font(name, size, height)
theme.win.gfx.up(pic, x, y)
theme.win.gfx.down(pic, x, y)

-- настройка инвСнтаря
theme.inv.geom(x, y, w, h)
theme.inv.color(fg, link, alink)
theme.inv.font(name, size, height)
theme.inv.gfx.up(pic, x, y)
theme.inv.gfx.down(pic, x, y)
theme.inv.mode(mode)

-- настройка мСню
theme.menu.bw(w)
theme.menu.color(fg, link, alink)
theme.menu.font(name, size, height)
theme.menu.gfx.button(pic, x, y)

-- настройка Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ
theme.gfx.cursor(norm, use, x, y)
theme.gfx.mode(mode)
theme.gfx.pad(pad)
theme.gfx.bg(bg)

-- настройка Π·Π²ΡƒΠΊΠ°
theme.snd.click(name);

БущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ чтСния Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚Π΅ΠΌ:

theme.get 'имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹';

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСгда Π² тСкстовой Ρ„ΠΎΡ€ΠΌΠ΅.

theme.set ('имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹', Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚Π΅ΠΌΡ‹ Π½Π° Ρ‚ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ установлСно Π²ΠΎ встроСнной Ρ‚Π΅ΠΌΠ΅ ΠΈΠ³Ρ€Ρ‹:

theme.reset 'имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ';
theme.win.reset();

БущСствуСт функция, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ.

theme.name()

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку -- имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ‚Π΅ΠΌΡ‹. Если ΠΈΠ³Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ собствСнный Ρ„Π°ΠΉΠ» `theme.ini `, функция Π²Π΅Ρ€Π½Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π»ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ собствСнных Ρ‚Π΅ΠΌ ΠΈΠ³Ρ€:

if theme.name() ~= '.' then
        error "Please, enable own theme mode in menu!"
end

Если Π² ΠΈΠ³Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ мноТСствСнных Ρ‚Π΅ΠΌ, Ρ‚ΠΎ имя Ρ‚Π΅ΠΌΡ‹ начинаСтся с Ρ‚ΠΎΡ‡ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

if theme.name() == '.default' then
    -- наша встроСнная Ρ‚Π΅ΠΌΠ° default
elseif theme.name() == 'default' then
    -- стандартная Ρ‚Π΅ΠΌΠ° default Π² INSTEAD
end

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

theme.gfx.bg "dramatic_bg.png";
theme.win.geom (0,0, theme.get 'scr.w', theme.get 'scr.h');
theme.inv.mode 'disabled'

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Π΅ΠΌΡ‹:

theme.scr.w() -- ΡˆΠΈΡ€ΠΈΠ½Π°
theme.scr.w() -- высота

ΠœΠΎΠ΄ΡƒΠ»ΡŒ sprite

ΠœΠΎΠ΄ΡƒΠ»ΡŒ `sprite ` позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с графичСскими изобраТСниями. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ модуля Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅:

require "sprite"

Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» сохранСния, поэтому восстановлСниС состояния спрайтов -- Π·Π°Π΄Π°Ρ‡Π° Π°Π²Ρ‚ΠΎΡ€Π° ΠΈΠ³Ρ€Ρ‹. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `init() ` ΠΈ/ΠΈΠ»ΠΈ `start() `. `start() ` вызываСтся послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ³Ρ€Ρ‹, поэтому Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹.

На самом Π΄Π΅Π»Π΅ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ спрайт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π΄Π²Π° модуля: спрайты ΠΈ пиксСли. Но Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ совмСстно, ΠΎΠ½ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅. НачнСм со спрайтов:

Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹

Для создания спрайта ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ `sprite.new `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

declare 'my_spr' (sprite.new 'gfx/bird.png')
local heart = sprite.new 'heart.png'
local blank = sprite.new (320, 200) -- пустой спрайт 320x200

Π£ созданного спрайтового ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

Π’ качСствС "Ρ†Π²Π΅Ρ‚Π°" ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ строки Π²ΠΈΠ΄Π°: `green `, `red `, `yellow ` ΠΈΠ»ΠΈ `#333333` `, `#2d80ff `...

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

local spr = sprite.new(320, 200)
spr:fill 'blue'
local spr2 = sprite.new 'fish.png'
spr2:draw(spr, 0, 0)

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡˆΡ€ΠΈΡ„Ρ‚Π°ΠΌΠΈ. Π¨Ρ€ΠΈΡ„Ρ‚ создаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `sprite.fnt() `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

local font = sprite.fnt('sans.ttf', 32)

Π£ созданного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ функция:

sprite.font_scaled_size(size)

Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выставил ΠΈΠ³Ρ€ΠΎΠΊ Π² настройках INSTEAD. Если Π²Ρ‹ Π² своСй ΠΈΠ³Ρ€Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ настройку, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для опрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΡˆΡ€ΠΈΡ„Ρ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

local f = sprite.fnt('sans.ttf', 32)
local spr = sprite.new('box:320x200,black')
f:text("HELLO!", 'white'):draw(spr, 0, 0)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, рассмотрим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ примСнСния модуля sprite.

Ѐункция pic

Ѐункция `pic ` ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ спрайт. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½ΠΎΠ²Ρ‹ΠΉ спрайт (Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ эффСктивно), ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ спрайт. Если Π² Ρ‚Π°ΠΊΠΎΠΉ спрайт вносятся измСнСния, Ρ‚ΠΎ эти измСнСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠ°Π΄Ρ€Π΅ ΠΈΠ³Ρ€Ρ‹. Π’Π°ΠΊ, мСняя спрайт ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ:

require "sprite"
require "timer"
local spr = sprite.new(320, 200)

function game:timer()
        local col = { 'red', 'green', 'blue'}
        col = col[rnd(3)]
        spr:fill(col)
        return false -- Π’Π°ΠΆΠ½ΠΎ! Π’Π°ΠΊ, сцСна Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°
end

game.pic = function() return spr end -- функция: Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ
-- спрайт это особый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π½Π΅ строка)

function start()
        timer:set(30)
end

room {
        nam = 'main';
        decor = [[Π“Π˜ΠŸΠΠžΠ—!]];
}

ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° Π² Ρ„ΠΎΠ½

Ѐункция `sprite.scr() ` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ спрайт - Ρ„ΠΎΠ½. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ отрисовку Π² этот спрайт Π² любом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π΅. Π’Π΅ΠΌ самым добиваясь измСнСния Ρ„ΠΎΠ½Π° Π½Π° Π»Π΅Ρ‚Ρƒ, Π±Π΅Π· примСнСния модуля `theme `. НапримСр:

--$Author: Andrew Lobanov

require 'sprite'
require 'theme'
require 'timer'

declare {
   x = 0,
   y = 0,
   dx = 10,
   dy = 10,
}

const {
   w = theme.scr.w(),
   h = theme.scr.h(),
}

instead.fading = false

local bg, red, green

function init()
   theme.set('scr.col.bg', '#000000')
   theme.set('win.col.fg', '#aaaaaa')
   theme.set('win.col.link', '#ffaa00')
   theme.set('win.col.alink', '#ffffff')

   bg = sprite.new(w, h)
   bg:fill('black')
   red = sprite.new(w, h)
   red:fill('#ff0000')
   red = red:alpha(128)
   green = sprite.new(w, h)
   green:fill('#00ff00')
   green = green:alpha(64)
   bg:copy(sprite.scr())
   timer:set(25)
end

function game:timer()
   bg:copy(sprite.scr())
   red:draw(sprite.scr(), x, 0, 128)
   green:draw(sprite.scr(), 0, y, 64)
   x = x + dx
   if x >= w or x == 0 then
      dx = -dx
   end
   y = y + dy
   if y >= h or y == 0 then
      dy = -dy
   end
   return false -- Π’Π°ΠΆΠ½ΠΎ!
end

room {
   nam = 'main',
   disp = 'Test. Test? Test!',
   decor = 'Lorem ipsum';
}

_Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!_ Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ INSTEAD Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ использования ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ сСбя Π² Ρ€Π΅ΠΆΠΈΠΌ "ΠΏΠ°ΡƒΠ·Ρ‹". Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΈΠ· инвСнтаря (курсор ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Π²ΠΈΠ΄ Π½Π° ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΊΠΈ) события Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚. Π­Ρ‚ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π°Π·Ρ€Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡ‚ ΠΈΠ³Ρ€Ρ‹. Если для вашСго творчСского замысла Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ являСтся ΠΏΠΎΠΌΠ΅Ρ…ΠΎΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π°ΠΌ Π½Π΅ нравится Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ анимация Ρ„ΠΎΠ½Π° Π·Π°ΠΌΠΈΡ€Π°Π΅Ρ‚), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π°:

instead.wait_use(false)

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, помСститС Π²Ρ‹Π·ΠΎΠ² Π² `init() ` ΠΈΠ»ΠΈ `start() ` Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой систСмный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ - подстановку, ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΈΠ³Ρ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `img `, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

require "sprite"
require "timer"
require "fmt"

obj {
        nam = '$spr';
        {
                ["ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚"] = sprite.new 'box:32x32,red';
        };
        act = function(s, w)
                return fmt.img(s[w])
        end
}

room {
        nam = 'main';
        decor = [[БСйчас ΠΌΡ‹ вставим спрайт: {$spr|ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚}.]];
}
#+BEGIN_SRC lua

direct Ρ€Π΅ΠΆΠΈΠΌ

Π’ INSTEAD сущСствуСт Ρ€Π΅ΠΆΠΈΠΌ прямого доступа ΠΊ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅. Π’ Ρ‚Π΅ΠΌΠ΅ ΠΎΠ½ задаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

scr.gfx.mode = direct

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² `theme.ini `, ΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ `theme `. Или (Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅), ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

sprite.direct(true)

Если Ρ€Π΅ΠΆΠΈΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ -- функция Π²Π΅Ρ€Π½Π΅Ρ‚ `true `. `sprite.direct() ` Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -- Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ (`true ` -- Ссли `direct ` Π²ΠΊΠ»ΡŽΡ‡Π΅Π½.)

Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈΠ³Ρ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ прямой доступ ΠΊΠΎ всСму ΠΎΠΊΠ½Ρƒ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ отрисовку Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π­ΠΊΡ€Π°Π½ прСдставлСн ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ спрайтом:

sprite.scr()

НапримСр:

require "sprite"
require "timer"
require "theme"

sprite.direct(true)

local stars = {}
local w, h
local colors = {
        "red",
        "green",
        "blue",
        "white",
        "yellow",
        "cyan",
        "gray",
        "#002233",
}
function game:timer()
        local scr = sprite.scr()
        scr:fill 'black'
        for i = 1, #stars do
                local s = stars[i]
                scr:pixel(s.x, s.y, colors[s.dy])
                s.y = s.y + s.dy
                if s.y >= h then
                        s.y = 0
                        s.x = rnd(w) - 1
                        s.dy = rnd(8)
                end
        end
end

function start()
        w, h = theme.scr.w(), theme.scr.h()

        w = std.tonum(w)
        h = std.tonum(h)

        for i = 1, 100 do
                table.insert(stars, { x = rnd(w) - 1, y = rnd(h) - 1, dy = rnd(8) })
        end
        timer:set(30)
end

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

require "timer"
require "sprite"
require "theme"

local spr = sprite

declare {
        fnt = false, ball = false, ballw = 0,
        ballh = 0, bg = false, line = false,
        G = false, by = false, bv = false,
        bx = false, t1 = false,
}

function init()
    fnt = spr.fnt(theme.get 'win.fnt.name', 32);
    ball = fnt:text("INSTEAD 3.0", 'white', 1);
    ballw, ballh = ball:size();
    bg = spr.new 'box:640x480,black';
    line = spr.new 'box:320x8,lightblue';
    spr.direct(true)
end

function start()
    timer:set(20)
    G = 9.81
    by = -ballh
    bv = 0
    bx = 320
    t1 = instead.ticks()
end

function phys()
    local t = timer:get() / 1000;
    bv = bv + G * t;
    by = by + bv * t;
    if by > 400 then
        bv = - bv
    end
end

function game:timer(s)
    local i
    for i = 1, 10 do
        phys()
    end
    if instead.ticks() - t1 >= 20 then
        bg:copy(spr.scr(), 0, 0);
        ball:draw(spr.scr(), (640 - ballw) / 2, by - ballh/2);
        line:draw(spr.scr(), 320/2, 400 + ballh / 2);
        t1 = instead.ticks()
    end
end

_Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!_ `direct ` Ρ€Π΅ΠΆΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для создания простых Π°Ρ€ΠΊΠ°Π΄Π½Ρ‹Ρ… ΠΈΠ³Ρ€. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ. НапримСр, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€Π° управляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

Для этого Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ `instead.mouse_show() `

instead.mouse_show(false)

ΠŸΡ€ΠΈ этом Π² мСню ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° INSTEAD ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ всС Π΅Ρ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π΅Π½.

ИспользованиС sprite совмСстно с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ theme

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `start ` ΠΈ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π΅ΠΌΡ‹, Π² Ρ‚ΠΎΠΌ числС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² качСствС Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ спрайты, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

require "sprite"
require "theme"

function start() -- Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Ρ„ΠΎΠ½ Π½Π° спрайт
        local spr = sprite.new(800, 600)
        spr:fill 'blue'
        spr:fill (100, 100, 32, 60, 'red')
        theme.set('scr.gfx.bg', spr)
end

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π½ΠΎΡΠΈΡ‚ΡŒ Π½Π° Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ статусы, элСмСнты управлСния ΠΈΠ»ΠΈ просто ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π»ΠΎΠΆΠΊΡƒ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этом Π²Ρ‹Π·ΠΎΠ² `theme.get('scr.gfx.bg') ` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π²ΠΈΠ΄Π° `spr:xxxxxxxxxxx `, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ спрайта. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΠΎΠ½ динамичСски, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `sprite.scr() ` ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ `theme.set('scr.gfx.bg', spr) ` с Π½ΠΎΠ²Ρ‹ΠΌΠΈ спрайтами.

ПиксСли

ΠœΠΎΠ΄ΡƒΠ»ΡŒ спрайтов ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ с пиксСльной Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ -- Π½Π°Π±ΠΎΡ€Ρ‹ пиксСлСй, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΈ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π² спрайты.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пиксСлСй осущСствляСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ `pixels.new() `.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

local p1 = pixels.new(320, 200) -- создали пиксСли 320x200
local p2 = pixels.new 'gfx/apple.png' -- создали пиксСли из
-- изобраТСния
local p3 = pixels.new(320, 200, 2) -- создали пиксСли 320x200,
-- ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ отрисовкС ΠΈΡ… Π² спрайт -- Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π΄ΠΎ
-- 640x400

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ пиксСли ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

ΠΏΡ€ΠΈ описании ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ обозначСния: `r `, `g `, `b `, `a ` -- ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ пиксСля: красный, Π·Π΅Π»Π΅Π½Ρ‹ΠΉ, синий, ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ. ВсС значСния ΠΎΡ‚ `0 ` Π΄ΠΎ `255 `). `x `, `y ` - ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π°, `w `, `h ` -- ΡˆΠΈΡ€ΠΈΠ½Π° ΠΈ высота области.

Π’Π°ΠΊΠΆΠ΅, Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡˆΡ€ΠΈΡ„Ρ‚Π°ΠΌΠΈ:

ΠŸΡ€ΠΈ этом, Ρƒ созданного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° "ΡˆΡ€ΠΈΡ„Ρ‚" сущСствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄ `text `:

НапримСр:

local fnt = pixels.fnt("sans.ttf", 64)
local t = fnt:text("HELLO, INSTEAD!", 'black')
pxl:copy_spr(sprite.scr())
pxl2:draw_spr(sprite.scr(), 100, 200);
t:draw_spr(sprite.scr(), 200, 400)

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (Π°Π²Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, АндрСй Π›ΠΎΠ±Π°Π½ΠΎΠ²):

require "sprite"
require "timer"

sprite.direct(true)

declare 'pxl' (false)
declare 't' (0)

function game:timer()
   local x, y, i
   t = t + 1
   for x = 0, 199 do
       for y = 0, 149 do
           i = (x * x + y * y + t)
               pxl:val(x, y, 0, i, i / 2)
       end
   end
   pxl:copy_spr(sprite.scr())
end

function start(load)
   pxl = pixels.new(200, 150, 4)
   timer:set(20)
end

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `pixels ` ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΡƒΠΌΡ‹ ΠŸΠ΅Ρ€Π»ΠΈΠ½Π°. Π’ INSTEAD ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

ВсС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ `[-1; 1] ` Π° Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ snd

ΠœΡ‹ ΡƒΠΆΠ΅ рассматривали Π±Π°Π·ΠΎΠ²Ρ‹Π΅ возмоТности ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ со Π·Π²ΡƒΠΊΠΎΠΌ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ `snd ` ΠΈΠΌΠ΅Π΅Ρ‚ Π΅Ρ‰Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ со Π·Π²ΡƒΠΊΠΎΠΌ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π·Π²ΡƒΠΊ ΠΈ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π² памяти Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½.

require 'snd'
local wav = snd.new 'bark.ogg'

ΠšΡ€ΠΎΠΌΠ΅ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π·Π²ΡƒΠΊ ΠΈΠ· массива lua:

local wav = {}
for i = 1, 10000 do
        table.insert(wav, rnd() * 2 - 1) -- случайныС значСния ΠΎΡ‚ -1 Π΄ΠΎ 1
end

function start()
        local p = snd.new(22050, 1, wave) -- частота, число ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ Π·Π²ΡƒΠΊ
        p:play()
end

Π—Π²ΡƒΠΊ задаСтся Π² Π½ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: `[-1 .. 1] `

Π—Π²ΡƒΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ `:play([chan], [loop]) `, Π³Π΄Π΅ `chan ` -- ΠΊΠ°Π½Π°Π» `(0 - 7) `, `loop ` - Ρ†ΠΈΠΊΠ»Ρ‹ (`0 ` - Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ).

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ модуля:

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° интСрСсная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ -- Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π²ΡƒΠΊΠ° Π½Π° Π»Π΅Ρ‚Ρƒ (ΠΏΠΎΠΊΠ° находится Π² ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ статусС):

require "snd"

function cb(hz, len, data)
        for i = 1, len do
                data[i] = rnd() * 2 - 1
        end
end
function start()
        snd.music_callback(cb)
end

ΠœΠΎΠ΄ΡƒΠ»ΡŒ prefs

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ настройки ΠΈΠ³Ρ€Ρ‹. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, сохранСнная информация Π½Π΅ зависит ΠΎΡ‚ состояния ΠΈΠ³Ρ€Ρ‹. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ систСмы достиТСний ΠΈΠ»ΠΈ счСтчика количСства ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΠ³Ρ€Ρ‹.

По своСй сути `prefs ` это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ сохранСны.

CΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ настройки:

prefs:store()

Настройки ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ автоматичСски ΠΏΡ€ΠΈ сохранСнии ΠΈΠ³Ρ€Ρ‹, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот процСсс, вызывая `prefs:store() `.

Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» с настройками:

prefs:purge()

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° настроСк выполняСтся автоматичСски ΠΏΡ€ΠΈ запускС ΠΈΠ³Ρ€Ρ‹ (ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `start() `), Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ:

prefs:load()

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

-- $Name: ВСст модуля prefs$
-- $Version: 0.1$
-- $Author: instead$

-- ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ click
require "click"
-- ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ prefs
require "prefs"

-- устанавливаСм Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика
prefs.counter = 0;

-- опрСдСляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ отслСТивания количСства "ΠΊΠ»ΠΈΠΊΠΎΠ²"
game.onclick = function(s)
    -- ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ счСтчик
    prefs.counter = prefs.counter + 1;
    -- сохраняСм счСтчик
    prefs:store();
    -- Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сообщСниС
    p("На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ сдСлано ", prefs.counter ," ΠΊΠ»ΠΈΠΊΠΎΠ²");
end;

-- добавляСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠΊΠΈ
game.pic = 'box:320x200,black';

room {
    nam = 'main',
    title = "ΠšΠΎΠΌΠ½Π°Ρ‚Π° ΠΊΠ»ΠΈΠΊΠΎΠ²",
    -- Π΄Π΅Π»Π°Π΅ΠΌ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ статичной части описания
    -- добавляСм описаниС для сцСны
    decor = [[ Π­Ρ‚ΠΎΡ‚ тСст Π±Ρ‹Π» написан ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ
            для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ модуля <<prefs>>.
    ]];
};

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ послС запуска ΠΈΠ³Ρ€Ρ‹ Π·Π°Π½ΠΎΠ²ΠΎ, число Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠΊΠΎΠ² Π½Π΅ обнулится!

ΠœΠΎΠ΄ΡƒΠ»ΡŒ snapshots

ΠœΠΎΠ΄ΡƒΠ»ΡŒ `snapshots ` прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сохранСнныС состояния ΠΈΠ³Ρ€Ρ‹. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΌΠΎΠΆΠ½ΠΎ привСсти ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ выполняСт Π² ΠΈΠ³Ρ€Π΅ дСйствиС, Π²Π΅Π΄ΡƒΡ‰Π΅Π΅ ΠΊ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹ΡˆΡƒ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ позволяСт Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΈΠ³Ρ€Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΈΠ³Ρ€ΠΎΠΊ вСрнСтся ΠΊ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сохранСнному ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΈΠ³Ρ€Ρ‹.

Для создания ΡΠ½Π°ΠΏΡˆΠΎΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ: `snapshots:make() `. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ΠΎ имя слота.

_Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!!!_ Π‘Π½Π°ΠΏΡˆΠΎΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ создан послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ‚Π°ΠΊΡ‚Π° ΠΈΠ³Ρ€Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² этом случаС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π΅ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ сохранСнного состояния ΠΈΠ³Ρ€Ρ‹.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΡΠ½Π°ΠΏΡˆΠΎΡ‚Π° осущСствляСтся `snapshots:restore() `. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ΠΎ имя слота.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ½Π°ΠΏΡˆΠΎΡ‚Π° дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `snapshots:remove() `. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΡΠ½Π°ΠΏΡˆΠΎΡ‚Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ лишнСС мСсто Π² Ρ„Π°ΠΉΠ»Π°Ρ… сохранСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

require "snapshots"

room {
        nam = 'main';
        title = 'Π˜Π³Ρ€Π°';
        onenter = function()
                snapshots:make() -- создали Ρ‚ΠΎΡ‡ΠΊΡƒ восстановлСния
        end;
        decor = [[{#red|ΠšΡ€Π°ΡΠ½ΠΎΠ΅} ΠΈΠ»ΠΈ {#black|Ρ‡Π΅Ρ€Π½ΠΎΠ΅}?]];
}: with {
        obj {
                nam = '#red';
                act = function()
                        p [[Π’Ρ‹ Π²Ρ‹ΠΈΠ³Ρ€Π°Π»ΠΈ!]]
                end;
        };
        obj {
                nam = '#black';
                act = function()
                        walk 'end'
                end;
        }
}

room {
        nam = 'end';
        title = 'ΠšΠΎΠ½Π΅Ρ†';
}: with {
        obj {
                dsc = [[{ΠŸΠ΅Ρ€Π΅ΠΈΠ³Ρ€Π°Ρ‚ΡŒ?}]];
                act = function()
                        snapshots:restore() -- Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ
                end;
        }
}

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π£ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² STEAD3 ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ³Ρ€Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Однако, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ состав этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², хотя Π±Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ свои ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². НиТС прСдставлСн список ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ описаниСм.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ (obj)

ΠšΠΎΠΌΠ½Π°Ρ‚Π° (room)

ΠšΡ€ΠΎΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² `obj `, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ (dlg)

ΠšΡ€ΠΎΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² room, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

Π˜Π³Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠΈΡ€ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ game)

ΠšΡ€ΠΎΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² obj, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

Π˜Π³Ρ€ΠΎΠΊ (player)

ΠšΡ€ΠΎΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² `obj `, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

Бписок Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ связан Π½Π°Π±ΠΎΡ€ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Π§Π°Ρ‰Π΅ всСго Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ тСкстовых строк ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Но Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. НапримСр, список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² `obj ` задаётся Π² Π²ΠΈΠ΄Π΅ списка `{} `, Π° `noinv ` -- Π±ΡƒΠ»Π΅Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ -- это рСакция Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ событиС. Атрибуты ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ Π² основном ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ описания сцСны ΠΈ инвСнтаря.

Если ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π·Π°Π΄Π°Π½ Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `(s) ` -- это сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Атрибуты - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС ΠΌΠΈΡ€Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ….

НиТС Π² справочных цСлях прСдставлСн список Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ (obj ΠΈ room)

Π˜Π³Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠΈΡ€ (game)

ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ;

ПослСсловиС

Π’ΠΎΡ‚ ΠΈ всС, здСсь докумСнтация заканчиваСтся. Но, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, начинаСтся самоС интСрСсноС -- ваша история!

Π― сдСлал ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ INSTEAD Π² 2009 Π³ΠΎΠ΄Ρƒ. Π’ Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ я Π½ΠΈΠΊΠΎΠ³Π΄Π° Π±Ρ‹ Π½Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ моя ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ° (ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ) ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²ΡƒΡ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. БСйчас, ΠΊΠΎΠ³Π΄Π° я ΠΏΠΈΡˆΡƒ это послСсловиС, Π½Π° Π΄Π²ΠΎΡ€Π΅ 2017 Π³ΠΎΠ΄ ΠΈ тСкстовыС ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ всС Π΅Ρ‰Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚. ΠŸΡ€Π°Π²Π΄Π°, ΠΈΡ… влияниС Π½Π° ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Ρƒ ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ минимально. И Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ -- ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ.

На ΠΌΠΎΠΉ взгляд, Ρƒ тСкстографичСских ΠΈΠ³Ρ€ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π». Они Π½Π΅ Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅, ΠΎΠ½ΠΈ Π½Π΅ ΠΎΡ‚Π±ΠΈΡ€Π°ΡŽΡ‚ Π²Π°ΡˆΡƒ Тизнь Π²Π·Π°ΠΌΠ΅Π½ Π½Π° Π²Π΅Ρ‡Π½ΠΎ Π½Π΅ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½Π½ΠΎΠ΅ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, Π½Π΅ Π²Ρ‹Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ вас сутками ΠΏΡ€ΠΎΡΠΈΠΆΠΈΠ²Π°Ρ‚ΡŒ Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠΌ Π² Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎΠΉ нСрвозности... Они ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·ΡΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π΅ ΠΈΠ· ΠΌΠΈΡ€Π° Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΈΠ³Ρ€. И Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΆΠ°Π½Ρ€ ΠΏΠΎ большСй части нСкоммСрчСский -- Π΄Π°ΠΆΠ΅ плюс.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ INSTEAD, Π½Π° ΠΌΠΎΠΉ взгляд, Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π‘Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½ΠΎ мноТСство ΠΈΠ³Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ! Π˜Ρ… Π°Π²Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ Π΄Π΅Π», Π½ΠΎ созданныС ΠΈΠΌΠΈ произвСдСния ΡƒΠΆΠ΅ ΠΆΠΈΠ²ΡƒΡ‚ своСй Тизнью, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡΡΡŒ Π² сознании людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π½ΠΈΡ… ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΈΠ»ΠΈ помнят. ΠŸΡƒΡΡ‚ΡŒ "Ρ‚ΠΈΡ€Π°ΠΆ" этих ΠΈΠ³Ρ€ Π½Π΅ Ρ‚Π°ΠΊ Π²Π΅Π»ΠΈΠΊ, Π½ΠΎ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ я ΡƒΠ²ΠΈΠ΄Π΅Π», ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ "ΠΎΠΏΡ€Π°Π²Π΄Π°Π»ΠΎ" всС ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ усилия Π½Π° Π΄Π²ΠΈΠΆΠΎΠΊ. Π― знаю, Ρ‡Ρ‚ΠΎ это врСмя ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½ΠΎ Π½Π΅ зря. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ я нашСл Π² сСбС силы, ΠΈ сдСлал Π΄Π²ΠΈΠΆΠΎΠΊ Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅, выпустив STEAD3. Π― надСюсь, ΠΎΠ½ понравится ΠΈ Π²Π°ΠΌ.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ этого мСста, я ΠΌΠΎΠ³Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠΆΠ΅Π»Π°Ρ‚ΡŒ Π²Π°ΠΌ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. ВворчСство -- это ΠΈ Π΅ΡΡ‚ΡŒ свобода. :)

Бпасибо ΠΈ ΡƒΠ΄Π°Ρ‡ΠΈ. ΠŸΠ΅Ρ‚Ρ€ ΠšΠΎΡΡ‹Ρ…, ΠΌΠ°Ρ€Ρ‚ 2017.