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

Завершаем разработку игры. Прокачаем все характеристики персонажа, создадим квест победы над боссом и добавим пару мелочей.

ПРОКАЧКА ОСТАЛЬНЫХ ХАРАКТЕРИСТИК

Тут много разглагольствовать не буду. Все по аналогии с библиотекой из 5 части.

Создаем пассажи (переход опять же через улицу): gum, theater и немного расширяем guild. А так же не забываем добавить на улице появление этих мест чуть позже. не люблю, когда в начале игры глаза разбегаются от выбора мест.

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

Пассаж street дополняем:

<<if $story > 19>> [[БИБЛИОТЕКА|library]] [[СПОРТЗАЛ|gum]] [[ТЕАТР|theater]]<</if>>

Как видно, появляются они одновременно с библиотекой.

Пассаж gum:

<img src="ССЫЛКА" style="display:block; margin:auto; max-width:800px;" alt="СПОРТЗАЛ"> <<if $dungeon_hunt <100>> <<if $hero_vitality <20>> <<if $money >= 2000>> [[Тренировать общее здоровье (простая тренировка) (2000)|gum][$hero_vitality += 1, $dungeon_hunt += 30, $money -= 2000]] <<elseif $money < 2000>> Не хватает денег <</if>> <<elseif $hero_vitality <40 >> Нужны продвинутые тренировки <</if>> <<if $hero_strength <20>> <<if $money >= 2000>> [[Тренировать силу (простая тренировка) (2000)|gum][$hero_strength += 1, $dungeon_hunt += 30, $money -= 2000]] <<elseif $money < 2000>> Не хватает денег <</if>> <<elseif $hero_strength <40 >> Нужны продвинутые тренировки <</if>> <<if $hero_agility <20>> <<if $money >= 2000>> [[Тренировать ловкость (простая тренировка) (2000)|gum][$hero_agility += 1, $dungeon_hunt += 30, $money -= 2000]] <<elseif $money < 2000>> Не хватает денег <</if>> <<elseif $hero_agility <40 >> Нужны продвинутые тренировки <</if>> <<if $hero_stamina <20>> <<if $money >= 2000>> [[Тренировать выносливость (простая тренировка) (2000)|gum][$hero_stamina += 1, $dungeon_hunt += 30, $money -= 2000]] <<elseif $money < 2000>> Не хватает денег <</if>> <<elseif $hero_stamina <40 >> Нужны продвинутые тренировки <</if>> <<elseif $dungeon_hunt >=100>> Ты слишком устал. Пойди отдохни. <</if>> [[НА УЛИЦУ|street]]

Пассаж theater представляет собой укороченную версию кода выше:

<img src="ССЫЛКА" style="display:block; margin:auto; max-width:800px;" alt="ТАКТИЧЕСКАЯ ШАПКА"> <<if $dungeon_hunt <100>> <<if $hero_charisma <20>> <<if $money >= 2000>> [[Взять уроки актерского мастерства (простая тренировка) (2000)|theater][$hero_charisma += 1, $dungeon_hunt += 30, $money -= 2000]] <<elseif $money < 2000>> Не хватает денег <</if>> <<elseif $hero_charisma <40 >> Нужны продвинутые тренировки <</if>> <<elseif $dungeon_hunt >=100>> Ты слишком устал. Пойди отдохни. <</if>> [[НА УЛИЦУ|street]]

Пассаж guild дополняем:

<<if $story >=19>> <<if $dungeon_hunt <100>> <<if $hero_mana <20>> <<if $money >= 2000>> [[Тренироваться у магов (простая тренировка) (2000)|guild][$hero_mana += 1, $dungeon_hunt += 30, $money -= 2000]] <<elseif $money < 2000>> Не хватает денег <</if>> <<elseif $hero_mana <40 >> Нужны продвинутые тренировки <</if>>

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

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

Пассаж curse:

<<set $random_curse to random(1, 3)>> <<if $random_curse == 1>> <<if $crystal <= 20>> <<set $crystal to 0 >> Твой мешок порвался и ты потерял <span style="color: SkyBlue;"> Все свои кристалы</span><<else>> <<set $crystal to $crystal - 20 >> Твой мешок порвался и ты потерял <span style="color: SkyBlue;"> 20 кристалов</span> <</if>> <<elseif $random_curse == 2>> <<if $money <= 200>> Твой мешок порвался и ты потерял <span style="color: Gold;"> Все свои монеты</span><<else>> Твой мешок порвался и ты потерял <span style="color: Gold;"> 200 монет</span> <</if>> <<elseif $random_curse == 3>> <img src="ССЫЛКА" style="display:block; margin:auto; max-width:800px;" alt="ПРОКЛЯТИЕ"> Заходя в комнату ты чувствуешь, как проклятая сила наполняет тебя. Твой множитель урона немного упал!<<set $mul_curse += 0.1>> <</if>> [[СЛЕДУЮЩАЯ КОМНАТА|room_choice][$room_number +=1]]

Пассаж treasure дополняем кодом:

<<if $story == 8>> ТУТ ПРО ЧЕРНЫЕ БОМБЫ <<elseif $story == 17 and $money >= 3000>> ТУТ ПРО ЗЕЛЬЕ ЛЕЧЕНИЯ <<else>> <<set $random_treasure to random(1, 2)>><<if $random_treasure == 1>> <<set $crystal to $crystal + 50 >>Ты нашел <span style="color: SkyBlue;"> 50 кристалов</span> <<elseif $random_treasure == 2>>Заходя в комнату ты чувствуешь, как волшебная сила наполняет тебя. Твой множитель урона немного вырос!<<set $mul_blessing += 0.1>><</if>> [[К ВЫБОРУ СЛЕДУЮЩЕЙ КОМНАТЫ|room_choice][$room_number +=1]] <</if>>

Для того, чтобы бонусы не копились вечно, в пассаже home дописываем в самом конце:

/* СНИМАЕТ МНОЖИТЕЛИ УРОНА */ <<if $story <=17>><<set $mul_curse to 0.9>> <<elseif $story == 18>><<set $mul_curse to 0.3>> <<elseif $story >= 19>><<set $mul_curse to 0>> <</if>> <<if $mul_blessing != 0>><<set $mul_blessing = 0>> <</if>>​

В данном случае:
$story = 17 это ослабленный персонаж в начале игры (для этого и нужный был и бомбы)
$story = 18 после зелья лечения в комнате с сокровищами (персонаж выздоровел, но не полностью)
$story = 19 (и позднее), когда персонаж полностью здоров

БОСС ЭТАЖА

Итак. Ранее мной были прописаны условия, что ведьма не пропустит до босса этажа, пока не будут выполнены следующие условия: 1. исцеление ГГ, 2. покупка нового дома, 3. поход в душ и 4. покупка новых вещей (чуть позже добавлю усиление от этих самых вещей). Все эти шаги сопровождались повышением переменной $story.

Вообще бой с боссом, как оказалось, отдельная головная боль. Как его сделать интересным для игрока? Можно надуть его статы, но тогда это будет всего лишь один из мобов, пускай и сильных. Либо можно сделать для победы босса выполнение определенных скрытых условий, либо же отдельный квест для победы над боссом. Я решил пойти по последнему пути. Тем более, что весь первый этаж вместе с боссом преследует цель обучить игрока механикам игры.

Пассаж boss_battle на первых этапах просто переносил к ведьме, которая дежурной фразой говорила, что именно нужно сделать герою, чтобы пройти дальше:

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

Позже пассаж boss_battle дополнился следующим кодом:

... <<elseif $story == 26>> Ну вот и настал момент истины. Открыв ворота, ты увидел перед собой ГОБЛИНА-МАГА. <img src="ССЫЛКА" style="display:block; margin:auto; max-width:800px;" alt="ГОБЛИН БОСС"> Это очень опасный противник даже для группы искателей, а ты один. Поначалу у тебя были мысли о том, что в таком странном подземелье, как это у тебя есть еще есть шансы одолеть настолько опасного противника. <<if $hero_vitality >= 15 and $hero_mana >= 15 and $hero_strength >= 15 and $hero_intelligence >= 15 and $hero_agility >= 15 and $hero_stamina >= 15>>И ты даже подумал, что тебе удастся его одолеть. Ведь ты так усердно тренировался. Но твой противник силен и опытен. <<else>> Но ты чувствуешь, что в голой мощи он тебя опережает на голову. <</if>> Ты решаешь бежать, чтобы подготовиться. <img src="ССЫЛКА" style="display:block; margin:auto; max-width:800px;" alt="ПОРАЖЕНИЕ ПИРАТ"> <span style="color: Gold;">Тебе нужно сходить в библиотеку ИЛИ пораспрашивать людей в гильдии. Может там тебе смогут подсказать, как одолеть таких опасных противников... </span> [[ДОМОЙ|home][$room_number = 1]] <<set $story = 27>> <<elseif $story == 28>> Ты решаешь бежать, чтобы подготовиться. <img src="ССЫЛКА" style="display:block; margin:auto; max-width:800px;" alt="ПОРАЖЕНИЕ ПИРАТ"> <span style="color: Gold;">Сначала тебе нужно подкачаться.</span> [[ДОМОЙ|home][$room_number = 1]] <<elseif $story == 29>> В этот раз ты был готов. Это сражение было даже слишком простым, благо ты смог раздобыть нужные знания. И вот, спустя, несколько мгновений, ты стоишь над побежденным противником. Это твоя чистая победа, завоеванная твоим упорством и разумом. <img src="ССЫЛКА" style="display:block; margin:auto; max-width:800px;" alt="ПОБЕДА МУРАВЕЙ"> <<set $hero_will =+5>> <span style="color: DarkRed;">ВОЛЯ +5 </span> А еще с противника тебе выпало целых <span style="color: SkyBlue;"><img src="ССЫЛКА" alt="КРИСТАЛ"> 500 кристаллов </span><<set $crystal to $crystal + 500>> <<set $story = 30>> Время идти дальше. [[ДАЛЬШЕ|boss_battle]] <<elseif $story == 30>> Все это время гоблин-маг охранял вход в новое помещение. Когда ты зашел, то увидел перед собой невероятной красоты фонтан, но что самое интересное, он излучал сильнейшую на твоей памяти силу благословения. <img src="ССЫЛКА" style="display:block; margin:auto; max-width:800px;" alt="ФОНТАН"> Не раздумывая ты в него окунулся. Ты чувствовал, как усталость уходит и твое тело крепнет под силой чудодейственного благословения. А когда ты вышел, то не узнал себя в отражении. <img src="ССЫЛКА" style="display:block; margin:auto; max-width:800px;" alt="НОВОЕ ТЕЛО"> <<set $story = 31>>ПОХОЖЕ, ЭТО НАЧАЛО ТВОЕЙ НОВОЙ ЖИЗНИ В НОВОМ ТЕЛЕ! [[ДОМОЙ|home][$room_number = 1]] <</if>>

Как видно, принципиально сложного тут ничего нет. И все приемы я показывал ранее.

ФИНАЛЬНАЯ ПРОКАЧКА ПЕРЕД БОССОМ

Все же я решил оставить за кадром поход в библиотеку или гильдию для изучения босса. Там все равно был только текст и повышение $story.

А саму прокачку персонажа мы реализовали немногим ранее в пассажах gum, theater и guild.

ПОДСКАЗКИ ПО ПРОХОЖДЕНИЮ

Но вот дома код немного расширился.

Пассаж home дополнился следующим кодом:

