Игра на Twine Sugarcube или 1000 и 1 страдание (инструкция для начинающих) Часть 4.

Делаем первые квесты и обустраиваем наш дом и город. Учимся работать с изображениями. А также даем персонажу работу и усталость.

ИСПЫТАНИЕ И ВЕДЬМА

Поскольку первый этаж имеет свой целью ознакомительный фрагмент, то я придумал персонажа – Ведьму, которая будет направлять персонажа постигать азы управления. И встречается она только в блоке с МИНИКВЕСТОМ: соответственно, пассаж miniquest приобрел следующий вид:

<<if $story == 12>> ТЕКСТ... РИСУНОК ТЕКСТ... с задачей для ГГ <<set $story = 12.5>> [[ВЕДЬМА ЩЕЛКНУЛА ПАЛЬЦАМИ И ЯРКАЯ ВСПЫШКА ОСЛЕПИЛА ТЕБЯ|street][$room_number =1]] <<elseif $story == 17>>...<</if>>

Как вы видите, тут пришлось отойти от стандартного целого числа в переменной $story. Вместо 12, стало 12.5. Произошло это по тому, что в процессе написания истории ее понадобилось расширить, а число 13 уже было занято. Но проблемой этой не является. Проверяем дальше в игре, равна ли переменная $story 12.5 и пляшем дальше.

УЛИЦА, ГИЛЬДИЯ И ГОСПИТАЛЬ

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

Сейчас нас интересуют только первый ряд и только первые 4 блока.
Сейчас нас интересуют только первый ряд и только первые 4 блока.

Из посещения ведьмы у меня был прямой переход в пассаж street, оттуда в гильдию, далее пара переходов и обратно домой.

Объяснять много не буду, вы у меня уже умные и ничего принципиально нового вы не увидите, поэтому просто скину код пассажей:

ДОМ

/* КНОПКИ В КОМНАТЕ */ [[СПАТЬ|home][$day += 1]] [[НА УЛИЦУ|street]] <<if $story >= 17>> [[ПОДЗЕМЕЛЬЕ|room_choice][$room_number = 1]] <</if>>

УЛИЦА

<<if $story == 12.5>>ТЕКСТ... ИЗОБРАЖЕНИЕ ТЕКСТ... ИЗОБРАЖЕНИЕ ТЕКСТ... [[В ГИЛЬДИЮ|guild][$story = 13]] <<elseif $story == 13>> ТЕКСТ... [[В ГОСПИТАЛЬ|hospital][$story = 14]] <<elseif $story == 15>> ТЕКСТ... [[РАЗВАЛИНЫ ДОМА|home]] <<elseif $story == 16>> ТЕКСТ... ИЗОБРАЖЕНИЕ ТЕКСТ... ИЗОБРАЖЕНИЕ [[В ПОДЗЕМЕЛЬЕ|room_choice][$room_number = 1, $story = 17]] <<elseif $story == 24>> ТЕКСТ...<</if>> <<if $story > 19>> ИЗОБРАЖЕНИЕ <</if>> <<if $story >= 17>> <<if $story >= 22>>[[Сменить место жителсьства|home_purchase]]<</if>> <<if $story >= 18>>[[Поискать другую низкооплачиваемую работу|work]] [[Поискать опасную работу|danger_work]]<</if>> [[ДОМОЙ|home]] [[ГИЛЬДИЯ|guild]] [[ГОСПИТАЛЬ|hospital]] <</if>> <<if $story > 19>> [[БИБЛИОТЕКА|library]] [[СПОРТЗАЛ|gum]] [[ТЕАТР|theater]] <</if>> <<if $story >= 24>> [[ТОРГОВЫЙ ЦЕНТР|shop]] <</if>>

ГИЛЬДИЯ

<<if $story >=19>> <<if $dungeon_hunt <100>>... <<elseif $dungeon_hunt >=100>> Ты слишком устал. Пойди отдохни. <</if>> <</if>> [[ПОИСКАТЬ ЗАДАНИЯ|guild_quests]] [[ОБМЕНЯТЬ КРИСТАЛЫ |guild_money]] <<if $story == 13>><span style="color: Gold;"> Обменяй Кристалы, пока не потерял их и иди на улицу.</span> <</if>> [[НА УЛИЦУ|street]]​

ГОСПИТАЛЬ (ДЛЯ БУДУЩИХ ЗАГОТОВОК ПРИШЛОСЬ СДЕЛАТЬ ВТОРОЙ БЛОК)

[[Узнать про лечение|hospital_treatment]] <<if $story == 14>> ПРЕЖДЕ ЧЕМ ВЕРНУТЬСЯ НА УЛИЦУ, УЗНАЙ ПРО ЛЕЧЕНИЕ <<else>> [[НА УЛИЦУ|street]] <</if>>