/* ПОДСКАЗКИ ПРОХОЖДЕНИЯ */<<if $story == 15>> ТЫ СЛИШКОМ УСТАЛ, ТЕБЕ НУЖНО ПОСПАТЬ.<<set $story = 16>> <<elseif $story == 16>> ТЕБЕ НУЖНО ПОЙТИ НА УЛИЦУ И НАЙТИ СПОСОБ ОТКРЫТЬ ПОРТАЛ В ПОДЗЕМЕЛЬЕ. ДАЛЬНЕЙШИЕ ПОДСКАЗКИ... <<elseif $story == 24>>Сходи в магазин (на улице) и купи новые вещи. Тебе требуется обновить: шлем, нагрудник, поножи и обувь. Теперь тебе доступен ГАРДЕРОБ для смены одежды (только в доме). <<if $cap_1 == 2 and $top_1 == 2 and $legs_1 == 2 and $boots_1 == 2>> <<set $story = 25>> Ты выполнил просьбу Ведьмы. Сходи и покажить перед ней в новой одежде. <</if>> <<elseif $story == 25>>Ты выполнил просьбу Ведьмы. Сходи и покажить перед ней в новой одежде. ДАЛЬНЕЙШИЕ ПОДСКАЗКИ... <<elseif $story == 28>>Поними свои основные характеристики минимум до 15. <<elseif $story == 29>>Пойди и сразись с боссом. <<elseif $story == 31>> КОНЕЦ ОЗНАКОМИТЕЛЬНОГО ФРАГМЕНТА. <</if>> <<if $story == 18 and $money < 7000>> Даже, если не получается, продолжай ходить в подземелье. До 7000 монет осталось немного. Сразу после сокровищ не стесняйся ходить в гильдию чтобы обменять кристаллы на монеты. Еще, говорят, на улице можно заработать, но там бывает опаснее, чем в подземелье. <</if>> <<if $story == 22>> Даже если ты помоешься в ближайшем ручье, это не сильно спасет ситуацию. Надо найти жилье хотя бы с минимальными удобствами, даже если за это придется платить. <</if>>

Код ниже в самом конце пассажа:

<<if $story == 28 and $hero_vitality >= 15 and $hero_mana >= 15 and $hero_strength >= 15 and $hero_intelligence >= 15 and $hero_agility >= 15 and $hero_stamina >= 15>> <<set $story = 29>> <</if>>

На что я тут хотел обратить внимание...

Помимо подсказок в зависимости от этапа истории есть 2 куска кода: Раз

<<if $cap_1 == 2 and $top_1 == 2 and $legs_1 == 2 and $boots_1 == 2>> <<set $story = 25>>

И два

<<if $story == 28 and $hero_vitality >= 15 and $hero_mana >= 15 and $hero_strength >= 15 and $hero_intelligence >= 15 and $hero_agility >= 15 and $hero_stamina >= 15>> <<set $story = 29>> <</if>>

То есть в комнате при выполнении определенных условий (в данном случае герой надел определенное шмотки и далее прокачал характеристики до 15 уровня) история движется дальше через <<set $story = «число»>>

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

Пару советов напоследок

1. Всегда сохраняйтесь и пересохраняйтесь. А еще делайте резервные копии. Что браузер, что ПК - вещь не настолько надежная, как кажется.

И однажды вы можете закрыть браузер в таком состоянии:

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

А открыть в таком:

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

Мое, да и Ваше, состояние будет в таком случае выглядеть как-то так:

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

И будете вы, как и я писать все заново ,если вообще запал останется.

2. Если все же решили изучить SUGARCUBE по подробнее, то 99% игр на нем можно скачать в виде HTML файла, открыть в twine и изучить подробнее. Но я советую попробовать начать с перевода (большинство на английском языке). Вы теперь понимаете, где код игры, а где просто текст, но да и с помощью любого редактора можно перевести эти игры. Так вы: а) поднимите скилл в английском (а этот язык своей актуальности не потеряет еще долго) б) лучше поймете движок игры.

Ниже прикрепляю ссылку на игру. Если есть желание, можете подробнее изучить.

99
6 комментариев

Что это за технологии? Непонятно какой тип игры в этих статьях

1

Добавил в первой части. Спасибо.

Администрация, сделайте уже наконец раздел "Уроки". Зачем засирать такой прекрасный раздел?

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

1

А у вас ссылка того, протухла.