ВТОРОЙ БЛОК ГОСПИТАЛЯ

<<if $story <= 17>> ТЕКСТ... (твой множитель урона 0.9)<<set $mul_curse to 0.9>> <<elseif $story == 18>>ТЕКСТ... (твой множитель урона меньше на 0.3) <<set $mul_curse to 0.3>> <<else>>Ты полностью здоров! Тебе ничего не мешает сражаться (нет отрицательных множителей урона)<<set $mul_curse to 0>> <</if>> <<if $story == 14>><<set $story = 15>> ТЕКСТ...<<else>> <</if>> <<if $story == 18 and $money >= 7000>>ТЕКСТ... ИЗОБРАЖЕНИЕ <<set $money to $money-7000>> ТЕКСТ... Даже более того, твоя магическая сила немного возросла и в данный момент составляет целых <span style="color: SkyBlue;">15</span><<set $hero_mana to 15>> единиц.<<set $mul_curse to 0>> Лежа в палате после операции ты размышлял над тем, что тебе делать дальше... 1. Продолжать ходить в то странное подземелье как искатель приключений. 2. Попытаться понять, что это оно из себя представляет. 3. Или же просто попытаться забыть о нем и вновь жить своей старой жизнью. Осталось определиться: [[Просто продолжать ходить в подземелье|hospital][$story = 19]] [[Продолжать ходить и попытаться угадать его тайну|hospital][$story = 20]] [[Забыть о комнате и просто продолжать жить|ending_1]]<</if>> [[ВЕРНУТЬСЯ В ГОСПИТАЛЬ|hospital]]

ИЗОБРАЖЕНИЯ

Итак, добрались до самого интересного. Как же вставлять изображения игру на этом движке? На самом деле есть даже проприетарная возможность работать с изображениями, но все авторы ограничиваются возможностью добавить изображение через HTML разметку.

Я тут выделываться не стал, и сделал как все. Но для наглядности ниже будет показан и способ добавления изображений через SUGARCUBE.

Про вставку изображений вкратце
Про вставку изображений вкратце

Есть 2 основные ссылки на изображение:
1. Веб-ссылка.
2. Ссылка на файл ПК.

Для веб-ссылки имейте ввиду, что нужно указывать именно прямую ссылку на изображение. Обычно в браузере она выглядит так:

Игра на Twine Sugarcube или 1000 и 1 страдание (инструкция для начинающих) Часть 4.

Для ПК (локальных файлов) тоже есть ньюансы. HTML файл будет ссылаться на свое местоположение, но даже так, оно не работает, если закинуть HTML файл и изображения в одну папку. Для изображений обязательно должна быть своя папка в папке с игрой (например у меня папка img).

Вот пример

ИЗОБРАЖЕНИЕ ИЗ ИНТЕРНЕТА <img src="https://sun9-80.userapi.com/impg/mmlF4nntqNgonOuGxjs6SFNE6Z-qRTtRGDWpxA/eNt-xrr9AlE.jpg?size=234x263&quality=95&sign=bda83c30a5aff57ca6b59428f675edf9&type=album" alt="Название изображения"> ИЗОБРАЖЕНИЕ С ПК <img src="img\20.png" alt="Название изображения"> ИЗОБРАЖЕНИЕ С ПК <img src="img/20.png" alt="Название изображения"> ИЗОБРАЖЕНИЕ С ПК [img[img/20.png]]
Игра на Twine Sugarcube или 1000 и 1 страдание (инструкция для начинающих) Часть 4.

Если мы хотим разместить изображение по центру и хотим сделать его определенной ширины, то пишем следующее:

<img src="ССЫЛКА НА ФАЙЛ" style="display:block; margin:auto; max-width:800px;" alt="ОПИСАНИЕ ИЗОБРАЖЕНИЯ">

В этом мне тоже помог чат GPT, так что не забываем не стесняться задавать ему свои глупые вопросы, но не ждите, что ответ будет корректным. Особенно на русском языке.

Игра на Twine Sugarcube или 1000 и 1 страдание (инструкция для начинающих) Часть 4.

Кстати, вторую часть текста: ту, что про скрипт, я не писал. Все итак корректно работает.

Я в принципе в половине гайдов что-то делал не так, и тем не менее (почти) все работает. В общем:

Игра на Twine Sugarcube или 1000 и 1 страдание (инструкция для начинающих) Часть 4.

И еще один секрет: если нет своего сервера, но хочется разместить изображения из интернета, то кидаем эти изображения себе на страницу в соц сетях, и указываем прямую ссылку на ваше изображение. Главное, чтобы эта соц-сеть не была заблокирована в Вашем регионе. Ну и в принципе не забываем про законодательство Вашей страны и трижды думайте, что выгружать в соц сети.

УСЛОВИЕ ДЛЯ ПОЯВЛЕНИЯ БОССА

Далее по игре, мне захотелось, чтобы я не мог попасть ко боссу, пока не выполню определенные условия. Решил поступить просто, и организовал перенос к Ведьме, которая находилась в блоке с миниквестами:

<<if $story <= 25>> Стоило тебе войти в финальную, 10-ю комнату, как под твоими ногами активировалась ловушка телепортации и тебя перенесло в другое место. [[ДАЛЕЕ|miniquest]] <<elseif $story == 26>>...<</if>>

Как видите, пока я не пройду сюжет (переменную $story) до 25, будет все время кидать в блок с миниквестом).

УСТАЛОСТЬ

Теперь поговорим об усталости. Если бы ее не было, то работа по накоплению денег и прокачке силы выполнялась бы простым закликиванием. Меня это не устраивает, поэтому добавляем в StoryInit переменную $dungeon_hunt, а в StoryCaption пишем:

Усталость: $dungeon_hunt

Суть ее будет состоять в том, что у героя теперь есть усталость, и если она больше 100, то герою нужно будет отдохнуть.

Угадайте, что я буду добавлять в код? Правильно, новые <<if>>

Игра на Twine Sugarcube или 1000 и 1 страдание (инструкция для начинающих) Часть 4.

Покажу на примере блока с работой (добавил его в игру позже).

<<if $dungeon_hunt <100>><<set $easy_work to random(1, 2)>> <<if $easy_work == 1>>Даже такой человек, как ты справится с работой дворника. <img src="https://sun1-25.userapi.com/impg/k-DXXIglxKJEZVCVf6KQNErpMQLL34cNJL4v3A/8zxlAxz6zTE.jpg?size=1280x720&quality=96&sign=745a3b2bb82792c866e17ccaed08e66e&c_uniq_tag=S3U-Qlk6LekkYwdn4e0Y7Ob0u96NgfZwYYjvER9-044&type=album" style="display:block; margin:auto; max-width:800px;" alt="КАРТИНКА ДВОРНИКА"> <<elseif $easy_work == 2>> Как хорошо, что ты в детстве ходил в театральный кружок. Тебя наняли в качетстве массовки. <img src="https://sun9-32.userapi.com/c836130/v836130445/57c0a/8l6IHz4DldE.jpg" style="display:block; margin:auto; max-width:800px;" alt="КАРТИНКА ДВОРНИКА"><<elseif $easy_work == 2>> <</if>> <<set $money to $money+50>> Ты заработал <span style="color: Gold;">50 монет</span>.<<set $dungeon_hunt += 20>>Усталость +20. <<elseif $dungeon_hunt >=100>> Ты слишком устал. Пойди отдохни. <</if>> [[НА УЛИЦУ|street]]

Как видите, тут все просто, главное не перепутать блоки с <<if>><</if>> и понять, куда именно Вам надо это ставить.

И, конечно, добавляем кнопку отдыха дома:

[[СПАТЬ|home][$day += 1, $dungeon_hunt = 0]] [[НА УЛИЦУ|street]] <<if $story >= 17>> <<if $dungeon_hunt <= 99>> [[ПОДЗЕМЕЛЬЕ|room_choice][$room_number = 1]] <</if>> <<if $dungeon_hunt >= 100>> ТЫ СЛИШКОМ УСТАЛ ДЛЯ ПОДЗЕМЕЛЬЯ <</if>> <</if>>

Во всем этом нас интересует только: [[СПАТЬ|home][$day += 1, $dungeon_hunt = 0]]

ИЗЛЕЧЕНИЕ И ЧАСТИЧНОЕ ВОССТАНОВЛЕНИЕ ЗДОРОВЬЯ

Дальше пойдет блок, который, скорее всего никому, кроме меня не понадобится, но тем не менее я его укажу. Суть в том, что по началу в игре персонаж ослаблен и это должно было влиять на него в игре. Поэтому и была изначально добавлена переменная $mul_curse. Как именно она работает мы уже разбирали в блоке с боем. Пришло время лечить главного героя в 2 этапа.

В пассаже hospital пишем:

<<if $story < 19>>[[Узнать про лечение|hospital_treatment]]<</if>> <<if $story == 14>>ПРЕЖДЕ ЧЕМ ВЕРНУТЬСЯ НА УЛИЦУ, УЗНАЙ ПРО ЛЕЧЕНИЕ<<else>>[[НА УЛИЦУ|street]]<</if>>

А в пассаже hospital_treatment (если у Вас есть какое-то событие, завязанное на локацию, то лучше его выносить в отдельный пассаж. Так эти самые события намного проще оформлять ) пишем:

<<if $story <= 17>>Текст из игры... Все это не дает тебе шансов выжить в бою даже с маленьким монстром. (твой множитель урона меньше на 0.9) <<set $mul_curse to 0.9>> <<elseif $story == 18>>Текст из игры... Пускай и покареженый, но ты все же искатель приключения и способен сразиться с не слишком сильным монстром. (твой множитель урона меньше на 0.3) <<set $mul_curse to 0.3>> <<else>>Ты полностью здоров! Тебе ничего не мешает сражаться (нет отрицательных множителей урона)<<set $mul_curse to 0>><</if>> <<if $story == 14>><<set $story = 15>> Текст из игры... Начался долгий торг, который закончился лишь спустя час, но по итогу тебе лечение насчитали в <span style="color: Gold;"> 10000</span> монет: <span style="color: Gold;"> 3000</span> за зелье и <span style="color: Gold;"> 7000</span> за лечение. <</if>> <<if $story == 18 and $money >= 7000>> Текст из игры... Операция по восстановлению магической силы была очень долгой и опасной для твоей жизни. <img src="https://i.pinimg.com/originals/06/44/b3/0644b3296875eef02222fe0716589b82.jpg" style="display:block; margin:auto; max-width:800px;" alt="КАРТИНКА ЛЕЧЕНИЯ"> <<set $money to $money-7000>> Текст из игры... Даже более того, твоя магическая сила немного возросла и в данный момент составляет целых <span style="color: SkyBlue;">15</span><<set $hero_mana to 15>> единиц.<<set $mul_curse to 0>> Текст из игры... Осталось определиться: [[Просто продолжать ходить в подземелье|hospital][$story = 19]] [[Продолжать ходить и попытаться угадать его тайну|hospital][$story = 20]] [[Забыть о комнате и просто продолжать жить|ending_1]]<</if>> [[ВЕРНУТЬСЯ В ГОСПИТАЛЬ|hospital]]

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

Любой разработчик, когда хочет заявить о 8 часах геймплея, но не хватает опыта
Любой разработчик, когда хочет заявить о 8 часах геймплея, но не хватает опыта

Так же была добавлена ложная концовка: [[Забыть о комнате и просто продолжать жить|ending_1]].

Но так как гринд 10к монет на лечение занял бы просто прорву времени, я решил упростить действия и добавил в подземелье в сокровищах несколько сюжетных роялей. А именно, как только накапливается 3000 золота (2-3 неудачных или 1-2 удачных забега), дается зелье лечения.

В пассаже с сокровищами treasure дописываем следующее:

<<if $story == 8>> ТУТ БЫЛ ТЕКСТ ПРО ЧЕРНЫЕ БОМБЫ, КОТОРЫЕ УСИЛИВАЮТ ГГ В НАЧАЛЕ ИГРЫ <<elseif $story == 17 and $money >= 3000>> В этот раз тебе повезло намного сильнее. Даже невероятно повезло! В старом сундуке лежало зелье лечения высшего класса. Именно то, что нужно было тебе купить в госпитале! <img src="https://sun9-56.userapi.com/impg/jwC3RNNYYhiW1iXAhhX6INXNXNzs3_bjSFw8VA/ZOjtn6CVPgg.jpg?size=1400x896&quality=95&sign=74e84f93ccff570dd9d58e561db54945&type=album" style="display:block; margin:auto; max-width:800px;" alt="ЗЕЛЬЕ ЛЕЧЕНИЯ"> Конечно, было очень странным, что в подземелье тебе попалось именно то, что нужно было... Но да черт с ним. Откупорив крышку, ты залпом выпиваешь зелье. И уже спустя пару секунд ты чувствуешь, что твое тело преображается: отрастает рука, восстанавливается зрение и слух, перестают болеть ноги. <img src="https://i.imgur.com/Igx4VXA.gif" \/> Ты, словно, новый человек! Часть глубокий травм еще осталась, но по крайней мере ты можешь за себя постоять. Твой множитель урона значительно возрос!<<set $mul_curse to 0.3>> <span style="color: Gold;">У ТЕБЯ УЖЕ ЕСТЬ $money ЗОЛОТА. ОСТАЛОСЬ НАКОПИТЬ 7000 ДО ЛЕЧЕНИЯ!</span><<set $story = 18>> [[К ВЫБОРУ СЛЕДУЮЩЕЙ КОМНАТЫ|room_choice][$room_number +=1]] <<else>>

Как видите, тут я впервые добавил анимированную гифку <img src="https://i.imgur.com/Igx4VXA.gif" \/>. К несчастью, я пока так и не понял, как ее масштабировать под ширину экрана, поэтому она пока еще такая маленькая.

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

Напоминаю про бота. Не обязательно пользоваться именно этим, но в принципе на использование ботов я Вас сильно агитирую.

55
Начать дискуссию